diff --git a/.gitignore b/.gitignore index 6b4deab..664c8028 100644 --- a/.gitignore +++ b/.gitignore
@@ -184,7 +184,6 @@ /internal_gyp /ios/build/util/CANARY_VERSION /ios/third_party/gcdwebserver/src -/ios_internal/ /llvm /media/cast/logging/cast_logging_proto_lib.xml /media/cdm/api @@ -245,7 +244,6 @@ /remoting/appengine/ /remoting/host/installer/linux/internal/ /remoting/internal/ -/remoting/ios/ /remoting/proto/chromotocol_proto_lib.xml /remoting/remoting_core_resources.xml /remoting/remoting_elevated_controller.xml
diff --git a/AUTHORS b/AUTHORS index b91daf7f..9611735 100644 --- a/AUTHORS +++ b/AUTHORS
@@ -408,6 +408,7 @@ Mihai Tica <mitica@adobe.com> Mike Tilburg <mtilburg@adobe.com> Mikhail Pozdnyakov <mikhail.pozdnyakov@intel.com> +Milko Leporis <milko.leporis@imgtec.com> Milton Chiang <milton.chiang@mediatek.com> Mingmin Xie <melvinxie@gmail.com> Minsoo Max Koo <msu.koo@samsung.com>
diff --git a/DEPS b/DEPS index f65b6c2..ab7526d 100644 --- a/DEPS +++ b/DEPS
@@ -39,11 +39,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': '9d55297f1fd1ed0f74277fd95b4c59608220aa77', + 'skia_revision': '3ebd050be551e9d1364dbd115708e8f86397cd6f', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': '3f8edd56affda4c6c13a570144769de33ff2ac52', + 'v8_revision': 'b62de759e30eee4df3a77792b152e4c1b8a431d1', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other. @@ -51,7 +51,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': '7718c05b7966967bb01b28a93b7a677b4b31642a', + 'angle_revision': 'd1c46228efe7a0dcaf45d3d6068b3c7a58c65cfa', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling build tools # and whatever else without interference from each other. @@ -87,7 +87,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling NaCl # and whatever else without interference from each other. - 'nacl_revision': '003407c34cce91fa423ca843656c8eb1bf46a60a', + 'nacl_revision': '93e53f372dd83f5e962a553dd8785547ec04d4d0', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling dEQP # and whatever else without interference from each other. @@ -110,7 +110,7 @@ deps = { 'src/breakpad/src': - Var('chromium_git') + '/breakpad/breakpad/src.git' + '@' + '60f99d4c6de8187b65f4999cc42f30e168655086', + Var('chromium_git') + '/breakpad/breakpad/src.git' + '@' + '7fef95a322beedaddcca627e1a88b54411f586da', 'src/buildtools': Var('chromium_git') + '/chromium/buildtools.git' + '@' + Var('buildtools_revision'), @@ -191,7 +191,7 @@ Var('chromium_git') + '/chromium/third_party/ffmpeg.git' + '@' + 'e6e47f514216bbcdbfe796eb1f398c9afece93c8', 'src/third_party/libjingle/source/talk': - Var('chromium_git') + '/external/webrtc/trunk/talk.git' + '@' + 'd89324aa3d7d705c3d8704dd6f57409920f2c647', # commit position 11498 + Var('chromium_git') + '/external/webrtc/trunk/talk.git' + '@' + '01cbe5bbcb4412882bc787c50c987de64787a37a', # commit position 11522 'src/third_party/usrsctp/usrsctplib': Var('chromium_git') + '/external/github.com/sctplab/usrsctp' + '@' + 'c60ec8b35c3fe6027d7a3faae89d1c8d7dd3ce98', @@ -200,7 +200,7 @@ Var('chromium_git') + '/chromium/deps/libsrtp.git' + '@' + '9cc4f2f799887e5d64bd28c159ea34b413f6be31', # from svn revision 295151 'src/third_party/yasm/source/patched-yasm': - Var('chromium_git') + '/chromium/deps/yasm/patched-yasm.git' + '@' + '4671120cd8558ce62ee8672ebf3eb6f5216f909b', + Var('chromium_git') + '/chromium/deps/yasm/patched-yasm.git' + '@' + '7da28c6c7c6a1387217352ce02b31754deb54d2a', 'src/third_party/libjpeg_turbo': Var('chromium_git') + '/chromium/deps/libjpeg_turbo.git' + '@' + 'e4e75037f29745f1546b6ebf5cf532e841c04c2c', @@ -215,7 +215,7 @@ Var('chromium_git') + '/native_client/src/third_party/scons-2.0.1.git' + '@' + '1c1550e17fc26355d08627fbdec13d8291227067', 'src/third_party/webrtc': - Var('chromium_git') + '/external/webrtc/trunk/webrtc.git' + '@' + '4e5c0a064d09fcdcb1883ed7ff682a9aec817dc9', # commit position 11510 + Var('chromium_git') + '/external/webrtc/trunk/webrtc.git' + '@' + '4def4205b4932e1c3d5f004b67a723345d1674ed', # commit position 11523 'src/third_party/openmax_dl': Var('chromium_git') + '/external/webrtc/deps/third_party/openmax.git' + '@' + Var('openmax_dl_revision'), @@ -275,7 +275,7 @@ 'src/third_party/catapult': Var('chromium_git') + '/external/github.com/catapult-project/catapult.git' + '@' + - 'a4c8174b45bc1bd574307c91467f14f7144c2714', + '38b9471a8e056f5cf3e83cc7d84cdf77569a6f5c', 'src/third_party/openh264/src': Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + 'b37cda248234162033e3e11b0335f3131cdfe488',
diff --git a/PRESUBMIT.py b/PRESUBMIT.py index de7d443..f7d2047 100644 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py
@@ -177,7 +177,8 @@ r"simple_platform_shared_buffer_posix\.cc$", r"^net[\\\/]disk_cache[\\\/]cache_util\.cc$", r"^net[\\\/]url_request[\\\/]test_url_fetcher_factory\.cc$", - r"^remoting[\\\/]host[\\\/]gnubby_auth_handler_posix\.cc$", + r"^remoting[\\\/]host[\\\/]security_key[\\\/]" + "gnubby_auth_handler_linux\.cc$", r"^ui[\\\/]ozone[\\\/]platform[\\\/]drm[\\\/]host[\\\/]" "drm_display_host_manager\.cc$", ),
diff --git a/WATCHLISTS b/WATCHLISTS index 1054180..7894764 100644 --- a/WATCHLISTS +++ b/WATCHLISTS
@@ -340,10 +340,6 @@ 'media/cdm/|' \ 'third_party/widevine/cdm/' }, - 'enhanced_bookmarks': { - 'filepath': 'chrome/browser/enhanced_bookmarks/' \ - '|components/enhanced_bookmarks/' - }, 'enhanced_bookmarks_android': { 'filepath': 'chrome/android/java/src/org/chromium/'\ 'chrome/browser/enhancedbookmarks/|'\ @@ -422,6 +418,10 @@ 'content/public/browser/indexed_db|'\ 'content/test/data/indexeddb', }, + 'ink_drop': { + 'filepath': 'ui/views/animation/test/.*ink_drop.*|' \ + 'ui/views/animation/.*ink_drop.*' + }, 'installer': { 'filepath': 'chrome/installer/', }, @@ -581,9 +581,6 @@ 'content/renderer/notification_|' \ 'ui/message_center/' }, - 'npapi_headers': { - 'filepath': 'third_party/npapi/bindings/', - }, 'ntp': { 'filepath': 'chrome/browser/resources/ntp4/|'\ 'chrome/browser/resources/ntp_android/|'\ @@ -1348,7 +1345,6 @@ 'drive': ['tfarina@chromium.org'], 'drive_resource_metadata': ['hashimoto+watch@chromium.org'], 'eme': ['eme-reviews@chromium.org'], - 'enhanced_bookmarks': ['noyau+watch@chromium.org'], 'events': ['tdresser+watch@chromium.org'], 'extension': ['chromium-apps-reviews@chromium.org', 'extensions-reviews@chromium.org'], @@ -1372,6 +1368,7 @@ 'importer': ['tfarina@chromium.org'], 'indexed_db': ['cmumford@chromium.org', 'jsbell+idb@chromium.org'], + 'ink_drop': ['bruthig+ink_drop@chromium.org'], 'installer': ['grt+watch@chromium.org', 'wfh+watch@chromium.org'], 'installer_linux': [ 'mmoss@chromium.org'], 'instant': ['dcblack@chromium.org', 'jered@chromium.org', @@ -1422,7 +1419,6 @@ 'network_quality': ['rdsmith@chromium.org'], 'notifications': ['peter@chromium.org', 'mlamouri+watch-notifications@chromium.org'], - 'npapi_headers': ['stuartmorgan@chromium.org'], 'ntp': ['dbeam+watch-ntp@chromium.org', 'pedrosimonetti+watch@chromium.org'], 'omnibox': ['suzhe@chromium.org'],
diff --git a/android_webview/browser/renderer_host/aw_render_view_host_ext.cc b/android_webview/browser/renderer_host/aw_render_view_host_ext.cc index 090541d..75295b39 100644 --- a/android_webview/browser/renderer_host/aw_render_view_host_ext.cc +++ b/android_webview/browser/renderer_host/aw_render_view_host_ext.cc
@@ -115,7 +115,8 @@ long duration_ms) { Send( new AwViewMsg_SmoothScroll(web_contents()->GetMainFrame()->GetRoutingID(), - target_x, target_y, duration_ms)); + target_x, target_y, + static_cast<int>(duration_ms))); } void AwRenderViewHostExt::RenderViewCreated(
diff --git a/android_webview/common/render_view_messages.h b/android_webview/common/render_view_messages.h index 24df3cd..7e2ea6b3 100644 --- a/android_webview/common/render_view_messages.h +++ b/android_webview/common/render_view_messages.h
@@ -81,7 +81,7 @@ IPC_MESSAGE_ROUTED3(AwViewMsg_SmoothScroll, int /* target_x */, int /* target_y */, - long /* duration_ms */) + int /* duration_ms */) //----------------------------------------------------------------------------- // RenderView messages
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java index 4eb0eb7..230d5f60 100644 --- a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java +++ b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
@@ -249,7 +249,8 @@ ResourceBundle.initializeLocalePaks(context, R.array.locale_paks); initPlatSupportLibrary(); final int extraBindFlags = 0; - AwBrowserProcess.configureChildProcessLauncher(webViewPackageName, extraBindFlags); + AwBrowserProcess.configureChildProcessLauncher(webViewPackageName, extraBindFlags, + LibraryProcessType.PROCESS_WEBVIEW_CHILD); AwBrowserProcess.start(context); if (isBuildDebuggable()) {
diff --git a/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java b/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java index 4b3f4c7..45ddbdd4 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java +++ b/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java
@@ -56,9 +56,11 @@ * Configures child process launcher. This is required only if child services are used in * WebView. */ - public static void configureChildProcessLauncher(String packageName, int extraBindFlags) { + public static void configureChildProcessLauncher(String packageName, int extraBindFlags, + int libraryProcessType) { ChildProcessLauncher.setChildProcessCreationParams( - new ChildProcessLauncher.ChildProcessCreationParams(packageName, extraBindFlags)); + new ChildProcessLauncher.ChildProcessCreationParams(packageName, extraBindFlags, + libraryProcessType)); } /**
diff --git a/android_webview/lib/main/aw_main_delegate.cc b/android_webview/lib/main/aw_main_delegate.cc index e0025feb..44806dce 100644 --- a/android_webview/lib/main/aw_main_delegate.cc +++ b/android_webview/lib/main/aw_main_delegate.cc
@@ -143,6 +143,9 @@ cl->AppendSwitch(switches::kDisableRendererBackgrounding); } + // Enabled temporarily to gather performance metrics. + cl->AppendSwitch(switches::kIPCSyncCompositing); + return false; }
diff --git a/android_webview/renderer/aw_render_frame_ext.cc b/android_webview/renderer/aw_render_frame_ext.cc index 96e32da..a5d3491 100644 --- a/android_webview/renderer/aw_render_frame_ext.cc +++ b/android_webview/renderer/aw_render_frame_ext.cc
@@ -262,12 +262,12 @@ void AwRenderFrameExt::OnSmoothScroll(int target_x, int target_y, - long duration_ms) { + int duration_ms) { blink::WebView* webview = GetWebView(); if (!webview) return; - webview->smoothScroll(target_x, target_y, duration_ms); + webview->smoothScroll(target_x, target_y, static_cast<long>(duration_ms)); } blink::WebView* AwRenderFrameExt::GetWebView() {
diff --git a/android_webview/renderer/aw_render_frame_ext.h b/android_webview/renderer/aw_render_frame_ext.h index 9a54ca8..804f281a 100644 --- a/android_webview/renderer/aw_render_frame_ext.h +++ b/android_webview/renderer/aw_render_frame_ext.h
@@ -47,7 +47,7 @@ void OnSetBackgroundColor(SkColor c); - void OnSmoothScroll(int target_x, int target_y, long duration_ms); + void OnSmoothScroll(int target_x, int target_y, int duration_ms); blink::WebView* GetWebView();
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index b26671d..ab93521 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -41,6 +41,7 @@ "//ui/app_list", "//ui/aura", "//ui/base", + "//ui/base:ui_data_pack", "//ui/base/ime", "//ui/compositor", "//ui/events",
diff --git a/ash/ash.gyp b/ash/ash.gyp index 2abce5f..b3629dea 100644 --- a/ash/ash.gyp +++ b/ash/ash.gyp
@@ -965,6 +965,7 @@ '../ui/aura/aura.gyp:aura', '../ui/base/ime/ui_base_ime.gyp:ui_base_ime', '../ui/base/ui_base.gyp:ui_base', + '../ui/base/ui_base.gyp:ui_data_pack', '../ui/compositor/compositor.gyp:compositor', '../ui/events/devices/events_devices.gyp:events_devices', '../ui/events/events.gyp:events',
diff --git a/ash/display/root_window_transformers_unittest.cc b/ash/display/root_window_transformers_unittest.cc index 1da6c923..968e9c41 100644 --- a/ash/display/root_window_transformers_unittest.cc +++ b/ash/display/root_window_transformers_unittest.cc
@@ -59,8 +59,8 @@ // entire root window. if (target->name() != kDesktopBackgroundView) return; - touch_radius_x_ = event->pointer_details().radius_x(); - touch_radius_y_ = event->pointer_details().radius_y(); + touch_radius_x_ = event->pointer_details().radius_x; + touch_radius_y_ = event->pointer_details().radius_y; event->StopPropagation(); }
diff --git a/ash/display/window_tree_host_manager_unittest.cc b/ash/display/window_tree_host_manager_unittest.cc index 8481b19..7a2584f9 100644 --- a/ash/display/window_tree_host_manager_unittest.cc +++ b/ash/display/window_tree_host_manager_unittest.cc
@@ -300,8 +300,8 @@ // entire root window. if (target->name() != kDesktopBackgroundView) return; - touch_radius_x_ = event->pointer_details().radius_x(); - touch_radius_y_ = event->pointer_details().radius_y(); + touch_radius_x_ = event->pointer_details().radius_x; + touch_radius_y_ = event->pointer_details().radius_y; event->StopPropagation(); }
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb index 63b2fdb..0662cc6 100644 --- a/ash/strings/ash_strings_am.xtb +++ b/ash/strings/ash_strings_am.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">አይ</translation> <translation id="4279490309300973883">በማንጸባረቅ ላይ</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">ውድ ማሳያ፣ ልንግባባ አልቻልንም። (ያ ማሳያ አይደገፍም)</translation> <translation id="4421231901400348175">የማያ ገጽዎን ቁጥጥር በርቀት እርዳታ በኩል ለ<ph name="HELPER_NAME" /> በማጋራት ላይ።</translation> <translation id="4430019312045809116">ድምፅ</translation> <translation id="4527045527269911712">የብሉቱዝ መሣሪያ «<ph name="DEVICE_NAME" />» ለመጣመር ፍቃድ ይፈልጋል።</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">የብሉቱዝ መሣሪያ «<ph name="DEVICE_NAME" />» ለመጣመር ፍቃድ ይፈልጋል። እባክዎ ይህን የይለፍ ቁልፍ በዚህ መሣሪያ ላይ ያስገቡ፦ <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">የብሉቱዝ መሣሪያ «<ph name="DEVICE_NAME" />» ተጣምሯል፣ እና አሁን ለሁሉም ተጠቃሚዎች ይገኛል። ቅንብሮችን በመጠቀም ይህን ጥምረት ማስወገድ ይችላሉ።</translation> <translation id="6785414152754474415">ባትሪው <ph name="PERCENTAGE" />% ሙሉ ሆኖ በተጨማሪም ኃይል እየሞላ ነው።</translation> -<translation id="6803622936009808957">ምንም የሚደገፉ ጥራቶች ስላልተገኙ ማሳያዎችን ማሳየት አልተቻለም። ይልቁንስ ወደ የተስፋፋ ዴስክቶፕ ሁነታ ተገብቷል።</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox (የቃል ግብረመልስ)</translation> <translation id="6911468394164995108">ሌላ ይቀላቀሉ...</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb index 780d54e..b8eec57 100644 --- a/ash/strings/ash_strings_ar.xtb +++ b/ash/strings/ash_strings_ar.xtb
@@ -112,7 +112,6 @@ <translation id="4250680216510889253">لا</translation> <translation id="4279490309300973883">النسخ المطابق</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">الشاشة لا تعمل. (هذه الشاشة غير متوافقة)</translation> <translation id="4421231901400348175">مشاركة التحكم في شاشتك مع <ph name="HELPER_NAME" /> عن طريق المساعدة عن بُعد.</translation> <translation id="4430019312045809116">مستوى الصوت</translation> <translation id="4527045527269911712">يريد جهاز بلوتوث "<ph name="DEVICE_NAME" />" الحصول على إذن للإقران.</translation> @@ -181,7 +180,6 @@ <translation id="6650933572246256093">يريد جهاز بلوتوث "<ph name="DEVICE_NAME" />" الحصول على إذن للإقران. الرجاء إدخال مفتاح المرور هذا في هذا الجهاز: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">تم إقران جهاز بلوتوث "<ph name="DEVICE_NAME" />" وهو الآن متاح لجميع المستخدمين. يمكنك إزالة هذا الإقران باستخدام الإعدادات.</translation> <translation id="6785414152754474415">اكتمل شحن <ph name="PERCENTAGE" />% من البطارية ويجري شحنها.</translation> -<translation id="6803622936009808957">تعذر إجراء النسخ المطابق للعروض نظرًا لعدم العثور على درجات دقة متوافقة. تم الدخول إلى سطح المكتب الممتد بدلاً من ذلك.</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox (التعليق المنطوق)</translation> <translation id="6911468394164995108">الانضمام إلى شبكة أخرى...</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb index 6332b05..f088628 100644 --- a/ash/strings/ash_strings_bg.xtb +++ b/ash/strings/ash_strings_bg.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Не</translation> <translation id="4279490309300973883">Дублиране</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Уважаеми мониторе, нещата между нас не се получават. (Този монитор не се поддържа)</translation> <translation id="4421231901400348175">Споделяте с/ъс <ph name="HELPER_NAME" /> контрола върху екрана си чрез отдалечено съдействие.</translation> <translation id="4430019312045809116">Звук</translation> <translation id="4527045527269911712">Устройството с Bluetooth „<ph name="DEVICE_NAME" />“ иска разрешение за сдвояване.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Устройството с Bluetooth „<ph name="DEVICE_NAME" />“ иска разрешение за сдвояване. Моля, въведете на него следния ключ за достъп: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Устройството с Bluetooth „<ph name="DEVICE_NAME" />“ е сдвоено и сега е налице за всички потребители. Може да премахнете това сдвояване посредством „Настройки“.</translation> <translation id="6785414152754474415">Батерията е <ph name="PERCENTAGE" />% пълна и се зарежда.</translation> -<translation id="6803622936009808957">Дисплеите не можаха да се дублират, тъй като не бяха намерени поддържани разделителни способности. Вместо това влязохте в режима за разширен работен плот.</translation> <translation id="683971173229319003">търсене + L</translation> <translation id="68610848741840742">ChromeVox (обратна връзка с говор)</translation> <translation id="6911468394164995108">Присъединяване другаде...</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb index 665d00ad..68636d0 100644 --- a/ash/strings/ash_strings_bn.xtb +++ b/ash/strings/ash_strings_bn.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">না</translation> <translation id="4279490309300973883">অনুকরণ করা হচ্ছে</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Dear Monitor, it's not working out between us. (এই মনিটরটি সমর্থিত নয়)</translation> <translation id="4421231901400348175">রিমোট সহায়কের মাধ্যমে <ph name="HELPER_NAME" />-এর সাথে আপনার স্ক্রীন নিয়ন্ত্রন ভাগ করুন৷</translation> <translation id="4430019312045809116">ভলিউম</translation> <translation id="4527045527269911712">Bluetooth ডিভাইস "<ph name="DEVICE_NAME" />" যুক্ত করার অনুমতি চাইছে।</translation> @@ -143,7 +142,7 @@ <translation id="5571066253365925590">ব্লুটুথ সক্ষমিত</translation> <translation id="5597451508971090205"><ph name="SHORT_WEEKDAY" />, <ph name="DATE" /></translation> <translation id="5759815399269068793">আপনি আপনার <ph name="DEVICE_TYPE" /> কে একটি বহিস্থ প্রদর্শনের সাথে সংযুক্ত থাকা অবস্থায়, এমনকি ঢাকনা বন্ধ থাকলেও, সেটি ব্যবহার করতে পারবেন।</translation> -<translation id="5777841717266010279">স্ক্রীন ভাগ করা থামাবেন?</translation> +<translation id="5777841717266010279">স্ক্রীন শেয়ার করা থামাবেন?</translation> <translation id="5825747213122829519">আপনার ইনপুট পদ্ধতি <ph name="INPUT_METHOD_ID" /> এ পরিবর্তিত হয়েছে৷ স্যুইচ করতে Shift + Alt টিপুন৷</translation> <translation id="5871632337994001636">ডিভাইসগুলি পরিচালন করুন...</translation> @@ -158,7 +157,7 @@ <translation id="5978382165065462689">রিমোট সহায়কের মাধ্যমে আপনার স্ক্রীন নিয়ন্ত্রণ ভাগ করুন৷</translation> <translation id="5980301590375426705">অতিথি থেকে প্রস্থান</translation> <translation id="6043994281159824495">এখনই সাইন আউট করুন</translation> -<translation id="6047696787498798094">যখন আপনি অন্য ব্যবহারকারীতে পাল্টাবেন তখন স্ক্রীন ভাগ করা বন্ধ হবে৷ আপনি কি চালিয়ে যেতে চান?</translation> +<translation id="6047696787498798094">যখন আপনি অন্য ব্যবহারকারীতে পাল্টাবেন তখন স্ক্রীন শেয়ার করা বন্ধ হবে৷ আপনি কি চালিয়ে যেতে চান?</translation> <translation id="6062360702481658777">আপনি <ph name="LOGOUT_TIME_LEFT" /> এর মধ্যে স্বয়ংক্রিয়ভাবে সাইন আউট হবেন৷</translation> <translation id="607652042414456612">আপনার কম্পিউটার কাছাকাছি Bluetooth ডিভাইসে খুঁজে পাওয়া সম্ভব এবং ঠিকানা <ph name="ADDRESS" /> সমেত "<ph name="NAME" />" হিসাবে প্রদর্শিত হবে</translation> <translation id="6106745654298855237"><ph name="POWER_SOURCE" /> চার্জ হচ্ছে</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Bluetooth ডিভাইস "<ph name="DEVICE_NAME" />" যুক্ত করার অনুমতি চাইছে। দয়া করে ডিভাইসটিতে এই পাস কীটি প্রবেশ করুন: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Bluetooth ডিভাইস "<ph name="DEVICE_NAME" />" যুক্ত করা হয়েছে এবং এখন সমস্ত ব্যবহারকারীর কাছে উপলব্ধ। আপনি সেটিংস ব্যবহার করে এই সংযুক্তি সরিয়ে দিতে পারেন।</translation> <translation id="6785414152754474415">ব্যাটারি <ph name="PERCENTAGE" />% পূর্ণ এবং চার্জ হচ্ছে৷</translation> -<translation id="6803622936009808957">সমর্থিত রেসুলিউশানগুলি খুঁজে না পাওয়ায় মিরর প্রদর্শনগুলি করতে পারেনি৷ পরিবর্তে প্রসারিত ডেস্কটপ সক্ষম করা হয়েছে৷</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox (কথ্য প্রতিক্রিয়া)</translation> <translation id="6911468394164995108">অন্যান্য যোগদান ...</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb index ebe01e4d0..7c29f07 100644 --- a/ash/strings/ash_strings_ca.xtb +++ b/ash/strings/ash_strings_ca.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">No</translation> <translation id="4279490309300973883">S'està creant una rèplica</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Estimat monitor, això no funciona. (El monitor no és compatible)</translation> <translation id="4421231901400348175">Es comparteix el control de la pantalla amb <ph name="HELPER_NAME" /> mitjançant l'Assistència remota.</translation> <translation id="4430019312045809116">Volum</translation> <translation id="4527045527269911712">El dispositiu Bluetooth "<ph name="DEVICE_NAME" />" sol·licita permís per emparellar-se.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">El dispositiu Bluetooth "<ph name="DEVICE_NAME" />" sol·licita permís per emparellar-se. Introduïu-hi aquesta contrasenya: <ph name="PASSKEY" />.</translation> <translation id="6713285437468012787">El dispositiu Bluetooth "<ph name="DEVICE_NAME" />" s'ha emparellat i ja està disponible per a tots els usuaris. Podeu eliminar l'emparellament a la Configuració.</translation> <translation id="6785414152754474415">La bateria està carregada fins al <ph name="PERCENTAGE" />% i s'està carregant.</translation> -<translation id="6803622936009808957">No s'han pogut reflectir les pantalles, perquè no s'ha trobat cap resolució compatible. S'està entrant al mode d'escriptori ampliat.</translation> <translation id="683971173229319003">Cerca + L</translation> <translation id="68610848741840742">ChromeVox (comentaris de veu)</translation> <translation id="6911468394164995108">Connecta't a una altra xarxa...</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb index 4e64c31f..97e863f 100644 --- a/ash/strings/ash_strings_cs.xtb +++ b/ash/strings/ash_strings_cs.xtb
@@ -111,7 +111,6 @@ <translation id="4250680216510889253">Ne</translation> <translation id="4279490309300973883">Zrcadlení</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Drahý monitore, nějak to mezi námi nefunguje. (Monitor není podporován.)</translation> <translation id="4421231901400348175">Ovládání obrazovky je prostřednictvím Vzdálené pomoci sdíleno s uživatelem <ph name="HELPER_NAME" />.</translation> <translation id="4430019312045809116">Hlasitost</translation> <translation id="4527045527269911712">Zařízení Bluetooth „<ph name="DEVICE_NAME" />“ žádá o povolení ke spárování.</translation> @@ -179,7 +178,6 @@ <translation id="6650933572246256093">Zařízení Bluetooth „<ph name="DEVICE_NAME" />“ žádá o povolení ke spárování. V zařízení prosím zadejte následující přístupový klíč: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Zařízení Bluetooth „<ph name="DEVICE_NAME" />“ bylo spárováno a je nyní k dispozici všem uživatelům. Toto párování můžete odebrat pomocí Nastavení.</translation> <translation id="6785414152754474415">Baterie je nabita na <ph name="PERCENTAGE" /> % a nabíjí se.</translation> -<translation id="6803622936009808957">Zobrazení nelze zrcadlit, protože nebyla nalezena podporovaná rozlišení. Místo toho se spustil režim rozšířené pracovní plochy.</translation> <translation id="683971173229319003">Hledat+L</translation> <translation id="68610848741840742">ChromeVox (hlasová odezva)</translation> <translation id="6911468394164995108">Připojit k jiné...</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb index 924fd115b..2b3b32518 100644 --- a/ash/strings/ash_strings_da.xtb +++ b/ash/strings/ash_strings_da.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Nej</translation> <translation id="4279490309300973883">Spejling</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Kære Skærm. Det fungerer ikke mellem os. (Denne skærm understøttes ikke)</translation> <translation id="4421231901400348175">Skærmdeling med <ph name="HELPER_NAME" /> via Fjernsupport.</translation> <translation id="4430019312045809116">Lydstyrke</translation> <translation id="4527045527269911712">Bluetooth-enheden "<ph name="DEVICE_NAME" />" vil gerne have parringstilladelse.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Bluetooth-enheden "<ph name="DEVICE_NAME" />" vil gerne have parringstilladelse. Indtast din adgangsnøgle på enheden: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Bluetooth-enheden "<ph name="DEVICE_NAME" />" er blevet parret og er nu tilgængelig for alle brugere, Du kan fjerne denne parring i Indstillinger.</translation> <translation id="6785414152754474415">Batteriet er <ph name="PERCENTAGE" /> % opladet og oplades nu.</translation> -<translation id="6803622936009808957">Skærmene kunne ikke spejles, da der ikke fandtes en understøttet opløsning. I stedet anvendes Udvidet skrivebord.</translation> <translation id="683971173229319003">Søg+L</translation> <translation id="68610848741840742">ChromeVox (talefeedback)</translation> <translation id="6911468394164995108">Vælg et andet...</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb index 47f9e3a..ce325da 100644 --- a/ash/strings/ash_strings_de.xtb +++ b/ash/strings/ash_strings_de.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Nein</translation> <translation id="4279490309300973883">Spiegelung</translation> <translation id="4321179778687042513">Strg</translation> -<translation id="4379753398862151997">Der Monitor wird nicht unterstützt.</translation> <translation id="4421231901400348175">Sie teilen sich die Bildschirmsteuerung mit <ph name="HELPER_NAME" /> per Remote-Unterstützung.</translation> <translation id="4430019312045809116">Lautstärke</translation> <translation id="4527045527269911712">Das Bluetooth-Gerät "<ph name="DEVICE_NAME" />" bittet um Erlaubnis für das Pairing.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Das Bluetooth-Gerät "<ph name="DEVICE_NAME" />" bittet um Erlaubnis für das Pairing. Geben Sie auf dem Gerät folgenden Zugangscode ein: <ph name="PASSKEY" />.</translation> <translation id="6713285437468012787">Das Pairing für das Bluetooth-Gerät "<ph name="DEVICE_NAME" />" wurde durchgeführt und das Gerät ist nun für alle Nutzer verfügbar. Sie können das Pairing unter "Einstellungen" entfernen.</translation> <translation id="6785414152754474415">Akku ist zu <ph name="PERCENTAGE" /> % geladen und wird geladen.</translation> -<translation id="6803622936009808957">Der Bildschirm konnte nicht gespiegelt werden, da die Auflösung nicht unterstützt wird. Stattdessen wurde der Modus für den erweiterten Desktop gestartet.</translation> <translation id="683971173229319003">Suche + L</translation> <translation id="68610848741840742">ChromeVox (gesprochenes Feedback)</translation> <translation id="6911468394164995108">Andere Netzwerke...</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb index dcf0cc9..75e87c86 100644 --- a/ash/strings/ash_strings_el.xtb +++ b/ash/strings/ash_strings_el.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Όχι</translation> <translation id="4279490309300973883">Κατοπτρισμός</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Αγαπητή οθόνη, κάτι δεν πάει καλά με εμάς. (Αυτή η οθόνη δεν υποστηρίζεται)</translation> <translation id="4421231901400348175">Κοινόχρηστος έλεγχος της οθόνης σας με το χρήστη <ph name="HELPER_NAME" /> μέσω της απομακρυσμένης βοήθειας.</translation> <translation id="4430019312045809116">Ένταση</translation> <translation id="4527045527269911712">Η συσκευή Bluetooth "<ph name="DEVICE_NAME" />" ζητά δικαιώματα σύζευξης.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Η συσκευή Bluetooth "<ph name="DEVICE_NAME" />" ζητά δικαιώματα σύζευξης. Καταχωρίστε αυτό το κλειδί πρόσβασης στη συγκεκριμένη συσκευή: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Η συσκευή Bluetooth "<ph name="DEVICE_NAME" />" έχει συζευχθεί και είναι πλέον διαθέσιμη σε όλους τους χρήστες. Μπορείτε να καταργήσετε αυτήν τη σύζευξη μέσω των Ρυθμίσεων.</translation> <translation id="6785414152754474415">Η μπαταρία είναι πλήρης <ph name="PERCENTAGE" />% και φορτίζει.</translation> -<translation id="6803622936009808957">Δεν ήταν δυνατός ο αντικατοπτρισμός των οθονών καθώς δεν βρέθηκαν υποστηριζόμενες αναλύσεις. Έχει ενεργοποιηθεί εναλλακτικά η εκτεταμένη επιφάνεια εργασίας.</translation> <translation id="683971173229319003">Πλήκτρο αναζήτησης+L</translation> <translation id="68610848741840742">ChromeVox (προφορικά σχόλια)</translation> <translation id="6911468394164995108">Συμμετοχή σε άλλο…</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb index 7c83117..3faa634 100644 --- a/ash/strings/ash_strings_en-GB.xtb +++ b/ash/strings/ash_strings_en-GB.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">No</translation> <translation id="4279490309300973883">Mirroring</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Dear Monitor, it's not working out between us. (That monitor is not supported)</translation> <translation id="4421231901400348175">Sharing control of your screen with <ph name="HELPER_NAME" /> via Remote Assistance.</translation> <translation id="4430019312045809116">volume</translation> <translation id="4527045527269911712">Bluetooth device "<ph name="DEVICE_NAME" />" would like permission to pair.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Bluetooth device "<ph name="DEVICE_NAME" />" would like permission to pair. Please enter this passkey on that device: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Bluetooth device "<ph name="DEVICE_NAME" />" has been paired and is now available to all users. You may remove this pairing using Settings.</translation> <translation id="6785414152754474415">Battery is <ph name="PERCENTAGE" />% full and charging.</translation> -<translation id="6803622936009808957">Could not mirror displays since no supported resolutions found. Entered extended desktop instead.</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox (Spoken feedback)</translation> <translation id="6911468394164995108">Join other ...</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb index 77f3411..30e421e 100644 --- a/ash/strings/ash_strings_es-419.xtb +++ b/ash/strings/ash_strings_es-419.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">No</translation> <translation id="4279490309300973883">Duplicando</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Querido Monitor, lo nuestro no funciona. (Este monitor no es compatible).</translation> <translation id="4421231901400348175">Se está compartiendo el control de la pantalla con <ph name="HELPER_NAME" /> mediante la Asistencia remota.</translation> <translation id="4430019312045809116">Volumen</translation> <translation id="4527045527269911712">El dispositivo Bluetooth "<ph name="DEVICE_NAME" />" solicita permiso para sincronizarse.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">El dispositivo Bluetooth "<ph name="DEVICE_NAME" />" solicita permiso para sincronizarse. Ingresa la siguiente clave de contraseña en el dispositivo: <ph name="PASSKEY" />.</translation> <translation id="6713285437468012787">El dispositivo Bluetooth "<ph name="DEVICE_NAME" />" se sincronizó y ahora está disponible para todos los usuarios. Puedes ir a Configuración para eliminar esta sincronización.</translation> <translation id="6785414152754474415">La batería tiene un <ph name="PERCENTAGE" /> % de carga y se está cargando.</translation> -<translation id="6803622936009808957">No se pudieron reflejar las pantallas porque no se encontraron resoluciones compatibles. En su lugar, se activó el escritorio extendido.</translation> <translation id="683971173229319003">Tecla de búsqueda + L</translation> <translation id="68610848741840742">ChromeVox (comentarios por voz)</translation> <translation id="6911468394164995108">Conectarte a otra red...</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb index 1bb96380..5ff3b7d6e 100644 --- a/ash/strings/ash_strings_es.xtb +++ b/ash/strings/ash_strings_es.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">No</translation> <translation id="4279490309300973883">Duplicando</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Querido monitor, lo nuestro no funciona... (No se admite el uso de ese monitor).</translation> <translation id="4421231901400348175">Compartiendo control de la pantalla con <ph name="HELPER_NAME" /> a través de Asistencia remota.</translation> <translation id="4430019312045809116">Volumen</translation> <translation id="4527045527269911712">El dispositivo Bluetooth "<ph name="DEVICE_NAME" />" solicita permiso para vincularse.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">El dispositivo Bluetooth "<ph name="DEVICE_NAME" />" solicita permiso para vincularse. Introduce la clave de contraseña <ph name="PASSKEY" /> en el dispositivo</translation> <translation id="6713285437468012787">Se ha vinculado el dispositivo Bluetooth "<ph name="DEVICE_NAME" />" y ya está disponible para todos los usuarios. Para eliminar esta vinculación, accede a Configuración.</translation> <translation id="6785414152754474415">La batería se está cargando y está al <ph name="PERCENTAGE" />%.</translation> -<translation id="6803622936009808957">No se han podido duplicar las pantallas porque no se han encontrado resoluciones compatibles. Se ha utilizado el modo de escritorio ampliado en su lugar.</translation> <translation id="683971173229319003">Buscar+L</translation> <translation id="68610848741840742">ChromeVox (mensajes de voz)</translation> <translation id="6911468394164995108">Conectarse a otra red...</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb index 40103cf..86a4d10 100644 --- a/ash/strings/ash_strings_et.xtb +++ b/ash/strings/ash_strings_et.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Ei</translation> <translation id="4279490309300973883">Peegeldamine</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Monitor, kahjuks ei tule meie koostööst midagi välja. (Seda monitori ei toetata)</translation> <translation id="4421231901400348175">Ekraani juhtimise jagamine isikuga <ph name="HELPER_NAME" /> kaugabi kaudu.</translation> <translation id="4430019312045809116">Helitugevus</translation> <translation id="4527045527269911712">Bluetoothi seade „<ph name="DEVICE_NAME" />” küsib luba sidumiseks.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Bluetoothi seade „<ph name="DEVICE_NAME" />” küsib luba sidumiseks. Sisestage seadmesse see parool: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Bluetoothi seade „<ph name="DEVICE_NAME" />” on nüüd seotud ja saadaval kõikidele kasutajatele. Võite sidumise tühistada jaotises Seaded.</translation> <translation id="6785414152754474415">Aku on <ph name="PERCENTAGE" />% täis ja seda laetakse.</translation> -<translation id="6803622936009808957">Ei saanud kuvasid peegeldada, kuna toetatud eraldusvõimeid ei leitud. Selle asemel siseneti laiendatud töölaua režiimi.</translation> <translation id="683971173229319003">Otsing + L</translation> <translation id="68610848741840742">ChromeVox (kõnena esitatud tagasiside)</translation> <translation id="6911468394164995108">Liitu muu võrguga ...</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb index 78c54cf..13d2d62 100644 --- a/ash/strings/ash_strings_fa.xtb +++ b/ash/strings/ash_strings_fa.xtb
@@ -112,7 +112,6 @@ <translation id="4250680216510889253">نه</translation> <translation id="4279490309300973883">بازتاب میشود</translation> <translation id="4321179778687042513">مهار</translation> -<translation id="4379753398862151997">نمایشگر عزیز، ما برای هم ساخته نشدهایم. (این نمایشگر پشتیبانی نمیشود)</translation> <translation id="4421231901400348175">به اشتراک گذاشتن کنترل صفحهتان با <ph name="HELPER_NAME" /> از طریق راهنمایی از راه دور.</translation> <translation id="4430019312045809116">میزان صدا</translation> <translation id="4527045527269911712">دستگاه بلوتوث «<ph name="DEVICE_NAME" />» برای مرتبطسازی به مجوز نیاز دارد.</translation> @@ -180,7 +179,6 @@ <translation id="6650933572246256093">دستگاه بلوتوث «<ph name="DEVICE_NAME" />» برای مرتبطسازی به مجوز نیاز دارد. لطفاً این کلیدواژه را در آن دستگاه وارد کنید: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">دستگاه بلوتوث «<ph name="DEVICE_NAME" />» مرتبط شده است و اکنون برای همه کاربران در دسترس است. میتوانید این مرتبطسازی را با استفاده از تنظیمات حذف کنید.</translation> <translation id="6785414152754474415">باتری <ph name="PERCENTAGE" /> درصد پر و درحال شارژ است.</translation> -<translation id="6803622936009808957">نمایش یک تصویر واحد در چند صفحه نمایش ممکن نیست زیرا وضوح تصویر پشتیبانی شدهای وجود ندارد. بجای آن حالت نمایش دسکتاپ چند بخشی استفاده میشود.</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox (بازخورد گفتاری)</translation> <translation id="6911468394164995108">پیوستن به شبکه دیگر…</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb index 521f8e2..78b10b96ae 100644 --- a/ash/strings/ash_strings_fi.xtb +++ b/ash/strings/ash_strings_fi.xtb
@@ -112,7 +112,6 @@ <translation id="4250680216510889253">Ei</translation> <translation id="4279490309300973883">Peilaus päällä</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Arvoisa näyttö, suhteemme ei toimi. (Näyttöä ei tueta)</translation> <translation id="4421231901400348175">Näyttösi hallinta jaetaan käyttäjän <ph name="HELPER_NAME" /> kanssa Etätuen kautta.</translation> <translation id="4430019312045809116">Äänenvoimakkuus</translation> <translation id="4527045527269911712">Bluetooth-laite <ph name="DEVICE_NAME" /> pyytää lupaa laiteparin muodostamiseen.</translation> @@ -181,7 +180,6 @@ <translation id="6650933572246256093">Bluetooth-laite <ph name="DEVICE_NAME" /> pyytää lupaa laiteparin muodostamiseen. Anna tämä avain kyseisellä laitteella: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Bluetooth-laitteeseen <ph name="DEVICE_NAME" /> on nyt muodostettu laitepariyhteys, ja se on kaikkien käyttäjien saatavilla. Voit poistaa laiteparin Asetuksien kautta.</translation> <translation id="6785414152754474415">Akussa on virtaa <ph name="PERCENTAGE" /> %, ja laite on kytketty laturiin.</translation> -<translation id="6803622936009808957">Näyttöjen peilaaminen ei onnistunut, sillä tuettua resoluutiota ei löytynyt. Sen sijaan valittiin työpöydän laajennus.</translation> <translation id="683971173229319003">Haku+L</translation> <translation id="68610848741840742">ChromeVox (äänipalaute)</translation> <translation id="6911468394164995108">Liity muuhun verkkoon...</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb index 0bf911fc..85928e5 100644 --- a/ash/strings/ash_strings_fil.xtb +++ b/ash/strings/ash_strings_fil.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Hindi</translation> <translation id="4279490309300973883">Nagmi-mirror</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Dear Monitor, it's not working out between us. (Hindi sinusuportahan ang monitor na iyan)</translation> <translation id="4421231901400348175">Pagbabahagi ng kontrol sa iyong screen gamit ang <ph name="HELPER_NAME" /> sa pamamagitan ng Remote Assistance.</translation> <translation id="4430019312045809116">Volume</translation> <translation id="4527045527269911712">Gusto ng bluetooth device na "<ph name="DEVICE_NAME" />" na magpares.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Gusto ng bluetooth device na "<ph name="DEVICE_NAME" />" ng pahintulot na magpares. Pakilagay ang passkey na ito sa device na iyon: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Naipares na ang bluetooth device na "<ph name="DEVICE_NAME" />" at available na ngayon sa lahat ng user. Maaari mong alisin ang pagpapares na ito gamit ang Mga Setting.</translation> <translation id="6785414152754474415">Ang baterya ay <ph name="PERCENTAGE" />% na puno at nagcha-charge.</translation> -<translation id="6803622936009808957">Hindi ma-mirror ang mga display dahil walang mga sinusuportahang resolusyon na nakita. Pumasok na lang sa pinalawak na desktop.</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox (pasalitang feedback)</translation> <translation id="6911468394164995108">Sumali sa iba...</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb index d39d8cc..50f5c5b9 100644 --- a/ash/strings/ash_strings_fr.xtb +++ b/ash/strings/ash_strings_fr.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Non</translation> <translation id="4279490309300973883">Mise en miroir</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Moniteur non compatible.</translation> <translation id="4421231901400348175">Partager le contrôle de votre écran avec <ph name="HELPER_NAME" /> via l'assistance à distance</translation> <translation id="4430019312045809116">Volume</translation> <translation id="4527045527269911712">L'appareil Bluetooth "<ph name="DEVICE_NAME" />" demande l'autorisation de s'associer.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">L'appareil Bluetooth "<ph name="DEVICE_NAME" />" demande l'autorisation de s'associer. Veuillez saisir le code d'authentification suivant sur l'appareil : <ph name="PASSKEY" />.</translation> <translation id="6713285437468012787">L'appareil Bluetooth "<ph name="DEVICE_NAME" />" a été associé et tous les utilisateurs peuvent désormais y accéder. Vous pouvez supprimer cette association dans les paramètres.</translation> <translation id="6785414152754474415">La batterie est chargée à <ph name="PERCENTAGE" /> % et en charge.</translation> -<translation id="6803622936009808957">Impossible de dupliquer les écrans, car aucune résolution compatible n'a été détectée. Le bureau étendu a été activé à la place.</translation> <translation id="683971173229319003">Recherche+L</translation> <translation id="68610848741840742">ChromeVox (commentaires audio)</translation> <translation id="6911468394164995108">Autre réseau…</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb index c83c3c25..89a0d28 100644 --- a/ash/strings/ash_strings_gu.xtb +++ b/ash/strings/ash_strings_gu.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">નહીં</translation> <translation id="4279490309300973883">પ્રતિબિંબત થઈ રહ્યું છે</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">પ્રિય મોનિટર, તે અમારી વચ્ચે કાર્ય કરી રહ્યું નથી. (તે મોનિટર સમર્થિત નથી)</translation> <translation id="4421231901400348175">દૂરસ્થ સહાય વડે <ph name="HELPER_NAME" /> સાથે તમારી સ્ક્રીનનું નિયંત્રણ શેર કરવું.</translation> <translation id="4430019312045809116">વૉલ્યૂમ</translation> <translation id="4527045527269911712">Bluetooth ઉપકરણ "<ph name="DEVICE_NAME" />" ને જોડી બનાવવા માટે પરવાનગી જોઈએ છે.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Bluetooth ઉપકરણ "<ph name="DEVICE_NAME" />" ને જોડી બનાવવા માટે પરવાનગી જોઈએ છે. કૃપા કરીને તે ઉપકરણ પર આ પાસકીને દાખલ કરો: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Bluetooth ઉપકરણ "<ph name="DEVICE_NAME" />" ની જોડી બનાવવામાં આવી અને હવે તે બધા વપરાશકર્તાઓને ઉપલબ્ધ છે. તમે સેટિંગ્સનો ઉપયોગ કરીને આ જોડીને દૂર કરી શકો છો.</translation> <translation id="6785414152754474415">બેટરી <ph name="PERCENTAGE" /> % પૂર્ણ અને ચાર્જ થઈ રહી છે.</translation> -<translation id="6803622936009808957">કોઈ સમર્થિત રિઝોલ્યૂશન મળ્યું ન હોવાથી, પ્રદર્શનોને પ્રતિબિંબિત કરી શકાયા નથી. તેને બદલે વિસ્તૃત ડેસ્કટૉપ દાખલ કર્યું.</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox (બોલાયેલ પ્રતિસાદ)</translation> <translation id="6911468394164995108">અન્યથી જોડાઓ...</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb index 920c67e..c242a4e 100644 --- a/ash/strings/ash_strings_hi.xtb +++ b/ash/strings/ash_strings_hi.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">नहीं</translation> <translation id="4279490309300973883">मिरर करना</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Dear Monitor, it's not working out between us. (वह मॉनीटर समर्थित नहीं है)</translation> <translation id="4421231901400348175">आपकी स्क्रीन का नियंत्रण दूरस्थ सहायक के द्वारा <ph name="HELPER_NAME" /> से साझा किया जा रहा है.</translation> <translation id="4430019312045809116">मात्रा</translation> <translation id="4527045527269911712">ब्लूटूथ डिवाइस "<ph name="DEVICE_NAME" />" युग्मित करने की अनुमति चाहता है.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">ब्लूटूथ डिवाइस "<ph name="DEVICE_NAME" />" युग्मित करने की अनुमति चाहता है. कृपया डिवाइस पर यह पासकुंजी डालें: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">ब्लूटूथ डिवाइस "<ph name="DEVICE_NAME" />" यु्ग्मित हो गया है और अब वह सभी उपयोगकर्ताओं के लिए उपलब्ध है. आप सेटिंग का उपयोग करके इस युग्मन को निकाल सकते हैं.</translation> <translation id="6785414152754474415">बैटरी <ph name="PERCENTAGE" />% भरी हुई है और चार्ज हो रही है.</translation> -<translation id="6803622936009808957">प्रदर्शनों को मिरर नहीं किया जा सका क्योंकि कोई समर्थित रिज़ॉल्यूशन नहीं मिला. इसके बजाय विस्तारित डेस्कटॉप में चला गया है.</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox (बोला गया फ़ीडबैक)</translation> <translation id="6911468394164995108">अन्य में शामिल हों...</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb index b349ff5..77501729 100644 --- a/ash/strings/ash_strings_hr.xtb +++ b/ash/strings/ash_strings_hr.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Ne</translation> <translation id="4279490309300973883">Zrcaljenje</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Dragi monitoru, naša veza neće uspjeti. (Taj monitor nije podržan)</translation> <translation id="4421231901400348175"><ph name="HELPER_NAME" /> i vi dijelite kontrolu nad zaslonom putem Daljinske pomoći.</translation> <translation id="4430019312045809116">Glasnoća</translation> <translation id="4527045527269911712">Bluetooth uređaj "<ph name="DEVICE_NAME" />" traži dopuštenje za uparivanje.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Bluetooth uređaj "<ph name="DEVICE_NAME" />" traži dopuštenje za uparivanje. Unesite ovaj pristupni ključ na tom uređaju: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Bluetooth uređaj "<ph name="DEVICE_NAME" />" sada je uparen i dostupan svim korisnicima. To uparivanje možete ukloniti u Postavkama.</translation> <translation id="6785414152754474415">Baterija je <ph name="PERCENTAGE" />% puna i puni se.</translation> -<translation id="6803622936009808957">Nije bilo moguće zrcaliti zaslone jer nije pronađena nijedna podržana razlučivost. Umjesto toga proširena je radna površina.</translation> <translation id="683971173229319003">Pretraživanje + L</translation> <translation id="68610848741840742">ChromeVox (govorne povratne informacije)</translation> <translation id="6911468394164995108">Pridruži se drugoj...</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb index eac1749..a3d12dc 100644 --- a/ash/strings/ash_strings_hu.xtb +++ b/ash/strings/ash_strings_hu.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Nem</translation> <translation id="4279490309300973883">Tükrözés</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Kedves Monitor, mi nem illünk össze. (A monitor nem támogatott.)</translation> <translation id="4421231901400348175">A képernyő irányításának megosztása <ph name="HELPER_NAME" /> segítővel a Távsegítség szolgáltatás keretein belül.</translation> <translation id="4430019312045809116">Hangerő</translation> <translation id="4527045527269911712">A(z) „<ph name="DEVICE_NAME" />” Bluetooth-eszköz engedélyt kér a párosításra.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">A(z) „<ph name="DEVICE_NAME" />” Bluetooth-eszköz engedélyt kér a párosításra. Kérjük, adja meg ezt a biztonsági kódot azon az eszközön: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">A(z) „<ph name="DEVICE_NAME" />” Bluetooth-eszköz párosítva lett, és elérhető az összes felhasználó számára. A párosítást a Beállításokban szüntetheti meg.</translation> <translation id="6785414152754474415">Az akkumulátor töltöttsége <ph name="PERCENTAGE" />%, és töltődik.</translation> -<translation id="6803622936009808957">A kijelzők tükrözése sikertelen, mivel nem található támogatott felbontás. Ehelyett kiterjesztett asztal módba váltott a rendszer.</translation> <translation id="683971173229319003">Keresés+L</translation> <translation id="68610848741840742">ChromeVox (beszélt visszajelzés)</translation> <translation id="6911468394164995108">Csatlakozás másik hálózathoz...</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb index c8d3445..ecd4756 100644 --- a/ash/strings/ash_strings_id.xtb +++ b/ash/strings/ash_strings_id.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Tidak</translation> <translation id="4279490309300973883">Mencerminkan</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Monitor, sayang sekali kita tidak bisa bekerja sama. (Monitor tersebut tidak didukung)</translation> <translation id="4421231901400348175">Berbagi kontrol layar dengan <ph name="HELPER_NAME" /> via Remote Assistance.</translation> <translation id="4430019312045809116">Volume</translation> <translation id="4527045527269911712">Perangkat Bluetooth "<ph name="DEVICE_NAME" />" meminta izin untuk bersanding.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Perangkat Bluetooth "<ph name="DEVICE_NAME" />" meminta izin untuk bersanding. Masukkan kunci sandi ini pada perangkat tersebut: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Perangkat Bluetooth "<ph name="DEVICE_NAME" />" telah disandingkan dan kini tersedia bagi semua pengguna. Anda dapat menghapus penyandingan ini menggunakan Setelan.</translation> <translation id="6785414152754474415">Baterai sudah terisi <ph name="PERCENTAGE" />% dan masih mengisi.</translation> -<translation id="6803622936009808957">Tidak dapat menggandakan tampilan karena tidak ditemukan resolusi yang didukung. Memasuki desktop yang diperluas sebagai gantinya.</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox (Masukan lisan)</translation> <translation id="6911468394164995108">Bergabung dengan lainnya...</translation>
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb index 803353c0..b12d36a 100644 --- a/ash/strings/ash_strings_it.xtb +++ b/ash/strings/ash_strings_it.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">No</translation> <translation id="4279490309300973883">Mirroring</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Caro monitor, non funziona tra di noi (il monitor non è supportato).</translation> <translation id="4421231901400348175">Condividi il controllo dello schermo con <ph name="HELPER_NAME" /> tramite Assistenza remota.</translation> <translation id="4430019312045809116">Volume</translation> <translation id="4527045527269911712">Il dispositivo Bluetooth "<ph name="DEVICE_NAME" />" chiede l'autorizzazione per essere accoppiato.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Il dispositivo Bluetooth "<ph name="DEVICE_NAME" />" chiede l'autorizzazione per essere accoppiato. Inserisci questa passkey sul dispositivo: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Il dispositivo Bluetooth "<ph name="DEVICE_NAME" />" è stato accoppiato ed è ora disponibile per tutti gli utenti. Puoi rimuovere tale accoppiamento utilizzando il menu Impostazioni.</translation> <translation id="6785414152754474415">Percentuale di caricamento batteria: <ph name="PERCENTAGE" />%. La batteria è in carica.</translation> -<translation id="6803622936009808957">Impossibile duplicare i display perché non sono state trovate risoluzioni supportate. È stato attivato il desktop esteso.</translation> <translation id="683971173229319003">Tasto di ricerca+L</translation> <translation id="68610848741840742">ChromeVox (lettura vocale)</translation> <translation id="6911468394164995108">Connetti a un'altra...</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb index eb023e09..c856c388 100644 --- a/ash/strings/ash_strings_iw.xtb +++ b/ash/strings/ash_strings_iw.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">לא</translation> <translation id="4279490309300973883">שיקוף</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">צג יקר, זה לא עובד בינינו. (הצג אינו נתמך)</translation> <translation id="4421231901400348175">שיתוף השליטה במסך עם <ph name="HELPER_NAME" /> דרך סיוע מרחוק.</translation> <translation id="4430019312045809116">עוצמת קול</translation> <translation id="4527045527269911712">מכשיר ה-Bluetooth "<ph name="DEVICE_NAME" />" מבקש הרשאה לבצע התאמה.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">מכשיר ה-Bluetooth "<ph name="DEVICE_NAME" />" מבקש הרשאה לביצוע התאמה. הזן את מפתח הסיסמה הבא במכשיר הזה: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">מכשיר ה-Bluetooth "<ph name="DEVICE_NAME" />" הותאם והוא זמין כעת לכל המשתמשים. אתה יכול להסיר את ההתאמה הזו ב'הגדרות'.</translation> <translation id="6785414152754474415">הסוללה טעונה ברמה של <ph name="PERCENTAGE" />% ומתבצעת טעינה.</translation> -<translation id="6803622936009808957">לא ניתן היה לשקף מסכים מכיוון שלא נמצאה רזולוציה נתמכת. במקום זאת התצוגה עברה למצב שולחן עבודה מורחב.</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox (משוב קולי)</translation> <translation id="6911468394164995108">הצטרף לרשת אחרת...</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb index 04e6cb4e..6e02467 100644 --- a/ash/strings/ash_strings_ja.xtb +++ b/ash/strings/ash_strings_ja.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">いいえ</translation> <translation id="4279490309300973883">ミラーリングしています</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Dear Monitor, it's not working out between us.(このモニターはサポートされていません)</translation> <translation id="4421231901400348175">リモート サポート経由で <ph name="HELPER_NAME" /> と画面の制御を共有しています。</translation> <translation id="4430019312045809116">音量</translation> <translation id="4527045527269911712">Bluetooth デバイス「<ph name="DEVICE_NAME" />」がペア設定の権限をリクエストしています。</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Bluetooth デバイス「<ph name="DEVICE_NAME" />」がペア設定の権限をリクエストしています。このデバイスに次のパスキーを入力してください: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Bluetooth デバイス「<ph name="DEVICE_NAME" />」がペア設定されました。すべてのユーザーはこのデバイスを使用できます。[設定] から、このペア設定を削除することもできます。</translation> <translation id="6785414152754474415">バッテリー残量: <ph name="PERCENTAGE" />%、充電しています。</translation> -<translation id="6803622936009808957">サポートされている解像度が見つからなかったため、ディスプレイをミラーリングできませんでした。代わりに拡張デスクトップ モードに切り替えました。</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox(音声フィードバック)</translation> <translation id="6911468394164995108">他のネットワークに接続...</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb index 920909b..de89c3a3 100644 --- a/ash/strings/ash_strings_kn.xtb +++ b/ash/strings/ash_strings_kn.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">ಇಲ್ಲ</translation> <translation id="4279490309300973883">ಪ್ರತಿಬಿಂಬಿಸುವಿಕೆ</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">ಆತ್ಮೀಯ ಮಾನಿಟರ್, ನಮ್ಮ ನಡುವೆ ಸರಿಹೊಂದುತ್ತಿಲ್ಲ. (ಆ ಮಾನಿಟರ್ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ)</translation> <translation id="4421231901400348175">ರಿಮೋಟ್ ಸಹಾಯದ ಮೂಲಕ <ph name="HELPER_NAME" /> ಜೊತೆಗೆ ನಿಮ್ಮ ಪರದೆಯ ನಿಯಂತ್ರಣವನ್ನು ಹಂಚಲಾಗುತ್ತಿದೆ.</translation> <translation id="4430019312045809116">ವಾಲ್ಯೂಮ್</translation> <translation id="4527045527269911712">ಬ್ಲೂಟೂತ್ ಸಾಧನವು "<ph name="DEVICE_NAME" />" ಜೋಡಣೆಗಾಗಿ ಅನುಮತಿಯನ್ನು ಬಯಸುತ್ತದೆ.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">ಬ್ಲೂಟೂತ್ ಸಾಧನವು "<ph name="DEVICE_NAME" />" ಜೋಡಣೆಗಾಗಿ ಅನುಮತಿಯನ್ನು ಬಯಸುತ್ತದೆ. ಆ ಸಾಧನದಲ್ಲಿ ಈ ಪಾಸ್ಕೀಲಿಯನ್ನು ನಮೂದಿಸಿ: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Bluetooth ಸಾಧನವನ್ನು "<ph name="DEVICE_NAME" />" ಜೋಡಿಸಲಾಗಿದೆ ಮತ್ತು ಇದೀಗ ಎಲ್ಲಾ ಬಳಕೆದಾರರಿಗೂ ಲಭ್ಯವಿದೆ. ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ನೀವು ಈ ಜೋಡಣೆಯನ್ನು ತೆಗೆದುಹಾಕಬಹುದು.</translation> <translation id="6785414152754474415">ಬ್ಯಾಟರಿ <ph name="PERCENTAGE" />% ಪೂರ್ಣಗೊಂಡಿದೆ ಮತ್ತು ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ.</translation> -<translation id="6803622936009808957">ಯಾವುದೇ ಬೆಂಬಲಿತ ಪರಿಹಾರಗಳು ಕಂಡುಬರದ ಕಾರಣ ಪ್ರದರ್ಶನಗಳನ್ನು ಪ್ರತಿಬಿಂಬಿಸಲಾಗಲಿಲ್ಲ. ಬದಲಿಗೆ ವಿಸ್ತರಿತ ಡೆಸ್ಕ್ಟಾಪ್ ಅನ್ನು ನಮೂದಿಸಲಾಗಿದೆ.</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox (ಮಾತಿನ ಪ್ರತಿಕ್ರಿಯೆ)</translation> <translation id="6911468394164995108">ಇತರರನ್ನು ಸೇರಿ...</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb index 6db13de4..3a78a551 100644 --- a/ash/strings/ash_strings_ko.xtb +++ b/ash/strings/ash_strings_ko.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">아니요</translation> <translation id="4279490309300973883">미러링</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">확장 데스크톱에 어울리지 않는 모니터네요. (지원되지 않는 모니터입니다.)</translation> <translation id="4421231901400348175">원격 지원을 통해 <ph name="HELPER_NAME" />와(과) 화면 제어 공유</translation> <translation id="4430019312045809116">볼륨</translation> <translation id="4527045527269911712">블루투스 기기 '<ph name="DEVICE_NAME" />'에서 페어링 허가를 요청합니다.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">블루투스 기기 '<ph name="DEVICE_NAME" />'에서 페어링 허가를 요청합니다. 해당 기기에서 다음 패스키를 입력하세요. <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">블루투스 기기 '<ph name="DEVICE_NAME" />'이(가) 페어링되어 이제 모든 사용자가 사용할 수 있습니다. 설정에서 이 페어링을 삭제할 수 있습니다.</translation> <translation id="6785414152754474415">배터리가 <ph name="PERCENTAGE" />% 충전되었으며 충전 중입니다.</translation> -<translation id="6803622936009808957">지원되는 해상도가 없으므로 디스플레이를 그대로 반영할 수 없습니다. 대신 확장 데스크톱을 시작했습니다.</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox(음성 피드백)</translation> <translation id="6911468394164995108">다른 네트워크에 연결</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb index fa927c5..91fd72a 100644 --- a/ash/strings/ash_strings_lt.xtb +++ b/ash/strings/ash_strings_lt.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Ne</translation> <translation id="4279490309300973883">Dubliuojama</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Mielas monitoriau, mums nepavyksta bendradarbiauti. (Tas monitorius nepalaikomas)</translation> <translation id="4421231901400348175"><ph name="HELPER_NAME" /> gali valdyti jūsų ekraną naudodamas (-a) Nuotolinę pagalbą.</translation> <translation id="4430019312045809116">Apimtis</translation> <translation id="4527045527269911712">„Bluetooth“ įrenginys „<ph name="DEVICE_NAME" />“ prašo leidimo susieti.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">„Bluetooth“ įrenginys „<ph name="DEVICE_NAME" />“ prašo leidimo susieti. Šiame įrenginyje įveskite šį slaptąjį raktą: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">„Bluetooth“ įrenginys „<ph name="DEVICE_NAME" />“ susietas ir dabar pasiekiamas visiems naudotojams. Nustatymuose galite pašalinti šį susiejimą.</translation> <translation id="6785414152754474415">Likusi akumuliatoriaus įkrova: <ph name="PERCENTAGE" /> %. Jis įkraunamas.</translation> -<translation id="6803622936009808957">Nepavyko dubliuoti vaizdų, nes nepavyko rasti palaikomų skyrų. Vietoje to įjungtas išplėstinio darbalaukio režimas.</translation> <translation id="683971173229319003">Paieškos klavišas + L</translation> <translation id="68610848741840742">„ChromeVox“ (žodiniai atsiliepimai)</translation> <translation id="6911468394164995108">Prisijungti prie kito...</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb index 4e4cab3..71a60deb 100644 --- a/ash/strings/ash_strings_lv.xtb +++ b/ash/strings/ash_strings_lv.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Nē</translation> <translation id="4279490309300973883">Spoguļošana</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Diemžēl monitoru nevar izmantot (tas netiek atbalstīts).</translation> <translation id="4421231901400348175">Ekrāna pārvaldības koplietošana ar <ph name="HELPER_NAME" />, izmantojot attālo palīdzību.</translation> <translation id="4430019312045809116">Skaļums</translation> <translation id="4527045527269911712">Bluetooth ierīce “<ph name="DEVICE_NAME" />” vēlas saņemt atļauju, lai izveidotu savienojumu pārī.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Bluetooth ierīce “<ph name="DEVICE_NAME" />” vēlas saņemt atļauju, lai izveidotu savienojumu pārī. Lūdzu, ievadiet ierīcē šo ieejas atslēgu: <ph name="PASSKEY" />.</translation> <translation id="6713285437468012787">Bluetooth ierīce “<ph name="DEVICE_NAME" />” ir savienota pārī un ir pieejama visiem lietotājiem. Lai pārtrauktu šo savienojumus, atveriet iestatījumus.</translation> <translation id="6785414152754474415">Akumulatora uzlādes līmenis: <ph name="PERCENTAGE" />%; uzlāde tiek turpināta.</translation> -<translation id="6803622936009808957">Nevarēja spoguļot displejus, jo netika atrasta atbalstīta izšķirtspēja. Tā vietā tika aktivizēts paplašinātās darbvirsmas režīms.</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox (balss komentāri)</translation> <translation id="6911468394164995108">Pievienoties citam...</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb index 20bf185..21667c0 100644 --- a/ash/strings/ash_strings_ml.xtb +++ b/ash/strings/ash_strings_ml.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">ഇല്ല</translation> <translation id="4279490309300973883">മിററിംഗ്</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">പ്രിയ മോണിറ്റർ, ഇത് നമുക്കിടയിൽ പ്രവർത്തിക്കുന്നില്ല. (ആ മോണിറ്റർ പിന്തുണയ്ക്കുന്നില്ല)</translation> <translation id="4421231901400348175"><ph name="HELPER_NAME" /> ഉപയോഗിച്ച് നിങ്ങളുടെ വിദൂര സഹായി മുഖേന സ്ക്രീനിന്റെ നിയന്ത്രണം പങ്കിടുക.</translation> <translation id="4430019312045809116">അളവ്</translation> <translation id="4527045527269911712">"<ph name="DEVICE_NAME" />" എന്ന Bluetooth ഉപകരണം ജോടിയാക്കുന്നതിനുള്ള അനുമതി ആവശ്യപ്പെടുന്നു.</translation> @@ -181,7 +180,6 @@ <translation id="6650933572246256093">"<ph name="DEVICE_NAME" />" എന്ന Bluetooth ഉപകരണം ജോടിയാക്കുന്നതിനുള്ള അനുമതി ആവശ്യപ്പെടുന്നു. ആ ഉപകരണത്തിൽ ഈ പാസ്കീ നൽകുക: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">"<ph name="DEVICE_NAME" />" എന്ന Bluetooth ഉപകരണം ജോടിയാക്കി, അത് ഇപ്പോൾ എല്ലാ ഉപയോക്താക്കൾക്കും ലഭ്യമാണ്. ക്രമീകരണങ്ങൾ ഉപയോഗിച്ച് നിങ്ങൾക്ക് ഈ ജോടിയാക്കൽ നീക്കംചെയ്യാം.</translation> <translation id="6785414152754474415">ബാറ്ററി <ph name="PERCENTAGE" />% നിറഞ്ഞിരിക്കുന്നു, ചാർജുചെയ്യൽ തുടരുന്നു.</translation> -<translation id="6803622936009808957">പിന്തുണയ്ക്കുന്ന മിഴിവുകൾ കണ്ടെത്താത്തതിനാൽ പ്രദർശനങ്ങൾ പ്രതിഫലിപ്പിക്കാനായില്ല. പകരം വിപുലീകൃത ഡെസ്ക്ടോപ്പ് നൽകി.</translation> <translation id="683971173229319003">തിരയൽ+L</translation> <translation id="68610848741840742">ChromeVox (സ്പോക്കൺ ഫീഡ്ബാക്ക്)</translation> <translation id="6911468394164995108">മറ്റുള്ളവ ചേർക്കുക...</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb index db69b1a4..a5c8074 100644 --- a/ash/strings/ash_strings_mr.xtb +++ b/ash/strings/ash_strings_mr.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">नाही</translation> <translation id="4279490309300973883">मिररिंग</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">प्रिय मॉनिटर, हे आपल्या दरम्यान कार्य करत नाही. (तो मॉनिटर समर्थित नाही)</translation> <translation id="4421231901400348175">दूरस्त सहाय्याद्वारे <ph name="HELPER_NAME" /> सह आपल्या स्क्रीनचे नियंत्रण सामायिक करत आहे.</translation> <translation id="4430019312045809116">व्हॉल्यूम</translation> <translation id="4527045527269911712">"<ph name="DEVICE_NAME" />" Bluetooth डिव्हाइस जोडण्यासाठी परवानगी घेऊ इच्छिते.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">"<ph name="DEVICE_NAME" />" Bluetooth डिव्हाइस जोडण्यासाठी परवानगी घेऊ इच्छिते. कृपया त्या डिव्हाइसवर ही पासकी प्रविष्ट करा: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">"<ph name="DEVICE_NAME" />" Bluetooth डिव्हाइस जोडले गेले आहे आणि सर्व वापरकर्त्यांसाठी आता उपलब्ध आहे. आपण सेटिंग्ज वापरून ही जोडणी काढू शकता.</translation> <translation id="6785414152754474415">बॅटरी <ph name="PERCENTAGE" />% भरली आहे आणि चार्ज होत आहे.</translation> -<translation id="6803622936009808957">समर्थित रिजोल्यूशन न आढळल्यामुळे प्रदर्शने मिरर करू शकली नाहीत. त्याऐवजी विस्तारित डेस्कटॉप प्रविष्ट केला.</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox (बोललेला अभिप्राय)</translation> <translation id="6911468394164995108">दुसरीकडे सामील व्हा...</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb index 373c479..9d9c1fe1 100644 --- a/ash/strings/ash_strings_ms.xtb +++ b/ash/strings/ash_strings_ms.xtb
@@ -112,7 +112,6 @@ <translation id="4250680216510889253">Tidak</translation> <translation id="4279490309300973883">Pencerminan</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Malang sekali, tidak wujud keserasian antara kita, Monitor. (Monitor itu tidak disokong)</translation> <translation id="4421231901400348175">Berkongsi kawalan skrin anda dengan <ph name="HELPER_NAME" /> melalui Bantuan Jauh.</translation> <translation id="4430019312045809116">Kelantangan</translation> <translation id="4527045527269911712">Peranti Bluetooth "<ph name="DEVICE_NAME" />" ingin kebenaran untuk berpasangan.</translation> @@ -181,7 +180,6 @@ <translation id="6650933572246256093">Peranti Bluetooth "<ph name="DEVICE_NAME" />" ingin kebenaran untuk berpasangan. Sila masukkan kekunci laluan ini pada peranti tersebut: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Peranti Bluetooth "<ph name="DEVICE_NAME" />" telah dipasangkan dan kini tersedia untuk semua pengguna. Anda boleh mengalih keluar pasangan ini menggunakan Tetapan.</translation> <translation id="6785414152754474415">Bateri <ph name="PERCENTAGE" />% penuh dan sedang dicas.</translation> -<translation id="6803622936009808957">Tidak dapat membalikkan paparan memandangkan tiada peleraian disokong ditemui. Sebaliknya, memasuki mod desktop yang dilanjutkan.</translation> <translation id="683971173229319003">Carian+L</translation> <translation id="68610848741840742">ChromeVox (Maklum balas pertuturan)</translation> <translation id="6911468394164995108">Sertai yang lain...</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb index cecb36b..2bdcfd8 100644 --- a/ash/strings/ash_strings_nl.xtb +++ b/ash/strings/ash_strings_nl.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Nee</translation> <translation id="4279490309300973883">Mirroring</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Het lijkt erop dat dit niet werkt. Het beeldscherm wordt niet ondersteund.</translation> <translation id="4421231901400348175">De controle over je scherm wordt gedeeld met <ph name="HELPER_NAME" /> via externe ondersteuning.</translation> <translation id="4430019312045809116">Volume</translation> <translation id="4527045527269911712">Bluetooth-apparaat '<ph name="DEVICE_NAME" />' wil toestemming om te koppelen.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Bluetooth-apparaat '<ph name="DEVICE_NAME" />' wil toestemming om te koppelen. Voer de volgende toegangscode in op dat apparaat: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Bluetooth-apparaat '<ph name="DEVICE_NAME" />' is gekoppeld en is nu beschikbaar voor alle gebruikers. Je kunt deze koppeling verwijderen via 'Instellingen'.</translation> <translation id="6785414152754474415">De accu is <ph name="PERCENTAGE" />% vol en wordt opgeladen.</translation> -<translation id="6803622936009808957">Kan schermen niet spiegelen, omdat er geen ondersteunde resoluties zijn gevonden. Het uitgebreide bureaublad is geactiveerd.</translation> <translation id="683971173229319003">Zoeken+L</translation> <translation id="68610848741840742">ChromeVox (gesproken feedback)</translation> <translation id="6911468394164995108">Verbinding met ander netwerk maken...</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb index 1e05a67..3784c3a 100644 --- a/ash/strings/ash_strings_no.xtb +++ b/ash/strings/ash_strings_no.xtb
@@ -114,7 +114,6 @@ <translation id="4250680216510889253">Nei</translation> <translation id="4279490309300973883">Speiling</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Kjære skjerm, det går ikke så bra mellom oss. (Skjermen støttes ikke)</translation> <translation id="4421231901400348175">Deler kontroll av skjermen med <ph name="HELPER_NAME" /> via fjernhjelp.</translation> <translation id="4430019312045809116">Volum</translation> <translation id="4527045527269911712">Bluetooth-enheten «<ph name="DEVICE_NAME" />» ber om tillatelse til å koble til.</translation> @@ -183,7 +182,6 @@ <translation id="6650933572246256093">Bluetooth-enheten «<ph name="DEVICE_NAME" />» ber om tillatelse til å koble til. Skriv inn denne tilgangskoden på den aktuelle enheten: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Nå er Bluetooth-enheten «<ph name="DEVICE_NAME" />» koblet til og tilgjengelig for alle brukere. Du kan oppheve denne tilkoblingen via Innstillinger.</translation> <translation id="6785414152754474415">Batteriet er <ph name="PERCENTAGE" /> % fullt og til lading.</translation> -<translation id="6803622936009808957">Kunne ikke speile skjermene fordi ingen støttede oppløsninger ble funnet. Utvidet skrivebord ble brukt i stedet.</translation> <translation id="683971173229319003">Søk+L</translation> <translation id="68610848741840742">ChromeVox (muntlig tilbakemelding)</translation> <translation id="6911468394164995108">Koble til annet</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb index feebd09..0fb6045e 100644 --- a/ash/strings/ash_strings_pl.xtb +++ b/ash/strings/ash_strings_pl.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Nie</translation> <translation id="4279490309300973883">Odbicie lustrzane</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Drogi monitorze, nie układa się między nami. (Ten monitor jest nieobsługiwany)</translation> <translation id="4421231901400348175">Udostępnianie sterowania ekranem użytkownikowi <ph name="HELPER_NAME" /> przy użyciu pomocy zdalnej.</translation> <translation id="4430019312045809116">Głośność</translation> <translation id="4527045527269911712">Urządzenie Bluetooth „<ph name="DEVICE_NAME" />” chce się sparować.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Urządzenie Bluetooth „<ph name="DEVICE_NAME" />” chce się sparować. Wpisz na nim ten klucz: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Urządzenie Bluetooth „<ph name="DEVICE_NAME" />” zostało sparowane i jest teraz dostępne dla wszystkich użytkowników. Możesz usunąć to sparowanie w Ustawieniach.</translation> <translation id="6785414152754474415">Naładowanie baterii: <ph name="PERCENTAGE" />%. Trwa ładowanie.</translation> -<translation id="6803622936009808957">Nie można wyświetlić odbicia lustrzanego, ponieważ nie znaleziono obsługiwanych rozdzielczości. Zamiast tego został włączony pulpit rozszerzony.</translation> <translation id="683971173229319003">Szukaj+L</translation> <translation id="68610848741840742">ChromeVox (potwierdzenia głosowe)</translation> <translation id="6911468394164995108">Połącz z inną...</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb index 2a92910..9a226dd 100644 --- a/ash/strings/ash_strings_pt-BR.xtb +++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -112,7 +112,6 @@ <translation id="4250680216510889253">Não</translation> <translation id="4279490309300973883">Espelhamento</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Prezado monitor, as coisas não estão dando certo entre nós (este monitor não é suportado).</translation> <translation id="4421231901400348175">Compartilhando o controle da sua tela com <ph name="HELPER_NAME" /> via Assistência remota.</translation> <translation id="4430019312045809116">Volume</translation> <translation id="4527045527269911712">O dispositivo Bluetooth "<ph name="DEVICE_NAME" />" deseja permissão para realizar o pareamento.</translation> @@ -181,7 +180,6 @@ <translation id="6650933572246256093">O dispositivo Bluetooth "<ph name="DEVICE_NAME" />" deseja permissão para realizar o pareamento. Digite esta senha no dispositivo: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">O dispositivo Bluetooth "<ph name="DEVICE_NAME" />" está pareado e disponível para todos os usuários. Para cancelar o pareamento, vá para "Configurações".</translation> <translation id="6785414152754474415">A bateria está <ph name="PERCENTAGE" />% cheia e carregando.</translation> -<translation id="6803622936009808957">Não foi possível espelhar os displays porque não foram encontradas resoluções suportadas. Em vez disso, foi ativada a área de trabalho estendida.</translation> <translation id="683971173229319003">Pesquisa+L</translation> <translation id="68610848741840742">ChromeVox (feedback falado)</translation> <translation id="6911468394164995108">Conectar-se a outra...</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb index e347c58..08c5992c 100644 --- a/ash/strings/ash_strings_pt-PT.xtb +++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Não</translation> <translation id="4279490309300973883">Espelhamento</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Caro Monitor, não está a resultar entre nós. (Esse monitor não é suportado)</translation> <translation id="4421231901400348175">A partilhar o controlo do seu ecrã com <ph name="HELPER_NAME" /> através da Assistência remota.</translation> <translation id="4430019312045809116">Volume</translation> <translation id="4527045527269911712">O dispositivo Bluetooth "<ph name="DEVICE_NAME" />" necessita de autorização para sincronizar.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">O dispositivo Bluetooth "<ph name="DEVICE_NAME" />" necessita de autorização para sincronizar. Introduza esta chave nesse dispositivo: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">O dispositivo Bluetooth "<ph name="DEVICE_NAME" />" foi sincronizado e está agora disponível para todos os utilizadores. Pode remover esta sincronização através das Definições.</translation> <translation id="6785414152754474415">A bateria está <ph name="PERCENTAGE" />% cheia e a carregar.</translation> -<translation id="6803622936009808957">Não foi possível espelhar os ecrãs, porque não foram encontradas resoluções suportadas. Em vez disso, entrou no ambiente de trabalho expandido.</translation> <translation id="683971173229319003">Pesquisa+L</translation> <translation id="68610848741840742">ChromeVox (respostas faladas)</translation> <translation id="6911468394164995108">Ligar-se a outra...</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb index 6e1e5af5..2b7256c 100644 --- a/ash/strings/ash_strings_ro.xtb +++ b/ash/strings/ash_strings_ro.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Nu</translation> <translation id="4279490309300973883">Oglindire</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Dear Monitor, it's not working out between us. (Monitorul respectiv nu este acceptat)</translation> <translation id="4421231901400348175">În prezent, <ph name="HELPER_NAME" /> îți poate controla ecranul prin Asistență la distanță.</translation> <translation id="4430019312045809116">Volum</translation> <translation id="4527045527269911712">Dispozitivul Bluetooth „<ph name="DEVICE_NAME" />” solicită permisiunea de a se conecta.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Dispozitivul Bluetooth „<ph name="DEVICE_NAME" />” solicită permisiunea de a se conecta. Introduceți această parolă pe dispozitivul respectiv: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Dispozitivul Bluetooth „<ph name="DEVICE_NAME" />” a fost conectat și este disponibil acum pentru toți utilizatorii. Puteți elimina această conexiune din Setări.</translation> <translation id="6785414152754474415">Nivelul bateriei este de <ph name="PERCENTAGE" />% și se încarcă.</translation> -<translation id="6803622936009808957">Afișajele nu au putut fi oglindite, deoarece nu au fost găsite rezoluții acceptate. Ați intrat, în schimb, în modul monitor extins.</translation> <translation id="683971173229319003">Tasta de căutare + L</translation> <translation id="68610848741840742">ChromeVox (feedback rostit)</translation> <translation id="6911468394164995108">Conectați-vă la altă rețea...</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb index 11a7a98f..7c6500c 100644 --- a/ash/strings/ash_strings_ru.xtb +++ b/ash/strings/ash_strings_ru.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Нет</translation> <translation id="4279490309300973883">Отражение</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Не удалось выполнить операцию.</translation> <translation id="4421231901400348175">Доступ к экрану для <ph name="HELPER_NAME" /> с помощью удаленного помощника</translation> <translation id="4430019312045809116">Объем</translation> <translation id="4527045527269911712">Устройству <ph name="DEVICE_NAME" /> требуется разрешение на подключение через Bluetooth.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Устройству <ph name="DEVICE_NAME" /> требуется разрешение на подключение через Bluetooth. Введите на нем код: <ph name="PASSKEY" />.</translation> <translation id="6713285437468012787">Устройство <ph name="DEVICE_NAME" /> подключено через Bluetooth и доступно всем пользователям. Вы можете отключить его на странице настроек.</translation> <translation id="6785414152754474415">Батарея заряжена на <ph name="PERCENTAGE" />% и подключена к источнику питания.</translation> -<translation id="6803622936009808957">Не удалось дублировать изображение экрана, т. к. указанное разрешение не поддерживается. Включен режим расширенного рабочего стола.</translation> <translation id="683971173229319003">Клавиша поиска + L</translation> <translation id="68610848741840742">ChromeVox (голосовое сопровождение)</translation> <translation id="6911468394164995108">Подключиться к другой сети...</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb index f876391..a76edf07 100644 --- a/ash/strings/ash_strings_sk.xtb +++ b/ash/strings/ash_strings_sk.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Nie</translation> <translation id="4279490309300973883">Zrkadlenie</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Milý monitor, medzi nami to nefunguje. (Tento monitor sa nepodporuje)</translation> <translation id="4421231901400348175">Ovládanie obrazovky sa prostredníctvom Vzdialenej pomoci zdieľa s používateľom <ph name="HELPER_NAME" />.</translation> <translation id="4430019312045809116">Hlasitosť</translation> <translation id="4527045527269911712">Zariadenie Bluetooth s názvom <ph name="DEVICE_NAME" /> žiada o povolenie párovania.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Zariadenie Bluetooth s názvom <ph name="DEVICE_NAME" /> žiada o povolenie párovania. Zadajte na danom zariadení tento prístupový kľúč: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Zariadenie Bluetooth s názvom <ph name="DEVICE_NAME" /> bolo spárované a je k dispozícii pre všetkých používateľov. Párovanie môžete zrušiť pomocou ponuky Nastavenia.</translation> <translation id="6785414152754474415">Batéria je nabitá na <ph name="PERCENTAGE" /> % a nabíja sa.</translation> -<translation id="6803622936009808957">Obraz na monitoroch sa nedá zrkadliť, pretože sa nenašli podporované rozlíšenia. Namiesto toho sa spustil režim rozšírenej pracovnej plochy.</translation> <translation id="683971173229319003">Hľadať+L</translation> <translation id="68610848741840742">ChromeVox (hlasová spätná väzba)</translation> <translation id="6911468394164995108">Pripojiť k ďalšej...</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb index d7afb4c..d747164 100644 --- a/ash/strings/ash_strings_sl.xtb +++ b/ash/strings/ash_strings_sl.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Ne</translation> <translation id="4279490309300973883">Zrcaljenje</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Dragi monitor, med nama se ne bo obneslo. (Ta monitor ni podprt)</translation> <translation id="4421231901400348175">Deljenje nadzora nad zaslonom z osebo <ph name="HELPER_NAME" /> prek pomoči na daljavo.</translation> <translation id="4430019312045809116">Glasnost</translation> <translation id="4527045527269911712">Naprava Bluetooth »<ph name="DEVICE_NAME" />« želi dovoljenje za seznanjanje.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Naprava Bluetooth »<ph name="DEVICE_NAME" />« želi vaše dovoljenje za seznanjanje. V napravi vnesite to geslo: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Naprava Bluetooth »<ph name="DEVICE_NAME" />« je seznanjena in je zdaj na voljo vsem uporabnikom. To seznanitev lahko odstranite v nastavitvah.</translation> <translation id="6785414152754474415">Napolnjenost akumulatorja: <ph name="PERCENTAGE" /> % – polnjenje še poteka.</translation> -<translation id="6803622936009808957">Zaslonov ni bilo mogoče zrcaliti, ker ni bilo najdene nobene podprte ločljivosti. Uporabljeno je razširjeno namizje.</translation> <translation id="683971173229319003">Iskanje + L</translation> <translation id="68610848741840742">ChromeVox (izgovorjava povratnih informacij)</translation> <translation id="6911468394164995108">Pridružite se drugemu ...</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb index be98396..c1bd577f 100644 --- a/ash/strings/ash_strings_sr.xtb +++ b/ash/strings/ash_strings_sr.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Не</translation> <translation id="4279490309300973883">Пресликавање</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Драги мониторе, не иде нам. (Тај монитор није подржан)</translation> <translation id="4421231901400348175">Делите контролу над екраном са особом <ph name="HELPER_NAME" /> преко Даљинске помоћи.</translation> <translation id="4430019312045809116">Јачина звука</translation> <translation id="4527045527269911712">Bluetooth уређај „<ph name="DEVICE_NAME" />“ жели дозволу за упаривање.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Bluetooth уређај „<ph name="DEVICE_NAME" />“ жели дозволу за упаривање. Унесите ову шифру на том уређају: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Bluetooth уређај „<ph name="DEVICE_NAME" />“ је упарен и сада је доступан свим корисницима. Можете да уклоните то упаривање помоћу Подешавања.</translation> <translation id="6785414152754474415">Батерија је <ph name="PERCENTAGE" />% пуна и још увек се пуни.</translation> -<translation id="6803622936009808957">Није могуће пресликати екране зато што није пронађена ниједна подржана резолуција. Уместо тога, приказује се проширена радна површина.</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox (говорне повратне информације)</translation> <translation id="6911468394164995108">Придружи ме другој...</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb index 565620d..f634ab9 100644 --- a/ash/strings/ash_strings_sv.xtb +++ b/ash/strings/ash_strings_sv.xtb
@@ -112,7 +112,6 @@ <translation id="4250680216510889253">Nej</translation> <translation id="4279490309300973883">Spegling</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Det fungerar inte med den här skärmen. (Skärmen stöds inte.)</translation> <translation id="4421231901400348175">Dela kontroll över skärmen med <ph name="HELPER_NAME" /> via Fjärrhjälp.</translation> <translation id="4430019312045809116">Volym</translation> <translation id="4527045527269911712">Bluetooth-enheten <ph name="DEVICE_NAME" /> har begärt tillstånd för koppling.</translation> @@ -181,7 +180,6 @@ <translation id="6650933572246256093">Bluetooth-enheten <ph name="DEVICE_NAME" /> har begärt tillstånd för koppling. Ange denna lösenordsnyckel på den enheten: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Bluetooth-enheten <ph name="DEVICE_NAME" /> har kopplats och är nu tillgänglig för alla användare. Du kan ta bort kopplingen i Inställningar.</translation> <translation id="6785414152754474415">Batteriet är fullt till <ph name="PERCENTAGE" /> % och laddas.</translation> -<translation id="6803622936009808957">Det gick inte att spegla visningar eftersom inga upplösningar som stöds hittades. Utökat skrivbordsläge används i stället.</translation> <translation id="683971173229319003">Sök+L</translation> <translation id="68610848741840742">ChromeVox (talad feedback)</translation> <translation id="6911468394164995108">Anslut till andra ...</translation>
diff --git a/ash/strings/ash_strings_sw.xtb b/ash/strings/ash_strings_sw.xtb index d2ee3020..905c41118 100644 --- a/ash/strings/ash_strings_sw.xtb +++ b/ash/strings/ash_strings_sw.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">La</translation> <translation id="4279490309300973883">Kuakisi</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Mpendwa Kionyeshi, hali sio nzuri kati yetu. (Kionyeshi hiki hakiwezi kutumiwa)</translation> <translation id="4421231901400348175">Kushiriki udhibiti wa skrini yako na <ph name="HELPER_NAME" /> kupitia Usaidizi wa Mbali.</translation> <translation id="4430019312045809116">Kiwango</translation> <translation id="4527045527269911712">Kifaa cha Bluetooth cha "<ph name="DEVICE_NAME" />" kinaomba idhini ya kuoanisha.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Kifaa cha Bluetooth cha "<ph name="DEVICE_NAME" />" kinaomba idhini ya kuoanisha. Tafadhali weka nenosiri hili kwenye kifaa hicho: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Kifaa cha Bluetooth cha "<ph name="DEVICE_NAME" />" kimeoanishwa na sasa kinapatikana kwa watumiaji wote. Unaweza kuondoa uoanishaji huu kwa kutumia Mipangilio.</translation> <translation id="6785414152754474415">Betri imejaa <ph name="PERCENTAGE" />% na inachaji.</translation> -<translation id="6803622936009808957">Haikuweza kuakisi maonyesho kwa kuwa hakuna misongo inayoweza kutumiwa iliyopatikana. Badala yake imeingia eneo-kazi lililopanuliwa.</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox (Maoni Yaliyotamkwa)</translation> <translation id="6911468394164995108">Jiunge na mwingine...</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb index e8db0b34..02a57225 100644 --- a/ash/strings/ash_strings_ta.xtb +++ b/ash/strings/ash_strings_ta.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">இல்லை</translation> <translation id="4279490309300973883">பிரதிபலிக்கிறது</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">அந்த மானிட்டர் ஆதரிக்கப்படவில்லை.</translation> <translation id="4421231901400348175">தொலைநிலை உதவி மூலம் <ph name="HELPER_NAME" /> உடன் உங்கள் திரையின் கட்டுப்பாட்டைப் பகிர்கிறது.</translation> <translation id="4430019312045809116">அளவு</translation> <translation id="4527045527269911712">புளூடூத் சாதனம் "<ph name="DEVICE_NAME" />", இணைப்பதற்கான அனுமதியை விரும்புகிறது.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">புளூடூத் சாதனம் "<ph name="DEVICE_NAME" />" இணைப்பதற்கான அனுமதியை விரும்புகிறது. அந்தச் சாதனத்தில் இந்தக் கடவுச்சொல்லை உள்ளிடவும்: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">புளூடூத் சாதனம் "<ph name="DEVICE_NAME" />" ஆனது இணைக்கப்பட்டது மற்றும் இப்போது எல்லா பயனர்களுக்கும் கிடைக்கக்கூடியதாக உள்ளது. அமைப்புகளைப் பயன்படுத்தி இந்த இணைத்தலை நீங்கள் அகற்றலாம்.</translation> <translation id="6785414152754474415">பேட்டரி <ph name="PERCENTAGE" />% நிரம்பியது, மேலும் சார்ஜ் ஆகிறது.</translation> -<translation id="6803622936009808957">ஆதரிக்கும் தெளிவுகள் கிடைக்காததால் காட்சிகளைப் பிரதிபலிக்க முடியவில்லை. பதிலாக நீட்டிக்கப்பட்ட டெஸ்க்டாப்பிற்குச் சென்றது.</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox (பேச்சுவடிவ கருத்து)</translation> <translation id="6911468394164995108">மற்றொன்றில் சேர்...</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb index 4c8fac7b..19e9400c 100644 --- a/ash/strings/ash_strings_te.xtb +++ b/ash/strings/ash_strings_te.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">కాదు</translation> <translation id="4279490309300973883">ప్రతిబింబిస్తుంది</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">ప్రియమైన మానిటర్, ఇది మన మధ్య పని చేయడం లేదు. (ఆ మానిటర్కు మద్దతు లేదు)</translation> <translation id="4421231901400348175">రిమోట్ సహాయం విధానంలో మీ స్క్రీన్ నియంత్రణ <ph name="HELPER_NAME" />కి భాగస్వామ్యం చేయబడుతోంది.</translation> <translation id="4430019312045809116">వాల్యూమ్</translation> <translation id="4527045527269911712">బ్లూటూత్ పరికరం "<ph name="DEVICE_NAME" />" జత కావడానికి అనుమతి కోరుతోంది.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">బ్లూటూత్ పరికరం "<ph name="DEVICE_NAME" />" జత కావడానికి అనుమతి కోరుతోంది. దయచేసి ఆ పరికరంలో ఈ పాస్కీని నమోదు చేయండి: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">బ్లూటూత్ పరికరం "<ph name="DEVICE_NAME" />" జత చేయబడింది మరియు ఇప్పుడు అందరు వినియోగదారులకు అందుబాటులో ఉంది. మీరు సెట్టింగ్లను ఉపయోగించి ఈ జతను తీసివేయవచ్చు.</translation> <translation id="6785414152754474415">బ్యాటరీ <ph name="PERCENTAGE" />% నిండింది మరియు ఛార్జ్ అవుతోంది.</translation> -<translation id="6803622936009808957">మద్దతు ఉన్న రిజల్యూషన్లు కనుగొనబడనందున ప్రదర్శనలను ప్రతిబింబించడం సాధ్యపడలేదు. దానికి బదులుగా విస్తారిత డెస్క్టాప్కు మారారు.</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox (చదవబడే అభిప్రాయం)</translation> <translation id="6911468394164995108">మరొక దానిలో చేరండి...</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb index e7a2e57..616cdfc 100644 --- a/ash/strings/ash_strings_th.xtb +++ b/ash/strings/ash_strings_th.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">ไม่มี</translation> <translation id="4279490309300973883">กำลังแสดงผล</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">จอภาพเอ๋ย เราร่วมงานกันไม่ได้ (จอภาพนั้นไม่ได้รับการสนับสนุน)</translation> <translation id="4421231901400348175">กำลังแชร์การควบคุมหน้าจอกับ <ph name="HELPER_NAME" /> ผ่านความช่วยเหลือระยะไกล</translation> <translation id="4430019312045809116">ระดับเสียง</translation> <translation id="4527045527269911712">อุปกรณ์บลูทูธ "<ph name="DEVICE_NAME" />" ต้องการสิทธิ์ในการจับคู่</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">อุปกรณ์บลูทูธ "<ph name="DEVICE_NAME" />" ต้องการสิทธิ์ในการจับคู่ โปรดป้อนรหัสผ่านนี้บนอุปกรณ์นั้น: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">อุปกรณ์บลูทูธ "<ph name="DEVICE_NAME" />" ได้รับการจับคู่และขณะนี้พร้อมให้บริการแก่ผู้ใช้ทุกคนแล้ว คุณสามารถลบการจับคู่นี้โดยใช้การตั้งค่า</translation> <translation id="6785414152754474415">มีแบตเตอรี่ <ph name="PERCENTAGE" />% และกำลังชาร์จ</translation> -<translation id="6803622936009808957">ไม่สามารถแสดงผลคู่ขนานได้เนื่องจากไม่พบความละเอียดที่สนับสนุน เข้าสู่เดสก์ท็อปแบบขยายแทน</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox (การตอบสนองด้วยเสียง)</translation> <translation id="6911468394164995108">เชื่อมต่อเครือข่ายอื่น...</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb index 137a104..86eb339 100644 --- a/ash/strings/ash_strings_tr.xtb +++ b/ash/strings/ash_strings_tr.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Hayır</translation> <translation id="4279490309300973883">Yansıtılıyor</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Sevgili Monitör, aramızdaki bu ilişki yürümüyor. (Bu monitör desteklenmiyor)</translation> <translation id="4421231901400348175">Ekranınızın kontrolü, Uzaktan Yardım kullanılarak <ph name="HELPER_NAME" /> ile paylaşılıyor.</translation> <translation id="4430019312045809116">Ses</translation> <translation id="4527045527269911712">"<ph name="DEVICE_NAME" />" adlı Bluetooth cihaz eşleme izni istiyor.</translation> @@ -183,7 +182,6 @@ <translation id="6650933572246256093">"<ph name="DEVICE_NAME" />" adlı Bluetooth cihaz eşleme izni istiyor. Lütfen söz konusu cihazda bu parolayı girin: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">"<ph name="DEVICE_NAME" />" adlı Bluetooth cihaz eşlendi ve artık tüm kullanıcılar tarafından kullanılabilir. Bu eşlemeyi Ayarlar'ı kullanarak kaldırabilirsiniz.</translation> <translation id="6785414152754474415">Pil %<ph name="PERCENTAGE" /> dolu ve şarj oluyor.</translation> -<translation id="6803622936009808957">Desteklenen bir çözünürlük bulunamadığı için ekranlar yansıtılamıyor. Bunun yerine genişletilmiş masaüstüne geçiliyor.</translation> <translation id="683971173229319003">Ara+L</translation> <translation id="68610848741840742">ChromeVox (Sesli geri bildirim)</translation> <translation id="6911468394164995108">Başka ağa katıl...</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb index 71df8e7..f683c09 100644 --- a/ash/strings/ash_strings_uk.xtb +++ b/ash/strings/ash_strings_uk.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">ні</translation> <translation id="4279490309300973883">Дзеркальне відображення</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Прикро, але контакту з монітором немає. (Цей монітор не підтримується)</translation> <translation id="4421231901400348175">Спільний доступ до екрана для користувача <ph name="HELPER_NAME" /> через віддалену допомогу.</translation> <translation id="4430019312045809116">Гучність</translation> <translation id="4527045527269911712">Пристрою Bluetooth "<ph name="DEVICE_NAME" />" потрібен дозвіл на підключення.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Пристрою Bluetooth "<ph name="DEVICE_NAME" />" потрібен дозвіл на підключення. Введіть на пристрої цей ключ доступу: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Пристрій Bluetooth "<ph name="DEVICE_NAME" />" підключено. Він доступний для всіх користувачів. Відключити пристрій можна в Налаштуваннях.</translation> <translation id="6785414152754474415">Акумулятор заряджений на <ph name="PERCENTAGE" />% і заряджається.</translation> -<translation id="6803622936009808957">Не вдалося дублювати зображення екранів, оскільки не знайдено підтримувані значення роздільної здатності. Натомість запущено режим розширеного робочого столу.</translation> <translation id="683971173229319003">Search (Пошук)+L</translation> <translation id="68610848741840742">ChromeVox (голосові підказки)</translation> <translation id="6911468394164995108">Під’єднатися до іншої...</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb index 9f3e90a..308213a 100644 --- a/ash/strings/ash_strings_vi.xtb +++ b/ash/strings/ash_strings_vi.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">Không</translation> <translation id="4279490309300973883">Đang phản chiếu</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">Rất tiếc, hệ thống không hoạt động giữa hai màn hình. (Màn hình đó không được hỗ trợ)</translation> <translation id="4421231901400348175">Chia sẻ quyền kiểm soát màn hình của bạn với <ph name="HELPER_NAME" /> qua Trợ giúp từ xa.</translation> <translation id="4430019312045809116">Âm lượng</translation> <translation id="4527045527269911712">Thiết bị Bluetooth "<ph name="DEVICE_NAME" />"muốn được phép ghép nối.</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">Thiết bị Bluetooth "<ph name="DEVICE_NAME" />" muốn được phép ghép nối. Vui lòng nhập mã xác nhận này trên thiết bị đó: <ph name="PASSKEY" /></translation> <translation id="6713285437468012787">Thiết bị Bluetooth "<ph name="DEVICE_NAME" />"đã được ghép nối và hiện khả dụng với tất cả người dùng. Bạn có thể xóa ghép nối này bằng Cài đặt.</translation> <translation id="6785414152754474415">Pin đầy <ph name="PERCENTAGE" />% và đang sạc.</translation> -<translation id="6803622936009808957">Không thể phản chiếu màn hình do không tìm thấy độ phân giải được hỗ trợ. Thay vào đó, đã chuyển sang chế độ màn hình mở rộng.</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox (Phản hồi bằng giọng nói)</translation> <translation id="6911468394164995108">Tham gia mạng khác...</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb index 2aa37dbd..2bfffb83 100644 --- a/ash/strings/ash_strings_zh-CN.xtb +++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">否</translation> <translation id="4279490309300973883">正在镜像</translation> <translation id="4321179778687042513">ctrl</translation> -<translation id="4379753398862151997">嗨!显示器,咱们合不来。(系统不支持该显示器)</translation> <translation id="4421231901400348175">正在通过远程协助与<ph name="HELPER_NAME" />共享您屏幕的控制权限。</translation> <translation id="4430019312045809116">音量</translation> <translation id="4527045527269911712">蓝牙设备“<ph name="DEVICE_NAME" />”需要配对许可。</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">蓝牙设备“<ph name="DEVICE_NAME" />”需要配对许可。请在该设备上输入以下配对密钥:<ph name="PASSKEY" /></translation> <translation id="6713285437468012787">蓝牙设备“<ph name="DEVICE_NAME" />”已配对,现可供所有用户使用。您可以通过“设置”取消此配对。</translation> <translation id="6785414152754474415">电池电量为<ph name="PERCENTAGE" />%(正在充电)。</translation> -<translation id="6803622936009808957">找不到系统支持的分辨率,因此无法镜像显示屏。已改为进入扩展桌面。</translation> <translation id="683971173229319003">Search+L</translation> <translation id="68610848741840742">ChromeVox(语音反馈)</translation> <translation id="6911468394164995108">连接其他网络...</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb index 5191449..a5153b35 100644 --- a/ash/strings/ash_strings_zh-TW.xtb +++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -113,7 +113,6 @@ <translation id="4250680216510889253">否</translation> <translation id="4279490309300973883">鏡像</translation> <translation id="4321179778687042513">Ctrl</translation> -<translation id="4379753398862151997">Dear Monitor, it's not working out between us. (系統無法支援該顯示器)</translation> <translation id="4421231901400348175">透過遠端協助與<ph name="HELPER_NAME" />分享螢幕控制功能。</translation> <translation id="4430019312045809116">音量</translation> <translation id="4527045527269911712">藍牙裝置「<ph name="DEVICE_NAME" />」要求配對權限。</translation> @@ -182,7 +181,6 @@ <translation id="6650933572246256093">藍牙裝置「<ph name="DEVICE_NAME" />」要求配對權限,請在裝置上輸入此密碼金鑰:<ph name="PASSKEY" /></translation> <translation id="6713285437468012787">藍牙裝置「<ph name="DEVICE_NAME" />」已配對成功,可供所有使用者使用。如要移除配對,請使用「設定」。</translation> <translation id="6785414152754474415">電池電量為 <ph name="PERCENTAGE" />% (充電中)。</translation> -<translation id="6803622936009808957">找不到系統支援的解析度,因此無法顯示鏡像。已改為進入延伸桌面。</translation> <translation id="683971173229319003">搜尋鍵 + L 鍵</translation> <translation id="68610848741840742">ChromeVox (互動朗讀)</translation> <translation id="6911468394164995108">加入其他網路...</translation>
diff --git a/ash/test/test_lock_state_controller_delegate.cc b/ash/test/test_lock_state_controller_delegate.cc index 55e46ac..aa2d834e 100644 --- a/ash/test/test_lock_state_controller_delegate.cc +++ b/ash/test/test_lock_state_controller_delegate.cc
@@ -15,6 +15,13 @@ TestLockStateControllerDelegate::~TestLockStateControllerDelegate() { } +bool TestLockStateControllerDelegate::IsLoading() const { + // There is no way for to know, since we can't include the + // content::WebContents definition (whose instance we can retrieve from + // ScreenLocker). + return false; +} + void TestLockStateControllerDelegate::RequestLockScreen() { ++num_lock_requests_; }
diff --git a/ash/test/test_lock_state_controller_delegate.h b/ash/test/test_lock_state_controller_delegate.h index d38da4e..ae17f76 100644 --- a/ash/test/test_lock_state_controller_delegate.h +++ b/ash/test/test_lock_state_controller_delegate.h
@@ -22,6 +22,7 @@ int num_shutdown_requests() const { return num_shutdown_requests_; } // LockStateControllerDelegate implementation. + bool IsLoading() const override; void RequestLockScreen() override; void RequestShutdown() override;
diff --git a/ash/touch/touch_hud_debug.cc b/ash/touch/touch_hud_debug.cc index 5c85f5f6..099233b 100644 --- a/ash/touch/touch_hud_debug.cc +++ b/ash/touch/touch_hud_debug.cc
@@ -93,9 +93,9 @@ type(touch.type()), location(touch.root_location()), timestamp(touch.time_stamp().InMillisecondsF()), - radius_x(touch.pointer_details().radius_x()), - radius_y(touch.pointer_details().radius_y()), - pressure(touch.pointer_details().force()), + radius_x(touch.pointer_details().radius_x), + radius_y(touch.pointer_details().radius_y), + pressure(touch.pointer_details().force), tracking_id(GetTrackingId(touch)), source_device(touch.source_device_id()) {}
diff --git a/ash/touch/touch_uma.cc b/ash/touch/touch_uma.cc index 311fade..4dbb285 100644 --- a/ash/touch/touch_uma.cc +++ b/ash/touch/touch_uma.cc
@@ -83,8 +83,8 @@ const ui::TouchEvent& event) { UMA_HISTOGRAM_CUSTOM_COUNTS( "Ash.TouchRadius", - static_cast<int>(std::max(event.pointer_details().radius_x(), - event.pointer_details().radius_y())), + static_cast<int>(std::max(event.pointer_details().radius_x, + event.pointer_details().radius_y)), 1, 500, 100); UpdateTouchState(event);
diff --git a/ash/wm/lock_state_controller.cc b/ash/wm/lock_state_controller.cc index a0f0d84..c6b5e91 100644 --- a/ash/wm/lock_state_controller.cc +++ b/ash/wm/lock_state_controller.cc
@@ -270,7 +270,13 @@ lock_duration_timer_->Elapsed()); lock_duration_timer_.reset(); DCHECK(!system_is_locked_); - LOG(FATAL) << "Screen lock took too long; crashing intentionally"; + + std::string loading_webpage = "unknown"; + if (delegate_) + loading_webpage = delegate_->IsLoading() ? "true" : "false"; + + LOG(FATAL) << "Screen lock took too long; crashing intentionally " + << "(loading webpage? " << loading_webpage << ")"; } void LockStateController::StartLockToShutdownTimer() {
diff --git a/ash/wm/lock_state_controller.h b/ash/wm/lock_state_controller.h index abe91af..69f95e5f 100644 --- a/ash/wm/lock_state_controller.h +++ b/ash/wm/lock_state_controller.h
@@ -40,6 +40,12 @@ LockStateControllerDelegate() {} virtual ~LockStateControllerDelegate() {} + // Returns true if the lock screen webpage instance is loading. + // TODO(jdufault): Remove this method once crbug.com/452599 is resolved. We + // proxy the IsLoading method call into this delegate because ash forbids all + // icnludes from content/. + virtual bool IsLoading() const = 0; + virtual void RequestLockScreen() = 0; virtual void RequestShutdown() = 0;
diff --git a/base/android/java/src/org/chromium/base/BaseChromiumApplication.java b/base/android/java/src/org/chromium/base/BaseChromiumApplication.java index 6f315ce..77c63adf 100644 --- a/base/android/java/src/org/chromium/base/BaseChromiumApplication.java +++ b/base/android/java/src/org/chromium/base/BaseChromiumApplication.java
@@ -23,8 +23,12 @@ public class BaseChromiumApplication extends Application { private static final String TAG = "cr.base"; - private static final String TOOLBAR_CALLBACK_WRAPPER_CLASS = + private static final String TOOLBAR_CALLBACK_INTERNAL_WRAPPER_CLASS = "android.support.v7.internal.app.ToolbarActionBar$ToolbarCallbackWrapper"; + // In builds using the --use_unpublished_apis flag, the ToolbarActionBar class name does not + // include the "internal" package. + private static final String TOOLBAR_CALLBACK_WRAPPER_CLASS = + "android.support.v7.app.ToolbarActionBar$ToolbarCallbackWrapper"; private final boolean mShouldInitializeApplicationStatusTracking; public BaseChromiumApplication() { @@ -156,42 +160,54 @@ public void onActivityDestroyed(Activity activity) { assert (Proxy.isProxyClass(activity.getWindow().getCallback().getClass()) || activity.getWindow().getCallback().getClass().getName().equals( - TOOLBAR_CALLBACK_WRAPPER_CLASS)); + TOOLBAR_CALLBACK_WRAPPER_CLASS) + || activity.getWindow().getCallback().getClass().getName().equals( + TOOLBAR_CALLBACK_INTERNAL_WRAPPER_CLASS)); } @Override public void onActivityPaused(Activity activity) { assert (Proxy.isProxyClass(activity.getWindow().getCallback().getClass()) || activity.getWindow().getCallback().getClass().getName().equals( - TOOLBAR_CALLBACK_WRAPPER_CLASS)); + TOOLBAR_CALLBACK_WRAPPER_CLASS) + || activity.getWindow().getCallback().getClass().getName().equals( + TOOLBAR_CALLBACK_INTERNAL_WRAPPER_CLASS)); } @Override public void onActivityResumed(Activity activity) { assert (Proxy.isProxyClass(activity.getWindow().getCallback().getClass()) || activity.getWindow().getCallback().getClass().getName().equals( - TOOLBAR_CALLBACK_WRAPPER_CLASS)); + TOOLBAR_CALLBACK_WRAPPER_CLASS) + || activity.getWindow().getCallback().getClass().getName().equals( + TOOLBAR_CALLBACK_INTERNAL_WRAPPER_CLASS)); } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { assert (Proxy.isProxyClass(activity.getWindow().getCallback().getClass()) || activity.getWindow().getCallback().getClass().getName().equals( - TOOLBAR_CALLBACK_WRAPPER_CLASS)); + TOOLBAR_CALLBACK_WRAPPER_CLASS) + || activity.getWindow().getCallback().getClass().getName().equals( + TOOLBAR_CALLBACK_INTERNAL_WRAPPER_CLASS)); } @Override public void onActivityStarted(Activity activity) { assert (Proxy.isProxyClass(activity.getWindow().getCallback().getClass()) || activity.getWindow().getCallback().getClass().getName().equals( - TOOLBAR_CALLBACK_WRAPPER_CLASS)); + TOOLBAR_CALLBACK_WRAPPER_CLASS) + || activity.getWindow().getCallback().getClass().getName().equals( + TOOLBAR_CALLBACK_INTERNAL_WRAPPER_CLASS)); } @Override public void onActivityStopped(Activity activity) { assert (Proxy.isProxyClass(activity.getWindow().getCallback().getClass()) || activity.getWindow().getCallback().getClass().getName().equals( - TOOLBAR_CALLBACK_WRAPPER_CLASS)); + TOOLBAR_CALLBACK_WRAPPER_CLASS) + || activity.getWindow().getCallback().getClass().getName().equals( + TOOLBAR_CALLBACK_INTERNAL_WRAPPER_CLASS)); } }); }
diff --git a/base/android/library_loader/library_loader_hooks.h b/base/android/library_loader/library_loader_hooks.h index ca3c5a2..1ed09bd 100644 --- a/base/android/library_loader/library_loader_hooks.h +++ b/base/android/library_loader/library_loader_hooks.h
@@ -21,8 +21,10 @@ PROCESS_BROWSER = 1, // Shared library is running in child process. PROCESS_CHILD = 2, - // Shared library is running in webview process. + // Shared library is running in the app that uses webview. PROCESS_WEBVIEW = 3, + // Shared library is running in child process as part of webview. + PROCESS_WEBVIEW_CHILD = 4, }; // Record any pending renderer histogram value as a histogram. Pending values
diff --git a/base/metrics/histogram.cc b/base/metrics/histogram.cc index a1a6ac7..c33d2f0 100644 --- a/base/metrics/histogram.cc +++ b/base/metrics/histogram.cc
@@ -39,13 +39,13 @@ int* flags, int* declared_min, int* declared_max, - size_t* bucket_count, + uint32_t* bucket_count, uint32_t* range_checksum) { if (!iter->ReadString(histogram_name) || !iter->ReadInt(flags) || !iter->ReadInt(declared_min) || !iter->ReadInt(declared_max) || - !iter->ReadSizeT(bucket_count) || + !iter->ReadUInt32(bucket_count) || !iter->ReadUInt32(range_checksum)) { DLOG(ERROR) << "Pickle error decoding Histogram: " << *histogram_name; return false; @@ -84,14 +84,14 @@ typedef HistogramBase::Sample Sample; // static -const size_t Histogram::kBucketCount_MAX = 16384u; +const uint32_t Histogram::kBucketCount_MAX = 16384u; class Histogram::Factory { public: Factory(const std::string& name, HistogramBase::Sample minimum, HistogramBase::Sample maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags) : Factory(name, HISTOGRAM, minimum, maximum, bucket_count, flags) {} @@ -104,7 +104,7 @@ HistogramType histogram_type, HistogramBase::Sample minimum, HistogramBase::Sample maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags) : name_(name), histogram_type_(histogram_type), @@ -139,7 +139,7 @@ const HistogramType histogram_type_; HistogramBase::Sample minimum_; HistogramBase::Sample maximum_; - size_t bucket_count_; + uint32_t bucket_count_; int32_t flags_; private: @@ -166,7 +166,7 @@ // at run-time. In the latter case, those ctor parameters are zero and // the results extracted from the result of CreateRanges(). if (bucket_count_ == 0) { - bucket_count_ = registered_ranges->bucket_count(); + bucket_count_ = static_cast<uint32_t>(registered_ranges->bucket_count()); minimum_ = registered_ranges->range(1); maximum_ = registered_ranges->range(bucket_count_ - 1); } @@ -231,7 +231,7 @@ HistogramBase* Histogram::FactoryGet(const std::string& name, Sample minimum, Sample maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags) { bool valid_arguments = InspectConstructionArguments(name, &minimum, &maximum, &bucket_count); @@ -243,7 +243,7 @@ HistogramBase* Histogram::FactoryTimeGet(const std::string& name, TimeDelta minimum, TimeDelta maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags) { return FactoryGet(name, static_cast<Sample>(minimum.InMilliseconds()), static_cast<Sample>(maximum.InMilliseconds()), bucket_count, @@ -253,7 +253,7 @@ HistogramBase* Histogram::FactoryGet(const char* name, Sample minimum, Sample maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags) { return FactoryGet(std::string(name), minimum, maximum, bucket_count, flags); } @@ -261,7 +261,7 @@ HistogramBase* Histogram::FactoryTimeGet(const char* name, TimeDelta minimum, TimeDelta maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags) { return FactoryTimeGet(std::string(name), minimum, maximum, bucket_count, flags); @@ -272,7 +272,7 @@ Sample maximum, const BucketRanges* ranges, HistogramBase::AtomicCount* counts, - size_t counts_size, + uint32_t counts_size, HistogramSamples::Metadata* meta) { return new Histogram(name, minimum, maximum, ranges, counts, counts_size, meta); @@ -323,7 +323,7 @@ int Histogram::FindCorruption(const HistogramSamples& samples) const { int inconsistencies = NO_INCONSISTENCIES; Sample previous_range = -1; // Bottom range is always 0. - for (size_t index = 0; index < bucket_count(); ++index) { + for (uint32_t index = 0; index < bucket_count(); ++index) { int new_range = ranges(index); if (previous_range >= new_range) inconsistencies |= BUCKET_ORDER_ERROR; @@ -352,19 +352,19 @@ return inconsistencies; } -Sample Histogram::ranges(size_t i) const { +Sample Histogram::ranges(uint32_t i) const { return bucket_ranges_->range(i); } -size_t Histogram::bucket_count() const { - return bucket_ranges_->bucket_count(); +uint32_t Histogram::bucket_count() const { + return static_cast<uint32_t>(bucket_ranges_->bucket_count()); } // static bool Histogram::InspectConstructionArguments(const std::string& name, Sample* minimum, Sample* maximum, - size_t* bucket_count) { + uint32_t* bucket_count) { // Defensive code for backward compatibility. if (*minimum < 1) { DVLOG(1) << "Histogram: " << name << " has bad minimum: " << *minimum; @@ -384,7 +384,7 @@ return false; if (*bucket_count < 3) return false; - if (*bucket_count > static_cast<size_t>(*maximum - *minimum + 2)) + if (*bucket_count > static_cast<uint32_t>(*maximum - *minimum + 2)) return false; return true; } @@ -399,7 +399,7 @@ bool Histogram::HasConstructionArguments(Sample expected_minimum, Sample expected_maximum, - size_t expected_bucket_count) const { + uint32_t expected_bucket_count) const { return ((expected_minimum == declared_min_) && (expected_maximum == declared_max_) && (expected_bucket_count == bucket_count())); @@ -456,7 +456,7 @@ pickle->WriteInt(flags()) && pickle->WriteInt(declared_min()) && pickle->WriteInt(declared_max()) && - pickle->WriteSizeT(bucket_count()) && + pickle->WriteUInt32(bucket_count()) && pickle->WriteUInt32(bucket_ranges()->checksum()); } @@ -477,7 +477,7 @@ Sample maximum, const BucketRanges* ranges, HistogramBase::AtomicCount* counts, - size_t counts_size, + uint32_t counts_size, HistogramSamples::Metadata* meta) : HistogramBase(name), bucket_ranges_(ranges), @@ -492,7 +492,7 @@ Histogram::~Histogram() { } -bool Histogram::PrintEmptyBucket(size_t index) const { +bool Histogram::PrintEmptyBucket(uint32_t index) const { return true; } @@ -501,7 +501,7 @@ // get so big so fast (and we don't expect to see a lot of entries in the large // buckets), so we need this to make it possible to see what is going on and // not have 0-graphical-height buckets. -double Histogram::GetBucketSize(Count current, size_t i) const { +double Histogram::GetBucketSize(Count current, uint32_t i) const { DCHECK_GT(ranges(i + 1), ranges(i)); static const double kTransitionWidth = 5; double denominator = ranges(i + 1) - ranges(i); @@ -510,7 +510,7 @@ return current/denominator; } -const std::string Histogram::GetAsciiBucketRange(size_t i) const { +const std::string Histogram::GetAsciiBucketRange(uint32_t i) const { return GetSimpleAsciiBucketRange(ranges(i)); } @@ -523,7 +523,7 @@ int flags; int declared_min; int declared_max; - size_t bucket_count; + uint32_t bucket_count; uint32_t range_checksum; if (!ReadHistogramArguments(iter, &histogram_name, &flags, &declared_min, @@ -567,7 +567,7 @@ // Calculate space needed to print bucket range numbers. Leave room to print // nearly the largest bucket range without sliding over the histogram. - size_t largest_non_empty_bucket = bucket_count() - 1; + uint32_t largest_non_empty_bucket = bucket_count() - 1; while (0 == snapshot->GetCountAtIndex(largest_non_empty_bucket)) { if (0 == largest_non_empty_bucket) break; // All buckets are empty. @@ -576,7 +576,7 @@ // Calculate largest print width needed for any of our bucket range displays. size_t print_width = 1; - for (size_t i = 0; i < bucket_count(); ++i) { + for (uint32_t i = 0; i < bucket_count(); ++i) { if (snapshot->GetCountAtIndex(i)) { size_t width = GetAsciiBucketRange(i).size() + 1; if (width > print_width) @@ -587,7 +587,7 @@ int64_t remaining = sample_count; int64_t past = 0; // Output the actual histogram graph. - for (size_t i = 0; i < bucket_count(); ++i) { + for (uint32_t i = 0; i < bucket_count(); ++i) { Count current = snapshot->GetCountAtIndex(i); if (!current && !PrintEmptyBucket(i)) continue; @@ -618,7 +618,7 @@ double Histogram::GetPeakBucketSize(const SampleVector& samples) const { double max = 0; - for (size_t i = 0; i < bucket_count() ; ++i) { + for (uint32_t i = 0; i < bucket_count() ; ++i) { double current_size = GetBucketSize(samples.GetCountAtIndex(i), i); if (current_size > max) max = current_size; @@ -647,7 +647,7 @@ void Histogram::WriteAsciiBucketContext(const int64_t past, const Count current, const int64_t remaining, - const size_t i, + const uint32_t i, std::string* output) const { double scaled_sum = (past + current + remaining) / 100.0; WriteAsciiBucketValue(current, scaled_sum, output); @@ -670,8 +670,8 @@ scoped_ptr<SampleVector> snapshot = SnapshotSampleVector(); *count = snapshot->TotalCount(); *sum = snapshot->sum(); - size_t index = 0; - for (size_t i = 0; i < bucket_count(); ++i) { + uint32_t index = 0; + for (uint32_t i = 0; i < bucket_count(); ++i) { Sample count_at_index = snapshot->GetCountAtIndex(i); if (count_at_index > 0) { scoped_ptr<DictionaryValue> bucket_value(new DictionaryValue()); @@ -695,7 +695,7 @@ Factory(const std::string& name, HistogramBase::Sample minimum, HistogramBase::Sample maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags, const DescriptionPair* descriptions) : Histogram::Factory(name, LINEAR_HISTOGRAM, minimum, maximum, @@ -737,7 +737,7 @@ HistogramBase* LinearHistogram::FactoryGet(const std::string& name, Sample minimum, Sample maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags) { return FactoryGetWithRangeDescription( name, minimum, maximum, bucket_count, flags, NULL); @@ -746,7 +746,7 @@ HistogramBase* LinearHistogram::FactoryTimeGet(const std::string& name, TimeDelta minimum, TimeDelta maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags) { return FactoryGet(name, static_cast<Sample>(minimum.InMilliseconds()), static_cast<Sample>(maximum.InMilliseconds()), bucket_count, @@ -756,7 +756,7 @@ HistogramBase* LinearHistogram::FactoryGet(const char* name, Sample minimum, Sample maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags) { return FactoryGet(std::string(name), minimum, maximum, bucket_count, flags); } @@ -764,7 +764,7 @@ HistogramBase* LinearHistogram::FactoryTimeGet(const char* name, TimeDelta minimum, TimeDelta maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags) { return FactoryTimeGet(std::string(name), minimum, maximum, bucket_count, flags); @@ -776,7 +776,7 @@ Sample maximum, const BucketRanges* ranges, HistogramBase::AtomicCount* counts, - size_t counts_size, + uint32_t counts_size, HistogramSamples::Metadata* meta) { return new LinearHistogram(name, minimum, maximum, ranges, counts, counts_size, meta); @@ -786,7 +786,7 @@ const std::string& name, Sample minimum, Sample maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags, const DescriptionPair descriptions[]) { bool valid_arguments = Histogram::InspectConstructionArguments( @@ -813,7 +813,7 @@ Sample maximum, const BucketRanges* ranges, HistogramBase::AtomicCount* counts, - size_t counts_size, + uint32_t counts_size, HistogramSamples::Metadata* meta) : Histogram(name, minimum, @@ -823,7 +823,7 @@ counts_size, meta) {} -double LinearHistogram::GetBucketSize(Count current, size_t i) const { +double LinearHistogram::GetBucketSize(Count current, uint32_t i) const { DCHECK_GT(ranges(i + 1), ranges(i)); // Adjacent buckets with different widths would have "surprisingly" many (few) // samples in a histogram if we didn't normalize this way. @@ -831,7 +831,7 @@ return current/denominator; } -const std::string LinearHistogram::GetAsciiBucketRange(size_t i) const { +const std::string LinearHistogram::GetAsciiBucketRange(uint32_t i) const { int range = ranges(i); BucketDescriptionMap::const_iterator it = bucket_description_.find(range); if (it == bucket_description_.end()) @@ -839,7 +839,7 @@ return it->second; } -bool LinearHistogram::PrintEmptyBucket(size_t index) const { +bool LinearHistogram::PrintEmptyBucket(uint32_t index) const { return bucket_description_.find(ranges(index)) == bucket_description_.end(); } @@ -865,7 +865,7 @@ int flags; int declared_min; int declared_max; - size_t bucket_count; + uint32_t bucket_count; uint32_t range_checksum; if (!ReadHistogramArguments(iter, &histogram_name, &flags, &declared_min, @@ -942,7 +942,7 @@ int flags; int declared_min; int declared_max; - size_t bucket_count; + uint32_t bucket_count; uint32_t range_checksum; if (!ReadHistogramArguments(iter, &histogram_name, &flags, &declared_min, @@ -982,7 +982,7 @@ ranges.erase(std::unique(ranges.begin(), ranges.end()), ranges.end()); BucketRanges* bucket_ranges = new BucketRanges(ranges.size()); - for (size_t i = 0; i < ranges.size(); i++) { + for (uint32_t i = 0; i < ranges.size(); i++) { bucket_ranges->set_range(i, ranges[i]); } bucket_ranges->ResetChecksum(); @@ -1019,7 +1019,7 @@ const std::string& name, const BucketRanges* ranges, HistogramBase::AtomicCount* counts, - size_t counts_size, + uint32_t counts_size, HistogramSamples::Metadata* meta) { return new CustomHistogram(name, ranges, counts, counts_size, meta); } @@ -1030,9 +1030,9 @@ // static std::vector<Sample> CustomHistogram::ArrayToCustomRanges( - const Sample* values, size_t num_values) { + const Sample* values, uint32_t num_values) { std::vector<Sample> all_values; - for (size_t i = 0; i < num_values; ++i) { + for (uint32_t i = 0; i < num_values; ++i) { Sample value = values[i]; all_values.push_back(value); @@ -1053,7 +1053,7 @@ CustomHistogram::CustomHistogram(const std::string& name, const BucketRanges* ranges, HistogramBase::AtomicCount* counts, - size_t counts_size, + uint32_t counts_size, HistogramSamples::Metadata* meta) : Histogram(name, ranges->range(1), @@ -1069,14 +1069,14 @@ // Serialize ranges. First and last ranges are alwasy 0 and INT_MAX, so don't // write them. - for (size_t i = 1; i < bucket_ranges()->bucket_count(); ++i) { + for (uint32_t i = 1; i < bucket_ranges()->bucket_count(); ++i) { if (!pickle->WriteInt(bucket_ranges()->range(i))) return false; } return true; } -double CustomHistogram::GetBucketSize(Count current, size_t i) const { +double CustomHistogram::GetBucketSize(Count current, uint32_t i) const { return 1; } @@ -1086,7 +1086,7 @@ int flags; int declared_min; int declared_max; - size_t bucket_count; + uint32_t bucket_count; uint32_t range_checksum; if (!ReadHistogramArguments(iter, &histogram_name, &flags, &declared_min, @@ -1097,7 +1097,7 @@ // First and last ranges are not serialized. std::vector<Sample> sample_ranges(bucket_count - 1); - for (size_t i = 0; i < sample_ranges.size(); ++i) { + for (uint32_t i = 0; i < sample_ranges.size(); ++i) { if (!iter->ReadInt(&sample_ranges[i])) return NULL; } @@ -1115,7 +1115,7 @@ bool CustomHistogram::ValidateCustomRanges( const std::vector<Sample>& custom_ranges) { bool has_valid_range = false; - for (size_t i = 0; i < custom_ranges.size(); i++) { + for (uint32_t i = 0; i < custom_ranges.size(); i++) { Sample sample = custom_ranges[i]; if (sample < 0 || sample > HistogramBase::kSampleType_MAX - 1) return false;
diff --git a/base/metrics/histogram.h b/base/metrics/histogram.h index 3681225..4e722aa2 100644 --- a/base/metrics/histogram.h +++ b/base/metrics/histogram.h
@@ -100,7 +100,7 @@ class BASE_EXPORT Histogram : public HistogramBase { public: // Initialize maximum number of buckets in histograms as 16,384. - static const size_t kBucketCount_MAX; + static const uint32_t kBucketCount_MAX; typedef std::vector<Count> Counts; @@ -117,12 +117,12 @@ static HistogramBase* FactoryGet(const std::string& name, Sample minimum, Sample maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags); static HistogramBase* FactoryTimeGet(const std::string& name, base::TimeDelta minimum, base::TimeDelta maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags); // Overloads of the above two functions that take a const char* |name| param, @@ -131,12 +131,12 @@ static HistogramBase* FactoryGet(const char* name, Sample minimum, Sample maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags); static HistogramBase* FactoryTimeGet(const char* name, base::TimeDelta minimum, base::TimeDelta maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags); // Get a histogram using data in persistent storage. @@ -145,7 +145,7 @@ Sample maximum, const BucketRanges* ranges, HistogramBase::AtomicCount* counts, - size_t counts_size, + uint32_t counts_size, HistogramSamples::Metadata* meta); static void InitializeBucketRanges(Sample minimum, @@ -173,8 +173,8 @@ //---------------------------------------------------------------------------- Sample declared_min() const { return declared_min_; } Sample declared_max() const { return declared_max_; } - virtual Sample ranges(size_t i) const; - virtual size_t bucket_count() const; + virtual Sample ranges(uint32_t i) const; + virtual uint32_t bucket_count() const; const BucketRanges* bucket_ranges() const { return bucket_ranges_; } // This function validates histogram construction arguments. It returns false @@ -186,14 +186,14 @@ static bool InspectConstructionArguments(const std::string& name, Sample* minimum, Sample* maximum, - size_t* bucket_count); + uint32_t* bucket_count); // HistogramBase implementation: uint64_t name_hash() const override; HistogramType GetHistogramType() const override; bool HasConstructionArguments(Sample expected_minimum, Sample expected_maximum, - size_t expected_bucket_count) const override; + uint32_t expected_bucket_count) const override; void Add(Sample value) override; void AddCount(Sample value, int count) override; scoped_ptr<HistogramSamples> SnapshotSamples() const override; @@ -228,7 +228,7 @@ Sample maximum, const BucketRanges* ranges, HistogramBase::AtomicCount* counts, - size_t counts_size, + uint32_t counts_size, HistogramSamples::Metadata* meta); ~Histogram() override; @@ -237,15 +237,15 @@ bool SerializeInfoImpl(base::Pickle* pickle) const override; // Method to override to skip the display of the i'th bucket if it's empty. - virtual bool PrintEmptyBucket(size_t index) const; + virtual bool PrintEmptyBucket(uint32_t index) const; // Get normalized size, relative to the ranges(i). - virtual double GetBucketSize(Count current, size_t i) const; + virtual double GetBucketSize(Count current, uint32_t i) const; // Return a string description of what goes in a given bucket. // Most commonly this is the numeric value, but in derived classes it may // be a name (or string description) given to the bucket. - virtual const std::string GetAsciiBucketRange(size_t it) const; + virtual const std::string GetAsciiBucketRange(uint32_t it) const; private: // Allow tests to corrupt our innards for testing purposes. @@ -283,7 +283,7 @@ void WriteAsciiBucketContext(const int64_t past, const Count current, const int64_t remaining, - const size_t i, + const uint32_t i, std::string* output) const; // WriteJSON calls these. @@ -319,12 +319,12 @@ static HistogramBase* FactoryGet(const std::string& name, Sample minimum, Sample maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags); static HistogramBase* FactoryTimeGet(const std::string& name, TimeDelta minimum, TimeDelta maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags); // Overloads of the above two functions that take a const char* |name| param, @@ -333,12 +333,12 @@ static HistogramBase* FactoryGet(const char* name, Sample minimum, Sample maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags); static HistogramBase* FactoryTimeGet(const char* name, TimeDelta minimum, TimeDelta maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags); // Get a histogram using data in persistent storage. @@ -347,7 +347,7 @@ Sample maximum, const BucketRanges* ranges, HistogramBase::AtomicCount* counts, - size_t counts_size, + uint32_t counts_size, HistogramSamples::Metadata* meta); struct DescriptionPair { @@ -364,7 +364,7 @@ const std::string& name, Sample minimum, Sample maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags, const DescriptionPair descriptions[]); @@ -388,18 +388,18 @@ Sample maximum, const BucketRanges* ranges, HistogramBase::AtomicCount* counts, - size_t counts_size, + uint32_t counts_size, HistogramSamples::Metadata* meta); - double GetBucketSize(Count current, size_t i) const override; + double GetBucketSize(Count current, uint32_t i) const override; // If we have a description for a bucket, then return that. Otherwise // let parent class provide a (numeric) description. - const std::string GetAsciiBucketRange(size_t i) const override; + const std::string GetAsciiBucketRange(uint32_t i) const override; // Skip printing of name for numeric range if we have a name (and if this is // an empty bucket). - bool PrintEmptyBucket(size_t index) const override; + bool PrintEmptyBucket(uint32_t index) const override; private: friend BASE_EXPORT HistogramBase* DeserializeHistogramInfo( @@ -476,7 +476,7 @@ static HistogramBase* PersistentGet(const std::string& name, const BucketRanges* ranges, HistogramBase::AtomicCount* counts, - size_t counts_size, + uint32_t counts_size, HistogramSamples::Metadata* meta); // Overridden from Histogram: @@ -489,7 +489,7 @@ // so that invalid samples never fall into the same bucket as valid samples. // TODO(kaiwang): Change name to ArrayToCustomEnumRanges. static std::vector<Sample> ArrayToCustomRanges(const Sample* values, - size_t num_values); + uint32_t num_values); protected: class Factory; @@ -499,13 +499,13 @@ CustomHistogram(const std::string& name, const BucketRanges* ranges, HistogramBase::AtomicCount* counts, - size_t counts_size, + uint32_t counts_size, HistogramSamples::Metadata* meta); // HistogramBase implementation: bool SerializeInfoImpl(base::Pickle* pickle) const override; - double GetBucketSize(Count current, size_t i) const override; + double GetBucketSize(Count current, uint32_t i) const override; private: friend BASE_EXPORT HistogramBase* DeserializeHistogramInfo(
diff --git a/base/metrics/histogram_base.h b/base/metrics/histogram_base.h index d8bd0f4..40c2cae 100644 --- a/base/metrics/histogram_base.h +++ b/base/metrics/histogram_base.h
@@ -127,9 +127,10 @@ // Whether the histogram has construction arguments as parameters specified. // For histograms that don't have the concept of minimum, maximum or // bucket_count, this function always returns false. - virtual bool HasConstructionArguments(Sample expected_minimum, - Sample expected_maximum, - size_t expected_bucket_count) const = 0; + virtual bool HasConstructionArguments( + Sample expected_minimum, + Sample expected_maximum, + uint32_t expected_bucket_count) const = 0; virtual void Add(Sample value) = 0;
diff --git a/base/metrics/histogram_persistence.cc b/base/metrics/histogram_persistence.cc index 09410507..7c60079 100644 --- a/base/metrics/histogram_persistence.cc +++ b/base/metrics/histogram_persistence.cc
@@ -68,7 +68,7 @@ int flags; int minimum; int maximum; - size_t bucket_count; + uint32_t bucket_count; PersistentMemoryAllocator::Reference ranges_ref; uint32_t ranges_checksum; PersistentMemoryAllocator::Reference counts_ref; @@ -197,7 +197,8 @@ kTypeIdRangesArray); if (!ranges_data || histogram_data.bucket_count < 2 || histogram_data.bucket_count + 1 > - std::numeric_limits<size_t>::max() / sizeof(HistogramBase::Sample) || + std::numeric_limits<uint32_t>::max() / + sizeof(HistogramBase::Sample) || allocator->GetAllocSize(histogram_data.ranges_ref) < (histogram_data.bucket_count + 1) * sizeof(HistogramBase::Sample)) { RecordCreateHistogramResult(CREATE_HISTOGRAM_INVALID_RANGES_ARRAY); @@ -379,7 +380,7 @@ histogram_data->flags = flags; histogram_data->minimum = minimum; histogram_data->maximum = maximum; - histogram_data->bucket_count = bucket_count; + histogram_data->bucket_count = static_cast<uint32_t>(bucket_count); histogram_data->ranges_ref = ranges_ref; histogram_data->ranges_checksum = bucket_ranges->checksum(); histogram_data->counts_ref = counts_ref;
diff --git a/base/metrics/histogram_unittest.cc b/base/metrics/histogram_unittest.cc index fce4b47b..09f9106 100644 --- a/base/metrics/histogram_unittest.cc +++ b/base/metrics/histogram_unittest.cc
@@ -565,9 +565,9 @@ EXPECT_TRUE(iter.ReadInt(&max)); EXPECT_EQ(64, max); - int64_t bucket_count; - EXPECT_TRUE(iter.ReadInt64(&bucket_count)); - EXPECT_EQ(8, bucket_count); + uint32_t bucket_count; + EXPECT_TRUE(iter.ReadUInt32(&bucket_count)); + EXPECT_EQ(8u, bucket_count); uint32_t checksum; EXPECT_TRUE(iter.ReadUInt32(&checksum)); @@ -594,12 +594,12 @@ int i; std::string s; - int64_t bucket_count; + uint32_t bucket_count; uint32_t ui32; EXPECT_TRUE(iter.ReadInt(&i) && iter.ReadString(&s) && iter.ReadInt(&i) && iter.ReadInt(&i) && iter.ReadInt(&i) && - iter.ReadInt64(&bucket_count) && iter.ReadUInt32(&ui32)); - EXPECT_EQ(3, bucket_count); + iter.ReadUInt32(&bucket_count) && iter.ReadUInt32(&ui32)); + EXPECT_EQ(3u, bucket_count); int range; EXPECT_TRUE(iter.ReadInt(&range));
diff --git a/base/metrics/sparse_histogram.cc b/base/metrics/sparse_histogram.cc index 1ed1e786..5282aa6 100644 --- a/base/metrics/sparse_histogram.cc +++ b/base/metrics/sparse_histogram.cc
@@ -47,7 +47,7 @@ bool SparseHistogram::HasConstructionArguments( Sample expected_minimum, Sample expected_maximum, - size_t expected_bucket_count) const { + uint32_t expected_bucket_count) const { // SparseHistogram never has min/max/bucket_count limit. return false; }
diff --git a/base/metrics/sparse_histogram.h b/base/metrics/sparse_histogram.h index 5fd494b..04909c08 100644 --- a/base/metrics/sparse_histogram.h +++ b/base/metrics/sparse_histogram.h
@@ -65,7 +65,7 @@ HistogramType GetHistogramType() const override; bool HasConstructionArguments(Sample expected_minimum, Sample expected_maximum, - size_t expected_bucket_count) const override; + uint32_t expected_bucket_count) const override; void Add(Sample value) override; void AddCount(Sample value, int count) override; void AddSamples(const HistogramSamples& samples) override;
diff --git a/base/test/mock_log.cc b/base/test/mock_log.cc index fa511d4..a09000d8 100644 --- a/base/test/mock_log.cc +++ b/base/test/mock_log.cc
@@ -56,7 +56,7 @@ size_t message_start, const std::string& str) { // gMock guarantees thread-safety for calling a mocked method - // (https://code.google.com/p/googlemock/wiki/CookBook#Using_Google_Mock_and_Threads) + // (https://github.com/google/googlemock/blob/master/googlemock/docs/CookBook.md#using-google-mock-and-threads) // but we also need to make sure that Start/StopCapturingLogs are synchronized // with LogMessageHandler. AutoLock scoped_lock(g_lock);
diff --git a/base/trace_event/trace_log.cc b/base/trace_event/trace_log.cc index 65aa23a..6ece72ff 100644 --- a/base/trace_event/trace_log.cc +++ b/base/trace_event/trace_log.cc
@@ -757,8 +757,8 @@ TraceLogStatus TraceLog::GetStatus() const { AutoLock lock(lock_); TraceLogStatus result; - result.event_capacity = logged_events_->Capacity(); - result.event_count = logged_events_->Size(); + result.event_capacity = static_cast<uint32_t>(logged_events_->Capacity()); + result.event_count = static_cast<uint32_t>(logged_events_->Size()); return result; }
diff --git a/base/trace_event/trace_log.h b/base/trace_event/trace_log.h index 235b946..c849d4d 100644 --- a/base/trace_event/trace_log.h +++ b/base/trace_event/trace_log.h
@@ -39,8 +39,8 @@ struct BASE_EXPORT TraceLogStatus { TraceLogStatus(); ~TraceLogStatus(); - size_t event_capacity; - size_t event_count; + uint32_t event_capacity; + uint32_t event_count; }; class BASE_EXPORT TraceLog : public MemoryDumpProvider {
diff --git a/blimp/client/feature/compositor/blimp_input_manager.cc b/blimp/client/feature/compositor/blimp_input_manager.cc index fc50b4337..30b2da9 100644 --- a/blimp/client/feature/compositor/blimp_input_manager.cc +++ b/blimp/client/feature/compositor/blimp_input_manager.cc
@@ -72,7 +72,7 @@ blink::WebTouchEvent touch = ui::CreateWebTouchEventFromMotionEvent(motion_event, - result.did_generate_scroll); + result.moved_beyond_slop_region); // Touch events are queued in the Gesture Provider until acknowledged to // allow them to be consumed by the touch event handlers in blink which can
diff --git a/build/android/BUILD.gn b/build/android/BUILD.gn index cbaf35a9..c94c3b1 100644 --- a/build/android/BUILD.gn +++ b/build/android/BUILD.gn
@@ -79,6 +79,8 @@ group("devil_py") { data = [ "devil_chromium.py", + "//third_party/catapult/catapult_base/", + "//third_party/catapult/dependency_manager/", "//third_party/catapult/devil/", ] }
diff --git a/build/android/buildbot/bb_device_steps.py b/build/android/buildbot/bb_device_steps.py index f52c24b9..5d8731f 100755 --- a/build/android/buildbot/bb_device_steps.py +++ b/build/android/buildbot/bb_device_steps.py
@@ -630,14 +630,17 @@ Stack tool is run for logcat dump, optionally for ASAN. """ bb_annotations.PrintNamedStep('Run stack tool with logcat dump') - logcat_file = os.path.join(CHROME_OUT_DIR, options.target, 'full_log.txt') + build_dir = os.path.join(CHROME_OUT_DIR, options.target) + logcat_file = os.path.join(build_dir, 'full_log.txt') RunCmd([os.path.join(CHROME_SRC_DIR, 'third_party', 'android_platform', 'development', 'scripts', 'stack'), + '--output-directory', build_dir, '--more-info', logcat_file]) if options.asan_symbolize: bb_annotations.PrintNamedStep('Run stack tool for ASAN') RunCmd([ os.path.join(CHROME_SRC_DIR, 'build', 'android', 'asan_symbolize.py'), + '--output-directory', build_dir, '-l', logcat_file])
diff --git a/build/android/devil/utils/file_utils.py b/build/android/devil/utils/file_utils.py new file mode 100644 index 0000000..dc5a9ef --- /dev/null +++ b/build/android/devil/utils/file_utils.py
@@ -0,0 +1,31 @@ +# Copyright 2016 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. + +import os + + +def MergeFiles(dest_file, source_files): + """Merge list of files into single destination file. + + Args: + dest_file: File to be written to. + source_files: List of files to be merged. Will be merged in the order they + appear in the list. + """ + if not os.path.exists(os.path.dirname(dest_file)): + os.makedirs(os.path.dirname(dest_file)) + try: + with open(dest_file, 'w') as dest_f: + for source_file in source_files: + with open(source_file, 'r') as source_f: + dest_f.write(source_f.read()) + except Exception as e: # pylint: disable=broad-except + # Something went wrong when creating dest_file. Cleaning up. + try: + os.remove(dest_file) + except OSError: + pass + raise e + +
diff --git a/build/android/gyp/create_dist_jar.py b/build/android/gyp/create_dist_jar.py index 0d31c5d..3f056a7a 100755 --- a/build/android/gyp/create_dist_jar.py +++ b/build/android/gyp/create_dist_jar.py
@@ -7,6 +7,7 @@ """Merges a list of jars into a single jar.""" import optparse +import re import sys from util import build_utils @@ -16,6 +17,8 @@ parser = optparse.OptionParser() build_utils.AddDepfileOption(parser) parser.add_option('--output', help='Path to output jar.') + parser.add_option('--use-ijars', action='store_true', + help='Use .interface.jar rather than the given jars.') parser.add_option('--inputs', action='append', help='List of jar inputs.') options, _ = parser.parse_args(args) build_utils.CheckOptions(options, parser, ['output', 'inputs']) @@ -24,6 +27,10 @@ for inputs_arg in options.inputs: input_jars.extend(build_utils.ParseGypList(inputs_arg)) + if options.use_ijars: + ijar_re = re.compile(r'\.jar$') + input_jars = [ijar_re.sub('.interface.jar', p) for p in input_jars] + build_utils.MergeZips(options.output, input_jars) if options.depfile:
diff --git a/build/android/gyp/util/build_utils.py b/build/android/gyp/util/build_utils.py index da6e4cf..cd62c2f 100644 --- a/build/android/gyp/util/build_utils.py +++ b/build/android/gyp/util/build_utils.py
@@ -326,14 +326,18 @@ with zipfile.ZipFile(output, 'w') as out_zip: for in_file in inputs: with zipfile.ZipFile(in_file, 'r') as in_zip: - for name in in_zip.namelist(): + in_zip._expected_crc = None + for info in in_zip.infolist(): # Ignore directories. - if name[-1] == '/': + if info.filename[-1] == '/': continue - dst_name = path_transform(name, in_file) + # Don't validate CRCs. ijar sets them all to 0. + if hasattr(info, 'CRC'): + del info.CRC + dst_name = path_transform(info.filename, in_file) already_added = dst_name in added_names if not already_added and not MatchesGlob(dst_name, exclude_patterns): - AddToZipHermetic(out_zip, dst_name, data=in_zip.read(name)) + AddToZipHermetic(out_zip, dst_name, data=in_zip.read(info)) added_names.add(dst_name)
diff --git a/build/android/incremental_install/installer.py b/build/android/incremental_install/installer.py index 15bdbeeb..feebadb 100755 --- a/build/android/incremental_install/installer.py +++ b/build/android/incremental_install/installer.py
@@ -32,6 +32,11 @@ sys.path = prev_sys_path +def _DeviceCachePath(device): + file_name = 'device_cache_%s.json' % device.adb.GetDeviceSerial() + return os.path.join(constants.GetOutDirectory(), file_name) + + def _TransformDexPaths(paths): """Given paths like ["/a/b/c", "/a/c/d"], returns ["b.c", "c.d"].""" if len(paths) == 1: @@ -58,17 +63,22 @@ return '/data/local/tmp/incremental-app-%s' % package -def Uninstall(device, package): +def Uninstall(device, package, enable_device_cache=False): """Uninstalls and removes all incremental files for the given package.""" main_timer = time_profile.TimeProfile() device.Uninstall(package) + if enable_device_cache: + # Uninstall is rare, so just wipe the cache in this case. + cache_path = _DeviceCachePath(device) + if os.path.exists(cache_path): + os.unlink(cache_path) device.RunShellCommand(['rm', '-rf', _GetDeviceIncrementalDir(package)], check_return=True) logging.info('Uninstall took %s seconds.', main_timer.GetDelta()) def Install(device, apk, split_globs=None, native_libs=None, dex_files=None, - enable_device_cache=True, use_concurrency=True, + enable_device_cache=False, use_concurrency=True, show_proguard_warning=False): """Installs the given incremental apk and all required supporting files. @@ -144,23 +154,24 @@ 'To do so, use GN arg:\n' ' disable_incremental_isolated_processes=true') - cache_path = '%s/files-cache.json' % device_incremental_dir + cache_path = _DeviceCachePath(device) def restore_cache(): if not enable_device_cache: logging.info('Ignoring device cache') return - # Delete the cached file so that any exceptions cause the next attempt - # to re-compute md5s. - cmd = 'P=%s;cat $P 2>/dev/null && rm $P' % cache_path - lines = device.RunShellCommand(cmd, check_return=False, large_output=True) - if lines: - device.LoadCacheData(lines[0]) + if os.path.exists(cache_path): + logging.info('Using device cache: %s', cache_path) + with open(cache_path) as f: + device.LoadCacheData(f.read()) + # Delete the cached file so that any exceptions cause it to be cleared. + os.unlink(cache_path) else: - logging.info('Device cache not found: %s', cache_path) + logging.info('No device cache present: %s', cache_path) def save_cache(): - cache_data = device.DumpCacheData() - device.WriteFile(cache_path, cache_data) + with open(cache_path, 'w') as f: + f.write(device.DumpCacheData()) + logging.info('Wrote device cache: %s', cache_path) # Create 2 lock files: # * install.lock tells the app to pause on start-up (until we release it). @@ -281,7 +292,7 @@ apk = apk_helper.ToHelper(args.apk_path) if args.uninstall: - Uninstall(device, apk.GetPackageName()) + Uninstall(device, apk.GetPackageName(), enable_device_cache=args.cache) else: Install(device, apk, split_globs=args.splits, native_libs=args.native_libs, dex_files=args.dex_files, enable_device_cache=args.cache,
diff --git a/build/android/pylib/base/environment_factory.py b/build/android/pylib/base/environment_factory.py index 31b4952a..f4fe935e2 100644 --- a/build/android/pylib/base/environment_factory.py +++ b/build/android/pylib/base/environment_factory.py
@@ -4,7 +4,10 @@ from pylib import constants from pylib.local.device import local_device_environment -from pylib.remote.device import remote_device_environment +try: + from pylib.remote.device import remote_device_environment +except ImportError: + remote_device_environment = None def CreateEnvironment(args, error_func): @@ -12,7 +15,7 @@ if args.command not in constants.LOCAL_MACHINE_TESTS: return local_device_environment.LocalDeviceEnvironment(args, error_func) # TODO(jbudorick) Add local machine environment. - if args.environment == 'remote_device': + if args.environment == 'remote_device' and remote_device_environment: return remote_device_environment.RemoteDeviceEnvironment(args, error_func) error_func('Unable to create %s environment.' % args.environment)
diff --git a/build/android/pylib/base/test_run_factory.py b/build/android/pylib/base/test_run_factory.py index 72b22bc..8db9bd63 100644 --- a/build/android/pylib/base/test_run_factory.py +++ b/build/android/pylib/base/test_run_factory.py
@@ -7,12 +7,19 @@ from pylib.local.device import local_device_environment from pylib.local.device import local_device_gtest_run from pylib.local.device import local_device_instrumentation_test_run -from pylib.remote.device import remote_device_environment -from pylib.remote.device import remote_device_gtest_run -from pylib.remote.device import remote_device_instrumentation_test_run -from pylib.remote.device import remote_device_uirobot_test_run from pylib.uirobot import uirobot_test_instance +try: + from pylib.remote.device import remote_device_environment + from pylib.remote.device import remote_device_gtest_run + from pylib.remote.device import remote_device_instrumentation_test_run + from pylib.remote.device import remote_device_uirobot_test_run +except ImportError: + remote_device_environment = None + remote_device_gtest_run = None + remote_device_instrumentation_test_run = None + remote_device_uirobot_test_run = None + def CreateTestRun(_args, env, test_instance, error_func): if isinstance(env, local_device_environment.LocalDeviceEnvironment): @@ -23,7 +30,13 @@ return (local_device_instrumentation_test_run .LocalDeviceInstrumentationTestRun(env, test_instance)) - if isinstance(env, remote_device_environment.RemoteDeviceEnvironment): + if (remote_device_environment + and isinstance(env, remote_device_environment.RemoteDeviceEnvironment)): + # The remote_device modules should be all or nothing. + assert (remote_device_gtest_run + and remote_device_instrumentation_test_run + and remote_device_uirobot_test_run) + if isinstance(test_instance, gtest_test_instance.GtestTestInstance): return remote_device_gtest_run.RemoteDeviceGtestTestRun( env, test_instance)
diff --git a/build/android/pylib/gtest/gtest_test_instance.py b/build/android/pylib/gtest/gtest_test_instance.py index 538376d7..ce5af45 100644 --- a/build/android/pylib/gtest/gtest_test_instance.py +++ b/build/android/pylib/gtest/gtest_test_instance.py
@@ -135,6 +135,7 @@ raise ValueError('Platform mode currently supports only 1 gtest suite') self._extract_test_list_from_filter = args.extract_test_list_from_filter self._shard_timeout = args.shard_timeout + self._skip_clear_data = args.skip_clear_data self._suite = args.suite_name[0] incremental_part = '_incremental' if args.incremental_install else '' @@ -248,6 +249,10 @@ return self._shard_timeout @property + def skip_clear_data(self): + return self._skip_clear_data + + @property def suite(self): return self._suite
diff --git a/build/android/pylib/instrumentation/test_options.py b/build/android/pylib/instrumentation/test_options.py index 0d9c46d2..e280c33 100644 --- a/build/android/pylib/instrumentation/test_options.py +++ b/build/android/pylib/instrumentation/test_options.py
@@ -28,4 +28,5 @@ 'timeout_scale', 'apk_under_test', 'additional_apks', - 'strict_mode']) + 'strict_mode', + 'skip_clear_data'])
diff --git a/build/android/pylib/instrumentation/test_runner.py b/build/android/pylib/instrumentation/test_runner.py index b4bbb621..795e8171 100644 --- a/build/android/pylib/instrumentation/test_runner.py +++ b/build/android/pylib/instrumentation/test_runner.py
@@ -229,11 +229,12 @@ self.coverage_device_file, self.coverage_host_file) self.device.RunShellCommand( 'rm -f %s' % self.coverage_device_file) - elif self.package_info: + elif self.package_info and not self.options.skip_clear_data: apk_under_test = self.test_pkg.GetApkUnderTest() permissions = apk_under_test.GetPermissions() if apk_under_test else None self.device.ClearApplicationState( self.package_info.package, permissions=permissions) + self.device.ClearApplicationState(self.package_info.package) def TearDownPerfMonitoring(self, test): """Cleans up performance monitoring if the specified test required it.
diff --git a/build/android/pylib/local/device/local_device_environment.py b/build/android/pylib/local/device/local_device_environment.py index 4590352..2ad75dd 100644 --- a/build/android/pylib/local/device/local_device_environment.py +++ b/build/android/pylib/local/device/local_device_environment.py
@@ -5,12 +5,15 @@ import datetime import logging import os +import shutil +import tempfile import threading from devil.android import device_blacklist from devil.android import device_errors from devil.android import device_utils from devil.android import logcat_monitor +from devil.utils import file_utils from devil.utils import parallelizer from pylib import constants from pylib.base import environment @@ -37,6 +40,7 @@ self._incremental_install = args.incremental_install self._concurrent_adb = args.enable_concurrent_adb self._logcat_output_dir = args.logcat_output_dir + self._logcat_output_file = args.logcat_output_file self._logcat_monitors = [] #override @@ -61,7 +65,10 @@ logging.info('Using device cache: %s', cache_path) with open(cache_path) as f: d.LoadCacheData(f.read()) + # Delete cached file so that any exceptions cause it to be cleared. os.unlink(cache_path) + if self._logcat_output_file: + self._logcat_output_dir = tempfile.mkdtemp() if self._logcat_output_dir: for d in self._devices: logcat_file = os.path.join( @@ -112,6 +119,11 @@ for m in self._logcat_monitors: m.Stop() m.Close() + if self._logcat_output_file: + file_utils.MergeFiles( + self._logcat_output_file, + [m.output_file for m in self._logcat_monitors]) + shutil.rmtree(self._logcat_output_dir) def BlacklistDevice(self, device, reason='local_device_failure'): device_serial = device.adb.GetDeviceSerial()
diff --git a/build/android/pylib/local/device/local_device_gtest_run.py b/build/android/pylib/local/device/local_device_gtest_run.py index 740a8c3..4217890 100644 --- a/build/android/pylib/local/device/local_device_gtest_run.py +++ b/build/android/pylib/local/device/local_device_gtest_run.py
@@ -345,9 +345,7 @@ if self._test_instance.app_files: self._delegate.PullAppFiles(device, self._test_instance.app_files, self._test_instance.app_file_dir) - # Clearing data when using incremental install wipes out cached optimized - # dex files (and shouldn't be necessary by tests anyways). - if not self._env.incremental_install: + if not self._test_instance.skip_clear_data: self._delegate.Clear(device) # Parse the output.
diff --git a/build/android/pylib/local/device/local_device_instrumentation_test_run.py b/build/android/pylib/local/device/local_device_instrumentation_test_run.py index ef78c89f..c0850fa 100644 --- a/build/android/pylib/local/device/local_device_instrumentation_test_run.py +++ b/build/android/pylib/local/device/local_device_instrumentation_test_run.py
@@ -219,7 +219,7 @@ if r.GetType() == base_test_result.ResultType.UNKNOWN: r.SetType(base_test_result.ResultType.CRASH) # TODO(jbudorick): ClearApplicationState on failure before switching - # instrumentation tests to platform mode. + # instrumentation tests to platform mode (but respect --skip-clear-data). return results #override
diff --git a/build/android/test_runner.py b/build/android/test_runner.py index 6921ded2..005087259 100755 --- a/build/android/test_runner.py +++ b/build/android/test_runner.py
@@ -109,9 +109,30 @@ dest='json_results_file', help='If set, will dump results in JSON form ' 'to specified file.') - group.add_argument('--logcat-output-dir', - help='If set, will dump logcats recorded during test run ' - 'to directory. File names will be the device ids.') + + logcat_output_group = group.add_mutually_exclusive_group() + logcat_output_group.add_argument( + '--logcat-output-dir', + help='If set, will dump logcats recorded during test run to directory. ' + 'File names will be the device ids with timestamps.') + logcat_output_group.add_argument( + '--logcat-output-file', + help='If set, will merge logcats recorded during test run and dump them ' + 'to the specified file.') + + class FastLocalDevAction(argparse.Action): + def __call__(self, parser, namespace, values, option_string=None): + namespace.verbose_count = max(namespace.verbose_count, 1) + namespace.num_retries = 0 + namespace.enable_device_cache = True + namespace.skip_clear_data = True + namespace.extract_test_list_from_filter = True + + group.add_argument('--fast-local-dev', type=bool, nargs=0, + action=FastLocalDevAction, + help='Alias for: --verbose --num-retries=0 ' + '--enable-device-cache --skip-clear-data ' + '--extract-test-list-from-filter') def ProcessCommonOptions(args): """Processes and handles all common options.""" @@ -216,6 +237,10 @@ group.add_argument('--enable-concurrent-adb', action='store_true', help='Run multiple adb commands at the same time, even ' 'for the same device.') + group.add_argument('--skip-clear-data', action='store_true', + help='Do not wipe app data between tests. Use this to ' + 'speed up local development and never on bots ' + '(increases flakiness)') def AddGTestOptions(parser): @@ -467,7 +492,8 @@ args.timeout_scale, args.apk_under_test, args.additional_apks, - args.strict_mode) + args.strict_mode, + args.skip_clear_data) def AddUIAutomatorTestOptions(parser):
diff --git a/build/common.gypi b/build/common.gypi index 4bc35cc4..7da3818 100644 --- a/build/common.gypi +++ b/build/common.gypi
@@ -488,7 +488,7 @@ 'use_sanitizer_options%': 0, # Enable building with SyzyAsan. - # See https://code.google.com/p/sawbuck/wiki/SyzyASanHowTo + # See https://github.com/google/syzygy/wiki/SyzyASanHowTo 'syzyasan%': 0, # Enable crash reporting via Kasko. @@ -629,14 +629,14 @@ # This setting will override the default. # # See - # http://code.google.com/p/chromium/wiki/WindowsPrecompiledHeaders + # https://chromium.googlesource.com/chromium/src/+/master/docs/windows_precompiled_headers.md # for details. 'chromium_win_pch%': 0, # Clang stuff. 'make_clang_dir%': 'third_party/llvm-build/Release+Asserts', # Set this to true when building with Clang. - # See http://code.google.com/p/chromium/wiki/Clang for details. + # See https://chromium.googlesource.com/chromium/src/+/master/docs/clang.md for details. # If this is set, clang is used as both host and target compiler in # cross-compile builds. 'clang%': 0, @@ -4410,6 +4410,19 @@ ['ubsan==1', { 'target_conditions': [ ['_toolset=="target"', { + 'conditions': [ + ['chromecast==0', { + 'cflags': [ + # Employ the experimental PBQP register allocator to avoid + # slow compilation on files with too many basic blocks. + # See http://crbug.com/426271. + '-mllvm -regalloc=pbqp', + # Speculatively use coalescing to slightly improve the code + # generated by PBQP regallocator. May increase compile time. + '-mllvm -pbqp-coalescing', + ], + }], + ], 'cflags': [ # FIXME: work on enabling more flags and getting rid of false # positives. http://crbug.com/174801. @@ -4425,13 +4438,6 @@ '-fsanitize=unreachable', '-fsanitize=vla-bound', '-fsanitize-blacklist=<(ubsan_blacklist)', - # Employ the experimental PBQP register allocator to avoid - # slow compilation on files with too many basic blocks. - # See http://crbug.com/426271. - '-mllvm -regalloc=pbqp', - # Speculatively use coalescing to slightly improve the code - # generated by PBQP regallocator. May increase compile time. - '-mllvm -pbqp-coalescing', ], 'cflags_cc!': [ '-fno-rtti',
diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni index 7e279c3e..332c5e9 100644 --- a/build/config/android/internal_rules.gni +++ b/build/config/android/internal_rules.gni
@@ -439,7 +439,7 @@ } if (defined(invoker.apk_under_test)) { - deps += [ invoker.apk_under_test ] + deps += [ "${invoker.apk_under_test}__build_config" ] apk_under_test_gen_dir = get_label_info(invoker.apk_under_test, "target_gen_dir") apk_under_test_name = get_label_info(invoker.apk_under_test, "name") @@ -2092,14 +2092,9 @@ ] } if (defined(invoker.incremental_install) && invoker.incremental_install) { - test_runner_args += [ "--incremental-install" ] - - # These can still be overridden, but make more better defaults during - # development. test_runner_args += [ - "--enable-device-cache", - "--extract-test-list-from-filter", - "--num_retries=0", + "--incremental-install", + "--fast-local-dev", ] } if (is_asan) {
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni index 46186db..cbcd4cc 100644 --- a/build/config/android/rules.gni +++ b/build/config/android/rules.gni
@@ -1191,6 +1191,8 @@ # android_manifest: Path to AndroidManifest.xml. # android_manifest_dep: Target that generates AndroidManifest (if applicable) # chromium_code: If true, extra analysis warning/errors will be enabled. +# create_dist_ijar: Whether to define the "${target_name}_dist_ijar" target +# (used by instrumentation_test_apk). # data_deps: List of dependencies needed at runtime. These will be built but # won't change the generated .apk in any way (in fact they may be built # after the .apk is). @@ -1282,11 +1284,6 @@ } else if (defined(invoker.apk_name)) { _final_apk_path = "$root_build_dir/apks/" + invoker.apk_name + ".apk" } - _dist_jar_path_list = - process_file_template( - [ _final_apk_path ], - "$root_build_dir/test.lib.java/{{source_name_part}}.jar") - _dist_jar_path = _dist_jar_path_list[0] _final_apk_path_no_ext_list = process_file_template([ _final_apk_path ], "{{source_dir}}/{{source_name_part}}") @@ -1530,14 +1527,13 @@ } } - if (_dist_jar_path != "") { - create_dist_target = "${_template_name}__create_dist_jar" - _final_deps += [ ":$create_dist_target" ] - - # TODO(cjhopman): This is only ever needed to calculate the list of tests to - # run. See build/android/pylib/instrumentation/test_jar.py. We should be - # able to just do that calculation at build time instead. - action(create_dist_target) { + # TODO(cjhopman): This is only ever needed to calculate the list of tests to + # run. See build/android/pylib/instrumentation/test_jar.py. We should be + # able to just do that calculation at build time instead. + if (defined(invoker.create_dist_ijar) && invoker.create_dist_ijar) { + _dist_ijar_path = "$root_build_dir/test.lib.java/" + + get_path_info(_final_apk_path, "name") + ".jar" + action("${_template_name}_dist_ijar") { script = "//build/android/gyp/create_dist_jar.py" depfile = "$target_gen_dir/$target_name.d" inputs = [ @@ -1545,13 +1541,14 @@ ] outputs = [ depfile, - _dist_jar_path, + "${_dist_ijar_path}", ] args = [ "--depfile", rebase_path(depfile, root_build_dir), "--output", - rebase_path(_dist_jar_path, root_build_dir), + rebase_path("${_dist_ijar_path}", root_build_dir), + "--use-ijars", "--inputs=@FileArg($_rebased_build_config:dist_jar:dependency_jars)", ] inputs += [ _jar_path ] @@ -1962,6 +1959,7 @@ data_deps += invoker.additional_apks } + create_dist_ijar = true run_findbugs = defined(invoker.run_findbugs) && invoker.run_findbugs && (defined(invoker.java_files) || defined(invoker.DEPRECATED_java_in_dir)) @@ -1971,6 +1969,10 @@ public_deps = [ ":$_apk_target_name", ":$_test_runner_target_name", + + # Required by test runner to enumerate test list. + ":${_apk_target_name}_dist_ijar", + invoker.apk_under_test, ] } }
diff --git a/build/config/sanitizers/BUILD.gn b/build/config/sanitizers/BUILD.gn index d0edf5f..1dc367ec 100644 --- a/build/config/sanitizers/BUILD.gn +++ b/build/config/sanitizers/BUILD.gn
@@ -3,6 +3,7 @@ # found in the LICENSE file. import("//build/config/chrome_build.gni") +import("//build/config/chromecast_build.gni") import("//build/config/sanitizers/sanitizers.gni") # Contains the dependencies needed for sanitizers to link into executables and @@ -215,18 +216,24 @@ "-fsanitize=unreachable", "-fsanitize=vla-bound", "-fsanitize-blacklist=$ubsan_blacklist_path", - - # Employ the experimental PBQP register allocator to avoid slow - # compilation on files with too many basic blocks. - # See http://crbug.com/426271. - "-mllvm", - "-regalloc=pbqp", - - # Speculatively use coalescing to slightly improve the code generated - # by PBQP regallocator. May increase compile time. - "-mllvm", - "-pbqp-coalescing", ] + + # Chromecast ubsan builds fail to compile with these + # experimental flags, so only add them to non-chromecast ubsan builds. + if (!is_chromecast) { + cflags += [ + # Employ the experimental PBQP register allocator to avoid slow + # compilation on files with too many basic blocks. + # See http://crbug.com/426271. + "-mllvm", + "-regalloc=pbqp", + + # Speculatively use coalescing to slightly improve the code generated + # by PBQP regallocator. May increase compile time. + "-mllvm", + "-pbqp-coalescing", + ] + } } if (is_ubsan_vptr) { ubsan_vptr_blacklist_path =
diff --git a/build/config/sanitizers/sanitizers.gni b/build/config/sanitizers/sanitizers.gni index 0795011..7968114 100644 --- a/build/config/sanitizers/sanitizers.gni +++ b/build/config/sanitizers/sanitizers.gni
@@ -34,7 +34,7 @@ # Enable building with SyzyAsan which can find certain types of memory # errors. Only works on Windows. See - # https://code.google.com/p/sawbuck/wiki/SyzyASanHowTo + # https://github.com/google/syzygy/wiki/SyzyASanHowTo is_syzyasan = false # Compile with Control Flow Integrity to protect virtual calls and casts.
diff --git a/build/config/win/msvs_dependencies.isolate b/build/config/win/msvs_dependencies.isolate index 6814b43f..061a8978 100644 --- a/build/config/win/msvs_dependencies.isolate +++ b/build/config/win/msvs_dependencies.isolate
@@ -45,6 +45,8 @@ 'files': [ '<(PRODUCT_DIR)/x64/msvcp140d.dll', '<(PRODUCT_DIR)/x64/vccorlib140d.dll', + '<(PRODUCT_DIR)/x64/vcruntime140d.dll', + '<(PRODUCT_DIR)/x64/ucrtbased.dll', ], }, }], @@ -53,6 +55,8 @@ 'files': [ '<(PRODUCT_DIR)/x64/msvcp140.dll', '<(PRODUCT_DIR)/x64/vccorlib140.dll', + '<(PRODUCT_DIR)/x64/vcruntime140.dll', + '<(PRODUCT_DIR)/x64/ucrtbase.dll', ], }, }], @@ -61,6 +65,8 @@ 'files': [ '<(PRODUCT_DIR)/msvcp140d.dll', '<(PRODUCT_DIR)/vccorlib140d.dll', + '<(PRODUCT_DIR)/vcruntime140d.dll', + '<(PRODUCT_DIR)/ucrtbased.dll', ], }, }], @@ -69,8 +75,106 @@ 'files': [ '<(PRODUCT_DIR)/msvcp140.dll', '<(PRODUCT_DIR)/vccorlib140.dll', + '<(PRODUCT_DIR)/vcruntime140.dll', + '<(PRODUCT_DIR)/ucrtbase.dll', ], }, }], + ['OS=="win" and msvs_version==2015 and component=="shared_library" and target_arch=="ia32"', { + # 32-bit builds have an x64 directory which also needs Windows 10 + # Universal C Runtime binaries copied over. + 'variables': { + 'files': [ + '<(PRODUCT_DIR)/x64/api-ms-win-core-console-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-datetime-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-debug-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-errorhandling-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-file-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-file-l1-2-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-file-l2-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-handle-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-heap-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-interlocked-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-libraryloader-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-localization-l1-2-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-memory-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-namedpipe-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-processenvironment-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-processthreads-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-processthreads-l1-1-1.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-profile-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-rtlsupport-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-string-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-synch-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-synch-l1-2-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-sysinfo-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-timezone-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-core-util-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-crt-conio-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-crt-convert-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-crt-environment-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-crt-filesystem-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-crt-heap-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-crt-locale-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-crt-math-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-crt-multibyte-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-crt-private-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-crt-process-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-crt-runtime-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-crt-stdio-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-crt-string-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-crt-time-l1-1-0.dll', + '<(PRODUCT_DIR)/x64/api-ms-win-crt-utility-l1-1-0.dll', + ], + }, + }], + ['OS=="win" and msvs_version==2015 and component=="shared_library"', { + # Windows 10 Universal C Runtime binaries. + 'variables': { + 'files': [ + '<(PRODUCT_DIR)/api-ms-win-core-console-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-datetime-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-debug-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-errorhandling-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-file-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-file-l1-2-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-file-l2-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-handle-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-heap-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-interlocked-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-libraryloader-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-localization-l1-2-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-memory-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-namedpipe-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-processenvironment-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-processthreads-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-processthreads-l1-1-1.dll', + '<(PRODUCT_DIR)/api-ms-win-core-profile-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-rtlsupport-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-string-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-synch-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-synch-l1-2-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-sysinfo-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-timezone-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-core-util-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-crt-conio-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-crt-convert-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-crt-environment-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-crt-filesystem-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-crt-heap-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-crt-locale-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-crt-math-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-crt-multibyte-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-crt-private-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-crt-process-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-crt-runtime-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-crt-stdio-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-crt-string-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-crt-time-l1-1-0.dll', + '<(PRODUCT_DIR)/api-ms-win-crt-utility-l1-1-0.dll', + ], + }, + }], + ], }
diff --git a/build/gn_migration.gypi b/build/gn_migration.gypi index 5fce8912..7464d78 100644 --- a/build/gn_migration.gypi +++ b/build/gn_migration.gypi
@@ -549,6 +549,7 @@ '../base/base.gyp:base_unittests_run', '../cc/cc_tests.gyp:cc_unittests_run', '../chrome/chrome.gyp:browser_tests_run', + '../chrome/chrome.gyp:chrome_app_unittests_run', '../chrome/chrome.gyp:chrome_run', '../chrome/chrome.gyp:interactive_ui_tests_run', '../chrome/chrome.gyp:sync_integration_tests_run',
diff --git a/build/install-build-deps-android.sh b/build/install-build-deps-android.sh index 4d0b3fe..9f1317ef 100755 --- a/build/install-build-deps-android.sh +++ b/build/install-build-deps-android.sh
@@ -6,7 +6,7 @@ # Script to install everything needed to build chromium on android, including # items requiring sudo privileges. -# See http://code.google.com/p/chromium/wiki/AndroidBuildInstructions +# See https://www.chromium.org/developers/how-tos/android-build-instructions # This script installs the sun-java6 packages (bin, jre and jdk). Sun requires # a license agreement, so upon installation it will prompt the user. To get
diff --git a/build/install-build-deps.sh b/build/install-build-deps.sh index d882f25..c0d8d99 100755 --- a/build/install-build-deps.sh +++ b/build/install-build-deps.sh
@@ -5,8 +5,7 @@ # found in the LICENSE file. # Script to install everything needed to build chromium (well, ideally, anyway) -# See http://code.google.com/p/chromium/wiki/LinuxBuildInstructions -# and http://code.google.com/p/chromium/wiki/LinuxBuild64Bit +# See https://chromium.googlesource.com/chromium/src/+/master/docs/linux_build_instructions.md usage() { echo "Usage: $0 [--options]"
diff --git a/build/util/lib/common/unittest_util.py b/build/util/lib/common/unittest_util.py index a4fa8aef4..010252b 100644 --- a/build/util/lib/common/unittest_util.py +++ b/build/util/lib/common/unittest_util.py
@@ -94,7 +94,7 @@ def FilterTestSuite(suite, gtest_filter): """Returns a new filtered tests suite based on the given gtest filter. - See http://code.google.com/p/googletest/wiki/AdvancedGuide + See https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md for gtest_filter specification. """ return unittest.TestSuite(FilterTests(GetTestsFromSuite(suite), gtest_filter)) @@ -118,7 +118,7 @@ def FilterTestNames(all_tests, gtest_filter): """Filter a list of test names based on the given gtest filter. - See http://code.google.com/p/googletest/wiki/AdvancedGuide + See https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md for gtest_filter specification. Args:
diff --git a/build/vs_toolchain.py b/build/vs_toolchain.py index f6aef3a..6ed5599 100755 --- a/build/vs_toolchain.py +++ b/build/vs_toolchain.py
@@ -3,6 +3,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import glob import json import os import pipes @@ -151,14 +152,15 @@ raise ValueError('Unexpected GYP_MSVS_VERSION') -def _CopyRuntimeImpl(target, source): +def _CopyRuntimeImpl(target, source, verbose=True): """Copy |source| to |target| if it doesn't already exist or if it needs to be updated. """ if (os.path.isdir(os.path.dirname(target)) and (not os.path.isfile(target) or os.stat(target).st_mtime != os.stat(source).st_mtime)): - print 'Copying %s to %s...' % (source, target) + if verbose: + print 'Copying %s to %s...' % (source, target) if os.path.exists(target): os.unlink(target) shutil.copy2(source, target) @@ -190,9 +192,14 @@ suffix = "d.dll" if debug else ".dll" if GetVisualStudioVersion() == '2015': _CopyRuntime2015(target_dir, source_dir, '%s140' + suffix) - if debug: - _CopyRuntimeImpl(os.path.join(target_dir, 'ucrtbased.dll'), - os.path.join(source_dir, 'ucrtbased.dll')) + ucrt_src_dir = os.path.join(source_dir, 'api-ms-win-*.dll') + print 'Copying %s to %s...' % (ucrt_src_dir, target_dir) + for ucrt_src_file in glob.glob(ucrt_src_dir): + file_part = os.path.basename(ucrt_src_file) + ucrt_dst_file = os.path.join(target_dir, file_part) + _CopyRuntimeImpl(ucrt_dst_file, ucrt_src_file, False) + _CopyRuntimeImpl(os.path.join(target_dir, 'ucrtbase' + suffix), + os.path.join(source_dir, 'ucrtbase' + suffix)) else: _CopyRuntime2013(target_dir, source_dir, 'msvc%s120' + suffix)
diff --git a/cc/BUILD.gn b/cc/BUILD.gn index 6cbe28be..9e6b3e60e 100644 --- a/cc/BUILD.gn +++ b/cc/BUILD.gn
@@ -113,14 +113,6 @@ "input/top_controls_manager_client.h", "layers/append_quads_data.h", "layers/content_layer_client.h", - "layers/delegated_frame_provider.cc", - "layers/delegated_frame_provider.h", - "layers/delegated_frame_resource_collection.cc", - "layers/delegated_frame_resource_collection.h", - "layers/delegated_renderer_layer.cc", - "layers/delegated_renderer_layer.h", - "layers/delegated_renderer_layer_impl.cc", - "layers/delegated_renderer_layer_impl.h", "layers/draw_properties.cc", "layers/draw_properties.h", "layers/empty_content_layer_client.cc", @@ -586,10 +578,6 @@ "test/fake_channel_impl.h", "test/fake_content_layer_client.cc", "test/fake_content_layer_client.h", - "test/fake_delegated_renderer_layer.cc", - "test/fake_delegated_renderer_layer.h", - "test/fake_delegated_renderer_layer_impl.cc", - "test/fake_delegated_renderer_layer_impl.h", "test/fake_display_list_raster_source.cc", "test/fake_display_list_raster_source.h", "test/fake_display_list_recording_source.cc", @@ -789,10 +777,6 @@ "input/layer_selection_bound_unittest.cc", "input/scroll_state_unittest.cc", "input/top_controls_manager_unittest.cc", - "layers/delegated_frame_provider_unittest.cc", - "layers/delegated_frame_resource_collection_unittest.cc", - "layers/delegated_renderer_layer_impl_unittest.cc", - "layers/delegated_renderer_layer_unittest.cc", "layers/heads_up_display_layer_impl_unittest.cc", "layers/heads_up_display_unittest.cc", "layers/io_surface_layer_impl_unittest.cc", @@ -893,7 +877,6 @@ "trees/layer_tree_host_unittest_context.cc", "trees/layer_tree_host_unittest_copyrequest.cc", "trees/layer_tree_host_unittest_damage.cc", - "trees/layer_tree_host_unittest_delegated.cc", "trees/layer_tree_host_unittest_occlusion.cc", "trees/layer_tree_host_unittest_picture.cc", "trees/layer_tree_host_unittest_proxy.cc",
diff --git a/cc/animation/animation_timeline.cc b/cc/animation/animation_timeline.cc index a5d320b..cb173310 100644 --- a/cc/animation/animation_timeline.cc +++ b/cc/animation/animation_timeline.cc
@@ -19,8 +19,8 @@ } AnimationTimeline::~AnimationTimeline() { - for (auto& player : players_) - player->SetAnimationTimeline(nullptr); + for (auto& kv : id_to_player_map_) + kv.second->SetAnimationTimeline(nullptr); } scoped_refptr<AnimationTimeline> AnimationTimeline::CreateImplInstance() const { @@ -30,37 +30,32 @@ void AnimationTimeline::SetAnimationHost(AnimationHost* animation_host) { animation_host_ = animation_host; - for (auto& player : players_) - player->SetAnimationHost(animation_host); + for (auto& kv : id_to_player_map_) + kv.second->SetAnimationHost(animation_host); } void AnimationTimeline::AttachPlayer(scoped_refptr<AnimationPlayer> player) { + DCHECK(player->id()); player->SetAnimationHost(animation_host_); - player->SetAnimationTimeline(this); - players_.push_back(player); + id_to_player_map_.insert(std::make_pair(player->id(), player)); } void AnimationTimeline::DetachPlayer(scoped_refptr<AnimationPlayer> player) { - for (AnimationPlayerList::iterator iter = players_.begin(); - iter != players_.end(); ++iter) { - if (iter->get() != player) - continue; - - ErasePlayers(iter, iter + 1); - break; - } + DCHECK(player->id()); + ErasePlayer(player); + id_to_player_map_.erase(player->id()); } AnimationPlayer* AnimationTimeline::GetPlayerById(int player_id) const { - for (auto& player : players_) - if (player->id() == player_id) - return player.get(); - return nullptr; + auto f = id_to_player_map_.find(player_id); + return f == id_to_player_map_.end() ? nullptr : f->second.get(); } void AnimationTimeline::ClearPlayers() { - ErasePlayers(players_.begin(), players_.end()); + for (auto& kv : id_to_player_map_) + ErasePlayer(kv.second); + id_to_player_map_.clear(); } void AnimationTimeline::PushPropertiesTo(AnimationTimeline* timeline_impl) { @@ -71,7 +66,8 @@ void AnimationTimeline::PushAttachedPlayersToImplThread( AnimationTimeline* timeline_impl) const { - for (auto& player : players_) { + for (auto& kv : id_to_player_map_) { + auto& player = kv.second; AnimationPlayer* player_impl = timeline_impl->GetPlayerById(player->id()); if (player_impl) continue; @@ -83,33 +79,30 @@ void AnimationTimeline::RemoveDetachedPlayersFromImplThread( AnimationTimeline* timeline_impl) const { - AnimationPlayerList& players_impl = timeline_impl->players_; + IdToPlayerMap& players_impl = timeline_impl->id_to_player_map_; - auto to_erase = - std::partition(players_impl.begin(), players_impl.end(), - [this](AnimationPlayerList::value_type player_impl) { - return GetPlayerById(player_impl->id()); - }); - - timeline_impl->ErasePlayers(to_erase, players_impl.end()); + // Erase all the impl players which |this| doesn't have. + for (auto it = players_impl.begin(); it != players_impl.end();) { + if (GetPlayerById(it->second->id())) { + ++it; + } else { + timeline_impl->ErasePlayer(it->second); + it = players_impl.erase(it); + } + } } -void AnimationTimeline::ErasePlayers(AnimationPlayerList::iterator begin, - AnimationPlayerList::iterator end) { - for (auto i = begin; i != end; ++i) { - auto& player = *i; - if (player->element_animations()) - player->DetachLayer(); - player->SetAnimationTimeline(nullptr); - player->SetAnimationHost(nullptr); - } - - players_.erase(begin, end); +void AnimationTimeline::ErasePlayer(scoped_refptr<AnimationPlayer> player) { + if (player->element_animations()) + player->DetachLayer(); + player->SetAnimationTimeline(nullptr); + player->SetAnimationHost(nullptr); } void AnimationTimeline::PushPropertiesToImplThread( AnimationTimeline* timeline_impl) { - for (auto& player : players_) { + for (auto& kv : id_to_player_map_) { + AnimationPlayer* player = kv.second.get(); AnimationPlayer* player_impl = timeline_impl->GetPlayerById(player->id()); if (player_impl) player->PushPropertiesTo(player_impl);
diff --git a/cc/animation/animation_timeline.h b/cc/animation/animation_timeline.h index 64222d3..ca618ca 100644 --- a/cc/animation/animation_timeline.h +++ b/cc/animation/animation_timeline.h
@@ -5,7 +5,7 @@ #ifndef CC_ANIMATION_ANIMATION_TIMELINE_H_ #define CC_ANIMATION_ANIMATION_TIMELINE_H_ -#include <vector> +#include <unordered_map> #include "base/macros.h" #include "base/memory/ref_counted.h" @@ -17,8 +17,6 @@ class AnimationHost; class AnimationPlayer; -typedef std::vector<scoped_refptr<AnimationPlayer>> AnimationPlayerList; - // An AnimationTimeline owns a group of AnimationPlayers. // This is a cc counterpart for blink::AnimationTimeline (in 1:1 relationship). // Each AnimationTimeline and its AnimationPlayers have their copies on @@ -58,10 +56,12 @@ void RemoveDetachedPlayersFromImplThread(AnimationTimeline* timeline) const; void PushPropertiesToImplThread(AnimationTimeline* timeline); - void ErasePlayers(AnimationPlayerList::iterator begin, - AnimationPlayerList::iterator end); + void ErasePlayer(scoped_refptr<AnimationPlayer> player); - AnimationPlayerList players_; + // A list of all players which this timeline owns. + using IdToPlayerMap = std::unordered_map<int, scoped_refptr<AnimationPlayer>>; + IdToPlayerMap id_to_player_map_; + int id_; AnimationHost* animation_host_;
diff --git a/cc/cc.gyp b/cc/cc.gyp index 33d8624..8a5e6cef 100644 --- a/cc/cc.gyp +++ b/cc/cc.gyp
@@ -175,14 +175,6 @@ 'input/top_controls_manager_client.h', 'layers/append_quads_data.h', 'layers/content_layer_client.h', - 'layers/delegated_frame_provider.cc', - 'layers/delegated_frame_provider.h', - 'layers/delegated_frame_resource_collection.cc', - 'layers/delegated_frame_resource_collection.h', - 'layers/delegated_renderer_layer.cc', - 'layers/delegated_renderer_layer.h', - 'layers/delegated_renderer_layer_impl.cc', - 'layers/delegated_renderer_layer_impl.h', 'layers/draw_properties.cc', 'layers/draw_properties.h', 'layers/empty_content_layer_client.cc',
diff --git a/cc/cc_tests.gyp b/cc/cc_tests.gyp index 44c54d0..7a11fd3 100644 --- a/cc/cc_tests.gyp +++ b/cc/cc_tests.gyp
@@ -37,10 +37,6 @@ 'input/layer_selection_bound_unittest.cc', 'input/scroll_state_unittest.cc', 'input/top_controls_manager_unittest.cc', - 'layers/delegated_frame_provider_unittest.cc', - 'layers/delegated_frame_resource_collection_unittest.cc', - 'layers/delegated_renderer_layer_impl_unittest.cc', - 'layers/delegated_renderer_layer_unittest.cc', 'layers/heads_up_display_layer_impl_unittest.cc', 'layers/heads_up_display_unittest.cc', 'layers/io_surface_layer_impl_unittest.cc', @@ -141,7 +137,6 @@ 'trees/layer_tree_host_unittest_context.cc', 'trees/layer_tree_host_unittest_copyrequest.cc', 'trees/layer_tree_host_unittest_damage.cc', - 'trees/layer_tree_host_unittest_delegated.cc', 'trees/layer_tree_host_unittest_occlusion.cc', 'trees/layer_tree_host_unittest_picture.cc', 'trees/layer_tree_host_unittest_proxy.cc', @@ -186,10 +181,6 @@ 'test/fake_channel_impl.h', 'test/fake_content_layer_client.cc', 'test/fake_content_layer_client.h', - 'test/fake_delegated_renderer_layer.cc', - 'test/fake_delegated_renderer_layer.h', - 'test/fake_delegated_renderer_layer_impl.cc', - 'test/fake_delegated_renderer_layer_impl.h', 'test/fake_display_list_raster_source.cc', 'test/fake_display_list_raster_source.h', 'test/fake_display_list_recording_source.cc',
diff --git a/cc/layers/delegated_frame_provider.cc b/cc/layers/delegated_frame_provider.cc deleted file mode 100644 index 4923485..0000000 --- a/cc/layers/delegated_frame_provider.cc +++ /dev/null
@@ -1,111 +0,0 @@ -// Copyright 2013 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 "cc/layers/delegated_frame_provider.h" - -#include <stddef.h> - -#include "cc/layers/delegated_frame_resource_collection.h" -#include "cc/layers/delegated_renderer_layer.h" -#include "cc/output/delegated_frame_data.h" -#include "cc/quads/render_pass_draw_quad.h" - -namespace cc { - -DelegatedFrameProvider::DelegatedFrameProvider( - const scoped_refptr<DelegatedFrameResourceCollection>& resource_collection, - scoped_ptr<DelegatedFrameData> frame) - : resource_collection_(resource_collection) { - RenderPass* root_pass = frame->render_pass_list.back().get(); - frame_size_ = root_pass->output_rect.size(); - DCHECK(!frame_size_.IsEmpty()); - SetFrameData(std::move(frame)); -} - -DelegatedFrameProvider::~DelegatedFrameProvider() { - ReturnedResourceArray returned; - TransferableResource::ReturnResources(frame_->resource_list, &returned); - resource_collection_->UnrefResources(returned); -} - -void DelegatedFrameProvider::AddObserver(DelegatedRendererLayer* layer) { -#if DCHECK_IS_ON() - for (size_t i = 0; i < observers_.size(); ++i) - DCHECK(observers_[i].layer != layer); -#endif - - observers_.push_back(Observer(layer, gfx::Rect(frame_size_))); - - DCHECK(frame_) << "Must have a frame when given to a DelegatedRendererLayer."; -} - -void DelegatedFrameProvider::RemoveObserver(DelegatedRendererLayer* layer) { - bool found_observer = false; - for (size_t i = 0; i < observers_.size(); ++i) { - if (observers_[i].layer != layer) - continue; - observers_.erase(observers_.begin() + i); - found_observer = true; - break; - } - DCHECK(found_observer); -} - -void DelegatedFrameProvider::SetFrameData( - scoped_ptr<DelegatedFrameData> frame) { - DCHECK(frame); - DCHECK_NE(0u, frame->render_pass_list.size()); - - if (frame_) { - ReturnedResourceArray returned; - TransferableResource::ReturnResources(frame_->resource_list, &returned); - resource_collection_->UnrefResources(returned); - } - - frame_ = std::move(frame); - - resource_collection_->ReceivedResources(frame_->resource_list); - resource_collection_->RefResources(frame_->resource_list); - - RenderPass* root_pass = frame_->render_pass_list.back().get(); - DCHECK_EQ(frame_size_.ToString(), root_pass->output_rect.size().ToString()) - << "All frames in a single DelegatedFrameProvider must have the same " - << "size. Use a new frame provider for frames of a different size."; - - for (size_t i = 0; i < observers_.size(); ++i) { - observers_[i].damage = - gfx::UnionRects(observers_[i].damage, root_pass->damage_rect); - observers_[i].layer->ProviderHasNewFrame(); - } -} - -DelegatedFrameData* DelegatedFrameProvider::GetFrameDataAndRefResources( - DelegatedRendererLayer* observer, - gfx::Rect* damage) { - bool found_observer = false; - for (size_t i = 0; i < observers_.size(); ++i) { - if (observers_[i].layer != observer) - continue; - *damage = observers_[i].damage; - // The observer is now responsible for the damage. - observers_[i].damage = gfx::Rect(); - found_observer = true; - } - DCHECK(found_observer); - - resource_collection_->RefResources(frame_->resource_list); - return frame_.get(); -} - -ReturnCallback -DelegatedFrameProvider::GetReturnResourcesCallbackForImplThread() { - return resource_collection_->GetReturnResourcesCallbackForImplThread(); -} - -void DelegatedFrameProvider::UnrefResourcesOnMainThread( - const ReturnedResourceArray& returned) { - resource_collection_->UnrefResources(returned); -} - -} // namespace cc
diff --git a/cc/layers/delegated_frame_provider.h b/cc/layers/delegated_frame_provider.h deleted file mode 100644 index 7757d0c..0000000 --- a/cc/layers/delegated_frame_provider.h +++ /dev/null
@@ -1,76 +0,0 @@ -// Copyright 2013 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 CC_LAYERS_DELEGATED_FRAME_PROVIDER_H_ -#define CC_LAYERS_DELEGATED_FRAME_PROVIDER_H_ - -#include <vector> - -#include "base/macros.h" -#include "base/memory/ref_counted.h" -#include "base/memory/scoped_ptr.h" -#include "cc/base/cc_export.h" -#include "cc/resources/return_callback.h" -#include "cc/resources/returned_resource.h" -#include "ui/gfx/geometry/rect.h" -#include "ui/gfx/geometry/size.h" - -namespace cc { -class DelegatedFrameData; -class DelegatedFrameResourceCollection; -class DelegatedRendererLayer; - -// Only one observing layer has ownership of the DelegatedFrameProvider. Only -// the active observer should call GetFrameDataAndRefResources(). All frames -// provided by a single DelegatedFrameProvider must have the same size. A new -// provider must be used for frames of a different size. -class CC_EXPORT DelegatedFrameProvider - : public base::RefCounted<DelegatedFrameProvider> { - public: - explicit DelegatedFrameProvider( - const scoped_refptr<DelegatedFrameResourceCollection>& - resource_collection, - scoped_ptr<DelegatedFrameData> frame); - - void AddObserver(DelegatedRendererLayer* layer); - void RemoveObserver(DelegatedRendererLayer* layer); - - void SetFrameData(scoped_ptr<DelegatedFrameData> frame); - - // The DelegatedFrameData returned here must be displayed in order to not - // lose track of damage. - DelegatedFrameData* GetFrameDataAndRefResources( - DelegatedRendererLayer* observer, - gfx::Rect* damage); - - ReturnCallback GetReturnResourcesCallbackForImplThread(); - void UnrefResourcesOnMainThread(const ReturnedResourceArray& unused); - - gfx::Size frame_size() const { return frame_size_; } - - private: - friend class base::RefCounted<DelegatedFrameProvider>; - ~DelegatedFrameProvider(); - - scoped_refptr<DelegatedFrameResourceCollection> resource_collection_; - - scoped_ptr<DelegatedFrameData> frame_; - - struct Observer { - DelegatedRendererLayer* layer; - gfx::Rect damage; - - Observer(DelegatedRendererLayer* layer, const gfx::Rect& damage) - : layer(layer), damage(damage) {} - }; - std::vector<Observer> observers_; - - gfx::Size frame_size_; - - DISALLOW_COPY_AND_ASSIGN(DelegatedFrameProvider); -}; - -} // namespace cc - -#endif // CC_LAYERS_DELEGATED_FRAME_PROVIDER_H_
diff --git a/cc/layers/delegated_frame_provider_unittest.cc b/cc/layers/delegated_frame_provider_unittest.cc deleted file mode 100644 index 5aa8ba3c..0000000 --- a/cc/layers/delegated_frame_provider_unittest.cc +++ /dev/null
@@ -1,402 +0,0 @@ -// Copyright 2013 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 "cc/layers/delegated_frame_provider.h" - -#include "cc/layers/delegated_frame_resource_collection.h" -#include "cc/layers/delegated_renderer_layer.h" -#include "cc/layers/layer_settings.h" -#include "cc/output/delegated_frame_data.h" -#include "cc/quads/texture_draw_quad.h" -#include "cc/resources/resource_provider.h" -#include "cc/resources/returned_resource.h" -#include "cc/resources/transferable_resource.h" -#include "cc/trees/layer_tree_settings.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace cc { -namespace { - -class DelegatedFrameProviderTest - : public testing::Test, - public DelegatedFrameResourceCollectionClient { - protected: - DelegatedFrameProviderTest() : resources_available_(false) {} - - scoped_ptr<DelegatedFrameData> CreateFrameData( - const gfx::Rect& root_output_rect, - const gfx::Rect& root_damage_rect) { - scoped_ptr<DelegatedFrameData> frame(new DelegatedFrameData); - - scoped_ptr<RenderPass> root_pass(RenderPass::Create()); - root_pass->SetNew(RenderPassId(1, 1), - root_output_rect, - root_damage_rect, - gfx::Transform()); - frame->render_pass_list.push_back(std::move(root_pass)); - return frame; - } - - void AddTransferableResource(DelegatedFrameData* frame, - ResourceId resource_id) { - TransferableResource resource; - resource.id = resource_id; - resource.mailbox_holder.texture_target = GL_TEXTURE_2D; - frame->resource_list.push_back(resource); - } - - void AddTextureQuad(DelegatedFrameData* frame, ResourceId resource_id) { - SharedQuadState* sqs = - frame->render_pass_list[0]->CreateAndAppendSharedQuadState(); - TextureDrawQuad* quad = - frame->render_pass_list[0]->CreateAndAppendDrawQuad<TextureDrawQuad>(); - float vertex_opacity[4] = {1.f, 1.f, 1.f, 1.f}; - quad->SetNew(sqs, - gfx::Rect(0, 0, 10, 10), - gfx::Rect(0, 0, 10, 10), - gfx::Rect(0, 0, 10, 10), - resource_id, - false, - gfx::PointF(0.f, 0.f), - gfx::PointF(1.f, 1.f), - SK_ColorTRANSPARENT, - vertex_opacity, - false, - false); - } - - void SetUp() override { - resource_collection_ = new DelegatedFrameResourceCollection; - resource_collection_->SetClient(this); - } - - void TearDown() override { resource_collection_->SetClient(nullptr); } - - void UnusedResourcesAreAvailable() override { - resources_available_ = true; - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources_); - } - - bool ReturnAndResetResourcesAvailable() { - bool r = resources_available_; - resources_available_ = false; - return r; - } - - void SetFrameProvider(scoped_ptr<DelegatedFrameData> frame_data) { - frame_provider_ = - new DelegatedFrameProvider(resource_collection_, std::move(frame_data)); - } - - scoped_refptr<DelegatedFrameResourceCollection> resource_collection_; - scoped_refptr<DelegatedFrameProvider> frame_provider_; - bool resources_available_; - ReturnedResourceArray resources_; - LayerSettings layer_settings_; -}; - -TEST_F(DelegatedFrameProviderTest, SameResources) { - scoped_ptr<DelegatedFrameData> frame = - CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); - AddTextureQuad(frame.get(), 444); - AddTransferableResource(frame.get(), 444); - SetFrameProvider(std::move(frame)); - - frame = CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); - AddTextureQuad(frame.get(), 444); - AddTransferableResource(frame.get(), 444); - SetFrameProvider(std::move(frame)); - - EXPECT_FALSE(ReturnAndResetResourcesAvailable()); - EXPECT_EQ(0u, resources_.size()); - - frame_provider_ = nullptr; - - EXPECT_TRUE(ReturnAndResetResourcesAvailable()); - EXPECT_EQ(1u, resources_.size()); - EXPECT_EQ(444u, resources_[0].id); -} - -TEST_F(DelegatedFrameProviderTest, ReplaceResources) { - scoped_ptr<DelegatedFrameData> frame = - CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); - AddTextureQuad(frame.get(), 444); - AddTransferableResource(frame.get(), 444); - SetFrameProvider(std::move(frame)); - - EXPECT_FALSE(ReturnAndResetResourcesAvailable()); - - frame = CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - SetFrameProvider(std::move(frame)); - - EXPECT_TRUE(ReturnAndResetResourcesAvailable()); - EXPECT_EQ(1u, resources_.size()); - EXPECT_EQ(444u, resources_[0].id); - resources_.clear(); - - frame_provider_ = nullptr; - - EXPECT_TRUE(ReturnAndResetResourcesAvailable()); - EXPECT_EQ(1u, resources_.size()); - EXPECT_EQ(555u, resources_[0].id); -} - -TEST_F(DelegatedFrameProviderTest, RefResources) { - scoped_ptr<DelegatedFrameData> frame = - CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); - AddTextureQuad(frame.get(), 444); - AddTransferableResource(frame.get(), 444); - - TransferableResourceArray reffed = frame->resource_list; - ReturnedResourceArray returned; - TransferableResource::ReturnResources(reffed, &returned); - - SetFrameProvider(std::move(frame)); - - scoped_refptr<DelegatedRendererLayer> observer1 = - DelegatedRendererLayer::Create(layer_settings_, frame_provider_); - scoped_refptr<DelegatedRendererLayer> observer2 = - DelegatedRendererLayer::Create(layer_settings_, frame_provider_); - - gfx::Rect damage; - - // Both observers get a full frame of damage on the first request. - frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); - EXPECT_EQ(gfx::Rect(5, 5), damage); - frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); - EXPECT_EQ(gfx::Rect(5, 5), damage); - - // And both get no damage on the 2nd request. This adds a second ref to the - // resources. - frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); - EXPECT_EQ(gfx::Rect(), damage); - frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); - EXPECT_EQ(gfx::Rect(), damage); - - EXPECT_FALSE(ReturnAndResetResourcesAvailable()); - - frame = CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - frame_provider_->SetFrameData(std::move(frame)); - - // The resources from the first frame are still reffed by the observers. - EXPECT_FALSE(ReturnAndResetResourcesAvailable()); - - // There are 4 refs taken. - frame_provider_->UnrefResourcesOnMainThread(returned); - EXPECT_FALSE(ReturnAndResetResourcesAvailable()); - frame_provider_->UnrefResourcesOnMainThread(returned); - EXPECT_FALSE(ReturnAndResetResourcesAvailable()); - frame_provider_->UnrefResourcesOnMainThread(returned); - EXPECT_FALSE(ReturnAndResetResourcesAvailable()); - - // The 4th unref will release them. - frame_provider_->UnrefResourcesOnMainThread(returned); - - EXPECT_TRUE(ReturnAndResetResourcesAvailable()); - EXPECT_EQ(1u, resources_.size()); - EXPECT_EQ(444u, resources_[0].id); -} - -TEST_F(DelegatedFrameProviderTest, RefResourcesInFrameProvider) { - scoped_ptr<DelegatedFrameData> frame = - CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); - AddTextureQuad(frame.get(), 444); - AddTransferableResource(frame.get(), 444); - - TransferableResourceArray reffed = frame->resource_list; - ReturnedResourceArray returned; - TransferableResource::ReturnResources(reffed, &returned); - - SetFrameProvider(std::move(frame)); - - scoped_refptr<DelegatedRendererLayer> observer1 = - DelegatedRendererLayer::Create(layer_settings_, frame_provider_); - scoped_refptr<DelegatedRendererLayer> observer2 = - DelegatedRendererLayer::Create(layer_settings_, frame_provider_); - - gfx::Rect damage; - - // Take a ref on each observer. - frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); - frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); - - EXPECT_FALSE(ReturnAndResetResourcesAvailable()); - - // Release both refs. But there's still a ref held in the frame - // provider itself. - frame_provider_->UnrefResourcesOnMainThread(returned); - frame_provider_->UnrefResourcesOnMainThread(returned); - EXPECT_FALSE(ReturnAndResetResourcesAvailable()); - - // Setting a new frame will release it. - frame = CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - frame_provider_->SetFrameData(std::move(frame)); - - EXPECT_TRUE(ReturnAndResetResourcesAvailable()); - EXPECT_EQ(1u, resources_.size()); - EXPECT_EQ(444u, resources_[0].id); -} - -TEST_F(DelegatedFrameProviderTest, RefResourcesInFrameProviderUntilDestroy) { - scoped_ptr<DelegatedFrameData> frame = - CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); - AddTextureQuad(frame.get(), 444); - AddTransferableResource(frame.get(), 444); - - TransferableResourceArray reffed = frame->resource_list; - ReturnedResourceArray returned; - TransferableResource::ReturnResources(reffed, &returned); - - SetFrameProvider(std::move(frame)); - - scoped_refptr<DelegatedRendererLayer> observer1 = - DelegatedRendererLayer::Create(layer_settings_, frame_provider_); - scoped_refptr<DelegatedRendererLayer> observer2 = - DelegatedRendererLayer::Create(layer_settings_, frame_provider_); - - gfx::Rect damage; - - // Take a ref on each observer. - frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); - frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); - - EXPECT_FALSE(ReturnAndResetResourcesAvailable()); - - // Release both refs. But there's still a ref held in the frame - // provider itself. - frame_provider_->UnrefResourcesOnMainThread(returned); - frame_provider_->UnrefResourcesOnMainThread(returned); - EXPECT_FALSE(ReturnAndResetResourcesAvailable()); - - // Releasing all references to the frame provider will release - // the frame. - observer1 = nullptr; - observer2 = nullptr; - EXPECT_FALSE(ReturnAndResetResourcesAvailable()); - - frame_provider_ = nullptr; - - EXPECT_TRUE(ReturnAndResetResourcesAvailable()); - EXPECT_EQ(1u, resources_.size()); - EXPECT_EQ(444u, resources_[0].id); -} - -TEST_F(DelegatedFrameProviderTest, Damage) { - scoped_ptr<DelegatedFrameData> frame = - CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); - AddTextureQuad(frame.get(), 444); - AddTransferableResource(frame.get(), 444); - - TransferableResourceArray reffed = frame->resource_list; - ReturnedResourceArray returned; - TransferableResource::ReturnResources(reffed, &returned); - - SetFrameProvider(std::move(frame)); - - scoped_refptr<DelegatedRendererLayer> observer1 = - DelegatedRendererLayer::Create(layer_settings_, frame_provider_); - scoped_refptr<DelegatedRendererLayer> observer2 = - DelegatedRendererLayer::Create(layer_settings_, frame_provider_); - - gfx::Rect damage; - - // Both observers get a full frame of damage on the first request. - frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); - EXPECT_EQ(gfx::Rect(5, 5), damage); - frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); - EXPECT_EQ(gfx::Rect(5, 5), damage); - - // And both get no damage on the 2nd request. - frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); - EXPECT_EQ(gfx::Rect(), damage); - frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); - EXPECT_EQ(gfx::Rect(), damage); - - frame = CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - frame_provider_->SetFrameData(std::move(frame)); - - // Both observers get the damage for the new frame. - frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); - EXPECT_EQ(gfx::Rect(2, 2), damage); - frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); - EXPECT_EQ(gfx::Rect(2, 2), damage); - - // And both get no damage on the 2nd request. - frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); - EXPECT_EQ(gfx::Rect(), damage); - frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); - EXPECT_EQ(gfx::Rect(), damage); -} - -TEST_F(DelegatedFrameProviderTest, LostNothing) { - scoped_ptr<DelegatedFrameData> frame = - CreateFrameData(gfx::Rect(5, 5), gfx::Rect(5, 5)); - - TransferableResourceArray reffed = frame->resource_list; - - SetFrameProvider(std::move(frame)); - - // There is nothing to lose. - EXPECT_FALSE(ReturnAndResetResourcesAvailable()); - EXPECT_FALSE(resource_collection_->LoseAllResources()); - EXPECT_FALSE(ReturnAndResetResourcesAvailable()); - EXPECT_EQ(0u, resources_.size()); -} - -TEST_F(DelegatedFrameProviderTest, LostSomething) { - scoped_ptr<DelegatedFrameData> frame = - CreateFrameData(gfx::Rect(5, 5), gfx::Rect(5, 5)); - AddTextureQuad(frame.get(), 444); - AddTransferableResource(frame.get(), 444); - - SetFrameProvider(std::move(frame)); - - // Add a second reference on the resource. - frame = CreateFrameData(gfx::Rect(5, 5), gfx::Rect(5, 5)); - AddTextureQuad(frame.get(), 444); - AddTransferableResource(frame.get(), 444); - - SetFrameProvider(std::move(frame)); - - // There is something to lose. - EXPECT_FALSE(ReturnAndResetResourcesAvailable()); - EXPECT_TRUE(resource_collection_->LoseAllResources()); - EXPECT_TRUE(ReturnAndResetResourcesAvailable()); - - EXPECT_EQ(1u, resources_.size()); - EXPECT_EQ(444u, resources_[0].id); - EXPECT_EQ(2, resources_[0].count); -} - -TEST_F(DelegatedFrameProviderTest, NothingReturnedAfterLoss) { - scoped_ptr<DelegatedFrameData> frame = - CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); - AddTextureQuad(frame.get(), 444); - AddTransferableResource(frame.get(), 444); - SetFrameProvider(std::move(frame)); - - EXPECT_FALSE(ReturnAndResetResourcesAvailable()); - - // Lose all the resources. - EXPECT_TRUE(resource_collection_->LoseAllResources()); - EXPECT_TRUE(ReturnAndResetResourcesAvailable()); - resources_.clear(); - - frame_provider_ = nullptr; - - // Nothing is returned twice. - EXPECT_FALSE(ReturnAndResetResourcesAvailable()); - EXPECT_EQ(0u, resources_.size()); -} - -} // namespace -} // namespace cc
diff --git a/cc/layers/delegated_frame_resource_collection.cc b/cc/layers/delegated_frame_resource_collection.cc deleted file mode 100644 index c567b822..0000000 --- a/cc/layers/delegated_frame_resource_collection.cc +++ /dev/null
@@ -1,131 +0,0 @@ -// Copyright 2013 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 "cc/layers/delegated_frame_resource_collection.h" - -#include <stddef.h> - -#include "base/bind.h" -#include "cc/trees/blocking_task_runner.h" - -namespace cc { - -DelegatedFrameResourceCollection::DelegatedFrameResourceCollection() - : client_(nullptr), lost_all_resources_(false), weak_ptr_factory_(this) { - DCHECK(main_thread_checker_.CalledOnValidThread()); -} - -DelegatedFrameResourceCollection::~DelegatedFrameResourceCollection() { - DCHECK(main_thread_checker_.CalledOnValidThread()); -} - -void DelegatedFrameResourceCollection::SetClient( - DelegatedFrameResourceCollectionClient* client) { - client_ = client; -} - -void DelegatedFrameResourceCollection::TakeUnusedResourcesForChildCompositor( - ReturnedResourceArray* array) { - DCHECK(main_thread_checker_.CalledOnValidThread()); - DCHECK(array->empty()); - array->swap(returned_resources_for_child_compositor_); -} - -bool DelegatedFrameResourceCollection::LoseAllResources() { - DCHECK(main_thread_checker_.CalledOnValidThread()); - DCHECK(!lost_all_resources_); - lost_all_resources_ = true; - - if (resource_id_ref_count_map_.empty()) - return false; - - ReturnedResourceArray to_return; - - for (ResourceIdRefCountMap::iterator it = resource_id_ref_count_map_.begin(); - it != resource_id_ref_count_map_.end(); - ++it) { - DCHECK_GE(it->second.refs_to_wait_for, 1); - - ReturnedResource returned; - returned.id = it->first; - returned.count = it->second.refs_to_return; - returned.lost = true; - to_return.push_back(returned); - } - - returned_resources_for_child_compositor_.insert( - returned_resources_for_child_compositor_.end(), - to_return.begin(), - to_return.end()); - if (client_) - client_->UnusedResourcesAreAvailable(); - return true; -} - -void DelegatedFrameResourceCollection::ReceivedResources( - const TransferableResourceArray& resources) { - DCHECK(main_thread_checker_.CalledOnValidThread()); - DCHECK(!lost_all_resources_); - - for (size_t i = 0; i < resources.size(); ++i) - resource_id_ref_count_map_[resources[i].id].refs_to_return++; -} - -void DelegatedFrameResourceCollection::UnrefResources( - const ReturnedResourceArray& returned) { - DCHECK(main_thread_checker_.CalledOnValidThread()); - - if (lost_all_resources_) - return; - - ReturnedResourceArray to_return; - - for (size_t i = 0; i < returned.size(); ++i) { - ResourceIdRefCountMap::iterator it = - resource_id_ref_count_map_.find(returned[i].id); - DCHECK(it != resource_id_ref_count_map_.end()); - DCHECK_GE(it->second.refs_to_wait_for, returned[i].count); - it->second.refs_to_wait_for -= returned[i].count; - if (it->second.refs_to_wait_for == 0) { - to_return.push_back(returned[i]); - to_return.back().count = it->second.refs_to_return; - resource_id_ref_count_map_.erase(it); - } - } - - if (to_return.empty()) - return; - - returned_resources_for_child_compositor_.insert( - returned_resources_for_child_compositor_.end(), - to_return.begin(), - to_return.end()); - if (client_) - client_->UnusedResourcesAreAvailable(); -} - -void DelegatedFrameResourceCollection::RefResources( - const TransferableResourceArray& resources) { - DCHECK(main_thread_checker_.CalledOnValidThread()); - for (size_t i = 0; i < resources.size(); ++i) - resource_id_ref_count_map_[resources[i].id].refs_to_wait_for++; -} - -static void UnrefResourcesOnImplThread( - base::WeakPtr<DelegatedFrameResourceCollection> self, - const ReturnedResourceArray& returned, - BlockingTaskRunner* main_thread_task_runner) { - main_thread_task_runner->PostTask( - FROM_HERE, - base::Bind( - &DelegatedFrameResourceCollection::UnrefResources, self, returned)); -} - -ReturnCallback -DelegatedFrameResourceCollection::GetReturnResourcesCallbackForImplThread() { - return base::Bind(&UnrefResourcesOnImplThread, - weak_ptr_factory_.GetWeakPtr()); -} - -} // namespace cc
diff --git a/cc/layers/delegated_frame_resource_collection.h b/cc/layers/delegated_frame_resource_collection.h deleted file mode 100644 index e7b996b..0000000 --- a/cc/layers/delegated_frame_resource_collection.h +++ /dev/null
@@ -1,71 +0,0 @@ -// Copyright 2013 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 CC_LAYERS_DELEGATED_FRAME_RESOURCE_COLLECTION_H_ -#define CC_LAYERS_DELEGATED_FRAME_RESOURCE_COLLECTION_H_ - -#include <unordered_map> - -#include "base/macros.h" -#include "base/memory/ref_counted.h" -#include "base/memory/weak_ptr.h" -#include "base/threading/thread_checker.h" -#include "cc/base/cc_export.h" -#include "cc/resources/return_callback.h" -#include "cc/resources/returned_resource.h" -#include "cc/resources/transferable_resource.h" - -namespace cc { - -class CC_EXPORT DelegatedFrameResourceCollectionClient { - public: - // Called to inform the client that returned resources can be - // grabbed off the DelegatedFrameResourceCollection. - virtual void UnusedResourcesAreAvailable() = 0; -}; - -class CC_EXPORT DelegatedFrameResourceCollection - : public base::RefCounted<DelegatedFrameResourceCollection> { - public: - DelegatedFrameResourceCollection(); - - void SetClient(DelegatedFrameResourceCollectionClient* client); - - void TakeUnusedResourcesForChildCompositor(ReturnedResourceArray* array); - - // Considers all resources as lost, and returns true if it held any resource - // to lose. - bool LoseAllResources(); - - // Methods for DelegatedFrameProvider. - void RefResources(const TransferableResourceArray& resources); - void UnrefResources(const ReturnedResourceArray& returned); - void ReceivedResources(const TransferableResourceArray& resources); - ReturnCallback GetReturnResourcesCallbackForImplThread(); - - private: - friend class base::RefCounted<DelegatedFrameResourceCollection>; - ~DelegatedFrameResourceCollection(); - - DelegatedFrameResourceCollectionClient* client_; - - ReturnedResourceArray returned_resources_for_child_compositor_; - bool lost_all_resources_; - - struct RefCount { - int refs_to_return; - int refs_to_wait_for; - }; - using ResourceIdRefCountMap = std::unordered_map<unsigned, RefCount>; - ResourceIdRefCountMap resource_id_ref_count_map_; - - base::ThreadChecker main_thread_checker_; - base::WeakPtrFactory<DelegatedFrameResourceCollection> weak_ptr_factory_; - - DISALLOW_COPY_AND_ASSIGN(DelegatedFrameResourceCollection); -}; - -} // namespace cc - -#endif // CC_LAYERS_DELEGATED_FRAME_RESOURCE_COLLECTION_H_
diff --git a/cc/layers/delegated_frame_resource_collection_unittest.cc b/cc/layers/delegated_frame_resource_collection_unittest.cc deleted file mode 100644 index e5426a0..0000000 --- a/cc/layers/delegated_frame_resource_collection_unittest.cc +++ /dev/null
@@ -1,165 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "base/bind.h" -#include "base/location.h" -#include "base/run_loop.h" -#include "base/single_thread_task_runner.h" -#include "base/synchronization/waitable_event.h" -#include "base/thread_task_runner_handle.h" -#include "base/threading/thread.h" -#include "cc/layers/delegated_frame_resource_collection.h" -#include "cc/resources/returned_resource.h" -#include "cc/resources/transferable_resource.h" -#include "cc/trees/blocking_task_runner.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace cc { -namespace { - -class DelegatedFrameResourceCollectionTest - : public testing::Test, - public DelegatedFrameResourceCollectionClient { - protected: - DelegatedFrameResourceCollectionTest() : resources_available_(false) {} - - void SetUp() override { CreateResourceCollection(); } - - void TearDown() override { DestroyResourceCollection(); } - - void CreateResourceCollection() { - DCHECK(!resource_collection_.get()); - resource_collection_ = new DelegatedFrameResourceCollection; - resource_collection_->SetClient(this); - } - - void DestroyResourceCollection() { - if (resource_collection_.get()) { - resource_collection_->SetClient(nullptr); - resource_collection_ = nullptr; - } - } - - TransferableResourceArray CreateResourceArray() { - TransferableResourceArray resources; - TransferableResource resource; - resource.id = 444; - resources.push_back(resource); - return resources; - } - - void UnusedResourcesAreAvailable() override { - resources_available_ = true; - resource_collection_->TakeUnusedResourcesForChildCompositor( - &returned_resources_); - if (!resources_available_closure_.is_null()) - resources_available_closure_.Run(); - } - - bool ReturnAndResetResourcesAvailable() { - bool r = resources_available_; - resources_available_ = false; - return r; - } - - scoped_refptr<DelegatedFrameResourceCollection> resource_collection_; - bool resources_available_; - ReturnedResourceArray returned_resources_; - base::Closure resources_available_closure_; -}; - -// This checks that taking the return callback doesn't take extra refcounts, -// since it's sent to other threads. -TEST_F(DelegatedFrameResourceCollectionTest, NoRef) { - // Start with one ref. - EXPECT_TRUE(resource_collection_->HasOneRef()); - - ReturnCallback return_callback = - resource_collection_->GetReturnResourcesCallbackForImplThread(); - - // Callback shouldn't take a ref since it's sent to other threads. - EXPECT_TRUE(resource_collection_->HasOneRef()); -} - -void ReturnResourcesOnThread(ReturnCallback callback, - const ReturnedResourceArray& resources, - base::WaitableEvent* event, - BlockingTaskRunner* main_thread_task_runner) { - callback.Run(resources, main_thread_task_runner); - if (event) - event->Wait(); -} - -// Tests that the ReturnCallback can run safely on threads even after the -// last references to the collection were dropped. -// Flaky: crbug.com/313441 -TEST_F(DelegatedFrameResourceCollectionTest, Thread) { - base::Thread thread("test thread"); - thread.Start(); - scoped_ptr<BlockingTaskRunner> main_thread_task_runner( - BlockingTaskRunner::Create(base::ThreadTaskRunnerHandle::Get())); - - TransferableResourceArray resources = CreateResourceArray(); - resource_collection_->ReceivedResources(resources); - resource_collection_->RefResources(resources); - - ReturnedResourceArray returned_resources; - TransferableResource::ReturnResources(resources, &returned_resources); - - base::WaitableEvent event(false, false); - - { - base::RunLoop run_loop; - resources_available_closure_ = run_loop.QuitClosure(); - - thread.message_loop()->task_runner()->PostTask( - FROM_HERE, - base::Bind( - &ReturnResourcesOnThread, - resource_collection_->GetReturnResourcesCallbackForImplThread(), - returned_resources, &event, main_thread_task_runner.get())); - - run_loop.Run(); - } - EXPECT_TRUE(ReturnAndResetResourcesAvailable()); - EXPECT_EQ(1u, returned_resources_.size()); - EXPECT_EQ(444u, returned_resources_[0].id); - EXPECT_EQ(1, returned_resources_[0].count); - returned_resources_.clear(); - - // The event prevents the return resources callback from being deleted. - // Destroy the last reference from this thread to the collection before - // signaling the event, to ensure any reference taken by the callback, if any, - // would be the last one. - DestroyResourceCollection(); - event.Signal(); - - CreateResourceCollection(); - resource_collection_->ReceivedResources(resources); - resource_collection_->RefResources(resources); - - // Destroy the collection before we have a chance to run the return callback. - ReturnCallback return_callback = - resource_collection_->GetReturnResourcesCallbackForImplThread(); - resource_collection_->LoseAllResources(); - DestroyResourceCollection(); - - EXPECT_TRUE(ReturnAndResetResourcesAvailable()); - EXPECT_EQ(1u, returned_resources_.size()); - EXPECT_EQ(444u, returned_resources_[0].id); - EXPECT_EQ(1, returned_resources_[0].count); - EXPECT_TRUE(returned_resources_[0].lost); - returned_resources_.clear(); - - base::WaitableEvent* null_event = nullptr; - thread.message_loop()->task_runner()->PostTask( - FROM_HERE, - base::Bind(&ReturnResourcesOnThread, return_callback, returned_resources, - null_event, main_thread_task_runner.get())); - - thread.Stop(); -} - -} // namespace -} // namespace cc
diff --git a/cc/layers/delegated_renderer_layer.cc b/cc/layers/delegated_renderer_layer.cc deleted file mode 100644 index 4c0e3cc..0000000 --- a/cc/layers/delegated_renderer_layer.cc +++ /dev/null
@@ -1,103 +0,0 @@ -// Copyright 2012 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 "cc/layers/delegated_renderer_layer.h" - -#include "cc/layers/delegated_renderer_layer_impl.h" -#include "cc/output/delegated_frame_data.h" -#include "cc/quads/render_pass_draw_quad.h" -#include "cc/trees/layer_tree_host.h" - -namespace cc { - -scoped_refptr<DelegatedRendererLayer> DelegatedRendererLayer::Create( - const LayerSettings& settings, - const scoped_refptr<DelegatedFrameProvider>& frame_provider) { - return scoped_refptr<DelegatedRendererLayer>( - new DelegatedRendererLayer(settings, frame_provider)); -} - -DelegatedRendererLayer::DelegatedRendererLayer( - const LayerSettings& settings, - const scoped_refptr<DelegatedFrameProvider>& frame_provider) - : Layer(settings), - frame_provider_(frame_provider), - should_collect_new_frame_(true), - frame_data_(nullptr), - weak_ptrs_(this) { - frame_provider_->AddObserver(this); -} - -DelegatedRendererLayer::~DelegatedRendererLayer() { - frame_provider_->RemoveObserver(this); -} - -scoped_ptr<LayerImpl> DelegatedRendererLayer::CreateLayerImpl( - LayerTreeImpl* tree_impl) { - return DelegatedRendererLayerImpl::Create(tree_impl, layer_id_); -} - -void DelegatedRendererLayer::SetLayerTreeHost(LayerTreeHost* host) { - if (layer_tree_host() == host) { - Layer::SetLayerTreeHost(host); - return; - } - - if (!host) { - // The active frame needs to be removed from the active tree and resources - // returned before the commit is called complete. - // TODO(danakj): Don't need to do this if the last frame commited was empty - // or we never commited a frame with resources. - SetNextCommitWaitsForActivation(); - } else { - // There is no active frame in the new layer tree host to wait for so no - // need to call SetNextCommitWaitsForActivation(). - should_collect_new_frame_ = true; - SetNeedsUpdate(); - } - - Layer::SetLayerTreeHost(host); -} - -void DelegatedRendererLayer::PushPropertiesTo(LayerImpl* impl) { - Layer::PushPropertiesTo(impl); - - DelegatedRendererLayerImpl* delegated_impl = - static_cast<DelegatedRendererLayerImpl*>(impl); - - delegated_impl->CreateChildIdIfNeeded( - frame_provider_->GetReturnResourcesCallbackForImplThread()); - - if (frame_data_) - delegated_impl->SetFrameData(frame_data_, frame_damage_); - frame_data_ = nullptr; - frame_damage_ = gfx::Rect(); -} - -void DelegatedRendererLayer::ProviderHasNewFrame() { - should_collect_new_frame_ = true; - SetNeedsUpdate(); - // The active frame needs to be replaced and resources returned before the - // commit is called complete. - SetNextCommitWaitsForActivation(); -} - -bool DelegatedRendererLayer::Update() { - bool updated = Layer::Update(); - if (!should_collect_new_frame_) - return updated; - - frame_data_ = - frame_provider_->GetFrameDataAndRefResources(this, &frame_damage_); - should_collect_new_frame_ = false; - - SetNeedsPushProperties(); - return true; -} - -bool DelegatedRendererLayer::HasDelegatedContent() const { - return true; -} - -} // namespace cc
diff --git a/cc/layers/delegated_renderer_layer.h b/cc/layers/delegated_renderer_layer.h deleted file mode 100644 index 601cf4f..0000000 --- a/cc/layers/delegated_renderer_layer.h +++ /dev/null
@@ -1,56 +0,0 @@ -// Copyright 2012 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 CC_LAYERS_DELEGATED_RENDERER_LAYER_H_ -#define CC_LAYERS_DELEGATED_RENDERER_LAYER_H_ - -#include "base/macros.h" -#include "base/memory/ref_counted.h" -#include "base/memory/weak_ptr.h" -#include "base/synchronization/lock.h" -#include "cc/base/cc_export.h" -#include "cc/layers/delegated_frame_provider.h" -#include "cc/layers/layer.h" -#include "cc/resources/returned_resource.h" - -namespace cc { - -class CC_EXPORT DelegatedRendererLayer : public Layer { - public: - static scoped_refptr<DelegatedRendererLayer> Create( - const LayerSettings& settings, - const scoped_refptr<DelegatedFrameProvider>& frame_provider); - - scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) override; - void SetLayerTreeHost(LayerTreeHost* host) override; - bool Update() override; - void PushPropertiesTo(LayerImpl* impl) override; - - // Called by the DelegatedFrameProvider when a new frame is available to be - // picked up. - void ProviderHasNewFrame(); - bool HasDelegatedContent() const override; - - protected: - DelegatedRendererLayer( - const LayerSettings& settings, - const scoped_refptr<DelegatedFrameProvider>& frame_provider); - ~DelegatedRendererLayer() override; - - private: - scoped_refptr<DelegatedFrameProvider> frame_provider_; - - bool should_collect_new_frame_; - - DelegatedFrameData* frame_data_; - gfx::Rect frame_damage_; - - base::WeakPtrFactory<DelegatedRendererLayer> weak_ptrs_; - - DISALLOW_COPY_AND_ASSIGN(DelegatedRendererLayer); -}; - -} // namespace cc - -#endif // CC_LAYERS_DELEGATED_RENDERER_LAYER_H_
diff --git a/cc/layers/delegated_renderer_layer_impl.cc b/cc/layers/delegated_renderer_layer_impl.cc deleted file mode 100644 index 35806cc2..0000000 --- a/cc/layers/delegated_renderer_layer_impl.cc +++ /dev/null
@@ -1,514 +0,0 @@ -// Copyright 2012 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 "cc/layers/delegated_renderer_layer_impl.h" - -#include <stddef.h> -#include <stdint.h> - -#include <algorithm> -#include <utility> - -#include "base/bind.h" -#include "cc/base/math_util.h" -#include "cc/layers/append_quads_data.h" -#include "cc/layers/render_pass_sink.h" -#include "cc/output/delegated_frame_data.h" -#include "cc/quads/render_pass_draw_quad.h" -#include "cc/quads/solid_color_draw_quad.h" -#include "cc/trees/layer_tree_impl.h" -#include "cc/trees/occlusion.h" -#include "ui/gfx/geometry/rect_conversions.h" - -namespace cc { - -DelegatedRendererLayerImpl::DelegatedRendererLayerImpl(LayerTreeImpl* tree_impl, - int id) - : LayerImpl(tree_impl, id), - have_render_passes_to_push_(false), - inverse_device_scale_factor_(1.0f), - child_id_(0), - own_child_id_(false) { -} - -DelegatedRendererLayerImpl::~DelegatedRendererLayerImpl() { - ClearRenderPasses(); - ClearChildId(); -} - -bool DelegatedRendererLayerImpl::HasDelegatedContent() const { return true; } - -bool DelegatedRendererLayerImpl::HasContributingDelegatedRenderPasses() const { - // The root RenderPass for the layer is merged with its target - // RenderPass in each frame. So we only have extra RenderPasses - // to merge when we have a non-root RenderPass present. - return render_passes_in_draw_order_.size() > 1; -} - -void DelegatedRendererLayerImpl::PushPropertiesTo(LayerImpl* layer) { - LayerImpl::PushPropertiesTo(layer); - - DelegatedRendererLayerImpl* delegated_layer = - static_cast<DelegatedRendererLayerImpl*>(layer); - - // If we have a new child_id to give to the active layer, it should - // have already deleted its old child_id. - DCHECK(delegated_layer->child_id_ == 0 || - delegated_layer->child_id_ == child_id_); - delegated_layer->inverse_device_scale_factor_ = inverse_device_scale_factor_; - delegated_layer->child_id_ = child_id_; - delegated_layer->own_child_id_ = true; - own_child_id_ = false; - - if (have_render_passes_to_push_) { - DCHECK(child_id_); - // This passes ownership of the render passes to the active tree. - delegated_layer->SetRenderPasses(&render_passes_in_draw_order_); - // Once resources are on the active tree, give them to the ResourceProvider - // and release unused resources from the old frame. - delegated_layer->TakeOwnershipOfResourcesIfOnActiveTree(resources_); - DCHECK(render_passes_in_draw_order_.empty()); - have_render_passes_to_push_ = false; - } - - // This is just a copy for testing, since resources are added to the - // ResourceProvider in the pending tree. - delegated_layer->resources_ = resources_; -} - -void DelegatedRendererLayerImpl::CreateChildIdIfNeeded( - const ReturnCallback& return_callback) { - if (child_id_) - return; - - ResourceProvider* resource_provider = layer_tree_impl()->resource_provider(); - child_id_ = resource_provider->CreateChild(return_callback); - own_child_id_ = true; -} - -void DelegatedRendererLayerImpl::SetFrameData( - const DelegatedFrameData* frame_data, - const gfx::Rect& damage_in_frame) { - DCHECK(child_id_) << "CreateChildIdIfNeeded must be called first."; - DCHECK(frame_data); - DCHECK(!frame_data->render_pass_list.empty()); - // A frame with an empty root render pass is invalid. - DCHECK(!frame_data->render_pass_list.back()->output_rect.IsEmpty()); - - ResourceProvider* resource_provider = layer_tree_impl()->resource_provider(); - const ResourceProvider::ResourceIdMap& resource_map = - resource_provider->GetChildToParentMap(child_id_); - - resource_provider->ReceiveFromChild(child_id_, frame_data->resource_list); - - RenderPassList render_pass_list; - RenderPass::CopyAll(frame_data->render_pass_list, &render_pass_list); - - bool invalid_frame = false; - ResourceProvider::ResourceIdSet resources_in_frame; - size_t reserve_size = frame_data->resource_list.size(); - resources_in_frame.reserve(reserve_size); - for (const auto& pass : render_pass_list) { - for (const auto& quad : pass->quad_list) { - for (ResourceId& resource_id : quad->resources) { - ResourceProvider::ResourceIdMap::const_iterator it = - resource_map.find(resource_id); - if (it == resource_map.end()) { - invalid_frame = true; - break; - } - - DCHECK_EQ(it->first, resource_id); - ResourceId remapped_id = it->second; - resources_in_frame.insert(resource_id); - resource_id = remapped_id; - } - } - } - - if (invalid_frame) { - // Declare we are still using the last frame's resources. Drops ownership of - // any invalid resources, keeping only those in use by the active tree. - resource_provider->DeclareUsedResourcesFromChild(child_id_, resources_); - return; - } - - // Save the new frame's resources, but don't give them to the ResourceProvider - // until they are active, since the resources on the active tree will still be - // used and we don't want to return them early. - resources_.swap(resources_in_frame); - TakeOwnershipOfResourcesIfOnActiveTree(resources_); - - inverse_device_scale_factor_ = 1.0f / frame_data->device_scale_factor; - // Display size is already set so we can compute what the damage rect - // will be in layer space. The damage may exceed the visible portion of - // the frame, so intersect the damage to the layer's bounds. - RenderPass* new_root_pass = render_pass_list.back().get(); - gfx::Size frame_size = new_root_pass->output_rect.size(); - gfx::Rect damage_in_layer = - gfx::ScaleToEnclosingRect(damage_in_frame, inverse_device_scale_factor_); - SetUpdateRect(gfx::IntersectRects( - gfx::UnionRects(update_rect(), damage_in_layer), gfx::Rect(bounds()))); - - SetRenderPasses(&render_pass_list); - have_render_passes_to_push_ = true; -} - -void DelegatedRendererLayerImpl::TakeOwnershipOfResourcesIfOnActiveTree( - const ResourceProvider::ResourceIdSet& resources) { - DCHECK(child_id_); - if (!layer_tree_impl()->IsActiveTree()) - return; - layer_tree_impl()->resource_provider()->DeclareUsedResourcesFromChild( - child_id_, resources); -} - -void DelegatedRendererLayerImpl::SetRenderPasses( - RenderPassList* render_passes_in_draw_order) { - ClearRenderPasses(); - - size_t i = 0; - for (auto& render_pass : *render_passes_in_draw_order) { - render_passes_index_by_id_.insert( - RenderPassToIndexMap::value_type(render_pass->id, i)); - render_passes_in_draw_order_.push_back(std::move(render_pass)); - ++i; - } - - // Give back an empty array instead of nulls. - render_passes_in_draw_order->clear(); - - // The render passes given here become part of the RenderSurfaceLayerList, so - // changing them requires recomputing the RenderSurfaceLayerList. - layer_tree_impl()->set_needs_update_draw_properties(); -} - -void DelegatedRendererLayerImpl::ClearRenderPasses() { - render_passes_index_by_id_.clear(); - render_passes_in_draw_order_.clear(); -} - -scoped_ptr<LayerImpl> DelegatedRendererLayerImpl::CreateLayerImpl( - LayerTreeImpl* tree_impl) { - return DelegatedRendererLayerImpl::Create(tree_impl, id()); -} - -void DelegatedRendererLayerImpl::ReleaseResources() { - ClearRenderPasses(); - ClearChildId(); - have_render_passes_to_push_ = false; -} - -static inline size_t IndexToId(size_t index) { - return index + 1; -} -static inline size_t IdToIndex(size_t id) { - DCHECK_GT(id, 0u); - return id - 1; -} - -RenderPassId DelegatedRendererLayerImpl::FirstContributingRenderPassId() const { - return RenderPassId(id(), IndexToId(0)); -} - -RenderPassId DelegatedRendererLayerImpl::NextContributingRenderPassId( - RenderPassId previous) const { - return RenderPassId(previous.layer_id, previous.index + 1); -} - -bool DelegatedRendererLayerImpl::ConvertDelegatedRenderPassId( - RenderPassId delegated_render_pass_id, - RenderPassId* output_render_pass_id) const { - RenderPassToIndexMap::const_iterator found = - render_passes_index_by_id_.find(delegated_render_pass_id); - if (found == render_passes_index_by_id_.end()) { - // Be robust against a RenderPass id that isn't part of the frame. - return false; - } - size_t delegated_render_pass_index = found->second; - *output_render_pass_id = - RenderPassId(id(), IndexToId(delegated_render_pass_index)); - return true; -} - -void DelegatedRendererLayerImpl::AppendContributingRenderPasses( - RenderPassSink* render_pass_sink) { - DCHECK(HasContributingDelegatedRenderPasses()); - - const RenderPass* root_delegated_render_pass = - render_passes_in_draw_order_.back().get(); - gfx::Size frame_size = root_delegated_render_pass->output_rect.size(); - gfx::Transform delegated_frame_to_root_transform = ScreenSpaceTransform(); - delegated_frame_to_root_transform.Scale(inverse_device_scale_factor_, - inverse_device_scale_factor_); - - for (size_t i = 0; i < render_passes_in_draw_order_.size() - 1; ++i) { - RenderPassId output_render_pass_id; - bool present = - ConvertDelegatedRenderPassId(render_passes_in_draw_order_[i]->id, - &output_render_pass_id); - - // Don't clash with the RenderPass we generate if we own a RenderSurface. - DCHECK(present) << render_passes_in_draw_order_[i]->id.layer_id << ", " - << render_passes_in_draw_order_[i]->id.index; - DCHECK_GT(output_render_pass_id.index, 0u); - - scoped_ptr<RenderPass> copy_pass = - render_passes_in_draw_order_[i]->Copy(output_render_pass_id); - copy_pass->transform_to_root_target.ConcatTransform( - delegated_frame_to_root_transform); - render_pass_sink->AppendRenderPass(std::move(copy_pass)); - } -} - -bool DelegatedRendererLayerImpl::WillDraw(DrawMode draw_mode, - ResourceProvider* resource_provider) { - if (draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE) - return false; - return LayerImpl::WillDraw(draw_mode, resource_provider); -} - -void DelegatedRendererLayerImpl::AppendQuads( - RenderPass* render_pass, - AppendQuadsData* append_quads_data) { - AppendRainbowDebugBorder(render_pass); - - // This list will be empty after a lost context until a new frame arrives. - if (render_passes_in_draw_order_.empty()) - return; - - RenderPassId target_render_pass_id = render_pass->id; - - const RenderPass* root_delegated_render_pass = - render_passes_in_draw_order_.back().get(); - - DCHECK(root_delegated_render_pass->output_rect.origin().IsOrigin()); - gfx::Size frame_size = root_delegated_render_pass->output_rect.size(); - - // If the index of the RenderPassId is 0, then it is a RenderPass generated - // for a layer in this compositor, not the delegating renderer. Then we want - // to merge our root RenderPass with the target RenderPass. Otherwise, it is - // some RenderPass which we added from the delegating renderer. - bool should_merge_root_render_pass_with_target = !target_render_pass_id.index; - if (should_merge_root_render_pass_with_target) { - // Verify that the RenderPass we are appending to is created by our - // render_target. - DCHECK(target_render_pass_id.layer_id == render_target()->id()); - - AppendRenderPassQuads(render_pass, - root_delegated_render_pass, - frame_size); - } else { - // Verify that the RenderPass we are appending to was created by us. - DCHECK(target_render_pass_id.layer_id == id()); - - size_t render_pass_index = IdToIndex(target_render_pass_id.index); - const RenderPass* delegated_render_pass = - render_passes_in_draw_order_[render_pass_index].get(); - AppendRenderPassQuads(render_pass, - delegated_render_pass, - frame_size); - } -} - -void DelegatedRendererLayerImpl::AppendRainbowDebugBorder( - RenderPass* render_pass) { - if (!ShowDebugBorders()) - return; - - SharedQuadState* shared_quad_state = - render_pass->CreateAndAppendSharedQuadState(); - PopulateSharedQuadState(shared_quad_state); - - SkColor color; - float border_width; - GetDebugBorderProperties(&color, &border_width); - - SkColor colors[] = { - 0x80ff0000, // Red. - 0x80ffa500, // Orange. - 0x80ffff00, // Yellow. - 0x80008000, // Green. - 0x800000ff, // Blue. - 0x80ee82ee, // Violet. - }; - const int kNumColors = arraysize(colors); - - const int kStripeWidth = 300; - const int kStripeHeight = 300; - - for (int i = 0;; ++i) { - // For horizontal lines. - int x = kStripeWidth * i; - int width = std::min(kStripeWidth, bounds().width() - x - 1); - - // For vertical lines. - int y = kStripeHeight * i; - int height = std::min(kStripeHeight, bounds().height() - y - 1); - - gfx::Rect top(x, 0, width, border_width); - gfx::Rect bottom(x, bounds().height() - border_width, width, border_width); - gfx::Rect left(0, y, border_width, height); - gfx::Rect right(bounds().width() - border_width, y, border_width, height); - - if (top.IsEmpty() && left.IsEmpty()) - break; - - if (!top.IsEmpty()) { - bool force_anti_aliasing_off = false; - SolidColorDrawQuad* top_quad = - render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); - top_quad->SetNew(shared_quad_state, top, top, colors[i % kNumColors], - force_anti_aliasing_off); - - SolidColorDrawQuad* bottom_quad = - render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); - bottom_quad->SetNew(shared_quad_state, bottom, bottom, - colors[kNumColors - 1 - (i % kNumColors)], - force_anti_aliasing_off); - - if (contents_opaque()) { - // Draws a stripe filling the layer vertically with the same color and - // width as the horizontal stipes along the layer's top border. - SolidColorDrawQuad* solid_quad = - render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); - // The inner fill is more transparent then the border. - static const float kFillOpacity = 0.1f; - SkColor fill_color = SkColorSetA( - colors[i % kNumColors], - static_cast<uint8_t>(SkColorGetA(colors[i % kNumColors]) * - kFillOpacity)); - gfx::Rect fill_rect(x, 0, width, bounds().height()); - solid_quad->SetNew(shared_quad_state, fill_rect, fill_rect, fill_color, - force_anti_aliasing_off); - } - } - if (!left.IsEmpty()) { - bool force_anti_aliasing_off = false; - SolidColorDrawQuad* left_quad = - render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); - left_quad->SetNew(shared_quad_state, left, left, - colors[kNumColors - 1 - (i % kNumColors)], - force_anti_aliasing_off); - - SolidColorDrawQuad* right_quad = - render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); - right_quad->SetNew(shared_quad_state, right, right, - colors[i % kNumColors], force_anti_aliasing_off); - } - } -} - -void DelegatedRendererLayerImpl::AppendRenderPassQuads( - RenderPass* render_pass, - const RenderPass* delegated_render_pass, - const gfx::Size& frame_size) const { - const SharedQuadState* delegated_shared_quad_state = nullptr; - SharedQuadState* output_shared_quad_state = nullptr; - - gfx::Transform delegated_frame_to_target_transform = DrawTransform(); - delegated_frame_to_target_transform.Scale(inverse_device_scale_factor_, - inverse_device_scale_factor_); - bool is_root_delegated_render_pass = - delegated_render_pass == render_passes_in_draw_order_.back().get(); - for (const auto& delegated_quad : delegated_render_pass->quad_list) { - if (delegated_quad->shared_quad_state != delegated_shared_quad_state) { - delegated_shared_quad_state = delegated_quad->shared_quad_state; - output_shared_quad_state = render_pass->CreateAndAppendSharedQuadState(); - output_shared_quad_state->CopyFrom(delegated_shared_quad_state); - - if (is_root_delegated_render_pass) { - output_shared_quad_state->quad_to_target_transform.ConcatTransform( - delegated_frame_to_target_transform); - - if (render_target() == this) { - DCHECK(!is_clipped()); - DCHECK(render_surface()); - DCHECK_EQ(0u, num_unclipped_descendants()); - output_shared_quad_state->clip_rect = - MathUtil::MapEnclosingClippedRect( - delegated_frame_to_target_transform, - output_shared_quad_state->clip_rect); - } else { - gfx::Rect clip_rect = drawable_content_rect(); - if (output_shared_quad_state->is_clipped) { - clip_rect.Intersect(MathUtil::MapEnclosingClippedRect( - delegated_frame_to_target_transform, - output_shared_quad_state->clip_rect)); - } - output_shared_quad_state->clip_rect = clip_rect; - output_shared_quad_state->is_clipped = true; - } - - output_shared_quad_state->opacity *= draw_opacity(); - } - } - DCHECK(output_shared_quad_state); - - gfx::Transform quad_content_to_delegated_target_space = - output_shared_quad_state->quad_to_target_transform; - if (!is_root_delegated_render_pass) { - quad_content_to_delegated_target_space.ConcatTransform( - delegated_render_pass->transform_to_root_target); - quad_content_to_delegated_target_space.ConcatTransform( - delegated_frame_to_target_transform); - } - - Occlusion occlusion_in_quad_space = - draw_properties() - .occlusion_in_content_space.GetOcclusionWithGivenDrawTransform( - quad_content_to_delegated_target_space); - - gfx::Rect quad_visible_rect = - occlusion_in_quad_space.GetUnoccludedContentRect( - delegated_quad->visible_rect); - - if (quad_visible_rect.IsEmpty()) - continue; - - if (delegated_quad->material != DrawQuad::RENDER_PASS) { - DrawQuad* output_quad = render_pass->CopyFromAndAppendDrawQuad( - delegated_quad, output_shared_quad_state); - output_quad->visible_rect = quad_visible_rect; - ValidateQuadResources(output_quad); - } else { - RenderPassId delegated_contributing_render_pass_id = - RenderPassDrawQuad::MaterialCast(delegated_quad)->render_pass_id; - RenderPassId output_contributing_render_pass_id; - - bool present = - ConvertDelegatedRenderPassId(delegated_contributing_render_pass_id, - &output_contributing_render_pass_id); - // |present| being false means the child compositor sent an invalid frame. - DCHECK(present); - DCHECK(output_contributing_render_pass_id != render_pass->id); - - RenderPassDrawQuad* output_quad = - render_pass->CopyFromAndAppendRenderPassDrawQuad( - RenderPassDrawQuad::MaterialCast(delegated_quad), - output_shared_quad_state, output_contributing_render_pass_id); - output_quad->visible_rect = quad_visible_rect; - ValidateQuadResources(output_quad); - } - } -} - -const char* DelegatedRendererLayerImpl::LayerTypeAsString() const { - return "cc::DelegatedRendererLayerImpl"; -} - -void DelegatedRendererLayerImpl::ClearChildId() { - if (!child_id_) - return; - - if (own_child_id_) { - ResourceProvider* provider = layer_tree_impl()->resource_provider(); - provider->DestroyChild(child_id_); - } - - resources_.clear(); - child_id_ = 0; -} - -} // namespace cc
diff --git a/cc/layers/delegated_renderer_layer_impl.h b/cc/layers/delegated_renderer_layer_impl.h deleted file mode 100644 index f5e4239..0000000 --- a/cc/layers/delegated_renderer_layer_impl.h +++ /dev/null
@@ -1,108 +0,0 @@ -// Copyright 2012 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 CC_LAYERS_DELEGATED_RENDERER_LAYER_IMPL_H_ -#define CC_LAYERS_DELEGATED_RENDERER_LAYER_IMPL_H_ - -#include <stddef.h> - -#include <unordered_map> - -#include "base/macros.h" -#include "base/memory/scoped_ptr.h" -#include "cc/base/cc_export.h" -#include "cc/layers/layer_impl.h" -#include "cc/quads/render_pass_id.h" - -namespace cc { -class DelegatedFrameData; -class RenderPassSink; - -class CC_EXPORT DelegatedRendererLayerImpl : public LayerImpl { - public: - static scoped_ptr<DelegatedRendererLayerImpl> Create( - LayerTreeImpl* tree_impl, int id) { - return make_scoped_ptr(new DelegatedRendererLayerImpl(tree_impl, id)); - } - ~DelegatedRendererLayerImpl() override; - - // LayerImpl overrides. - scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) override; - bool HasDelegatedContent() const override; - bool HasContributingDelegatedRenderPasses() const override; - RenderPassId FirstContributingRenderPassId() const override; - RenderPassId NextContributingRenderPassId( - RenderPassId previous) const override; - void ReleaseResources() override; - bool WillDraw(DrawMode draw_mode, - ResourceProvider* resource_provider) override; - void AppendQuads(RenderPass* render_pass, - AppendQuadsData* append_quads_data) override; - void PushPropertiesTo(LayerImpl* layer) override; - - void AppendContributingRenderPasses(RenderPassSink* render_pass_sink); - - // Creates an ID with the resource provider for the child renderer - // that will be sending quads to the layer. Registers the callback to - // inform when resources are no longer in use. - void CreateChildIdIfNeeded(const ReturnCallback& return_callback); - - void SetFrameData(const DelegatedFrameData* frame_data, - const gfx::Rect& damage_in_frame); - - float inverse_device_scale_factor() const { - return inverse_device_scale_factor_; - } - - protected: - DelegatedRendererLayerImpl(LayerTreeImpl* tree_impl, int id); - - int ChildIdForTesting() const { return child_id_; } - const RenderPassList& RenderPassesInDrawOrderForTesting() const { - return render_passes_in_draw_order_; - } - const ResourceProvider::ResourceIdSet& ResourcesForTesting() const { - return resources_; - } - - private: - void ClearChildId(); - - void AppendRainbowDebugBorder(RenderPass* render_pass); - - void TakeOwnershipOfResourcesIfOnActiveTree( - const ResourceProvider::ResourceIdSet& resources); - void SetRenderPasses(RenderPassList* render_passes_in_draw_order); - void ClearRenderPasses(); - - // Returns |true| if the delegated_render_pass_id is part of the current - // frame and can be converted. - bool ConvertDelegatedRenderPassId(RenderPassId delegated_render_pass_id, - RenderPassId* output_render_pass_id) const; - - void AppendRenderPassQuads(RenderPass* render_pass, - const RenderPass* delegated_render_pass, - const gfx::Size& frame_size) const; - - // LayerImpl overrides. - const char* LayerTypeAsString() const override; - - bool have_render_passes_to_push_; - float inverse_device_scale_factor_; - RenderPassList render_passes_in_draw_order_; - - using RenderPassToIndexMap = - std::unordered_map<RenderPassId, size_t, RenderPassIdHash>; - RenderPassToIndexMap render_passes_index_by_id_; - ResourceProvider::ResourceIdSet resources_; - - int child_id_; - bool own_child_id_; - - DISALLOW_COPY_AND_ASSIGN(DelegatedRendererLayerImpl); -}; - -} // namespace cc - -#endif // CC_LAYERS_DELEGATED_RENDERER_LAYER_IMPL_H_
diff --git a/cc/layers/delegated_renderer_layer_impl_unittest.cc b/cc/layers/delegated_renderer_layer_impl_unittest.cc deleted file mode 100644 index b94dedf9..0000000 --- a/cc/layers/delegated_renderer_layer_impl_unittest.cc +++ /dev/null
@@ -1,1687 +0,0 @@ -// Copyright 2012 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 "cc/layers/delegated_renderer_layer_impl.h" - -#include <stddef.h> - -#include "cc/layers/solid_color_layer_impl.h" -#include "cc/quads/render_pass_draw_quad.h" -#include "cc/quads/solid_color_draw_quad.h" -#include "cc/test/fake_delegated_renderer_layer_impl.h" -#include "cc/test/fake_impl_task_runner_provider.h" -#include "cc/test/fake_layer_tree_host_impl.h" -#include "cc/test/fake_layer_tree_host_impl_client.h" -#include "cc/test/fake_output_surface.h" -#include "cc/test/geometry_test_utils.h" -#include "cc/test/layer_test_common.h" -#include "cc/test/render_pass_test_utils.h" -#include "cc/test/test_shared_bitmap_manager.h" -#include "cc/test/test_task_graph_runner.h" -#include "cc/test/test_web_graphics_context_3d.h" -#include "cc/trees/layer_tree_host_impl.h" -#include "cc/trees/layer_tree_impl.h" -#include "cc/trees/single_thread_proxy.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "ui/gfx/transform.h" - -namespace cc { -namespace { - -class DelegatedRendererLayerImplTest : public testing::Test { - public: - DelegatedRendererLayerImplTest() - : task_runner_provider_(), - always_impl_thread_and_main_thread_blocked_(&task_runner_provider_), - output_surface_(FakeOutputSurface::Create3d()) { - LayerTreeSettings settings; - settings.minimum_occlusion_tracking_size = gfx::Size(); - settings.verify_property_trees = true; - - host_impl_.reset(new FakeLayerTreeHostImpl(settings, &task_runner_provider_, - &shared_bitmap_manager_, - &task_graph_runner_)); - host_impl_->SetVisible(true); - host_impl_->InitializeRenderer(output_surface_.get()); - host_impl_->SetViewportSize(gfx::Size(10, 10)); - } - - DrawResult PrepareToDrawFrame(LayerTreeHostImpl::FrameData* frame) { - host_impl_->active_tree()->BuildPropertyTreesForTesting(); - return host_impl_->PrepareToDraw(frame); - } - - protected: - FakeImplTaskRunnerProvider task_runner_provider_; - DebugScopedSetImplThreadAndMainThreadBlocked - always_impl_thread_and_main_thread_blocked_; - TestSharedBitmapManager shared_bitmap_manager_; - TestTaskGraphRunner task_graph_runner_; - scoped_ptr<OutputSurface> output_surface_; - scoped_ptr<LayerTreeHostImpl> host_impl_; -}; - -class DelegatedRendererLayerImplTestSimple - : public DelegatedRendererLayerImplTest { - public: - DelegatedRendererLayerImplTestSimple() - : DelegatedRendererLayerImplTest() { - scoped_ptr<LayerImpl> root_layer = - SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); - scoped_ptr<LayerImpl> layer_before = - SolidColorLayerImpl::Create(host_impl_->active_tree(), 2); - scoped_ptr<LayerImpl> layer_after = - SolidColorLayerImpl::Create(host_impl_->active_tree(), 3); - scoped_ptr<FakeDelegatedRendererLayerImpl> delegated_renderer_layer = - FakeDelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 4); - - host_impl_->SetViewportSize(gfx::Size(100, 100)); - root_layer->SetBounds(gfx::Size(100, 100)); - root_layer->SetForceRenderSurface(true); - - layer_before->SetPosition(gfx::PointF(20.f, 20.f)); - layer_before->SetBounds(gfx::Size(14, 14)); - layer_before->SetDrawsContent(true); - layer_before->SetForceRenderSurface(true); - - layer_after->SetPosition(gfx::PointF(5.f, 5.f)); - layer_after->SetBounds(gfx::Size(15, 15)); - layer_after->SetDrawsContent(true); - layer_after->SetForceRenderSurface(true); - - delegated_renderer_layer->SetPosition(gfx::PointF(3.f, 3.f)); - delegated_renderer_layer->SetBounds(gfx::Size(10, 10)); - delegated_renderer_layer->SetDrawsContent(true); - gfx::Transform transform; - transform.Translate(1.0, 1.0); - delegated_renderer_layer->SetTransform(transform); - - RenderPassList delegated_render_passes; - RenderPass* pass1 = - AddRenderPass(&delegated_render_passes, RenderPassId(9, 6), - gfx::Rect(6, 6, 6, 6), gfx::Transform(1, 0, 0, 1, 5, 6)); - AddQuad(pass1, gfx::Rect(0, 0, 6, 6), 33u); - RenderPass* pass2 = - AddRenderPass(&delegated_render_passes, RenderPassId(9, 7), - gfx::Rect(7, 7, 7, 7), gfx::Transform(1, 0, 0, 1, 7, 8)); - AddQuad(pass2, gfx::Rect(0, 0, 7, 7), 22u); - AddRenderPassQuad(pass2, pass1); - RenderPass* pass3 = - AddRenderPass(&delegated_render_passes, RenderPassId(9, 8), - gfx::Rect(0, 0, 8, 8), gfx::Transform(1, 0, 0, 1, 9, 10)); - AddRenderPassQuad(pass3, pass2); - delegated_renderer_layer->SetFrameDataForRenderPasses( - 1.f, delegated_render_passes); - - root_layer_ = root_layer.get(); - layer_before_ = layer_before.get(); - layer_after_ = layer_after.get(); - delegated_renderer_layer_ = delegated_renderer_layer.get(); - - // Force the delegated RenderPasses to come before the RenderPass from - // layer_after. - layer_after->AddChild(std::move(delegated_renderer_layer)); - root_layer->AddChild(std::move(layer_after)); - - // Get the RenderPass generated by layer_before to come before the delegated - // RenderPasses. - root_layer->AddChild(std::move(layer_before)); - host_impl_->active_tree()->SetRootLayer(std::move(root_layer)); - } - - protected: - LayerImpl* root_layer_; - LayerImpl* layer_before_; - LayerImpl* layer_after_; - DelegatedRendererLayerImpl* delegated_renderer_layer_; -}; - -TEST_F(DelegatedRendererLayerImplTest, - ChangeContributingRenderPassForNewFrame) { - FakeDelegatedRendererLayerImpl* fake_delegated_renderer_layer_impl; - { - scoped_ptr<LayerImpl> root_layer = - SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); - scoped_ptr<FakeDelegatedRendererLayerImpl> delegated_renderer_layer = - FakeDelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 2); - - host_impl_->SetViewportSize(gfx::Size(100, 100)); - root_layer->SetBounds(gfx::Size(100, 100)); - root_layer->SetForceRenderSurface(true); - - delegated_renderer_layer->SetPosition(gfx::PointF(3.f, 3.f)); - delegated_renderer_layer->SetBounds(gfx::Size(10, 10)); - delegated_renderer_layer->SetDrawsContent(true); - delegated_renderer_layer->SetForceRenderSurface(true); - gfx::Transform transform; - transform.Translate(1.0, 1.0); - delegated_renderer_layer->SetTransform(transform); - - RenderPassList delegated_render_passes; - RenderPass* pass1 = - AddRenderPass(&delegated_render_passes, RenderPassId(9, 6), - gfx::Rect(6, 6, 6, 6), gfx::Transform(1, 0, 0, 1, 5, 6)); - AddQuad(pass1, gfx::Rect(0, 0, 6, 6), 33u); - RenderPass* pass2 = - AddRenderPass(&delegated_render_passes, RenderPassId(9, 7), - gfx::Rect(7, 7, 7, 7), gfx::Transform(1, 0, 0, 1, 7, 8)); - AddQuad(pass2, gfx::Rect(0, 0, 7, 7), 22u); - AddRenderPassQuad(pass2, pass1); - RenderPass* pass3 = - AddRenderPass(&delegated_render_passes, RenderPassId(9, 8), - gfx::Rect(0, 0, 8, 8), gfx::Transform(1, 0, 0, 1, 9, 10)); - AddRenderPassQuad(pass3, pass2); - delegated_renderer_layer->SetFrameDataForRenderPasses( - 1.f, delegated_render_passes); - - fake_delegated_renderer_layer_impl = delegated_renderer_layer.get(); - - root_layer->AddChild(std::move(delegated_renderer_layer)); - - host_impl_->active_tree()->SetRootLayer(std::move(root_layer)); - - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - // Root layer has one render pass, and delegated renderer layer has two - // contributing render passes and its own render pass. - ASSERT_EQ(4u, frame.render_passes.size()); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); - } - { - // New frame makes delegated renderer layer loses its contributing render - // passes. - RenderPassList delegated_render_passes; - AddRenderPass(&delegated_render_passes, RenderPassId(9, 8), - gfx::Rect(0, 0, 8, 8), gfx::Transform(1, 0, 0, 1, 9, 10)); - fake_delegated_renderer_layer_impl->SetFrameDataForRenderPasses( - 1.f, delegated_render_passes); - - // Force damage to redraw a new frame. - host_impl_->SetViewportDamage(gfx::Rect(10, 10)); - - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - // Each non-DelegatedRendererLayer added one RenderPass. The - // DelegatedRendererLayer added two contributing passes. - ASSERT_EQ(1u, frame.render_passes.size()); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); - } -} - -TEST_F(DelegatedRendererLayerImplTest, - ChangeContributingRenderPassNonFullTreeSync) { - FakeDelegatedRendererLayerImpl* fake_delegated_renderer_layer_impl; - { - host_impl_->CreatePendingTree(); - scoped_ptr<LayerImpl> root_layer = - SolidColorLayerImpl::Create(host_impl_->pending_tree(), 1); - scoped_ptr<FakeDelegatedRendererLayerImpl> delegated_renderer_layer = - FakeDelegatedRendererLayerImpl::Create(host_impl_->pending_tree(), 2); - - host_impl_->SetViewportSize(gfx::Size(100, 100)); - root_layer->SetBounds(gfx::Size(100, 100)); - root_layer->SetForceRenderSurface(true); - - delegated_renderer_layer->SetPosition(gfx::PointF(3.f, 3.f)); - delegated_renderer_layer->SetBounds(gfx::Size(10, 10)); - delegated_renderer_layer->SetDrawsContent(true); - delegated_renderer_layer->SetForceRenderSurface(true); - gfx::Transform transform; - transform.Translate(1.0, 1.0); - delegated_renderer_layer->SetTransform(transform); - - RenderPassList delegated_render_passes; - RenderPass* pass1 = - AddRenderPass(&delegated_render_passes, RenderPassId(9, 6), - gfx::Rect(6, 6, 6, 6), gfx::Transform(1, 0, 0, 1, 5, 6)); - AddQuad(pass1, gfx::Rect(0, 0, 6, 6), 33u); - RenderPass* pass2 = - AddRenderPass(&delegated_render_passes, RenderPassId(9, 7), - gfx::Rect(7, 7, 7, 7), gfx::Transform(1, 0, 0, 1, 7, 8)); - AddQuad(pass2, gfx::Rect(0, 0, 7, 7), 22u); - AddRenderPassQuad(pass2, pass1); - RenderPass* pass3 = - AddRenderPass(&delegated_render_passes, RenderPassId(9, 8), - gfx::Rect(0, 0, 8, 8), gfx::Transform(1, 0, 0, 1, 9, 10)); - AddRenderPassQuad(pass3, pass2); - delegated_renderer_layer->SetFrameDataForRenderPasses( - 1.f, delegated_render_passes); - - fake_delegated_renderer_layer_impl = delegated_renderer_layer.get(); - - root_layer->AddChild(std::move(delegated_renderer_layer)); - - host_impl_->pending_tree()->SetRootLayer(std::move(root_layer)); - host_impl_->ActivateSyncTree(); - - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - // Root layer has one render pass, and delegated renderer layer has two - // contributing render passes and its own render pass. - ASSERT_EQ(4u, frame.render_passes.size()); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); - } - { - // Remove contributing render passes from the delegated renderer layer. - host_impl_->CreatePendingTree(); - host_impl_->pending_tree()->set_needs_full_tree_sync(false); - RenderPassList delegated_render_passes; - AddRenderPass(&delegated_render_passes, RenderPassId(9, 8), - gfx::Rect(0, 0, 8, 8), gfx::Transform(1, 0, 0, 1, 9, 10)); - - fake_delegated_renderer_layer_impl->SetFrameDataForRenderPasses( - 1.f, delegated_render_passes); - - // Force damage to redraw a new frame. - - host_impl_->ActivateSyncTree(); - host_impl_->SetViewportDamage(gfx::Rect(100, 100)); - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - // Root layer has one render pass, and delegated renderer layer no longer - // has contributing render passes. - ASSERT_EQ(1u, frame.render_passes.size()); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); - } -} - -TEST_F(DelegatedRendererLayerImplTestSimple, AddsContributingRenderPasses) { - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - // Each non-DelegatedRendererLayer added one RenderPass. The - // DelegatedRendererLayer added two contributing passes. - ASSERT_EQ(5u, frame.render_passes.size()); - - // The DelegatedRendererLayer should have added its contributing RenderPasses - // to the frame. - EXPECT_EQ(4, frame.render_passes[1]->id.layer_id); - EXPECT_EQ(1u, frame.render_passes[1]->id.index); - EXPECT_EQ(4, frame.render_passes[2]->id.layer_id); - EXPECT_EQ(2u, frame.render_passes[2]->id.index); - // And all other RenderPasses should be non-delegated. - EXPECT_NE(4, frame.render_passes[0]->id.layer_id); - EXPECT_EQ(0u, frame.render_passes[0]->id.index); - EXPECT_NE(4, frame.render_passes[3]->id.layer_id); - EXPECT_EQ(0u, frame.render_passes[3]->id.index); - EXPECT_NE(4, frame.render_passes[4]->id.layer_id); - EXPECT_EQ(0u, frame.render_passes[4]->id.index); - - // The DelegatedRendererLayer should have added its RenderPasses to the frame - // in order. - EXPECT_EQ(gfx::Rect(6, 6, 6, 6).ToString(), - frame.render_passes[1]->output_rect.ToString()); - EXPECT_EQ(gfx::Rect(7, 7, 7, 7).ToString(), - frame.render_passes[2]->output_rect.ToString()); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -TEST_F(DelegatedRendererLayerImplTestSimple, - AddsQuadsToContributingRenderPasses) { - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - // Each non-DelegatedRendererLayer added one RenderPass. The - // DelegatedRendererLayer added two contributing passes. - ASSERT_EQ(5u, frame.render_passes.size()); - - // The DelegatedRendererLayer should have added its contributing RenderPasses - // to the frame. - EXPECT_EQ(4, frame.render_passes[1]->id.layer_id); - EXPECT_EQ(1u, frame.render_passes[1]->id.index); - EXPECT_EQ(4, frame.render_passes[2]->id.layer_id); - EXPECT_EQ(2u, frame.render_passes[2]->id.index); - - // The DelegatedRendererLayer should have added copies of its quads to - // contributing RenderPasses. - ASSERT_EQ(1u, frame.render_passes[1]->quad_list.size()); - EXPECT_EQ(gfx::Rect(0, 0, 6, 6).ToString(), - frame.render_passes[1]->quad_list.front()->rect.ToString()); - - // Verify it added the right quads. - ASSERT_EQ(2u, frame.render_passes[2]->quad_list.size()); - EXPECT_EQ(gfx::Rect(0, 0, 7, 7).ToString(), - frame.render_passes[2]->quad_list.front()->rect.ToString()); - EXPECT_EQ(gfx::Rect(6, 6, 6, 6).ToString(), - frame.render_passes[2]->quad_list.ElementAt(1)->rect.ToString()); - ASSERT_EQ(1u, frame.render_passes[1]->quad_list.size()); - EXPECT_EQ(gfx::Rect(0, 0, 6, 6).ToString(), - frame.render_passes[1]->quad_list.front()->rect.ToString()); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -TEST_F(DelegatedRendererLayerImplTestSimple, AddsQuadsToTargetRenderPass) { - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - // Each non-DelegatedRendererLayer added one RenderPass. The - // DelegatedRendererLayer added two contributing passes. - ASSERT_EQ(5u, frame.render_passes.size()); - - // The layer's target is the RenderPass from layer_after_. - EXPECT_EQ(RenderPassId(3, 0), frame.render_passes[3]->id); - - // The DelegatedRendererLayer should have added copies of quads in its root - // RenderPass to its target RenderPass. The layer_after_ also adds one quad. - ASSERT_EQ(2u, frame.render_passes[3]->quad_list.size()); - - // Verify it added the right quads. - EXPECT_EQ(gfx::Rect(7, 7, 7, 7).ToString(), - frame.render_passes[3]->quad_list.front()->rect.ToString()); - - // Its target layer should have a quad as well. - EXPECT_EQ(gfx::Rect(0, 0, 15, 15).ToString(), - frame.render_passes[3]->quad_list.ElementAt(1)->rect.ToString()); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -TEST_F(DelegatedRendererLayerImplTestSimple, - QuadsFromRootRenderPassAreModifiedForTheTarget) { - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - // Each non-DelegatedRendererLayer added one RenderPass. The - // DelegatedRendererLayer added two contributing passes. - ASSERT_EQ(5u, frame.render_passes.size()); - - // The DelegatedRendererLayer is at position 3,3 compared to its target, and - // has a translation transform of 1,1. So its root RenderPass' quads should - // all be transformed by that combined amount. - gfx::Transform transform; - transform.Translate(4.0, 4.0); - EXPECT_TRANSFORMATION_MATRIX_EQ( - transform, frame.render_passes[3] - ->quad_list.front() - ->shared_quad_state->quad_to_target_transform); - - // Quads from non-root RenderPasses should not be shifted though. - ASSERT_EQ(2u, frame.render_passes[2]->quad_list.size()); - - EXPECT_TRANSFORMATION_MATRIX_EQ( - gfx::Transform(), frame.render_passes[2] - ->quad_list.front() - ->shared_quad_state->quad_to_target_transform); - EXPECT_TRANSFORMATION_MATRIX_EQ( - gfx::Transform(), frame.render_passes[2] - ->quad_list.ElementAt(1) - ->shared_quad_state->quad_to_target_transform); - ASSERT_EQ(1u, frame.render_passes[1]->quad_list.size()); - EXPECT_TRANSFORMATION_MATRIX_EQ( - gfx::Transform(), frame.render_passes[1] - ->quad_list.front() - ->shared_quad_state->quad_to_target_transform); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -TEST_F(DelegatedRendererLayerImplTestSimple, RenderPassTransformIsModified) { - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - // The delegated layer has a surface between it and the root. - EXPECT_TRUE(delegated_renderer_layer_->render_target()->parent()); - - // Each non-DelegatedRendererLayer added one RenderPass. The - // DelegatedRendererLayer added two contributing passes. - ASSERT_EQ(5u, frame.render_passes.size()); - - // The DelegatedRendererLayer is at position 9,9 compared to the root, so all - // render pass' transforms to the root should be shifted by this amount. - gfx::Transform transform; - transform.Translate(9.0, 9.0); - - // The first contributing surface has a translation of 5, 6. - gfx::Transform five_six(1, 0, 0, 1, 5, 6); - - // The second contributing surface has a translation of 7, 8. - gfx::Transform seven_eight(1, 0, 0, 1, 7, 8); - - EXPECT_TRANSFORMATION_MATRIX_EQ( - transform * five_six, frame.render_passes[1]->transform_to_root_target); - EXPECT_TRANSFORMATION_MATRIX_EQ( - transform * seven_eight, - frame.render_passes[2]->transform_to_root_target); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -class DelegatedRendererLayerImplTestOwnSurface - : public DelegatedRendererLayerImplTestSimple { - public: - DelegatedRendererLayerImplTestOwnSurface() - : DelegatedRendererLayerImplTestSimple() { - delegated_renderer_layer_->SetForceRenderSurface(true); - } -}; - -TEST_F(DelegatedRendererLayerImplTestOwnSurface, AddsRenderPasses) { - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - // Each non-DelegatedRendererLayer added one RenderPass. The - // DelegatedRendererLayer added two contributing passes and its owned surface - // added one pass. - ASSERT_EQ(6u, frame.render_passes.size()); - - // The DelegatedRendererLayer should have added its contributing RenderPasses - // to the frame. - EXPECT_EQ(4, frame.render_passes[1]->id.layer_id); - EXPECT_EQ(1u, frame.render_passes[1]->id.index); - EXPECT_EQ(4, frame.render_passes[2]->id.layer_id); - EXPECT_EQ(2u, frame.render_passes[2]->id.index); - // The DelegatedRendererLayer should have added a RenderPass for its surface - // to the frame. - EXPECT_EQ(4, frame.render_passes[1]->id.layer_id); - EXPECT_EQ(0u, frame.render_passes[3]->id.index); - // And all other RenderPasses should be non-delegated. - EXPECT_NE(4, frame.render_passes[0]->id.layer_id); - EXPECT_EQ(0u, frame.render_passes[0]->id.index); - EXPECT_NE(4, frame.render_passes[4]->id.layer_id); - EXPECT_EQ(0u, frame.render_passes[4]->id.index); - EXPECT_NE(4, frame.render_passes[5]->id.layer_id); - EXPECT_EQ(0u, frame.render_passes[5]->id.index); - - // The DelegatedRendererLayer should have added its RenderPasses to the frame - // in order. - EXPECT_EQ(gfx::Rect(6, 6, 6, 6).ToString(), - frame.render_passes[1]->output_rect.ToString()); - EXPECT_EQ(gfx::Rect(7, 7, 7, 7).ToString(), - frame.render_passes[2]->output_rect.ToString()); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -TEST_F(DelegatedRendererLayerImplTestOwnSurface, - AddsQuadsToContributingRenderPasses) { - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - // Each non-DelegatedRendererLayer added one RenderPass. The - // DelegatedRendererLayer added two contributing passes and its owned surface - // added one pass. - ASSERT_EQ(6u, frame.render_passes.size()); - - // The DelegatedRendererLayer should have added its contributing RenderPasses - // to the frame. - EXPECT_EQ(4, frame.render_passes[1]->id.layer_id); - EXPECT_EQ(1u, frame.render_passes[1]->id.index); - EXPECT_EQ(4, frame.render_passes[2]->id.layer_id); - EXPECT_EQ(2u, frame.render_passes[2]->id.index); - - // The DelegatedRendererLayer should have added copies of its quads to - // contributing RenderPasses. - ASSERT_EQ(1u, frame.render_passes[1]->quad_list.size()); - EXPECT_EQ(gfx::Rect(0, 0, 6, 6).ToString(), - frame.render_passes[1]->quad_list.front()->rect.ToString()); - - // Verify it added the right quads. - ASSERT_EQ(2u, frame.render_passes[2]->quad_list.size()); - - EXPECT_EQ(gfx::Rect(0, 0, 7, 7).ToString(), - frame.render_passes[2]->quad_list.front()->rect.ToString()); - EXPECT_EQ(gfx::Rect(6, 6, 6, 6).ToString(), - frame.render_passes[2]->quad_list.ElementAt(1)->rect.ToString()); - ASSERT_EQ(1u, frame.render_passes[1]->quad_list.size()); - EXPECT_EQ(gfx::Rect(0, 0, 6, 6).ToString(), - frame.render_passes[1]->quad_list.front()->rect.ToString()); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -TEST_F(DelegatedRendererLayerImplTestOwnSurface, AddsQuadsToTargetRenderPass) { - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - // Each non-DelegatedRendererLayer added one RenderPass. The - // DelegatedRendererLayer added two contributing passes and its owned surface - // added one pass. - ASSERT_EQ(6u, frame.render_passes.size()); - - // The layer's target is the RenderPass owned by itself. - EXPECT_EQ(RenderPassId(4, 0), frame.render_passes[3]->id); - - // The DelegatedRendererLayer should have added copies of quads in its root - // RenderPass to its target RenderPass. - // The layer_after also adds one quad. - ASSERT_EQ(1u, frame.render_passes[3]->quad_list.size()); - - // Verify it added the right quads. - EXPECT_EQ(gfx::Rect(7, 7, 7, 7).ToString(), - frame.render_passes[3]->quad_list.front()->rect.ToString()); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -TEST_F(DelegatedRendererLayerImplTestOwnSurface, - QuadsFromRootRenderPassAreNotModifiedForTheTarget) { - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - // Each non-DelegatedRendererLayer added one RenderPass. The - // DelegatedRendererLayer added two contributing passes and its owned surface - // added one pass. - ASSERT_EQ(6u, frame.render_passes.size()); - - // Because the DelegatedRendererLayer owns a RenderSurfaceImpl, its root - // RenderPass' quads do not need to be translated at all. - EXPECT_TRANSFORMATION_MATRIX_EQ( - gfx::Transform(), frame.render_passes[3] - ->quad_list.front() - ->shared_quad_state->quad_to_target_transform); - - // Quads from non-root RenderPasses should not be shifted either. - ASSERT_EQ(2u, frame.render_passes[2]->quad_list.size()); - - EXPECT_TRANSFORMATION_MATRIX_EQ( - gfx::Transform(), frame.render_passes[2] - ->quad_list.front() - ->shared_quad_state->quad_to_target_transform); - EXPECT_TRANSFORMATION_MATRIX_EQ( - gfx::Transform(), frame.render_passes[2] - ->quad_list.ElementAt(1) - ->shared_quad_state->quad_to_target_transform); - ASSERT_EQ(1u, frame.render_passes[1]->quad_list.size()); - EXPECT_TRANSFORMATION_MATRIX_EQ( - gfx::Transform(), frame.render_passes[1] - ->quad_list.front() - ->shared_quad_state->quad_to_target_transform); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -class DelegatedRendererLayerImplTestTransform - : public DelegatedRendererLayerImplTest { - public: - DelegatedRendererLayerImplTestTransform() - : root_delegated_render_pass_is_clipped_(false), - delegated_device_scale_factor_(2.f) {} - - void SetUpTest() { - host_impl_->active_tree()->SetDeviceScaleFactor(2.f); - - scoped_ptr<LayerImpl> root_layer = LayerImpl::Create( - host_impl_->active_tree(), 1); - scoped_ptr<FakeDelegatedRendererLayerImpl> delegated_renderer_layer = - FakeDelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 2); - - host_impl_->SetViewportSize(gfx::Size(200, 200)); - root_layer->SetBounds(gfx::Size(100, 100)); - root_layer->SetForceRenderSurface(true); - - delegated_renderer_layer->SetPosition(gfx::PointF(20.f, 20.f)); - delegated_renderer_layer->SetBounds(gfx::Size(75, 75)); - delegated_renderer_layer->SetDrawsContent(true); - gfx::Transform transform; - transform.Scale(2.0, 2.0); - transform.Translate(8.0, 8.0); - delegated_renderer_layer->SetTransform(transform); - - RenderPassList delegated_render_passes; - - gfx::Size child_pass_bounds(7, 7); - gfx::Rect child_pass_rect(20, 20, 7, 7); - gfx::Transform child_pass_transform; - child_pass_transform.Scale(0.8f, 0.8f); - child_pass_transform.Translate(9.0, 9.0); - gfx::Rect child_pass_clip_rect(21, 21, 3, 3); - bool child_pass_clipped = false; - - { - RenderPass* pass = - AddRenderPass(&delegated_render_passes, RenderPassId(10, 7), - child_pass_rect, gfx::Transform()); - SharedQuadState* shared_quad_state = - pass->CreateAndAppendSharedQuadState(); - shared_quad_state->SetAll(child_pass_transform, child_pass_bounds, - child_pass_rect, child_pass_clip_rect, - child_pass_clipped, 1.f, - SkXfermode::kSrcOver_Mode, 0); - - SolidColorDrawQuad* color_quad; - color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); - color_quad->SetNew(shared_quad_state, - gfx::Rect(20, 20, 3, 7), - gfx::Rect(20, 20, 3, 7), - 1u, - false); - - color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); - color_quad->SetNew(shared_quad_state, - gfx::Rect(23, 20, 4, 7), - gfx::Rect(23, 20, 4, 7), - 1u, - false); - } - - gfx::Size root_pass_bounds(100, 100); - gfx::Rect root_pass_rect(0, 0, 100, 100); - gfx::Transform root_pass_transform; - root_pass_transform.Scale(1.5, 1.5); - root_pass_transform.Translate(7.0, 7.0); - gfx::Rect root_pass_clip_rect(10, 10, 35, 35); - bool root_pass_clipped = root_delegated_render_pass_is_clipped_; - - RenderPass* pass = - AddRenderPass(&delegated_render_passes, RenderPassId(9, 6), - root_pass_rect, gfx::Transform()); - SharedQuadState* shared_quad_state = pass->CreateAndAppendSharedQuadState(); - shared_quad_state->SetAll(root_pass_transform, root_pass_bounds, - root_pass_rect, root_pass_clip_rect, - root_pass_clipped, 1.f, SkXfermode::kSrcOver_Mode, - 0); - - RenderPassDrawQuad* render_pass_quad = - pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); - render_pass_quad->SetNew(shared_quad_state, - gfx::Rect(5, 5, 7, 7), // quad_rect - gfx::Rect(5, 5, 7, 7), // visible_rect - RenderPassId(10, 7), // render_pass_id - 0, // mask_resource_id - gfx::Vector2dF(), // mask_uv_scale - gfx::Size(), // mask_texture_size - FilterOperations(), // filters - gfx::Vector2dF(), // filters_scale - FilterOperations()); // background_filters - - SolidColorDrawQuad* color_quad; - color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); - color_quad->SetNew(shared_quad_state, - gfx::Rect(0, 0, 10, 10), - gfx::Rect(0, 0, 10, 10), - 1u, - false); - - color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); - color_quad->SetNew(shared_quad_state, - gfx::Rect(0, 10, 10, 10), - gfx::Rect(0, 10, 10, 10), - 2u, - false); - - color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); - color_quad->SetNew(shared_quad_state, - gfx::Rect(10, 0, 10, 10), - gfx::Rect(10, 0, 10, 10), - 3u, - false); - - color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); - color_quad->SetNew(shared_quad_state, - gfx::Rect(10, 10, 10, 10), - gfx::Rect(10, 10, 10, 10), - 4u, - false); - - delegated_renderer_layer->SetFrameDataForRenderPasses( - delegated_device_scale_factor_, delegated_render_passes); - - root_layer_ = root_layer.get(); - delegated_renderer_layer_ = delegated_renderer_layer.get(); - - root_layer->AddChild(std::move(delegated_renderer_layer)); - host_impl_->active_tree()->SetRootLayer(std::move(root_layer)); - } - - void VerifyRenderPasses( - const LayerTreeHostImpl::FrameData& frame, - size_t num_render_passes, - const SharedQuadState** root_delegated_shared_quad_state, - const SharedQuadState** contrib_delegated_shared_quad_state) { - ASSERT_EQ(num_render_passes, frame.render_passes.size()); - // The contributing render pass in the DelegatedRendererLayer. - EXPECT_EQ(2, frame.render_passes[0]->id.layer_id); - EXPECT_EQ(1u, frame.render_passes[0]->id.index); - // The root render pass. - EXPECT_EQ(1, frame.render_passes.back()->id.layer_id); - EXPECT_EQ(0u, frame.render_passes.back()->id.index); - - const QuadList& contrib_delegated_quad_list = - frame.render_passes[0]->quad_list; - ASSERT_EQ(2u, contrib_delegated_quad_list.size()); - - const QuadList& root_delegated_quad_list = - frame.render_passes[1]->quad_list; - ASSERT_EQ(5u, root_delegated_quad_list.size()); - - // All quads in a render pass should share the same state. - *contrib_delegated_shared_quad_state = - contrib_delegated_quad_list.front()->shared_quad_state; - EXPECT_EQ(*contrib_delegated_shared_quad_state, - contrib_delegated_quad_list.ElementAt(1)->shared_quad_state); - - *root_delegated_shared_quad_state = - root_delegated_quad_list.front()->shared_quad_state; - EXPECT_EQ(*root_delegated_shared_quad_state, - root_delegated_quad_list.ElementAt(1)->shared_quad_state); - EXPECT_EQ(*root_delegated_shared_quad_state, - root_delegated_quad_list.ElementAt(2)->shared_quad_state); - EXPECT_EQ(*root_delegated_shared_quad_state, - root_delegated_quad_list.ElementAt(3)->shared_quad_state); - EXPECT_EQ(*root_delegated_shared_quad_state, - root_delegated_quad_list.ElementAt(4)->shared_quad_state); - - EXPECT_NE(*contrib_delegated_shared_quad_state, - *root_delegated_shared_quad_state); - } - - protected: - LayerImpl* root_layer_; - DelegatedRendererLayerImpl* delegated_renderer_layer_; - bool root_delegated_render_pass_is_clipped_; - float delegated_device_scale_factor_; -}; - -TEST_F(DelegatedRendererLayerImplTestTransform, QuadsUnclipped_NoSurface) { - root_delegated_render_pass_is_clipped_ = false; - SetUpTest(); - - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - const SharedQuadState* root_delegated_shared_quad_state = nullptr; - const SharedQuadState* contrib_delegated_shared_quad_state = nullptr; - VerifyRenderPasses( - frame, - 2, - &root_delegated_shared_quad_state, - &contrib_delegated_shared_quad_state); - - // When the quads don't have a clip of their own, the clip rect is set to - // the drawable_content_rect of the delegated renderer layer. - EXPECT_EQ(delegated_renderer_layer_->drawable_content_rect().ToString(), - root_delegated_shared_quad_state->clip_rect.ToString()); - - // Even though the quads in the root pass have no clip of their own, they - // inherit the clip rect from the delegated renderer layer if it does not - // own a surface. - EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped); - - gfx::Transform expected; - // Device scale factor. - expected.Scale(2.0, 2.0); - // This is the transform from the layer's space to its target. - expected.Translate(20, 20); - expected.Scale(2.0, 2.0); - expected.Translate(8.0, 8.0); - // This is the transform within the source frame. - // Inverse device scale factor to go from physical space to layer space. - expected.Scale(0.5, 0.5); - expected.Scale(1.5, 1.5); - expected.Translate(7.0, 7.0); - EXPECT_TRANSFORMATION_MATRIX_EQ( - expected, root_delegated_shared_quad_state->quad_to_target_transform); - - // The contributing render pass should not be transformed from its input. - EXPECT_EQ(gfx::Rect(21, 21, 3, 3).ToString(), - contrib_delegated_shared_quad_state->clip_rect.ToString()); - EXPECT_FALSE(contrib_delegated_shared_quad_state->is_clipped); - expected.MakeIdentity(); - expected.Scale(0.8f, 0.8f); - expected.Translate(9.0, 9.0); - EXPECT_TRANSFORMATION_MATRIX_EQ( - expected, contrib_delegated_shared_quad_state->quad_to_target_transform); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -TEST_F(DelegatedRendererLayerImplTestTransform, QuadsClipped_NoSurface) { - root_delegated_render_pass_is_clipped_ = true; - SetUpTest(); - - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - const SharedQuadState* root_delegated_shared_quad_state = nullptr; - const SharedQuadState* contrib_delegated_shared_quad_state = nullptr; - VerifyRenderPasses( - frame, - 2, - &root_delegated_shared_quad_state, - &contrib_delegated_shared_quad_state); - - // Since the quads have a clip_rect it should be modified by delegated - // renderer layer's draw_transform. - // The position of the resulting clip_rect is: - // (clip rect position (10) * inverse dsf (1/2) + translate (8)) * - // layer scale (2) + layer position (20) = 46 - // The device scale is 2, so everything gets doubled, giving 92. - // - // The size is 35x35 scaled by the device scale. - EXPECT_EQ(gfx::Rect(92, 92, 70, 70).ToString(), - root_delegated_shared_quad_state->clip_rect.ToString()); - - // The quads had a clip and it should be preserved. - EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped); - - gfx::Transform expected; - // Device scale factor. - expected.Scale(2.0, 2.0); - // This is the transform from the layer's space to its target. - expected.Translate(20, 20); - expected.Scale(2.0, 2.0); - expected.Translate(8.0, 8.0); - // This is the transform within the source frame. - // Inverse device scale factor to go from physical space to layer space. - expected.Scale(0.5, 0.5); - expected.Scale(1.5, 1.5); - expected.Translate(7.0, 7.0); - EXPECT_TRANSFORMATION_MATRIX_EQ( - expected, root_delegated_shared_quad_state->quad_to_target_transform); - - // The contributing render pass should not be transformed from its input. - EXPECT_EQ(gfx::Rect(21, 21, 3, 3).ToString(), - contrib_delegated_shared_quad_state->clip_rect.ToString()); - EXPECT_FALSE(contrib_delegated_shared_quad_state->is_clipped); - expected.MakeIdentity(); - expected.Scale(0.8f, 0.8f); - expected.Translate(9.0, 9.0); - EXPECT_TRANSFORMATION_MATRIX_EQ( - expected, contrib_delegated_shared_quad_state->quad_to_target_transform); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -TEST_F(DelegatedRendererLayerImplTestTransform, QuadsUnclipped_Surface) { - root_delegated_render_pass_is_clipped_ = false; - SetUpTest(); - - delegated_renderer_layer_->SetForceRenderSurface(true); - - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - const SharedQuadState* root_delegated_shared_quad_state = nullptr; - const SharedQuadState* contrib_delegated_shared_quad_state = nullptr; - VerifyRenderPasses( - frame, - 3, - &root_delegated_shared_quad_state, - &contrib_delegated_shared_quad_state); - - // When the layer owns a surface, then its translation is not part of its - // draw transform, but its scale is. - EXPECT_EQ(gfx::Rect(20, 20, 70, 70).ToString(), - root_delegated_shared_quad_state->clip_rect.ToString()); - - // Since the layer owns a surface it doesn't need to clip its quads, so - // unclipped quads remain unclipped. - EXPECT_FALSE(root_delegated_shared_quad_state->is_clipped); - - gfx::Transform expected; - // This is the transform within the source frame scaled by the delegated - // render layer transform. - expected.Scale(3.0, 3.0); - expected.Translate(7.0, 7.0); - EXPECT_TRANSFORMATION_MATRIX_EQ( - expected, root_delegated_shared_quad_state->quad_to_target_transform); - - // The contributing render pass should not be transformed from its input. - EXPECT_EQ(gfx::Rect(21, 21, 3, 3).ToString(), - contrib_delegated_shared_quad_state->clip_rect.ToString()); - EXPECT_FALSE(contrib_delegated_shared_quad_state->is_clipped); - expected.MakeIdentity(); - expected.Scale(0.8f, 0.8f); - expected.Translate(9.0, 9.0); - EXPECT_TRANSFORMATION_MATRIX_EQ( - expected, contrib_delegated_shared_quad_state->quad_to_target_transform); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -TEST_F(DelegatedRendererLayerImplTestTransform, QuadsClipped_Surface) { - root_delegated_render_pass_is_clipped_ = true; - SetUpTest(); - - delegated_renderer_layer_->SetForceRenderSurface(true); - - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - const SharedQuadState* root_delegated_shared_quad_state = nullptr; - const SharedQuadState* contrib_delegated_shared_quad_state = nullptr; - VerifyRenderPasses( - frame, - 3, - &root_delegated_shared_quad_state, - &contrib_delegated_shared_quad_state); - - // When the layer owns a surface, then its translation is not part of its - // draw transform, but its scale is. - EXPECT_EQ(gfx::Rect(20, 20, 70, 70).ToString(), - root_delegated_shared_quad_state->clip_rect.ToString()); - - // The quads had a clip and it should be preserved. - EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped); - - gfx::Transform expected; - // This is the transform within the source frame scaled by the delegated - // render layer transform. - expected.Scale(3.0, 3.0); - expected.Translate(7.0, 7.0); - EXPECT_TRANSFORMATION_MATRIX_EQ( - expected, root_delegated_shared_quad_state->quad_to_target_transform); - - // The contributing render pass should not be transformed from its input. - EXPECT_EQ(gfx::Rect(21, 21, 3, 3).ToString(), - contrib_delegated_shared_quad_state->clip_rect.ToString()); - EXPECT_FALSE(contrib_delegated_shared_quad_state->is_clipped); - expected.MakeIdentity(); - expected.Scale(0.8f, 0.8f); - expected.Translate(9.0, 9.0); - EXPECT_TRANSFORMATION_MATRIX_EQ( - expected, contrib_delegated_shared_quad_state->quad_to_target_transform); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -TEST_F(DelegatedRendererLayerImplTestTransform, MismatchedDeviceScaleFactor) { - root_delegated_render_pass_is_clipped_ = true; - delegated_device_scale_factor_ = 1.3f; - - SetUpTest(); - - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - const SharedQuadState* root_delegated_shared_quad_state = nullptr; - const SharedQuadState* contrib_delegated_shared_quad_state = nullptr; - VerifyRenderPasses(frame, - 2, - &root_delegated_shared_quad_state, - &contrib_delegated_shared_quad_state); - - // The parent tree's device scale factor is 2.0, but the child has submitted a - // frame with a device scale factor of 1.3. Absent any better option, the - // only thing we can do is scale from 1.3 -> 2.0. - - gfx::Transform expected; - // Device scale factor (from parent). - expected.Scale(2.0, 2.0); - // This is the transform from the layer's space to its target. - expected.Translate(20, 20); - expected.Scale(2.0, 2.0); - expected.Translate(8.0, 8.0); - // This is the transform within the source frame. - // Inverse device scale factor (from child). - expected.Scale(1.0f / 1.3f, 1.0f / 1.3f); - expected.Scale(1.5, 1.5); - expected.Translate(7.0, 7.0); - EXPECT_TRANSFORMATION_MATRIX_EQ( - expected, root_delegated_shared_quad_state->quad_to_target_transform); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -class DelegatedRendererLayerImplTestClip - : public DelegatedRendererLayerImplTest { - public: - void SetUpTest() { - scoped_ptr<LayerImpl> root_layer = - LayerImpl::Create(host_impl_->active_tree(), 1); - scoped_ptr<FakeDelegatedRendererLayerImpl> delegated_renderer_layer = - FakeDelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 2); - scoped_ptr<LayerImpl> clip_layer = - LayerImpl::Create(host_impl_->active_tree(), 3); - scoped_ptr<LayerImpl> origin_layer = - LayerImpl::Create(host_impl_->active_tree(), 4); - - host_impl_->SetViewportSize(gfx::Size(100, 100)); - root_layer->SetBounds(gfx::Size(100, 100)); - root_layer->SetForceRenderSurface(true); - - delegated_renderer_layer->SetPosition(gfx::PointF(20.f, 20.f)); - delegated_renderer_layer->SetBounds(gfx::Size(50, 50)); - delegated_renderer_layer->SetDrawsContent(true); - - RenderPassList delegated_render_passes; - - gfx::Size child_pass_bounds(7, 7); - gfx::Rect child_pass_rect(20, 20, 7, 7); - gfx::Transform child_pass_transform; - gfx::Rect child_pass_clip_rect(21, 21, 3, 3); - bool child_pass_clipped = false; - - { - RenderPass* pass = - AddRenderPass(&delegated_render_passes, RenderPassId(10, 7), - child_pass_rect, gfx::Transform()); - SharedQuadState* shared_quad_state = - pass->CreateAndAppendSharedQuadState(); - shared_quad_state->SetAll(child_pass_transform, child_pass_bounds, - child_pass_rect, child_pass_clip_rect, - child_pass_clipped, 1.f, - SkXfermode::kSrcOver_Mode, 0); - - SolidColorDrawQuad* color_quad; - color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); - color_quad->SetNew(shared_quad_state, - gfx::Rect(20, 20, 3, 7), - gfx::Rect(20, 20, 3, 7), - 1u, - false); - - color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); - color_quad->SetNew(shared_quad_state, - gfx::Rect(23, 20, 4, 7), - gfx::Rect(23, 20, 4, 7), - 1u, - false); - } - - gfx::Size root_pass_bounds(50, 50); - gfx::Rect root_pass_rect(0, 0, 50, 50); - gfx::Transform root_pass_transform; - gfx::Rect root_pass_clip_rect(5, 5, 40, 40); - bool root_pass_clipped = root_delegated_render_pass_is_clipped_; - - RenderPass* pass = - AddRenderPass(&delegated_render_passes, RenderPassId(9, 6), - root_pass_rect, gfx::Transform()); - SharedQuadState* shared_quad_state = pass->CreateAndAppendSharedQuadState(); - shared_quad_state->SetAll(root_pass_transform, root_pass_bounds, - root_pass_rect, root_pass_clip_rect, - root_pass_clipped, 1.f, SkXfermode::kSrcOver_Mode, - 0); - - RenderPassDrawQuad* render_pass_quad = - pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); - render_pass_quad->SetNew(shared_quad_state, - gfx::Rect(5, 5, 7, 7), // quad_rect - gfx::Rect(5, 5, 7, 7), // visible_quad_rect - RenderPassId(10, 7), // render_pass_id - 0, // mask_resource_id - gfx::Vector2dF(), // mask_uv_scale - gfx::Size(), // mask_texture_size, - FilterOperations(), // filters - gfx::Vector2dF(), // filters_scale - FilterOperations()); // background_filters - - SolidColorDrawQuad* color_quad; - color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); - color_quad->SetNew(shared_quad_state, - gfx::Rect(0, 0, 10, 10), - gfx::Rect(0, 0, 10, 10), - 1u, - false); - - color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); - color_quad->SetNew(shared_quad_state, - gfx::Rect(0, 10, 10, 10), - gfx::Rect(0, 10, 10, 10), - 2u, - false); - - color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); - color_quad->SetNew(shared_quad_state, - gfx::Rect(10, 0, 10, 10), - gfx::Rect(10, 0, 10, 10), - 3u, - false); - - color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); - color_quad->SetNew(shared_quad_state, - gfx::Rect(10, 10, 10, 10), - gfx::Rect(10, 10, 10, 10), - 4u, - false); - - delegated_renderer_layer->SetFrameDataForRenderPasses( - 1.f, delegated_render_passes); - - root_layer_ = root_layer.get(); - delegated_renderer_layer_ = delegated_renderer_layer.get(); - - if (clip_delegated_renderer_layer_) { - gfx::PointF clip_origin(21.f, 27.f); - gfx::Size clip_size(23, 21); - - clip_layer->SetPosition(clip_origin); - clip_layer->SetBounds(clip_size); - clip_layer->SetMasksToBounds(true); - - origin_layer->SetPosition( - gfx::PointF(-clip_origin.x(), -clip_origin.y())); - - origin_layer->AddChild(std::move(delegated_renderer_layer)); - clip_layer->AddChild(std::move(origin_layer)); - root_layer->AddChild(std::move(clip_layer)); - } else { - root_layer->AddChild(std::move(delegated_renderer_layer)); - } - - host_impl_->active_tree()->SetRootLayer(std::move(root_layer)); - } - - protected: - LayerImpl* root_layer_; - DelegatedRendererLayerImpl* delegated_renderer_layer_; - bool root_delegated_render_pass_is_clipped_; - bool clip_delegated_renderer_layer_; -}; - -TEST_F(DelegatedRendererLayerImplTestClip, - QuadsUnclipped_LayerUnclipped_NoSurface) { - root_delegated_render_pass_is_clipped_ = false; - clip_delegated_renderer_layer_ = false; - SetUpTest(); - - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - ASSERT_EQ(2u, frame.render_passes.size()); - const QuadList& contrib_delegated_quad_list = - frame.render_passes[0]->quad_list; - ASSERT_EQ(2u, contrib_delegated_quad_list.size()); - const QuadList& root_delegated_quad_list = frame.render_passes[1]->quad_list; - ASSERT_EQ(5u, root_delegated_quad_list.size()); - const SharedQuadState* root_delegated_shared_quad_state = - root_delegated_quad_list.front()->shared_quad_state; - - // When the quads don't have a clip of their own, the clip rect is set to - // the drawable_content_rect of the delegated renderer layer. - EXPECT_EQ(gfx::Rect(20, 20, 50, 50).ToString(), - root_delegated_shared_quad_state->clip_rect.ToString()); - // Quads are clipped to the delegated renderer layer. - EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -TEST_F(DelegatedRendererLayerImplTestClip, - QuadsClipped_LayerUnclipped_NoSurface) { - root_delegated_render_pass_is_clipped_ = true; - clip_delegated_renderer_layer_ = false; - SetUpTest(); - - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - ASSERT_EQ(2u, frame.render_passes.size()); - const QuadList& contrib_delegated_quad_list = - frame.render_passes[0]->quad_list; - ASSERT_EQ(2u, contrib_delegated_quad_list.size()); - const QuadList& root_delegated_quad_list = - frame.render_passes[1]->quad_list; - ASSERT_EQ(5u, root_delegated_quad_list.size()); - const SharedQuadState* root_delegated_shared_quad_state = - root_delegated_quad_list.front()->shared_quad_state; - - // When the quads have a clip of their own, it is used. - EXPECT_EQ(gfx::Rect(25, 25, 40, 40).ToString(), - root_delegated_shared_quad_state->clip_rect.ToString()); - // Quads came with a clip rect. - EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -TEST_F(DelegatedRendererLayerImplTestClip, - QuadsUnclipped_LayerClipped_NoSurface) { - root_delegated_render_pass_is_clipped_ = false; - clip_delegated_renderer_layer_ = true; - SetUpTest(); - - LayerTreeHostImpl::FrameData frame; - host_impl_->active_tree()->BuildPropertyTreesForTesting(); - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - ASSERT_EQ(2u, frame.render_passes.size()); - const QuadList& contrib_delegated_quad_list = - frame.render_passes[0]->quad_list; - ASSERT_EQ(2u, contrib_delegated_quad_list.size()); - const QuadList& root_delegated_quad_list = frame.render_passes[1]->quad_list; - ASSERT_EQ(5u, root_delegated_quad_list.size()); - const SharedQuadState* root_delegated_shared_quad_state = - root_delegated_quad_list.front()->shared_quad_state; - - // When the quads don't have a clip of their own, the clip rect is set to - // the drawable_content_rect of the delegated renderer layer. When the layer - // is clipped, that should be seen in the quads' clip_rect. - EXPECT_EQ(gfx::Rect(21, 27, 23, 21).ToString(), - root_delegated_shared_quad_state->clip_rect.ToString()); - // Quads are clipped to the delegated renderer layer. - EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -TEST_F(DelegatedRendererLayerImplTestClip, - QuadsClipped_LayerClipped_NoSurface) { - root_delegated_render_pass_is_clipped_ = true; - clip_delegated_renderer_layer_ = true; - SetUpTest(); - - LayerTreeHostImpl::FrameData frame; - host_impl_->active_tree()->BuildPropertyTreesForTesting(); - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - ASSERT_EQ(2u, frame.render_passes.size()); - const QuadList& contrib_delegated_quad_list = - frame.render_passes[0]->quad_list; - ASSERT_EQ(2u, contrib_delegated_quad_list.size()); - const QuadList& root_delegated_quad_list = frame.render_passes[1]->quad_list; - ASSERT_EQ(5u, root_delegated_quad_list.size()); - const SharedQuadState* root_delegated_shared_quad_state = - root_delegated_quad_list.front()->shared_quad_state; - - // When the quads have a clip of their own, it is used, but it is - // combined with the clip rect of the delegated renderer layer. - EXPECT_EQ(gfx::Rect(25, 27, 19, 21).ToString(), - root_delegated_shared_quad_state->clip_rect.ToString()); - // Quads came with a clip rect. - EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -TEST_F(DelegatedRendererLayerImplTestClip, - QuadsUnclipped_LayerUnclipped_Surface) { - root_delegated_render_pass_is_clipped_ = false; - clip_delegated_renderer_layer_ = false; - SetUpTest(); - - delegated_renderer_layer_->SetForceRenderSurface(true); - - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - ASSERT_EQ(3u, frame.render_passes.size()); - const QuadList& contrib_delegated_quad_list = - frame.render_passes[0]->quad_list; - ASSERT_EQ(2u, contrib_delegated_quad_list.size()); - const QuadList& root_delegated_quad_list = frame.render_passes[1]->quad_list; - ASSERT_EQ(5u, root_delegated_quad_list.size()); - const SharedQuadState* root_delegated_shared_quad_state = - root_delegated_quad_list.front()->shared_quad_state; - - // When the layer owns a surface, the quads don't need to be clipped - // further than they already specify. If they aren't clipped, then their - // clip rect is ignored, and they are not set as clipped. - EXPECT_FALSE(root_delegated_shared_quad_state->is_clipped); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -TEST_F(DelegatedRendererLayerImplTestClip, - QuadsClipped_LayerUnclipped_Surface) { - root_delegated_render_pass_is_clipped_ = true; - clip_delegated_renderer_layer_ = false; - SetUpTest(); - - delegated_renderer_layer_->SetForceRenderSurface(true); - - LayerTreeHostImpl::FrameData frame; - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - ASSERT_EQ(3u, frame.render_passes.size()); - const QuadList& contrib_delegated_quad_list = - frame.render_passes[0]->quad_list; - ASSERT_EQ(2u, contrib_delegated_quad_list.size()); - const QuadList& root_delegated_quad_list = frame.render_passes[1]->quad_list; - ASSERT_EQ(5u, root_delegated_quad_list.size()); - const SharedQuadState* root_delegated_shared_quad_state = - root_delegated_quad_list.front()->shared_quad_state; - - // When the quads have a clip of their own, it is used. - EXPECT_EQ(gfx::Rect(5, 5, 40, 40).ToString(), - root_delegated_shared_quad_state->clip_rect.ToString()); - // Quads came with a clip rect. - EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -TEST_F(DelegatedRendererLayerImplTestClip, - QuadsUnclipped_LayerClipped_Surface) { - root_delegated_render_pass_is_clipped_ = false; - clip_delegated_renderer_layer_ = true; - SetUpTest(); - - delegated_renderer_layer_->SetForceRenderSurface(true); - - LayerTreeHostImpl::FrameData frame; - host_impl_->active_tree()->BuildPropertyTreesForTesting(); - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - ASSERT_EQ(3u, frame.render_passes.size()); - const QuadList& contrib_delegated_quad_list = - frame.render_passes[0]->quad_list; - ASSERT_EQ(2u, contrib_delegated_quad_list.size()); - const QuadList& root_delegated_quad_list = frame.render_passes[1]->quad_list; - ASSERT_EQ(5u, root_delegated_quad_list.size()); - const SharedQuadState* root_delegated_shared_quad_state = - root_delegated_quad_list.front()->shared_quad_state; - - // When the layer owns a surface, the quads don't need to be clipped - // further than they already specify. If they aren't clipped, then their - // clip rect is ignored, and they are not set as clipped. - EXPECT_FALSE(root_delegated_shared_quad_state->is_clipped); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -TEST_F(DelegatedRendererLayerImplTestClip, QuadsClipped_LayerClipped_Surface) { - root_delegated_render_pass_is_clipped_ = true; - clip_delegated_renderer_layer_ = true; - SetUpTest(); - - delegated_renderer_layer_->SetForceRenderSurface(true); - - LayerTreeHostImpl::FrameData frame; - host_impl_->active_tree()->BuildPropertyTreesForTesting(); - EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); - - ASSERT_EQ(3u, frame.render_passes.size()); - const QuadList& contrib_delegated_quad_list = - frame.render_passes[0]->quad_list; - ASSERT_EQ(2u, contrib_delegated_quad_list.size()); - const QuadList& root_delegated_quad_list = frame.render_passes[1]->quad_list; - ASSERT_EQ(5u, root_delegated_quad_list.size()); - const SharedQuadState* root_delegated_shared_quad_state = - root_delegated_quad_list.front()->shared_quad_state; - - // When the quads have a clip of their own, it is used, but it is - // combined with the clip rect of the delegated renderer layer. If the - // layer owns a surface, then it does not have a clip rect of its own. - EXPECT_EQ(gfx::Rect(5, 5, 40, 40).ToString(), - root_delegated_shared_quad_state->clip_rect.ToString()); - // Quads came with a clip rect. - EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped); - - host_impl_->DrawLayers(&frame); - host_impl_->DidDrawAllLayers(frame); -} - -TEST_F(DelegatedRendererLayerImplTest, Occlusion) { - gfx::Size layer_size(1000, 1000); - gfx::Size viewport_size(1000, 1000); - gfx::Rect quad_screen_rect(211, 300, 400, 500); - - gfx::Transform transform; - transform.Translate(211.0, 300.0); - - LayerTestCommon::LayerImplTest impl; - - FakeDelegatedRendererLayerImpl* delegated_renderer_layer_impl = - impl.AddChildToRoot<FakeDelegatedRendererLayerImpl>(); - delegated_renderer_layer_impl->SetBounds(layer_size); - delegated_renderer_layer_impl->SetDrawsContent(true); - - // Contributing render pass is offset by a transform and holds a quad that - // covers it entirely. - RenderPassList delegated_render_passes; - // pass2 is just the size of the quad. It contributes to |pass1| with a - // translation of (211,300). - RenderPassId pass2_id = - delegated_renderer_layer_impl->FirstContributingRenderPassId(); - RenderPass* pass2 = - AddRenderPass(&delegated_render_passes, pass2_id, - gfx::Rect(quad_screen_rect.size()), transform); - AddQuad(pass2, gfx::Rect(quad_screen_rect.size()), SK_ColorRED); - // |pass1| covers the whole layer. - RenderPassId pass1_id = RenderPassId(impl.root_layer()->id(), 0); - RenderPass* pass1 = AddRenderPass(&delegated_render_passes, pass1_id, - gfx::Rect(layer_size), gfx::Transform()); - AddRenderPassQuad(pass1, - pass2, - 0, - FilterOperations(), - transform, - SkXfermode::kSrcOver_Mode); - delegated_renderer_layer_impl->SetFrameDataForRenderPasses( - 1.f, delegated_render_passes); - - impl.CalcDrawProps(viewport_size); - - { - SCOPED_TRACE("No occlusion"); - gfx::Rect occluded; - - { - SCOPED_TRACE("Root render pass"); - impl.AppendQuadsForPassWithOcclusion(delegated_renderer_layer_impl, pass1, - occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(pass1->quad_list, - quad_screen_rect); - ASSERT_EQ(1u, pass1->quad_list.size()); - EXPECT_EQ(DrawQuad::RENDER_PASS, pass1->quad_list.front()->material); - } - { - SCOPED_TRACE("Contributing render pass"); - impl.AppendQuadsForPassWithOcclusion(delegated_renderer_layer_impl, pass2, - occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect( - pass2->quad_list, gfx::Rect(quad_screen_rect.size())); - ASSERT_EQ(1u, pass2->quad_list.size()); - EXPECT_EQ(DrawQuad::SOLID_COLOR, pass2->quad_list.front()->material); - } - } - - { - SCOPED_TRACE("Full occlusion"); - { - gfx::Rect occluded(delegated_renderer_layer_impl->visible_layer_rect()); - - SCOPED_TRACE("Root render pass"); - impl.AppendQuadsForPassWithOcclusion(delegated_renderer_layer_impl, pass1, - occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(pass1->quad_list, - gfx::Rect()); - EXPECT_EQ(pass1->quad_list.size(), 0u); - } - { - gfx::Rect occluded(delegated_renderer_layer_impl->visible_layer_rect()); - - SCOPED_TRACE("Contributing render pass"); - impl.AppendQuadsForPassWithOcclusion(delegated_renderer_layer_impl, pass2, - occluded); - LayerTestCommon::VerifyQuadsExactlyCoverRect(pass2->quad_list, - gfx::Rect()); - EXPECT_EQ(pass2->quad_list.size(), 0u); - } - } - - { - SCOPED_TRACE("Partial occlusion"); - { - gfx::Rect occlusion_in_root_target(0, 0, 500, 1000); - - SCOPED_TRACE("Root render pass"); - impl.AppendQuadsForPassWithOcclusion(delegated_renderer_layer_impl, pass1, - occlusion_in_root_target); - size_t partially_occluded_count = 0; - LayerTestCommon::VerifyQuadsAreOccluded(pass1->quad_list, - occlusion_in_root_target, - &partially_occluded_count); - // The layer outputs one quad, which is partially occluded. - EXPECT_EQ(1u, pass1->quad_list.size()); - EXPECT_EQ(1u, partially_occluded_count); - } - { - gfx::Rect occlusion_in_root_target(0, 0, 500, 1000); - // Move the occlusion to where it is in the contributing surface. - gfx::Rect occlusion_in_target_of_delegated_quad = - occlusion_in_root_target - quad_screen_rect.OffsetFromOrigin(); - - SCOPED_TRACE("Contributing render pass"); - impl.AppendQuadsForPassWithOcclusion(delegated_renderer_layer_impl, pass2, - occlusion_in_root_target); - size_t partially_occluded_count = 0; - LayerTestCommon::VerifyQuadsAreOccluded( - pass2->quad_list, occlusion_in_target_of_delegated_quad, - &partially_occluded_count); - // The layer outputs one quad, which is partially occluded. - EXPECT_EQ(1u, pass2->quad_list.size()); - EXPECT_EQ(1u, partially_occluded_count); - // The quad in the contributing surface is at (211,300) in the root. - // The occlusion extends to 500 in the x-axis, pushing the left of the - // visible part of the quad to 500 - 211 = 300 - 11 inside the quad. - EXPECT_EQ(gfx::Rect(300 - 11, 0, 100 + 11, 500).ToString(), - pass2->quad_list.front()->visible_rect.ToString()); - } - { - gfx::Rect occlusion_in_root_target(0, 0, 500, 1000); - // Move the occlusion to where it is in the contributing surface. - gfx::Rect occlusion_in_target_of_delegated_quad = - occlusion_in_root_target - quad_screen_rect.OffsetFromOrigin(); - - SCOPED_TRACE("Contributing render pass with transformed root"); - - gfx::Transform layer_transform; - layer_transform.Translate(11.0, 0.0); - delegated_renderer_layer_impl->SetTransform(layer_transform); - delegated_renderer_layer_impl->layer_tree_impl() - ->property_trees() - ->needs_rebuild = true; - - occlusion_in_target_of_delegated_quad += gfx::Vector2d(11, 0); - - impl.CalcDrawProps(viewport_size); - - impl.AppendQuadsForPassWithOcclusion(delegated_renderer_layer_impl, pass2, - occlusion_in_root_target); - size_t partially_occluded_count = 0; - LayerTestCommon::VerifyQuadsAreOccluded( - pass2->quad_list, occlusion_in_target_of_delegated_quad, - &partially_occluded_count); - // The layer outputs one quad, which is partially occluded. - EXPECT_EQ(1u, pass2->quad_list.size()); - EXPECT_EQ(1u, partially_occluded_count); - // The quad in the contributing surface is at (222,300) in the transformed - // root. The occlusion extends to 500 in the x-axis, pushing the left of - // the visible part of the quad to 500 - 222 = 300 - 22 inside the quad. - EXPECT_EQ(gfx::Rect(300 - 22, 0, 100 + 22, 500).ToString(), - pass2->quad_list.front()->visible_rect.ToString()); - } - } -} - -TEST_F(DelegatedRendererLayerImplTest, DeviceScaleFactorOcclusion) { - gfx::Size layer_size(1000, 1000); - gfx::Size viewport_size(1000, 1000); - gfx::Rect quad_screen_rect(211, 300, 400, 500); - - gfx::Transform transform; - transform.Translate(211.f, 300.f); - - LayerTestCommon::LayerImplTest impl; - - FakeDelegatedRendererLayerImpl* delegated_renderer_layer_impl = - impl.AddChildToRoot<FakeDelegatedRendererLayerImpl>(); - delegated_renderer_layer_impl->SetBounds(layer_size); - delegated_renderer_layer_impl->SetDrawsContent(true); - - // Contributing render pass is offset by a transform and holds a quad that - // covers it entirely. - RenderPassList delegated_render_passes; - // pass2 is just the size of the quad. It contributes to |pass1| with a - // translation of (211,300). - RenderPassId pass2_id = - delegated_renderer_layer_impl->FirstContributingRenderPassId(); - RenderPass* pass2 = - AddRenderPass(&delegated_render_passes, pass2_id, - gfx::Rect(quad_screen_rect.size()), transform); - AddQuad(pass2, gfx::Rect(quad_screen_rect.size()), SK_ColorRED); - // |pass1| covers the whole layer. - RenderPassId pass1_id = RenderPassId(impl.root_layer()->id(), 0); - RenderPass* pass1 = AddRenderPass(&delegated_render_passes, pass1_id, - gfx::Rect(layer_size), gfx::Transform()); - AddRenderPassQuad(pass1, pass2, 0, FilterOperations(), transform, - SkXfermode::kSrcOver_Mode); - delegated_renderer_layer_impl->SetFrameDataForRenderPasses( - 1.2f, delegated_render_passes); - - { - SCOPED_TRACE("Partial occlusion"); - { - gfx::Rect occlusion_in_root_target(0, 0, 500, 1000); - // Move the occlusion to where it is in the contributing surface. - gfx::Rect occlusion_in_target_of_delegated_quad = - occlusion_in_root_target - quad_screen_rect.OffsetFromOrigin(); - - SCOPED_TRACE("Contributing render pass"); - impl.AppendQuadsForPassWithOcclusion(delegated_renderer_layer_impl, pass2, - occlusion_in_root_target); - size_t partially_occluded_count = 0; - LayerTestCommon::VerifyQuadsAreOccluded( - pass2->quad_list, occlusion_in_target_of_delegated_quad, - &partially_occluded_count); - // The layer outputs one quad, which is partially occluded. - EXPECT_EQ(1u, pass2->quad_list.size()); - EXPECT_EQ(1u, partially_occluded_count); - // The quad in the contributing surface is at (211,300) in the root. - // The occlusion extends to 500 * 1.2 (dsf) = 600 in the x-axis, pushing - // the left of the visible part of the quad to 600 - 211 = 400 - 11 inside - // the quad. - EXPECT_EQ(gfx::Rect(400 - 11, 0, 11, 500).ToString(), - pass2->quad_list.front()->visible_rect.ToString()); - } - } -} - -TEST_F(DelegatedRendererLayerImplTest, PushPropertiesTo) { - gfx::Size layer_size(1000, 1000); - - scoped_ptr<FakeDelegatedRendererLayerImpl> delegated_renderer_layer_impl = - FakeDelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 5); - delegated_renderer_layer_impl->SetBounds(layer_size); - delegated_renderer_layer_impl->SetDrawsContent(true); - - RenderPassList delegated_render_passes; - // |pass1| covers the whole layer. - RenderPassId pass1_id = RenderPassId(5, 0); - AddRenderPass(&delegated_render_passes, - pass1_id, - gfx::Rect(layer_size), - gfx::Transform()); - delegated_renderer_layer_impl->SetFrameDataForRenderPasses( - 2.f, delegated_render_passes); - EXPECT_EQ(0.5f, delegated_renderer_layer_impl->inverse_device_scale_factor()); - - scoped_ptr<DelegatedRendererLayerImpl> other_layer = - DelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 6); - - delegated_renderer_layer_impl->PushPropertiesTo(other_layer.get()); - - EXPECT_EQ(0.5f, other_layer->inverse_device_scale_factor()); -} - -} // namespace -} // namespace cc
diff --git a/cc/layers/delegated_renderer_layer_unittest.cc b/cc/layers/delegated_renderer_layer_unittest.cc deleted file mode 100644 index a7e9c9a1..0000000 --- a/cc/layers/delegated_renderer_layer_unittest.cc +++ /dev/null
@@ -1,83 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "cc/layers/delegated_renderer_layer.h" - -#include "cc/layers/delegated_frame_provider.h" -#include "cc/layers/delegated_frame_resource_collection.h" -#include "cc/layers/layer_settings.h" -#include "cc/layers/solid_color_layer.h" -#include "cc/output/delegated_frame_data.h" -#include "cc/test/fake_delegated_renderer_layer.h" -#include "cc/test/fake_layer_tree_host.h" -#include "cc/test/fake_proxy.h" -#include "cc/test/test_task_graph_runner.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace cc { -namespace { - -class DelegatedRendererLayerTest : public testing::Test { - public: - DelegatedRendererLayerTest() - : host_client_(FakeLayerTreeHostClient::DIRECT_3D) { - LayerTreeSettings settings; - settings.minimum_occlusion_tracking_size = gfx::Size(); - - host_impl_ = - FakeLayerTreeHost::Create(&host_client_, &task_graph_runner_, settings); - host_impl_->SetViewportSize(gfx::Size(10, 10)); - } - - protected: - FakeLayerTreeHostClient host_client_; - TestTaskGraphRunner task_graph_runner_; - TestSharedBitmapManager shared_bitmap_manager_; - scoped_ptr<LayerTreeHost> host_impl_; -}; - -class DelegatedRendererLayerTestSimple : public DelegatedRendererLayerTest { - public: - DelegatedRendererLayerTestSimple() : DelegatedRendererLayerTest() { - scoped_ptr<RenderPass> root_pass(RenderPass::Create()); - root_pass->SetNew( - RenderPassId(1, 1), gfx::Rect(1, 1), gfx::Rect(1, 1), gfx::Transform()); - scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); - frame_data->render_pass_list.push_back(std::move(root_pass)); - resources_ = new DelegatedFrameResourceCollection; - provider_ = new DelegatedFrameProvider(resources_, std::move(frame_data)); - LayerSettings layer_settings; - root_layer_ = SolidColorLayer::Create(layer_settings); - layer_before_ = SolidColorLayer::Create(layer_settings); - delegated_renderer_layer_ = - FakeDelegatedRendererLayer::Create(layer_settings, provider_.get()); - } - - protected: - scoped_refptr<Layer> root_layer_; - scoped_refptr<Layer> layer_before_; - scoped_refptr<DelegatedRendererLayer> delegated_renderer_layer_; - scoped_refptr<DelegatedFrameResourceCollection> resources_; - scoped_refptr<DelegatedFrameProvider> provider_; -}; - -TEST_F(DelegatedRendererLayerTestSimple, DelegatedManyDescendants) { - EXPECT_EQ(0, root_layer_->NumDescendantsThatDrawContent()); - root_layer_->AddChild(layer_before_); - EXPECT_EQ(0, root_layer_->NumDescendantsThatDrawContent()); - layer_before_->SetIsDrawable(true); - EXPECT_EQ(1, root_layer_->NumDescendantsThatDrawContent()); - EXPECT_EQ(0, layer_before_->NumDescendantsThatDrawContent()); - layer_before_->AddChild(delegated_renderer_layer_); - EXPECT_EQ(0, layer_before_->NumDescendantsThatDrawContent()); - EXPECT_EQ(0, delegated_renderer_layer_->NumDescendantsThatDrawContent()); - EXPECT_EQ(1, root_layer_->NumDescendantsThatDrawContent()); - delegated_renderer_layer_->SetIsDrawable(true); - EXPECT_EQ(1000, delegated_renderer_layer_->NumDescendantsThatDrawContent()); - EXPECT_EQ(1001, layer_before_->NumDescendantsThatDrawContent()); - EXPECT_EQ(1002, root_layer_->NumDescendantsThatDrawContent()); -} - -} // namespace -} // namespace cc
diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc index 2430f9c..1eb97f0 100644 --- a/cc/layers/layer.cc +++ b/cc/layers/layer.cc
@@ -1675,14 +1675,6 @@ if (draws_content == draws_content_) return; - if (HasDelegatedContent()) { - // Layers with delegated content need to be treated as if they have as - // many children as the number of layers they own delegated quads for. - // Since we don't know this number right now, we choose one that acts like - // infinity for our purposes. - AddDrawableDescendants(draws_content ? 1000 : -1000); - } - if (parent()) parent()->AddDrawableDescendants(draws_content ? 1 : -1); @@ -1949,10 +1941,6 @@ benchmark->RunOnLayer(this); } -bool Layer::HasDelegatedContent() const { - return false; -} - void Layer::SetFrameTimingRequests( const std::vector<FrameTimingRequest>& requests) { // TODO(vmpstr): Early out if there are no changes earlier in the call stack.
diff --git a/cc/layers/layer.h b/cc/layers/layer.h index 7c0697d..43ed1c3 100644 --- a/cc/layers/layer.h +++ b/cc/layers/layer.h
@@ -332,9 +332,6 @@ virtual void SetLayerTreeHost(LayerTreeHost* host); - virtual bool HasDelegatedContent() const; - bool HasContributingDelegatedRenderPasses() const { return false; } - void SetIsDrawable(bool is_drawable); void SetHideLayerAndSubtree(bool hide);
diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc index 56b79e8..2f76af2 100644 --- a/cc/layers/layer_impl.cc +++ b/cc/layers/layer_impl.cc
@@ -443,22 +443,6 @@ } } -bool LayerImpl::HasDelegatedContent() const { - return false; -} - -bool LayerImpl::HasContributingDelegatedRenderPasses() const { - return false; -} - -RenderPassId LayerImpl::FirstContributingRenderPassId() const { - return RenderPassId(0, 0); -} - -RenderPassId LayerImpl::NextContributingRenderPassId(RenderPassId id) const { - return RenderPassId(0, 0); -} - void LayerImpl::GetContentsResourceId(ResourceId* resource_id, gfx::Size* resource_size) const { NOTREACHED();
diff --git a/cc/layers/layer_impl.h b/cc/layers/layer_impl.h index fe24629..728298c 100644 --- a/cc/layers/layer_impl.h +++ b/cc/layers/layer_impl.h
@@ -278,11 +278,6 @@ virtual void GetContentsResourceId(ResourceId* resource_id, gfx::Size* resource_size) const; - virtual bool HasDelegatedContent() const; - virtual bool HasContributingDelegatedRenderPasses() const; - virtual RenderPassId FirstContributingRenderPassId() const; - virtual RenderPassId NextContributingRenderPassId(RenderPassId id) const; - virtual void NotifyTileStateChanged(const Tile* tile) {} virtual ScrollbarLayerImplBase* ToScrollbarLayer();
diff --git a/cc/layers/render_surface_impl.cc b/cc/layers/render_surface_impl.cc index 8d8a95b..72f0fea 100644 --- a/cc/layers/render_surface_impl.cc +++ b/cc/layers/render_surface_impl.cc
@@ -12,7 +12,6 @@ #include "base/strings/stringprintf.h" #include "cc/base/math_util.h" #include "cc/debug/debug_colors.h" -#include "cc/layers/delegated_renderer_layer_impl.h" #include "cc/layers/layer_impl.h" #include "cc/layers/render_pass_sink.h" #include "cc/quads/debug_border_draw_quad.h" @@ -156,19 +155,8 @@ return surface_property_changed_ && !owning_layer_->LayerPropertyChanged(); } -void RenderSurfaceImpl::AddContributingDelegatedRenderPassLayer( - LayerImpl* layer) { - DCHECK(std::find(layer_list_.begin(), layer_list_.end(), layer) != - layer_list_.end()); - DelegatedRendererLayerImpl* delegated_renderer_layer = - static_cast<DelegatedRendererLayerImpl*>(layer); - contributing_delegated_render_pass_layer_list_.push_back( - delegated_renderer_layer); -} - void RenderSurfaceImpl::ClearLayerLists() { layer_list_.clear(); - contributing_delegated_render_pass_layer_list_.clear(); } RenderPassId RenderSurfaceImpl::GetRenderPassId() { @@ -179,14 +167,6 @@ } void RenderSurfaceImpl::AppendRenderPasses(RenderPassSink* pass_sink) { - for (size_t i = 0; - i < contributing_delegated_render_pass_layer_list_.size(); - ++i) { - DelegatedRendererLayerImpl* delegated_renderer_layer = - contributing_delegated_render_pass_layer_list_[i]; - delegated_renderer_layer->AppendContributingRenderPasses(pass_sink); - } - scoped_ptr<RenderPass> pass = RenderPass::Create(layer_list_.size()); pass->SetNew(GetRenderPassId(), content_rect_,
diff --git a/cc/layers/render_surface_impl.h b/cc/layers/render_surface_impl.h index 17a7f49..613bf897 100644 --- a/cc/layers/render_surface_impl.h +++ b/cc/layers/render_surface_impl.h
@@ -24,7 +24,6 @@ namespace cc { class DamageTracker; -class DelegatedRendererLayerImpl; class Occlusion; class RenderPassId; class RenderPassSink; @@ -127,7 +126,6 @@ } LayerImplList& layer_list() { return layer_list_; } - void AddContributingDelegatedRenderPassLayer(LayerImpl* layer); void ClearLayerLists(); int OwningLayerId() const; @@ -179,8 +177,6 @@ gfx::Rect clip_rect_; LayerImplList layer_list_; - std::vector<DelegatedRendererLayerImpl*> - contributing_delegated_render_pass_layer_list_; Occlusion occlusion_in_content_space_; // The nearest ancestor target surface that will contain the contents of this
diff --git a/cc/layers/video_layer_impl.cc b/cc/layers/video_layer_impl.cc index 923767e5..1eb4ef0d 100644 --- a/cc/layers/video_layer_impl.cc +++ b/cc/layers/video_layer_impl.cc
@@ -119,6 +119,8 @@ external_resources.software_release_callback; return true; } + frame_resource_offset_ = external_resources.offset; + frame_resource_multiplier_ = external_resources.multiplier; DCHECK_EQ(external_resources.mailboxes.size(), external_resources.release_callbacks.size()); @@ -277,8 +279,8 @@ ya_tex_coord_rect, uv_tex_coord_rect, ya_tex_size, uv_tex_size, frame_resources_[0].id, frame_resources_[1].id, frame_resources_[2].id, - frame_resources_.size() > 3 ? frame_resources_[3].id : 0, - color_space); + frame_resources_.size() > 3 ? frame_resources_[3].id : 0, color_space, + frame_resource_offset_, frame_resource_multiplier_); ValidateQuadResources(yuv_video_quad); break; }
diff --git a/cc/layers/video_layer_impl.h b/cc/layers/video_layer_impl.h index c1688e8..a0ba484495 100644 --- a/cc/layers/video_layer_impl.h +++ b/cc/layers/video_layer_impl.h
@@ -63,6 +63,9 @@ scoped_ptr<VideoResourceUpdater> updater_; VideoFrameExternalResources::ResourceType frame_resource_type_; + float frame_resource_offset_; + float frame_resource_multiplier_; + struct FrameResource { FrameResource(ResourceId id, gfx::Size size_in_pixels,
diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc index 67382c0..1af26c1 100644 --- a/cc/output/gl_renderer.cc +++ b/cc/output/gl_renderer.cc
@@ -862,6 +862,24 @@ return background_with_filters; } +// Map device space quad to local space. Device_transform has no 3d +// component since it was flattened, so we don't need to project. We should +// have already checked that the transform was uninvertible before this call. +gfx::QuadF MapQuadToLocalSpace(const gfx::Transform& device_transform, + const gfx::QuadF& device_quad) { + gfx::Transform inverse_device_transform(gfx::Transform::kSkipInitialization); + DCHECK(device_transform.IsInvertible()); + bool did_invert = device_transform.GetInverse(&inverse_device_transform); + DCHECK(did_invert); + bool clipped = false; + gfx::QuadF local_quad = + MathUtil::MapQuad(inverse_device_transform, device_quad, &clipped); + // We should not DCHECK(!clipped) here, because anti-aliasing inflation may + // cause device_quad to become clipped. To our knowledge this scenario does + // not need to be handled differently than the unclipped case. + return local_quad; +} + void GLRenderer::DrawRenderPassQuad(DrawingFrame* frame, const RenderPassDrawQuad* quad, const gfx::QuadF* clip_region) { @@ -986,7 +1004,6 @@ // in the compositor. use_color_matrix = true; } else { - gfx::RectF src_rect = rect; gfx::Vector2dF scale = quad->filters_scale; SkMatrix scale_matrix; scale_matrix.setScale(scale.x(), scale.y()); @@ -994,13 +1011,28 @@ filter->filterBounds(gfx::RectToSkIRect(quad->rect), scale_matrix, &result_rect, SkImageFilter::kForward_MapDirection); - rect = gfx::SkRectToRectF(SkRect::Make(result_rect)); + gfx::RectF dst_rect = gfx::SkRectToRectF(SkRect::Make(result_rect)); + gfx::Rect clip_rect = quad->shared_quad_state->clip_rect; + if (clip_rect.IsEmpty()) { + clip_rect = current_draw_rect_; + } + gfx::Transform transform = + quad->shared_quad_state->quad_to_target_transform; + gfx::QuadF clip_quad = gfx::QuadF(gfx::RectF(clip_rect)); + gfx::QuadF local_clip = MapQuadToLocalSpace(transform, clip_quad); + dst_rect.Intersect(local_clip.BoundingBox()); + // If we've been fully clipped out (by crop rect or clipping), there's + // nothing to draw. + if (dst_rect.IsEmpty()) { + return; + } filter_image = ApplyImageFilter(ScopedUseGrContext::Create(this, frame), - resource_provider_, src_rect, rect, + resource_provider_, rect, dst_rect, scale, filter.get(), contents_texture); if (filter_image) { filter_image_id = filter_image->getTextureHandle(true); DCHECK(filter_image_id); + rect = dst_rect; } } } @@ -1384,24 +1416,6 @@ *clipped_quad = best_rotation; } -// Map device space quad to local space. Device_transform has no 3d -// component since it was flattened, so we don't need to project. We should -// have already checked that the transform was uninvertible before this call. -gfx::QuadF MapQuadToLocalSpace(const gfx::Transform& device_transform, - const gfx::QuadF& device_quad) { - gfx::Transform inverse_device_transform(gfx::Transform::kSkipInitialization); - DCHECK(device_transform.IsInvertible()); - bool did_invert = device_transform.GetInverse(&inverse_device_transform); - DCHECK(did_invert); - bool clipped = false; - gfx::QuadF local_quad = - MathUtil::MapQuad(inverse_device_transform, device_quad, &clipped); - // We should not DCHECK(!clipped) here, because anti-aliasing inflation may - // cause device_quad to become clipped. To our knowledge this scenario does - // not need to be handled differently than the unclipped case. - return local_quad; -} - void InflateAntiAliasingDistances(const gfx::QuadF& quad, LayerQuad* device_layer_edges, float edge[24]) { @@ -2122,13 +2136,23 @@ break; } + float yuv_to_rgb_multiplied[9]; + float yuv_adjust_with_offset[3]; + + for (int i = 0; i < 9; ++i) + yuv_to_rgb_multiplied[i] = yuv_to_rgb[i] * quad->resource_multiplier; + + for (int i = 0; i < 3; ++i) + yuv_adjust_with_offset[i] = + yuv_adjust[i] / quad->resource_multiplier - quad->resource_offset; + // The transform and vertex data are used to figure out the extents that the // un-antialiased quad should have and which vertex this is and the float // quad passed in via uniform is the actual geometry that gets used to draw // it. This is why this centered rect is used and not the original quad_rect. auto tile_rect = gfx::RectF(quad->rect); - gl_->UniformMatrix3fv(yuv_matrix_location, 1, 0, yuv_to_rgb); - gl_->Uniform3fv(yuv_adj_location, 1, yuv_adjust); + gl_->UniformMatrix3fv(yuv_matrix_location, 1, 0, yuv_to_rgb_multiplied); + gl_->Uniform3fv(yuv_adj_location, 1, yuv_adjust_with_offset); SetShaderOpacity(quad->shared_quad_state->opacity, alpha_location); if (!clip_region) {
diff --git a/cc/output/renderer_pixeltest.cc b/cc/output/renderer_pixeltest.cc index 083bac1..7f5bbfd8 100644 --- a/cc/output/renderer_pixeltest.cc +++ b/cc/output/renderer_pixeltest.cc
@@ -267,13 +267,61 @@ yuv_quad->SetNew(shared_state, rect, opaque_rect, visible_rect, ya_tex_coord_rect, uv_tex_coord_rect, ya_tex_size, uv_tex_size, y_resource, u_resource, v_resource, a_resource, - color_space); + color_space, 0.0f, 1.0f); +} + +// Upshift video frame to 10 bit. +scoped_refptr<media::VideoFrame> CreateHighbitVideoFrame( + const scoped_refptr<media::VideoFrame>& video_frame) { + media::VideoPixelFormat format; + switch (video_frame->format()) { + case media::PIXEL_FORMAT_I420: + case media::PIXEL_FORMAT_YV12: + format = media::PIXEL_FORMAT_YUV420P10; + break; + case media::PIXEL_FORMAT_YV16: + format = media::PIXEL_FORMAT_YUV422P10; + break; + case media::PIXEL_FORMAT_YV24: + format = media::PIXEL_FORMAT_YUV444P10; + break; + + default: + NOTREACHED(); + return nullptr; + } + scoped_refptr<media::VideoFrame> ret = media::VideoFrame::CreateFrame( + format, video_frame->coded_size(), video_frame->visible_rect(), + video_frame->natural_size(), video_frame->timestamp()); + + // Copy all metadata. + base::DictionaryValue tmp; + video_frame->metadata()->MergeInternalValuesInto(&tmp); + ret->metadata()->MergeInternalValuesFrom(tmp); + + for (int plane = media::VideoFrame::kYPlane; + plane <= media::VideoFrame::kVPlane; ++plane) { + int width = video_frame->row_bytes(plane); + const uint8_t* src = video_frame->data(plane); + uint16_t* dst = reinterpret_cast<uint16_t*>(ret->data(plane)); + for (int row = 0; row < video_frame->rows(plane); row++) { + for (int x = 0; x < width; x++) { + // Replicate the top bits into the lower bits, this way + // 0xFF becomes 0x3FF. + dst[x] = (src[x] << 2) | (src[x] >> 6); + } + src += video_frame->stride(plane); + dst += ret->stride(plane) / 2; + } + } + return ret; } void CreateTestYUVVideoDrawQuad_Striped( const SharedQuadState* shared_state, media::VideoPixelFormat format, bool is_transparent, + bool highbit, const gfx::RectF& tex_coord_rect, RenderPass* render_pass, VideoResourceUpdater* video_resource_updater, @@ -308,6 +356,10 @@ } } uint8_t alpha_value = is_transparent ? 0 : 128; + + if (highbit) + video_frame = CreateHighbitVideoFrame(video_frame); + CreateTestYUVVideoDrawQuad_FromVideoFrame( shared_state, video_frame, alpha_value, tex_coord_rect, render_pass, video_resource_updater, rect, visible_rect, resource_provider); @@ -980,7 +1032,11 @@ scoped_ptr<VideoResourceUpdater> video_resource_updater_; }; -TEST_F(VideoGLRendererPixelTest, SimpleYUVRect) { +class VideoGLRendererPixelHiLoTest + : public VideoGLRendererPixelTest, + public ::testing::WithParamInterface<bool> {}; + +TEST_P(VideoGLRendererPixelHiLoTest, SimpleYUVRect) { gfx::Rect rect(this->device_viewport_size_); RenderPassId id(1, 1); @@ -989,10 +1045,11 @@ SharedQuadState* shared_state = CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); - CreateTestYUVVideoDrawQuad_Striped(shared_state, media::PIXEL_FORMAT_YV12, - false, gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), - pass.get(), video_resource_updater_.get(), - rect, rect, resource_provider_.get()); + bool highbit = GetParam(); + CreateTestYUVVideoDrawQuad_Striped( + shared_state, media::PIXEL_FORMAT_YV12, false, highbit, + gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), pass.get(), + video_resource_updater_.get(), rect, rect, resource_provider_.get()); RenderPassList pass_list; pass_list.push_back(std::move(pass)); @@ -1003,7 +1060,7 @@ FuzzyPixelOffByOneComparator(true))); } -TEST_F(VideoGLRendererPixelTest, ClippedYUVRect) { +TEST_P(VideoGLRendererPixelHiLoTest, ClippedYUVRect) { gfx::Rect viewport(this->device_viewport_size_); gfx::Rect draw_rect(this->device_viewport_size_.width() * 1.5, this->device_viewport_size_.height() * 1.5); @@ -1014,11 +1071,12 @@ SharedQuadState* shared_state = CreateTestSharedQuadState(gfx::Transform(), viewport, pass.get()); - CreateTestYUVVideoDrawQuad_Striped(shared_state, media::PIXEL_FORMAT_YV12, - false, gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), - pass.get(), video_resource_updater_.get(), - draw_rect, viewport, - resource_provider_.get()); + bool highbit = GetParam(); + CreateTestYUVVideoDrawQuad_Striped( + shared_state, media::PIXEL_FORMAT_YV12, false, highbit, + gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), pass.get(), + video_resource_updater_.get(), draw_rect, viewport, + resource_provider_.get()); RenderPassList pass_list; pass_list.push_back(std::move(pass)); @@ -1027,7 +1085,7 @@ FuzzyPixelOffByOneComparator(true))); } -TEST_F(VideoGLRendererPixelTest, OffsetYUVRect) { +TEST_F(VideoGLRendererPixelHiLoTest, OffsetYUVRect) { gfx::Rect rect(this->device_viewport_size_); RenderPassId id(1, 1); @@ -1038,7 +1096,7 @@ // Intentionally sets frame format to I420 for testing coverage. CreateTestYUVVideoDrawQuad_Striped( - shared_state, media::PIXEL_FORMAT_I420, false, + shared_state, media::PIXEL_FORMAT_I420, false, false, gfx::RectF(0.125f, 0.25f, 0.75f, 0.5f), pass.get(), video_resource_updater_.get(), rect, rect, resource_provider_.get()); @@ -1046,9 +1104,8 @@ pass_list.push_back(std::move(pass)); EXPECT_TRUE(this->RunPixelTest( - &pass_list, - base::FilePath(FILE_PATH_LITERAL("yuv_stripes_offset.png")), - FuzzyPixelOffByOneComparator(true))); + &pass_list, base::FilePath(FILE_PATH_LITERAL("yuv_stripes_offset.png")), + FuzzyPixelComparator(true, 100.0f, 1.0f, 1.0f, 1, 0))); } TEST_F(VideoGLRendererPixelTest, SimpleYUVRectBlack) { @@ -1076,6 +1133,9 @@ FuzzyPixelOffByOneComparator(true))); } +// First argument (test case prefix) is intentionally left empty. +INSTANTIATE_TEST_CASE_P(, VideoGLRendererPixelHiLoTest, ::testing::Bool()); + TEST_F(VideoGLRendererPixelTest, SimpleYUVJRect) { gfx::Rect rect(this->device_viewport_size_); @@ -1143,7 +1203,7 @@ FuzzyPixelOffByOneComparator(true))); } -TEST_F(VideoGLRendererPixelTest, SimpleYUVARect) { +TEST_F(VideoGLRendererPixelHiLoTest, SimpleYUVARect) { gfx::Rect rect(this->device_viewport_size_); RenderPassId id(1, 1); @@ -1152,10 +1212,10 @@ SharedQuadState* shared_state = CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); - CreateTestYUVVideoDrawQuad_Striped(shared_state, media::PIXEL_FORMAT_YV12A, - false, gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), - pass.get(), video_resource_updater_.get(), - rect, rect, resource_provider_.get()); + CreateTestYUVVideoDrawQuad_Striped( + shared_state, media::PIXEL_FORMAT_YV12A, false, false, + gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), pass.get(), + video_resource_updater_.get(), rect, rect, resource_provider_.get()); SolidColorDrawQuad* color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); @@ -1179,10 +1239,10 @@ SharedQuadState* shared_state = CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); - CreateTestYUVVideoDrawQuad_Striped(shared_state, media::PIXEL_FORMAT_YV12A, - true, gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), - pass.get(), video_resource_updater_.get(), - rect, rect, resource_provider_.get()); + CreateTestYUVVideoDrawQuad_Striped( + shared_state, media::PIXEL_FORMAT_YV12A, true, false, + gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), pass.get(), + video_resource_updater_.get(), rect, rect, resource_provider_.get()); SolidColorDrawQuad* color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
diff --git a/cc/quads/draw_quad.h b/cc/quads/draw_quad.h index dcc671ac..bf824c15 100644 --- a/cc/quads/draw_quad.h +++ b/cc/quads/draw_quad.h
@@ -124,7 +124,7 @@ return ids + count; } - size_t count; + uint32_t count; ResourceId ids[kMaxResourceIdCount]; };
diff --git a/cc/quads/draw_quad_unittest.cc b/cc/quads/draw_quad_unittest.cc index cfc20a1..8bde8c03 100644 --- a/cc/quads/draw_quad_unittest.cc +++ b/cc/quads/draw_quad_unittest.cc
@@ -336,6 +336,31 @@ } \ SETUP_AND_COPY_QUAD_NEW(Type, quad_new); +#define CREATE_QUAD_11_ALL(Type, a, b, c, d, e, f, g, h, i, j, k) \ + Type* quad_all = render_pass->CreateAndAppendDrawQuad<Type>(); \ + { \ + QUAD_DATA quad_all->SetAll(shared_state, quad_rect, quad_opaque_rect, \ + quad_visible_rect, needs_blending, a, b, c, d, \ + e, f, g, h, i, j, k); \ + } \ + SETUP_AND_COPY_QUAD_ALL(Type, quad_all); + +#define CREATE_QUAD_12_NEW(Type, a, b, c, d, e, f, g, h, i, j, k, l) \ + Type* quad_new = render_pass->CreateAndAppendDrawQuad<Type>(); \ + { \ + QUAD_DATA quad_new->SetNew(shared_state, quad_rect, a, b, c, d, e, f, g, \ + h, i, j, k, l); \ + } \ + SETUP_AND_COPY_QUAD_NEW(Type, quad_new); + +#define CREATE_QUAD_13_NEW(Type, a, b, c, d, e, f, g, h, i, j, k, l, m) \ + Type* quad_new = render_pass->CreateAndAppendDrawQuad<Type>(); \ + { \ + QUAD_DATA quad_new->SetNew(shared_state, quad_rect, a, b, c, d, e, f, g, \ + h, i, j, k, l, m); \ + } \ + SETUP_AND_COPY_QUAD_NEW(Type, quad_new); + #define CREATE_QUAD_ALL_RP(Type, a, b, c, d, e, f, g, copy_a) \ Type* quad_all = render_pass->CreateAndAppendDrawQuad<Type>(); \ { \ @@ -623,13 +648,16 @@ ResourceId u_plane_resource_id = 532; ResourceId v_plane_resource_id = 4; ResourceId a_plane_resource_id = 63; + float resource_offset = 0.5f; + float resource_multiplier = 2.001f; YUVVideoDrawQuad::ColorSpace color_space = YUVVideoDrawQuad::JPEG; CREATE_SHARED_STATE(); - CREATE_QUAD_11_NEW(YUVVideoDrawQuad, opaque_rect, visible_rect, + CREATE_QUAD_13_NEW(YUVVideoDrawQuad, opaque_rect, visible_rect, ya_tex_coord_rect, uv_tex_coord_rect, ya_tex_size, uv_tex_size, y_plane_resource_id, u_plane_resource_id, - v_plane_resource_id, a_plane_resource_id, color_space); + v_plane_resource_id, a_plane_resource_id, color_space, + resource_offset, resource_multiplier); EXPECT_EQ(DrawQuad::YUV_VIDEO_CONTENT, copy_quad->material); EXPECT_EQ(opaque_rect, copy_quad->opaque_rect); EXPECT_EQ(visible_rect, copy_quad->visible_rect); @@ -642,11 +670,14 @@ EXPECT_EQ(v_plane_resource_id, copy_quad->v_plane_resource_id()); EXPECT_EQ(a_plane_resource_id, copy_quad->a_plane_resource_id()); EXPECT_EQ(color_space, copy_quad->color_space); + EXPECT_EQ(resource_offset, copy_quad->resource_offset); + EXPECT_EQ(resource_multiplier, copy_quad->resource_multiplier); - CREATE_QUAD_9_ALL(YUVVideoDrawQuad, ya_tex_coord_rect, uv_tex_coord_rect, - ya_tex_size, uv_tex_size, y_plane_resource_id, - u_plane_resource_id, v_plane_resource_id, - a_plane_resource_id, color_space); + CREATE_QUAD_11_ALL(YUVVideoDrawQuad, ya_tex_coord_rect, uv_tex_coord_rect, + ya_tex_size, uv_tex_size, y_plane_resource_id, + u_plane_resource_id, v_plane_resource_id, + a_plane_resource_id, color_space, resource_offset, + resource_multiplier); EXPECT_EQ(DrawQuad::YUV_VIDEO_CONTENT, copy_quad->material); EXPECT_EQ(ya_tex_coord_rect, copy_quad->ya_tex_coord_rect); EXPECT_EQ(uv_tex_coord_rect, copy_quad->uv_tex_coord_rect); @@ -657,6 +688,8 @@ EXPECT_EQ(v_plane_resource_id, copy_quad->v_plane_resource_id()); EXPECT_EQ(a_plane_resource_id, copy_quad->a_plane_resource_id()); EXPECT_EQ(color_space, copy_quad->color_space); + EXPECT_EQ(resource_offset, copy_quad->resource_offset); + EXPECT_EQ(resource_multiplier, copy_quad->resource_multiplier); } TEST(DrawQuadTest, CopyPictureDrawQuad) { @@ -879,10 +912,11 @@ YUVVideoDrawQuad::ColorSpace color_space = YUVVideoDrawQuad::JPEG; CREATE_SHARED_STATE(); - CREATE_QUAD_11_NEW(YUVVideoDrawQuad, opaque_rect, visible_rect, + CREATE_QUAD_13_NEW(YUVVideoDrawQuad, opaque_rect, visible_rect, ya_tex_coord_rect, uv_tex_coord_rect, ya_tex_size, uv_tex_size, y_plane_resource_id, u_plane_resource_id, - v_plane_resource_id, a_plane_resource_id, color_space); + v_plane_resource_id, a_plane_resource_id, color_space, 0.0, + 1.0); EXPECT_EQ(DrawQuad::YUV_VIDEO_CONTENT, copy_quad->material); EXPECT_EQ(y_plane_resource_id, quad_new->y_plane_resource_id()); EXPECT_EQ(u_plane_resource_id, quad_new->u_plane_resource_id());
diff --git a/cc/quads/render_pass_id.h b/cc/quads/render_pass_id.h index a0d48ea..68a2051 100644 --- a/cc/quads/render_pass_id.h +++ b/cc/quads/render_pass_id.h
@@ -6,6 +6,7 @@ #define CC_QUADS_RENDER_PASS_ID_H_ #include <stddef.h> +#include <stdint.h> #include <tuple> @@ -17,10 +18,11 @@ class CC_EXPORT RenderPassId { public: int layer_id; - size_t index; + uint32_t index; RenderPassId() : layer_id(-1), index(0) {} - RenderPassId(int layer_id, size_t index) : layer_id(layer_id), index(index) {} + RenderPassId(int layer_id, uint32_t index) + : layer_id(layer_id), index(index) {} void* AsTracingId() const; bool IsValid() const { return layer_id >= 0; }
diff --git a/cc/quads/yuv_video_draw_quad.cc b/cc/quads/yuv_video_draw_quad.cc index f9a878a..93a0c91 100644 --- a/cc/quads/yuv_video_draw_quad.cc +++ b/cc/quads/yuv_video_draw_quad.cc
@@ -27,7 +27,9 @@ unsigned u_plane_resource_id, unsigned v_plane_resource_id, unsigned a_plane_resource_id, - ColorSpace color_space) { + ColorSpace color_space, + float offset, + float multiplier) { bool needs_blending = false; DrawQuad::SetAll(shared_quad_state, DrawQuad::YUV_VIDEO_CONTENT, rect, opaque_rect, visible_rect, needs_blending); @@ -41,6 +43,8 @@ resources.ids[kAPlaneResourceIdIndex] = a_plane_resource_id; resources.count = a_plane_resource_id ? 4 : 3; this->color_space = color_space; + this->resource_offset = offset; + this->resource_multiplier = multiplier; } void YUVVideoDrawQuad::SetAll(const SharedQuadState* shared_quad_state, @@ -56,7 +60,9 @@ unsigned u_plane_resource_id, unsigned v_plane_resource_id, unsigned a_plane_resource_id, - ColorSpace color_space) { + ColorSpace color_space, + float offset, + float multiplier) { DrawQuad::SetAll(shared_quad_state, DrawQuad::YUV_VIDEO_CONTENT, rect, opaque_rect, visible_rect, needs_blending); this->ya_tex_coord_rect = ya_tex_coord_rect; @@ -69,6 +75,8 @@ resources.ids[kAPlaneResourceIdIndex] = a_plane_resource_id; resources.count = resources.ids[kAPlaneResourceIdIndex] ? 4 : 3; this->color_space = color_space; + this->resource_offset = offset; + this->resource_multiplier = multiplier; } const YUVVideoDrawQuad* YUVVideoDrawQuad::MaterialCast(
diff --git a/cc/quads/yuv_video_draw_quad.h b/cc/quads/yuv_video_draw_quad.h index 1a72078d..015d5b7 100644 --- a/cc/quads/yuv_video_draw_quad.h +++ b/cc/quads/yuv_video_draw_quad.h
@@ -43,7 +43,9 @@ unsigned u_plane_resource_id, unsigned v_plane_resource_id, unsigned a_plane_resource_id, - ColorSpace color_space); + ColorSpace color_space, + float offset, + float multiplier); void SetAll(const SharedQuadState* shared_quad_state, const gfx::Rect& rect, @@ -61,13 +63,17 @@ unsigned u_plane_resource_id, unsigned v_plane_resource_id, unsigned a_plane_resource_id, - ColorSpace color_space); + ColorSpace color_space, + float offset, + float multiplier); gfx::RectF ya_tex_coord_rect; gfx::RectF uv_tex_coord_rect; gfx::Size ya_tex_size; gfx::Size uv_tex_size; ColorSpace color_space; + float resource_offset = 0.0f; + float resource_multiplier = 1.0f; static const YUVVideoDrawQuad* MaterialCast(const DrawQuad*);
diff --git a/cc/raster/tile_task_worker_pool.cc b/cc/raster/tile_task_worker_pool.cc index 668aa664..d4549c7 100644 --- a/cc/raster/tile_task_worker_pool.cc +++ b/cc/raster/tile_task_worker_pool.cc
@@ -50,6 +50,7 @@ case RGB_565: case ETC1: case RED_8: + case LUMINANCE_F16: return false; } NOTREACHED();
diff --git a/cc/resources/platform_color_unittest.cc b/cc/resources/platform_color_unittest.cc index bbc4c06..49c8353b 100644 --- a/cc/resources/platform_color_unittest.cc +++ b/cc/resources/platform_color_unittest.cc
@@ -34,6 +34,7 @@ case RGB_565: case ETC1: case RED_8: + case LUMINANCE_F16: EXPECT_FALSE(PlatformColor::SameComponentOrder(format)); break; }
diff --git a/cc/resources/resource_format.cc b/cc/resources/resource_format.cc index e11c097b..ba4e65d 100644 --- a/cc/resources/resource_format.cc +++ b/cc/resources/resource_format.cc
@@ -21,6 +21,7 @@ case LUMINANCE_8: case RGB_565: case RED_8: + case LUMINANCE_F16: NOTREACHED(); break; } @@ -35,6 +36,7 @@ return 32; case RGBA_4444: case RGB_565: + case LUMINANCE_F16: return 16; case ALPHA_8: case LUMINANCE_8: @@ -57,7 +59,8 @@ GL_UNSIGNED_BYTE, // LUMINANCE_8 GL_UNSIGNED_SHORT_5_6_5, // RGB_565, GL_UNSIGNED_BYTE, // ETC1 - GL_UNSIGNED_BYTE // RED_8 + GL_UNSIGNED_BYTE, // RED_8 + GL_HALF_FLOAT_OES, // LUMINANCE_F16 }; static_assert(arraysize(format_gl_data_type) == (RESOURCE_FORMAT_MAX + 1), "format_gl_data_type does not handle all cases."); @@ -75,7 +78,8 @@ GL_LUMINANCE, // LUMINANCE_8 GL_RGB, // RGB_565 GL_ETC1_RGB8_OES, // ETC1 - GL_RED_EXT // RED_8 + GL_RED_EXT, // RED_8 + GL_LUMINANCE, // LUMINANCE_F16 }; static_assert(arraysize(format_gl_data_format) == (RESOURCE_FORMAT_MAX + 1), "format_gl_data_format does not handle all cases."); @@ -101,6 +105,7 @@ case LUMINANCE_8: case RGB_565: case ETC1: + case LUMINANCE_F16: break; } NOTREACHED();
diff --git a/cc/resources/resource_format.h b/cc/resources/resource_format.h index 79b815f..9a900d4 100644 --- a/cc/resources/resource_format.h +++ b/cc/resources/resource_format.h
@@ -27,7 +27,8 @@ RGB_565, ETC1, RED_8, - RESOURCE_FORMAT_MAX = RED_8, + LUMINANCE_F16, + RESOURCE_FORMAT_MAX = LUMINANCE_F16, }; SkColorType ResourceFormatToSkColorType(ResourceFormat format);
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc index f2d79922..54411aa 100644 --- a/cc/resources/resource_provider.cc +++ b/cc/resources/resource_provider.cc
@@ -87,6 +87,7 @@ case RGB_565: case ETC1: case RED_8: + case LUMINANCE_F16: NOTREACHED(); break; } @@ -106,6 +107,7 @@ case RGB_565: case ETC1: case RED_8: + case LUMINANCE_F16: return false; } return false; @@ -391,14 +393,29 @@ resource->lost = true; } +ResourceFormat ResourceProvider::YuvResourceFormat(int bits) const { + if (bits > 8) { + return yuv_highbit_resource_format_; + } else { + return yuv_resource_format_; + } +} + ResourceId ResourceProvider::CreateResource(const gfx::Size& size, TextureHint hint, ResourceFormat format) { DCHECK(!size.IsEmpty()); switch (default_resource_type_) { case RESOURCE_TYPE_GPU_MEMORY_BUFFER: + // GPU memory buffers don't support LUMINANCE_F16. + if (format != LUMINANCE_F16) { + return CreateGLTexture(size, hint, RESOURCE_TYPE_GPU_MEMORY_BUFFER, + format); + } + // Fall through and use a regular texture. case RESOURCE_TYPE_GL_TEXTURE: - return CreateGLTexture(size, hint, default_resource_type_, format); + return CreateGLTexture(size, hint, RESOURCE_TYPE_GL_TEXTURE, format); + case RESOURCE_TYPE_BITMAP: DCHECK_EQ(RGBA_8888, format); return CreateBitmap(size); @@ -1077,6 +1094,9 @@ use_texture_usage_hint_ = caps.gpu.texture_usage; use_compressed_texture_etc1_ = caps.gpu.texture_format_etc1; yuv_resource_format_ = caps.gpu.texture_rg ? RED_8 : LUMINANCE_8; + yuv_highbit_resource_format_ = yuv_resource_format_; + if (caps.gpu.texture_half_float_linear) + yuv_highbit_resource_format_ = LUMINANCE_F16; use_sync_query_ = caps.gpu.sync_query; max_texture_size_ = 0; // Context expects cleared value. @@ -1150,38 +1170,31 @@ TransferableResourceArray* list) { DCHECK(thread_checker_.CalledOnValidThread()); GLES2Interface* gl = ContextGL(); - bool need_sync_token = false; - gpu::SyncToken new_sync_token; - std::vector<size_t> unverified_token_indexes; - for (ResourceIdArray::const_iterator it = resources.begin(); - it != resources.end(); - ++it) { - TransferableResource resource; - TransferResource(gl, *it, &resource); - need_sync_token |= (!resource.mailbox_holder.sync_token.HasData() && - !resource.is_software); - - if (resource.mailbox_holder.sync_token.HasData() && - !resource.mailbox_holder.sync_token.verified_flush()) { - unverified_token_indexes.push_back(list->size()); - } - - ++resources_.find(*it)->second.exported_count; - list->push_back(resource); - } - - // Fill out unverified sync tokens array. + // Lazily create any mailboxes and verify all unverified sync tokens. std::vector<GLbyte*> unverified_sync_tokens; - unverified_sync_tokens.reserve(unverified_token_indexes.size() + 1); - for (auto it = unverified_token_indexes.begin(); - it != unverified_token_indexes.end(); ++it) { - unverified_sync_tokens.push_back( - list->at(*it).mailbox_holder.sync_token.GetData()); + std::vector<Resource*> need_synchronization_resources; + for (const ResourceId id : resources) { + Resource* resource = GetResource(id); + bool need_synchronization = CreateMailboxAndBindResource(gl, resource); + + // TODO(dyen): Temporarily add missing sync tokens, eventually this should + // be removed as we guarantee all resources have associated sync tokens. + need_synchronization |= (resource->type != RESOURCE_TYPE_BITMAP && + !resource->mailbox.HasSyncToken()); + + if (output_surface_->capabilities().delegated_sync_points_required && + need_synchronization) { + need_synchronization_resources.push_back(resource); + } else if (resource->mailbox.HasSyncToken() && + !resource->mailbox.sync_token().verified_flush()) { + unverified_sync_tokens.push_back(resource->mailbox.GetSyncTokenData()); + } } - if (need_sync_token && - output_surface_->capabilities().delegated_sync_points_required) { + // Insert sync point to synchronize the mailbox creation or bound textures. + gpu::SyncToken new_sync_token; + if (!need_synchronization_resources.empty()) { const uint64_t fence_sync = gl->InsertFenceSyncCHROMIUM(); gl->OrderingBarrierCHROMIUM(); gl->GenUnverifiedSyncTokenCHROMIUM(fence_sync, new_sync_token.GetData()); @@ -1193,13 +1206,32 @@ unverified_sync_tokens.size()); } - if (new_sync_token.HasData()) { - for (TransferableResourceArray::iterator it = list->begin(); - it != list->end(); - ++it) { - if (!it->mailbox_holder.sync_token.HasData()) - it->mailbox_holder.sync_token = new_sync_token; - } + for (Resource* resource : need_synchronization_resources) { + resource->mailbox.set_sync_token(new_sync_token); + } + + // Transfer Resources + for (const ResourceId id : resources) { + TransferableResource resource; + TransferResource(gl, id, &resource); + + DCHECK(!output_surface_->capabilities().delegated_sync_points_required || + resource.mailbox_holder.sync_token.HasData() || + resource.is_software); + + ++resources_.find(id)->second.exported_count; + list->push_back(resource); + } + + // TODO(dyen): This is necessary because we do not guarantee all resource + // updates will insert sync tokens currently. Otherwise there is no way to + // know if a sync token is out of date or not. This can also be removed once + // proper resource state tracking is completed. Note that this used to be done + // in the TransferResource step, but will now fail if a resource is used in + // the same resource list twice. + for (const ResourceId id : resources) { + Resource* resource = GetResource(id); + resource->mailbox.set_sync_token(gpu::SyncToken()); } } @@ -1334,6 +1366,36 @@ } } +bool ResourceProvider::CreateMailboxAndBindResource( + gpu::gles2::GLES2Interface* gl, + Resource* resource) { + if (resource->type != RESOURCE_TYPE_BITMAP) { + bool did_create_or_bind = false; + if (!resource->mailbox.IsValid()) { + LazyCreate(resource); + + gpu::MailboxHolder mailbox_holder; + mailbox_holder.texture_target = resource->target; + gl->GenMailboxCHROMIUM(mailbox_holder.mailbox.name); + gl->ProduceTextureDirectCHROMIUM(resource->gl_id, + mailbox_holder.texture_target, + mailbox_holder.mailbox.name); + resource->mailbox = TextureMailbox(mailbox_holder); + did_create_or_bind = true; + } + + if (resource->image_id && resource->dirty_image) { + DCHECK(resource->gl_id); + DCHECK(resource->origin == Resource::INTERNAL); + BindImageForSampling(resource); + did_create_or_bind = true; + } + + return did_create_or_bind; + } + return false; +} + void ResourceProvider::TransferResource(GLES2Interface* gl, ResourceId id, TransferableResource* resource) { @@ -1353,33 +1415,14 @@ if (source->type == RESOURCE_TYPE_BITMAP) { resource->mailbox_holder.mailbox = source->shared_bitmap_id; resource->is_software = true; - } else if (!source->mailbox.IsValid()) { - LazyCreate(source); - DCHECK(source->gl_id); - DCHECK(source->origin == Resource::INTERNAL); - if (source->image_id && source->dirty_image) - BindImageForSampling(source); - // This is a resource allocated by the compositor, we need to produce it. - // Don't set a sync point, the caller will do it. - gl->GenMailboxCHROMIUM(resource->mailbox_holder.mailbox.name); - gl->ProduceTextureDirectCHROMIUM(source->gl_id, - resource->mailbox_holder.texture_target, - resource->mailbox_holder.mailbox.name); - - source->mailbox = TextureMailbox(resource->mailbox_holder); } else { + DCHECK(source->mailbox.IsValid()); DCHECK(source->mailbox.IsTexture()); - if (source->image_id && source->dirty_image) { - DCHECK(source->gl_id); - DCHECK(source->origin == Resource::INTERNAL); - BindImageForSampling(source); - } // This is either an external resource, or a compositor resource that we // already exported. Make sure to forward the sync point that we were given. resource->mailbox_holder.mailbox = source->mailbox.mailbox(); resource->mailbox_holder.texture_target = source->mailbox.target(); resource->mailbox_holder.sync_token = source->mailbox.sync_token(); - source->mailbox.set_sync_token(gpu::SyncToken()); } }
diff --git a/cc/resources/resource_provider.h b/cc/resources/resource_provider.h index 578fd59..f79ac190 100644 --- a/cc/resources/resource_provider.h +++ b/cc/resources/resource_provider.h
@@ -103,7 +103,7 @@ ResourceFormat best_render_buffer_format() const { return best_render_buffer_format_; } - ResourceFormat yuv_resource_format() const { return yuv_resource_format_; } + ResourceFormat YuvResourceFormat(int bits) const; bool use_sync_query() const { return use_sync_query_; } gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager() { return gpu_memory_buffer_manager_; @@ -546,6 +546,12 @@ static void PopulateSkBitmapWithResource(SkBitmap* sk_bitmap, const Resource* resource); + // This creates the resource mailbox and also binds the texture if dirty. This + // is meant to be called lazily internally and returns true if a mailbox + // was created or if the resource was bound. + bool CreateMailboxAndBindResource(gpu::gles2::GLES2Interface* gl, + Resource* resource); + void TransferResource(gpu::gles2::GLES2Interface* gl, ResourceId id, TransferableResource* resource); @@ -590,6 +596,7 @@ bool use_texture_usage_hint_; bool use_compressed_texture_etc1_; ResourceFormat yuv_resource_format_; + ResourceFormat yuv_highbit_resource_format_; int max_texture_size_; ResourceFormat best_texture_format_; ResourceFormat best_render_buffer_format_;
diff --git a/cc/resources/resource_provider_unittest.cc b/cc/resources/resource_provider_unittest.cc index abee5c2..a54e125 100644 --- a/cc/resources/resource_provider_unittest.cc +++ b/cc/resources/resource_provider_unittest.cc
@@ -2502,7 +2502,6 @@ child_resource_provider_ = nullptr; // Since the resource is in the parent, the child considers it lost. - EXPECT_FALSE(release_sync_token.HasData()); EXPECT_TRUE(lost_resource); }
diff --git a/cc/resources/texture_mailbox.h b/cc/resources/texture_mailbox.h index 42109c68..23885ffa 100644 --- a/cc/resources/texture_mailbox.h +++ b/cc/resources/texture_mailbox.h
@@ -39,6 +39,9 @@ bool IsValid() const { return IsTexture() || IsSharedMemory(); } bool IsTexture() const { return !mailbox_holder_.mailbox.IsZero(); } bool IsSharedMemory() const { return shared_bitmap_ != NULL; } + bool HasSyncToken() const { return mailbox_holder_.sync_token.HasData(); } + + int8_t* GetSyncTokenData() { return mailbox_holder_.sync_token.GetData(); } bool Equals(const TextureMailbox&) const;
diff --git a/cc/resources/video_resource_updater.cc b/cc/resources/video_resource_updater.cc index 216e48f..6f8bb4b 100644 --- a/cc/resources/video_resource_updater.cc +++ b/cc/resources/video_resource_updater.cc
@@ -10,6 +10,7 @@ #include <algorithm> #include "base/bind.h" +#include "base/bit_cast.h" #include "base/trace_event/trace_event.h" #include "cc/base/math_util.h" #include "cc/output/gl_renderer.h" @@ -69,6 +70,12 @@ case media::PIXEL_FORMAT_RGB32: case media::PIXEL_FORMAT_MJPEG: case media::PIXEL_FORMAT_MT21: + case media::PIXEL_FORMAT_YUV420P9: + case media::PIXEL_FORMAT_YUV422P9: + case media::PIXEL_FORMAT_YUV444P9: + case media::PIXEL_FORMAT_YUV420P10: + case media::PIXEL_FORMAT_YUV422P10: + case media::PIXEL_FORMAT_YUV444P10: case media::PIXEL_FORMAT_UNKNOWN: break; } @@ -140,8 +147,10 @@ } VideoFrameExternalResources::VideoFrameExternalResources() - : type(NONE), read_lock_fences_enabled(false) { -} + : type(NONE), + read_lock_fences_enabled(false), + offset(0.0f), + multiplier(1.0f) {} VideoFrameExternalResources::~VideoFrameExternalResources() {} @@ -219,11 +228,15 @@ const scoped_refptr<media::VideoFrame>& input_frame, bool software_compositor, size_t plane_index) { - if (!software_compositor) { - return media::VideoFrame::PlaneSize( - input_frame->format(), plane_index, input_frame->coded_size()); - } - return input_frame->coded_size(); + gfx::Size coded_size = input_frame->coded_size(); + if (software_compositor) + return coded_size; + + int plane_width = media::VideoFrame::Columns( + plane_index, input_frame->format(), coded_size.width()); + int plane_height = media::VideoFrame::Rows(plane_index, input_frame->format(), + coded_size.height()); + return gfx::Size(plane_width, plane_height); } VideoFrameExternalResources VideoResourceUpdater::CreateForSoftwarePlanes( @@ -231,6 +244,41 @@ TRACE_EVENT0("cc", "VideoResourceUpdater::CreateForSoftwarePlanes"); const media::VideoPixelFormat input_frame_format = video_frame->format(); + // TODO(hubbe): Make this a video frame method. + int bits_per_channel = 0; + switch (input_frame_format) { + case media::PIXEL_FORMAT_UNKNOWN: + NOTREACHED(); + // Fall through! + case media::PIXEL_FORMAT_I420: + case media::PIXEL_FORMAT_YV12: + case media::PIXEL_FORMAT_YV16: + case media::PIXEL_FORMAT_YV12A: + case media::PIXEL_FORMAT_YV24: + case media::PIXEL_FORMAT_NV12: + case media::PIXEL_FORMAT_NV21: + case media::PIXEL_FORMAT_UYVY: + case media::PIXEL_FORMAT_YUY2: + case media::PIXEL_FORMAT_ARGB: + case media::PIXEL_FORMAT_XRGB: + case media::PIXEL_FORMAT_RGB24: + case media::PIXEL_FORMAT_RGB32: + case media::PIXEL_FORMAT_MJPEG: + case media::PIXEL_FORMAT_MT21: + bits_per_channel = 8; + break; + case media::PIXEL_FORMAT_YUV420P9: + case media::PIXEL_FORMAT_YUV422P9: + case media::PIXEL_FORMAT_YUV444P9: + bits_per_channel = 9; + break; + case media::PIXEL_FORMAT_YUV420P10: + case media::PIXEL_FORMAT_YUV422P10: + case media::PIXEL_FORMAT_YUV444P10: + bits_per_channel = 10; + break; + } + // Only YUV software video frames are supported. if (!media::IsYuvPlanar(input_frame_format)) { NOTREACHED() << media::VideoPixelFormatToString(input_frame_format); @@ -240,7 +288,8 @@ const bool software_compositor = context_provider_ == NULL; ResourceFormat output_resource_format = - resource_provider_->yuv_resource_format(); + resource_provider_->YuvResourceFormat(bits_per_channel); + size_t output_plane_count = media::VideoFrame::NumPlanes(input_frame_format); // TODO(skaslev): If we're in software compositing mode, we do the YUV -> RGB @@ -352,7 +401,7 @@ PlaneResource& plane_resource = *plane_resources[i]; // Update each plane's resource id with its content. DCHECK_EQ(plane_resource.resource_format, - resource_provider_->yuv_resource_format()); + resource_provider_->YuvResourceFormat(bits_per_channel)); if (!PlaneResourceMatchesUniqueID(plane_resource, video_frame.get(), i)) { // We need to transfer data from |video_frame| to the plane resource. @@ -361,9 +410,9 @@ // The |resource_size_pixels| is the size of the resource we want to // upload to. gfx::Size resource_size_pixels = plane_resource.resource_size; - // The |video_stride_pixels| is the width of the video frame we are + // The |video_stride_bytes| is the width of the video frame we are // uploading (including non-frame data to fill in the stride). - int video_stride_pixels = video_frame->stride(i); + int video_stride_bytes = video_frame->stride(i); size_t bytes_per_row = ResourceUtil::UncheckedWidthInBytes<size_t>( resource_size_pixels.width(), plane_resource.resource_format); @@ -372,10 +421,24 @@ size_t upload_image_stride = MathUtil::UncheckedRoundUp<size_t>(bytes_per_row, 4u); + bool needs_conversion = false; + int shift = 0; + + // LUMINANCE_F16 uses half-floats, so we always need a conversion step. + if (plane_resource.resource_format == LUMINANCE_F16) { + needs_conversion = true; + // Note that the current method of converting integers to half-floats + // stops working if you have more than 10 bits of data. + DCHECK_LE(bits_per_channel, 10); + } else if (bits_per_channel > 8) { + // If bits_per_channel > 8 and we can't use LUMINANCE_F16, we need to + // shift the data down and create an 8-bit texture. + needs_conversion = true; + shift = bits_per_channel - 8; + } const uint8_t* pixels; - size_t video_bytes_per_row = ResourceUtil::UncheckedWidthInBytes<size_t>( - video_stride_pixels, plane_resource.resource_format); - if (upload_image_stride == video_bytes_per_row) { + if (static_cast<int>(upload_image_stride) == video_stride_bytes && + !needs_conversion) { pixels = video_frame->data(i); } else { // Avoid malloc for each frame/plane if possible. @@ -383,11 +446,36 @@ upload_image_stride * resource_size_pixels.height(); if (upload_pixels_.size() < needed_size) upload_pixels_.resize(needed_size); + for (int row = 0; row < resource_size_pixels.height(); ++row) { - uint8_t* dst = &upload_pixels_[upload_image_stride * row]; - const uint8_t* src = - video_frame->data(i) + (video_bytes_per_row * row); - memcpy(dst, src, bytes_per_row); + if (plane_resource.resource_format == LUMINANCE_F16) { + uint16_t* dst = reinterpret_cast<uint16_t*>( + &upload_pixels_[upload_image_stride * row]); + const uint16_t* src = reinterpret_cast<uint16_t*>( + video_frame->data(i) + (video_stride_bytes * row)); + // Micro-benchmarking indicates that the compiler does + // a good enough job of optimizing this loop that trying + // to manually operate on one uint64 at a time is not + // actually helpful. + // Note to future optimizers: Benchmark your optimizations! + for (size_t i = 0; i < bytes_per_row / 2; i++) + dst[i] = src[i] | 0x3800; + } else if (shift != 0) { + // We have more-than-8-bit input which we need to shift + // down to fit it into an 8-bit texture. + uint8_t* dst = &upload_pixels_[upload_image_stride * row]; + const uint16_t* src = reinterpret_cast<uint16_t*>( + video_frame->data(i) + (video_stride_bytes * row)); + for (size_t i = 0; i < bytes_per_row; i++) + dst[i] = src[i] >> shift; + } else { + // Input and output are the same size and format, but + // differ in stride, copy one row at a time. + uint8_t* dst = &upload_pixels_[upload_image_stride * row]; + const uint8_t* src = + video_frame->data(i) + (video_stride_bytes * row); + memcpy(dst, src, bytes_per_row); + } } pixels = &upload_pixels_[0]; } @@ -397,6 +485,29 @@ SetPlaneResourceUniqueId(video_frame.get(), i, &plane_resource); } + if (plane_resource.resource_format == LUMINANCE_F16) { + // By OR-ing with 0x3800, 10-bit numbers become half-floats in the + // range [0.5..1) and 9-bit numbers get the range [0.5..0.75). + // + // Half-floats are evaluated as: + // float value = pow(2.0, exponent - 25) * (0x400 + fraction); + // + // In our case the exponent is 14 (since we or with 0x3800) and + // pow(2.0, 14-25) * 0x400 evaluates to 0.5 (our offset) and + // pow(2.0, 14-25) * fraction is [0..0.49951171875] for 10-bit and + // [0..0.24951171875] for 9-bit. + // + // (https://en.wikipedia.org/wiki/Half-precision_floating-point_format) + // + // PLEASE NOTE: This doesn't work if bits_per_channel is > 10. + // PLEASE NOTE: All planes are assumed to use the same multiplier/offset. + external_resources.offset = 0.5f; + // Max value from input data. + int max_input_value = (1 << bits_per_channel) - 1; + // 2 << 11 = 2048 would be 1.0 with our exponent. + external_resources.multiplier = 2048.0 / max_input_value; + } + external_resources.mailboxes.push_back( TextureMailbox(plane_resource.mailbox, gpu::SyncToken(), resource_provider_->GetResourceTextureTarget(
diff --git a/cc/resources/video_resource_updater.h b/cc/resources/video_resource_updater.h index e80a849..4e11110 100644 --- a/cc/resources/video_resource_updater.h +++ b/cc/resources/video_resource_updater.h
@@ -63,6 +63,11 @@ std::vector<unsigned> software_resources; ReleaseCallbackImpl software_release_callback; + // Used by hardware textures which do not return values in the 0-1 range. + // After a lookup, subtract offset and multiply by multiplier. + float offset; + float multiplier; + VideoFrameExternalResources(); ~VideoFrameExternalResources(); };
diff --git a/cc/resources/video_resource_updater_unittest.cc b/cc/resources/video_resource_updater_unittest.cc index 3063182..2595d5a 100644 --- a/cc/resources/video_resource_updater_unittest.cc +++ b/cc/resources/video_resource_updater_unittest.cc
@@ -94,6 +94,10 @@ output_surface3d_ = FakeOutputSurface::Create3d(std::move(context3d)); CHECK(output_surface3d_->BindToClient(&client_)); + } + + void SetUp() override { + testing::Test::SetUp(); output_surface_software_ = FakeOutputSurface::CreateSoftware( make_scoped_ptr(new SoftwareOutputDevice)); @@ -131,6 +135,43 @@ return video_frame; } + scoped_refptr<media::VideoFrame> CreateWonkyTestYUVVideoFrame() { + const int kDimension = 10; + const int kYWidth = kDimension + 5; + const int kUWidth = (kYWidth + 1) / 2 + 200; + const int kVWidth = (kYWidth + 1) / 2 + 1; + static uint8_t y_data[kYWidth * kDimension] = {0}; + static uint8_t u_data[kUWidth * kDimension] = {0}; + static uint8_t v_data[kVWidth * kDimension] = {0}; + + scoped_refptr<media::VideoFrame> video_frame = + media::VideoFrame::WrapExternalYuvData( + media::PIXEL_FORMAT_YV16, // format + gfx::Size(kYWidth, kDimension), // coded_size + gfx::Rect(2, 0, kDimension, kDimension), // visible_rect + gfx::Size(kDimension, kDimension), // natural_size + -kYWidth, // y_stride (negative) + kUWidth, // u_stride + kVWidth, // v_stride + y_data + kYWidth * (kDimension - 1), // y_data + u_data, // u_data + v_data, // v_data + base::TimeDelta()); // timestamp + EXPECT_TRUE(video_frame); + return video_frame; + } + + scoped_refptr<media::VideoFrame> CreateTestHighBitFrame() { + const int kDimension = 10; + gfx::Size size(kDimension, kDimension); + + scoped_refptr<media::VideoFrame> video_frame(media::VideoFrame::CreateFrame( + media::PIXEL_FORMAT_YUV420P10, size, gfx::Rect(size), size, + base::TimeDelta())); + EXPECT_TRUE(video_frame); + return video_frame; + } + static void ReleaseMailboxCB(const gpu::SyncToken& sync_token) {} scoped_refptr<media::VideoFrame> CreateTestHardwareVideoFrame( @@ -217,6 +258,61 @@ EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); } +TEST_F(VideoResourceUpdaterTest, HighBitFrameNoF16) { + VideoResourceUpdater updater(output_surface3d_->context_provider(), + resource_provider3d_.get()); + scoped_refptr<media::VideoFrame> video_frame = CreateTestHighBitFrame(); + + VideoFrameExternalResources resources = + updater.CreateExternalResourcesFromVideoFrame(video_frame); + EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); +} + +class VideoResourceUpdaterTestWithF16 : public VideoResourceUpdaterTest { + public: + VideoResourceUpdaterTestWithF16() : VideoResourceUpdaterTest() { + context3d_->set_support_texture_half_float_linear(true); + } +}; + +TEST_F(VideoResourceUpdaterTestWithF16, HighBitFrame) { + VideoResourceUpdater updater(output_surface3d_->context_provider(), + resource_provider3d_.get()); + scoped_refptr<media::VideoFrame> video_frame = CreateTestHighBitFrame(); + + VideoFrameExternalResources resources = + updater.CreateExternalResourcesFromVideoFrame(video_frame); + EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); +} + +TEST_F(VideoResourceUpdaterTest, HighBitFrameSoftwareCompositor) { + VideoResourceUpdater updater(nullptr, resource_provider_software_.get()); + scoped_refptr<media::VideoFrame> video_frame = CreateTestHighBitFrame(); + + VideoFrameExternalResources resources = + updater.CreateExternalResourcesFromVideoFrame(video_frame); + EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); +} + +TEST_F(VideoResourceUpdaterTest, WonkySoftwareFrame) { + VideoResourceUpdater updater(output_surface3d_->context_provider(), + resource_provider3d_.get()); + scoped_refptr<media::VideoFrame> video_frame = CreateWonkyTestYUVVideoFrame(); + + VideoFrameExternalResources resources = + updater.CreateExternalResourcesFromVideoFrame(video_frame); + EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); +} + +TEST_F(VideoResourceUpdaterTest, WonkySoftwareFrameSoftwareCompositor) { + VideoResourceUpdater updater(nullptr, resource_provider_software_.get()); + scoped_refptr<media::VideoFrame> video_frame = CreateWonkyTestYUVVideoFrame(); + + VideoFrameExternalResources resources = + updater.CreateExternalResourcesFromVideoFrame(video_frame); + EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); +} + TEST_F(VideoResourceUpdaterTest, ReuseResource) { VideoResourceUpdater updater(output_surface3d_->context_provider(), resource_provider3d_.get()); @@ -405,5 +501,6 @@ // that extension is supported. EXPECT_FALSE(context3d_->WasImmutableTextureCreated()); } + } // namespace } // namespace cc
diff --git a/cc/test/data/filter_with_giant_crop_rect.png b/cc/test/data/filter_with_giant_crop_rect.png new file mode 100644 index 0000000..34392bc --- /dev/null +++ b/cc/test/data/filter_with_giant_crop_rect.png Binary files differ
diff --git a/cc/test/fake_delegated_renderer_layer.cc b/cc/test/fake_delegated_renderer_layer.cc deleted file mode 100644 index 06d732a..0000000 --- a/cc/test/fake_delegated_renderer_layer.cc +++ /dev/null
@@ -1,24 +0,0 @@ -// Copyright 2013 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 "cc/test/fake_delegated_renderer_layer.h" - -#include "cc/test/fake_delegated_renderer_layer_impl.h" - -namespace cc { - -FakeDelegatedRendererLayer::FakeDelegatedRendererLayer( - const LayerSettings& settings, - DelegatedFrameProvider* frame_provider) - : DelegatedRendererLayer(settings, frame_provider) { -} - -FakeDelegatedRendererLayer::~FakeDelegatedRendererLayer() {} - -scoped_ptr<LayerImpl> FakeDelegatedRendererLayer::CreateLayerImpl( - LayerTreeImpl* tree_impl) { - return FakeDelegatedRendererLayerImpl::Create(tree_impl, layer_id_); -} - -} // namespace cc
diff --git a/cc/test/fake_delegated_renderer_layer.h b/cc/test/fake_delegated_renderer_layer.h deleted file mode 100644 index 76e4c648..0000000 --- a/cc/test/fake_delegated_renderer_layer.h +++ /dev/null
@@ -1,33 +0,0 @@ -// Copyright 2013 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 CC_TEST_FAKE_DELEGATED_RENDERER_LAYER_H_ -#define CC_TEST_FAKE_DELEGATED_RENDERER_LAYER_H_ - -#include "cc/layers/delegated_renderer_layer.h" - -namespace cc { - -class LayerSettings; - -class FakeDelegatedRendererLayer : public DelegatedRendererLayer { - public: - static scoped_refptr<FakeDelegatedRendererLayer> Create( - const LayerSettings& settings, - DelegatedFrameProvider* frame_provider) { - return make_scoped_refptr( - new FakeDelegatedRendererLayer(settings, frame_provider)); - } - - scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) override; - - protected: - explicit FakeDelegatedRendererLayer(const LayerSettings& settings, - DelegatedFrameProvider* frame_provider); - ~FakeDelegatedRendererLayer() override; -}; - -} // namespace cc - -#endif // CC_TEST_FAKE_DELEGATED_RENDERER_LAYER_H_
diff --git a/cc/test/fake_delegated_renderer_layer_impl.cc b/cc/test/fake_delegated_renderer_layer_impl.cc deleted file mode 100644 index 1984c6f..0000000 --- a/cc/test/fake_delegated_renderer_layer_impl.cc +++ /dev/null
@@ -1,61 +0,0 @@ -// Copyright 2013 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 "cc/test/fake_delegated_renderer_layer_impl.h" - -#include "base/bind.h" -#include "cc/output/delegated_frame_data.h" -#include "cc/quads/draw_quad.h" -#include "cc/resources/returned_resource.h" -#include "cc/trees/layer_tree_impl.h" - -namespace cc { - -FakeDelegatedRendererLayerImpl::FakeDelegatedRendererLayerImpl( - LayerTreeImpl* tree_impl, - int id) - : DelegatedRendererLayerImpl(tree_impl, id) { -} - -FakeDelegatedRendererLayerImpl::~FakeDelegatedRendererLayerImpl() {} - -scoped_ptr<LayerImpl> FakeDelegatedRendererLayerImpl::CreateLayerImpl( - LayerTreeImpl* tree_impl) { - return FakeDelegatedRendererLayerImpl::Create(tree_impl, id()); -} - -ResourceProvider::ResourceIdSet FakeDelegatedRendererLayerImpl::Resources() - const { - return ResourcesForTesting(); -} - -void NoopReturnCallback(const ReturnedResourceArray& returned, - BlockingTaskRunner* main_thread_task_runner) { -} - -void FakeDelegatedRendererLayerImpl::SetFrameDataForRenderPasses( - float device_scale_factor, - const RenderPassList& pass_list) { - scoped_ptr<DelegatedFrameData> delegated_frame(new DelegatedFrameData); - delegated_frame->device_scale_factor = device_scale_factor; - RenderPass::CopyAll(pass_list, &delegated_frame->render_pass_list); - - ResourceProvider* resource_provider = layer_tree_impl()->resource_provider(); - - for (const auto& pass : delegated_frame->render_pass_list) { - for (const auto& quad : pass->quad_list) { - for (ResourceId resource_id : quad->resources) { - TransferableResource resource; - resource.id = resource_id; - resource.mailbox_holder.texture_target = - resource_provider->GetResourceTextureTarget(resource_id); - delegated_frame->resource_list.push_back(resource); - } - } - } - - CreateChildIdIfNeeded(base::Bind(&NoopReturnCallback)); - SetFrameData(delegated_frame.get(), gfx::Rect()); -} -} // namespace cc
diff --git a/cc/test/fake_delegated_renderer_layer_impl.h b/cc/test/fake_delegated_renderer_layer_impl.h deleted file mode 100644 index 5a23443..0000000 --- a/cc/test/fake_delegated_renderer_layer_impl.h +++ /dev/null
@@ -1,37 +0,0 @@ -// Copyright 2013 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 CC_TEST_FAKE_DELEGATED_RENDERER_LAYER_IMPL_H_ -#define CC_TEST_FAKE_DELEGATED_RENDERER_LAYER_IMPL_H_ - -#include "cc/layers/delegated_renderer_layer_impl.h" - -namespace cc { - -class FakeDelegatedRendererLayerImpl : public DelegatedRendererLayerImpl { - public: - static scoped_ptr<FakeDelegatedRendererLayerImpl> Create( - LayerTreeImpl* tree_impl, int id) { - return make_scoped_ptr(new FakeDelegatedRendererLayerImpl(tree_impl, id)); - } - ~FakeDelegatedRendererLayerImpl() override; - - scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) override; - - int ChildId() const { return ChildIdForTesting(); } - const RenderPassList& RenderPassesInDrawOrder() const { - return RenderPassesInDrawOrderForTesting(); - } - ResourceProvider::ResourceIdSet Resources() const; - - void SetFrameDataForRenderPasses(float device_scale_factor, - const RenderPassList& pass_list); - - protected: - FakeDelegatedRendererLayerImpl(LayerTreeImpl* tree_impl, int id); -}; - -} // namespace cc - -#endif // CC_TEST_FAKE_DELEGATED_RENDERER_LAYER_IMPL_H_
diff --git a/cc/test/fake_layer_tree_host_impl.cc b/cc/test/fake_layer_tree_host_impl.cc index ae477040..3b9c1e2 100644 --- a/cc/test/fake_layer_tree_host_impl.cc +++ b/cc/test/fake_layer_tree_host_impl.cc
@@ -89,8 +89,6 @@ num_children_that_draw_content += RecursiveUpdateNumChildren(layer->children()[i].get()); } - if (layer->DrawsContent() && layer->HasDelegatedContent()) - num_children_that_draw_content += 1000; layer->SetNumDescendantsThatDrawContent(num_children_that_draw_content); return num_children_that_draw_content + (layer->DrawsContent() ? 1 : 0); }
diff --git a/cc/test/render_pass_test_utils.cc b/cc/test/render_pass_test_utils.cc index 186bfca..b746ea6 100644 --- a/cc/test/render_pass_test_utils.cc +++ b/cc/test/render_pass_test_utils.cc
@@ -297,7 +297,8 @@ gfx::RectF(.0f, .0f, 100.0f, 100.0f), gfx::RectF(.0f, .0f, 50.0f, 50.0f), gfx::Size(100, 100), gfx::Size(50, 50), plane_resources[0], plane_resources[1], - plane_resources[2], plane_resources[3], color_space); + plane_resources[2], plane_resources[3], color_space, 0.0, + 1.0); } } // namespace cc
diff --git a/cc/test/test_web_graphics_context_3d.h b/cc/test/test_web_graphics_context_3d.h index 03ddf3f..f497ac44 100644 --- a/cc/test/test_web_graphics_context_3d.h +++ b/cc/test/test_web_graphics_context_3d.h
@@ -347,6 +347,9 @@ void set_support_texture_rectangle(bool support) { test_capabilities_.gpu.texture_rectangle = support; } + void set_support_texture_half_float_linear(bool support) { + test_capabilities_.gpu.texture_half_float_linear = support; + } // When this context is lost, all contexts in its share group are also lost. void add_share_group_context(TestWebGraphicsContext3D* context3d) {
diff --git a/cc/trees/layer_tree_host_common.cc b/cc/trees/layer_tree_host_common.cc index 9dd0c22..b094c948 100644 --- a/cc/trees/layer_tree_host_common.cc +++ b/cc/trees/layer_tree_host_common.cc
@@ -2625,12 +2625,6 @@ DCHECK(!render_to_separate_surface || IsRootLayer(layer)); return; } - - if (layer->HasContributingDelegatedRenderPasses()) { - layer->render_target() - ->render_surface() - ->AddContributingDelegatedRenderPassLayer(layer); - } } void CalculateRenderTarget(
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index 7eaa142f..28cd531 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc
@@ -901,20 +901,6 @@ frame->will_draw_layers.push_back(*it); - if (it->HasContributingDelegatedRenderPasses()) { - RenderPassId contributing_render_pass_id = - it->FirstContributingRenderPassId(); - while (true) { - RenderPass* pass = FindRenderPassById(frame->render_passes, - contributing_render_pass_id); - if (!pass) - break; - it->AppendQuads(pass, &append_quads_data); - contributing_render_pass_id = - it->NextContributingRenderPassId(contributing_render_pass_id); - } - } - it->AppendQuads(target_render_pass, &append_quads_data); // For layers that represent themselves, add composite frame timing @@ -1471,6 +1457,8 @@ if (tile_priority_params_changed) { active_tree_->set_needs_update_draw_properties(); + if (pending_tree_) + pending_tree_->set_needs_update_draw_properties(); // Compositor, not OutputSurface, is responsible for setting damage and // triggering redraw for constraint changes.
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc index fe913c32..d67e6e3 100644 --- a/cc/trees/layer_tree_host_impl_unittest.cc +++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -24,7 +24,6 @@ #include "cc/input/page_scale_animation.h" #include "cc/input/top_controls_manager.h" #include "cc/layers/append_quads_data.h" -#include "cc/layers/delegated_renderer_layer_impl.h" #include "cc/layers/heads_up_display_layer_impl.h" #include "cc/layers/io_surface_layer_impl.h" #include "cc/layers/layer_impl.h" @@ -9009,6 +9008,40 @@ EXPECT_FALSE(did_request_prepare_tiles_); } +TEST_F(LayerTreeHostImplTest, ExternalTileConstraintReflectedInPendingTree) { + EXPECT_FALSE(host_impl_->CommitToActiveTree()); + const gfx::Size layer_size(100, 100); + host_impl_->SetViewportSize(layer_size); + bool update_lcd_text = false; + + // Set up active and pending tree. + host_impl_->CreatePendingTree(); + host_impl_->pending_tree()->SetRootLayer( + LayerImpl::Create(host_impl_->pending_tree(), 1)); + host_impl_->pending_tree()->BuildPropertyTreesForTesting(); + host_impl_->pending_tree()->UpdateDrawProperties(update_lcd_text); + + host_impl_->ActivateSyncTree(); + host_impl_->active_tree()->BuildPropertyTreesForTesting(); + host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); + + host_impl_->CreatePendingTree(); + host_impl_->pending_tree()->UpdateDrawProperties(update_lcd_text); + host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); + + EXPECT_FALSE(host_impl_->pending_tree()->needs_update_draw_properties()); + EXPECT_FALSE(host_impl_->active_tree()->needs_update_draw_properties()); + + // Update external constraints should set_needs_update_draw_properties on + // both trees. + gfx::Transform external_transform; + gfx::Rect external_viewport(10, 20); + host_impl_->SetExternalTilePriorityConstraints(external_viewport, + external_transform); + EXPECT_TRUE(host_impl_->pending_tree()->needs_update_draw_properties()); + EXPECT_TRUE(host_impl_->active_tree()->needs_update_draw_properties()); +} + TEST_F(LayerTreeHostImplTest, ExternalViewportAffectsVisibleRects) { const gfx::Size layer_size(100, 100); SetupScrollAndContentsLayers(layer_size);
diff --git a/cc/trees/layer_tree_host_pixeltest_filters.cc b/cc/trees/layer_tree_host_pixeltest_filters.cc index cee0cbb..eecb6d42 100644 --- a/cc/trees/layer_tree_host_pixeltest_filters.cc +++ b/cc/trees/layer_tree_host_pixeltest_filters.cc
@@ -587,6 +587,69 @@ base::FilePath(FILE_PATH_LITERAL("enlarged_texture_on_crop_offset.png"))); } +class FilterWithGiantCropRectPixelTest : public LayerTreeHostFiltersPixelTest { + protected: + scoped_refptr<SolidColorLayer> BuildFilterWithGiantCropRect( + bool masks_to_bounds) { + scoped_refptr<SolidColorLayer> background = + CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE); + scoped_refptr<SolidColorLayer> filter_layer = + CreateSolidColorLayer(gfx::Rect(50, 50, 100, 100), SK_ColorRED); + + // This matrix swaps the red and green channels, and has a slight + // translation in the alpha component, so that it affects transparent + // pixels. + SkScalar matrix[20] = { + 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 20.0f, + }; + + skia::RefPtr<SkColorFilter> color_filter( + skia::AdoptRef(SkColorFilter::CreateMatrixFilterRowMajor255(matrix))); + + FilterOperations filters; + SkImageFilter::CropRect cropRect( + SkRect::MakeXYWH(-40000, -40000, 80000, 80000)); + skia::RefPtr<SkImageFilter> filter( + skia::AdoptRef(SkColorFilterImageFilter::Create(color_filter.get(), + nullptr, &cropRect))); + filters.Append(FilterOperation::CreateReferenceFilter(filter)); + filter_layer->SetFilters(filters); + background->SetMasksToBounds(masks_to_bounds); + background->AddChild(filter_layer); + + return background; + } +}; + +class FilterWithGiantCropRect : public FilterWithGiantCropRectPixelTest { + protected: + void RunPixelTestType(PixelTestType test_type, base::FilePath image_name) { + scoped_refptr<SolidColorLayer> tree = BuildFilterWithGiantCropRect(true); + RunPixelTest(test_type, tree, image_name); + } +}; + +TEST_F(FilterWithGiantCropRect, GL) { + RunPixelTestType( + PIXEL_TEST_GL, + base::FilePath(FILE_PATH_LITERAL("filter_with_giant_crop_rect.png"))); +} + +class FilterWithGiantCropRectNoClip : public FilterWithGiantCropRectPixelTest { + protected: + void RunPixelTestType(PixelTestType test_type, base::FilePath image_name) { + scoped_refptr<SolidColorLayer> tree = BuildFilterWithGiantCropRect(false); + RunPixelTest(test_type, tree, image_name); + } +}; + +TEST_F(FilterWithGiantCropRectNoClip, GL) { + RunPixelTestType( + PIXEL_TEST_GL, + base::FilePath(FILE_PATH_LITERAL("filter_with_giant_crop_rect.png"))); +} + } // namespace } // namespace cc
diff --git a/cc/trees/layer_tree_host_unittest_context.cc b/cc/trees/layer_tree_host_unittest_context.cc index e0befc1..3e8cdef 100644 --- a/cc/trees/layer_tree_host_unittest_context.cc +++ b/cc/trees/layer_tree_host_unittest_context.cc
@@ -7,8 +7,6 @@ #include <stddef.h> #include <stdint.h> -#include "cc/layers/delegated_frame_provider.h" -#include "cc/layers/delegated_frame_resource_collection.h" #include "cc/layers/heads_up_display_layer.h" #include "cc/layers/io_surface_layer.h" #include "cc/layers/layer_impl.h" @@ -22,8 +20,6 @@ #include "cc/resources/single_release_callback.h" #include "cc/test/failure_output_surface.h" #include "cc/test/fake_content_layer_client.h" -#include "cc/test/fake_delegated_renderer_layer.h" -#include "cc/test/fake_delegated_renderer_layer_impl.h" #include "cc/test/fake_layer_tree_host_client.h" #include "cc/test/fake_output_surface.h" #include "cc/test/fake_output_surface_client.h" @@ -944,10 +940,6 @@ frame_data->render_pass_list.push_back(std::move(pass_for_quad)); frame_data->render_pass_list.push_back(std::move(pass)); - delegated_resource_collection_ = new DelegatedFrameResourceCollection; - delegated_frame_provider_ = new DelegatedFrameProvider( - delegated_resource_collection_.get(), std::move(frame_data)); - ResourceId resource = child_resource_provider_->CreateResource( gfx::Size(4, 4), ResourceProvider::TEXTURE_HINT_IMMUTABLE, RGBA_8888); ResourceProvider::ScopedWriteLockGL lock(child_resource_provider_.get(), @@ -966,13 +958,6 @@ root->SetBounds(gfx::Size(10, 10)); root->SetIsDrawable(true); - scoped_refptr<FakeDelegatedRendererLayer> delegated = - FakeDelegatedRendererLayer::Create(layer_settings(), - delegated_frame_provider_.get()); - delegated->SetBounds(gfx::Size(10, 10)); - delegated->SetIsDrawable(true); - root->AddChild(delegated); - scoped_refptr<PictureLayer> layer = PictureLayer::Create(layer_settings(), &client_); layer->SetBounds(gfx::Size(10, 10)); @@ -1121,10 +1106,6 @@ scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; scoped_ptr<ResourceProvider> child_resource_provider_; - scoped_refptr<DelegatedFrameResourceCollection> - delegated_resource_collection_; - scoped_refptr<DelegatedFrameProvider> delegated_frame_provider_; - scoped_refptr<VideoFrame> color_video_frame_; scoped_refptr<VideoFrame> hw_video_frame_; scoped_refptr<VideoFrame> scaled_hw_video_frame_;
diff --git a/cc/trees/layer_tree_host_unittest_delegated.cc b/cc/trees/layer_tree_host_unittest_delegated.cc deleted file mode 100644 index b0ddf865..0000000 --- a/cc/trees/layer_tree_host_unittest_delegated.cc +++ /dev/null
@@ -1,2274 +0,0 @@ -// Copyright 2013 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 "cc/trees/layer_tree_host.h" - -#include <stddef.h> - -#include <algorithm> - -#include "base/bind.h" -#include "base/location.h" -#include "base/synchronization/lock.h" -#include "base/synchronization/waitable_event.h" -#include "base/threading/thread.h" -#include "base/time/time.h" -#include "cc/layers/delegated_frame_provider.h" -#include "cc/layers/delegated_frame_resource_collection.h" -#include "cc/layers/delegated_renderer_layer.h" -#include "cc/layers/delegated_renderer_layer_impl.h" -#include "cc/output/compositor_frame.h" -#include "cc/output/compositor_frame_ack.h" -#include "cc/output/delegated_frame_data.h" -#include "cc/quads/render_pass_draw_quad.h" -#include "cc/quads/shared_quad_state.h" -#include "cc/quads/texture_draw_quad.h" -#include "cc/resources/returned_resource.h" -#include "cc/test/fake_delegated_renderer_layer.h" -#include "cc/test/fake_delegated_renderer_layer_impl.h" -#include "cc/test/fake_output_surface.h" -#include "cc/test/layer_tree_test.h" -#include "cc/trees/layer_tree_impl.h" -#include "gpu/GLES2/gl2extchromium.h" - -namespace cc { -namespace { - -bool ReturnedResourceLower(const ReturnedResource& a, - const ReturnedResource& b) { - return a.id < b.id; -} - -// Tests if the list of resources matches an expectation, modulo the order. -bool ResourcesMatch(ReturnedResourceArray actual, - unsigned* expected, - size_t expected_count) { - std::sort(actual.begin(), actual.end(), ReturnedResourceLower); - std::sort(expected, expected + expected_count); - size_t actual_index = 0; - - // for each element of the expected array, count off one of the actual array - // (after checking it matches). - for (size_t expected_index = 0; expected_index < expected_count; - ++expected_index) { - EXPECT_LT(actual_index, actual.size()); - if (actual_index >= actual.size()) - return false; - EXPECT_EQ(actual[actual_index].id, expected[expected_index]); - if (actual[actual_index].id != expected[expected_index]) - return false; - EXPECT_GT(actual[actual_index].count, 0); - if (actual[actual_index].count <= 0) { - return false; - } else { - --actual[actual_index].count; - if (actual[actual_index].count == 0) - ++actual_index; - } - } - EXPECT_EQ(actual_index, actual.size()); - return actual_index == actual.size(); -} - -#define EXPECT_RESOURCES(expected, actual) \ - EXPECT_TRUE(ResourcesMatch(actual, expected, arraysize(expected))); - -// These tests deal with delegated renderer layers. -class LayerTreeHostDelegatedTest : public LayerTreeTest { - protected: - scoped_ptr<DelegatedFrameData> CreateFrameData( - const gfx::Rect& root_output_rect, - const gfx::Rect& root_damage_rect) { - scoped_ptr<DelegatedFrameData> frame(new DelegatedFrameData); - - scoped_ptr<RenderPass> root_pass(RenderPass::Create()); - root_pass->SetNew(RenderPassId(1, 1), - root_output_rect, - root_damage_rect, - gfx::Transform()); - frame->render_pass_list.push_back(std::move(root_pass)); - return frame; - } - - scoped_ptr<DelegatedFrameData> CreateInvalidFrameData( - const gfx::Rect& root_output_rect, - const gfx::Rect& root_damage_rect) { - scoped_ptr<DelegatedFrameData> frame(new DelegatedFrameData); - - scoped_ptr<RenderPass> root_pass(RenderPass::Create()); - root_pass->SetNew(RenderPassId(1, 1), - root_output_rect, - root_damage_rect, - gfx::Transform()); - - SharedQuadState* shared_quad_state = - root_pass->CreateAndAppendSharedQuadState(); - - gfx::Rect rect = root_output_rect; - gfx::Rect opaque_rect = root_output_rect; - gfx::Rect visible_rect = root_output_rect; - // An invalid resource id! The resource isn't part of the frame. - unsigned resource_id = 5; - bool premultiplied_alpha = false; - gfx::PointF uv_top_left = gfx::PointF(0.f, 0.f); - gfx::PointF uv_bottom_right = gfx::PointF(1.f, 1.f); - SkColor background_color = 0; - float vertex_opacity[4] = {1.f, 1.f, 1.f, 1.f}; - bool flipped = false; - bool nearest_neighbor = false; - - TextureDrawQuad* invalid_draw_quad = - root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); - invalid_draw_quad->SetNew(shared_quad_state, - rect, - opaque_rect, - visible_rect, - resource_id, - premultiplied_alpha, - uv_top_left, - uv_bottom_right, - background_color, - vertex_opacity, - flipped, - nearest_neighbor); - - frame->render_pass_list.push_back(std::move(root_pass)); - return frame; - } - - void AddTransferableResource(DelegatedFrameData* frame, - ResourceId resource_id) { - TransferableResource resource; - resource.id = resource_id; - resource.mailbox_holder.texture_target = GL_TEXTURE_2D; - GLbyte arbitrary_mailbox[GL_MAILBOX_SIZE_CHROMIUM] = { - 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, - 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4}; - resource.mailbox_holder.mailbox.SetName(arbitrary_mailbox); - frame->resource_list.push_back(resource); - } - - void AddTextureQuad(DelegatedFrameData* frame, ResourceId resource_id) { - RenderPass* render_pass = frame->render_pass_list[0].get(); - SharedQuadState* sqs = render_pass->CreateAndAppendSharedQuadState(); - TextureDrawQuad* quad = - render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); - float vertex_opacity[4] = { 1.f, 1.f, 1.f, 1.f }; - quad->SetNew(sqs, - gfx::Rect(0, 0, 10, 10), - gfx::Rect(0, 0, 10, 10), - gfx::Rect(0, 0, 10, 10), - resource_id, - false, - gfx::PointF(0.f, 0.f), - gfx::PointF(1.f, 1.f), - SK_ColorTRANSPARENT, - vertex_opacity, - false, - false); - } - - static ResourceId AppendResourceId( - std::vector<ResourceId>* resources_in_last_sent_frame, - ResourceId resource_id) { - resources_in_last_sent_frame->push_back(resource_id); - return resource_id; - } - - void ReturnUnusedResourcesFromParent(LayerTreeHostImpl* host_impl) { - DelegatedFrameData* delegated_frame_data = - output_surface()->last_sent_frame().delegated_frame_data.get(); - if (!delegated_frame_data) - return; - - std::vector<ResourceId> resources_in_last_sent_frame; - for (size_t i = 0; i < delegated_frame_data->resource_list.size(); ++i) { - resources_in_last_sent_frame.push_back( - delegated_frame_data->resource_list[i].id); - } - - std::vector<ResourceId> resources_to_return; - - const TransferableResourceArray& resources_held_by_parent = - output_surface()->resources_held_by_parent(); - for (size_t i = 0; i < resources_held_by_parent.size(); ++i) { - ResourceId resource_in_parent = resources_held_by_parent[i].id; - bool resource_in_parent_is_not_part_of_frame = - std::find(resources_in_last_sent_frame.begin(), - resources_in_last_sent_frame.end(), - resource_in_parent) == resources_in_last_sent_frame.end(); - if (resource_in_parent_is_not_part_of_frame) - resources_to_return.push_back(resource_in_parent); - } - - if (resources_to_return.empty()) - return; - - CompositorFrameAck ack; - for (size_t i = 0; i < resources_to_return.size(); ++i) - output_surface()->ReturnResource(resources_to_return[i], &ack); - host_impl->ReclaimResources(&ack); - } - - void ReturnAllResourcesFromParent(LayerTreeHostImpl* host_impl) { - DelegatedFrameData* delegated_frame_data = - output_surface()->last_sent_frame().delegated_frame_data.get(); - if (!delegated_frame_data) - return; - - const TransferableResourceArray& resources_held_by_parent = - output_surface()->resources_held_by_parent(); - - if (resources_held_by_parent.empty()) - return; - - CompositorFrameAck ack; - for (size_t i = 0; i < resources_held_by_parent.size(); ++i) - output_surface()->ReturnResource(resources_held_by_parent[i].id, &ack); - host_impl->ReclaimResources(&ack); - } -}; - -class LayerTreeHostDelegatedTestCaseSingleDelegatedLayer - : public LayerTreeHostDelegatedTest, - public DelegatedFrameResourceCollectionClient { - public: - LayerTreeHostDelegatedTestCaseSingleDelegatedLayer() - : resource_collection_(new DelegatedFrameResourceCollection), - available_(false) { - resource_collection_->SetClient(this); - } - - void SetupTree() override { - root_ = Layer::Create(layer_settings()); - root_->SetBounds(gfx::Size(15, 15)); - - layer_tree_host()->SetRootLayer(root_); - LayerTreeHostDelegatedTest::SetupTree(); - } - - void BeginTest() override { - resource_collection_->SetClient(this); - PostSetNeedsCommitToMainThread(); - } - - void SetFrameData(scoped_ptr<DelegatedFrameData> frame_data) { - RenderPass* root_pass = frame_data->render_pass_list.back().get(); - gfx::Size frame_size = root_pass->output_rect.size(); - - if (frame_provider_.get() && frame_size == frame_provider_->frame_size()) { - frame_provider_->SetFrameData(std::move(frame_data)); - return; - } - - if (delegated_.get()) { - delegated_->RemoveFromParent(); - delegated_ = NULL; - frame_provider_ = NULL; - } - - frame_provider_ = new DelegatedFrameProvider(resource_collection_.get(), - std::move(frame_data)); - - delegated_ = CreateDelegatedLayer(frame_provider_.get()); - } - - scoped_refptr<DelegatedRendererLayer> CreateDelegatedLayer( - DelegatedFrameProvider* frame_provider) { - scoped_refptr<DelegatedRendererLayer> delegated = - FakeDelegatedRendererLayer::Create(layer_settings(), frame_provider); - delegated->SetBounds(gfx::Size(10, 10)); - delegated->SetIsDrawable(true); - - root_->AddChild(delegated); - return delegated; - } - - void AfterTest() override { resource_collection_->SetClient(NULL); } - - // DelegatedFrameProviderClient implementation. - void UnusedResourcesAreAvailable() override { available_ = true; } - - bool TestAndResetAvailable() { - bool available = available_; - available_ = false; - return available; - } - - protected: - scoped_refptr<DelegatedFrameResourceCollection> resource_collection_; - scoped_refptr<DelegatedFrameProvider> frame_provider_; - scoped_refptr<Layer> root_; - scoped_refptr<DelegatedRendererLayer> delegated_; - bool available_; -}; - -class LayerTreeHostDelegatedTestCreateChildId - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - public: - LayerTreeHostDelegatedTestCreateChildId() - : LayerTreeHostDelegatedTestCaseSingleDelegatedLayer(), - num_activates_(0), - did_reset_child_id_(false) {} - - void DidCommit() override { - if (TestEnded()) - return; - SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1))); - } - - void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { - if (host_impl->active_tree()->source_frame_number() < 1) - return; - - LayerImpl* root_impl = host_impl->active_tree()->root_layer(); - FakeDelegatedRendererLayerImpl* delegated_impl = - static_cast<FakeDelegatedRendererLayerImpl*>( - root_impl->children()[0].get()); - - TestContextProvider* context_provider = static_cast<TestContextProvider*>( - host_impl->output_surface()->context_provider()); - - ++num_activates_; - switch (num_activates_) { - case 2: - EXPECT_TRUE(delegated_impl->ChildId()); - EXPECT_FALSE(did_reset_child_id_); - - context_provider->ContextGL()->LoseContextCHROMIUM( - GL_GUILTY_CONTEXT_RESET_ARB, - GL_INNOCENT_CONTEXT_RESET_ARB); - context_provider->ContextGL()->Flush(); - break; - case 3: - EXPECT_TRUE(delegated_impl->ChildId()); - EXPECT_TRUE(did_reset_child_id_); - EndTest(); - break; - } - } - - void InitializedRendererOnThread(LayerTreeHostImpl* host_impl, - bool success) override { - EXPECT_TRUE(success); - - if (num_activates_ < 2) - return; - - LayerImpl* root_impl = host_impl->active_tree()->root_layer(); - FakeDelegatedRendererLayerImpl* delegated_impl = - static_cast<FakeDelegatedRendererLayerImpl*>( - root_impl->children()[0].get()); - - EXPECT_EQ(2, num_activates_); - EXPECT_FALSE(delegated_impl->ChildId()); - did_reset_child_id_ = true; - } - - protected: - int num_activates_; - bool did_reset_child_id_; -}; - -SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestCreateChildId); - -class LayerTreeHostDelegatedTestDontUseLostChildIdAfterCommit - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - protected: - void BeginTest() override { - SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1))); - LayerTreeHostDelegatedTestCaseSingleDelegatedLayer::BeginTest(); - } - - void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { - // Act like the context was lost while the layer is in the pending tree. - LayerImpl* root_impl = host_impl->sync_tree()->root_layer(); - FakeDelegatedRendererLayerImpl* delegated_impl = - static_cast<FakeDelegatedRendererLayerImpl*>( - root_impl->children()[0].get()); - delegated_impl->ReleaseResources(); - } - - void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { - LayerImpl* root_impl = host_impl->active_tree()->root_layer(); - FakeDelegatedRendererLayerImpl* delegated_impl = - static_cast<FakeDelegatedRendererLayerImpl*>( - root_impl->children()[0].get()); - - // Should not try to activate a frame without a child id. If we did try to - // activate we would crash. - EXPECT_FALSE(delegated_impl->ChildId()); - EndTest(); - } -}; - -SINGLE_AND_MULTI_THREAD_TEST_F( - LayerTreeHostDelegatedTestDontUseLostChildIdAfterCommit); - -// Test that we can gracefully handle invalid frames after the context was lost. -// For example, we might be trying to use the previous frame in that case and -// have to make sure we don't crash because our resource accounting goes wrong. -class LayerTreeHostDelegatedTestInvalidFrameAfterContextLost - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - public: - LayerTreeHostDelegatedTestInvalidFrameAfterContextLost() - : num_activates_(0), num_output_surfaces_initialized_(0) {} - - void DidCommit() override { - if (TestEnded()) - return; - scoped_ptr<DelegatedFrameData> frame1 = - CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame1.get(), 999); - AddTransferableResource(frame1.get(), 999); - SetFrameData(std::move(frame1)); - } - - void DidInitializeOutputSurface() override { - if (!num_output_surfaces_initialized_++) - return; - - scoped_refptr<DelegatedRendererLayer> old_delegated = delegated_; - SetFrameData( - CreateInvalidFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1))); - // Make sure we end up using the same layer, or we won't test the right - // thing, which is to make sure we can handle an invalid frame when using - // a stale layer from before the context was lost. - DCHECK(delegated_.get() == old_delegated.get()); - } - - void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { - if (host_impl->active_tree()->source_frame_number() < 1) - return; - - TestContextProvider* context_provider = static_cast<TestContextProvider*>( - host_impl->output_surface()->context_provider()); - - ++num_activates_; - switch (num_activates_) { - case 2: - context_provider->ContextGL()->LoseContextCHROMIUM( - GL_GUILTY_CONTEXT_RESET_ARB, - GL_INNOCENT_CONTEXT_RESET_ARB); - break; - case 3: - EndTest(); - break; - } - } - - void InitializedRendererOnThread(LayerTreeHostImpl* host_impl, - bool success) override { - EXPECT_TRUE(success); - - if (num_activates_ < 2) - return; - - LayerImpl* root_impl = host_impl->active_tree()->root_layer(); - FakeDelegatedRendererLayerImpl* delegated_impl = - static_cast<FakeDelegatedRendererLayerImpl*>( - root_impl->children()[0].get()); - - EXPECT_EQ(2, num_activates_); - // Resources should have gotten cleared after the context was lost. - EXPECT_EQ(0U, delegated_impl->Resources().size()); - } - - void AfterTest() override { - LayerTreeHostDelegatedTestCaseSingleDelegatedLayer::AfterTest(); - EXPECT_EQ(2, num_output_surfaces_initialized_); - } - - protected: - int num_activates_; - int num_output_surfaces_initialized_; -}; - -SINGLE_AND_MULTI_THREAD_TEST_F( - LayerTreeHostDelegatedTestInvalidFrameAfterContextLost); - -class LayerTreeHostDelegatedTestLayerUsesFrameDamage - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - public: - void DidCommit() override { - int next_source_frame_number = layer_tree_host()->source_frame_number(); - switch (next_source_frame_number) { - case 1: - // The first time the layer gets a frame the whole layer should be - // damaged. - SetFrameData( - CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1))); - break; - case 2: - // A different frame size will damage the whole layer. - SetFrameData( - CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(0, 0, 0, 0))); - break; - case 3: - // Should create a total amount of gfx::Rect(2, 2, 8, 6) damage: - // (2, 2, 10, 6) clamped to the root output rect. - SetFrameData( - CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(2, 2, 5, 5))); - SetFrameData( - CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(7, 2, 5, 6))); - break; - case 4: - // Should create zero damage. - layer_tree_host()->SetNeedsCommit(); - break; - case 5: - // Should damage the full viewport. - delegated_->SetBounds(gfx::Size(2, 2)); - break; - case 6: - // Should create zero damage. - layer_tree_host()->SetNeedsCommit(); - break; - case 7: - // Should damage the full layer, tho the frame size is not changing. - delegated_->SetBounds(gfx::Size(6, 6)); - SetFrameData( - CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(1, 1, 2, 2))); - break; - case 8: - // Should create zero damage. - layer_tree_host()->SetNeedsCommit(); - break; - case 9: - // Should create zero damage. - layer_tree_host()->SetNeedsCommit(); - break; - case 10: - // Changing the frame size damages the full layer. - SetFrameData( - CreateFrameData(gfx::Rect(0, 0, 5, 5), gfx::Rect(4, 4, 1, 1))); - break; - case 11: - // An invalid frame isn't used, so it should not cause damage. - SetFrameData(CreateInvalidFrameData(gfx::Rect(0, 0, 5, 5), - gfx::Rect(4, 4, 1, 1))); - break; - case 12: - // Should create gfx::Rect(1, 1, 2, 2) of damage. - SetFrameData( - CreateFrameData(gfx::Rect(0, 0, 5, 5), gfx::Rect(1, 1, 2, 2))); - break; - case 13: - // Should create zero damage. - layer_tree_host()->SetNeedsCommit(); - break; - case 14: - // Moving the layer out of the tree and back in will damage the whole - // impl layer. - delegated_->RemoveFromParent(); - layer_tree_host()->root_layer()->AddChild(delegated_); - break; - case 15: - // Make a larger frame with lots of damage. Then a frame smaller than - // the first frame's damage. The entire layer should be damaged, but - // nothing more. - SetFrameData( - CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(0, 0, 10, 10))); - SetFrameData( - CreateFrameData(gfx::Rect(0, 0, 5, 5), gfx::Rect(1, 1, 2, 2))); - break; - case 16: - // Make a frame with lots of damage. Then replace it with a frame with - // no damage. The entire layer should be damaged, but nothing more. - SetFrameData( - CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(0, 0, 10, 10))); - SetFrameData( - CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(0, 0, 0, 0))); - break; - case 17: - // Make another layer that uses the same frame provider. The new layer - // should be damaged. - delegated_copy_ = CreateDelegatedLayer(frame_provider_.get()); - delegated_copy_->SetPosition(gfx::PointF(5.f, 0.f)); - - // Also set a new frame. - SetFrameData( - CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(4, 0, 1, 1))); - break; - case 18: - // Set another new frame, both layers should be damaged in the same - // ways. - SetFrameData( - CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(3, 3, 1, 1))); - break; - } - } - - DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, - LayerTreeHostImpl::FrameData* frame, - DrawResult draw_result) override { - EXPECT_EQ(DRAW_SUCCESS, draw_result); - - gfx::Rect damage_rect; - if (!frame->has_no_damage) { - damage_rect = frame->render_passes.back()->damage_rect; - } else { - // If there is no damage, then we have no render passes to send. - EXPECT_TRUE(frame->render_passes.empty()); - } - - switch (host_impl->active_tree()->source_frame_number()) { - case 0: - // First frame is damaged because of viewport resize. - EXPECT_EQ(gfx::Rect(15, 15).ToString(), damage_rect.ToString()); - break; - case 1: - EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); - break; - case 2: - EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); - break; - case 3: - EXPECT_EQ(gfx::Rect(2, 2, 8, 6).ToString(), damage_rect.ToString()); - break; - case 4: - EXPECT_EQ(gfx::Rect().ToString(), damage_rect.ToString()); - break; - case 5: - EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); - break; - case 6: - EXPECT_EQ(gfx::Rect().ToString(), damage_rect.ToString()); - break; - case 7: - EXPECT_EQ(gfx::Rect(6, 6).ToString(), damage_rect.ToString()); - break; - case 8: - EXPECT_EQ(gfx::Rect().ToString(), damage_rect.ToString()); - break; - case 9: - EXPECT_EQ(gfx::Rect().ToString(), damage_rect.ToString()); - break; - case 10: - EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); - break; - case 11: - EXPECT_EQ(gfx::Rect().ToString(), damage_rect.ToString()); - break; - case 12: - EXPECT_EQ(gfx::Rect(1, 1, 2, 2).ToString(), damage_rect.ToString()); - break; - case 13: - EXPECT_EQ(gfx::Rect().ToString(), damage_rect.ToString()); - break; - case 14: - EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); - break; - case 15: - EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); - break; - case 16: - EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); - break; - case 17: - EXPECT_EQ(gfx::UnionRects(gfx::Rect(5, 0, 10, 10), - gfx::Rect(4, 0, 1, 1)).ToString(), - damage_rect.ToString()); - break; - case 18: - EXPECT_EQ(gfx::Rect(3, 3, 6, 1).ToString(), damage_rect.ToString()); - EndTest(); - break; - } - - return draw_result; - } - - protected: - scoped_refptr<DelegatedRendererLayer> delegated_copy_; -}; - -SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestLayerUsesFrameDamage); - -class LayerTreeHostDelegatedTestMergeResources - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - public: - void BeginTest() override { - // Push two frames to the delegated renderer layer with no commit between. - - // The first frame has resource 999. - scoped_ptr<DelegatedFrameData> frame1 = - CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame1.get(), 999); - AddTransferableResource(frame1.get(), 999); - SetFrameData(std::move(frame1)); - - // The second frame uses resource 999 still, but also adds 555. - scoped_ptr<DelegatedFrameData> frame2 = - CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame2.get(), 999); - AddTransferableResource(frame2.get(), 999); - AddTextureQuad(frame2.get(), 555); - AddTransferableResource(frame2.get(), 555); - SetFrameData(std::move(frame2)); - - // The resource 999 from frame1 is returned since it is still on the main - // thread. - ReturnedResourceArray returned_resources; - resource_collection_->TakeUnusedResourcesForChildCompositor( - &returned_resources); - { - unsigned expected[] = {999}; - EXPECT_RESOURCES(expected, returned_resources); - EXPECT_TRUE(TestAndResetAvailable()); - } - - PostSetNeedsCommitToMainThread(); - } - - void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { - LayerImpl* root_impl = host_impl->active_tree()->root_layer(); - FakeDelegatedRendererLayerImpl* delegated_impl = - static_cast<FakeDelegatedRendererLayerImpl*>( - root_impl->children()[0].get()); - - const ResourceProvider::ResourceIdMap& map = - host_impl->resource_provider()->GetChildToParentMap( - delegated_impl->ChildId()); - - // Both frames' resources should be in the parent's resource provider. - EXPECT_EQ(2u, map.size()); - EXPECT_EQ(1u, map.count(999)); - EXPECT_EQ(1u, map.count(555)); - - EXPECT_EQ(2u, delegated_impl->Resources().size()); - EXPECT_EQ(1u, delegated_impl->Resources().count(999)); - EXPECT_EQ(1u, delegated_impl->Resources().count(555)); - - EndTest(); - } -}; - -SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestMergeResources); - -class LayerTreeHostDelegatedTestRemapResourcesInQuads - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - public: - void BeginTest() override { - // Generate a frame with two resources in it. - scoped_ptr<DelegatedFrameData> frame = - CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - SetFrameData(std::move(frame)); - - PostSetNeedsCommitToMainThread(); - } - - void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { - LayerImpl* root_impl = host_impl->active_tree()->root_layer(); - FakeDelegatedRendererLayerImpl* delegated_impl = - static_cast<FakeDelegatedRendererLayerImpl*>( - root_impl->children()[0].get()); - - const ResourceProvider::ResourceIdMap& map = - host_impl->resource_provider()->GetChildToParentMap( - delegated_impl->ChildId()); - - // The frame's resource should be in the parent's resource provider. - EXPECT_EQ(2u, map.size()); - EXPECT_EQ(1u, map.count(999)); - EXPECT_EQ(1u, map.count(555)); - - ResourceId parent_resource_id1 = map.find(999)->second; - EXPECT_NE(parent_resource_id1, 999u); - ResourceId parent_resource_id2 = map.find(555)->second; - EXPECT_NE(parent_resource_id2, 555u); - - // The resources in the quads should be remapped to the parent's namespace. - const TextureDrawQuad* quad1 = TextureDrawQuad::MaterialCast( - delegated_impl->RenderPassesInDrawOrder()[0]->quad_list.ElementAt(0)); - EXPECT_EQ(parent_resource_id1, quad1->resource_id()); - const TextureDrawQuad* quad2 = TextureDrawQuad::MaterialCast( - delegated_impl->RenderPassesInDrawOrder()[0]->quad_list.ElementAt(1)); - EXPECT_EQ(parent_resource_id2, quad2->resource_id()); - - EndTest(); - } -}; - -SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestRemapResourcesInQuads); - -class LayerTreeHostDelegatedTestReturnUnusedResources - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - public: - void BeginTest() override { PostSetNeedsCommitToMainThread(); } - - void DidCommitAndDrawFrame() override { - scoped_ptr<DelegatedFrameData> frame; - ReturnedResourceArray resources; - - int next_source_frame_number = layer_tree_host()->source_frame_number(); - switch (next_source_frame_number) { - case 1: - // Generate a frame with two resources in it. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - SetFrameData(std::move(frame)); - break; - case 2: - // All of the resources are in use. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Keep using 999 but stop using 555. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - AddTextureQuad(frame.get(), 444); - AddTransferableResource(frame.get(), 444); - SetFrameData(std::move(frame)); - break; - case 3: - // 555 is no longer in use. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - { - unsigned expected[] = {555}; - EXPECT_RESOURCES(expected, resources); - EXPECT_TRUE(TestAndResetAvailable()); - } - - // Stop using any resources. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - SetFrameData(std::move(frame)); - break; - case 4: - // Postpone collecting resources for a frame. They should still be there - // the next frame. - layer_tree_host()->SetNeedsCommit(); - return; - case 5: - // 444 and 999 are no longer in use. We sent two refs to 999, so we - // should get two back. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - { - unsigned expected[] = {444, 999, 999}; - EXPECT_RESOURCES(expected, resources); - EXPECT_TRUE(TestAndResetAvailable()); - } - EndTest(); - break; - } - - // Resources are never immediately released. - ReturnedResourceArray empty_resources; - resource_collection_->TakeUnusedResourcesForChildCompositor( - &empty_resources); - EXPECT_EQ(0u, empty_resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - } - - void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { - ReturnUnusedResourcesFromParent(host_impl); - } -}; - -SINGLE_AND_MULTI_THREAD_TEST_F( - LayerTreeHostDelegatedTestReturnUnusedResources); - -class LayerTreeHostDelegatedTestReusedResources - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - public: - void BeginTest() override { PostSetNeedsCommitToMainThread(); } - - void DidCommitAndDrawFrame() override { - scoped_ptr<DelegatedFrameData> frame; - ReturnedResourceArray resources; - - int next_source_frame_number = layer_tree_host()->source_frame_number(); - switch (next_source_frame_number) { - case 1: - // Generate a frame with some resources in it. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - AddTextureQuad(frame.get(), 444); - AddTransferableResource(frame.get(), 444); - SetFrameData(std::move(frame)); - break; - case 2: - // All of the resources are in use. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Keep using 999 but stop using 555 and 444. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - SetFrameData(std::move(frame)); - - // Resource are not immediately released. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Now using 555 and 444 again, but not 999. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - AddTextureQuad(frame.get(), 444); - AddTransferableResource(frame.get(), 444); - SetFrameData(std::move(frame)); - break; - case 3: - // The 999 resource is the only unused one. Two references were sent, so - // two should be returned. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - { - unsigned expected[] = {999, 999}; - EXPECT_RESOURCES(expected, resources); - EXPECT_TRUE(TestAndResetAvailable()); - } - EndTest(); - break; - } - } - - void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { - ReturnUnusedResourcesFromParent(host_impl); - } -}; - -SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestReusedResources); - -class LayerTreeHostDelegatedTestFrameBeforeAck - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - public: - void BeginTest() override { PostSetNeedsCommitToMainThread(); } - - void DidCommitAndDrawFrame() override { - scoped_ptr<DelegatedFrameData> frame; - ReturnedResourceArray resources; - - int next_source_frame_number = layer_tree_host()->source_frame_number(); - switch (next_source_frame_number) { - case 1: - // Generate a frame with some resources in it. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - AddTextureQuad(frame.get(), 444); - AddTransferableResource(frame.get(), 444); - SetFrameData(std::move(frame)); - break; - case 2: - // All of the resources are in use. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Keep using 999 but stop using 555 and 444. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - SetFrameData(std::move(frame)); - - // Resource are not immediately released. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // The parent compositor (this one) does a commit. - break; - case 3: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - { - unsigned expected[] = {444, 555}; - EXPECT_RESOURCES(expected, resources); - EXPECT_TRUE(TestAndResetAvailable()); - } - - // The child compositor sends a frame referring to resources not in the - // frame. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTextureQuad(frame.get(), 555); - AddTextureQuad(frame.get(), 444); - SetFrameData(std::move(frame)); - break; - } - } - - void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { - if (host_impl->active_tree()->source_frame_number() != 3) - return; - - LayerImpl* root_impl = host_impl->active_tree()->root_layer(); - FakeDelegatedRendererLayerImpl* delegated_impl = - static_cast<FakeDelegatedRendererLayerImpl*>( - root_impl->children()[0].get()); - - const ResourceProvider::ResourceIdMap& map = - host_impl->resource_provider()->GetChildToParentMap( - delegated_impl->ChildId()); - - // The bad frame should be dropped. So we should only have one quad (the - // one with resource 999) on the impl tree. And only 999 will be present - // in the parent's resource provider. - EXPECT_EQ(1u, map.size()); - EXPECT_EQ(1u, map.count(999)); - - EXPECT_EQ(1u, delegated_impl->Resources().size()); - EXPECT_EQ(1u, delegated_impl->Resources().count(999)); - - const RenderPass* pass = delegated_impl->RenderPassesInDrawOrder()[0].get(); - EXPECT_EQ(1u, pass->quad_list.size()); - const TextureDrawQuad* quad = - TextureDrawQuad::MaterialCast(pass->quad_list.front()); - EXPECT_EQ(map.find(999)->second, quad->resource_id()); - - EndTest(); - } - - void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { - ReturnUnusedResourcesFromParent(host_impl); - } -}; - -SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestFrameBeforeAck); - -class LayerTreeHostDelegatedTestFrameBeforeTakeResources - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - public: - void BeginTest() override { PostSetNeedsCommitToMainThread(); } - - void DidCommitAndDrawFrame() override { - scoped_ptr<DelegatedFrameData> frame; - ReturnedResourceArray resources; - - int next_source_frame_number = layer_tree_host()->source_frame_number(); - switch (next_source_frame_number) { - case 1: - // Generate a frame with some resources in it. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - AddTextureQuad(frame.get(), 444); - AddTransferableResource(frame.get(), 444); - SetFrameData(std::move(frame)); - break; - case 2: - // All of the resources are in use. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Keep using 999 but stop using 555 and 444. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - SetFrameData(std::move(frame)); - - // Resource are not immediately released. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // The parent compositor (this one) does a commit. - break; - case 3: - // The child compositor sends a frame before taking resources back - // from the previous commit. This frame makes use of the resources 555 - // and 444, which were just released during commit. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - AddTextureQuad(frame.get(), 444); - AddTransferableResource(frame.get(), 444); - SetFrameData(std::move(frame)); - - // The resources are used by the new frame but are returned anyway since - // we passed them again. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - { - unsigned expected[] = {444, 555}; - EXPECT_RESOURCES(expected, resources); - EXPECT_TRUE(TestAndResetAvailable()); - } - break; - case 4: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - EndTest(); - break; - } - } - - void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { - if (host_impl->active_tree()->source_frame_number() != 3) - return; - - LayerImpl* root_impl = host_impl->active_tree()->root_layer(); - FakeDelegatedRendererLayerImpl* delegated_impl = - static_cast<FakeDelegatedRendererLayerImpl*>( - root_impl->children()[0].get()); - - const ResourceProvider::ResourceIdMap& map = - host_impl->resource_provider()->GetChildToParentMap( - delegated_impl->ChildId()); - - // The third frame has all of the resources in it again, the delegated - // renderer layer should continue to own the resources for it. - EXPECT_EQ(3u, map.size()); - EXPECT_EQ(1u, map.count(999)); - EXPECT_EQ(1u, map.count(555)); - EXPECT_EQ(1u, map.count(444)); - - EXPECT_EQ(3u, delegated_impl->Resources().size()); - EXPECT_EQ(1u, delegated_impl->Resources().count(999)); - EXPECT_EQ(1u, delegated_impl->Resources().count(555)); - EXPECT_EQ(1u, delegated_impl->Resources().count(444)); - - const RenderPass* pass = delegated_impl->RenderPassesInDrawOrder()[0].get(); - EXPECT_EQ(3u, pass->quad_list.size()); - const TextureDrawQuad* quad1 = - TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(0)); - EXPECT_EQ(map.find(999)->second, quad1->resource_id()); - const TextureDrawQuad* quad2 = - TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(1)); - EXPECT_EQ(map.find(555)->second, quad2->resource_id()); - const TextureDrawQuad* quad3 = - TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(2)); - EXPECT_EQ(map.find(444)->second, quad3->resource_id()); - } - - void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { - ReturnUnusedResourcesFromParent(host_impl); - } -}; - -SINGLE_AND_MULTI_THREAD_TEST_F( - LayerTreeHostDelegatedTestFrameBeforeTakeResources); - -class LayerTreeHostDelegatedTestBadFrame - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - public: - void BeginTest() override { PostSetNeedsCommitToMainThread(); } - - void DidCommitAndDrawFrame() override { - scoped_ptr<DelegatedFrameData> frame; - ReturnedResourceArray resources; - - int next_source_frame_number = layer_tree_host()->source_frame_number(); - switch (next_source_frame_number) { - case 1: - // Generate a frame with some resources in it. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - SetFrameData(std::move(frame)); - break; - case 2: - // All of the resources are in use. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Generate a bad frame with a resource the layer doesn't have. The - // 885 and 775 resources are unknown, while ownership of the legit 444 - // resource is passed in here. The bad frame does not use any of the - // previous resources, 999 or 555. - // A bad quad is present both before and after the good quad. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 885); - AddTextureQuad(frame.get(), 444); - AddTransferableResource(frame.get(), 444); - AddTextureQuad(frame.get(), 775); - SetFrameData(std::move(frame)); - - // The parent compositor (this one) does a commit. - break; - case 3: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Now send a good frame with 999 again. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - SetFrameData(std::move(frame)); - - // The bad frame's resource is given back to the child compositor. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - { - unsigned expected[] = {444}; - EXPECT_RESOURCES(expected, resources); - EXPECT_TRUE(TestAndResetAvailable()); - } - break; - case 4: - // The unused 555 from the last good frame is now released. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - { - unsigned expected[] = {555}; - EXPECT_RESOURCES(expected, resources); - EXPECT_TRUE(TestAndResetAvailable()); - } - - EndTest(); - break; - } - } - - void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { - if (host_impl->active_tree()->source_frame_number() < 1) - return; - - ReturnUnusedResourcesFromParent(host_impl); - - LayerImpl* root_impl = host_impl->active_tree()->root_layer(); - FakeDelegatedRendererLayerImpl* delegated_impl = - static_cast<FakeDelegatedRendererLayerImpl*>( - root_impl->children()[0].get()); - - const ResourceProvider::ResourceIdMap& map = - host_impl->resource_provider()->GetChildToParentMap( - delegated_impl->ChildId()); - - switch (host_impl->active_tree()->source_frame_number()) { - case 1: { - // We have the first good frame with just 999 and 555 in it. - // layer. - EXPECT_EQ(2u, map.size()); - EXPECT_EQ(1u, map.count(999)); - EXPECT_EQ(1u, map.count(555)); - - EXPECT_EQ(2u, delegated_impl->Resources().size()); - EXPECT_EQ(1u, delegated_impl->Resources().count(999)); - EXPECT_EQ(1u, delegated_impl->Resources().count(555)); - - const RenderPass* pass = - delegated_impl->RenderPassesInDrawOrder()[0].get(); - EXPECT_EQ(2u, pass->quad_list.size()); - const TextureDrawQuad* quad1 = - TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(0)); - EXPECT_EQ(map.find(999)->second, quad1->resource_id()); - const TextureDrawQuad* quad2 = - TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(1)); - EXPECT_EQ(map.find(555)->second, quad2->resource_id()); - break; - } - case 2: { - // We only keep resources from the last valid frame. - EXPECT_EQ(2u, map.size()); - EXPECT_EQ(1u, map.count(999)); - EXPECT_EQ(1u, map.count(555)); - - EXPECT_EQ(2u, delegated_impl->Resources().size()); - EXPECT_EQ(1u, delegated_impl->Resources().count(999)); - EXPECT_EQ(1u, delegated_impl->Resources().count(555)); - - // The bad frame is dropped though, we still have the frame with 999 and - // 555 in it. - const RenderPass* pass = - delegated_impl->RenderPassesInDrawOrder()[0].get(); - EXPECT_EQ(2u, pass->quad_list.size()); - const TextureDrawQuad* quad1 = - TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(0)); - EXPECT_EQ(map.find(999)->second, quad1->resource_id()); - const TextureDrawQuad* quad2 = - TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(1)); - EXPECT_EQ(map.find(555)->second, quad2->resource_id()); - break; - } - case 3: { - // We have the new good frame with just 999 in it. - EXPECT_EQ(1u, map.size()); - EXPECT_EQ(1u, map.count(999)); - - EXPECT_EQ(1u, delegated_impl->Resources().size()); - EXPECT_EQ(1u, delegated_impl->Resources().count(999)); - - const RenderPass* pass = - delegated_impl->RenderPassesInDrawOrder()[0].get(); - EXPECT_EQ(1u, pass->quad_list.size()); - const TextureDrawQuad* quad1 = - TextureDrawQuad::MaterialCast(pass->quad_list.front()); - EXPECT_EQ(map.find(999)->second, quad1->resource_id()); - break; - } - } - } -}; - -SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestBadFrame); - -class LayerTreeHostDelegatedTestUnnamedResource - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - public: - void BeginTest() override { PostSetNeedsCommitToMainThread(); } - - void DidCommitAndDrawFrame() override { - scoped_ptr<DelegatedFrameData> frame; - ReturnedResourceArray resources; - - int next_source_frame_number = layer_tree_host()->source_frame_number(); - switch (next_source_frame_number) { - case 1: - // This frame includes two resources in it, but only uses one. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTransferableResource(frame.get(), 999); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - SetFrameData(std::move(frame)); - break; - case 2: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Now send an empty frame. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - SetFrameData(std::move(frame)); - - // The unused resource should be returned. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - { - unsigned expected[] = {999}; - EXPECT_RESOURCES(expected, resources); - EXPECT_TRUE(TestAndResetAvailable()); - } - - EndTest(); - break; - } - } - - void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { - if (host_impl->active_tree()->source_frame_number() != 1) - return; - - LayerImpl* root_impl = host_impl->active_tree()->root_layer(); - FakeDelegatedRendererLayerImpl* delegated_impl = - static_cast<FakeDelegatedRendererLayerImpl*>( - root_impl->children()[0].get()); - - const ResourceProvider::ResourceIdMap& map = - host_impl->resource_provider()->GetChildToParentMap( - delegated_impl->ChildId()); - - // The layer only held on to the resource that was used. - EXPECT_EQ(1u, map.size()); - EXPECT_EQ(1u, map.count(555)); - - EXPECT_EQ(1u, delegated_impl->Resources().size()); - EXPECT_EQ(1u, delegated_impl->Resources().count(555)); - } -}; - -SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestUnnamedResource); - -class LayerTreeHostDelegatedTestDontLeakResource - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - public: - void BeginTest() override { PostSetNeedsCommitToMainThread(); } - - void DidCommitAndDrawFrame() override { - scoped_ptr<DelegatedFrameData> frame; - ReturnedResourceArray resources; - - int next_source_frame_number = layer_tree_host()->source_frame_number(); - switch (next_source_frame_number) { - case 1: - // This frame includes two resources in it. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - SetFrameData(std::move(frame)); - - // But then we immediately stop using 999. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - SetFrameData(std::move(frame)); - break; - case 2: - // The unused resources should be returned. 555 is still used, but it's - // returned once to account for the first frame. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - { - unsigned expected[] = {555, 999}; - EXPECT_RESOURCES(expected, resources); - EXPECT_TRUE(TestAndResetAvailable()); - } - // Send a frame with no resources in it. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - SetFrameData(std::move(frame)); - break; - case 3: - // The now unused resource 555 should be returned. - resources.clear(); - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - { - unsigned expected[] = {555}; - EXPECT_RESOURCES(expected, resources); - EXPECT_TRUE(TestAndResetAvailable()); - } - EndTest(); - break; - } - } - - void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { - if (host_impl->active_tree()->source_frame_number() != 1) - return; - - LayerImpl* root_impl = host_impl->active_tree()->root_layer(); - FakeDelegatedRendererLayerImpl* delegated_impl = - static_cast<FakeDelegatedRendererLayerImpl*>( - root_impl->children()[0].get()); - - const ResourceProvider::ResourceIdMap& map = - host_impl->resource_provider()->GetChildToParentMap( - delegated_impl->ChildId()); - - // The layer only held on to the resource that was used. - EXPECT_EQ(1u, map.size()); - EXPECT_EQ(1u, map.count(555)); - - EXPECT_EQ(1u, delegated_impl->Resources().size()); - EXPECT_EQ(1u, delegated_impl->Resources().count(555)); - } - - void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { - ReturnUnusedResourcesFromParent(host_impl); - } -}; - -SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestDontLeakResource); - -class LayerTreeHostDelegatedTestResourceSentToParent - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - public: - void DidCommitAndDrawFrame() override { - scoped_ptr<DelegatedFrameData> frame; - ReturnedResourceArray resources; - - int next_source_frame_number = layer_tree_host()->source_frame_number(); - switch (next_source_frame_number) { - case 1: - // This frame includes two resources in it. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - SetFrameData(std::move(frame)); - break; - case 2: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // 999 is in use in the grandparent compositor, generate a frame without - // it present. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - SetFrameData(std::move(frame)); - break; - case 3: - // Since 999 is in the grandparent it is not returned. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // The impl side will get back the resource at some point. - ImplThreadTaskRunner()->PostTask(FROM_HERE, - receive_resource_on_thread_); - break; - } - } - - void ReceiveResourceOnThread(LayerTreeHostImpl* host_impl) { - LayerImpl* root_impl = host_impl->active_tree()->root_layer(); - FakeDelegatedRendererLayerImpl* delegated_impl = - static_cast<FakeDelegatedRendererLayerImpl*>( - root_impl->children()[0].get()); - - const ResourceProvider::ResourceIdMap& map = - host_impl->resource_provider()->GetChildToParentMap( - delegated_impl->ChildId()); - - // Receive 999 back from the grandparent. - CompositorFrameAck ack; - output_surface()->ReturnResource(map.find(999)->second, &ack); - host_impl->ReclaimResources(&ack); - } - - void UnusedResourcesAreAvailable() override { - EXPECT_EQ(3, layer_tree_host()->source_frame_number()); - - ReturnedResourceArray resources; - - // 999 was returned from the grandparent and could be released. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - { - unsigned expected[] = {999}; - EXPECT_RESOURCES(expected, resources); - } - - EndTest(); - } - - void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { - if (host_impl->active_tree()->source_frame_number() < 1) - return; - - LayerImpl* root_impl = host_impl->active_tree()->root_layer(); - FakeDelegatedRendererLayerImpl* delegated_impl = - static_cast<FakeDelegatedRendererLayerImpl*>( - root_impl->children()[0].get()); - - const ResourceProvider::ResourceIdMap& map = - host_impl->resource_provider()->GetChildToParentMap( - delegated_impl->ChildId()); - - switch (host_impl->active_tree()->source_frame_number()) { - case 1: { - EXPECT_EQ(2u, map.size()); - EXPECT_EQ(1u, map.count(999)); - EXPECT_EQ(1u, map.count(555)); - - EXPECT_EQ(2u, delegated_impl->Resources().size()); - EXPECT_EQ(1u, delegated_impl->Resources().count(999)); - EXPECT_EQ(1u, delegated_impl->Resources().count(555)); - - // The 999 resource will be sent to a grandparent compositor. - break; - } - case 2: { - EXPECT_EQ(2u, map.size()); - EXPECT_EQ(1u, map.count(999)); - EXPECT_EQ(1u, map.count(555)); - - // 999 is in the parent, so not held by delegated renderer layer. - EXPECT_EQ(1u, delegated_impl->Resources().size()); - EXPECT_EQ(1u, delegated_impl->Resources().count(555)); - - receive_resource_on_thread_ = - base::Bind(&LayerTreeHostDelegatedTestResourceSentToParent:: - ReceiveResourceOnThread, - base::Unretained(this), - host_impl); - break; - } - case 3: - // 999 should be released. - EXPECT_EQ(1u, map.size()); - EXPECT_EQ(1u, map.count(555)); - - EXPECT_EQ(1u, delegated_impl->Resources().size()); - EXPECT_EQ(1u, delegated_impl->Resources().count(map.find(555)->second)); - break; - } - } - - base::Closure receive_resource_on_thread_; -}; - -SINGLE_AND_MULTI_THREAD_DELEGATING_RENDERER_TEST_F( - LayerTreeHostDelegatedTestResourceSentToParent); - -class LayerTreeHostDelegatedTestCommitWithoutTake - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - public: - void BeginTest() override { - // Prevent drawing with resources that are sent to the grandparent. - layer_tree_host()->SetViewportSize(gfx::Size()); - PostSetNeedsCommitToMainThread(); - } - - void DidCommit() override { - scoped_ptr<DelegatedFrameData> frame; - ReturnedResourceArray resources; - - int next_source_frame_number = layer_tree_host()->source_frame_number(); - switch (next_source_frame_number) { - case 1: - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - AddTextureQuad(frame.get(), 444); - AddTransferableResource(frame.get(), 444); - SetFrameData(std::move(frame)); - break; - case 2: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Stop using 999 and 444 in this frame and commit. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - SetFrameData(std::move(frame)); - // 999 and 444 will be returned for frame 1, but not 555 since it's in - // the current frame. - break; - case 3: - // Don't take resources here, but set a new frame that uses 999 again. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - SetFrameData(std::move(frame)); - break; - case 4: - // 555 from frame 1 and 2 isn't returned since it's still in use. 999 - // from frame 1 is returned though. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - { - unsigned expected[] = {444, 999}; - EXPECT_RESOURCES(expected, resources); - EXPECT_TRUE(TestAndResetAvailable()); - } - - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - SetFrameData(std::move(frame)); - // 555 will be returned 3 times for frames 1 2 and 3, and 999 will be - // returned once for frame 3. - break; - case 5: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - { - unsigned expected[] = {555, 555, 555, 999}; - EXPECT_RESOURCES(expected, resources); - EXPECT_TRUE(TestAndResetAvailable()); - } - - EndTest(); - break; - } - } - - void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { - if (host_impl->active_tree()->source_frame_number() < 1) - return; - - LayerImpl* root_impl = host_impl->active_tree()->root_layer(); - FakeDelegatedRendererLayerImpl* delegated_impl = - static_cast<FakeDelegatedRendererLayerImpl*>( - root_impl->children()[0].get()); - - const ResourceProvider::ResourceIdMap& map = - host_impl->resource_provider()->GetChildToParentMap( - delegated_impl->ChildId()); - - switch (host_impl->active_tree()->source_frame_number()) { - case 1: - EXPECT_EQ(3u, map.size()); - EXPECT_EQ(1u, map.count(999)); - EXPECT_EQ(1u, map.count(555)); - EXPECT_EQ(1u, map.count(444)); - - EXPECT_EQ(3u, delegated_impl->Resources().size()); - EXPECT_EQ(1u, delegated_impl->Resources().count(999)); - EXPECT_EQ(1u, delegated_impl->Resources().count(555)); - EXPECT_EQ(1u, delegated_impl->Resources().count(444)); - break; - case 2: - EXPECT_EQ(1u, map.size()); - EXPECT_EQ(1u, map.count(555)); - - EXPECT_EQ(1u, delegated_impl->Resources().size()); - EXPECT_EQ(1u, delegated_impl->Resources().count(555)); - break; - case 3: - EXPECT_EQ(2u, map.size()); - EXPECT_EQ(1u, map.count(999)); - EXPECT_EQ(1u, map.count(555)); - - EXPECT_EQ(2u, delegated_impl->Resources().size()); - EXPECT_EQ(1u, delegated_impl->Resources().count(999)); - EXPECT_EQ(1u, delegated_impl->Resources().count(555)); - } - } -}; - -SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestCommitWithoutTake); - -class DelegatedFrameIsActivatedDuringCommit - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - protected: - DelegatedFrameIsActivatedDuringCommit() : returned_resource_count_(0) {} - - void BeginTest() override { - activate_count_ = 0; - - scoped_ptr<DelegatedFrameData> frame = - CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - SetFrameData(std::move(frame)); - - PostSetNeedsCommitToMainThread(); - } - - void WillActivateTreeOnThread(LayerTreeHostImpl* impl) override { - base::AutoLock lock(activate_count_lock_); - ++activate_count_; - } - - void DidCommit() override { - // The first frame doesn't cause anything to be returned so it does not - // need to wait for activation. - if (layer_tree_host()->source_frame_number() > 1) { - base::AutoLock lock(activate_count_lock_); - // The activate happened before commit is done on the main side. - EXPECT_EQ(activate_count_, layer_tree_host()->source_frame_number()); - } - - switch (layer_tree_host()->source_frame_number()) { - case 1: { - // The first frame has been committed and will activate. Set a new - // frame, and expect the next commit to finish *after* it is activated. - scoped_ptr<DelegatedFrameData> frame = - CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - SetFrameData(std::move(frame)); - break; - } - case 2: - // The second frame has been activated. Remove the layer from - // the tree to cause another commit/activation. The commit should - // finish *after* the layer is removed from the active tree. - delegated_->RemoveFromParent(); - break; - case 3: - // Finish the test by releasing resources on the next frame. - scoped_ptr<DelegatedFrameData> frame = - CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - SetFrameData(std::move(frame)); - break; - } - } - - void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { - // The activate didn't happen before commit is done on the impl side (but it - // should happen before the main thread is done). - EXPECT_EQ(activate_count_, host_impl->sync_tree()->source_frame_number()); - } - - void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { - ReturnUnusedResourcesFromParent(host_impl); - } - - void UnusedResourcesAreAvailable() override { - LayerTreeHostDelegatedTestCaseSingleDelegatedLayer:: - UnusedResourcesAreAvailable(); - ReturnedResourceArray resources; - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_TRUE(TestAndResetAvailable()); - returned_resource_count_ += resources.size(); - if (returned_resource_count_ == 2) - EndTest(); - } - - base::Lock activate_count_lock_; - int activate_count_; - size_t returned_resource_count_; -}; - -SINGLE_AND_MULTI_THREAD_TEST_F( - DelegatedFrameIsActivatedDuringCommit); - -class LayerTreeHostDelegatedTestTwoImplLayers - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - public: - void BeginTest() override { PostSetNeedsCommitToMainThread(); } - - void DidCommitAndDrawFrame() override { - scoped_ptr<DelegatedFrameData> frame; - ReturnedResourceArray resources; - - int next_source_frame_number = layer_tree_host()->source_frame_number(); - switch (next_source_frame_number) { - case 1: - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - SetFrameData(std::move(frame)); - break; - case 2: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Remove the delegated layer and replace it with a new one. Use the - // same frame and resources for it. - delegated_->RemoveFromParent(); - delegated_ = CreateDelegatedLayer(frame_provider_.get()); - break; - case 3: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Use a frame with no resources in it. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - SetFrameData(std::move(frame)); - break; - case 4: - // We gave one frame to the frame provider, so we should get one - // ref back for each resource. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - { - unsigned expected[] = {555, 999}; - EXPECT_RESOURCES(expected, resources); - EXPECT_TRUE(TestAndResetAvailable()); - } - EndTest(); - break; - } - } - - void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { - ReturnUnusedResourcesFromParent(host_impl); - } -}; - -SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestTwoImplLayers); - -class LayerTreeHostDelegatedTestTwoImplLayersTwoFrames - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - public: - void BeginTest() override { PostSetNeedsCommitToMainThread(); } - - void DidCommitAndDrawFrame() override { - scoped_ptr<DelegatedFrameData> frame; - ReturnedResourceArray resources; - - int next_source_frame_number = layer_tree_host()->source_frame_number(); - switch (next_source_frame_number) { - case 1: - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - SetFrameData(std::move(frame)); - break; - case 2: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - - // Remove the delegated layer and replace it with a new one. Make a new - // frame but with the same resources for it. - delegated_->RemoveFromParent(); - delegated_ = NULL; - - frame_provider_->SetFrameData(std::move(frame)); - delegated_ = CreateDelegatedLayer(frame_provider_.get()); - break; - case 3: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Use a frame with no resources in it. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - SetFrameData(std::move(frame)); - break; - case 4: - // We gave two frames to the frame provider, so we should get two - // refs back for each resource. - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - { - unsigned expected[] = {555, 555, 999, 999}; - EXPECT_RESOURCES(expected, resources); - EXPECT_TRUE(TestAndResetAvailable()); - } - EndTest(); - break; - } - } - - void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { - ReturnUnusedResourcesFromParent(host_impl); - } -}; - -SINGLE_AND_MULTI_THREAD_TEST_F( - LayerTreeHostDelegatedTestTwoImplLayersTwoFrames); - -class LayerTreeHostDelegatedTestTwoLayers - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - public: - void BeginTest() override { PostSetNeedsCommitToMainThread(); } - - void DidCommitAndDrawFrame() override { - scoped_ptr<DelegatedFrameData> frame; - ReturnedResourceArray resources; - - int next_source_frame_number = layer_tree_host()->source_frame_number(); - switch (next_source_frame_number) { - case 1: - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - - // Create a DelegatedRendererLayer using the frame. - SetFrameData(std::move(frame)); - break; - case 2: - // Create a second DelegatedRendererLayer using the same frame provider. - delegated_thief_ = CreateDelegatedLayer(frame_provider_.get()); - root_->AddChild(delegated_thief_); - - // And drop our ref on the frame provider so only the layers keep it - // alive. - frame_provider_ = NULL; - break; - case 3: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Remove one delegated layer from the tree. No resources should be - // returned yet. - delegated_->RemoveFromParent(); - break; - case 4: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Put the first layer back, and remove the other layer and destroy it. - // No resources should be returned yet. - root_->AddChild(delegated_); - delegated_thief_->RemoveFromParent(); - delegated_thief_ = NULL; - break; - case 5: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Remove the first layer from the tree again. The resources are still - // held by the main thread layer. - delegated_->RemoveFromParent(); - break; - case 6: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Destroy the layer and the resources should be returned immediately. - delegated_ = NULL; - - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - { - unsigned expected[] = {555, 999}; - EXPECT_RESOURCES(expected, resources); - EXPECT_TRUE(TestAndResetAvailable()); - } - EndTest(); - break; - } - } - - void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { - ReturnUnusedResourcesFromParent(host_impl); - } - - scoped_refptr<DelegatedRendererLayer> delegated_thief_; -}; - -SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestTwoLayers); - -class LayerTreeHostDelegatedTestRemoveAndAddToTree - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - public: - void BeginTest() override { PostSetNeedsCommitToMainThread(); } - - void DidCommitAndDrawFrame() override { - scoped_ptr<DelegatedFrameData> frame; - ReturnedResourceArray resources; - - int next_source_frame_number = layer_tree_host()->source_frame_number(); - switch (next_source_frame_number) { - case 1: - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - - // Create a DelegatedRendererLayer using the frame. - SetFrameData(std::move(frame)); - break; - case 2: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Remove the layer from the tree. The resources should not be returned - // since they are still on the main thread layer. - delegated_->RemoveFromParent(); - break; - case 3: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Add the layer back to the tree. - layer_tree_host()->root_layer()->AddChild(delegated_); - break; - case 4: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Set a new frame. Resources should be returned. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 888); - AddTransferableResource(frame.get(), 888); - AddTextureQuad(frame.get(), 777); - AddTransferableResource(frame.get(), 777); - SetFrameData(std::move(frame)); - break; - case 5: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - { - unsigned expected[] = {555, 999}; - EXPECT_RESOURCES(expected, resources); - EXPECT_TRUE(TestAndResetAvailable()); - } - - // Destroy the layer. - delegated_->RemoveFromParent(); - delegated_ = NULL; - break; - case 6: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Destroy the frame provider. Resources should be returned. - frame_provider_ = NULL; - - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - { - unsigned expected[] = {777, 888}; - EXPECT_RESOURCES(expected, resources); - EXPECT_TRUE(TestAndResetAvailable()); - } - EndTest(); - break; - } - } - - void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { - ReturnUnusedResourcesFromParent(host_impl); - } - - scoped_refptr<DelegatedRendererLayer> delegated_thief_; -}; - -SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestRemoveAndAddToTree); - -class LayerTreeHostDelegatedTestRemoveAndChangeResources - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - public: - void BeginTest() override { PostSetNeedsCommitToMainThread(); } - - void DidCommitAndDrawFrame() override { - scoped_ptr<DelegatedFrameData> frame; - ReturnedResourceArray resources; - - int next_source_frame_number = layer_tree_host()->source_frame_number(); - switch (next_source_frame_number) { - case 1: - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - - // Create a DelegatedRendererLayer using the frame. - SetFrameData(std::move(frame)); - break; - case 2: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Remove the layer from the tree. The resources should not be returned - // since they are still on the main thread layer. - delegated_->RemoveFromParent(); - break; - case 3: - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Set a new frame. Resources should be returned immediately. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 888); - AddTransferableResource(frame.get(), 888); - AddTextureQuad(frame.get(), 777); - AddTransferableResource(frame.get(), 777); - SetFrameData(std::move(frame)); - - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - { - unsigned expected[] = {555, 999}; - EXPECT_RESOURCES(expected, resources); - EXPECT_TRUE(TestAndResetAvailable()); - resources.clear(); - } - - // Destroy the frame provider. - frame_provider_ = NULL; - - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - EXPECT_EQ(0u, resources.size()); - EXPECT_FALSE(TestAndResetAvailable()); - - // Destroy the layer. Resources should be returned. - delegated_ = NULL; - - resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); - { - unsigned expected[] = {777, 888}; - EXPECT_RESOURCES(expected, resources); - EXPECT_TRUE(TestAndResetAvailable()); - } - EndTest(); - break; - } - } - - void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { - ReturnUnusedResourcesFromParent(host_impl); - } - - scoped_refptr<DelegatedRendererLayer> delegated_thief_; -}; - -SINGLE_AND_MULTI_THREAD_TEST_F( - LayerTreeHostDelegatedTestRemoveAndChangeResources); - -class LayerTreeHostDelegatedTestActiveFrameIsValid - : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { - public: - LayerTreeHostDelegatedTestActiveFrameIsValid() - : drew_with_pending_tree_(false) {} - - void DidCommitAndDrawFrame() override { - scoped_ptr<DelegatedFrameData> frame; - switch (layer_tree_host()->source_frame_number()) { - case 1: - // This frame goes to the active tree. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 999); - AddTransferableResource(frame.get(), 999); - SetFrameData(std::move(frame)); - break; - case 2: - // This frame stops in the pending tree while we redraw the active tree. - frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); - AddTextureQuad(frame.get(), 555); - AddTransferableResource(frame.get(), 555); - SetFrameData(std::move(frame)); - break; - } - } - - void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { - if (host_impl->active_tree()->source_frame_number() < 1) - return; - - LayerImpl* root_impl = host_impl->active_tree()->root_layer(); - FakeDelegatedRendererLayerImpl* delegated_impl = - static_cast<FakeDelegatedRendererLayerImpl*>( - root_impl->children()[0].get()); - const ResourceProvider::ResourceIdMap& map = - host_impl->resource_provider()->GetChildToParentMap( - delegated_impl->ChildId()); - - switch (host_impl->active_tree()->source_frame_number()) { - case 1: - if (!host_impl->pending_tree()) { - // Frame 2 is blocked from activating until another draw happens with - // Frame 1. This ensures we draw a different active frame from - // what's in the pending tree. - host_impl->BlockNotifyReadyToActivateForTesting(true); - host_impl->SetNeedsRedrawRect(gfx::Rect(1, 1)); - break; - } - - // The resources in the active tree should be valid. - EXPECT_EQ(1u, map.count(999)); - - host_impl->BlockNotifyReadyToActivateForTesting(false); - drew_with_pending_tree_ = true; - break; - case 2: - EXPECT_TRUE(drew_with_pending_tree_); - - // The resources in the active tree should be valid. - EXPECT_EQ(1u, map.count(555)); - EndTest(); - break; - } - } - - void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { - // Return everything so that we can reliably delete resources that lose - // their references. This would happen if the tab was backgrounded or - // the parent decided to drop all resources for some reason. - ReturnAllResourcesFromParent(host_impl); - } - - bool drew_with_pending_tree_; -}; - -// This test blocks activation which is not supported for single thread mode. -MULTI_THREAD_BLOCKNOTIFY_TEST_F(LayerTreeHostDelegatedTestActiveFrameIsValid); - -} // namespace -} // namespace cc
diff --git a/cc/trees/property_tree_builder.cc b/cc/trees/property_tree_builder.cc index 1d637229d..9a68902 100644 --- a/cc/trees/property_tree_builder.cc +++ b/cc/trees/property_tree_builder.cc
@@ -528,8 +528,7 @@ } // If the layer clips its descendants but it is not axis-aligned with respect // to its parent. - bool layer_clips_external_content = - LayerClipsSubtree(layer) || layer->HasDelegatedContent(); + bool layer_clips_external_content = LayerClipsSubtree(layer); if (layer_clips_external_content && !preserves_2d_axis_alignment && num_descendants_that_draw_content > 0) { TRACE_EVENT_INSTANT0(
diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn index fdebfc7..01973227 100644 --- a/chrome/BUILD.gn +++ b/chrome/BUILD.gn
@@ -578,7 +578,6 @@ "//chrome/browser/resources:net_internals_resources", "//chrome/browser/resources:password_manager_internals_resources", "//chrome/browser/resources:policy_resources", - "//chrome/browser/resources:signin_internals_resources", "//chrome/browser/resources:translate_internals_resources", ] if (!is_ios) { @@ -655,7 +654,6 @@ "$root_gen_dir/chrome/net_internals_resources.pak", "$root_gen_dir/chrome/password_manager_internals_resources.pak", "$root_gen_dir/chrome/policy_resources.pak", - "$root_gen_dir/chrome/signin_internals_resources.pak", "$root_gen_dir/chrome/translate_internals_resources.pak", "$root_gen_dir/components/components_resources.pak", "$root_gen_dir/net/net_resources.pak", @@ -669,7 +667,6 @@ "//chrome/browser/resources:net_internals_resources", "//chrome/browser/resources:password_manager_internals_resources", "//chrome/browser/resources:policy_resources", - "//chrome/browser/resources:signin_internals_resources", "//chrome/browser/resources:translate_internals_resources", "//chrome/common:resources", "//components/resources",
diff --git a/chrome/VERSION b/chrome/VERSION index c3c9182..458cd22 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=50 MINOR=0 -BUILD=2645 +BUILD=2646 PATCH=0
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index d0e52279..0b12617 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -178,7 +178,6 @@ srcjar_deps += [ ":custom_tabs_service_aidl", "//chrome:page_info_connection_type_javagen", - "//components/enhanced_bookmarks:enhanced_bookmarks_java_enums_srcjar", "//components/infobars/core:infobar_enums_java", "//components/offline_pages:offline_page_feature_enums_java", "//components/offline_pages:offline_page_model_enums_java",
diff --git a/chrome/android/java/proguard.flags b/chrome/android/java/proguard.flags index 80789951..1fbccbc1 100644 --- a/chrome/android/java/proguard.flags +++ b/chrome/android/java/proguard.flags
@@ -153,3 +153,9 @@ #-dontwarn android.webkit.WebView -dontwarn android.net.http.SslCertificate + +# Needed for assertions in BaseChromiumApplication. +# TODO(twellington): Remove these two lines when support for detecting a debug +# build lands (https://codereview.chromium.org/1597273005/). +-keep class android.support.v7.app.ToolbarActionBar$ToolbarCallbackWrapper {*;} +-keep class android.support.v7.internal.app.ToolbarActionBar$ToolbarCallbackWrapper {*;}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/BackgroundSyncLauncher.java b/chrome/android/java/src/org/chromium/chrome/browser/BackgroundSyncLauncher.java index 9ef5d1d..ffec5a9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/BackgroundSyncLauncher.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/BackgroundSyncLauncher.java
@@ -48,11 +48,6 @@ private static boolean sGCMEnabled = true; /** - * Disables automatic reporting of GCM success / failure statistics. - */ - private static boolean sReportingDisabledForTests = false; - - /** * Create a BackgroundSyncLauncher object, which is owned by C++. * @param context The app context. */ @@ -133,14 +128,13 @@ protected void onPostExecute(Void params) { if (sGCMEnabled) { if (shouldLaunch) { - boolean scheduleSuccess = - scheduleLaunchTask(context, mScheduler, minDelayMs); - recordBooleanHistogram( - "BackgroundSync.LaunchTask.ScheduleSuccess", scheduleSuccess); + RecordHistogram.recordBooleanHistogram( + "BackgroundSync.LaunchTask.ScheduleSuccess", + scheduleLaunchTask(context, mScheduler, minDelayMs)); } else { - boolean cancelSuccess = removeScheduledTasks(mScheduler); - recordBooleanHistogram( - "BackgroundSync.LaunchTask.CancelSuccess", cancelSuccess); + RecordHistogram.recordBooleanHistogram( + "BackgroundSync.LaunchTask.CancelSuccess", + removeScheduledTasks(mScheduler)); } } } @@ -179,13 +173,14 @@ // This will not automatically set {@link sGCMEnabled} to true, in case it has been // disabled in tests. if (sGCMEnabled) { + boolean isAvailable = true; if (!canUseGooglePlayServices(context)) { setGCMEnabled(false); Log.i(TAG, "Disabling Background Sync because Play Services is not up to date."); - recordBooleanHistogram("BackgroundSync.LaunchTask.PlayServicesAvailable", false); - } else { - recordBooleanHistogram("BackgroundSync.LaunchTask.PlayServicesAvailable", true); + isAvailable = false; } + RecordHistogram.recordBooleanHistogram( + "BackgroundSync.LaunchTask.PlayServicesAvailable", isAvailable); } return !sGCMEnabled; } @@ -261,16 +256,4 @@ static void setGCMEnabled(boolean enabled) { sGCMEnabled = enabled; } - - @VisibleForTesting - static void setReportingDisabledForTests(boolean disabled) { - sReportingDisabledForTests = disabled; - } - - private static void recordBooleanHistogram(String name, boolean value) { - if (!sReportingDisabledForTests) { - // recordBooleanHistogram must only be called when the browser is running. - RecordHistogram.recordBooleanHistogram(name, value); - } - } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java index 58c2863..d7fb83c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java
@@ -190,6 +190,14 @@ private PrintingController mPrintingController; /** + * This is called during early initialization in order to set up ChildProcessLauncher + * for certain Chrome packaging configurations + */ + public ChildProcessLauncher.ChildProcessCreationParams getChildProcessCreationParams() { + return null; + } + + /** * This is called once per ChromeApplication instance, which get created per process * (browser OR renderer). Don't stick anything in here that shouldn't be called multiple times * during Chrome's lifetime.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanel.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanel.java index 0e90dce..2fddd22 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanel.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanel.java
@@ -76,42 +76,29 @@ INFOBAR_HIDDEN, CONTENT_CHANGED, KEYBOARD_SHOWN, - KEYBOARD_HIDDEN; + KEYBOARD_HIDDEN, + TAB_NAVIGATION; } - /** - * The activity this panel is in. - */ + /** The activity this panel is in. */ protected ChromeActivity mActivity; - /** - * The initial height of the Overlay Panel. - */ + /** The initial height of the Overlay Panel. */ private float mInitialPanelHeight; - /** - * Whether a touch gesture has been detected. - */ + /** Whether a touch gesture has been detected. */ private boolean mHasDetectedTouchGesture; - /** - * That factory that creates OverlayPanelContents. - */ + /** That factory that creates OverlayPanelContents. */ private OverlayPanelContentFactory mContentFactory; - /** - * Container for content the panel will show. - */ + /** Container for content the panel will show. */ private OverlayPanelContent mContent; - /** - * The {@link OverlayPanelHost} used to communicate with the supported layout. - */ + /** The {@link OverlayPanelHost} used to communicate with the supported layout. */ private OverlayPanelHost mOverlayPanelHost; - /** - * OverlayPanel manager handle for notifications of opening and closing. - */ + /** OverlayPanel manager handle for notifications of opening and closing. */ protected OverlayPanelManager mPanelManager; // ============================================================================================ @@ -240,9 +227,12 @@ /** * Notify the panel's content that it has been touched. + * @param x The X position of the touch in dp. */ - public void notifyPanelTouched() { - getOverlayPanelContent().notifyPanelTouched(); + public void notifyBarTouched(float x) { + if (!isCoordinateInsideCloseButton(x)) { + getOverlayPanelContent().notifyBarTouched(); + } } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelContent.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelContent.java index 9778cbf6..b77b5e8 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelContent.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelContent.java
@@ -312,10 +312,10 @@ } /** - * Notifies that the Panel has been touched. Calling this method will turn the Content + * Notifies that the panel's bar has been touched. Calling this method will turn the Content * visible, causing it to be rendered. */ - public void notifyPanelTouched() { + public void notifyBarTouched() { setVisibility(true); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java index 74a65e5..50796ab 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java
@@ -310,6 +310,13 @@ return mManagementDelegate != null && !mManagementDelegate.isRunningInCompatibilityMode(); } + @Override + public void notifyBarTouched(float x) { + // Directly notify the content that it was touched since the close button is not displayed + // when Contextual Search is peeking. + getOverlayPanelContent().notifyBarTouched(); + } + // ============================================================================================ // Animation Handling // ============================================================================================
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchStaticEventFilter.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchStaticEventFilter.java index bedd8440f..5a5d60d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchStaticEventFilter.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchStaticEventFilter.java
@@ -86,7 +86,7 @@ // TODO(pedrosimonetti): Once we implement "side-swipe to dismiss" // we'll have to revisit this because we don't want to set the // Content View visibility to true when the side-swipe is detected. - activePanel.notifyPanelTouched(); + activePanel.notifyBarTouched(event.getX() * mPxToDp); } mSwipeRecognizer.onTouchEvent(event);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/document/ChromeLauncherActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/document/ChromeLauncherActivity.java index 93674585..a97feb44 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/document/ChromeLauncherActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/document/ChromeLauncherActivity.java
@@ -43,7 +43,6 @@ import org.chromium.chrome.browser.customtabs.CustomTabActivity; import org.chromium.chrome.browser.externalnav.IntentWithGesturesHandler; import org.chromium.chrome.browser.firstrun.FirstRunFlowSequencer; -import org.chromium.chrome.browser.metrics.LaunchHistogram; import org.chromium.chrome.browser.metrics.LaunchMetrics; import org.chromium.chrome.browser.metrics.StartupMetrics; import org.chromium.chrome.browser.multiwindow.MultiWindowUtils; @@ -111,8 +110,10 @@ */ private static final int INITIAL_DOCUMENT_ACTIVITY_LAUNCH_TIMEOUT_MS = 500; - private static final LaunchHistogram sMoveToFrontExceptionHistogram = - new LaunchHistogram("DocumentActivity.MoveToFrontFailed"); + private static final LaunchMetrics.BooleanEvent sMoveToFrontExceptionHistogram = + new LaunchMetrics.BooleanEvent("DocumentActivity.MoveToFrontFailed"); + private static final LaunchMetrics.SparseHistogramSample sIntentFlagsHistogram = + new LaunchMetrics.SparseHistogramSample("Launch.IntentFlags"); private IntentHandler mIntentHandler; private boolean mIsInMultiInstanceMode; @@ -154,11 +155,11 @@ // show homepage, which might require reading PartnerBrowserCustomizations provider. PartnerBrowserCustomizations.initializeAsync(getApplicationContext(), PARTNER_BROWSER_CUSTOMIZATIONS_TIMEOUT_MS); + maybePerformMigrationTasks(); + recordIntentMetrics(); mIsInMultiInstanceMode = MultiWindowUtils.getInstance().shouldRunInMultiInstanceMode(this); mIntentHandler = new IntentHandler(this, getPackageName()); - maybePerformMigrationTasks(); - mIsCustomTabIntent = isCustomTabIntent(); Intent intent = getIntent(); @@ -822,9 +823,9 @@ } /** - * Attempt to move a task back to the front. This can FAIL for some reason because the UID + * Attempt to move a task back to the front. This can fail for some reason because the UID * of the DocumentActivity we try to bring back to the front doesn't match the - * ChromeLauncherActivities. + * ChromeLauncherActivity's. * @param task Task to attempt to bring back to the foreground. * @return Whether or not this succeeded. */ @@ -864,9 +865,16 @@ } /** - * Send the number of times an exception was caught when trying to move a task back to front. + * Records metrics gleaned from the Intent. */ - public static void sendExceptionCount() { - sMoveToFrontExceptionHistogram.commitHistogram(); + private void recordIntentMetrics() { + Intent intent = getIntent(); + IntentHandler.ExternalAppId source = + IntentHandler.determineExternalIntentSource(getPackageName(), intent); + if (intent.getPackage() == null && source != IntentHandler.ExternalAppId.CHROME) { + int flagsOfInterest = Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NEW_DOCUMENT; + int maskedFlags = intent.getFlags() & flagsOfInterest; + sIntentFlagsHistogram.record(maskedFlags); + } } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java index 36055b9..7399570 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java
@@ -429,7 +429,6 @@ public void onStartWithNative() { super.onStartWithNative(); handleDocumentUma(); - ChromeLauncherActivity.sendExceptionCount(); } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java index ebdd9e5..0ee3288 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java
@@ -373,17 +373,19 @@ boolean isMainFrame, String validatedUrl, boolean isErrorPage, boolean isIframeSrcdoc) { if (!isMainFrame) return; + // If there is a navigation in the current tab, hide the bar. It will show again + // once the distillability test is successful. + if (readerTabId == mTabModelSelector.getCurrentTabId()) { + closeReaderPanel(StateChangeReason.TAB_NAVIGATION, false); + } // Make sure the tab was not destroyed. ReaderModeTabInfo tabInfo = mTabStatusMap.get(readerTabId); if (tabInfo == null) return; - // Reset closed state of reader mode in this tab. - tabInfo.setIsDismissed(false); tabInfo.setUrl(validatedUrl); if (DomDistillerUrlUtils.isDistilledPage(validatedUrl)) { tabInfo.setStatus(STARTED); - closeReaderPanel(StateChangeReason.UNKNOWN, true); mReaderModePageUrl = validatedUrl; } } @@ -400,8 +402,6 @@ // Make sure the tab was not destroyed. ReaderModeTabInfo tabInfo = mTabStatusMap.get(readerTabId); if (tabInfo == null) return; - // Reset closed state of reader mode in this tab. - tabInfo.setIsDismissed(false); tabInfo.setStatus(POSSIBLE); if (!TextUtils.equals(url, @@ -420,10 +420,12 @@ } @Override - public void didStartLoading(String url) { + public void navigationEntryCommitted() { + // Make sure the tab was not destroyed. ReaderModeTabInfo tabInfo = mTabStatusMap.get(readerTabId); if (tabInfo == null) return; - // Reset closed state of reader mode in this tab. + // Reset closed state of reader mode in this tab once we know a navigation is + // happening. tabInfo.setIsDismissed(false); } };
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/BookmarkLaunchLocation.java b/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/BookmarkLaunchLocation.java new file mode 100644 index 0000000..4fb3e18 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/BookmarkLaunchLocation.java
@@ -0,0 +1,20 @@ +// Copyright 2016 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. + +package org.chromium.chrome.browser.enhancedbookmarks; + +/** + * Possible locations from which a bookmark can be opened. + * + * Please sync with the corresponding histograms.xml. + */ +class BookmarkLaunchLocation { + public static final int ALL_ITEMS = 0; + public static final int UNCATEGORIZED = 1; // Deprecated. + public static final int FOLDER = 2; + public static final int FILTER = 3; + public static final int SEARCH = 4; + public static final int BOOKMARK_EDITOR = 5; + public static final int COUNT = 6; +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkActivity.java index 5912934..ef7dcbc 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkActivity.java
@@ -83,7 +83,7 @@ if (requestCode == EDIT_BOOKMARK_REQUEST_CODE && resultCode == RESULT_OK) { BookmarkId bookmarkId = BookmarkId.getBookmarkIdFromString(data.getStringExtra( INTENT_VISIT_BOOKMARK_ID)); - mBookmarkManager.openBookmark(bookmarkId, LaunchLocation.BOOKMARK_EDITOR); + mBookmarkManager.openBookmark(bookmarkId, BookmarkLaunchLocation.BOOKMARK_EDITOR); } } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkBookmarkRow.java b/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkBookmarkRow.java index 5011497..e54599b8 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkBookmarkRow.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkBookmarkRow.java
@@ -60,13 +60,13 @@ int launchLocation = -1; switch (mDelegate.getCurrentState()) { case EnhancedBookmarkUIState.STATE_ALL_BOOKMARKS: - launchLocation = LaunchLocation.ALL_ITEMS; + launchLocation = BookmarkLaunchLocation.ALL_ITEMS; break; case EnhancedBookmarkUIState.STATE_FOLDER: - launchLocation = LaunchLocation.FOLDER; + launchLocation = BookmarkLaunchLocation.FOLDER; break; case EnhancedBookmarkUIState.STATE_FILTER: - launchLocation = LaunchLocation.FILTER; + launchLocation = BookmarkLaunchLocation.FILTER; break; case EnhancedBookmarkUIState.STATE_LOADING: assert false :
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkDelegate.java index 681c0fa9..fcdcf45 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkDelegate.java
@@ -107,7 +107,7 @@ * Closes the EnhancedBookmark UI (if on phone) and opens the given bookmark. * @param bookmark bookmark to open. * @param launchLocation The UI location where user tried to open bookmark. It is one of - * {@link LaunchLocation} values + * {@link BookmarkLaunchLocation} values */ void openBookmark(BookmarkId bookmark, int launchLocation);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkEditActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkEditActivity.java index c70e260..94471c1 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkEditActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkEditActivity.java
@@ -345,7 +345,7 @@ setResult(RESULT_OK, intent); } else { EnhancedBookmarkUtils.openBookmark( - mModel, this, mBookmarkId, LaunchLocation.BOOKMARK_EDITOR); + mModel, this, mBookmarkId, BookmarkLaunchLocation.BOOKMARK_EDITOR); } finish(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkSearchRow.java b/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkSearchRow.java index e60e08d..fe5eb9f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkSearchRow.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkSearchRow.java
@@ -54,7 +54,7 @@ @Override public void onClick() { - mDelegate.openBookmark(mBookmarkId, LaunchLocation.SEARCH); + mDelegate.openBookmark(mBookmarkId, BookmarkLaunchLocation.SEARCH); mHistoryDelegate.saveSearchHistory(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkUtils.java index 405a9fa0..25b4442 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkUtils.java
@@ -418,10 +418,10 @@ NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_BOOKMARK); if (url.startsWith("file:")) { RecordHistogram.recordEnumeratedHistogram( - "OfflinePages.LaunchLocation", launchLocation, LaunchLocation.COUNT); + "OfflinePages.LaunchLocation", launchLocation, BookmarkLaunchLocation.COUNT); } else { RecordHistogram.recordEnumeratedHistogram( - "Stars.LaunchLocation", launchLocation, LaunchLocation.COUNT); + "Stars.LaunchLocation", launchLocation, BookmarkLaunchLocation.COUNT); } openUrl(activity, url);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java index 63981e3..5a97297f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java
@@ -42,8 +42,6 @@ @VisibleForTesting public static final String EXTRA_BROWSER_FALLBACK_URL = "browser_fallback_url"; - @VisibleForTesting - static boolean sReportingDisabledForTests = false; private final ExternalNavigationDelegate mDelegate; @@ -108,7 +106,8 @@ long time = SystemClock.elapsedRealtime(); OverrideUrlLoadingResult result = shouldOverrideUrlLoadingInternal( params, intent, hasBrowserFallbackUrl, browserFallbackUrl); - maybeLogExecutionTime(time); + RecordHistogram.recordTimesHistogram("Android.StrictMode.OverrideUrlLoadingTime", + SystemClock.elapsedRealtime() - time, TimeUnit.MILLISECONDS); if (result == OverrideUrlLoadingResult.NO_OVERRIDE && hasBrowserFallbackUrl && (params.getRedirectHandler() == null @@ -119,13 +118,6 @@ return result; } - private void maybeLogExecutionTime(long time) { - if (!sReportingDisabledForTests) { - RecordHistogram.recordTimesHistogram("Android.StrictMode.OverrideUrlLoadingTime", - SystemClock.elapsedRealtime() - time, TimeUnit.MILLISECONDS); - } - } - private OverrideUrlLoadingResult shouldOverrideUrlLoadingInternal( ExternalNavigationParams params, Intent intent, boolean hasBrowserFallbackUrl, String browserFallbackUrl) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ForcedSigninProcessor.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ForcedSigninProcessor.java index cc57c8df..8b332a1 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ForcedSigninProcessor.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ForcedSigninProcessor.java
@@ -8,6 +8,7 @@ import android.content.Context; import org.chromium.base.Callback; +import org.chromium.base.Log; import org.chromium.chrome.browser.services.AndroidEduAndChildAccountHelper; import org.chromium.chrome.browser.signin.AccountManagementFragment; import org.chromium.chrome.browser.signin.SigninManager; @@ -28,6 +29,8 @@ * ForcedSigninProcessor.start(appContext). */ public final class ForcedSigninProcessor { + private static final String TAG = "ForcedSignin"; + /* * Only for static usage. */ @@ -60,25 +63,30 @@ */ private static void processForcedSignIn(final Context appContext) { final SigninManager signinManager = SigninManager.get(appContext); + // By definition we have finished all the checks for first run. + signinManager.onFirstRunCheckDone(); if (!FeatureUtilities.canAllowSync(appContext) || !signinManager.isSignInAllowed()) { + Log.d(TAG, "Sign in disallowed"); return; } AccountManagerHelper.get(appContext).getGoogleAccounts(new Callback<Account[]>() { @Override public void onResult(Account[] accounts) { - if (accounts.length == 1) { - signinManager.signIn(accounts[0], null, new SigninManager.SignInCallback() { - @Override - public void onSignInComplete() { - // Since this is a forced signin, signout is not allowed. - AccountManagementFragment.setSignOutAllowedPreferenceValue( - appContext, false); - } - - @Override - public void onSignInAborted() {} - }); + if (accounts.length != 1) { + Log.d(TAG, "Incorrect number of accounts (%d)", accounts.length); + return; } + signinManager.signIn(accounts[0], null, new SigninManager.SignInCallback() { + @Override + public void onSignInComplete() { + // Since this is a forced signin, signout is not allowed. + AccountManagementFragment.setSignOutAllowedPreferenceValue( + appContext, false); + } + + @Override + public void onSignInAborted() {} + }); } }); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/gcore/GoogleApiClientHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/gcore/GoogleApiClientHelper.java index 2264915..95e3511f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/gcore/GoogleApiClientHelper.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/gcore/GoogleApiClientHelper.java
@@ -15,10 +15,6 @@ import org.chromium.base.ApplicationStatus; import org.chromium.base.ApplicationStatus.ApplicationStateListener; import org.chromium.base.Log; -import org.chromium.base.ThreadUtils; - -import java.util.HashSet; -import java.util.Set; /** * Helps managing connections when using {@link GoogleApiClient}. @@ -72,40 +68,7 @@ */ public class GoogleApiClientHelper implements OnConnectionFailedListener, ConnectionCallbacks { - private static final String TAG = "gcore"; - - /** - * Listens to application state changes. It is created lazily when we want to register a client. - * Must be interacted with on the Chrome UI Thread. - */ - private static LifecycleHook sHook; - - private static class LifecycleHook implements ApplicationStateListener { - - private final Set<GoogleApiClientHelper> mClientHelpers = new HashSet<>(); - private boolean mIsApplicationVisible = ApplicationStatus.hasVisibleActivities(); - - public LifecycleHook() { - ApplicationStatus.registerApplicationStateListener(this); - Log.v(TAG, "lifecycle hook registered."); - } - - @Override - public void onApplicationStateChange(int newState) { - Log.v(TAG, "onApplicationStateChange"); - boolean newVisibility = ApplicationStatus.hasVisibleActivities(); - if (mIsApplicationVisible == newVisibility) return; - - Log.v(TAG, "Application visibilty changed to %s. Updating state of %d clients.", - mIsApplicationVisible, mClientHelpers.size()); - - mIsApplicationVisible = newVisibility; - for (GoogleApiClientHelper clientHelper : mClientHelpers) { - if (mIsApplicationVisible) clientHelper.restoreConnectedState(); - else clientHelper.disconnectWithDelay(); - } - } - } + private static final String TAG = "GCore"; private int mResolutionAttempts = 0; private boolean mWasConnectedBefore = false; @@ -133,17 +96,11 @@ * Enabling or disabling it while it is already enabled or disabled has no effect. */ public void enableLifecycleManagement(final boolean enabled) { - Log.v(TAG, "enableLifecycleManagement"); - ThreadUtils.runOnUiThread(new Runnable() { - @Override - public void run() { - if (sHook == null) sHook = new LifecycleHook(); + Log.d(TAG, "enableLifecycleManagement(%s)", enabled); + LifecycleHook hook = LifecycleHook.getInstance(); - if (enabled) sHook.mClientHelpers.add(GoogleApiClientHelper.this); - else sHook.mClientHelpers.remove(GoogleApiClientHelper.this); - } - - }); + if (enabled) hook.registerClientHelper(GoogleApiClientHelper.this); + else hook.unregisterClientHelper(GoogleApiClientHelper.this); } /** @@ -183,20 +140,20 @@ setDisconnectionDelay(0); } - private void restoreConnectedState() { + void restoreConnectedState() { if (mWasConnectedBefore) { mClient.connect(); } } - private void disconnectWithDelay() { + void disconnectWithDelay() { new Handler().postDelayed(new Runnable() { @Override public void run() { // Double check that Chrome is still in the background boolean skipDisconnect = ApplicationStatus.hasVisibleActivities(); - Log.v(TAG, "Disconnect delay expired. skipDisconnect=%s", skipDisconnect); + Log.d(TAG, "Disconnect delay expired. skipDisconnect=%s", skipDisconnect); if (!skipDisconnect) disconnect(); } }, mDisconnectionDelayMs); @@ -252,20 +209,4 @@ || errorCode == ConnectionResult.NETWORK_ERROR || errorCode == ConnectionResult.SERVICE_UPDATING; } - - /** - * Reset static singletons. - * This is needed for JUnit tests as statics are not reset between runs and previous states can - * make other tests fail. It is not needed in instrumentation tests (and will be removed by - * Proguard in release builds) since the application lifecycle will naturally do the work. - * Must be called on the main/UI thread. - */ - static void resetLifecycleHookForJUnitTests() { - ThreadUtils.assertOnUiThread(); - - if (sHook == null) return; - - ApplicationStatus.unregisterApplicationStateListener(sHook); - sHook = null; - } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/gcore/LifecycleHook.java b/chrome/android/java/src/org/chromium/chrome/browser/gcore/LifecycleHook.java new file mode 100644 index 0000000..777c31ff --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/gcore/LifecycleHook.java
@@ -0,0 +1,91 @@ +// Copyright 2015 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. + +package org.chromium.chrome.browser.gcore; + +import org.chromium.base.ApplicationStatus; +import org.chromium.base.ApplicationStatus.ApplicationStateListener; +import org.chromium.base.Log; +import org.chromium.base.ThreadUtils; + +import java.util.HashSet; +import java.util.Set; + +/** + * Listens to application state changes. It is created lazily when we want to register a + * {@link GoogleApiClientHelper}. + * Thread safe. + */ +class LifecycleHook implements ApplicationStateListener { + private static LifecycleHook sInstance; + private static final Object sInstanceLock = new Object(); + private static final String TAG = "GCore"; + + public static LifecycleHook getInstance() { + synchronized (sInstanceLock) { + if (sInstance == null) sInstance = new LifecycleHook(); + return sInstance; + } + } + + /** + * Reset static singletons. + * This is needed for JUnit tests as statics are not reset between runs and previous states can + * make other tests fail. It is not needed in instrumentation tests (and will be removed by + * Proguard in release builds) since the application lifecycle will naturally do the work. + */ + public static void destroyInstanceForJUnitTests() { + LifecycleHook hook; + synchronized (sInstanceLock) { + if (sInstance == null) return; + hook = sInstance; + sInstance = null; + } + ApplicationStatus.unregisterApplicationStateListener(hook); + } + + private final Set<GoogleApiClientHelper> mClientHelpers; + private boolean mIsApplicationVisible; + + private LifecycleHook() { + mClientHelpers = new HashSet<GoogleApiClientHelper>(); + mIsApplicationVisible = ApplicationStatus.hasVisibleActivities(); + ApplicationStatus.registerApplicationStateListener(this); + Log.d(TAG, "lifecycle hook registered."); + } + + public void registerClientHelper(GoogleApiClientHelper clientHelper) { + synchronized (mClientHelpers) { + mClientHelpers.add(clientHelper); + } + } + + public void unregisterClientHelper(GoogleApiClientHelper clientHelper) { + synchronized (mClientHelpers) { + mClientHelpers.remove(clientHelper); + } + } + + + @Override + public void onApplicationStateChange(int newState) { + Log.d(TAG, "onApplicationStateChange"); + ThreadUtils.assertOnUiThread(); + + boolean newVisibility = ApplicationStatus.hasVisibleActivities(); + if (mIsApplicationVisible == newVisibility) return; + + Log.d(TAG, "Application visibilty changed to %s. Updating state of %d client(s).", + newVisibility, mClientHelpers.size()); + + mIsApplicationVisible = newVisibility; + + synchronized (mClientHelpers) { + for (GoogleApiClientHelper clientHelper : mClientHelpers) { + if (mIsApplicationVisible) clientHelper.restoreConnectedState(); + else clientHelper.disconnectWithDelay(); + } + } + } +} \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitializationActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitializationActivity.java index bb851b93..90ebf03e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitializationActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitializationActivity.java
@@ -26,7 +26,7 @@ import org.chromium.base.library_loader.ProcessInitException; import org.chromium.chrome.browser.ChromeApplication; import org.chromium.chrome.browser.WarmupManager; -import org.chromium.chrome.browser.metrics.LaunchHistogram; +import org.chromium.chrome.browser.metrics.LaunchMetrics; import org.chromium.chrome.browser.metrics.MemoryUma; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.ui.base.DeviceFormFactor; @@ -39,8 +39,8 @@ public abstract class AsyncInitializationActivity extends AppCompatActivity implements ChromeActivityNativeDelegate, BrowserParts { - private static final LaunchHistogram sBadIntentMetric = - new LaunchHistogram("Launch.InvalidIntent"); + private static final LaunchMetrics.BooleanEvent sBadIntentMetric = + new LaunchMetrics.BooleanEvent("Launch.InvalidIntent"); protected final Handler mHandler; @@ -270,9 +270,7 @@ public void onStartWithNative() { } @Override - public void onResumeWithNative() { - sBadIntentMetric.commitHistogram(); - } + public void onResumeWithNative() { } @Override public void onPauseWithNative() { }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/NativeInitializationController.java b/chrome/android/java/src/org/chromium/chrome/browser/init/NativeInitializationController.java index f7beba74..2fd5fa0 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/init/NativeInitializationController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/init/NativeInitializationController.java
@@ -14,6 +14,7 @@ import org.chromium.base.library_loader.LibraryLoader; import org.chromium.base.library_loader.LibraryProcessType; import org.chromium.base.library_loader.ProcessInitException; +import org.chromium.chrome.browser.ChromeApplication; import org.chromium.content.browser.ChildProcessLauncher; import java.util.ArrayList; @@ -98,6 +99,9 @@ mActivityDelegate.onStartupFailure(); return; } + ChromeApplication chrome = (ChromeApplication) mContext; + ChildProcessLauncher.setChildProcessCreationParams( + chrome.getChildProcessCreationParams()); ChildProcessLauncher.warmUp(mContext); ThreadUtils.runOnUiThread(new Runnable() { @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/remote/AbstractMediaRouteController.java b/chrome/android/java/src/org/chromium/chrome/browser/media/remote/AbstractMediaRouteController.java index 3efc95d..cc0f92e0 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/media/remote/AbstractMediaRouteController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/remote/AbstractMediaRouteController.java
@@ -8,6 +8,7 @@ import android.graphics.Bitmap; import android.net.Uri; import android.os.Handler; +import android.os.SystemClock; import android.support.v7.media.MediaControlIntent; import android.support.v7.media.MediaItemStatus; import android.support.v7.media.MediaRouteSelector; @@ -178,6 +179,9 @@ private final Set<UiListener> mUiListeners; private boolean mWatchingRouteSelection = false; + private long mMediaElementAttachedTimestampMs = 0; + private long mMediaElementDetachedTimestampMs = 0; + protected AbstractMediaRouteController() { mDebug = CommandLine.getInstance().hasSwitch(ChromeSwitches.ENABLE_CAST_DEBUG_LOGS); @@ -374,6 +378,33 @@ startWatchingRouteSelection(); } + @Override + public void release() { + recordEndOfSessionUMA(); + } + + private void recordEndOfSessionUMA() { + long remotePlaybackStoppedTimestampMs = SystemClock.uptimeMillis(); + + // There was no media element ever... + if (mMediaElementAttachedTimestampMs == 0) return; + + long remotePlaybackIntervalMs = + remotePlaybackStoppedTimestampMs - mMediaElementAttachedTimestampMs; + + if (mMediaElementDetachedTimestampMs == 0) { + mMediaElementDetachedTimestampMs = remotePlaybackStoppedTimestampMs; + } + + int noElementRemotePlaybackTimePercentage = + (int) ((remotePlaybackStoppedTimestampMs - mMediaElementDetachedTimestampMs) * 100 + / remotePlaybackIntervalMs); + RecordCastAction.recordRemoteSessionTimeWithoutMediaElementPercentage( + noElementRemotePlaybackTimePercentage); + mMediaElementAttachedTimestampMs = 0; + mMediaElementDetachedTimestampMs = 0; + } + protected final void registerRoute(RouteInfo route) { mCurrentRoute = route; @@ -420,6 +451,17 @@ @Override public void setMediaStateListener(MediaStateListener mediaStateListener) { + if (mMediaStateListener != null && mediaStateListener == null + && mMediaElementAttachedTimestampMs != 0) { + mMediaElementDetachedTimestampMs = SystemClock.uptimeMillis(); + } else if (mMediaStateListener == null && mediaStateListener != null) { + // We're switching the videos so let's record the UMA for the previous one. + if (mMediaElementDetachedTimestampMs != 0) recordEndOfSessionUMA(); + + mMediaElementAttachedTimestampMs = SystemClock.uptimeMillis(); + mMediaElementDetachedTimestampMs = 0; + } + mMediaStateListener = mediaStateListener; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/remote/DefaultMediaRouteController.java b/chrome/android/java/src/org/chromium/chrome/browser/media/remote/DefaultMediaRouteController.java index a1ae9d1..64906ac 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/media/remote/DefaultMediaRouteController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/remote/DefaultMediaRouteController.java
@@ -401,6 +401,8 @@ @Override public void release() { + super.release(); + for (UiListener listener : getUiListeners()) { listener.onRouteUnselected(this); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/remote/RecordCastAction.java b/chrome/android/java/src/org/chromium/chrome/browser/media/remote/RecordCastAction.java index dbb4a5f..65e0f1a5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/media/remote/RecordCastAction.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/remote/RecordCastAction.java
@@ -135,6 +135,20 @@ } } + /** + * Record the ratio of the time the media element was detached from the remote playback session + * to the total duration of the session (as from when the element has been attached till when + * the session stopped or disconnected), in percents. + * + * @param percentage The ratio in percents. + */ + public static void recordRemoteSessionTimeWithoutMediaElementPercentage(int percentage) { + if (LibraryLoader.isInitialized()) { + RecordHistogram.recordPercentageHistogram( + "Cast.Sender.SessionTimeWithoutMediaElementPercentage", percentage); + } + } + // Cast sending private static native void nativeRecordRemotePlaybackDeviceSelected(int deviceType); private static native void nativeRecordCastPlayRequested();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/remote/RemoteMediaPlayerBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/media/remote/RemoteMediaPlayerBridge.java index 466b802..5cd60d9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/media/remote/RemoteMediaPlayerBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/remote/RemoteMediaPlayerBridge.java
@@ -4,11 +4,7 @@ package org.chromium.chrome.browser.media.remote; -import android.annotation.SuppressLint; -import android.content.Context; import android.graphics.Bitmap; -import android.media.MediaPlayer; -import android.os.Build; import org.chromium.base.CommandLine; import org.chromium.base.Log; @@ -16,27 +12,15 @@ import org.chromium.base.annotations.JNINamespace; import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.media.remote.RemoteVideoInfo.PlayerState; -import org.chromium.media.MediaPlayerBridge; /** * Acts as a proxy between the remotely playing video and the HTMLMediaElement. - * - * Note that the only reason this derives from MediaPlayerBridge is that the - * MediaPlayerListener takes a MediaPlayerBridge in its constructor. - * TODO(aberent) fix this by creating a MediaPlayerBridgeInterface (or similar). */ @JNINamespace("remote_media") -public class RemoteMediaPlayerBridge extends MediaPlayerBridge { +public class RemoteMediaPlayerBridge { private long mStartPositionMillis; private long mNativeRemoteMediaPlayerBridge; - // TODO(dgn) We don't create MediaPlayerListener using a RemoteMediaPlayerBridge anymore so - // the inheritance and the extra listeners can now go away. (https://crbug.com/577110) - private MediaPlayer.OnCompletionListener mOnCompletionListener; - private MediaPlayer.OnSeekCompleteListener mOnSeekCompleteListener; - private MediaPlayer.OnErrorListener mOnErrorListener; - private MediaPlayer.OnPreparedListener mOnPreparedListener; - /** * The route controller for the video, null if no appropriate route controller. */ @@ -71,12 +55,8 @@ @Override public void onError() { - if (mActive && mOnErrorListener != null) { - @SuppressLint("InlinedApi") - int errorExtra = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 - ? MediaPlayer.MEDIA_ERROR_TIMED_OUT - : 0; - mOnErrorListener.onError(null, MediaPlayer.MEDIA_ERROR_UNKNOWN, errorExtra); + if (mActive && mNativeRemoteMediaPlayerBridge != 0) { + nativeOnError(mNativeRemoteMediaPlayerBridge); } } @@ -97,7 +77,6 @@ public void onPlaybackStateChanged(PlayerState newState) { if (mNativeRemoteMediaPlayerBridge == 0) return; if (newState == PlayerState.FINISHED || newState == PlayerState.INVALIDATED) { - onCompleted(); nativeOnPlaybackFinished(mNativeRemoteMediaPlayerBridge); } else if (newState == PlayerState.PLAYING) { nativeOnPlaying(mNativeRemoteMediaPlayerBridge); @@ -264,28 +243,24 @@ mPosterBitmap = bitmap; } - @Override @CalledByNative protected boolean isPlaying() { if (mRouteController == null) return false; return mRouteController.isPlaying(); } - @Override @CalledByNative protected int getCurrentPosition() { if (mRouteController == null) return 0; return (int) mRouteController.getPosition(); } - @Override @CalledByNative protected int getDuration() { if (mRouteController == null) return 0; return (int) mRouteController.getDuration(); } - @Override @CalledByNative protected void release() { // Remove the state change listeners. Release does mean that Chrome is no longer interested @@ -294,26 +269,22 @@ mActive = false; } - @Override @CalledByNative protected void setVolume(double volume) { } - @Override @CalledByNative protected void start() throws IllegalStateException { mPauseRequested = false; if (mRouteController != null && mRouteController.isBeingCast()) mRouteController.resume(); } - @Override @CalledByNative protected void pause() throws IllegalStateException { mPauseRequested = true; if (mRouteController != null && mRouteController.isBeingCast()) mRouteController.pause(); } - @Override @CalledByNative protected void seekTo(int msec) throws IllegalStateException { mSeekRequested = true; @@ -323,55 +294,12 @@ } } - @Override - protected boolean setDataSource( - Context context, String url, String cookies, String userAgent, boolean hideUrlLog) { - return true; - } - - @Override - protected void setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener) { - } - - @Override - protected void setOnCompletionListener(MediaPlayer.OnCompletionListener listener) { - mOnCompletionListener = listener; - } - - @Override - protected void setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListener listener) { - mOnSeekCompleteListener = listener; - } - - @Override - protected void setOnErrorListener(MediaPlayer.OnErrorListener listener) { - mOnErrorListener = listener; - } - - @Override - protected void setOnPreparedListener(MediaPlayer.OnPreparedListener listener) { - } - - @Override - protected void setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener) { - } - - /** - * Called when the video finishes - */ - public void onCompleted() { - if (mActive && mOnCompletionListener != null) { - mOnCompletionListener.onCompletion(null); - } - } - private void onRouteAvailabilityChange() { if (mNativeRemoteMediaPlayerBridge == 0) return; boolean usable = mRouteIsAvailable && mIsPlayable; nativeOnRouteAvailabilityChanged(mNativeRemoteMediaPlayerBridge, usable); } - @Override @CalledByNative protected void destroy() { if (mDebug) Log.i(TAG, "destroy"); @@ -399,7 +327,6 @@ }); } - private native String nativeGetFrameUrl(long nativeRemoteMediaPlayerBridge); private native void nativeOnPlaying(long nativeRemoteMediaPlayerBridge); private native void nativeOnPaused(long nativeRemoteMediaPlayerBridge); private native void nativeOnRouteUnselected(long nativeRemoteMediaPlayerBridge); @@ -412,5 +339,6 @@ private native void nativeOnCastStarting(long nativeRemoteMediaPlayerBridge, String castingMessage); private native void nativeOnCastStopping(long nativeRemoteMediaPlayerBridge); + private native void nativeOnError(long nativeRemoteMediaPlayerBridge); private native void nativeOnSeekCompleted(long nativeRemoteMediaPlayerBridge); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchHistogram.java b/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchHistogram.java deleted file mode 100644 index a2203347..0000000 --- a/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchHistogram.java +++ /dev/null
@@ -1,34 +0,0 @@ -// Copyright 2015 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. - -package org.chromium.chrome.browser.metrics; - -import org.chromium.base.metrics.RecordHistogram; - -/** - * Used for histograms that need to be recorded earlier than when the native - * library is loaded. Caches it until there is an opportunity to record it. - */ -public class LaunchHistogram { - private final String mHistogramName; - private boolean mIsHit; - - /** - * @param histogramName Name of the histogram to record. - */ - public LaunchHistogram(String histogramName) { - mHistogramName = histogramName; - } - - /** Records that the histogram condition occurred. */ - public void recordHit() { - mIsHit = true; - } - - /** Commits the histogram. Expects the native library to be loaded. */ - public void commitHistogram() { - RecordHistogram.recordBooleanHistogram(mHistogramName, mIsHit); - mIsHit = false; - } -} \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java b/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java index 6d016e4..93576f1 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java
@@ -15,10 +15,75 @@ import java.util.concurrent.TimeUnit; /** - * Used for recording metrics about Chrome launches. + * Used for recording metrics about Chrome launches that need to be recorded before the native + * library may have been loaded. Metrics are cached until the library is known to be loaded, then + * committed to the MetricsService all at once. */ @JNINamespace("metrics") public class LaunchMetrics { + + /** + * Creating an instance of a subclass of this class automatically adds it to a list of objects + * that are committed when the native library is available. + */ + private abstract static class CachedHistogram { + private static final List<CachedHistogram> sEvents = new ArrayList<CachedHistogram>(); + + protected String mHistogramName; + + /** + * @param histogramName Name of the histogram to record. + */ + protected CachedHistogram(String histogramName) { + mHistogramName = histogramName; + sEvents.add(this); + } + + /** Commits the histogram. Expects the native library to be loaded. */ + protected abstract void commitAndClear(); + } + + /** Caches whether an event happened. */ + public static class BooleanEvent extends CachedHistogram { + private boolean mIsHit; + + public BooleanEvent(String histogramName) { + super(histogramName); + } + + /** Records that the histogram condition occurred. */ + public void recordHit() { + mIsHit = true; + } + + @Override + protected void commitAndClear() { + RecordHistogram.recordBooleanHistogram(mHistogramName, mIsHit); + mIsHit = false; + } + } + + /** Caches a set of integer histogram samples. */ + public static class SparseHistogramSample extends CachedHistogram { + private final List<Integer> mSamples = new ArrayList<Integer>(); + + public SparseHistogramSample(String histogramName) { + super(histogramName); + } + + public void record(int sample) { + mSamples.add(sample); + } + + @Override + protected void commitAndClear() { + for (Integer sample : mSamples) { + RecordHistogram.recordSparseSlowlyHistogram(mHistogramName, sample); + } + mSamples.clear(); + } + } + // Each list item is a pair of the url and where it was added from e.g. from the add to // homescreen menu item, an app banner, or unknown. The mapping of int source values to // their string names is found in the C++ ShortcutInfo struct. @@ -26,6 +91,7 @@ new ArrayList<Pair<String, Integer>>(); private static final List<Pair<String, Integer>> sTabUrls = new ArrayList<Pair<String, Integer>>(); + private static final List<Long> sWebappHistogramTimes = new ArrayList<Long>(); /** @@ -47,7 +113,6 @@ sTabUrls.add(new Pair<String, Integer>(url, source)); } - /** * Records the time it took to look up from disk whether a MAC is valid during webapp startup. * @param time the number of milliseconds it took to finish. @@ -66,16 +131,21 @@ for (Pair<String, Integer> item : sActivityUrls) { nativeRecordLaunch(true, item.first, item.second, webContents); } + sActivityUrls.clear(); + for (Pair<String, Integer> item : sTabUrls) { nativeRecordLaunch(false, item.first, item.second, webContents); } + sTabUrls.clear(); + for (Long time : sWebappHistogramTimes) { RecordHistogram.recordTimesHistogram("Android.StrictMode.WebappAuthenticatorMac", time, TimeUnit.MILLISECONDS); } - sActivityUrls.clear(); - sTabUrls.clear(); sWebappHistogramTimes.clear(); + + // Record generic cached events. + for (CachedHistogram event : CachedHistogram.sEvents) event.commitAndClear(); } private static native void nativeRecordLaunch(
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java index 87651702..c813f22 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
@@ -61,6 +61,7 @@ import org.chromium.chrome.browser.search_engines.TemplateUrlService.TemplateUrlServiceObserver; import org.chromium.chrome.browser.snackbar.Snackbar; import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController; +import org.chromium.chrome.browser.sync.SyncSessionsMetrics; import org.chromium.chrome.browser.tab.EmptyTabObserver; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.TabObserver; @@ -529,6 +530,8 @@ tileTypes[i] = items[i].getTileType(); } mMostVisitedSites.recordTileTypeMetrics(tileTypes); + + SyncSessionsMetrics.recordYoungestForeignTabAgeOnNTP(); } };
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/RequestGenerator.java b/chrome/android/java/src/org/chromium/chrome/browser/omaha/RequestGenerator.java index d0c3c95..8109950 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omaha/RequestGenerator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omaha/RequestGenerator.java
@@ -47,7 +47,7 @@ /** * Generates the XML for the current request. - * Follows the format laid out at http://code.google.com/p/omaha/wiki/ServerProtocol + * Follows the format laid out at https://github.com/google/omaha/blob/wiki/ServerProtocolV3.md * with some additional dummy values supplied. */ public String generateXML(String sessionID, String versionName, long installAge,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/precache/PrecacheServiceLauncher.java b/chrome/android/java/src/org/chromium/chrome/browser/precache/PrecacheServiceLauncher.java index 5895d0c..31cf1725 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/precache/PrecacheServiceLauncher.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/precache/PrecacheServiceLauncher.java
@@ -11,6 +11,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; +import android.os.Build; import android.os.PowerManager; import android.os.PowerManager.WakeLock; import android.os.SystemClock; @@ -91,7 +92,13 @@ // Stop any running PrecacheService. If PrecacheService is not running, then this does // nothing. Intent serviceIntent = new Intent(null, null, context, PrecacheService.class); - context.stopService(serviceIntent); + try { + context.stopService(serviceIntent); + } catch (SecurityException e) { + // A bug in KitKat causes a SecurityException to be thrown in some cases. Ignore the + // exception if running KitKat, else rethrow. See http://crbug.com/539515. + if (Build.VERSION.SDK_INT != Build.VERSION_CODES.KITKAT) throw e; + } } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncSessionsMetrics.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncSessionsMetrics.java new file mode 100644 index 0000000..9832a2c1 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncSessionsMetrics.java
@@ -0,0 +1,23 @@ +// Copyright 2016 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. + +package org.chromium.chrome.browser.sync; + +/** + * A bridge to call sync sessions metrics logic. + */ +public final class SyncSessionsMetrics { + private SyncSessionsMetrics() {} + + /* + * Records a metric based on the youngest foreign tab. Should be called + * exactly once per NTP load. + */ + public static void recordYoungestForeignTabAgeOnNTP() { + nativeRecordYoungestForeignTabAgeOnNTP(); + } + + // Native methods + private static native void nativeRecordYoungestForeignTabAgeOnNTP(); +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java index 972c3a0..ae9275c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
@@ -724,6 +724,7 @@ if ((params.getTransitionType() & PageTransition.FROM_ADDRESS_BAR) == PageTransition.FROM_ADDRESS_BAR) { mAppAssociatedWith = null; + setIsAllowedToReturnToExternalApp(false); } // We load the URL from the tab rather than directly from the ContentView so the tab has @@ -770,6 +771,16 @@ } /** + * Sets whether the tab is showing an error page. This is reset whenever the tab finishes a + * navigation. + * + * @param isShowingErrorPage Whether the tab shows an error page. + */ + public void setIsShowingErrorPage(boolean isShowingErrorPage) { + mIsShowingErrorPage = isShowingErrorPage; + } + + /** * @return Whether or not the tab has something valid to render. */ public boolean isReady() { @@ -1448,8 +1459,6 @@ protected void didStartPageLoad(String validatedUrl, boolean showingErrorPage) { mIsFullscreenWaitingForLoad = !DomDistillerUrlUtils.isDistilledPage(validatedUrl); - mIsShowingErrorPage = showingErrorPage; - if (mLoFiBarPopupController != null) { mLoFiBarPopupController.resetLoFiPopupShownForPageLoad(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsObserver.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsObserver.java index 6161445af..c8c5eef 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsObserver.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsObserver.java
@@ -152,6 +152,12 @@ } @Override + public void didFinishNavigation( + boolean isMainFrame, boolean isErrorPage, boolean hasCommitted) { + if (isMainFrame && hasCommitted) mTab.setIsShowingErrorPage(isErrorPage); + } + + @Override public void didFinishLoad(long frameId, String validatedUrl, boolean isMainFrame) { if (isMainFrame) mTab.didFinishPageLoad(); PolicyAuditor auditor =
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java index ef86ef4..5105aa6 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java
@@ -68,9 +68,6 @@ /** Prevents two TabPersistentStores from saving the same file simultaneously. */ private static final Object SAVE_LIST_LOCK = new Object(); - @VisibleForTesting - static boolean sReportingDisabledForTests = false; - /** * Callback interface to use while reading the persisted TabModelSelector info from disk. */ @@ -257,7 +254,7 @@ } private static void logExecutionTime(String name, long time) { - if (!sReportingDisabledForTests && LibraryLoader.isInitialized()) { + if (LibraryLoader.isInitialized()) { RecordHistogram.recordTimesHistogram("Android.StrictMode.TabPersistentStore." + name, SystemClock.elapsedRealtime() - time, TimeUnit.MILLISECONDS); }
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_am.xtb b/chrome/android/java/strings/translations/android_chrome_strings_am.xtb index 8ebcf95..404511c 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_am.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">በአገልጋይ ችግሮች ምክንያት <ph name="FILE_NAME" />ን ማውረድ አልተሳካም።</translation> <translation id="1506061864768559482">የፍለጋ ፕሮግራም</translation> <translation id="1513352483775369820">ዕልባቶች እና የድር ታሪክ</translation> +<translation id="1546112724822176246">መሣሪያዎ አይታየዎትም? <ph name="BEGIN_LINK" />እገዛ ያግኙ<ph name="END_LINK" />።</translation> <translation id="1553358976309200471">Chromeን አዘምን</translation> <translation id="1557201757634521564">ምስጠራን በራስ እወቅ</translation> <translation id="1568822834048182062">የእርስዎ እልባቶች፣ ታሪክ እና ሌሎች ቅንብሮች ከGoogle መለያዎ ጋር ይመሳሰላሉ።</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">በአዲስ ትር ክፈት</translation> <translation id="4198229475320555619">የ<ph name="PAGE_SIZE_STRING" /> ዕልባት ከመስመር ውጭ ተቀምጧል</translation> <translation id="423410644998903704">Chrome እነሱን ለዚህ ጣቢያ ለማጋራት የፍቃዶች መዳረሻን ያስፈልገዋል።</translation> -<translation id="424696723690217687">አቅራቢያ ባሉ ነገሮች የተላኩ ድረ-ገጾችን ያግኙ። - -መሣሪያዎ ሲከፈት Chrome አቅራቢያ ያሉ ገጾች ካሉ ይቃኛሉ። እነዚህ ገጾች የገጽ ውጤቶችን ለማሻሻል በGoogle አገልግሎቶች በኩል ይሄዳሉ።</translation> <translation id="4254813446494774748">የትርጉም ቋንቋ፦</translation> <translation id="4256782883801055595">የክፍት ምንጭ ፍቃዶች</translation> <translation id="4259722352634471385">ዳሰሳ ታግዷል፦ <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">ማዋቀር በሂደት ላይ…</translation> <translation id="6112702117600201073">ገጽ በማደስ ላይ</translation> <translation id="6127379762771434464">ንጥል ተወግዷል</translation> +<translation id="6134870457258083164">መሣሪያዎ አይታየዎትም? <ph name="BEGIN_LINK1" />እገዛ ያግኙ<ph name="END_LINK1" /> ወይም <ph name="BEGIN_LINK2" />እንደገና ይፈልጉ<ph name="END_LINK2" />።</translation> <translation id="6138140242378429169">ገጹ ለሞባይል-አመቺ እንዲሆን ያድርጉ</translation> <translation id="6140912465461743537">አገር/ክልል</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> የውሂብ ቁጠባዎች</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">አድስ</translation> <translation id="7191430249889272776">ትር ጀርባ ላይ ተከፍቷል።</translation> <translation id="7208788139759694678">ውሂብ ቆጣቢ ተሰናክሏል</translation> +<translation id="721331389620694978">የአሰሳ ልማዶችን ሊያንፀባርቁ የሚችሉ አንዳንድ ቅንብሮች አይጸዱም።</translation> <translation id="7243308994586599757">አማራጮች ከማያ ገጹ ግርጌ አጠገብ ይገኛሉ</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> አካባቢያዊ የፍለጋ ውጤቶችን ለማሳየት የእርስዎን አካባቢ ይጠቀማል</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />እገዛ<ph name="END_LINK" /></translation> @@ -563,14 +563,12 @@ አዲስ ፍቃዶችን ለማግኘት ከበይነመሩቡ ጋር ይገናኙና የወረዱት ይዘቶችዎን ያጫውቱ።</translation> <translation id="8660471606262461360">ከGoogle ክፍያዎች</translation> -<translation id="8675945939500569406">አካላዊ ድሩ ይብራ?</translation> <translation id="8676374126336081632">ግቤቱን አጽዳ</translation> <translation id="869891660844655955">የሚያበቀበት ጊዜ</translation> <translation id="8699799819461268362">Google SafeSites ማጣሪያ</translation> <translation id="8701537995684343047">ከመስመር ውጭ ለማስቀመጥ ዕልባቱን ይጎብኙ</translation> <translation id="8719023831149562936">የአሁኑን ትር በሞገድ መላክ አልተቻለም</translation> <translation id="8725066075913043281">እንደገና ይሞክሩ</translation> -<translation id="8727142376512517020">ይህን ዳግም አታሳይ</translation> <translation id="8730621377337864115">ተከናውኗል</translation> <translation id="8737542153238017984">የተቀመጠ ገጽ ከመስመር ውጭ አይገኝም። ማከማቻ ሊሞላ ትንሽ ነው የቀረው።</translation> <translation id="8793430725658173476">ዩአርኤል ቅዳ</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb index f223388..1e6ea7d 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">أخفق تنزيل الملف <ph name="FILE_NAME" /> بسبب مشكلات بالخادم.</translation> <translation id="1506061864768559482">محرك البحث</translation> <translation id="1513352483775369820">الإشارات المرجعية وسجل بحث الويب</translation> +<translation id="1546112724822176246">ألا ترى جهازك؟ <ph name="BEGIN_LINK" />احصل على المساعدة<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">تحديث Chrome</translation> <translation id="1557201757634521564">الاكتشاف التلقائي للتشفير</translation> <translation id="1568822834048182062">ستتم مزامنة الإشارات المرجعية والسجل وكلمات المرور وغير ذلك من الإعدادات مع حسابك على Google.</translation> @@ -211,9 +212,6 @@ <translation id="4195643157523330669">فتح الإشارة في علامة تبويب جديدة</translation> <translation id="4198229475320555619">حُفظَت الإشارة المرجعية <ph name="PAGE_SIZE_STRING" /> بلا اتصال</translation> <translation id="423410644998903704">يحتاج Chrome إلى الحصول على حق الوصول إلى الأذونات لمشاركتها مع موقع الويب هذا.</translation> -<translation id="424696723690217687">اكتشف صفحات الويب التي تم إرسالها عن طريق الأجهزة المجاورة. - -سيبحث Chrome عن صفحات الأجهزة المجاورة عند إلغاء قفل جهازك. وستمر هذه الصفحات عبر خدمة Google لتحسين جودة نتائج الصفحات.</translation> <translation id="4254813446494774748">لغة الترجمة:</translation> <translation id="4256782883801055595">تراخيص البرامج مفتوحة المصدر</translation> <translation id="4259722352634471385">التنقل محظور: <ph name="URL" /></translation> @@ -371,6 +369,7 @@ <translation id="6108923351542677676">الإعداد قيد التقدّم…</translation> <translation id="6112702117600201073">يتم الآن تحديث الصفحة</translation> <translation id="6127379762771434464">أُزيلَ عنصر</translation> +<translation id="6134870457258083164">ألا ترى جهازك؟ <ph name="BEGIN_LINK1" />احصل على المساعدة<ph name="END_LINK1" /> أو <ph name="BEGIN_LINK2" />ابحث مرة أخرى<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">جعل الصفحة متوافقة مع الجوّال</translation> <translation id="6140912465461743537">الدولة/الإقليم</translation> <translation id="6159335304067198720">توفير البيانات بنسبة <ph name="PERCENT" /></translation> @@ -457,6 +456,7 @@ <translation id="7180611975245234373">تحديث</translation> <translation id="7191430249889272776">تم فتح علامة التبويب في الخلفية.</translation> <translation id="7208788139759694678">تعطيل توفير البيانات</translation> +<translation id="721331389620694978">لن يتم محو بعض الإعدادات التي قد تعكس عادات التصفح.</translation> <translation id="7243308994586599757">الخيارات المتاحة بالقرب من الجزء السفلي من الشاشة</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> يستخدم موقعك لعرض نتائج البحث المحلي</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />مساعدة<ph name="END_LINK" /></translation> @@ -563,14 +563,12 @@ للحصول على تراخيص جديدة، عليك الاتصال بالإنترنت ثم تشغيل المحتوى الذي تم تنزيله.</translation> <translation id="8660471606262461360">من Google Payments</translation> -<translation id="8675945939500569406">هل تريد تشغيل الشبكة المادية؟</translation> <translation id="8676374126336081632">محو الإرسال</translation> <translation id="869891660844655955">تاريخ انتهاء الصلاحية</translation> <translation id="8699799819461268362">فلتر Google SafeSites</translation> <translation id="8701537995684343047">انتقل إلى الإشارة المرجعية للحفظ بلا اتصال</translation> <translation id="8719023831149562936">تعذر إرسال علامة التبويب الحالية باستخدام الشعاع</translation> <translation id="8725066075913043281">أعد المحاولة</translation> -<translation id="8727142376512517020">عدم إظهار ذلك مرة أخرى</translation> <translation id="8730621377337864115">تم</translation> <translation id="8737542153238017984">الصفحة المحفوظة غير متوفرة في وضع عدم الاتصال. سعة التخزين ممتلئة.</translation> <translation id="8793430725658173476">نسخ عنوان URL</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb b/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb index 50cd6f8..688f507 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Изтеглянето на „<ph name="FILE_NAME" />“ не бе успешно поради проблеми в сървъра.</translation> <translation id="1506061864768559482">Търсеща машина</translation> <translation id="1513352483775369820">Отметки и посетени сайтове</translation> +<translation id="1546112724822176246">Не виждате устройството си? <ph name="BEGIN_LINK" />Получете помощ<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Актуализиране на Chrome</translation> <translation id="1557201757634521564">Автоматично откриване на кодирането</translation> <translation id="1568822834048182062">Вашите отметки, история, пароли и други настройки ще се синхронизират с профила ви в Google.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Отваряне в нов раздел</translation> <translation id="4198229475320555619">Запазена е офлайн отметка с размер от <ph name="PAGE_SIZE_STRING" /></translation> <translation id="423410644998903704">Chrome се нуждае от достъп до разрешенията, за да ги сподели с този сайт.</translation> -<translation id="424696723690217687">Откривайте уеб страници, изпращани от обекти в близост. - -Chrome ще сканира за намиращи се наблизо страници, когато устройството ви е отключено. Те ще преминават през услуга на Google с цел подобряване на качеството на съответните резултати.</translation> <translation id="4254813446494774748">Език за превод:</translation> <translation id="4256782883801055595">Лицензи за отворен код</translation> <translation id="4259722352634471385">Навигирането е блокирано: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Извършва се настройване…</translation> <translation id="6112702117600201073">Опресняване на страницата</translation> <translation id="6127379762771434464">Елементът бе премахнат</translation> +<translation id="6134870457258083164">Не виждате устройството си? <ph name="BEGIN_LINK1" />Получете помощ<ph name="END_LINK1" /> или <ph name="BEGIN_LINK2" />потърсете отново<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Направете страницата удобна за мобилни устройства</translation> <translation id="6140912465461743537">Държава/регион</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> икономия на данни</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Опресняване</translation> <translation id="7191430249889272776">Разделът е отворен на заден план.</translation> <translation id="7208788139759694678">Деактивирахте Икономия на данни</translation> +<translation id="721331389620694978">Няма да се изчистят някои настройки, които може да отразяват навиците при сърфиране.</translation> <translation id="7243308994586599757">Опциите са в долната част на екрана</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> използва местоположението ви, за да показва резултати от местното търсене</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Помощ<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ За да получите нови лицензи, свържете се с интернет и пуснете изтегленото съдържание.</translation> <translation id="8660471606262461360">От Google Payments</translation> -<translation id="8675945939500569406">Да се включи ли Физическата мрежа?</translation> <translation id="8676374126336081632">Изчистване на въведеното</translation> <translation id="869891660844655955">Дата на валидност</translation> <translation id="8699799819461268362">Филтър Google SafeSites</translation> <translation id="8701537995684343047">Посетете отметката, за да я запазите офлайн</translation> <translation id="8719023831149562936">Текущият раздел не може да се излъчи</translation> <translation id="8725066075913043281">Опитайте отново</translation> -<translation id="8727142376512517020">Без повторно показване</translation> <translation id="8730621377337864115">Готово</translation> <translation id="8737542153238017984">Запазената страница не е налице офлайн. Хранилището е почти пълно.</translation> <translation id="8793430725658173476">Копиране на URL адреса</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb index 7e228cf..53a709e 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
@@ -42,10 +42,11 @@ <translation id="1477626028522505441">No s'ha pogut baixar <ph name="FILE_NAME" /> a causa de problemes amb el servidor.</translation> <translation id="1506061864768559482">Motor de cerca</translation> <translation id="1513352483775369820">Adreces interès i historial web</translation> +<translation id="1546112724822176246">No es mostra el vostre dispositiu? <ph name="BEGIN_LINK" />Obteniu ajuda<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Actualitza Chrome</translation> <translation id="1557201757634521564">Detecta automàticament la codificació</translation> <translation id="1568822834048182062">Les adreces d'interès, l'historial, les contrasenyes i altres configuracions es sincronitzaran amb el vostre compte de Google.</translation> -<translation id="1592483623187843893">L'adreça d'interès s'ha desat perquè estigui disponible sense connexió</translation> +<translation id="1592483623187843893">L'adreça d'interès s'ha desat sense connexió</translation> <translation id="1620510694547887537">Càmera</translation> <translation id="1623104350909869708">Impedeix que aquesta pàgina creï diàlegs addicionals.</translation> <translation id="1641113438599504367">Navegació segura</translation> @@ -111,7 +112,7 @@ <translation id="2498359688066513246">Ajuda i suggeriments </translation> <translation id="2501278716633472235">Enrere</translation> <translation id="2512222046227390255">Emplenament automàtic de formularis</translation> -<translation id="2521102375070725336">L'adreça d'interès s'ha desat a <ph name="FOLDER_NAME" /> perquè estigui disponible sense connexió</translation> +<translation id="2521102375070725336">L'adreça d'interès s'ha desat sense connexió a <ph name="FOLDER_NAME" /></translation> <translation id="2526148617758225454">L'Economitzador de dades està activat. Gestioneu-lo a Configuració.</translation> <translation id="2532336938189706096">Visualització web</translation> <translation id="2536728043171574184">S'està mostrant una còpia sense connexió d'aquesta pàgina</translation> @@ -171,7 +172,7 @@ <translation id="3435896845095436175">Activa</translation> <translation id="3485544713029068372">Smart Lock per a contrasenyes</translation> <translation id="3492207499832628349">Pestanya d'incògnit nova</translation> -<translation id="3501331331116143684">La pàgina s'ha desat a <ph name="FOLDER_NAME" /> perquè estigui disponible sense connexió</translation> +<translation id="3501331331116143684">La pàgina s'ha desat sense connexió a <ph name="FOLDER_NAME" /></translation> <translation id="3518985090088779359">Accepta i continua</translation> <translation id="3527085408025491307">Carpeta</translation> <translation id="360480449234699036">Consulteu més informació sobre els temes en altres llocs web sense sortir de la pàgina. La funció Toca per cercar envia una paraula i el seu context a la Cerca de Google i ofereix com a resultat definicions, imatges, resultats de la cerca i altres detalls. @@ -211,11 +212,8 @@ <translation id="4170011742729630528">El servei no està disponible. Torneu-ho a provar més tard.</translation> <translation id="4193864812412988973">S'està mostrant una còpia sense connexió d'aquesta adreça d'interès</translation> <translation id="4195643157523330669">Obre en una pestanya nova</translation> -<translation id="4198229475320555619">L'adreça d'interès, que ocupa <ph name="PAGE_SIZE_STRING" />, s'ha desat perquè estigui disponible sense connexió</translation> +<translation id="4198229475320555619">L'adreça d'interès (<ph name="PAGE_SIZE_STRING" />) s'ha desat sense connexió</translation> <translation id="423410644998903704">Chrome necessita accés als permisos per compartir-los amb aquest lloc web.</translation> -<translation id="424696723690217687">Descobriu pàgines web enviades per objectes que teniu a prop. - -Quan tingueu el dispositiu desbloquejat, Chrome cercarà pàgines que tingueu a prop. Aquestes pàgines es processaran a través d'un servei de Google per millorar la qualitat dels resultats.</translation> <translation id="4254813446494774748">Idioma de la traducció:</translation> <translation id="4256782883801055595">Llicències de programari lliure</translation> <translation id="4259722352634471385">S'ha bloquejat la navegació: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Configuració en curs...</translation> <translation id="6112702117600201073">S'està actualitzant la pàgina</translation> <translation id="6127379762771434464">S'ha suprimit l'element</translation> +<translation id="6134870457258083164">No es mostra el vostre dispositiu? <ph name="BEGIN_LINK1" />Obteniu ajuda<ph name="END_LINK1" /> o <ph name="BEGIN_LINK2" />torneu a fer la cerca<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Adapta la pàgina per a mòbils</translation> <translation id="6140912465461743537">País/regió</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> de reducció de dades</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Actualitza</translation> <translation id="7191430249889272776">Pestanya oberta en segon pla</translation> <translation id="7208788139759694678">Economitzador de dades està desactivat</translation> +<translation id="721331389620694978">No s'esborraran algunes opcions de configuració que poden reflectir hàbits de navegació.</translation> <translation id="7243308994586599757">Opcions disponibles a la part inferior de la pantalla</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> utilitza la vostra ubicació per mostrar resultats de cerca locals</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Ajuda<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Per obtenir llicències noves, connecteu-vos a Internet i reproduïu el contingut que tingueu baixat.</translation> <translation id="8660471606262461360">De Google Payments</translation> -<translation id="8675945939500569406">Voleu activar el Web físic?</translation> <translation id="8676374126336081632">Esborra l'entrada</translation> <translation id="869891660844655955">Data de caducitat</translation> <translation id="8699799819461268362">Filtre SafeSites de Google</translation> -<translation id="8701537995684343047">Visiteu l'adreça d'interès per desar-la i que estigui disponible sense connexió</translation> +<translation id="8701537995684343047">Accediu a l'adreça d'interès per desar-la sense connexió</translation> <translation id="8719023831149562936">La pestanya actual no es pot compartir.</translation> <translation id="8725066075913043281">Torna-ho a provar</translation> -<translation id="8727142376512517020">No ho tornis a mostrar</translation> <translation id="8730621377337864115">Fet</translation> <translation id="8737542153238017984">La pàgina desada no està disponible sense connexió. L'emmagatzematge està gairebé ple.</translation> <translation id="8793430725658173476">Copia l'URL</translation> @@ -602,7 +600,7 @@ <translation id="9100610230175265781">S'ha d'introduir una frase de contrasenya </translation> <translation id="9133515669113036225">Restableix les credencials del dispositiu</translation> <translation id="9137013805542155359">Mostra l'original</translation> -<translation id="9151532766011674069">L'adreça d'interès s'ha desat perquè estigui disponible sense connexió. Queda poc espai d'emmagatzematge.</translation> +<translation id="9151532766011674069">L'adreça d'interès s'ha desat sense connexió. Espai d'emmagatzematge quasi ple.</translation> <translation id="917685106653909562">Pàgines del Web físic a prop</translation> <translation id="9187199695613236444">Visualització optimitzada per a mòbils</translation> <translation id="9192643434065497760">Activeu el Bluetooth a la <ph name="BEGIN_LINK" />configuració del dispositiu<ph name="END_LINK" /> per permetre la vinculació.</translation> @@ -610,7 +608,7 @@ <translation id="932327136139879170">Pàgina d'inici</translation> <translation id="938850635132480979">Error: <ph name="ERROR_CODE" /></translation> <translation id="945632385593298557">Accés al micròfon</translation> -<translation id="954352821720225055">L'adreça d'interès no està disponible sense connexió. Queda poc espai d'emmagatzematge.</translation> +<translation id="954352821720225055">L'adreça d'interès no està disponible sense connexió. Espai d'emmagatzematge quasi ple.</translation> <translation id="969096075394517431">Canvia els idiomes</translation> <translation id="983192555821071799">Tanca totes les pestanyes</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb index 04946fd..dac9246 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Stažení souboru <ph name="FILE_NAME" /> se nezdařilo z důvodu problémů se serverem.</translation> <translation id="1506061864768559482">Vyhledávač</translation> <translation id="1513352483775369820">Záložky a webová historie</translation> +<translation id="1546112724822176246">Nevidíte své zařízení? <ph name="BEGIN_LINK" />Prohlédněte si nápovědu<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Aktualizovat Chrome</translation> <translation id="1557201757634521564">Automaticky rozpoznávat kódování</translation> <translation id="1568822834048182062">Záložky, historie, hesla a další nastavení budou synchronizována s účtem Google.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Otevřít na nové kartě</translation> <translation id="4198229475320555619">Záložka uložená offline (<ph name="PAGE_SIZE_STRING" />)</translation> <translation id="423410644998903704">Aby Chrome mohl s těmito webovými stránkami sdílet oprávnění, musí k nim mít přístup.</translation> -<translation id="424696723690217687">Objevujte webové stránky odesílané objekty v okolí. - -Když bude zařízení odemknuto, Chrome bude vyhledávat stránky v okolí. Tyto stránky budou za účelem zlepšení kvality zpracovávány službou Google.</translation> <translation id="4254813446494774748">Jazyk překladu:</translation> <translation id="4256782883801055595">Licence open source</translation> <translation id="4259722352634471385">Navigace je blokována: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Probíhá nastavování…</translation> <translation id="6112702117600201073">Obnovování stránky</translation> <translation id="6127379762771434464">Položka byla odstraněna</translation> +<translation id="6134870457258083164">Nevidíte své zařízení? <ph name="BEGIN_LINK1" />Prohlédněte si nápovědu<ph name="END_LINK1" /> nebo <ph name="BEGIN_LINK2" />zopakujte vyhledávání<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Optimalizovat stránku pro mobily</translation> <translation id="6140912465461743537">Země/Region</translation> <translation id="6159335304067198720">Úspora dat: <ph name="PERCENT" /></translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Obnovit</translation> <translation id="7191430249889272776">Karta je otevřena na pozadí.</translation> <translation id="7208788139759694678">Spořič dat není aktivní</translation> +<translation id="721331389620694978">Některá nastavení, která mohou vypovídat o vašich zvycích při prohlížení, nebudou vymazána.</translation> <translation id="7243308994586599757">Možnosti jsou k dispozici ve spodní části obrazovky</translation> <translation id="7244362611678346589">Stránky <ph name="SEARCH_ENGINE_URL" /> zobrazují lokální výsledky vyhledávání na základě vaší polohy</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Nápověda<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Chcete-li získat nové licence, připojte se k internetu a přehrajte stažený obsah.</translation> <translation id="8660471606262461360">Od služby Google Payments</translation> -<translation id="8675945939500569406">Zapnout fyzický web?</translation> <translation id="8676374126336081632">Vymazat vstup</translation> <translation id="869891660844655955">Datum vypršení platnosti</translation> <translation id="8699799819461268362">Filtrování SafeSites od Googlu</translation> <translation id="8701537995684343047">Chcete-li záložku uložit offline, navštivte ji</translation> <translation id="8719023831149562936">Aktuální kartu nelze přenést</translation> <translation id="8725066075913043281">Zkusit znovu</translation> -<translation id="8727142376512517020">Příště tuto zprávu nezobrazovat</translation> <translation id="8730621377337864115">Hotovo</translation> <translation id="8737542153238017984">Uložená stránka není k dispozici offline. Úložiště je téměř plné.</translation> <translation id="8793430725658173476">Kopírovat adresu URL</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb index ab39c89..3a33175f 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Download af <ph name="FILE_NAME" /> mislykkedes på grund af serverproblemer.</translation> <translation id="1506061864768559482">Søgemaskine</translation> <translation id="1513352483775369820">Bogmærker og webhistorik</translation> +<translation id="1546112724822176246">Kan du ikke se din enhed? <ph name="BEGIN_LINK" />Få hjælp<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Opdater Chrome</translation> <translation id="1557201757634521564">Registrer kodning automatisk</translation> <translation id="1568822834048182062">Dine bogmærker, din historik og dine andre indstillinger synkroniseres med din Google-konto.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Åbn på ny fane</translation> <translation id="4198229475320555619">Et bogmærke på <ph name="PAGE_SIZE_STRING" /> er gemt offline</translation> <translation id="423410644998903704">Chrome skal have adgangstilladelse for at kunne dele dem med dette website.</translation> -<translation id="424696723690217687">Find websider, der udsendes af genstande i nærheden. - -Chrome scanner efter sider i nærheden, når din enhed er låst op. Disse sider går gennem en Google-tjeneste for at forbedre kvaliteten af sideresultaterne.</translation> <translation id="4254813446494774748">Sprog, der skal oversættes til:</translation> <translation id="4256782883801055595">Open source-licenser</translation> <translation id="4259722352634471385">Navigationen er blokeret: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Konfigurationen er i gang...</translation> <translation id="6112702117600201073">Opdaterer siden</translation> <translation id="6127379762771434464">Elementet blev fjernet</translation> +<translation id="6134870457258083164">Kan du ikke se din enhed? <ph name="BEGIN_LINK1" />Få hjælp<ph name="END_LINK1" />, eller <ph name="BEGIN_LINK2" />søg igen<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Gør siden mobilvenlig</translation> <translation id="6140912465461743537">Land/region</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> sparet data</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Opdater</translation> <translation id="7191430249889272776">Fanen blev åbnet i baggrunden.</translation> <translation id="7208788139759694678">Datasparefunktionen er deaktiveret</translation> +<translation id="721331389620694978">Visse indstillinger, der kan afspejle dine søgevaner, ryddes ikke.</translation> <translation id="7243308994586599757">Du finder indstillingerne nederst på skærmen</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> anvender din placering til at vise lokale søgeresultater</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Hjælp<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Du kan få nye licenser ved at oprette forbindelse til internettet og afspille det indhold, du har downloadet.</translation> <translation id="8660471606262461360">Fra Google Payments</translation> -<translation id="8675945939500569406">Vil du aktivere Fysisk web?</translation> <translation id="8676374126336081632">Ryd indtastning</translation> <translation id="869891660844655955">Udløbsdato</translation> <translation id="8699799819461268362">Google SafeSites-filter</translation> <translation id="8701537995684343047">Gå til bogmærket for at gemme offline</translation> <translation id="8719023831149562936">Den aktuelle fane kan ikke overføres</translation> <translation id="8725066075913043281">Forsøg igen</translation> -<translation id="8727142376512517020">Vis ikke denne underretning igen</translation> <translation id="8730621377337864115">Fuldført</translation> <translation id="8737542153238017984">Den gemte side er ikke tilgængelig offline. Der er næsten ikke mere lagerplads.</translation> <translation id="8793430725658173476">Kopiér webadresse</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb index 0c86b97..f4f8d59 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441"><ph name="FILE_NAME" /> konnte aufgrund von Serverproblemen nicht heruntergeladen werden.</translation> <translation id="1506061864768559482">Suchmaschine</translation> <translation id="1513352483775369820">Lesezeichen und Webprotokoll</translation> +<translation id="1546112724822176246">Ihr Gerät ist nicht zu sehen? <ph name="BEGIN_LINK" />Rufen Sie die Hilfe auf.<ph name="END_LINK" /></translation> <translation id="1553358976309200471">Chrome aktualisieren</translation> <translation id="1557201757634521564">Codierung automatisch erkennen</translation> <translation id="1568822834048182062">Ihre Lesezeichen, Ihr Verlauf, Ihre Passwörter und andere Einstellungen werden mit Ihrem Google-Konto synchronisiert.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">In neuem Tab öffnen</translation> <translation id="4198229475320555619">Lesezeichen mit einer Größe von <ph name="PAGE_SIZE_STRING" /> offline gespeichert</translation> <translation id="423410644998903704">Chrome benötigt Zugriff auf die Berechtigungen, um sie für diese Website freizugeben.</translation> -<translation id="424696723690217687">Entdecken Sie Webseiten, die von Objekten in Ihrer Nähe übermittelt werden. - -Chrome sucht nach Seiten in Ihrer Nähe, wenn Ihr Gerät entsperrt ist. Diese Seiten werden durch einen Google-Dienst überprüft, um die Qualität der Seitenergebnisse zu verbessern.</translation> <translation id="4254813446494774748">Zielsprache:</translation> <translation id="4256782883801055595">Open Source-Lizenzen</translation> <translation id="4259722352634471385">Die Navigation zu <ph name="URL" /> ist blockiert.</translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Einrichtung läuft...</translation> <translation id="6112702117600201073">Aktualisierung der Seite</translation> <translation id="6127379762771434464">Eintrag entfernt</translation> +<translation id="6134870457258083164">Ihr Gerät ist nicht zu sehen? <ph name="BEGIN_LINK1" />Rufen Sie die Hilfe auf<ph name="END_LINK1" /> oder <ph name="BEGIN_LINK2" />wiederholen Sie die Suche<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Für Mobilgeräte optimierte Seite</translation> <translation id="6140912465461743537">Land/Region</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> Einsparungen bei der Datennutzung</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Aktualisieren</translation> <translation id="7191430249889272776">Tab im Hintergrund geöffnet</translation> <translation id="7208788139759694678">Datenkomprimierung deaktiviert</translation> +<translation id="721331389620694978">Einige Einstellungen, in denen möglicherweise Surfgewohnheiten dargestellt werden, werden nicht gelöscht.</translation> <translation id="7243308994586599757">Optionen unten auf dem Bildschirm verfügbar</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> zeigt Ihnen lokale Suchergebnisse basierend auf Ihrem Standort.</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Hilfe<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Um neue Lizenzen zu erwerben, stellen Sie eine Internetverbindung her und spielen Sie die heruntergeladenen Inhalte ab.</translation> <translation id="8660471606262461360">Aus Google Payments</translation> -<translation id="8675945939500569406">Physical Web aktivieren?</translation> <translation id="8676374126336081632">Eingabe löschen</translation> <translation id="869891660844655955">Ablaufdatum</translation> <translation id="8699799819461268362">Google SafeSites-Filter</translation> <translation id="8701537995684343047">Lesezeichen öffnen, um es offline zu speichern</translation> <translation id="8719023831149562936">Aktueller Tab kann nicht gebeamt werden.</translation> <translation id="8725066075913043281">Erneut versuchen</translation> -<translation id="8727142376512517020">Nicht mehr anzeigen</translation> <translation id="8730621377337864115">Fertig</translation> <translation id="8737542153238017984">Gespeicherte Seite nicht offline verfügbar. Speicher fast voll</translation> <translation id="8793430725658173476">URL kopieren</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb index c0afd15..4aa7a46 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Η λήψη του αρχείου <ph name="FILE_NAME" /> απέτυχε λόγω προβλημάτων στον διακομιστή.</translation> <translation id="1506061864768559482">Μηχανή αναζήτησης</translation> <translation id="1513352483775369820">Σελιδοδείκτες και ιστορικό ιστού</translation> +<translation id="1546112724822176246">Δεν βλέπετε τη συσκευή σας; <ph name="BEGIN_LINK" />Λάβετε βοήθεια<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Ενημερώστε το Chrome</translation> <translation id="1557201757634521564">Αυτόματος εντοπισμός κωδικοποίησης</translation> <translation id="1568822834048182062">Οι σελιδοδείκτες, το ιστορικό, οι κωδικοί πρόσβασης και άλλες ρυθμίσεις θα συγχρονιστούν με το Λογαριασμό σας Google</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Άνοιγμα σε νέα καρτέλα</translation> <translation id="4198229475320555619">Ο σελιδοδείκτης μεγέθους <ph name="PAGE_SIZE_STRING" /> αποθηκεύτηκε εκτός σύνδεσης</translation> <translation id="423410644998903704">Το Chrome θα πρέπει να έχει πρόσβαση στις άδειες προκειμένου να τις μοιραστεί με αυτόν τον ιστότοπο.</translation> -<translation id="424696723690217687">Ανακαλύψτε ιστοσελίδες που έχουν σταλεί από κοντινά αντικείμενα. - -Το Chrome θα σαρώσει τις κοντινές σελίδες όταν ξεκλειδωθεί η συσκευή σας. Αυτές οι σελίδες θα περάσουν από μια υπηρεσία Google για τη βελτίωση της ποιότητας των αποτελεσμάτων σελίδων.</translation> <translation id="4254813446494774748">Γλώσσα μετάφρασης:</translation> <translation id="4256782883801055595">Άδειες λογισμικού ανοικτού κώδικα</translation> <translation id="4259722352634471385">Αποκλείστηκε η μετάβαση στη διεύθυνση: <ph name="URL" /></translation> @@ -374,6 +372,7 @@ <translation id="6108923351542677676">Ρύθμιση σε εξέλιξη…</translation> <translation id="6112702117600201073">Ανανέωση σελίδας</translation> <translation id="6127379762771434464">Το στοιχείο καταργήθηκε</translation> +<translation id="6134870457258083164">Δεν βλέπετε τη συσκευή σας; <ph name="BEGIN_LINK1" />Λάβετε βοήθεια<ph name="END_LINK1" /> ή <ph name="BEGIN_LINK2" />αναζητήστε την ξανά<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Ρύθμιση σελίδας ώστε να είναι φιλική προς κινητά</translation> <translation id="6140912465461743537">Χώρα/Περιοχή</translation> <translation id="6159335304067198720">Εξοικονόμηση δεδομένων κατά <ph name="PERCENT" /></translation> @@ -460,6 +459,7 @@ <translation id="7180611975245234373">Ανανέωση</translation> <translation id="7191430249889272776">Η καρτέλα άνοιξε στο παρασκήνιο.</translation> <translation id="7208788139759694678">Η Εξοικονόμηση δεδομένων είναι απενεργοποιημένη</translation> +<translation id="721331389620694978">Ορισμένες ρυθμίσεις που ενδέχεται να αντανακλούν τις συνήθειες περιήγησης δεν θα διαγραφούν.</translation> <translation id="7243308994586599757">Διαθέσιμες επιλογές κοντά κάτω μέρος της οθόνης</translation> <translation id="7244362611678346589">Το <ph name="SEARCH_ENGINE_URL" /> χρησιμοποιεί την τοποθεσία σας για την εμφάνιση τοπικών αποτελεσμάτων αναζήτησης</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Βοήθεια<ph name="END_LINK" /></translation> @@ -566,14 +566,12 @@ Για απόκτηση νέων αδειών, συνδεθείτε στο διαδίκτυο και κάντε αναπαραγωγή των λήψεων περιεχομένου.</translation> <translation id="8660471606262461360">Από το Google Payments</translation> -<translation id="8675945939500569406">Να ενεργοποιηθεί το Φυσικό δίκτυο;</translation> <translation id="8676374126336081632">Εκκαθάριση καταχώρισης</translation> <translation id="869891660844655955">Ημερομηνία λήξης</translation> <translation id="8699799819461268362">Φίλτρο Google SafeSites</translation> <translation id="8701537995684343047">Επισκεφτείτε το σελιδοδείκτη για να τον αποθηκεύσετε εκτός σύνδεσης</translation> <translation id="8719023831149562936">Δεν είναι δυνατή η ζεύξη της τρέχουσας καρτέλας</translation> <translation id="8725066075913043281">Προσπαθήστε ξανά</translation> -<translation id="8727142376512517020">Να μην εμφανιστεί ξανά</translation> <translation id="8730621377337864115">Ολοκληρώθηκε</translation> <translation id="8737542153238017984">Η αποθηκευμένη σελίδα δεν είναι διαθέσιμη εκτός σύνδεσης. Ο χώρος αποθήκευσης είναι σχεδόν πλήρης.</translation> <translation id="8793430725658173476">Αντιγραφή διεύθυνσης URL</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb b/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb index 774d60fb..3243c7ed 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441"><ph name="FILE_NAME" /> download failed due to server issues.</translation> <translation id="1506061864768559482">Search engine</translation> <translation id="1513352483775369820">Bookmarks and web history</translation> +<translation id="1546112724822176246">Not seeing your device? <ph name="BEGIN_LINK" />Get help<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Update Chrome</translation> <translation id="1557201757634521564">Auto-detect encoding</translation> <translation id="1568822834048182062">Your bookmarks, history, passwords and other settings will be synced to your Google Account.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Open in new tab</translation> <translation id="4198229475320555619"><ph name="PAGE_SIZE_STRING" /> bookmark saved offline</translation> <translation id="423410644998903704">Chrome needs permissions access to share them with this site.</translation> -<translation id="424696723690217687">Discover web pages sent by nearby objects. - -Chrome will scan for nearby pages when your device is unlocked. These pages will go through a Google service to improve the quality of page results.</translation> <translation id="4254813446494774748">Translation language:</translation> <translation id="4256782883801055595">Open-source licences</translation> <translation id="4259722352634471385">Navigation is blocked: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Setup in progress…</translation> <translation id="6112702117600201073">Refreshing page</translation> <translation id="6127379762771434464">Item removed</translation> +<translation id="6134870457258083164">Not seeing your device? <ph name="BEGIN_LINK1" />Get help<ph name="END_LINK1" /> or <ph name="BEGIN_LINK2" />search again<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Make page mobile-friendly</translation> <translation id="6140912465461743537">Country/Region</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> data savings</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Refresh</translation> <translation id="7191430249889272776">Tab opened in background.</translation> <translation id="7208788139759694678">Data Saver disabled</translation> +<translation id="721331389620694978">Some settings that may reflect browsing habits will not be cleared.</translation> <translation id="7243308994586599757">Options available near bottom of the screen</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> uses your location to show local search results</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Help<ph name="END_LINK" /></translation> @@ -563,14 +563,12 @@ <translation id="8627706565932943526">Sync error</translation> <translation id="862875433388403934">Content (films, music, etc.) downloaded in other applications may no longer be playable until those applications re-acquire licences based on a new device credential. To obtain new licences, connect to the Internet and play your downloaded content.</translation> <translation id="8660471606262461360">From Google Payments</translation> -<translation id="8675945939500569406">Turn on the Physical Web?</translation> <translation id="8676374126336081632">Clear input</translation> <translation id="869891660844655955">Expiry date</translation> <translation id="8699799819461268362">Google SafeSites filter</translation> <translation id="8701537995684343047">Visit bookmark to save offline</translation> <translation id="8719023831149562936">Can’t beam current tab</translation> <translation id="8725066075913043281">Try again</translation> -<translation id="8727142376512517020">Don’t show this again</translation> <translation id="8730621377337864115">Finished</translation> <translation id="8737542153238017984">Saved page not available offline. Storage almost full.</translation> <translation id="8793430725658173476">Copy url</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb b/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb index 5c074ce5..7c9a05f6 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441"><ph name="FILE_NAME" /> no se pudo descargar debido a problemas del servidor.</translation> <translation id="1506061864768559482">Motor de búsqueda</translation> <translation id="1513352483775369820">Marcadores e historial web</translation> +<translation id="1546112724822176246">¿No ves el dispositivo? <ph name="BEGIN_LINK" />Obtén ayuda<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Actualizar Chrome</translation> <translation id="1557201757634521564">Autodetectar codificación</translation> <translation id="1568822834048182062">Se están sincronizando los marcadores, el historial, las contraseñas y otras opciones de configuración con tu cuenta de Google.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Abrir en una pestaña nueva</translation> <translation id="4198229475320555619">El marcador de <ph name="PAGE_SIZE_STRING" /> se guardó sin conexión</translation> <translation id="423410644998903704">Chrome necesita acceso a los permisos para compartirlos con este sitio.</translation> -<translation id="424696723690217687">Descubre páginas web enviadas por objetos cercanos. - -Chrome buscará páginas cercanas cuando tu dispositivo esté desbloqueado. Estas páginas pasarán por un servicio de Google que mejorará la calidad de los resultados de páginas.</translation> <translation id="4254813446494774748">Idioma de la traducción:</translation> <translation id="4256782883801055595">Licencias de código abierto</translation> <translation id="4259722352634471385">Navegación bloqueada: <ph name="URL" /></translation> @@ -374,6 +372,7 @@ <translation id="6108923351542677676">Configuración en curso…</translation> <translation id="6112702117600201073">Actualizando la página</translation> <translation id="6127379762771434464">Se eliminó el elemento</translation> +<translation id="6134870457258083164">¿No ves el dispositivo? <ph name="BEGIN_LINK1" />Obtén ayuda<ph name="END_LINK1" /> o <ph name="BEGIN_LINK2" />vuelve a buscar<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Optimizar la página para celulares</translation> <translation id="6140912465461743537">País o región</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> de ahorro de datos</translation> @@ -460,6 +459,7 @@ <translation id="7180611975245234373">Actualizar</translation> <translation id="7191430249889272776">Pestaña abierta en segundo plano</translation> <translation id="7208788139759694678">Extensión Reducir datos inhabilitada</translation> +<translation id="721331389620694978">No se borrarán algunas opciones de configuración que podrían reflejar hábitos de navegación.</translation> <translation id="7243308994586599757">Opciones disponibles junto a la parte inferior de la pantalla</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> usa tu ubicación para mostrar resultados de la búsqueda a nivel local.</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Ayuda<ph name="END_LINK" /></translation> @@ -566,14 +566,12 @@ Conéctate a Internet y reproduce el contenido descargado para obtener licencias nuevas.</translation> <translation id="8660471606262461360">De Google Payments</translation> -<translation id="8675945939500569406">¿Deseas activar la Web física?</translation> <translation id="8676374126336081632">Borrar entrada</translation> <translation id="869891660844655955">Fecha de vencimiento</translation> <translation id="8699799819461268362">Filtro de Google SafeSites</translation> <translation id="8701537995684343047">Visitar marcador para guardarlo sin conexión</translation> <translation id="8719023831149562936">Esta pestaña no se puede transmitir.</translation> <translation id="8725066075913043281">Intentar nuevamente</translation> -<translation id="8727142376512517020">No volver a mostrar</translation> <translation id="8730621377337864115">Listo</translation> <translation id="8737542153238017984">La página guardada no está disponible sin conexión. El almacenamiento está casi lleno.</translation> <translation id="8793430725658173476">Copiar URL</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb index 9aad41e..4de3855 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">No se ha podido descargar <ph name="FILE_NAME" /> debido a problemas con el servidor.</translation> <translation id="1506061864768559482">Motor de búsqueda</translation> <translation id="1513352483775369820">Historial web y marcadores</translation> +<translation id="1546112724822176246">¿No aparece tu dispositivo? <ph name="BEGIN_LINK" />Obtén ayuda<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Actualizar Chrome</translation> <translation id="1557201757634521564">Autodetectar codificación</translation> <translation id="1568822834048182062">Tus marcadores, tu historial, tus contraseñas y otras opciones se sincronizarán con tu cuenta de Google.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Abrir en una pestaña nueva</translation> <translation id="4198229475320555619">Marcador de <ph name="PAGE_SIZE_STRING" /> guardado sin conexión</translation> <translation id="423410644998903704">Chrome necesita acceder a los permisos para compartirlos con este sitio web.</translation> -<translation id="424696723690217687">Descubre las páginas web enviadas por objetos cercanos. - -Chrome buscará páginas cercanas cuando tu dispositivo esté desbloqueado. Estas páginas se enviarán a un servicio de Google para mejorar la calidad de los resultados de páginas.</translation> <translation id="4254813446494774748">Idioma de traducción:</translation> <translation id="4256782883801055595">Licencias de código abierto</translation> <translation id="4259722352634471385">Se ha bloqueado la navegación: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Configuración en curso…</translation> <translation id="6112702117600201073">Actualizando página</translation> <translation id="6127379762771434464">Elemento quitado</translation> +<translation id="6134870457258083164">¿No aparece tu dispositivo? <ph name="BEGIN_LINK1" />Obtén ayuda<ph name="END_LINK1" /> o <ph name="BEGIN_LINK2" />repite la búsqueda<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Optimizar página para móviles</translation> <translation id="6140912465461743537">País/región</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> de ahorro de datos</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Actualizar</translation> <translation id="7191430249889272776">Pestaña abierta en segundo plano.</translation> <translation id="7208788139759694678">Economizador de datos inhabilitado</translation> +<translation id="721331389620694978">No se borrarán algunas opciones de configuración que pueden reflejar hábitos de navegación.</translation> <translation id="7243308994586599757">Opciones disponibles cerca de la parte inferior de la pantalla</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> utiliza tu ubicación para mostrar resultados de búsqueda locales</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Ayuda<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Para obtener nuevas licencias, conéctate a Internet y reproduce el contenido descargado.</translation> <translation id="8660471606262461360">De Google Payments</translation> -<translation id="8675945939500569406">¿Quieres activar la Web física?</translation> <translation id="8676374126336081632">Borrar entrada</translation> <translation id="869891660844655955">Fecha de caducidad</translation> <translation id="8699799819461268362">Filtro SafeSites de Google</translation> <translation id="8701537995684343047">Acceder al marcador para guardarlo sin conexión</translation> <translation id="8719023831149562936">No se puede compartir la pestaña actual.</translation> <translation id="8725066075913043281">Volver a intentarlo</translation> -<translation id="8727142376512517020">No volver a mostrar esta notificación</translation> <translation id="8730621377337864115">Listo</translation> <translation id="8737542153238017984">La página guardada no está disponible sin conexión. El almacenamiento está casi lleno.</translation> <translation id="8793430725658173476">Copiar URL</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb index f697a49..4a2c4429 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">بهدلیل مشکلاتی در سرور، بارگیری <ph name="FILE_NAME" /> انجام نشد.</translation> <translation id="1506061864768559482">موتور جستجو</translation> <translation id="1513352483775369820">نشانکها و سابقه وب</translation> +<translation id="1546112724822176246">دستگاهتان را نمیبینید؟ <ph name="BEGIN_LINK" />راهنمایی دریافت کنید<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">بهروزرسانی Chrome</translation> <translation id="1557201757634521564">شناسایی خودکار کدبندی</translation> <translation id="1568822834048182062">نشانکها، سابقه، گذرواژهها و سایر تنظیماتتان در حساب Google شما همگامسازی میشوند.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">باز کردن در برگهٔ جدید</translation> <translation id="4198229475320555619"><ph name="PAGE_SIZE_STRING" /> نشانک بهصورت آفلاین ذخیره شد</translation> <translation id="423410644998903704">Chrome باید به مجوزها دسترسی داشته باشد تا آنها را با این سایت به اشتراک بگذارد.</translation> -<translation id="424696723690217687">صفحههای وبی را که اشیای اطراف میفرستند کاوش کنید. - -وقتی قفل دستگاهتان باز است، Chrome صفحاتی را که در اطراف است جستجو میکند. این صفحهها از یکی از سرویسهای Google میگذرند تا کیفیت نتایج صفحه بهتر شود.</translation> <translation id="4254813446494774748">زبان ترجمه:</translation> <translation id="4256782883801055595">مجوزهای منبع آزاد</translation> <translation id="4259722352634471385">پیمایش مسدود است: <ph name="URL" /></translation> @@ -372,6 +370,7 @@ <translation id="6108923351542677676">تنظیم در حال انجام است...</translation> <translation id="6112702117600201073">درحال بازخوانی صفحه</translation> <translation id="6127379762771434464">مورد برداشته شد</translation> +<translation id="6134870457258083164">دستگاهتان را نمیبینید؟ <ph name="BEGIN_LINK1" />راهنمایی دریافت کنید<ph name="END_LINK1" /> یا <ph name="BEGIN_LINK2" />دوباره جستجو کنید<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">تبدیل صفحه به حالت مناسب دستگاه همراه</translation> <translation id="6140912465461743537">کشور/منطقه</translation> <translation id="6159335304067198720">ذخیره دادهها: <ph name="PERCENT" /></translation> @@ -458,6 +457,7 @@ <translation id="7180611975245234373">بازخوانی</translation> <translation id="7191430249889272776">برگه در پسزمینه باز شد.</translation> <translation id="7208788139759694678">صرفهجویی داده غیرفعال است</translation> +<translation id="721331389620694978">بعضی از تنظیماتی که ممکن است بازتاب عادتهای مرور باشند، پاک نمیشوند.</translation> <translation id="7243308994586599757">گزینهها در نزدیک پایین صفحه نمایش در دسترس هستند</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> از موقعیت مکانی شما برای نمایش نتایج جستجوی محلی استفاده میکند</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />راهنما<ph name="END_LINK" /></translation> @@ -564,14 +564,12 @@ برای بدست آوردن مجوزهای جدید، به اینترنت وصل شوید و محتوای بارگیریشده خودتان را پخش کنید.</translation> <translation id="8660471606262461360">از Google Payments</translation> -<translation id="8675945939500569406">وب فیزیکی روشن شود؟</translation> <translation id="8676374126336081632">پاک کردن ورودی</translation> <translation id="869891660844655955">تاریخ انقضا</translation> <translation id="8699799819461268362">فیلتر Google SafeSites</translation> <translation id="8701537995684343047">بازدید از نشانک برای ذخیره بهصورت آفلاین</translation> <translation id="8719023831149562936">انتقال برگه کنونی با پرتو ممکن نیست</translation> <translation id="8725066075913043281">سعی مجدد</translation> -<translation id="8727142376512517020">دیگر نشان داده نشود</translation> <translation id="8730621377337864115">تمام</translation> <translation id="8737542153238017984">صفحه ذخیره شده بهصورت آفلاین در دسترس نیست. حافظه تقریباً پر است.</translation> <translation id="8793430725658173476">کپی نشانی وب</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb index 94e10aa..a6a1a79f 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Tiedoston <ph name="FILE_NAME" /> lataus epäonnistui palvelinongelman vuoksi.</translation> <translation id="1506061864768559482">Hakukone</translation> <translation id="1513352483775369820">Kirjanmerkit ja verkkohistoria</translation> +<translation id="1546112724822176246">Etkö näe laitettasi? <ph name="BEGIN_LINK" />Tutustu ohjeisiin<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Päivitä Chrome</translation> <translation id="1557201757634521564">Havaitse merkistökoodaus automaattisesti</translation> <translation id="1568822834048182062">Kirjanmerkkisi, historiasi, salasanasi ja muut asetukset synkronoidaan Google-tilillesi.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Avaa uudessa välilehdessä</translation> <translation id="4198229475320555619"><ph name="PAGE_SIZE_STRING" /> kirjanmerkki tallennettu offline-tilassa</translation> <translation id="423410644998903704">Chrome tarvitsee käyttöoikeuksien käyttöoikeuden voidakseen jakaa sen tämän sivuston kanssa.</translation> -<translation id="424696723690217687">Löydä lähellä olevien kohteiden lähettämiä verkkosivuja. - -Kun laitteesi lukitus avataan, Chrome etsii lähistöllä olevia sivuja. Google käsittelee sivut palvelussaan parantaakseen tuloksien laatua.</translation> <translation id="4254813446494774748">Käännöksen kieli:</translation> <translation id="4256782883801055595">Avoimen lähdekoodin käyttöluvat</translation> <translation id="4259722352634471385">Kohde on estetty: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Synkronointia valmistellaan…</translation> <translation id="6112702117600201073">Sivun päivittäminen</translation> <translation id="6127379762771434464">Kohde poistettu</translation> +<translation id="6134870457258083164">Etkö näe laitettasi? <ph name="BEGIN_LINK1" />Tutustu ohjeisiin<ph name="END_LINK1" /> tai <ph name="BEGIN_LINK2" />hae uudelleen<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Tee sivusta mobiililaitteisiin sopiva</translation> <translation id="6140912465461743537">Maa/alue</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> vähemmän tiedonsiirtoa</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Päivitä</translation> <translation id="7191430249889272776">Välilehti avattiin taustalla.</translation> <translation id="7208788139759694678">Data Saver on poistettu käytöstä.</translation> +<translation id="721331389620694978">Kaikkia selaustapoihin mahdollisesti viittaavia asetuksia ei poisteta.</translation> <translation id="7243308994586599757">Asetukset löytyvät näytön alalaidasta.</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> käyttää sijaintiasi paikallisten hakutulosten näyttämiseen.</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Ohjeita<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Hanki uudet käyttöoik. muodostam. verkkoyhteys ja toistamalla ladattu sisältö.</translation> <translation id="8660471606262461360">Google Paymentsista</translation> -<translation id="8675945939500569406">Otetaanko Fyysinen web käyttöön?</translation> <translation id="8676374126336081632">Tyhjennä teksti</translation> <translation id="869891660844655955">Vanhenemispäivämäärä</translation> <translation id="8699799819461268362">Google SafeSites -suodatin</translation> <translation id="8701537995684343047">Tallenna kirjanmerkki offline-tilassa siirtymällä sivulle.</translation> <translation id="8719023831149562936">Nykyistä välilehteä ei voi jakaa</translation> <translation id="8725066075913043281">Yritä uudelleen</translation> -<translation id="8727142376512517020">Älä näytä tätä uudelleen.</translation> <translation id="8730621377337864115">Valmis</translation> <translation id="8737542153238017984">Tallennettu sivu ei ole käytettävissä offline-tilassa. Tallennustila on lähes täysi.</translation> <translation id="8793430725658173476">Kopioi URL-osoite</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb index 8322b44..66e0c0b5 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Hindi na-download ang <ph name="FILE_NAME" /> dahil sa mga isyu sa server.</translation> <translation id="1506061864768559482">Search engine</translation> <translation id="1513352483775369820">Bookmark at history ng web</translation> +<translation id="1546112724822176246">Hindi mo ba nakikita ang iyong device? <ph name="BEGIN_LINK" />Humingi ng tulong<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">I-update ang Chrome</translation> <translation id="1557201757634521564">Awtomatikong i-detect ang pag-e-encode</translation> <translation id="1568822834048182062">Isi-sync ang iyong mga bookmark, history password at iba mga setting sa iyong Google Account.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Buksan sa bagong tab</translation> <translation id="4198229475320555619"><ph name="PAGE_SIZE_STRING" /> na bookmark ang na-save offline</translation> <translation id="423410644998903704">Kailangan ng Chrome ng access sa pahintulot upang maibahagi ang mga ito sa site na ito.</translation> -<translation id="424696723690217687">Tuklasin ang mga web page na ipinadala ng mga kalapit na bagay. - -Magsa-scan ang Chrome para sa mga kalapit na page kapag naka-unlock ang iyong device. Mapapasailalim ang mga page na ito sa isang serbisyo ng Google upang mapahusay ang kalidad ng mga resulta ng page.</translation> <translation id="4254813446494774748">Wika ng Pagsasalin:</translation> <translation id="4256782883801055595">Mga lisensya ng open source</translation> <translation id="4259722352634471385">Naka-block ang navigation: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Kasalukuyang sine-setup…</translation> <translation id="6112702117600201073">Nire-refresh ang page</translation> <translation id="6127379762771434464">Inalis ang item</translation> +<translation id="6134870457258083164">Hindi mo ba nakikita ang iyong device? <ph name="BEGIN_LINK1" />Humingi ng tulong<ph name="END_LINK1" /> o <ph name="BEGIN_LINK2" />muling maghanap<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Gawing pang-mobile ang page</translation> <translation id="6140912465461743537">Bansa/Rehiyon</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> natipid sa data</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">I-refresh</translation> <translation id="7191430249889272776">Binuksan ang tab sa background.</translation> <translation id="7208788139759694678">Naka-disable ang Data Saver</translation> +<translation id="721331389620694978">Hindi maki-clear ang ialng setting na maaaring magpakita sa mga gawi sa pagba-browse.</translation> <translation id="7243308994586599757">May mga opsyon malapit sa ibaba ng screen</translation> <translation id="7244362611678346589">Ginagamit ng <ph name="SEARCH_ENGINE_URL" /> ang iyong lokasyon upang magpakita ng mga lokal na resulta ng paghahanap</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Tulong<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Upang makakuha ng mga bagong lisensya, kumonekta sa internet at i-play ang iyong na-download na content.</translation> <translation id="8660471606262461360">Mula sa Google Payments</translation> -<translation id="8675945939500569406">I-on ang Pisikal na Web?</translation> <translation id="8676374126336081632">I-clear ang input</translation> <translation id="869891660844655955">Expiration date</translation> <translation id="8699799819461268362">Filter ng Google SafeSites</translation> <translation id="8701537995684343047">Bisitahin ang bookmark upang i-save offline</translation> <translation id="8719023831149562936">Hindi ma-beam ang kasalukuyang tab</translation> <translation id="8725066075913043281">Muling subukan</translation> -<translation id="8727142376512517020">Huwag na itong ipakitang muli</translation> <translation id="8730621377337864115">Tapos na</translation> <translation id="8737542153238017984">Hindi available offline ang na-save na page. Malapit nang mapuno ang storage.</translation> <translation id="8793430725658173476">Kopyahin ang url</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb index 88382073..681b06ff 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Échec du téléchargement du fichier "<ph name="FILE_NAME" />" en raison de problèmes liés au serveur.</translation> <translation id="1506061864768559482">Moteur de recherche</translation> <translation id="1513352483775369820">Favoris et historique Web</translation> +<translation id="1546112724822176246">Votre appareil ne s'affiche pas ? <ph name="BEGIN_LINK" />Obtenir de l'aide<ph name="END_LINK" /></translation> <translation id="1553358976309200471">Mettre à jour Chrome</translation> <translation id="1557201757634521564">Détecter automatiquement l'encodage</translation> <translation id="1568822834048182062">Vos favoris, votre historique, vos mots de passe et d'autres paramètres seront synchronisés avec votre compte Google.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Ouvrir dans un nouvel onglet</translation> <translation id="4198229475320555619">Une copie du favori accessible hors connexion (<ph name="PAGE_SIZE_STRING" />) a bien été enregistrée.</translation> <translation id="423410644998903704">Chrome doit disposer de l'accès à certaines autorisations pour les partager avec ce site.</translation> -<translation id="424696723690217687">Découvrez des pages Web envoyées par des objets à proximité. - -Chrome recherche les pages à proximité lorsque l'appareil est déverrouillé. Ces pages sont analysées par un service Google pour améliorer la qualité des résultats.</translation> <translation id="4254813446494774748">Langue de traduction :</translation> <translation id="4256782883801055595">Licences Open Source</translation> <translation id="4259722352634471385">La navigation sur <ph name="URL" /> est bloquée.</translation> @@ -374,6 +372,7 @@ <translation id="6108923351542677676">Configuration en cours…</translation> <translation id="6112702117600201073">Actualisation de la page</translation> <translation id="6127379762771434464">Élément supprimé</translation> +<translation id="6134870457258083164">Votre appareil ne s'affiche pas ? <ph name="BEGIN_LINK1" />Obtenir de l'aide<ph name="END_LINK1" /> ou <ph name="BEGIN_LINK2" />effectuer une nouvelle recherche<ph name="END_LINK2" /></translation> <translation id="6138140242378429169">Ouvrir la page adaptée aux mobiles</translation> <translation id="6140912465461743537">Pays/Région</translation> <translation id="6159335304067198720">Économies de données de <ph name="PERCENT" /></translation> @@ -460,6 +459,7 @@ <translation id="7180611975245234373">Actualiser</translation> <translation id="7191430249889272776">L'onglet a été ouvert en arrière-plan.</translation> <translation id="7208788139759694678">Économiseur de données désactivé</translation> +<translation id="721331389620694978">Certains paramètres qui peuvent refléter vos habitudes de navigation ne seront pas effacés.</translation> <translation id="7243308994586599757">Options disponibles au bas de l'écran</translation> <translation id="7244362611678346589">Le site <ph name="SEARCH_ENGINE_URL" /> utilise votre position pour afficher les résultats de recherche à proximité.</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Aide<ph name="END_LINK" /></translation> @@ -566,14 +566,12 @@ Pour obtenir de nouvelles licences, connectez-vous à Internet et lisez le contenu que vous avez téléchargé.</translation> <translation id="8660471606262461360">Informations issues de Google Payments</translation> -<translation id="8675945939500569406">Activer le Web physique ?</translation> <translation id="8676374126336081632">Effacer la saisie</translation> <translation id="869891660844655955">Date d'expiration</translation> <translation id="8699799819461268362">Filtre Google SafeSites</translation> <translation id="8701537995684343047">Accédez au favori pour enregistrer une copie accessible hors connexion.</translation> <translation id="8719023831149562936">Impossible de partager l'onglet actuel.</translation> <translation id="8725066075913043281">Réessayer</translation> -<translation id="8727142376512517020">Ne plus afficher ce message</translation> <translation id="8730621377337864115">OK</translation> <translation id="8737542153238017984">La page enregistrée n'est pas disponible hors connexion. La mémoire de stockage est presque pleine.</translation> <translation id="8793430725658173476">Copier l'URL</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb index ed5435a..dd732f3 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">सर्वर संबधी समस्याओं के कारण <ph name="FILE_NAME" /> डाउनलोड विफल रहा.</translation> <translation id="1506061864768559482">खोज इंजन</translation> <translation id="1513352483775369820">बुकमार्क और वेब इतिहास</translation> +<translation id="1546112724822176246">आपका डिवाइस नहीं दिखाई दे रहा है? <ph name="BEGIN_LINK" />सहायता प्राप्त करें<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Chrome अपडेट करें</translation> <translation id="1557201757634521564">एन्कोडिंग का स्वत: पता लगाना</translation> <translation id="1568822834048182062">आपके बुकमार्क, इतिहास, पासवर्ड और अन्य सेटिंग को आपके Google खाते में समन्वयित किया जाएगा.</translation> @@ -171,7 +172,7 @@ <translation id="3435896845095436175">सक्षम करें</translation> <translation id="3485544713029068372">पासवर्ड के लिए Smart Lock</translation> <translation id="3492207499832628349">नया गुप्त टैब</translation> -<translation id="3501331331116143684">पृष्ठ <ph name="FOLDER_NAME" /> में ऑफ़लाइन सहेजा गया</translation> +<translation id="3501331331116143684">पृष्ठ <ph name="FOLDER_NAME" /> में ऑफ़लाइन सहेजा गया</translation> <translation id="3518985090088779359">स्वीकार करें और जारी रखें</translation> <translation id="3527085408025491307">फ़ोल्डर</translation> <translation id="360480449234699036">पृष्ठ को छोड़े बिना वेबसाइटों पर मौजूद विषयों के बारे में जानें. स्पर्श करने के लिए खोजें, Google खोज को एक शब्द और उसके आस-पास का संदर्भ भेजता है, जिससे वह परिभाषाएं, चित्र, खोज परिणाम और अन्य विवरण लौटाता है. @@ -213,9 +214,6 @@ <translation id="4195643157523330669">नए टैब में खोलें</translation> <translation id="4198229475320555619"><ph name="PAGE_SIZE_STRING" /> बुकमार्क ऑफ़लाइन सहेजा गया</translation> <translation id="423410644998903704">Chrome को अनुमति ऐक्सेस की आवश्यकता है ताकि अनुमति को इस साइट के साथ साझा किया जा सके.</translation> -<translation id="424696723690217687">आस-पास के ऑब्जेक्ट द्वारा भेजे गए वेब पृष्ठ खोजें. - -आपका डिवाइस अनलॉक होने पर Chrome आस-पास के पृष्ठों के लिए स्कैन करेगा. पृष्ठ के परिणामों की गुणवत्ता बेहतर बनाने के लिए ये पृष्ठ एक Google सेवा से गुज़रेंगे.</translation> <translation id="4254813446494774748">अनुवाद की भाषा:</translation> <translation id="4256782883801055595">ओपन सोर्स लाइसेंस</translation> <translation id="4259722352634471385">मार्गदर्शक अवरोधित है: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">सेटअप प्रगति में है…</translation> <translation id="6112702117600201073">पृष्ठ रीफ्रेश किया जा रहा है</translation> <translation id="6127379762771434464">आइटम निकाला गया</translation> +<translation id="6134870457258083164">आपका डिवाइस नहीं दिखाई दे रहा है? <ph name="BEGIN_LINK1" />सहायता प्राप्त करें<ph name="END_LINK1" /> या <ph name="BEGIN_LINK2" />पुन: खोजें<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">पृष्ठ को मोबाइल के अनुकूल बनाएं</translation> <translation id="6140912465461743537">देश/क्षेत्र</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> डेटा बचत</translation> @@ -395,7 +394,7 @@ <translation id="6406506848690869874">समन्वय</translation> <translation id="6409731863280057959">पॉप-अप</translation> <translation id="641643625718530986">प्रिंट करें…</translation> -<translation id="6447570251829705777">बुकमार्क ऑफ़लाइन उपलब्ध नहीं है</translation> +<translation id="6447570251829705777">बुकमार्क ऑफ़लाइन उपलब्ध नहीं है</translation> <translation id="6447842834002726250">कुकी</translation> <translation id="6448273550210938826">खोज और URL सुझाव</translation> <translation id="6458785801851713928">आपके डोमेन के लिए समन्वयन उपलब्ध नहीं है.</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">रीफ्रेश करें</translation> <translation id="7191430249889272776">पृष्ठभूमि में टैब खोला गया.</translation> <translation id="7208788139759694678">डेटा बचतकर्ता अक्षम किया गया है</translation> +<translation id="721331389620694978">कुछ सेटिंग जो ब्राउज़िंग आदतों को प्रदर्शित कर सकती हैं उन्हें साफ़ नहीं किया जाएगा.</translation> <translation id="7243308994586599757">विकल्प स्क्रीन के नीचे उपलब्ध हैं</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" />, स्थानीय खोज परिणाम दिखाने के लिए आपके स्थान का उपयोग करता है</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />सहायता<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ नए लाइसेंस प्राप्त करने के लिए, इंटरनेट से कनेक्ट करें और अपनी डाउनलोड की गई सामग्री चलाएं.</translation> <translation id="8660471606262461360">Google पेमेंट्स से</translation> -<translation id="8675945939500569406">शारीरिक वेब चालू करें?</translation> <translation id="8676374126336081632">इनपुट साफ़ करें</translation> <translation id="869891660844655955">समय समाप्ति दिनांक</translation> <translation id="8699799819461268362">Google सुरक्षित साइट फ़िल्टर</translation> <translation id="8701537995684343047">ऑफ़लाइन सहेजने के लिए बुकमार्क पर जाएं</translation> <translation id="8719023831149562936">वर्तमान टैब को बीम नहीं किया जा सकता</translation> <translation id="8725066075913043281">पुन: प्रयास करें</translation> -<translation id="8727142376512517020">इसे दोबारा ना दिखाएं</translation> <translation id="8730621377337864115">पूर्ण</translation> <translation id="8737542153238017984">सहेजा गया पृष्ठ ऑफ़लाइन उपलब्ध नहीं है. मेमोरी लगभग भर गई है.</translation> <translation id="8793430725658173476">url की कॉपी करें</translation> @@ -610,7 +608,7 @@ <translation id="932327136139879170">मुख्यपृष्ठ</translation> <translation id="938850635132480979">त्रुटि: <ph name="ERROR_CODE" /></translation> <translation id="945632385593298557">अपना माइक्रोफ़ोन एक्सेस करें</translation> -<translation id="954352821720225055">बुकमार्क ऑफ़लाइन उपलब्ध नहीं है. मेमोरी लगभग भर गई है.</translation> +<translation id="954352821720225055">बुकमार्क ऑफ़लाइन उपलब्ध नहीं है. मेमोरी लगभग भर गई है.</translation> <translation id="969096075394517431">भाषाएं बदलें</translation> <translation id="983192555821071799">सभी टैब बंद करें</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb index b3234cd..e9cc19fe 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Preuzimanje datoteke <ph name="FILE_NAME" /> nije uspjelo zbog poteškoća s poslužiteljem.</translation> <translation id="1506061864768559482">Tražilica</translation> <translation id="1513352483775369820">Oznake i Google povijest</translation> +<translation id="1546112724822176246">Ne vidite svoj uređaj? <ph name="BEGIN_LINK" />Potražite pomoć<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Ažuriraj Chrome</translation> <translation id="1557201757634521564">Automatski otkrij kodiranje</translation> <translation id="1568822834048182062">Vaše oznake, povijest, zaporke i ostale postavke sinkronizirat će se s vašim Google računom.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Otvori u novoj kartici</translation> <translation id="4198229475320555619">Oznaka od <ph name="PAGE_SIZE_STRING" /> spremljena offline</translation> <translation id="423410644998903704">Chrome treba imati pristup dopuštenjima da bi ih dijelio s ovom web-lokacijom.</translation> -<translation id="424696723690217687">Otkrijte web-stranice koje šalju objekti u blizini. - -Chrome će tražiti stranice u blizini kad je uređaj otključan. Googleova služba obradit će te stranice radi poboljšanja kvalitete rezultata stranica.</translation> <translation id="4254813446494774748">Jezik prijevoda:</translation> <translation id="4256782883801055595">Licence otvorenog koda</translation> <translation id="4259722352634471385">Otvaranje je blokirano: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Postavljanje je u tijeku…</translation> <translation id="6112702117600201073">Osvježavanje stranice</translation> <translation id="6127379762771434464">Stavka je uklonjena</translation> +<translation id="6134870457258083164">Ne vidite svoj uređaj? <ph name="BEGIN_LINK1" />Potražite pomoć<ph name="END_LINK1" /> ili <ph name="BEGIN_LINK2" />pretražite ponovo<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Prilagodite stranicu mobilnim uređajima</translation> <translation id="6140912465461743537">Država/regija</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> manji podatkovni promet</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Osvježi</translation> <translation id="7191430249889272776">Kartica je otvorena u pozadini.</translation> <translation id="7208788139759694678">Ušteda podataka nije omogućena</translation> +<translation id="721331389620694978">Neke postavke koje mogu odražavati navike tijekom pregledavanja neće se izbrisati.</translation> <translation id="7243308994586599757">Opcije dostupne pri dnu zaslona</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> upotrebljava vašu lokaciju za prikazivanje lokalnih rezultata pretraživanja</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Pomoć<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Da biste dobili nove licence, povežite se s internetom i reproducirajte preuzeti sadržaj.</translation> <translation id="8660471606262461360">S Google Paymentsa</translation> -<translation id="8675945939500569406">Želite li uključiti Fizički web?</translation> <translation id="8676374126336081632">Brisanje unosa</translation> <translation id="869891660844655955">Datum isteka</translation> <translation id="8699799819461268362">Filtar Google SafeSites</translation> <translation id="8701537995684343047">Idite na oznaku da biste je spremili offline</translation> <translation id="8719023831149562936">Trenutačnu karticu nije moguće emitirati</translation> <translation id="8725066075913043281">Pokušajte ponovo</translation> -<translation id="8727142376512517020">Ne prikazuj to ponovo</translation> <translation id="8730621377337864115">Gotovo</translation> <translation id="8737542153238017984">Spremljena stranica nije dostupna izvanmrežno. Pohrana je gotovo puna.</translation> <translation id="8793430725658173476">Kopiraj URL</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb index 9a56cc2..e55188ff 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">A következő fájl letöltése szerverproblémák miatt nem sikerült: <ph name="FILE_NAME" />.</translation> <translation id="1506061864768559482">Keresőmotor</translation> <translation id="1513352483775369820">Könyvjelzők és webes előzmények</translation> +<translation id="1546112724822176246">Nem látja eszközét? <ph name="BEGIN_LINK" />Kérjen segítséget<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">A Chrome böngésző frissítése</translation> <translation id="1557201757634521564">Kódolás automatikus felismerése</translation> <translation id="1568822834048182062">A könyvjelzők, előzmények, jelszavak és más beállítások szinkronizálódnak Google-fiókjával.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Megnyitás új lapon</translation> <translation id="4198229475320555619">Könyvjelző (<ph name="PAGE_SIZE_STRING" />) mentve offline</translation> <translation id="423410644998903704">A Chrome-nak rendelkeznie kell hozzáférési engedélyekkel, hogy megoszthassa őket ezzel a webhellyel.</translation> -<translation id="424696723690217687">Felfedezheti a közeli objektumok által küldött weboldalakat. - -A Chrome megkeresi a közeli oldalakat, ha az eszköz lezárása fel van oldva. Ezek az oldalak egy Google-szolgáltatáson keresztül érkeznek, hogy javuljon a találatok minősége.</translation> <translation id="4254813446494774748">A fordítás nyelve</translation> <translation id="4256782883801055595">Nyílt forráskódú licencek</translation> <translation id="4259722352634471385">Le van tiltva az ide vezető navigáció: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">A telepítés folyamatban...</translation> <translation id="6112702117600201073">Oldal frissítése</translation> <translation id="6127379762771434464">Elem eltávolítva</translation> +<translation id="6134870457258083164">Nem látja eszközét? <ph name="BEGIN_LINK1" />Kérjen segítséget<ph name="END_LINK1" />, vagy <ph name="BEGIN_LINK2" />végezzen új keresést<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Az oldal mobilbaráttá alakítása</translation> <translation id="6140912465461743537">Ország/régió</translation> <translation id="6159335304067198720"><ph name="PERCENT" />-os adatmegtakarítás</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Frissítés</translation> <translation id="7191430249889272776">A lap megnyílt a háttérben.</translation> <translation id="7208788139759694678">Az Adatforgalom-csökkentő ki van kapcsolva</translation> +<translation id="721331389620694978">Bizonyos beállítások, amelyek a böngészési szokásokat tükrözhetik, nem lesznek törölve.</translation> <translation id="7243308994586599757">A beállítások a képernyő alsó részén találhatók</translation> <translation id="7244362611678346589">A(z) <ph name="SEARCH_ENGINE_URL" /> az Ön tartózkodási helye alapján jelenít meg helyi keresési eredményeket</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Súgó<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Az új engedélyek beszerzéséhez kapcsolódjon az internethez, és játssza le a letöltött tartalmat.</translation> <translation id="8660471606262461360">A Google Payments szolgáltatásból</translation> -<translation id="8675945939500569406">Bekapcsolja a fizikai webet?</translation> <translation id="8676374126336081632">Beírt szöveg törlése</translation> <translation id="869891660844655955">Lejárati dátum</translation> <translation id="8699799819461268362">Biztonságos webhelyek Google-szűrő</translation> <translation id="8701537995684343047">Nyissa meg a könyvjelzőt az offline mentéshez</translation> <translation id="8719023831149562936">Nem lehet átsugározni a jelenlegi lapot</translation> <translation id="8725066075913043281">Újrapróbálás</translation> -<translation id="8727142376512517020">Ez ne jelenjen meg többé</translation> <translation id="8730621377337864115">Kész</translation> <translation id="8737542153238017984">A mentett oldal nem érhető el offline módban. A tárhely már majdnem megtelt.</translation> <translation id="8793430725658173476">URL másolása</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_id.xtb b/chrome/android/java/strings/translations/android_chrome_strings_id.xtb index de610f32..d49ab04 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_id.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
@@ -42,10 +42,11 @@ <translation id="1477626028522505441">Unduhan <ph name="FILE_NAME" /> gagal karena masalah server.</translation> <translation id="1506061864768559482">Mesin telusur</translation> <translation id="1513352483775369820">Bookmark dan riwayat web</translation> +<translation id="1546112724822176246">Tidak melihat perangkat Anda? <ph name="BEGIN_LINK" />Dapatkan bantuan<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Perbarui browser Chrome</translation> <translation id="1557201757634521564">Deteksi otomatis enkode</translation> <translation id="1568822834048182062">Bookmark, riwayat, sandi, dan setelan lainnya akan disinkronkan ke Akun Google.</translation> -<translation id="1592483623187843893">Bookmark disimpan untuk offline</translation> +<translation id="1592483623187843893">Bookmark disimpan secara offline</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1623104350909869708">Cegah dialog lain dari laman ini.</translation> <translation id="1641113438599504367">Penelusuran Aman</translation> @@ -111,7 +112,7 @@ <translation id="2498359688066513246">Bantuan & masukan</translation> <translation id="2501278716633472235">Kembali</translation> <translation id="2512222046227390255">Isi Otomatis formulir</translation> -<translation id="2521102375070725336">Bookmark disimpan untuk offline di <ph name="FOLDER_NAME" /></translation> +<translation id="2521102375070725336">Bookmark disimpan secara offline di <ph name="FOLDER_NAME" /></translation> <translation id="2526148617758225454">Penghemat Data aktif. Kelola di Setelan.</translation> <translation id="2532336938189706096">Tampilan Web</translation> <translation id="2536728043171574184">Melihat salinan offline laman ini</translation> @@ -171,7 +172,7 @@ <translation id="3435896845095436175">Aktifkan</translation> <translation id="3485544713029068372">Smart Lock untuk Sandi</translation> <translation id="3492207499832628349">Tab penyamaran baru</translation> -<translation id="3501331331116143684">Laman disimpan untuk offline di <ph name="FOLDER_NAME" /></translation> +<translation id="3501331331116143684">Laman disimpan secara offline di <ph name="FOLDER_NAME" /></translation> <translation id="3518985090088779359">Terima & lanjutkan</translation> <translation id="3527085408025491307">Folder</translation> <translation id="360480449234699036">Pelajari tentang topik di situs web tanpa meninggalkan laman. Sentuh untuk Menelusuri mengirimkan kata dan konteks di sekitarnya ke Google Penelusuran, mengembalikan definisi, gambar, hasil penelusuran, serta detail lainnya. @@ -211,11 +212,8 @@ <translation id="4170011742729630528">Layanan tidak tersedia; coba lagi nanti.</translation> <translation id="4193864812412988973">Melihat salinan offline bookmark ini</translation> <translation id="4195643157523330669">Buka di tab baru</translation> -<translation id="4198229475320555619"><ph name="PAGE_SIZE_STRING" /> bookmark disimpan untuk offline</translation> +<translation id="4198229475320555619"><ph name="PAGE_SIZE_STRING" /> bookmark disimpan secara offline</translation> <translation id="423410644998903704">Chrome memerlukan akses izin untuk berbagi dengan situs ini.</translation> -<translation id="424696723690217687">Temukan laman web yang dikirim oleh obyek di sekitar. - -Chrome akan memindai laman di sekitar saat perangkat Anda dibuka kuncinya. Laman ini akan melalui layanan Google untuk meningkatkan kualitas hasil laman.</translation> <translation id="4254813446494774748">Bahasa Terjemahan:</translation> <translation id="4256782883801055595">Lisensi sumber terbuka</translation> <translation id="4259722352634471385">Navigasi diblokir: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Penyiapan sedang berlangsung...</translation> <translation id="6112702117600201073">Menyegarkan laman</translation> <translation id="6127379762771434464">Item dihapus</translation> +<translation id="6134870457258083164">Tidak melihat perangkat Anda? <ph name="BEGIN_LINK1" />Dapatkan bantuan<ph name="END_LINK1" /> atau <ph name="BEGIN_LINK2" />telusuri lagi<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Buat laman mobile-friendly</translation> <translation id="6140912465461743537">Negara/Wilayah</translation> <translation id="6159335304067198720">Penghematan data <ph name="PERCENT" /></translation> @@ -395,7 +394,7 @@ <translation id="6406506848690869874">Sinkronisasi</translation> <translation id="6409731863280057959">Munculan</translation> <translation id="641643625718530986">Cetak...</translation> -<translation id="6447570251829705777">Bookmark tidak tersedia untuk offline</translation> +<translation id="6447570251829705777">Bookmark tidak tersedia saat offline</translation> <translation id="6447842834002726250">Cookie</translation> <translation id="6448273550210938826">Penelusuran dan saran URL</translation> <translation id="6458785801851713928">Sinkronisasi tidak tersedia untuk domain Anda.</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Segarkan</translation> <translation id="7191430249889272776">Tab dibuka di latar belakang.</translation> <translation id="7208788139759694678">Penghemat Data dinonaktifkan</translation> +<translation id="721331389620694978">Beberapa setelan yang mungkin mencerminkan kebiasaan penjelajahan tidak akan dihapus.</translation> <translation id="7243308994586599757">Opsi terdapat di dekat bagian bawah layar</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> menggunakan lokasi Anda untuk menampilkan hasil penelusuran lokal</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Bantuan<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Untuk mendapatkan lisensi baru, sambungkan ke internet dan putar konten yang diunduh.</translation> <translation id="8660471606262461360">Dari Google Payments</translation> -<translation id="8675945939500569406">Aktifkan Web Fisik?</translation> <translation id="8676374126336081632">Hapus masukan</translation> <translation id="869891660844655955">Tanggal kedaluwarsa</translation> <translation id="8699799819461268362">Filter Google SitusAman</translation> -<translation id="8701537995684343047">Kunjungi bookmark untuk menyimpan secara offline</translation> +<translation id="8701537995684343047">Kunjungi bookmark untuk menyimpannya secara offline</translation> <translation id="8719023831149562936">Tidak dapat memancarkan tab ini</translation> <translation id="8725066075913043281">Coba lagi</translation> -<translation id="8727142376512517020">Jangan tampilkan ini lagi</translation> <translation id="8730621377337864115">Selesai</translation> <translation id="8737542153238017984">Laman tersimpan tidak tersedia offline. Penyimpanan hampir penuh.</translation> <translation id="8793430725658173476">Salin URL</translation> @@ -602,7 +600,7 @@ <translation id="9100610230175265781">Frasa sandi diwajibkan</translation> <translation id="9133515669113036225">Menyetel ulang kredensial perangkat</translation> <translation id="9137013805542155359">Perlihatkan laman asli</translation> -<translation id="9151532766011674069">Bookmark disimpan untuk offline. Penyimpanan hampir penuh.</translation> +<translation id="9151532766011674069">Bookmark disimpan secara offline. Penyimpanan hampir penuh.</translation> <translation id="917685106653909562">Laman Web fisik di sekitar</translation> <translation id="9187199695613236444">Tampilan mobile-friendly</translation> <translation id="9192643434065497760">Aktifkan Bluetooth di <ph name="BEGIN_LINK" />setelan perangkat<ph name="END_LINK" /> untuk melakukan penyandingan.</translation> @@ -610,7 +608,7 @@ <translation id="932327136139879170">Beranda</translation> <translation id="938850635132480979">Kesalahan: <ph name="ERROR_CODE" /></translation> <translation id="945632385593298557">Akses mikrofon Anda</translation> -<translation id="954352821720225055">Bookmark tidak tersedia untuk offline. Penyimpanan hampir penuh.</translation> +<translation id="954352821720225055">Bookmark tidak tersedia saat offline. Penyimpanan hampir penuh.</translation> <translation id="969096075394517431">Ubah bahasa</translation> <translation id="983192555821071799">Tutup semua tab</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_it.xtb b/chrome/android/java/strings/translations/android_chrome_strings_it.xtb index 89c6d89..ef09646 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_it.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Download di <ph name="FILE_NAME" /> non riuscito a causa di problemi del server.</translation> <translation id="1506061864768559482">Motore di ricerca</translation> <translation id="1513352483775369820">Preferiti e cronologia web</translation> +<translation id="1546112724822176246">Non trovi il tuo dispositivo? <ph name="BEGIN_LINK" />Richiedi assistenza<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Aggiorna Chrome</translation> <translation id="1557201757634521564">Rileva automaticamente la codifica</translation> <translation id="1568822834048182062">I Preferiti, la cronologia, le password e altre impostazioni verranno sincronizzate con il tuo account Google.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Apri in un'altra scheda</translation> <translation id="4198229475320555619">Preferito salvato offline: <ph name="PAGE_SIZE_STRING" /></translation> <translation id="423410644998903704">Chrome deve avere accesso alle autorizzazioni per condividerle con questo sito.</translation> -<translation id="424696723690217687">Consente di trovare le pagine web inviate da oggetti vicini. - -Chrome cerca pagine nelle vicinanze quando il dispositivo è sbloccato. Tali pagine passeranno da un servizio di Google per migliorare la qualità dei risultati di pagine.</translation> <translation id="4254813446494774748">Lingua della traduzione:</translation> <translation id="4256782883801055595">Licenze open source</translation> <translation id="4259722352634471385">Navigazione bloccata: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Configurazione in corso…</translation> <translation id="6112702117600201073">Aggiornamento della pagina in corso</translation> <translation id="6127379762771434464">Elemento rimosso</translation> +<translation id="6134870457258083164">Non trovi il tuo dispositivo? <ph name="BEGIN_LINK1" />Richiedi assistenza<ph name="END_LINK1" /> o <ph name="BEGIN_LINK2" />esegui di nuovo la ricerca<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Ottimizza la pagina per i dispositivi mobili</translation> <translation id="6140912465461743537">Paese/regione</translation> <translation id="6159335304067198720">Riduzioni dei dati: <ph name="PERCENT" /></translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Aggiorna</translation> <translation id="7191430249889272776">Scheda aperta in background.</translation> <translation id="7208788139759694678">Funzione Risparmio dati disattivata</translation> +<translation id="721331389620694978">Alcune impostazioni che potrebbero rispecchiare le abitudini di navigazione non verranno cancellate.</translation> <translation id="7243308994586599757">Opzioni disponibili nella parte inferiore dello schermo</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> utilizza la tua posizione per mostrare i risultati della ricerca locale.</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Guida<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Per ottenere nuove licenze, connettiti a Internet e riproduci i contenuti scaricati.</translation> <translation id="8660471606262461360">Da Google Payments</translation> -<translation id="8675945939500569406">Attivare il Physical Web?</translation> <translation id="8676374126336081632">Cancella testo inserito</translation> <translation id="869891660844655955">Data di scadenza</translation> <translation id="8699799819461268362">Filtro Google SafeSites</translation> <translation id="8701537995684343047">Visita il preferito per salvarlo offline</translation> <translation id="8719023831149562936">Impossibile trasmettere scheda corrente</translation> <translation id="8725066075913043281">Riprova</translation> -<translation id="8727142376512517020">Non visualizzare più</translation> <translation id="8730621377337864115">Fine</translation> <translation id="8737542153238017984">Pagina salvata non disponibile offline. Spazio di archiviazione quasi pieno.</translation> <translation id="8793430725658173476">Copia URL</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb index 8f0a541..ebe89efff 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">הורדת <ph name="FILE_NAME" /> נכשלה עקב בעיות בשרת.</translation> <translation id="1506061864768559482">מנוע חיפוש</translation> <translation id="1513352483775369820">סימניות והיסטוריית אתרים</translation> +<translation id="1546112724822176246">אינך רואה את המכשיר? <ph name="BEGIN_LINK" />קבל עזרה<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">עדכן את Chrome</translation> <translation id="1557201757634521564">זיהוי אוטומטי של קידוד</translation> <translation id="1568822834048182062">הסימניות, ההיסטוריה, הסיסמאות והגדרות נוספות יסונכרנו עם חשבון Google שלך.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">פתח בכרטיסייה חדשה</translation> <translation id="4198229475320555619">סימניה בגודל <ph name="PAGE_SIZE_STRING" /> נשמרה במצב לא מקוון</translation> <translation id="423410644998903704">Chrome זקוק לגישה אל ההרשאות כדי לשתף אותן עם האתר הזה.</translation> -<translation id="424696723690217687">מצא דפי אינטרנט שנשלחו בידי עצמים שנמצאים בקרבת מקום. - -Chrome יחפש דפים בקרבת מקום כשהמכשיר אינו נעול. דפים אלה יעברו דרך שירות Google כדי לשפר את איכות התוצאות.</translation> <translation id="4254813446494774748">שפת התרגום:</translation> <translation id="4256782883801055595">רישיונות קוד פתוח</translation> <translation id="4259722352634471385">הניווט חסום: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">ההגדרה מתבצעת…</translation> <translation id="6112702117600201073">מרענן את הדף</translation> <translation id="6127379762771434464">הפריט הוסר</translation> +<translation id="6134870457258083164">אינך רואה את המכשיר? <ph name="BEGIN_LINK1" />קבל עזרה<ph name="END_LINK1" /> או <ph name="BEGIN_LINK2" />חפש שוב<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">הפוך את הדף לידידותי לנייד</translation> <translation id="6140912465461743537">ארץ/אזור</translation> <translation id="6159335304067198720">חיסכון בצריכת נתונים בשיעור של <ph name="PERCENT" /></translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">רענן</translation> <translation id="7191430249889272776">הכרטיסייה נפתחה ברקע.</translation> <translation id="7208788139759694678">חוסך הנתונים (Data Saver) מושבת</translation> +<translation id="721331389620694978">חלק מההגדרות שעשויות לשקף את הרגלי הגלישה לא ינוקו.</translation> <translation id="7243308994586599757">אפשרויות הזמינות באזור החלק התחתון של המסך</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> משתמש במיקום שלך כדי להציג תוצאות חיפוש מקומיות</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />עזרה<ph name="END_LINK" /></translation> @@ -563,14 +563,12 @@ <translation id="8627706565932943526">שגיאת סנכרון</translation> <translation id="862875433388403934">ייתכן שלא תוכל עוד להפעיל תוכן (סרטים, מוזיקה וכו') שהורדת באפליקציות אחרות עד לרכישה מחדש של רישיונות באפליקציות אלה עם פרטי כניסה למכשיר חדש. כדי להשיג רישיונות חדשים, התחבר לאינטרנט והפעל את התוכן שהורדת.</translation> <translation id="8660471606262461360">מ-Google Payments</translation> -<translation id="8675945939500569406">האם להפעיל את האינטרנט הווירטופיזי?</translation> <translation id="8676374126336081632">נקה קלט</translation> <translation id="869891660844655955">תאריך תפוגה</translation> <translation id="8699799819461268362">מסנן Google SafeSites</translation> <translation id="8701537995684343047">עבור לסימניה כדי לשמור אותה במצב לא מקוון</translation> <translation id="8719023831149562936">לא ניתן להעביר תוכן מהכרטיסייה הנוכחית</translation> <translation id="8725066075913043281">נסה שוב</translation> -<translation id="8727142376512517020">אל תציג הודעה זו שוב</translation> <translation id="8730621377337864115">בוצע</translation> <translation id="8737542153238017984">הדף שנשמר אינו זמין במצב לא מקוון. מיצית כמעט את כל נפח האחסון.</translation> <translation id="8793430725658173476">העתק כתובת אתר</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb index c21a7cd..1ae6a77 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">サーバーで問題が発生したため、<ph name="FILE_NAME" /> をダウンロードできませんでした。</translation> <translation id="1506061864768559482">検索エンジン</translation> <translation id="1513352483775369820">ブックマークとウェブ履歴</translation> +<translation id="1546112724822176246">お使いの端末が表示されない場合は、<ph name="BEGIN_LINK" />ヘルプ<ph name="END_LINK" />をご覧ください。</translation> <translation id="1553358976309200471">Chrome を更新</translation> <translation id="1557201757634521564">エンコードを自動検出する</translation> <translation id="1568822834048182062">ブックマーク、履歴、パスワード、その他の設定が Google アカウントに同期されます。</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">新しいタブで開く</translation> <translation id="4198229475320555619"><ph name="PAGE_SIZE_STRING" /> のブックマークをオフライン保存しました</translation> <translation id="423410644998903704">このサイトと機能を共有するには Chrome にアクセスを許可する必要があります。</translation> -<translation id="424696723690217687">近くのオブジェクトから送信されているウェブページを検出します。 - -Chrome では端末のロックが解除されている場合に、近くで送信されているページをスキャンします。検出されたページは、Google のサービスを使用して精度が高められます。</translation> <translation id="4254813446494774748">翻訳言語:</translation> <translation id="4256782883801055595">オープンソース ライセンス</translation> <translation id="4259722352634471385"><ph name="URL" /> へのアクセスがブロックされました</translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">設定しています...</translation> <translation id="6112702117600201073">ページを更新しています</translation> <translation id="6127379762771434464">アイテムを削除しました</translation> +<translation id="6134870457258083164">お使いの端末が表示されない場合は、<ph name="BEGIN_LINK1" />ヘルプ<ph name="END_LINK1" />をご覧になるか、<ph name="BEGIN_LINK2" />もう一度検索<ph name="END_LINK2" />してください。</translation> <translation id="6138140242378429169">ページをモバイル向け画面で表示</translation> <translation id="6140912465461743537">国 / 地域</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> のデータを削減</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">更新</translation> <translation id="7191430249889272776">バックグラウンドでタブを開きました。</translation> <translation id="7208788139759694678">データセーバーは無効です</translation> +<translation id="721331389620694978">閲覧行動を反映した設定は、場合によっては消去されません。</translation> <translation id="7243308994586599757">画面の下の方にオプションがあります</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> では地域の検索結果を表示するためにユーザーの位置情報が使用されます</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />ヘルプ<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ 新しいライセンスを取得するには、インターネットに接続し、ダウンロードしたコンテンツを再生してください。</translation> <translation id="8660471606262461360">Google ペイメントから取得</translation> -<translation id="8675945939500569406">フィジカル ウェブを有効にしますか?</translation> <translation id="8676374126336081632">入力内容を消去</translation> <translation id="869891660844655955">有効期限</translation> <translation id="8699799819461268362">Google セーフサイト フィルタ</translation> <translation id="8701537995684343047">オフライン保存するブックマークを開いてください</translation> <translation id="8719023831149562936">現在のタブはビームできません</translation> <translation id="8725066075913043281">やり直し</translation> -<translation id="8727142376512517020">今後このメッセージを表示しない</translation> <translation id="8730621377337864115">完了</translation> <translation id="8737542153238017984">ストレージの空き容量がないため、保存したページはオフラインで表示できません。</translation> <translation id="8793430725658173476">URLをコピー</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb index 779f309..b7fd936 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">서버 문제로 인해 <ph name="FILE_NAME" />을(를) 다운로드할 수 없습니다.</translation> <translation id="1506061864768559482">검색엔진</translation> <translation id="1513352483775369820">북마크 및 방문 기록</translation> +<translation id="1546112724822176246">기기가 표시되지 않나요? <ph name="BEGIN_LINK" />도움 받기<ph name="END_LINK" /></translation> <translation id="1553358976309200471">Chrome 업데이트</translation> <translation id="1557201757634521564">인코딩 자동 감지</translation> <translation id="1568822834048182062">북마크, 방문 기록, 비밀번호, 기타 설정이 Google 계정에 동기화됩니다.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">새 탭에서 열기</translation> <translation id="4198229475320555619"><ph name="PAGE_SIZE_STRING" /> 북마크가 오프라인에 저장됨</translation> <translation id="423410644998903704">이 사이트에 공유하려면 Chrome에 액세스 권한이 있어야 합니다.</translation> -<translation id="424696723690217687">가까운 물체에서 전송된 웹페이지 확인 - -Chrome에서는 기기가 잠금 해제 상태일 때 주변 페이지를 스캔합니다. 이 페이지는 페이지 결과의 품질을 높이기 위해 Google 서비스를 거칩니다.</translation> <translation id="4254813446494774748">번역 언어:</translation> <translation id="4256782883801055595">오픈소스 라이선스</translation> <translation id="4259722352634471385">탐색이 차단됨: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">설정 진행 중...</translation> <translation id="6112702117600201073">페이지 새로고침</translation> <translation id="6127379762771434464">항목 삭제됨</translation> +<translation id="6134870457258083164">기기가 표시되지 않나요? <ph name="BEGIN_LINK1" />도움 받기<ph name="END_LINK1" /> 또는 <ph name="BEGIN_LINK2" />다시 검색<ph name="END_LINK2" /></translation> <translation id="6138140242378429169">페이지를 모바일 친화적으로 바꾸세요.</translation> <translation id="6140912465461743537">국가/지역</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> 데이터 절약</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">새로고침</translation> <translation id="7191430249889272776">탭이 백그라운드에 열림</translation> <translation id="7208788139759694678">데이터 세이버 사용 안함</translation> +<translation id="721331389620694978">인터넷 사용 습관이 반영될 수 있는 일부 설정은 삭제되지 않습니다.</translation> <translation id="7243308994586599757">화면 하단에서 옵션 선택 가능</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" />이(가) 사용자 위치 정보를 사용하여 지역 검색결과 표시</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />도움말<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ 새로운 라이선스를 취득하려면 인터넷에 연결하고 다운로드한 콘텐츠를 재생하세요.</translation> <translation id="8660471606262461360">출처: Google Payments</translation> -<translation id="8675945939500569406">피지컬 웹 사용하기</translation> <translation id="8676374126336081632">입력내용 지우기</translation> <translation id="869891660844655955">유효기간</translation> <translation id="8699799819461268362">Google SafeSites 필터</translation> <translation id="8701537995684343047">북마크를 방문하여 오프라인에 저장</translation> <translation id="8719023831149562936">현재 탭을 공유할 수 없습니다.</translation> <translation id="8725066075913043281">다시 시도하세요</translation> -<translation id="8727142376512517020">이 메시지를 다시 표시하지 않음</translation> <translation id="8730621377337864115">완료</translation> <translation id="8737542153238017984">저장한 페이지를 오프라인에서 사용할 수 없습니다. 저장용량이 얼마 남지 않았습니다.</translation> <translation id="8793430725658173476">URL 복사</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb b/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb index f7088651..fedfd838 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Nepavyko atsisiųsti „<ph name="FILE_NAME" />“ dėl serverio problemų.</translation> <translation id="1506061864768559482">Paieškos variklis</translation> <translation id="1513352483775369820">Žymių ir žiniatinklio istorija</translation> +<translation id="1546112724822176246">Nematote įrenginio? <ph name="BEGIN_LINK" />Gaukite pagalbos<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Atnaujinkite „Chrome“</translation> <translation id="1557201757634521564">Automatiškai aptikti koduotę</translation> <translation id="1568822834048182062">Žymės, istorija, slaptažodžiai ir kiti nustatymai bus sinchronizuojami su „Google“ paskyra.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Atidaryti naujame skirtuke</translation> <translation id="4198229475320555619"><ph name="PAGE_SIZE_STRING" /> žymė išsaugota naudoti neprisijungus</translation> <translation id="423410644998903704">„Chrome“ reikia pasiekiamumo leidimų, kad juos būtų galima bendrinti su šia svetaine.</translation> -<translation id="424696723690217687">Atraskite tinklalapius, kurios išsiuntė netoliese esantys objektai. - -Kai įrenginys bus atrakintas, „Chrome“ nuskaitys netoliese esančių objektų puslapius. Šie puslapiai bus siunčiami naudojant „Google“ paslaugą siekiant patobulinti puslapių rezultatų kokybę.</translation> <translation id="4254813446494774748">Vertimo kalba:</translation> <translation id="4256782883801055595">Atvirojo šaltinio licencijos</translation> <translation id="4259722352634471385">Naršymas užblokuotas: <ph name="URL" /></translation> @@ -374,6 +372,7 @@ <translation id="6108923351542677676">Nustatoma…</translation> <translation id="6112702117600201073">Puslapio atnaujinimas</translation> <translation id="6127379762771434464">Elementas pašalintas</translation> +<translation id="6134870457258083164">Nematote įrenginio? <ph name="BEGIN_LINK1" />Gaukite pagalbos<ph name="END_LINK1" /> arba <ph name="BEGIN_LINK2" />ieškokite dar kartą<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Pritaikykite puslapį mobiliesiems</translation> <translation id="6140912465461743537">Šalis / regionas</translation> <translation id="6159335304067198720">Sutaupyta duomenų: <ph name="PERCENT" /></translation> @@ -460,6 +459,7 @@ <translation id="7180611975245234373">Atnaujinti</translation> <translation id="7191430249889272776">Skirtuko lapas atidarytas fone.</translation> <translation id="7208788139759694678">Duomenų taupymo priemonė išjungta</translation> +<translation id="721331389620694978">Kai kurie nustatymai, kurie gali atspindėti naršymo įpročius, nebus išvalyti.</translation> <translation id="7243308994586599757">Parinktys pasiekiamos netoli ekrano apačios</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> naudoja vietovės informaciją vietinės paieškos rezultatams rodyti</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Pagalba<ph name="END_LINK" /></translation> @@ -566,14 +566,12 @@ Jei norite gauti naujas licencijas, prisijunkite prie interneto ir leiskite atsisiųsti turinį.</translation> <translation id="8660471606262461360">Iš „Google Payments“</translation> -<translation id="8675945939500569406">Įjungti Fizinį žiniatinklį?</translation> <translation id="8676374126336081632">Išvalyti įvestą tekstą</translation> <translation id="869891660844655955">Galiojimo data</translation> <translation id="8699799819461268362">„Google SafeSites“ filtras</translation> <translation id="8701537995684343047">Spustelėkite žymę, kad išsaugotumėte neprisijungus naudotiną kopiją</translation> <translation id="8719023831149562936">Negalima perduoti esamo skirtuko</translation> <translation id="8725066075913043281">Bandyti dar kartą</translation> -<translation id="8727142376512517020">Daugiau nerodyti</translation> <translation id="8730621377337864115">Atlikta</translation> <translation id="8737542153238017984">Išsaugotas puslapis nepasiekiamas neprisijungus. Saugykla beveik pilna.</translation> <translation id="8793430725658173476">Kopijuoti URL</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb b/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb index 6f4e4f9..5d849414 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Neizdevās lejupielādēt failu <ph name="FILE_NAME" />, jo radās servera problēmas.</translation> <translation id="1506061864768559482">Meklētājprogramma</translation> <translation id="1513352483775369820">Grāmatzīmes un tīmekļa vēsture</translation> +<translation id="1546112724822176246">Vai jūsu ierīce netiek rādīta? <ph name="BEGIN_LINK" />Saņemiet palīdzību<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Atjaunināt Chrome</translation> <translation id="1557201757634521564">Kodējuma automātiska noteikšana</translation> <translation id="1568822834048182062">Jūsu grāmatzīmes, vēsture, paroles un citi iestatījumi tiks sinhronizēti ar jūsu Google kontu.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Atvērt jaunā cilnē</translation> <translation id="4198229475320555619"><ph name="PAGE_SIZE_STRING" /> grāmatzīme ir saglabāta bezsaistē</translation> <translation id="423410644998903704">Pārlūkam Chrome ir nepieciešama piekļuve atļaujām, lai kopīgotu tās ar šo vietni.</translation> -<translation id="424696723690217687">Atklājiet tīmekļa lapas, ko nosūtījuši tuvumā esoši objekti. - -Kad jūsu ierīce būs atbloķēta, Chrome meklēs tuvumā esošas lapas. Šīs lapas tiks ievietotas Google pakalpojumā, lai uzlabotu lapu rezultātu kvalitāti.</translation> <translation id="4254813446494774748">Tulkojuma valoda:</translation> <translation id="4256782883801055595">Atklātā pirmkoda licences</translation> <translation id="4259722352634471385">Navigācija ir bloķēta: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Notiek iestatīšana...</translation> <translation id="6112702117600201073">Lapas atsvaidzināšana</translation> <translation id="6127379762771434464">Vienums ir noņemts</translation> +<translation id="6134870457258083164">Vai jūsu ierīce netiek rādīta? <ph name="BEGIN_LINK1" />Saņemiet palīdzību<ph name="END_LINK1" /> vai <ph name="BEGIN_LINK2" />meklējiet vēlreiz<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Padarīt lapu piemērotu mobilajām ierīcēm</translation> <translation id="6140912465461743537">Valsts/reģions</translation> <translation id="6159335304067198720">Datu lietojuma samazinājums: <ph name="PERCENT" /></translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Atsvaidzināt</translation> <translation id="7191430249889272776">Cilne tika atvērta fonā.</translation> <translation id="7208788139759694678">Datu lietojuma samazinātājs ir atspējots.</translation> +<translation id="721331389620694978">Netiks dzēsti daži iestatījumi, kas var atspoguļot pārlūkošanas paradumus.</translation> <translation id="7243308994586599757">Opcijas, kas pieejamas ekrāna apakšējā daļā</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> izmanto jūsu atrašanās vietas informāciju, lai rādītu vietējās meklēšanas rezultātus</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Palīdzība<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Lai iegūtu jaunas licences, izveidojiet savienojumu ar internetu un atskaņojiet lejupielādēto saturu.</translation> <translation id="8660471606262461360">No Google Payments</translation> -<translation id="8675945939500569406">Vai ieslēgt fizisko tīmekli?</translation> <translation id="8676374126336081632">Notīrīt ievadi</translation> <translation id="869891660844655955">Derīguma termiņš</translation> <translation id="8699799819461268362">Google SafeSites filtrs</translation> <translation id="8701537995684343047">Lai saglabātu grāmatzīmi bezsaistē, atveriet to</translation> <translation id="8719023831149562936">Nevar kopīgot šo cilni, izmantojot Beam.</translation> <translation id="8725066075913043281">Mēģināt vēlreiz</translation> -<translation id="8727142376512517020">Vairs nerādīt šo paziņojumu</translation> <translation id="8730621377337864115">Gatavs</translation> <translation id="8737542153238017984">Saglabātā lapa nav pieejama bezsaistē. Krātuvē ir maz vietas.</translation> <translation id="8793430725658173476">Kopēt URL</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb index 22495d3..81feff6b 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Downloaden van <ph name="FILE_NAME" /> is mislukt door serverproblemen.</translation> <translation id="1506061864768559482">Zoekmachine</translation> <translation id="1513352483775369820">Bladwijzers en webgeschiedenis</translation> +<translation id="1546112724822176246">Wordt je apparaat niet weergegeven? <ph name="BEGIN_LINK" />Raadpleeg de Help<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Chrome updaten</translation> <translation id="1557201757634521564">Codering automatisch detecteren</translation> <translation id="1568822834048182062">Je bladwijzers, geschiedenis, wachtwoorden en andere instellingen worden gesynchroniseerd met je Google-account.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Openen op nieuw tabblad</translation> <translation id="4198229475320555619"><ph name="PAGE_SIZE_STRING" /> bladwijzer offline opgeslagen</translation> <translation id="423410644998903704">Chrome heeft rechten nodig om het item te delen met deze site.</translation> -<translation id="424696723690217687">Ontdek webpagina's die worden verzonden door objecten in de buurt. - -Chrome scant op webpagina's in de buurt wanneer je apparaat is ontgrendeld. Deze pagina's worden verwerkt door een Google-service om de kwaliteit van paginaresultaten te verbeteren.</translation> <translation id="4254813446494774748">Doeltaal:</translation> <translation id="4256782883801055595">Open-sourcelicenties</translation> <translation id="4259722352634471385">Navigatie is geblokkeerd: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Instellen wordt uitgevoerd...</translation> <translation id="6112702117600201073">Pagina vernieuwen</translation> <translation id="6127379762771434464">Item verwijderd</translation> +<translation id="6134870457258083164">Wordt je apparaat niet weergegeven? <ph name="BEGIN_LINK1" />Raadpleeg de Help<ph name="END_LINK1" /> of <ph name="BEGIN_LINK2" />zoek nogmaals<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Pagina geschikt maken voor mobiele apparaten</translation> <translation id="6140912465461743537">Land/regio</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> besparing van data</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Vernieuwen</translation> <translation id="7191430249889272776">Tabblad op de achtergrond geopend.</translation> <translation id="7208788139759694678">Databesparing uitgeschakeld</translation> +<translation id="721331389620694978">Bepaalde instellingen die browsegedrag kunnen weerspiegelen, worden niet gewist.</translation> <translation id="7243308994586599757">Opties beschikbaar onder aan het scherm</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> gebruikt je locatie om lokale zoekresultaten weer te geven</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Help<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Maak verbinding met internet en speel je gedownloade inhoud af om nieuwe licenties te krijgen.</translation> <translation id="8660471606262461360">Van Google Payments</translation> -<translation id="8675945939500569406">Het Fysieke web inschakelen?</translation> <translation id="8676374126336081632">Invoer wissen</translation> <translation id="869891660844655955">Vervaldatum</translation> <translation id="8699799819461268362">Google SafeSites-filter</translation> <translation id="8701537995684343047">Bladwijzer bezoeken om offline op te slaan</translation> <translation id="8719023831149562936">Kan huidig tabblad niet beamen</translation> <translation id="8725066075913043281">Opnieuw proberen</translation> -<translation id="8727142376512517020">Dit bericht niet meer weergeven</translation> <translation id="8730621377337864115">Gereed</translation> <translation id="8737542153238017984">Opgeslagen pagina niet offline beschikbaar. Opslagruimte is bijna vol.</translation> <translation id="8793430725658173476">URL kopiëren</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_no.xtb b/chrome/android/java/strings/translations/android_chrome_strings_no.xtb index 871c8ee..d0c846f 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_no.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Nedlastingen av <ph name="FILE_NAME" /> ble avbrutt på grunn av tjenerproblemer.</translation> <translation id="1506061864768559482">Søkemotor</translation> <translation id="1513352483775369820">Bokmerker og nettlogg</translation> +<translation id="1546112724822176246">Ser du ikke enheten din? <ph name="BEGIN_LINK" />Få hjelp<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Oppdater Chrome</translation> <translation id="1557201757634521564">Gjenkjenn omgjøring til kode automatisk</translation> <translation id="1568822834048182062">Bokmerkene, loggen, passordene og de andre innstillingene dine blir synkronisert til Google-kontoen din.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Åpne i ny fane</translation> <translation id="4198229475320555619">Et bokmerke på <ph name="PAGE_SIZE_STRING" /> er lagret lokalt</translation> <translation id="423410644998903704">Chrome må ha tilgang til tillatelsene for å kunne dele dem med dette nettstedet.</translation> -<translation id="424696723690217687">Oppdag nettsider som sendes fra objekter i nærheten. - -Chrome skanner etter sider i nærheten når enheten er låst opp. Disse sidene går gjennom en Google-tjeneste som forbedrer kvaliteten på sideresultatene.</translation> <translation id="4254813446494774748">Språket siden skal oversettes til:</translation> <translation id="4256782883801055595">Lisenser for åpen kildekode</translation> <translation id="4259722352634471385">Nettadressen er blokkert: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Konfigurasjon pågår …</translation> <translation id="6112702117600201073">Oppdaterer siden.</translation> <translation id="6127379762771434464">Elementet ble fjernet</translation> +<translation id="6134870457258083164">Ser du ikke enheten din? <ph name="BEGIN_LINK1" />Få hjelp<ph name="END_LINK1" /> eller <ph name="BEGIN_LINK2" />søk igjen<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Gjør siden mobilvennlig</translation> <translation id="6140912465461743537">Land/område</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> datasparing</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Last inn på nytt</translation> <translation id="7191430249889272776">En fane ble åpnet i bakgrunnen.</translation> <translation id="7208788139759694678">Datasparing er slått av</translation> +<translation id="721331389620694978">Enkelte innstillinger som muligens gjenspeiler nettleservaner, blir ikke fjernet.</translation> <translation id="7243308994586599757">Du finner alternativer ved bunnen av skjermen</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> bruker posisjonen din for å vise lokale søkeresultater</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Hjelp<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ For å få nye lisenser må du koble deg til Internett og spille av innholdet du har lastet ned.</translation> <translation id="8660471606262461360">Fra Google Payments</translation> -<translation id="8675945939500569406">Vil du slå på det fysiske nettet?</translation> <translation id="8676374126336081632">Slett teksten</translation> <translation id="869891660844655955">Utløpsdato</translation> <translation id="8699799819461268362">Google SafeSites-filter</translation> <translation id="8701537995684343047">Besøk bokmerket for å lagre det lokalt</translation> <translation id="8719023831149562936">Kan ikke beame gjeldende fane</translation> <translation id="8725066075913043281">Prøv igjen</translation> -<translation id="8727142376512517020">Ikke vis dette igjen</translation> <translation id="8730621377337864115">Ferdig</translation> <translation id="8737542153238017984">Den lagrede siden er ikke tilgjengelig uten nett. Lagringsplassen er nesten full.</translation> <translation id="8793430725658173476">Kopiér nettadressen</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb index 76afd953..9b26ec6 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Nie udało się pobrać pliku <ph name="FILE_NAME" /> z powodu problemów z serwerem.</translation> <translation id="1506061864768559482">Wyszukiwarka</translation> <translation id="1513352483775369820">Zakładki i historia online</translation> +<translation id="1546112724822176246">Nie widzisz swojego urządzenia? <ph name="BEGIN_LINK" />Skorzystaj z pomocy<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Zaktualizuj Chrome</translation> <translation id="1557201757634521564">Automatycznie wykrywaj kodowanie</translation> <translation id="1568822834048182062">Twoje zakładki, historia, hasła i inne ustawienia będą synchronizowane z kontem Google.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Otwórz w nowej karcie</translation> <translation id="4198229475320555619">Zakładka o rozmiarze <ph name="PAGE_SIZE_STRING" /> została zapisana offline</translation> <translation id="423410644998903704">Aby zezwolić stronie na wykorzystanie uprawnień, Chrome musi je mieć.</translation> -<translation id="424696723690217687">Poznawaj strony internetowe z pobliskich obiektów. - -Gdy Twoje urządzenie jest odblokowane, Chrome wyszukuje strony wysyłane przez obiekty w pobliżu. Następnie strony te trafiają do usługi Google, która zwiększa trafność wyników.</translation> <translation id="4254813446494774748">Język tłumaczenia:</translation> <translation id="4256782883801055595">Licencje open source</translation> <translation id="4259722352634471385">Adres zablokowany: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Trwa konfigurowanie…</translation> <translation id="6112702117600201073">Odświeżam stronę</translation> <translation id="6127379762771434464">Element został usunięty</translation> +<translation id="6134870457258083164">Nie widzisz swojego urządzenia? <ph name="BEGIN_LINK1" />Skorzystaj z pomocy<ph name="END_LINK1" /> lub <ph name="BEGIN_LINK2" />wyszukaj ponownie<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Otwórz wersję na urządzenia mobilne</translation> <translation id="6140912465461743537">Kraj/region</translation> <translation id="6159335304067198720">Oszczędność danych: <ph name="PERCENT" /></translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Odśwież</translation> <translation id="7191430249889272776">Karta otwarta w tle.</translation> <translation id="7208788139759694678">Oszczędzanie danych wyłączone</translation> +<translation id="721331389620694978">Niektóre ustawienia, które mogą odzwierciedlać typowe zachowania związane z przeglądaniem stron, nie zostaną wyczyszczone.</translation> <translation id="7243308994586599757">Opcje dostępne u dołu ekranu</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> korzysta z danych o Twojej lokalizacji, by pokazywać wyniki wyszukiwania lokalnego</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Pomoc<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Aby otrzymać nowe licencje, połącz się z internetem i odtwórz pobrane treści.</translation> <translation id="8660471606262461360">Z Google Payments</translation> -<translation id="8675945939500569406">Włączyć internet rzeczy?</translation> <translation id="8676374126336081632">Wyczyść wpisany tekst</translation> <translation id="869891660844655955">Data wygaśnięcia</translation> <translation id="8699799819461268362">Filtr Google SafeSites</translation> <translation id="8701537995684343047">Otwórz zakładkę, by zapisać ją offline</translation> <translation id="8719023831149562936">Nie można przesłać bieżącej karty</translation> <translation id="8725066075913043281">Spróbuj ponownie</translation> -<translation id="8727142376512517020">Nie pokazuj ponownie</translation> <translation id="8730621377337864115">Gotowe</translation> <translation id="8737542153238017984">Zapisana strona nie jest dostępna w trybie offline. Pamięć jest prawie pełna.</translation> <translation id="8793430725658173476">Kopiuj URL</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb index 6994b5b..1b86ed0 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Falha no download do arquivo <ph name="FILE_NAME" /> devido a problemas de servidor.</translation> <translation id="1506061864768559482">Mecanismo de pesquisa</translation> <translation id="1513352483775369820">Favoritos e histórico da Web</translation> +<translation id="1546112724822176246">Não está vendo seu dispositivo? <ph name="BEGIN_LINK" />Receba ajuda<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Atualizar o Google Chrome</translation> <translation id="1557201757634521564">Detectar codificação automaticamente</translation> <translation id="1568822834048182062">Seus favoritos, histórico, senhas e outras configurações serão sincronizados com sua Conta do Google.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Abrir em uma nova guia</translation> <translation id="4198229475320555619">Favorito de <ph name="PAGE_SIZE_STRING" /> salvo off-line</translation> <translation id="423410644998903704">O Chrome precisa ter acesso às permissões para compartilhá-las com este site.</translation> -<translation id="424696723690217687">Descubra páginas da Web enviadas por objetos próximos. - -O Chrome verificará páginas nas proximidades quando o dispositivo estiver desbloqueado. Essas páginas passarão por um serviço do Google para melhorar a qualidade dos resultados de página.</translation> <translation id="4254813446494774748">Idioma de tradução:</translation> <translation id="4256782883801055595">Licenças de código aberto</translation> <translation id="4259722352634471385">A Navegação GPS está bloqueada: <ph name="URL" /></translation> @@ -372,6 +370,7 @@ <translation id="6108923351542677676">Configuração em andamento...</translation> <translation id="6112702117600201073">Atualizando página</translation> <translation id="6127379762771434464">Item removido</translation> +<translation id="6134870457258083164">Não está vendo seu dispositivo? <ph name="BEGIN_LINK1" />Receba ajuda<ph name="END_LINK1" /> ou <ph name="BEGIN_LINK2" />procure novamente<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Tornar a página otimizada para dispositivos móveis</translation> <translation id="6140912465461743537">País/região</translation> <translation id="6159335304067198720">Economia de dados de <ph name="PERCENT" /></translation> @@ -458,6 +457,7 @@ <translation id="7180611975245234373">Atualizar</translation> <translation id="7191430249889272776">Guia aberta no plano de fundo.</translation> <translation id="7208788139759694678">Economia de dados desativada</translation> +<translation id="721331389620694978">Algumas configurações que podem refletir os hábitos de navegação não serão limpas.</translation> <translation id="7243308994586599757">Opções disponíveis perto da parte inferior da tela</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> usa sua localização para mostrar resultados de pesquisa locais</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Ajuda<ph name="END_LINK" /></translation> @@ -563,14 +563,12 @@ <translation id="862875433388403934">Conteúdo (filmes, música, etc.) baixado em outros aplicativos pode não ser cobrado até que esses aplicativos readquiram licenças baseadas em uma nova credencial do dispositivo. Para receber novas licenças, conecte-se à Internet e use seu conteúdo baixado.</translation> <translation id="8660471606262461360">Do Google Payments</translation> -<translation id="8675945939500569406">Ativar a Web física?</translation> <translation id="8676374126336081632">Limpar entrada</translation> <translation id="869891660844655955">Validade</translation> <translation id="8699799819461268362">Filtro do Google SafeSites</translation> <translation id="8701537995684343047">Visitar favorito para salvar off-line</translation> <translation id="8719023831149562936">Não é possível enviar a guia atual</translation> <translation id="8725066075913043281">Tentar novamente</translation> -<translation id="8727142376512517020">Não mostrar isto novamente</translation> <translation id="8730621377337864115">Concluído</translation> <translation id="8737542153238017984">Página salva não disponível off-line. Armazenamento quase cheio.</translation> <translation id="8793430725658173476">Copiar URL</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb index 952e834..d4a7cb3 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">A transferência de <ph name="FILE_NAME" /> falhou devido a problemas do servidor.</translation> <translation id="1506061864768559482">Motor de pesquisa</translation> <translation id="1513352483775369820">Marcadores e histórico da Web</translation> +<translation id="1546112724822176246">Não vê o seu dispositivo? <ph name="BEGIN_LINK" />Obtenha ajuda<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Atualizar o Chrome</translation> <translation id="1557201757634521564">Deteção automática de codificação</translation> <translation id="1568822834048182062">Os marcadores, o histórico, as palavras-passe e outras definições são sincronizados com a sua Conta Google.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Abrir num novo separador</translation> <translation id="4198229475320555619">Marcador com <ph name="PAGE_SIZE_STRING" /> guardado offline</translation> <translation id="423410644998903704">O Chrome necessita de acesso às autorizações para as partilhar com este site.</translation> -<translation id="424696723690217687">Descobrir páginas Web enviadas por objetos próximos. - -O Chrome procura páginas próximas quando o seu dispositivo está desbloqueado. Estas páginas passam por um serviço Google para melhorar a qualidade dos resultados da página.</translation> <translation id="4254813446494774748">Idioma de tradução:</translation> <translation id="4256782883801055595">Licenças de código aberto</translation> <translation id="4259722352634471385">A navegação está bloqueada: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Configuração em curso…</translation> <translation id="6112702117600201073">A atualizar a página</translation> <translation id="6127379762771434464">Item removido</translation> +<translation id="6134870457258083164">Não vê o seu dispositivo? <ph name="BEGIN_LINK1" />Obtenha ajuda<ph name="END_LINK1" /> ou <ph name="BEGIN_LINK2" />pesquise novamente<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Tornar a página compatível com dispositivos móveis</translation> <translation id="6140912465461743537">País/região</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> de poupança de dados</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Atualizar</translation> <translation id="7191430249889272776">Separador aberto em segundo plano.</translation> <translation id="7208788139759694678">Poupança de dados desativada</translation> +<translation id="721331389620694978">Algumas definições que podem refletir os hábitos de navegação não são limpas.</translation> <translation id="7243308994586599757">Opções disponíveis junto à parte inferior do ecrã</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> utiliza a sua localização para mostrar resultados da pesquisa locais</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Ajuda<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Para obter licenças novas, ligue-se à Internet e reproduza o conteúdo transferido.</translation> <translation id="8660471606262461360">Do Google Payments</translation> -<translation id="8675945939500569406">Ativar a Web física?</translation> <translation id="8676374126336081632">Limpar texto</translation> <translation id="869891660844655955">Data de expiração</translation> <translation id="8699799819461268362">Filtro Google SafeSites</translation> <translation id="8701537995684343047">Aceder ao marcador para guardar offline</translation> <translation id="8719023831149562936">Impossível transmitir o separador atual</translation> <translation id="8725066075913043281">Tentar novamente</translation> -<translation id="8727142376512517020">Não voltar a mostrar</translation> <translation id="8730621377337864115">Concluído</translation> <translation id="8737542153238017984">Página guardada não disponível offline. O armazenamento está quase cheio.</translation> <translation id="8793430725658173476">Copiar URL</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb index 4563a69e..fe307e6 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Descărcarea fișierului <ph name="FILE_NAME" /> nu a reușit din cauza unor probleme de server.</translation> <translation id="1506061864768559482">Motor de căutare</translation> <translation id="1513352483775369820">Marcaje și istoric web</translation> +<translation id="1546112724822176246">Dispozitivul nu apare? <ph name="BEGIN_LINK" />Obține ajutor<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Actualizează Chrome</translation> <translation id="1557201757634521564">Detectează automat codificarea</translation> <translation id="1568822834048182062">Marcajele, istoricul, parolele și alte setări vor fi sincronizate cu Contul Google.</translation> @@ -71,7 +72,7 @@ <translation id="1943432128510653496">Parole salvate</translation> <translation id="1944384637046898011">Criptează toate datele folosind parola Google din data de <ph name="TIME" /></translation> <translation id="1966710179511230534">Actualizați detaliile de conectare.</translation> -<translation id="1974060860693918893">Avansat</translation> +<translation id="1974060860693918893">Avansate</translation> <translation id="1984937141057606926">Permise, cu excepția celor terță parte</translation> <translation id="1987317783729300807">Conturi</translation> <translation id="1994173015038366702">Adresa URL a site-ului</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Deschide în filă nouă</translation> <translation id="4198229475320555619">Un marcaj de <ph name="PAGE_SIZE_STRING" /> a fost salvat offline</translation> <translation id="423410644998903704">Chrome are nevoie de acces la permisiuni pentru a-l acorda acestui site.</translation> -<translation id="424696723690217687">Descoperă paginile web trimise de obiectele din apropiere. - -Chrome va căuta pagini din apropiere când dispozitivul este deblocat. Aceste pagini vor fi procesate de un serviciu Google pentru a îmbunătăți calitatea rezultatelor cu pagini.</translation> <translation id="4254813446494774748">Limba traducerii:</translation> <translation id="4256782883801055595">Licențe open source</translation> <translation id="4259722352634471385">Navigarea este blocată: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Configurare în curs...</translation> <translation id="6112702117600201073">Se actualizează pagina</translation> <translation id="6127379762771434464">Elementul a fost eliminat</translation> +<translation id="6134870457258083164">Dispozitivul nu apare? <ph name="BEGIN_LINK1" />Obține ajutor<ph name="END_LINK1" /> sau <ph name="BEGIN_LINK2" />caută din nou<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Fă pagina adecvată pentru mobil</translation> <translation id="6140912465461743537">Țară/Regiune</translation> <translation id="6159335304067198720">Economie de date de <ph name="PERCENT" /></translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Actualizați</translation> <translation id="7191430249889272776">A fost deschisă o filă în fundal.</translation> <translation id="7208788139759694678">Economizorul de date este dezactivat</translation> +<translation id="721331389620694978">Unele setări care pot reflecta obiceiurile tale de navigare nu vor fi șterse.</translation> <translation id="7243308994586599757">Opțiuni disponibile în partea de jos a ecranului</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> folosește locația ta pentru a afișa rezultate locale ale căutării</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Ajutor<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Pentru licențe noi, conectează-te la internet și redă conținutul descărcat.</translation> <translation id="8660471606262461360">Din Google Payments</translation> -<translation id="8675945939500569406">Activezi Webul material?</translation> <translation id="8676374126336081632">Șterge textul introdus</translation> <translation id="869891660844655955">Dată de expirare</translation> <translation id="8699799819461268362">Filtrul Google SafeSites</translation> <translation id="8701537995684343047">Accesează marcajul pentru a-l salva offline</translation> <translation id="8719023831149562936">Fila actuală nu poate fi transmisă</translation> <translation id="8725066075913043281">Încearcă din nou</translation> -<translation id="8727142376512517020">Nu mai afișa acest mesaj</translation> <translation id="8730621377337864115">Terminat</translation> <translation id="8737542153238017984">Pagina salvată nu este disponibilă offline. Spațiu de stocare aproape plin.</translation> <translation id="8793430725658173476">Copiază adresa URL</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb index 06d0bc9..f595e8274 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Не удалось скачать файл <ph name="FILE_NAME" /> из-за неполадок на сервере.</translation> <translation id="1506061864768559482">Поисковая система</translation> <translation id="1513352483775369820">Закладки и история поиска</translation> +<translation id="1546112724822176246">Не можете найти свое устройство? <ph name="BEGIN_LINK" />Узнайте<ph name="END_LINK" />, как это исправить.</translation> <translation id="1553358976309200471">Обновить Chrome</translation> <translation id="1557201757634521564">Определять кодировку</translation> <translation id="1568822834048182062">Ваши закладки, история, пароли и другие настройки синхронизируются с аккаунтом Google.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Открыть в новой вкладке</translation> <translation id="4198229475320555619">Размер сохраненной закладки: <ph name="PAGE_SIZE_STRING" /></translation> <translation id="423410644998903704">Предоставьте браузеру Chrome разрешения, чтобы продолжить работу на этом сайте.</translation> -<translation id="424696723690217687">Просматривайте веб-страницы, связанные с объектами вокруг вас. - -Chrome будет искать их, когда ваше устройство разблокировано. Чтобы улучшить работу функции, страницы будут отправляться через сервис Google.</translation> <translation id="4254813446494774748">Перевести на:</translation> <translation id="4256782883801055595">Лицензии на ПО с открытым кодом</translation> <translation id="4259722352634471385">Навигация заблокирована: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Настройка…</translation> <translation id="6112702117600201073">Обновление страницы</translation> <translation id="6127379762771434464">Быстрая ссылка удалена</translation> +<translation id="6134870457258083164">Не можете найти свое устройство? <ph name="BEGIN_LINK1" />Узнайте<ph name="END_LINK1" />, как это исправить, или запустите поиск <ph name="BEGIN_LINK2" />ещё раз<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Адаптировать страницу для мобильных устройств</translation> <translation id="6140912465461743537">Страна/регион</translation> <translation id="6159335304067198720">Сжатие данных: <ph name="PERCENT" /></translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Обновить</translation> <translation id="7191430249889272776">Вкладка открыта в фоновом режиме</translation> <translation id="7208788139759694678">Расширение "Экономия трафика" отключено</translation> +<translation id="721331389620694978">Некоторые данные о работе в Интернете не будут удалены.</translation> <translation id="7243308994586599757">Доступные параметры указаны в нижней части экрана</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> использует ваше местоположение, чтобы показывать результаты поиска по адресам.</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Справка<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Чтобы получить новые лицензии, подключитесь к Интернету и воспроизведите скачанный контент.</translation> <translation id="8660471606262461360">Из Google Payments</translation> -<translation id="8675945939500569406">Включить Интернет вокруг нас?</translation> <translation id="8676374126336081632">Очистить</translation> <translation id="869891660844655955">Срок действия</translation> <translation id="8699799819461268362">Безопасный поиск</translation> <translation id="8701537995684343047">Посетите сайт, чтобы сохранить закладку в офлайн-режиме</translation> <translation id="8719023831149562936">Не удалось передать текущую вкладку</translation> <translation id="8725066075913043281">Повторить попытку</translation> -<translation id="8727142376512517020">Больше не показывать</translation> <translation id="8730621377337864115">Готово</translation> <translation id="8737542153238017984">Страница недоступна в офлайн-режиме: свободное пространство заканчивается.</translation> <translation id="8793430725658173476">Копировать URL</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb index 6fb94c87..0093b51 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Súbor <ph name="FILE_NAME" /> sa nepodarilo stiahnuť z dôvodu problémov so serverom.</translation> <translation id="1506061864768559482">Vyhľadávač</translation> <translation id="1513352483775369820">Záložky a webová história</translation> +<translation id="1546112724822176246">Nezobrazuje sa vaše zariadenie? <ph name="BEGIN_LINK" />Získať pomoc<ph name="END_LINK" /></translation> <translation id="1553358976309200471">Aktualizovať Chrome</translation> <translation id="1557201757634521564">Automaticky rozpoznávať kódovanie</translation> <translation id="1568822834048182062">Vaše záložky, história, heslá a ďalšie nastavenia budú synchronizované s účtom Google.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Otvoriť na novej karte</translation> <translation id="4198229475320555619">Veľkosť záložky uloženej offline: <ph name="PAGE_SIZE_STRING" /></translation> <translation id="423410644998903704">Na to, aby Chrome mohol s týmito webovými stránkami zdieľať povolenia, musí mať k ním prístup.</translation> -<translation id="424696723690217687">Objavujte webové stránky odosielané objektmi v okolí. - -Keď bude vaše zariadenie odomknuté, Chrome bude vyhľadávať stránky z okolia. Tieto stránky budú s cieľom zlepšenia kvality spracovávané službou Google.</translation> <translation id="4254813446494774748">Jazyk prekladu:</translation> <translation id="4256782883801055595">Licencie open source</translation> <translation id="4259722352634471385">Navigácia je zablokovaná: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Inštaluje sa...</translation> <translation id="6112702117600201073">Obnovenie stránky</translation> <translation id="6127379762771434464">Položka bola odstránená</translation> +<translation id="6134870457258083164">Nezobrazuje sa vaše zariadenie? <ph name="BEGIN_LINK1" />Získajte pomoc<ph name="END_LINK1" /> alebo <ph name="BEGIN_LINK2" />spustite znova vyhľadávanie<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Upravte stránku, aby bola vhodná pre mobilné zariadenia</translation> <translation id="6140912465461743537">Krajina alebo oblasť</translation> <translation id="6159335304067198720">Úspora dát: <ph name="PERCENT" /></translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Obnoviť</translation> <translation id="7191430249889272776">Karta je otvorená na pozadí.</translation> <translation id="7208788139759694678">Šetrič dát je vypnutý</translation> +<translation id="721331389620694978">Niektoré nastavenia, ktoré môžu odzrkadľovať návyky pri prehliadaní, nebudú vymazané.</translation> <translation id="7243308994586599757">Možnosti sú k dispozícii v dolnej časti obrazovky</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> používa vašu polohu na zobrazovanie miestnych výsledkov vyhľadávania.</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Pomocník<ph name="END_LINK" /></translation> @@ -563,14 +563,12 @@ <translation id="8627706565932943526">Chyba synchronizácie</translation> <translation id="862875433388403934">Obsah (filmy, hudba atď.) stiahnutý v iných aplikáciách sa nemusí dať prehrať, pokiaľ aplikácie opätovne nezískajú licencie na základe nových poverení zariadenia. Ak chcete získať nové licencie, pripojte sa k internetu a prehrajte stiahnutý obsah.</translation> <translation id="8660471606262461360">Zo služby Google Payments</translation> -<translation id="8675945939500569406">Chcete zapnúť Fyzický web?</translation> <translation id="8676374126336081632">Vymazať vstup</translation> <translation id="869891660844655955">Koniec platnosti</translation> <translation id="8699799819461268362">Filter Google SafeSites</translation> <translation id="8701537995684343047">Ak chcete záložku uložiť offline, najskôr na ňu prejdite</translation> <translation id="8719023831149562936">Aktuálna karta sa nedá preniesť</translation> <translation id="8725066075913043281">Skúsiť znova</translation> -<translation id="8727142376512517020">Viac nezobrazovať</translation> <translation id="8730621377337864115">Hotovo</translation> <translation id="8737542153238017984">Uložené stránka nie je k dispozícii v režime offline. Úložisko je takmer plné.</translation> <translation id="8793430725658173476">Kopírovať webovú adresu</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb index 622cbf1..58d34bc 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Prenos datoteke <ph name="FILE_NAME" /> ni uspel zaradi težav s strežnikom.</translation> <translation id="1506061864768559482">Iskalnik</translation> <translation id="1513352483775369820">Zaznamki in spletna zgodovina</translation> +<translation id="1546112724822176246">Vaša naprava ni prikazana? <ph name="BEGIN_LINK" />Poiščite pomoč<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Posodobi Chrome</translation> <translation id="1557201757634521564">Samodejno zaznavanje kodiranja</translation> <translation id="1568822834048182062">Vaši zaznamki, zgodovina, gesla in druge nastavitve bodo sinhronizirani z Google Računom.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Odpri v novem zavihku</translation> <translation id="4198229475320555619">Zaznamek velikosti <ph name="PAGE_SIZE_STRING" /> je shranjen za uporabo brez povezave</translation> <translation id="423410644998903704">Chrome potrebuje dostop do dovoljenj, če želite, da temu spletnemu mestu omogoči dostop do njih.</translation> -<translation id="424696723690217687">Odkrivanje spletnih strani, ki jih pošljejo predmeti v bližini. - -Ko je naprava odklenjena, bo Chrome iskal strani v bližini. Te strani bo zaradi izboljšanja kakovosti rezultatov iskanja strani obdelala Googlova storitev.</translation> <translation id="4254813446494774748">Jezik prevoda:</translation> <translation id="4256782883801055595">Odprtokodne licence</translation> <translation id="4259722352634471385">Krmarjenje je blokirano: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Poteka nastavitev …</translation> <translation id="6112702117600201073">Osveževanje strani</translation> <translation id="6127379762771434464">Element odstranjen</translation> +<translation id="6134870457258083164">Vaša naprava ni prikazana? <ph name="BEGIN_LINK1" />Poiščite pomoč<ph name="END_LINK1" /> ali <ph name="BEGIN_LINK2" />iščite znova<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Prikaži stran v pogledu, prilagojenem mobilnim napravam</translation> <translation id="6140912465461743537">Država/regija</translation> <translation id="6159335304067198720">Prihranek pri prenosu podatkov: <ph name="PERCENT" /></translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Osveži</translation> <translation id="7191430249889272776">Zavihek se je odprl v ozadju.</translation> <translation id="7208788139759694678">Varčevanje s podatki je onemogočeno</translation> +<translation id="721331389620694978">Nekatere nastavitve, ki morda odražajo brskalne navade, ne bodo izbrisane.</translation> <translation id="7243308994586599757">Možnosti so na voljo pri dnu zaslona</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> uporablja vašo lokacijo za prikaz lokalnih rezultatov iskanja</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Pomoč<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Nove licence dobite tako, da se povežete v internet in predvajate preneseno vsebino.</translation> <translation id="8660471606262461360">Iz storitve Google Payments</translation> -<translation id="8675945939500569406">Želite vklopiti Fizični splet?</translation> <translation id="8676374126336081632">Izbriši vnos</translation> <translation id="869891660844655955">Datum izteka</translation> <translation id="8699799819461268362">Googlov filter SafeSites</translation> <translation id="8701537995684343047">Odprite zaznamek, če ga želite shraniti za uporabo brez povezave</translation> <translation id="8719023831149562936">Trenutnega zavihka ni mogoče prenesti</translation> <translation id="8725066075913043281">Poskusite znova</translation> -<translation id="8727142376512517020">Ne prikaži več tega</translation> <translation id="8730621377337864115">Končano</translation> <translation id="8737542153238017984">Shranjena stran ni na voljo brez povezave. Shramba je skoraj polna.</translation> <translation id="8793430725658173476">Kopiraj URL</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb index ffcc4b7..8f70618 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Преузимање датотеке <ph name="FILE_NAME" /> није успело због проблема на серверу.</translation> <translation id="1506061864768559482">Претраживач</translation> <translation id="1513352483775369820">Обележивачи и веб-историја</translation> +<translation id="1546112724822176246">Не видите уређај? <ph name="BEGIN_LINK" />Потражите помоћ<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Ажурирај Chrome</translation> <translation id="1557201757634521564">Аутоматски откривај кодирање</translation> <translation id="1568822834048182062">Обележивачи, историја, лозинке и друга подешавања се синхронизују са Google налогом.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Отвори у новој картици</translation> <translation id="4198229475320555619">Сачували сте обележивач од <ph name="PAGE_SIZE_STRING" /> офлајн</translation> <translation id="423410644998903704">Chrome-у је потребан приступ за дозволе да би их делио са овим сајтом.</translation> -<translation id="424696723690217687">Откријте веб-странице које шаљу објекти у околини. - -Chrome скенира странице у близини када је уређај откључан. Те странице се шаљу Google услузи да би се побољшао квалитет резултата за странице.</translation> <translation id="4254813446494774748">Језик на који се преводи:</translation> <translation id="4256782883801055595">Лиценце отвореног кода</translation> <translation id="4259722352634471385">Навигација је блокирана: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Подешавање је у току...</translation> <translation id="6112702117600201073">Освежавање странице</translation> <translation id="6127379762771434464">Уклонили сте ставку</translation> +<translation id="6134870457258083164">Не видите уређај? <ph name="BEGIN_LINK1" />Потражите помоћ<ph name="END_LINK1" /> или <ph name="BEGIN_LINK2" />претражите поново<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Прилагодите страницу мобилним уређајима</translation> <translation id="6140912465461743537">Земља/регија</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> уштеде података</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Освежи</translation> <translation id="7191430249889272776">Картица је отворена у позадини.</translation> <translation id="7208788139759694678">Уштеда података је онемогућена</translation> +<translation id="721331389620694978">Нека подешавања која можда одражавају навике прегледања неће бити обрисана.</translation> <translation id="7243308994586599757">Опције су доступне у дну екрана</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> користи локацију да би приказао локалне резултате претраге</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Помоћ<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Да бисте добили нове лиценце, повежите се на интернет и пустите преузети садржај.</translation> <translation id="8660471606262461360">Од Google Payments-а</translation> -<translation id="8675945939500569406">Желите ли да укључите Интернет око нас?</translation> <translation id="8676374126336081632">Обриши унос</translation> <translation id="869891660844655955">Датум истека</translation> <translation id="8699799819461268362">Филтрирање на основу Google листе безбедних сајтова</translation> <translation id="8701537995684343047">Посетите обележену страницу да бисте је сачували офлајн</translation> <translation id="8719023831149562936">Није могуће пребацити актуелну картицу</translation> <translation id="8725066075913043281">Покушајте поново</translation> -<translation id="8727142376512517020">Не приказуј ово поново</translation> <translation id="8730621377337864115">Готово</translation> <translation id="8737542153238017984">Сачувана страница није доступна офлајн. Меморијски простор је скоро пун.</translation> <translation id="8793430725658173476">Копирај URL</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb index b6700ef..59b90e9b 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Det gick inte att ladda ned <ph name="FILE_NAME" /> på grund av serverfel.</translation> <translation id="1506061864768559482">Sökmotor</translation> <translation id="1513352483775369820">Bokmärken och webbhistorik</translation> +<translation id="1546112724822176246">Visas inte enheten? <ph name="BEGIN_LINK" />Få hjälp<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Uppdatera Chrome</translation> <translation id="1557201757634521564">Identifiera teckenkodning automatiskt</translation> <translation id="1568822834048182062">Bokmärken, historik, lösenord och andra inställningar synkroniseras till ditt Google-konto.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Öppna i ny flik</translation> <translation id="4198229475320555619">Ett bokmärke på <ph name="PAGE_SIZE_STRING" /> har sparats offline</translation> <translation id="423410644998903704">Chrome behöver tillgång till behörigheter för att kunna dela dem på den här webbplatsen.</translation> -<translation id="424696723690217687">Upptäck webbsidor som har skickats av objekt i närheten. - -Chrome söker efter sidor i närheten när enheten är olåst. Sidorna skickas via en tjänst från Google för att förbättra kvaliteten på sidresultaten.</translation> <translation id="4254813446494774748">Översättningsspråk:</translation> <translation id="4256782883801055595">Licenser för öppen källkod</translation> <translation id="4259722352634471385">Webbadressen har blockerats: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Konfigurationen pågår ...</translation> <translation id="6112702117600201073">Uppdaterar sidan</translation> <translation id="6127379762771434464">Objektet har tagits bort</translation> +<translation id="6134870457258083164">Visas inte enheten? <ph name="BEGIN_LINK1" />Få hjälp<ph name="END_LINK1" /> eller <ph name="BEGIN_LINK2" />sök igen<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Mobilanpassa sidan</translation> <translation id="6140912465461743537">Land/region</translation> <translation id="6159335304067198720">Sparat utrymme: <ph name="PERCENT" /></translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Uppdatera</translation> <translation id="7191430249889272776">Fliken öppnades i bakgrunden.</translation> <translation id="7208788139759694678">Databesparing har inaktiverats</translation> +<translation id="721331389620694978">En del inställningar som kan visa surfvanor rensas inte.</translation> <translation id="7243308994586599757">Alternativ visas nära skärmens nedre kant</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> använder din platsinformation för att visa lokala sökresultat</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Hjälp<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Du hämtar nya licenser genom att ansluta till internet och spela upp det nedladdade innehållet.</translation> <translation id="8660471606262461360">Från Google Payments</translation> -<translation id="8675945939500569406">Vill du aktivera den fysiska webben?</translation> <translation id="8676374126336081632">Radera inmatning</translation> <translation id="869891660844655955">Utgångsdatum</translation> <translation id="8699799819461268362">Google SafeSites-filter</translation> <translation id="8701537995684343047">Öppna bokmärket om du vill spara det offline</translation> <translation id="8719023831149562936">Den aktuella fliken kan inte överföras</translation> <translation id="8725066075913043281">Försök igen</translation> -<translation id="8727142376512517020">Visa inte det här igen</translation> <translation id="8730621377337864115">Klart</translation> <translation id="8737542153238017984">Sidan som sparades är inte tillgänglig offline. Lagringsutrymmet är nästan fullt.</translation> <translation id="8793430725658173476">Kopiera webbadress</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb index 76d3f8e..456a985 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Kipakuliwa cha <ph name="FILE_NAME" /> hakijafaulu kwa sababu ya matatizo ya seva.</translation> <translation id="1506061864768559482">Mtambo wa utafutaji</translation> <translation id="1513352483775369820">Alamisho na historia ya wavuti</translation> +<translation id="1546112724822176246">Je, huoni kifaa chako? <ph name="BEGIN_LINK" />Pata usaidizi<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Sasisha Chrome</translation> <translation id="1557201757634521564">Gundua usimbaji fiche kiotomatiki</translation> <translation id="1568822834048182062">Alamisho, historia, manenosiri, na mipangilio yako mingine itasawazishwa pamoja na Akaunti yako ya Google.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Fungua katika kichupo kipya</translation> <translation id="4198229475320555619">Alamisho ya ukubwa wa <ph name="PAGE_SIZE_STRING" /> imehifadhiwa nje ya mtandao</translation> <translation id="423410644998903704">Chrome inahitaji idhini ya kufikia ruhusa ili izishiriki na tovuti hii.</translation> -<translation id="424696723690217687">Gundua kurasa za wavuti zilizotumwa na vifaa vilivyo karibu. - -Chrome itachanganua kurasa zilizo karibu kifaa chako kitakapofunguliwa. Kurasa hizi zitapitia huduma ya Google ili kuimarisha ubora wa matokeo ya ukurasa.</translation> <translation id="4254813446494774748">Lugha ya Tafsiri:</translation> <translation id="4256782883801055595">Leseni za programu huria</translation> <translation id="4259722352634471385">Kudurusu kumezuiwa: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Usanidi unaendelea...</translation> <translation id="6112702117600201073">Inaonyesha upya ukurasa</translation> <translation id="6127379762771434464">Kipengee kimeondolewa</translation> +<translation id="6134870457258083164">Je, huoni kifaa chako? <ph name="BEGIN_LINK1" />Pata usaidizi<ph name="END_LINK1" /> au <ph name="BEGIN_LINK2" />utafute tena<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Fanya ukurasa usomeke vizuri kwenye kifaa cha mkononi</translation> <translation id="6140912465461743537">Nchi/Eneo</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> ya data imeokolewa</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Onyesha upya</translation> <translation id="7191430249889272776">Kichupo kimefunguliwa chini chini.</translation> <translation id="7208788139759694678">Kiokoa Data kimezimwa</translation> +<translation id="721331389620694978">Baadhi ya mipangilio ambayo inaweza kuonyesha tabia ya kuvinjari haitafutwa.</translation> <translation id="7243308994586599757">Chaguo zinapatikana karibu na sehemu ya chini ya skrini</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> hutumia mahali ulipo ili kuonyesha matokeo ya utafutaji wa karibu</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Usaidizi<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Ili kupata leseni mpya, unganisha kwenye intaneti na ucheze maudhui yako yaliyopakuliwa.</translation> <translation id="8660471606262461360">Kutoka Google Payments</translation> -<translation id="8675945939500569406">Ungependa kuwasha Wavuti kila Mahali?</translation> <translation id="8676374126336081632">Futa uingizaji wa maandishi</translation> <translation id="869891660844655955">Muda wake unakwisha tarehe</translation> <translation id="8699799819461268362">Kichujio cha Google SafeSites</translation> <translation id="8701537995684343047">Tembelea alamisho ili uhifadhi nje ya mtandao</translation> <translation id="8719023831149562936">Haiwezi kusambaza kichupo cha sasa</translation> <translation id="8725066075913043281">Jaribu tena</translation> -<translation id="8727142376512517020">Usionyeshe hii tena</translation> <translation id="8730621377337864115">Nimemaliza</translation> <translation id="8737542153238017984">Ukurasa uliohifadhiwa haupatikani nje ya mtandao. Hifadhi inakaribia kujaa.</translation> <translation id="8793430725658173476">Nakili url</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb index 7aff780a..7df03e0 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">การดาวน์โหลด <ph name="FILE_NAME" /> ล้มเหลวเพราะเซิร์ฟเวอร์มีปัญหา</translation> <translation id="1506061864768559482">เครื่องมือค้นหา</translation> <translation id="1513352483775369820">บุ๊กมาร์กและประวัติเว็บ</translation> +<translation id="1546112724822176246">หากไม่เห็นอุปกรณ์ของคุณ โปรด<ph name="BEGIN_LINK" />ขอความช่วยเหลือ<ph name="END_LINK" /></translation> <translation id="1553358976309200471">อัปเดต Chrome</translation> <translation id="1557201757634521564">ตรวจหาการเข้ารหัสโดยอัตโนมัติ</translation> <translation id="1568822834048182062">บุ๊กมาร์ก ประวัติการเข้าชม รหัสผ่าน และการตั้งค่าอื่นๆ ของคุณจะได้รับการซิงค์กับบัญชี Google ของคุณ</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">เปิดในแท็บใหม่</translation> <translation id="4198229475320555619">บันทึกบุ๊กมาร์กแบบออฟไลน์แล้ว <ph name="PAGE_SIZE_STRING" /></translation> <translation id="423410644998903704">Chrome ต้องการเข้าถึงสิทธิ์เพื่อแชร์กับเว็บไซต์นี้</translation> -<translation id="424696723690217687">ค้นหาหน้าเว็บที่ส่งมาจากออบเจ็กต์ใกล้เคียง - -Chrome จะสแกนหาหน้าที่อยู่ใกล้เคียงเมื่ออุปกรณ์ของคุณไม่ได้ล็อก โดยจะส่งหน้าเหล่านี้ผ่านบริการของ Google เพื่อปรับปรุงคุณภาพผลการค้นหาหน้า</translation> <translation id="4254813446494774748">ภาษาที่แปล:</translation> <translation id="4256782883801055595">ใบอนุญาตโอเพนซอร์ส</translation> <translation id="4259722352634471385">มีการบล็อกการนำทาง: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">กำลังดำเนินการตั้งค่า…</translation> <translation id="6112702117600201073">กำลังรีเฟรชหน้า</translation> <translation id="6127379762771434464">นำรายการออกแล้ว</translation> +<translation id="6134870457258083164">หากไม่เห็นอุปกรณ์ของคุณ โปรด<ph name="BEGIN_LINK1" />ขอความช่วยเหลือ<ph name="END_LINK1" />หรือ<ph name="BEGIN_LINK2" />ค้นหาอีกครั้ง<ph name="END_LINK2" /></translation> <translation id="6138140242378429169">ทำให้หน้าเหมาะกับอุปกรณ์เคลื่อนที่</translation> <translation id="6140912465461743537">ประเทศ/ภูมิภาค</translation> <translation id="6159335304067198720">ประหยัดอินเทอร์เน็ต <ph name="PERCENT" /></translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">รีเฟรช</translation> <translation id="7191430249889272776">แท็บเปิดในพื้นหลัง</translation> <translation id="7208788139759694678">ปิดใช้โปรแกรมประหยัดอินเทอร์เน็ต</translation> +<translation id="721331389620694978">ระบบจะไม่ล้างการตั้งค่าบางอย่างที่อาจส่งผลถึงพฤติกรรมการเรียกดู</translation> <translation id="7243308994586599757">มีตัวเลือกอยู่ทางด้านล่างของหน้าจอ</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> ใช้ตำแหน่งเพื่อแสดงผลการค้นหาในท้องถิ่น</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />ความช่วยเหลือ<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ ในการรับใบอนุญาตใหม่ ให้เชื่อมต่ออินเทอร์เน็ตและเล่นเนื้อหาที่ดาวน์โหลดไว้ของคุณ</translation> <translation id="8660471606262461360">จาก Google Payments</translation> -<translation id="8675945939500569406">ต้องการเปิด Physical Web ไหม</translation> <translation id="8676374126336081632">ล้างข้อมูลที่ป้อน</translation> <translation id="869891660844655955">วันหมดอายุ</translation> <translation id="8699799819461268362">ตัวกรอง Google SafeSites</translation> <translation id="8701537995684343047">ไปที่บุ๊กมาร์กเพื่อบันทึกแบบออฟไลน์</translation> <translation id="8719023831149562936">ไม่สามารถบีมแท็บปัจจุบัน</translation> <translation id="8725066075913043281">ลองอีกครั้ง</translation> -<translation id="8727142376512517020">ไม่ต้องแสดงข้อความนี้อีก</translation> <translation id="8730621377337864115">เสร็จสิ้น</translation> <translation id="8737542153238017984">หน้าที่บันทึกไว้ไม่พร้อมใช้งานแบบออฟไลน์ พื้นที่เก็บข้อมูลใกล้เต็มแล้ว</translation> <translation id="8793430725658173476">คัดลอก URL</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb index 9c06438..a28283c 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Sunucu sorunları nedeniyle <ph name="FILE_NAME" /> dosyası indirilemedi.</translation> <translation id="1506061864768559482">Arama motoru</translation> <translation id="1513352483775369820">Yer işaretleri ve web geçmişi</translation> +<translation id="1546112724822176246">Cihazınızı görmüyor musunuz? <ph name="BEGIN_LINK" />Yardım alın<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Chrome'u güncelle</translation> <translation id="1557201757634521564">Kodlamayı otomatik olarak algıla</translation> <translation id="1568822834048182062">Yer işaretleriniz, geçmişiniz, şifreleriniz ve diğer ayarlarınız Google Hesabınızla senkronize edilecek.</translation> @@ -197,7 +198,7 @@ <translation id="3988213473815854515">Konuma izin veriliyor</translation> <translation id="3992315671621218278">Bağlantıyı kaydet</translation> <translation id="4002066346123236978">Başlık</translation> -<translation id="4035611068038188272">Yer işaretleri geçerli olarak <ph name="TOTAL_OFFLINE_STORAGE_SIZE" /> yer kaplıyor.</translation> +<translation id="4035611068038188272">Yer işaretleri şu anda <ph name="TOTAL_OFFLINE_STORAGE_SIZE" /> yer kaplıyor.</translation> <translation id="4042870126885713738">Bir web adresi çözümlenemezse veya bağlantı yapılamazsa öneriler göster</translation> <translation id="4056223980640387499">Sepya Tonu</translation> <translation id="4059119910594077751">Tam ekrandan çıkmak için geri düğmesine dokunun.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Yeni sekmede aç</translation> <translation id="4198229475320555619"><ph name="PAGE_SIZE_STRING" /> boyutunda yer işareti çevrimdışı olarak kaydedildi</translation> <translation id="423410644998903704">Chrome'un bu siteyle paylaşımda bulunabilmesi için izin erişimine ihtiyacı var.</translation> -<translation id="424696723690217687">Yakındaki nesneler tarafından gönderilen web sayfalarını keşfedin. - -Cihazınız kiliti olmadığında Chrome yakındaki sayfaları tarar. Bu sayfalar, sayfa sonuçlarının kalitesini iyileştirmek amacıyla bir Google hizmeti üzerinden gönderilir.</translation> <translation id="4254813446494774748">Çeviri Dili:</translation> <translation id="4256782883801055595">Açık kaynak lisansları</translation> <translation id="4259722352634471385">Gezinme engellendi: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Kurulum devam ediyor…</translation> <translation id="6112702117600201073">Sayfa yenileniyor</translation> <translation id="6127379762771434464">Öğe kaldırıldı</translation> +<translation id="6134870457258083164">Cihazınızı görmüyor musunuz? <ph name="BEGIN_LINK1" />Yardım alın<ph name="END_LINK1" /> veya <ph name="BEGIN_LINK2" />tekrar arayın<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Sayfayı mobil uyumlu hale getir</translation> <translation id="6140912465461743537">Ülke/Bölge</translation> <translation id="6159335304067198720"><ph name="PERCENT" /> veri tasarrufu</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Yenile</translation> <translation id="7191430249889272776">Sekme arka planda açıldı.</translation> <translation id="7208788139759694678">Veri Tasarrufu devre dışı bırakıldı</translation> +<translation id="721331389620694978">Göz atma alışkanlıklarını yansıtabilecek bazı ayarlar temizlenmeyecek.</translation> <translation id="7243308994586599757">Sayfanın altına yakın bir yerde kullanılabilen seçenekler</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" />, yerel arama sonuçlarını göstermek için konumunuzu kullanır</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Yardım<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Yeni lisansları edinmek için İnternet'e bağlanın ve indirdiğiniz içeriği oynatın.</translation> <translation id="8660471606262461360">Google Payments'tan</translation> -<translation id="8675945939500569406">Fiziksel Web açılsın mı?</translation> <translation id="8676374126336081632">Girişi temizle</translation> <translation id="869891660844655955">Son kullanma tarihi</translation> <translation id="8699799819461268362">Google SafeSites filtresi</translation> <translation id="8701537995684343047">Çevrimdışı olarak kaydetmek için yer işaretini ziyaret edin</translation> <translation id="8719023831149562936">Geçerli sekme ışınlanamıyor</translation> <translation id="8725066075913043281">Yeniden dene</translation> -<translation id="8727142376512517020">Bu iletiyi tekrar gösterme</translation> <translation id="8730621377337864115">Bitti</translation> <translation id="8737542153238017984">Kaydedilen sayfa çevrimdışı olarak kullanılamıyor. Depolama alanı neredeyse dolu.</translation> <translation id="8793430725658173476">URL'yi kopyala</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb b/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb index fb3a2bb6..42813308 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Файл <ph name="FILE_NAME" /> не завантажено через проблеми із сервером.</translation> <translation id="1506061864768559482">Пошукова система</translation> <translation id="1513352483775369820">Закладки й історія веб-пошуку</translation> +<translation id="1546112724822176246">Не бачите свого пристрою? <ph name="BEGIN_LINK" />Перегляньте довідку<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Оновити Chrome</translation> <translation id="1557201757634521564">Автоматично визначати кодування</translation> <translation id="1568822834048182062">Ваші закладки, історія, паролі й інші налаштування синхронізуватимуться з обліковим записом Google.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Відкрити в новій вкладці</translation> <translation id="4198229475320555619">Закладку обсягом <ph name="PAGE_SIZE_STRING" /> збережено офлайн</translation> <translation id="423410644998903704">Chrome потрібен доступ до дозволів, щоб дозволити цьому сайту використовувати їх.</translation> -<translation id="424696723690217687">Переглядайте веб-сторінки, які надсилають об’єкти поруч. - -Коли ваш пристрій розблоковано, Chrome шукатиме сторінки, які надсилають об’єкти поруч. Google оброблятиме ці сторінки, щоб покращити якість результатів.</translation> <translation id="4254813446494774748">Мова перекладу:</translation> <translation id="4256782883801055595">Ліцензії ПЗ з відкритим кодом</translation> <translation id="4259722352634471385">Веб-сторінку <ph name="URL" /> заблоковано</translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Виконується налаштування…</translation> <translation id="6112702117600201073">Оновлення сторінки</translation> <translation id="6127379762771434464">Веб-сайт видалено</translation> +<translation id="6134870457258083164">Не бачите свого пристрою? <ph name="BEGIN_LINK1" />Перегляньте довідку<ph name="END_LINK1" /> або <ph name="BEGIN_LINK2" />пошукайте ще раз<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Налаштувати сторінку для мобільних пристроїв</translation> <translation id="6140912465461743537">Країна або регіон</translation> <translation id="6159335304067198720">Заощадження даних: <ph name="PERCENT" /></translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Оновити</translation> <translation id="7191430249889272776">Вкладку відкрито у фоновому режимі.</translation> <translation id="7208788139759694678">Заощадження трафіку вимкнено</translation> +<translation id="721331389620694978">Деякі налаштування, які стосуються ваших зацікавлень в Інтернеті, не буде видалено.</translation> <translation id="7243308994586599757">Опції можна знайти внизу екрана</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> використовує ваші геодані, щоб показувати результати місцевого пошуку</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Довідка<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Щоб отримати нові ліцензії, під’єднайте пристрій до Інтернету та відтворіть завантажений вміст.</translation> <translation id="8660471606262461360">З Google Payments</translation> -<translation id="8675945939500569406">Увімкнути Інтернет навколо нас?</translation> <translation id="8676374126336081632">Видалити введений текст</translation> <translation id="869891660844655955">Діє до</translation> <translation id="8699799819461268362">Фільтр Google SafeSites</translation> <translation id="8701537995684343047">Відкрийте закладку, щоб зберегти її офлайн</translation> <translation id="8719023831149562936">Неможливо передати дані поточної вкладки</translation> <translation id="8725066075913043281">Повторити спробу</translation> -<translation id="8727142376512517020">Більше не показувати</translation> <translation id="8730621377337864115">Готово</translation> <translation id="8737542153238017984">Збережена сторінка недоступна в режимі офлайн. Пам’ять майже заповнена.</translation> <translation id="8793430725658173476">Копіювати URL-адресу</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb index 174c268c..05e3793 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">Tải xuống <ph name="FILE_NAME" /> không thành công do sự cố máy chủ.</translation> <translation id="1506061864768559482">Công cụ tìm kiếm</translation> <translation id="1513352483775369820">Dấu trang và lịch sử web</translation> +<translation id="1546112724822176246">Không thấy thiết bị của bạn? <ph name="BEGIN_LINK" />Nhận trợ giúp<ph name="END_LINK" />.</translation> <translation id="1553358976309200471">Cập nhật Chrome</translation> <translation id="1557201757634521564">Tự động phát hiện mã hóa</translation> <translation id="1568822834048182062">Dấu trang, lịch sử, mật khẩu và các cài đặt khác sẽ được đồng bộ hóa với Tài khoản Google của bạn.</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">Mở bằng tab mới</translation> <translation id="4198229475320555619">Đã lưu dấu trang <ph name="PAGE_SIZE_STRING" /> ngoại tuyến</translation> <translation id="423410644998903704">Chrome cần quyền truy cập quyền để chia sẻ quyền với trang web này.</translation> -<translation id="424696723690217687">Khám phá trang web do đối tượng lân cận gửi. - -Chrome sẽ quét tìm các trang lân cận khi thiết bị của bạn được mở khóa. Các trang này sẽ được chuyển tới một dịch vụ của Google để cải thiện chất lượng của kết quả trang.</translation> <translation id="4254813446494774748">Ngôn ngữ dịch:</translation> <translation id="4256782883801055595">Giấy phép nguồn mở</translation> <translation id="4259722352634471385">Điều hướng bị chặn: <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">Đang thiết lập…</translation> <translation id="6112702117600201073">Làm mới trang</translation> <translation id="6127379762771434464">Đã xóa mục</translation> +<translation id="6134870457258083164">Không thấy thiết bị của bạn? <ph name="BEGIN_LINK1" />Nhận trợ giúp<ph name="END_LINK1" /> hoặc <ph name="BEGIN_LINK2" />tìm kiếm lại<ph name="END_LINK2" />.</translation> <translation id="6138140242378429169">Đặt trang ở chế độ thân thiện với thiết bị di động</translation> <translation id="6140912465461743537">Quốc gia/Vùng</translation> <translation id="6159335304067198720">Tiết kiệm <ph name="PERCENT" /> dữ liệu</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">Làm mới</translation> <translation id="7191430249889272776">Tab được mở dưới nền.</translation> <translation id="7208788139759694678">Đã tắt Trình tiết kiệm dữ liệu</translation> +<translation id="721331389620694978">Một số cài đặt có thể phản ánh thói quen duyệt web sẽ không bị xóa.</translation> <translation id="7243308994586599757">Có các tùy chọn ở gần cuối màn hình</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> sử dụng vị trí của bạn để hiển thị kết quả tìm kiếm địa phương</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />Trợ giúp<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ Để nhận được giấy phép mới, hãy kết nối Internet và phát nội dung đã tải xuống của bạn.</translation> <translation id="8660471606262461360">Từ Google Payments</translation> -<translation id="8675945939500569406">Bật Web trong cuộc sống?</translation> <translation id="8676374126336081632">Xóa văn bản nhập</translation> <translation id="869891660844655955">Ngày hết hạn</translation> <translation id="8699799819461268362">Bộ lọc Trang web an toàn của Google</translation> <translation id="8701537995684343047">Truy cập dấu trang để lưu ngoại tuyến</translation> <translation id="8719023831149562936">Không thể chiếu tab hiện tại</translation> <translation id="8725066075913043281">Thử lại</translation> -<translation id="8727142376512517020">Không hiển thị lại hộp thoại này</translation> <translation id="8730621377337864115">Hoàn tất</translation> <translation id="8737542153238017984">Trang đã lưu không khả dụng khi ngoại tuyến. Bộ nhớ gần đầy.</translation> <translation id="8793430725658173476">Sao chép url</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb index e441bef..239a5d32d 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">未能成功下载 <ph name="FILE_NAME" />,因为服务器出现了问题。</translation> <translation id="1506061864768559482">搜索引擎</translation> <translation id="1513352483775369820">书签和网络历史记录</translation> +<translation id="1546112724822176246">没看到您的设备?<ph name="BEGIN_LINK" />寻求帮助<ph name="END_LINK" />。</translation> <translation id="1553358976309200471">更新 Chrome</translation> <translation id="1557201757634521564">自动检测编码</translation> <translation id="1568822834048182062">系统会将您保存的书签、历史记录、密码和其他设置同步到您的 Google 帐户。</translation> @@ -211,11 +212,8 @@ <translation id="4170011742729630528">此服务目前无法使用,请稍后再试。</translation> <translation id="4193864812412988973">正在查看的是此书签的离线副本</translation> <translation id="4195643157523330669">在新标签页中打开</translation> -<translation id="4198229475320555619">书签已离线保存 (<ph name="PAGE_SIZE_STRING" />)</translation> +<translation id="4198229475320555619">书签已离线保存(大小:<ph name="PAGE_SIZE_STRING" />)</translation> <translation id="423410644998903704">Chrome 需要具有这些功能的使用权限,才能批准此网站的分享请求。</translation> -<translation id="424696723690217687">发现附近物体传送的网页。 - -当您的设备处于解锁状态时,Chrome 会检测附近的网页。然后,相关 Google 服务处理这些网页,以提高网页搜索结果的质量。</translation> <translation id="4254813446494774748">翻译语言:</translation> <translation id="4256782883801055595">开放源代码许可</translation> <translation id="4259722352634471385">已屏蔽 <ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">正在设置…</translation> <translation id="6112702117600201073">正在刷新页面</translation> <translation id="6127379762771434464">条目已移除</translation> +<translation id="6134870457258083164">没看到您的设备?<ph name="BEGIN_LINK1" />寻求帮助<ph name="END_LINK1" />或<ph name="BEGIN_LINK2" />重新搜索<ph name="END_LINK2" />。</translation> <translation id="6138140242378429169">使网页适合移动设备</translation> <translation id="6140912465461743537">国家/地区</translation> <translation id="6159335304067198720">节省 <ph name="PERCENT" /> 的数据流量</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">刷新</translation> <translation id="7191430249889272776">标签页已在后台打开。</translation> <translation id="7208788139759694678">流量节省程序已停用</translation> +<translation id="721331389620694978">一些可能反映浏览习惯的设置不会遭到清除。</translation> <translation id="7243308994586599757">选项在靠近屏幕底部的位置</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> 将根据您的位置信息显示本地搜索结果</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />帮助<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ 要获得新的许可,请连接到互联网并播放您下载的内容。</translation> <translation id="8660471606262461360">来自 Google Payments</translation> -<translation id="8675945939500569406">要启用实物网吗?</translation> <translation id="8676374126336081632">清除输入的内容</translation> <translation id="869891660844655955">截止日期</translation> <translation id="8699799819461268362">Google SafeSites 过滤功能</translation> <translation id="8701537995684343047">访问书签以离线保存</translation> <translation id="8719023831149562936">无法传输当前的标签页</translation> <translation id="8725066075913043281">重试</translation> -<translation id="8727142376512517020">不要再显示此对话框</translation> <translation id="8730621377337864115">完成</translation> <translation id="8737542153238017984">存储空间即将用尽,因此无法为保存的页面创建离线副本。</translation> <translation id="8793430725658173476">复制网址</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb b/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb index d86e892e..9e8cda58 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb
@@ -42,6 +42,7 @@ <translation id="1477626028522505441">伺服器發生問題,因此無法下載 <ph name="FILE_NAME" />。</translation> <translation id="1506061864768559482">搜尋引擎</translation> <translation id="1513352483775369820">書籤與網頁紀錄</translation> +<translation id="1546112724822176246">找不到您的裝置嗎?建議您<ph name="BEGIN_LINK" />尋求協助<ph name="END_LINK" />。</translation> <translation id="1553358976309200471">更新 Chrome</translation> <translation id="1557201757634521564">自動偵測編碼</translation> <translation id="1568822834048182062">系統會將您的書籤、歷史紀錄、密碼和其他設定與您的 Google 帳戶同步處理。</translation> @@ -213,9 +214,6 @@ <translation id="4195643157523330669">在新分頁中開啟</translation> <translation id="4198229475320555619">已儲存離線書籤 (大小:<ph name="PAGE_SIZE_STRING" />)</translation> <translation id="423410644998903704">Chrome 需要存取權限,才能與這個網站分享。</translation> -<translation id="424696723690217687">偵測附近裝置傳送的網頁。 - -Chrome 會在您的裝置解鎖時掃描附近的網頁。這些網頁經由 Google 服務處理過後,可讓網頁搜尋結果的品質更臻完善。</translation> <translation id="4254813446494774748">翻譯語言:</translation> <translation id="4256782883801055595">開放原始碼授權</translation> <translation id="4259722352634471385">瀏覽的網址已封鎖:<ph name="URL" /></translation> @@ -373,6 +371,7 @@ <translation id="6108923351542677676">設定中…</translation> <translation id="6112702117600201073">重新整理網頁</translation> <translation id="6127379762771434464">已移除項目</translation> +<translation id="6134870457258083164">找不到您的裝置嗎?建議您<ph name="BEGIN_LINK1" />尋求協助<ph name="END_LINK1" />或<ph name="BEGIN_LINK2" />重新搜尋<ph name="END_LINK2" />。</translation> <translation id="6138140242378429169">讓網頁適合透過行動裝置瀏覽</translation> <translation id="6140912465461743537">國家/地區</translation> <translation id="6159335304067198720">節省 <ph name="PERCENT" /> 的數據流量</translation> @@ -459,6 +458,7 @@ <translation id="7180611975245234373">重新整理</translation> <translation id="7191430249889272776">已在背景開啟分頁。</translation> <translation id="7208788139759694678">已停用 Data Saver</translation> +<translation id="721331389620694978">部分可能反映瀏覽偏好的設定不會遭到清除。</translation> <translation id="7243308994586599757">選項在接近畫面底部的位置</translation> <translation id="7244362611678346589"><ph name="SEARCH_ENGINE_URL" /> 會使用您的位置資訊來顯示當地搜尋結果</translation> <translation id="7299441085833132046"><ph name="BEGIN_LINK" />說明<ph name="END_LINK" /></translation> @@ -565,14 +565,12 @@ 如要取得新授權,請先連線至網際網路,然後再播放您已下載的內容。</translation> <translation id="8660471606262461360">來自 Google Payments</translation> -<translation id="8675945939500569406">要開啟實體化網路嗎?</translation> <translation id="8676374126336081632">清除輸入</translation> <translation id="869891660844655955">到期日</translation> <translation id="8699799819461268362">Google 安全網站篩選器</translation> <translation id="8701537995684343047">造訪書籤即可儲存離線複本</translation> <translation id="8719023831149562936">無法傳輸目前的分頁</translation> <translation id="8725066075913043281">再試一次</translation> -<translation id="8727142376512517020">不要再顯示這個對話方塊</translation> <translation id="8730621377337864115">完成</translation> <translation id="8737542153238017984">儲存空間即將用盡,因此無法離線存取您剛儲存的網頁。</translation> <translation id="8793430725658173476">複製網址</translation>
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/BackgroundSyncLauncherServiceTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/BackgroundSyncLauncherServiceTest.java index 7d7304c..e626c257 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/BackgroundSyncLauncherServiceTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/BackgroundSyncLauncherServiceTest.java
@@ -9,6 +9,7 @@ import android.test.suitebuilder.annotation.SmallTest; import org.chromium.base.ThreadUtils; +import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.test.util.AdvancedMockContext; import org.chromium.base.test.util.Feature; @@ -45,7 +46,7 @@ protected void setUp() throws Exception { mContext = new AdvancedMockContext(getInstrumentation().getTargetContext()); BackgroundSyncLauncher.setGCMEnabled(false); - BackgroundSyncLauncher.setReportingDisabledForTests(true); + RecordHistogram.disableForTests(); mLauncher = BackgroundSyncLauncher.create(mContext); mLauncherService = new MockLauncherService(); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/BackgroundSyncLauncherTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/BackgroundSyncLauncherTest.java index 1f0922f..9e748b2 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/BackgroundSyncLauncherTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/BackgroundSyncLauncherTest.java
@@ -8,6 +8,7 @@ import android.test.InstrumentationTestCase; import android.test.suitebuilder.annotation.SmallTest; +import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.test.util.AdvancedMockContext; import org.chromium.base.test.util.Feature; @@ -25,7 +26,7 @@ protected void setUp() throws Exception { mContext = new AdvancedMockContext(getInstrumentation().getTargetContext()); BackgroundSyncLauncher.setGCMEnabled(false); - BackgroundSyncLauncher.setReportingDisabledForTests(true); + RecordHistogram.disableForTests(); mLauncher = BackgroundSyncLauncher.create(mContext); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java index c66ee8a3..d00bb9e 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java
@@ -20,6 +20,7 @@ import android.test.suitebuilder.annotation.SmallTest; import org.chromium.base.CommandLine; +import org.chromium.base.metrics.RecordHistogram; import org.chromium.chrome.browser.IntentHandler; import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler.OverrideUrlLoadingResult; import org.chromium.chrome.browser.tab.Tab; @@ -93,7 +94,7 @@ super.setUp(); mDelegate.setContext(getInstrumentation().getContext()); CommandLine.init(new String[0]); - ExternalNavigationHandler.sReportingDisabledForTests = true; + RecordHistogram.disableForTests(); mDelegate.mQueryIntentOverride = null; }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/interests/InterestsServiceTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/interests/InterestsServiceTest.java index e3c4b88..1bcd55e2 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/interests/InterestsServiceTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/interests/InterestsServiceTest.java
@@ -6,11 +6,10 @@ import android.accounts.Account; import android.content.Context; -import android.test.suitebuilder.annotation.SmallTest; +import android.test.FlakyTest; import org.chromium.base.CommandLine; import org.chromium.base.ThreadUtils; -import org.chromium.base.test.util.Feature; import org.chromium.chrome.browser.ntp.interests.InterestsService.Interest; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.signin.AccountTrackerService; @@ -90,8 +89,12 @@ super.tearDown(); } - @SmallTest - @Feature({"NewTabPage"}) + /** + * http://crbug.com/585173 + * @SmallTest + * @Feature({"NewTabPage"}) + */ + @FlakyTest public void testEmptyInterests() throws Exception { String response = "{\n" + " \"interests\": []\n" @@ -102,8 +105,12 @@ assertEquals(0, result.length); } - @SmallTest - @Feature({"NewTabPage"}) + /** + * http://crbug.com/585173 + * @SmallTest + * @Feature({"NewTabPage"}) + */ + @FlakyTest public void testInterests() throws Exception { String response = "{\n" + " \"interests\": [\n" @@ -126,8 +133,12 @@ assertEquals(new Interest("Google Chrome", "https://fake.com/fake.png", 0.98), result[1]); } - @SmallTest - @Feature({"NewTabPage"}) + /** + * http://crbug.com/585173 + * @SmallTest + * @Feature({"NewTabPage"}) + */ + @FlakyTest public void testBadlyFormedInterests() throws Exception { String response = "{\n" + " \"interests\": ["; @@ -136,8 +147,12 @@ assertTrue(NULL_RESPONSE == result); } - @SmallTest - @Feature({"NewTabPage"}) + /** + * http://crbug.com/585173 + * @SmallTest + * @Feature({"NewTabPage"}) + */ + @FlakyTest public void testEmptyResponse() throws Exception { Interest[] result = serveResponseAndRequestInterests("");
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/RestoreMigrateTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/RestoreMigrateTest.java index bc095a3..c7857abe 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/RestoreMigrateTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/RestoreMigrateTest.java
@@ -10,6 +10,7 @@ import org.chromium.base.StreamUtil; import org.chromium.base.ThreadUtils; import org.chromium.base.annotations.SuppressFBWarnings; +import org.chromium.base.metrics.RecordHistogram; import org.chromium.chrome.browser.TabState; import org.chromium.chrome.test.util.ApplicationData; import org.chromium.chrome.test.util.browser.tabmodel.MockTabModelSelector; @@ -25,10 +26,6 @@ */ public class RestoreMigrateTest extends InstrumentationTestCase { - private static void disableReporting() { - TabPersistentStore.sReportingDisabledForTests = true; - } - private void writeStateFile(final TabModelSelector selector, int index) throws IOException { byte[] data = ThreadUtils.runOnUiThreadBlockingNoException( new Callable<byte[]>() { @@ -236,7 +233,7 @@ getInstrumentation().getTargetContext(), null, null); int maxId = Math.max(getMaxId(selector0), getMaxId(selector1)); - disableReporting(); + RecordHistogram.disableForTests(); assertEquals("Invalid next id", maxId + 1, storeIn.loadStateInternal()); } @@ -263,7 +260,7 @@ TabPersistentStore storeIn1 = new TabPersistentStore(selectorIn1, 1, getInstrumentation().getTargetContext(), null, null); - disableReporting(); + RecordHistogram.disableForTests(); storeIn0.loadStateInternal(); storeIn1.loadStateInternal();
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/gcore/GoogleApiClientHelperTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/gcore/GoogleApiClientHelperTest.java index 2e008609..fd4e8f5 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/gcore/GoogleApiClientHelperTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/gcore/GoogleApiClientHelperTest.java
@@ -41,7 +41,7 @@ @After public void tearDown() { ApplicationStatus.destroyForJUnitTests(); - GoogleApiClientHelper.resetLifecycleHookForJUnitTests(); + LifecycleHook.destroyInstanceForJUnitTests(); } /** Tests that connection attempts are delayed. */
diff --git a/chrome/android/sync_shell/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java b/chrome/android/sync_shell/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java index f8a2c382..fe143b7 100644 --- a/chrome/android/sync_shell/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java +++ b/chrome/android/sync_shell/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java
@@ -11,6 +11,7 @@ import org.chromium.base.ActivityState; import org.chromium.base.ApplicationStatus; import org.chromium.base.ThreadUtils; +import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Feature; import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.signin.AccountIdProvider; @@ -61,8 +62,9 @@ SyncTestUtil.verifySyncIsActiveForAccount(mContext, account); } - @LargeTest - @Feature({"Sync"}) + // @LargeTest + // @Feature({"Sync"}) + @DisabledTest public void testRename() throws InterruptedException { // The two accounts object that would represent the account rename. final Account oldAccount = setUpTestAccountAndSignInToSync();
diff --git a/chrome/app/app-Info.plist b/chrome/app/app-Info.plist index bace54f0..3012b80 100644 --- a/chrome/app/app-Info.plist +++ b/chrome/app/app-Info.plist
@@ -349,6 +349,6 @@ </dict> </array> <key>NSUserNotificationAlertStyle</key> - <string>alert</string> + <string>banner</string> </dict> </plist>
diff --git a/chrome/app/bookmarks_strings.grdp b/chrome/app/bookmarks_strings.grdp index 23395d1..b6daec1b 100644 --- a/chrome/app/bookmarks_strings.grdp +++ b/chrome/app/bookmarks_strings.grdp
@@ -176,9 +176,6 @@ <message name="IDS_BOOKMARK_AX_BUBBLE_FOLDER_TEXT" desc="Text preceding the folder selector"> Bookmark folder </message> - <message name="IDS_BOOKMARK_BUBBLE_REMOVE_BOOKMARK" desc="Title of the button for removing the bookmark"> - Remove - </message> <message name="IDS_BOOKMARK_BUBBLE_OPTIONS" desc="Title of the button the user can click to edit details of the bookmark"> Edit... </message> @@ -224,35 +221,15 @@ <message name="IDS_BOOKMARK_EDITOR_NEW_FOLDER_MENU_ITEM" desc="Text on the new folder context menu item."> &New folder </message> - <message name="IDS_BOOKMARK_EDITOR_TITLE" desc="Title of the window the bookmark editor is in."> - Edit Bookmark - </message> <message name="IDS_BOOKMARK_EDITOR_CONFIRM_DELETE" desc="The message shown in the dialog asking the user to confirm deleting a folder."> This folder contains <ph name="COUNT">$1<ex>5</ex></ph> bookmarks. Are you sure you want to delete it? </message> - <message name="IDS_BOOKMARK_EDITOR_NEW_FOLDER_NAME" desc="Name for newly created groups"> - New folder - </message> <message name="IDS_BOOKMARK_FOLDER_EDITOR_WINDOW_TITLE" desc="Window title of editor for bookmark folders"> Edit folder name </message> <message name="IDS_BOOKMARK_FOLDER_EDITOR_WINDOW_TITLE_NEW" desc="Window title of editor for new bookmark folders"> New folder </message> - <if expr="is_ios"> - <message name="IDS_BOOKMARK_FOLDER_CHOOSER_TITLE" desc="Title of the window the bookmark folder chooser is in."> - Choose Folder - </message> - <message name="IDS_BOOKMARK_ADD_EDITOR_TITLE" desc="Title of the window the bookmark editor is in when adding a bookmark. [Length: 10em]"> - Add Bookmark - </message> - <message name="IDS_BOOKMARK_NEW_FOLDER_BUTTON_TITLE" desc="Title for button to create a new folder in Bookmarks [Length: 14em]"> - New Folder - </message> - <message name="IDS_BOOKMARK_FOLDER_EDITOR_TITLE" desc="Title of the window the bookmark folder editor is in."> - Edit Folder - </message> - </if> <if expr="not use_titlecase"> <message name="IDS_BOOKMARK_ALL_TABS_DIALOG_TITLE" desc="The title of the Bookmark All Tabs dialog."> Bookmark all tabs @@ -294,12 +271,6 @@ <message name="IDS_BOOKMARK_MANAGER_EXPORT_MENU" desc="Title of the export menu item in the bookmark manager."> Export bookmarks to HTML file... </message> - <message name="IDS_BOOKMARK_MANAGER_NAME_INPUT_PLACE_HOLDER" desc="Text to show in the URL input field when editing or creating bookmarks."> - Name - </message> - <message name="IDS_BOOKMARK_MANAGER_URL_INPUT_PLACE_HOLDER" desc="Text to show in the URL input field when editing or creating bookmarks."> - URL - </message> <message name="IDS_BOOKMARK_MANAGER_INVALID_URL" desc="Error message to display when the user tries to edit or create a bookmark with an invalid URL."> Invalid URL. </message> @@ -332,12 +303,6 @@ <message name="IDS_BOOKMARK_MANAGER_EXPORT_MENU" desc="In Title Case: Title of the export menu item in the bookmark manager."> Export Bookmarks to HTML File... </message> - <message name="IDS_BOOKMARK_MANAGER_NAME_INPUT_PLACE_HOLDER" desc="In Title Case: Text to show in the URL input field when editing or creating bookmarks."> - Name - </message> - <message name="IDS_BOOKMARK_MANAGER_URL_INPUT_PLACE_HOLDER" desc="In Title Case: Text to show in the URL input field when editing or creating bookmarks."> - URL - </message> <message name="IDS_BOOKMARK_MANAGER_INVALID_URL" desc="In Title Case: Error message to display when the user tries to edit or create a bookmark with an invalid URL."> Invalid URL. </message> @@ -348,17 +313,6 @@ Search </message> </if> - <if expr="is_ios"> - <message name="IDS_BOOKMARK_MANAGER_FOLDER_SECTION" desc="The label for the folder section when editing or creating bookmarks on a phone."> - In Folder: - </message> - <message name="IDS_BOOKMARK_MANAGER_FOLDER_TITLE" desc="The label for the folder selector field when editing or creating bookmarks."> - Folder - </message> - <message name="IDS_BOOKMARK_MANAGER_REMOVE_TITLE" desc="The label for the remove button when editing bookmarks."> - Remove - </message> - </if> <message name="IDS_EXPORT_BOOKMARKS_DEFAULT_FILENAME" desc="Filename that pre-populates the filename field when user attempts to export his bookmarks from Bookmark Manager."> bookmarks_<ph name="DATESTAMP">$1<ex>02_11_11</ex></ph>.html </message> @@ -390,10 +344,7 @@ </if> <!-- End of Bookmarks Menu (in the Main Menu) strings. --> - <!-- Being of Bookmark Star button strings. --> - <message name="IDS_TOOLTIP_STAR" desc="The tooltip shown when you hover the star button in the right side of the location bar."> - Bookmark this page - </message> + <!-- Begin of Bookmark Star button strings. --> <message name="IDS_TOOLTIP_STARRED" desc="The tooltip shown when you hover the star button in the right side of the location bar and the current page is bookmarked."> Edit bookmark for this page </message>
diff --git a/chrome/app/chrome_command_ids.h b/chrome/app/chrome_command_ids.h index 5fe93d7..0d91c9a 100644 --- a/chrome/app/chrome_command_ids.h +++ b/chrome/app/chrome_command_ids.h
@@ -315,6 +315,7 @@ #define IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP 50162 #define IDC_CONTENT_CONTEXT_RESTART_PACKAGED_APP 50163 #define IDC_CONTENT_CONTEXT_FORCESAVEPASSWORD 50165 +#define IDC_CONTENT_CONTEXT_GENERATEPASSWORD 50166 // Frame items. #define IDC_CONTENT_CONTEXT_RELOADFRAME 50170 #define IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE 50171
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 771fc77..d2187e63 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -730,6 +730,9 @@ <message name="IDS_CONTENT_CONTEXT_LANGUAGE_SETTINGS" desc="The name of the Language Settings command in the content area context menu"> &Language settings... </message> + <message name="IDS_CONTENT_CONTEXT_GENERATEPASSWORD" desc="The name of the Generate Password command in the content area context menu"> + Generate password + </message> </if> <if expr="use_titlecase"> <message name="IDS_CONTENT_CONTEXT_BACK" desc="In Title Case: The name of the Back command in the content area context menu"> @@ -954,6 +957,9 @@ <message name="IDS_CONTENT_CONTEXT_LANGUAGE_SETTINGS" desc="In Title Case: The name of the Language Settings command in the content area context menu"> &Language Settings... </message> + <message name="IDS_CONTENT_CONTEXT_GENERATEPASSWORD" desc="In Title Case: The name of the Generate Password command in the content area context menu"> + Generate Password + </message> </if> </if> @@ -3302,20 +3308,6 @@ </message> </if> - <!-- FindInPage strings --> - <message name="IDS_FIND_IN_PAGE_COUNT" desc="How many matches found and what item we are showing"> - <ph name="ACTIVE_MATCH">$1<ex>1</ex></ph> of <ph name="TOTAL_MATCHCOUNT">$2<ex>5</ex></ph> - </message> - <message name="IDS_FIND_IN_PAGE_PREVIOUS_TOOLTIP" desc="The tooltip for the previous button"> - Previous - </message> - <message name="IDS_FIND_IN_PAGE_NEXT_TOOLTIP" desc="The tooltip for the next button"> - Next - </message> - <message name="IDS_FIND_IN_PAGE_CLOSE_TOOLTIP" desc="The tooltip for the close button"> - Close find bar - </message> - <!-- Fullscreen mode --> <message name="IDS_EXIT_FULLSCREEN_MODE" desc="Clickable message displayed on entering full screen mode. Clicking on the link exits full screen mode."> Exit full screen @@ -3973,6 +3965,9 @@ <message name="IDS_EXTENSION_PROMPT_WARNING_U2F_DEVICES" desc="Warning message which indicates that an extension has access to Universal 2nd Factor devices."> Access your Universal 2nd Factor devices </message> + <message name="IDS_EXTENSION_PROMPT_WARNING_NOTIFICATIONS" desc="Permission string which indicates that an extension has access to display notifications."> + Display notifications + </message> <message name="IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE" desc="Permission string for access to a specific USB device."> Access any <ph name="DEVICE_NAME_AND_VENDOR">$1<ex>SoundKnob from Griffin Technology</ex></ph> via USB </message> @@ -5918,7 +5913,13 @@ </message> <message name="IDS_FLAGS_PASSWORD_FORCE_SAVING_DESCRIPTION" desc="Description of the flag for the password manager's force-saving option."> Allow the user to manually enforce password saving instead of relying on password manager's heuristics. + </message> + <message name="IDS_FLAGS_MANUAL_PASSWORD_GENERATION_NAME" desc="Name of the flag for manual password generation."> + Manual password generation. </message> + <message name="IDS_FLAGS_MANUAL_PASSWORD_GENERATION_DESCRIPTION" desc="Description of the flag for manual password generation."> + Allow the user to manually enforce to generate password on a password field. + </message> <message name="IDS_FLAGS_PASSWORD_MANAGER_LINK_NAME" desc="Name of the flag to enable showing a link to account central on password settings page"> Remote password management link </message> @@ -5981,7 +5982,7 @@ Enable the "stale-while-revalidate" cache directive </message> <message name="IDS_FLAGS_ENABLE_STALE_WHILE_REVALIDATE_DESCRIPTION" desc="Description of the flag to enable the "stale-while-revalidate" cache directive. This message is intended for web developers who are familiar with technical terms. "Cache-Control: stale-while-revalidate" is the literal string sent by the HTTP server, and so should be untranslated where possible. If necessary for translation it can be split into the HTTP header name part "Cache-Control" and the value part "stale-while-revalidate". "directive" here is an instruction sent by an HTTP server to indicate what caching behaviour should be used. The directive is typically configured by the server administrator. "servers" here refers to HTTP server software. "resources" here means individual files served by HTTP servers and cached by the browser. "be revalidated" means "be checked with the HTTP server whether or not the browser has the latest version". "in the background" here means without making the user wait. "latency" here refers to the time the user waits for a web page to be loaded or become usable."> - Enable the experimental implementation of the "Cache-Control: stale-while-revalidate" directive. This permits servers to specify that some resources may be revalidated in the background to improve latency. + Enable the experimental implementation of the "Cache-Control: stale-while-revalidate" directive. This permits servers to specify that some resources may be revalidated in the background to improve latency. </message> </if> <message name="IDS_FLAGS_ENABLE_NAVIGATION_TRACING" desc="Name of the flag to enable navigation tracing"> @@ -7273,12 +7274,6 @@ <message name="IDS_PASSWORDS_AUTO_SIGNIN_DESCRIPTION" desc="Text under 'Auto sign-in' checkbox"> Automatically sign in to websites using stored credential. When the feature is off, you'll be asked for verification every time before signing in to a website. </message> - <message name="IDS_PASSWORDS_SHOW_PASSWORDS_TAB_TITLE" desc="Title for 'Saved passwords' tab"> - Saved passwords - </message> - <message name="IDS_PASSWORDS_EXCEPTIONS_TAB_TITLE" desc="Title for 'Never saved' tab"> - Never saved - </message> <message name="IDS_PASSWORDS_VIA_FEDERATION" desc="Text for federated credential's value."> via <ph name="PROVIDER">$1<ex>facebook.com</ex></ph> </message> @@ -11724,6 +11719,12 @@ <message name="IDS_NOTIFICATION_WELCOME_TITLE" desc="Notification title for the Welcome Notification"> Google Now for Chrome! </message> + <message name="IDS_NOTIFICATION_BUTTON_SETTINGS" desc="Short button label to go to the notification settings panel"> + Settings + </message> + <message name="IDS_NOTIFICATION_BUTTON_CLOSE" desc="Button label to close a notification"> + Close + </message> <message name="IDS_NOTIFICATION_SETTINGS" desc="Button label to go to the notification settings panel"> Notification settings </message>
diff --git a/chrome/app/media_router_strings.grdp b/chrome/app/media_router_strings.grdp index 12133d4..1731354 100644 --- a/chrome/app/media_router_strings.grdp +++ b/chrome/app/media_router_strings.grdp
@@ -106,11 +106,11 @@ <message name="IDS_MEDIA_ROUTER_CASTING_ACTIVITY_STATUS" desc="Label of activity status, which describes the media that is currently being casted."> Casting: <ph name="routeTitle">$1<ex>Video</ex></ph> </message> - <message name="IDS_MEDIA_ROUTER_JOIN_BUTTON" desc="Join button, which, on click, will join the current route."> - Join + <message name="IDS_MEDIA_ROUTER_START_CASTING_BUTTON" desc="Start casting button, which, on click, will start casting to the current route."> + Cast </message> <message name="IDS_MEDIA_ROUTER_STOP_CASTING_BUTTON" desc="Stop casting button, which, on click, will stop the current route."> - Stop casting + Stop </message> <!-- Sink List -->
diff --git a/chrome/app/resources/chromium_strings_am.xtb b/chrome/app/resources/chromium_strings_am.xtb index cf98df8e..48ca9fa6 100644 --- a/chrome/app/resources/chromium_strings_am.xtb +++ b/chrome/app/resources/chromium_strings_am.xtb
@@ -108,7 +108,6 @@ <translation id="457845228957001925">የChromium ውሂብዎን በተመለከተ አስፈላጊ መረጃ</translation> <translation id="459535195905078186">የChromium መተግበሪያዎች</translation> <translation id="4677944499843243528">መገለጫው በሌላ ኮምፒውተር (<ph name="HOST_NAME" />) ላይ በሌላ የChromium ሂደት (<ph name="PROCESS_ID" />) የተያዘ ይመስላል። Chromium መገለጫው እንዳይበላሽ ቆልፎታል። ሌሎች ሂደቶች ይህን መገለጫ እየተጠቀሙበት እንዳልሆኑ እርግጠኛ ከሆኑ መገለጫውን አስከፍተው Chromiumን ዳግም ማስጀመር ይችላሉ።</translation> -<translation id="473775607612524610">አዘምን</translation> <translation id="4743926867934016338">ተቀበል እና ፈልግ</translation> <translation id="4888717733111232871">Chromium ለmDNS ትራፊክ ለመፍቀድ የውስጥ ደንብ።</translation> <translation id="4943838377383847465">Chromium በጀርባ ሁነታ ላይ ነው።</translation> @@ -142,7 +141,6 @@ <translation id="6334986366598267305">አሁን Chromiumን ከGoogle መለያዎ ጋር እና በተጋሩ ኮምፒውተሮች ላይ መጠቀም ይበልጥ ቀላል ነው።</translation> <translation id="6373523479360886564">እርግጠኛ ነዎት Chromiumን ማራገፍ ይፈልጋሉ?</translation> <translation id="6403826409255603130">Chromium ድረ-ገጾችን እና መተግበሪያዎችን እጅግ በጣም ፈጣን በሆነ ፍጥነት የሚያሄድ ድር አሳሽ ነው። ፈጣን፣ የረጋ እና ለመጠቀም ቀላል ነው። Chromium ውስጥ አብሮ በተሰራላቸው የተንኮል-አዘል ሶፍትዌር እና የማስገሪያ መከላከያዎች አማካኝነት ደህንነትዎ ይበልጥ በተጠበቀ ሁኔታ ድሩን ያስሱ።</translation> -<translation id="6424492062988593837">Chromium አሁን ተሻሽሏል! አዲስ ስሪት አለ።</translation> <translation id="6475912303565314141">እንዲሁም Chromiumን ሲጀምሩት የሚታየውን ገጽ ይቆጣጠራል።</translation> <translation id="6485906693002546646">የChromium ነገሮችዎን ለማመሳሰል <ph name="PROFILE_EMAIL" />ን እየተጠቀሙ ነው። የማመሳሰል ምርጫዎን ለማዘመን ወይም Chromium ያለGoogle መለያ መጠቀም የሚፈልጉ ከሆኑ <ph name="SETTINGS_LINK" />ን ይጎብኙ።</translation> <translation id="6510925080656968729">Chromiumን ያራግፉ</translation>
diff --git a/chrome/app/resources/chromium_strings_ar.xtb b/chrome/app/resources/chromium_strings_ar.xtb index bb6864d..f5b17ca5 100644 --- a/chrome/app/resources/chromium_strings_ar.xtb +++ b/chrome/app/resources/chromium_strings_ar.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">معلومات مهمة بخصوص بياناتك في Chromium</translation> <translation id="459535195905078186">تطبيقات Chromium</translation> <translation id="4677944499843243528">يبدو أن الملف الشخصي قيد الاستخدام بواسطة عملية أخرى في Chromium (<ph name="PROCESS_ID" />) على جهاز كمبيوتر آخر (<ph name="HOST_NAME" />). وقد تمّ قفل الملف الشخصي من جانب Chromium لضمان عدم تعرضه للتلف. فإذا كنت واثقًا من عدم وجود عمليات أخرى قيد التشغيل على جهاز الكمبيوتر، فيُمكنك إلغاء قفل الملف الشخصي وإعادة تشغيل Chromium مجددًا.</translation> -<translation id="473775607612524610">تحديث</translation> <translation id="4743926867934016338">موافقة وبحث</translation> <translation id="4888717733111232871">قاعدة الوارد إلى Chromium للسماح بحركة مرور mDNS.</translation> <translation id="4943838377383847465">Chromium في وضع الخلفية.</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">الآن أصبح استخدام Chromium مع حسابك في Google وفي أجهزة الكمبيوتر المشتركة أكثر سهولة.</translation> <translation id="6373523479360886564">هل تريد بالتأكيد إزالة Chromium؟</translation> <translation id="6403826409255603130"> إن Chromium هو متصفح ويب يشغّل صفحات الويب والتطبيقات بسرعة مذهلة. إنه سريع وثابت وسهل الاستخدام. يمكنك تصفح الويب بشكل أكثر أمانًا من خلال ميزات الحماية من البرامج الضارة والتصيّد الاحتيالي المدمجة في Chromium.</translation> -<translation id="6424492062988593837">لقد أصبح Chromium أفضل من ذي قبل! يتوفر إصدار جديد.</translation> <translation id="6475912303565314141">كما أنها تتحكم في الصفحة التي تظهر عند تشغيل Chromium.</translation> <translation id="6485906693002546646">أنت تستخدم <ph name="PROFILE_EMAIL" /> لمزامنة عناصرك في Chromium. لتحديث تفضيل المزامنة أو استخدام Chromium بدون حساب Google، يُرجى الانتقال إلى <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">إزالة Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_bg.xtb b/chrome/app/resources/chromium_strings_bg.xtb index b98acb7c..7ea80f9 100644 --- a/chrome/app/resources/chromium_strings_bg.xtb +++ b/chrome/app/resources/chromium_strings_bg.xtb
@@ -104,7 +104,6 @@ <translation id="457845228957001925">Важна информация относно данните ви в Chromium</translation> <translation id="459535195905078186">Приложения в Chromium</translation> <translation id="4677944499843243528">Изглежда, че потребителският профил се използва от друг процес на Chromium (<ph name="PROCESS_ID" />) на друг компютър (<ph name="HOST_NAME" />). Chromium заключи потребителския профил, за да не се повреди. Ако сте сигурни, че нито един друг процес не го използва, можете да отключите потребителския профил и да стартирате Chromium повторно.</translation> -<translation id="473775607612524610">Актуализиране</translation> <translation id="4743926867934016338">Приемане и търсене</translation> <translation id="4888717733111232871">Правило за Chromium за допускане на входящия трафик за mDNS.</translation> <translation id="4943838377383847465">Chromium работи на заден план.</translation> @@ -138,7 +137,6 @@ <translation id="6334986366598267305">Вече е по-лесно да използвате Chromium с профила си в Google и на споделени компютри.</translation> <translation id="6373523479360886564">Наистина ли искате да деинсталирате Chromium?</translation> <translation id="6403826409255603130">Chromium е уеб браузър, който зарежда уеб страници и изпълнява приложения със светкавична скорост. Той е бърз, стабилен и лесен за употреба. Сърфирайте в мрежата по-безопасно с вградената защита на Chromium срещу злонамерен софтуер и фишинг.</translation> -<translation id="6424492062988593837">Chromium току-що се подобри! Налице е нова версия.</translation> <translation id="6475912303565314141">То също контролира коя страница се показва при стартиране на Chromium.</translation> <translation id="6485906693002546646">Използвате <ph name="PROFILE_EMAIL" /> за синхронизиране на нещата си в Chromium. За да актуализирате съответното предпочитание или да ползвате браузъра без профил в Google, посетете <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Деинсталиране на Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_bn.xtb b/chrome/app/resources/chromium_strings_bn.xtb index 11d4baa..b323146 100644 --- a/chrome/app/resources/chromium_strings_bn.xtb +++ b/chrome/app/resources/chromium_strings_bn.xtb
@@ -3,7 +3,7 @@ <translationbundle lang="bn"> <translation id="1065672644894730302">আপনার অভিরুচিগুলি পড়া যাবে না৷ কিছু বৈশিষ্ট্য অনুপলব্ধ থাকতে পারে ও অভিরুচিগুলিতে করা পরিবর্তনগুলি সংরক্ষিত হবে না৷</translation> <translation id="1115445892567829615">Chromium আপনার ডেটা সিঙ্ক করতে পারেনি৷ দয়া করে আপনার সিঙ্ক পাসফ্রেজ আপডেট করুন৷</translation> -<translation id="1174473354587728743">একটি কম্পিউটার ভাগ করবেন? এখন আপনি আপনার পছন্দমতো উপায়ে Chromium কে সেট আপ করতে পারেন৷</translation> +<translation id="1174473354587728743">একটি কম্পিউটার শেয়ার করবেন? এখন আপনি আপনার পছন্দমতো উপায়ে Chromium কে সেট আপ করতে পারেন৷</translation> <translation id="1185134272377778587">Chromium সম্পর্কে</translation> <translation id="1221340462641866827">Chromium OS <ph name="SCHEME" /> সংযোগগুলি নিয়ন্ত্রণে একটি বহিঃস্থ অ্যাপ্লিকেশন চালু করা সমর্থন করে না৷ অনুরোধকৃত লিংকটি হল <ph name="PROTOLINK" />৷</translation> <translation id="1293235220023151515">সিস্টেমে Chromium এর একটি বিবাদমূলক ইনস্টলেশন খুঁজে পাওয়া গেছে৷ দয়া করে এটি আনইনস্টল করুন এবং পুনরায় চেষ্টা করুন৷</translation> @@ -25,7 +25,7 @@ <translation id="1774152462503052664">Chromium-কে পটভূমিতে চলতে দিন</translation> <translation id="1779356040007214683">Chromium কে আরো নিরাপদ করতে, আমরা কিছু এক্সটেনশান অক্ষম করেছি যা <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> এ তালিকাবদ্ধ করা হয়নি এবং হয়ত আপনাকে না জানিয়ে যোগ করা হয়েছে৷</translation> <translation id="1808667845054772817">Chromium পুনরায় ইন্সটল করুন</translation> -<translation id="1816404578968201294">এটিকে এই সাইটে ভাগ করার জন্য Chromium এর অবস্থানটি অ্যাক্সেস করা প্রয়োজন।</translation> +<translation id="1816404578968201294">এটিকে এই সাইটে শেয়ার করার জন্য Chromium এর অবস্থানটি অ্যাক্সেস করা প্রয়োজন।</translation> <translation id="1869480248812203386">আপনি Google-এ নিরাপত্তার সম্ভাব্য লঙ্ঘনের ঘটনাগুলি স্বয়ংক্রিয়ভাবে প্রতিবেদন করার মাধ্যমে Chromium কে নিরাপদ ও সহজে ব্যবহারযোগ্য করতে তুলতে সাহায্য করতে পারেন।</translation> <translation id="1881322772814446296">আপনি একটি পরিচালিত অ্যাকাউন্টের মাধ্যমে সাইন ইন করছেন এবং এর প্রশাসককে আপনার Chromium প্রোফাইলের উপরে নিয়ন্ত্রণ দিচ্ছেন৷ আপনার Chromium ডেটা, যেমন অ্যাপ্লিকেশান, বুকমার্ক, ইতিহাস, পাসওয়ার্ড এবং অন্যান্য সেটিংস <ph name="USER_NAME" /> এতে স্থায়ীভাবে সম্পৃক্ত হবে৷ আপনি Google অ্যাকাউন্টগুলির ড্যাশবোর্ডের মাধ্যমে এই ডেটাগুলি মুছতে সক্ষম হবেন, কিন্তু অন্য অ্যাকাউন্টের সাথে এই ডেটা সংশ্লিষ্ট করতে পারবেন না৷ বিকল্প হিসাবে আপনি আপনার বিদ্যমান Chromium তথ্য আলাদা রাখার জন্য একটি নতুন প্রোফাইল তৈরি করতে পারেন৷ <ph name="LEARN_MORE" /></translation> <translation id="1929939181775079593">Chromium সাড়া দিচ্ছে না৷ পুনরায় শুরু করবেন?</translation> @@ -47,7 +47,7 @@ <translation id="2558641060352364164">এই সাইটটি Chromium ফ্রেম প্লাগ ইন ব্যবহার করছে যা খুব শীঘ্রই অসমর্থিত হবে৷ দয়া করে এটি আনইনস্টল করুন এবং একটি আধুনিক ব্রাউজারে আপগ্রেড করুন৷</translation> <translation id="2572494885440352020">Chromium সহায়ক</translation> <translation id="2602806952220118310">Chromium - বিজ্ঞপ্তিগুলি</translation> -<translation id="2636877269779209383">এটিকে এই সাইটে ভাগ করার জন্য Chromium এর ক্যামেরা অ্যাক্সেস করা প্রয়োজন।</translation> +<translation id="2636877269779209383">এটিকে এই সাইটে শেয়ার করার জন্য Chromium এর ক্যামেরা অ্যাক্সেস করা প্রয়োজন।</translation> <translation id="2648074677641340862">ইনস্টলেশনের সময় একটি অপারেটিং সিস্টেম ত্রুটি ঘটেছে৷ দয়া করে Chromium পুনরায় ডাউনলোড করুন৷</translation> <translation id="2673087257647337101">প্রায় আপ-টু-ডেট! আপডেট শেষ করতে Chromium পুনরায় চালু করুন৷</translation> <translation id="2685838254101182273">Chromium আপডেট করা বন্ধ করেছে এবং আপনার অপারেটিং সিস্টেমের এই সংস্করণটিকে আর সমর্থন করে না৷</translation> @@ -88,7 +88,7 @@ <translation id="3849925841547750267">দুঃখজনকভাবে, যখন ব্রাউজারটি চলমান আপনার Mozilla Firefox-এর সেটিংস পাওয়া যাচ্ছে না৷ Chromium-এ ওই সমস্ত সেটিংগুলি আমদানী করতে, আপনার কাজ সংরক্ষণ করুন এবং সকল Firefox উইন্ডো বন্ধ করুন৷ তারপরে অবিরত ক্লিক করুন৷</translation> <translation id="3883381313049582448">Chromium দ্বারা উৎপন্ন পাসওয়ার্ড ব্যবহার করুন</translation> <translation id="3889543394854987837">Chromium খোলার জন্য আপনার নামের উপরে ক্লিক করুন এবং ব্রাউজ করা শুরু করুন৷</translation> -<translation id="390894725198123737">Mac এ, পাসওয়ার্ডগুলি আপনার Keychain এ সংরক্ষিত হতে পারে এবং এই OS X অ্যাকাউন্টটি ভাগ করে এমন অন্য Chromium ব্যবহারকারীরা এটি অ্যাক্সেস বা সিঙ্ক করতে পারবে।</translation> +<translation id="390894725198123737">Mac এ, পাসওয়ার্ডগুলি আপনার Keychain এ সংরক্ষিত হতে পারে এবং এই OS X অ্যাকাউন্টটি শেয়ার করে এমন অন্য Chromium ব্যবহারকারীরা এটি অ্যাক্সেস বা সিঙ্ক করতে পারবে।</translation> <translation id="4050175100176540509">গুরুত্বপূর্ণ নিরাপত্তা উন্নতি এবং নতুন বৈশিষ্ট্যগুলি সর্বশেষ সংস্করণে উপলব্ধ।</translation> <translation id="4077262827416206768">দয়া করে সব Chromium উইন্ডো বন্ধ করুন এবং এই পরিবর্তন কার্যকরী করতে Chromium পুনরায় চালু করুন৷</translation> <translation id="4207043877577553402"><ph name="BEGIN_BOLD" />সতর্কতা:<ph name="END_BOLD" /> আপনার ব্রাউজিং ইতিহাস রেকর্ডিং করা থেকে এক্সটেনশনগুলিতে বাধা দিতে পারেনা৷ ছদ্মবেশী মোডে এই এক্সটেনশনটি অক্ষম করতে, এই বিকল্পটি নির্বাচন মুক্ত করুন৷</translation> @@ -106,7 +106,6 @@ <translation id="457845228957001925">আপনার Chromium ডেটা সংক্রান্ত গুরুত্বপূর্ণ তথ্য</translation> <translation id="459535195905078186">Chromium অ্যাপ্লিকেশানগুলি</translation> <translation id="4677944499843243528">অন্য একটি কম্পিউটারে (<ph name="HOST_NAME" />) প্রোফাইলটি অন্য Chromium প্রক্রিয়া (<ph name="PROCESS_ID" />) দ্বারা ব্যবহৃত হচ্ছে বলে মনে হচ্ছে৷ Chromium প্রোফাইলটিকে লক করেছে যাতে এটি বিকৃত না হয়ে যায়৷ যদি আপনি নিশ্চিত হন যে আর কোনো প্রক্রিয়া এই প্রোফাইলটিকে ব্যবহার করছে না, তবে আপনি প্রোফাইলটিকে আনলক করতে পারেন এবং Chromium কে পুনরায় লঞ্চ করতে পারেন৷</translation> -<translation id="473775607612524610">আপডেট</translation> <translation id="4743926867934016338">স্বীকার ও অনুসন্ধান করুন</translation> <translation id="4888717733111232871">mDNS ট্রাফিকের অনুমতি দিতে Chromium এর জন্য ইনবাউন্ড নিয়ম।</translation> <translation id="4943838377383847465">Chromium পটভূমিতে চলছে৷</translation> @@ -137,17 +136,16 @@ <translation id="6212496753309875659">এই কম্পিউটারে ইতিমধ্যে Chromium-এর আরো একটি সাম্প্রতিক সংস্করণ রয়েছে৷ যদি সফ্টওয়্যার কাজ না করে, দয়া করে Chromium আনইনস্টল করুন এবং পুনরায় চেষ্টা করুন৷</translation> <translation id="6248213926982192922">Chromium-কে ডিফল্ট ব্রাউজার করুন</translation> <translation id="6309712487085796862">Chromium আপনার ক্যামেরা ব্যবহার করছে৷</translation> -<translation id="6334986366598267305">এখন আপনার Google অ্যাকাউন্ট ও ভাগ করা কম্পিউটারগুলিতে Chromium ব্যবহার করা আরো সহজ৷</translation> +<translation id="6334986366598267305">এখন আপনার Google অ্যাকাউন্ট ও শেয়ার করা কম্পিউটারগুলিতে Chromium ব্যবহার করা আরো সহজ৷</translation> <translation id="6373523479360886564">আপনি কি Chromium আনইনস্টল করার ব্যাপারে নিশ্চিত?</translation> <translation id="6403826409255603130">Chromium হল একটি ওয়েব ব্রাউজার যা ওয়েব পৃষ্ঠার গতি এবং অ্যাপ্লিকেশনগুলিকে আলোকের গতিতে সঞ্চালিত করে৷ এটা দ্রুত, স্থিতিশীল, এবং সহজে ব্যবহারের যোগ্য৷ Chromium নির্মিত ম্যালওয়ার এবং ফিশিং সুরক্ষার সাহায্যে আরো সুরক্ষিত ভাবে ওয়েব ব্রাউজ করুন৷</translation> -<translation id="6424492062988593837">Chrome আরো ভাল হয়েছে! একটি নতুন সংস্করণ উপলব্ধ আছে৷</translation> <translation id="6475912303565314141">আপনি Chromium শুরু করলে কোন পৃষ্ঠাটি দেখানো হবে তাও এটি নিয়ন্ত্রণ করে।</translation> <translation id="6485906693002546646">আপনার Chromium জিনিসপত্র সমন্বয় করার জন্য আপনি <ph name="PROFILE_EMAIL" /> ব্যবহার করছেন৷ আপনার সিঙ্ক পছন্দগুলি আপডেট করতে বা Google অ্যাকাউন্ট ছাড়া Chromium ব্যবহার করতে <ph name="SETTINGS_LINK" /> এ যান৷</translation> <translation id="6510925080656968729">Chromium আনইনস্টল করুন</translation> <translation id="6526111688217511984">ফাইল ডাউনলোড করতে Chromium এর জন্য সঞ্চয়স্থানের অ্যাক্সেস প্রয়োজন।</translation> <translation id="6584627348340620412">৩২-বিট Chromium এর ভবিষ্যৎ সংস্করণগুলি আর এই Linux সিস্টেম সমর্থন করবে না, দয়া করে ৬৪-বিট Chromium এ আপগ্রেড করুন।</translation> <translation id="6593914713218535185">Chromium সঠিকভাবে কাজ নাও করতে পারে কারণ এটি এখন আর এই Linux সিস্টেমে সমর্থিত নয়।</translation> -<translation id="6637001341228460105">এটিকে এই সাইটে ভাগ করার জন্য Chromium এর মাইক্রোফোন অ্যাক্সেস করা প্রয়োজন।</translation> +<translation id="6637001341228460105">এটিকে এই সাইটে শেয়ার করার জন্য Chromium এর মাইক্রোফোন অ্যাক্সেস করা প্রয়োজন।</translation> <translation id="6638567566961868659">Chromium মেনুতে বা বুকমার্ক দণ্ডে আপনার বুকমার্ক খুঁজুন৷</translation> <translation id="6676384891291319759">ইন্টারনেটটি অ্যাক্সেস করুন</translation> <translation id="6717134281241384636">আপনার প্রোফাইলটি ব্যবহার করতে পারা যাবে না কারণ এটি একটি Chromium-এর নতুন সংস্করণ৷ কিছু বিষয় অনুপলব্ধ হতে পারে৷ দয়া করে একটি ভিন্ন প্রোফাইল ডিরেক্টরি উল্লেখ করুন অথবা Chromium-এর একটি নতুন সংস্করণ ব্যবহার করুন৷</translation> @@ -196,7 +194,7 @@ <translation id="7962572577636132072">Chromium স্বয়ংক্রিয়ভাবে আপডেট হয় তাই আপনি সবসময় নবীনতম সংস্করণটি পান৷</translation> <translation id="7979877361127045932">Chromium মেনুর মধ্যে লুকান</translation> <translation id="8030318113982266900">আপনার ডিভাইস <ph name="CHANNEL_NAME" /> চ্যানেলে আপডেট করা হচ্ছে...</translation> -<translation id="8033665941300843262">এগুলিকে এই সাইটে ভাগ করার জন্য Chromium এর অনুমতিগুলি অ্যাক্সেস করা প্রয়োজন।</translation> +<translation id="8033665941300843262">এগুলিকে এই সাইটে শেয়ার করার জন্য Chromium এর অনুমতিগুলি অ্যাক্সেস করা প্রয়োজন।</translation> <translation id="805745970029938373">Chromium অ্যাপ্লিকেশান, এক্সটেনশান, এবং ওয়েবসাইট থেকে আপনার সব বিজ্ঞপ্তি আপনি এখানে দেখতে পারবেন৷</translation> <translation id="8134284582177628525">যদি আপনি <ph name="PROFILE_NAME" /> এর সাথে এই কম্পিউটারটি ভাগ করেন, তবে আলাদাভাবে ব্রাউজ করার জন্য নিজেকে Chromium এ যোগ করুন৷ অন্যথায় তাদের Google অ্যাকাউন্ট থেকে সংযোগ বিচ্ছিন্ন করুন৷</translation> <translation id="8269379391216269538">Chromium কে আরো করে তুলতে সাহায্য করুন৷</translation>
diff --git a/chrome/app/resources/chromium_strings_ca.xtb b/chrome/app/resources/chromium_strings_ca.xtb index b5a85062..348d729 100644 --- a/chrome/app/resources/chromium_strings_ca.xtb +++ b/chrome/app/resources/chromium_strings_ca.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">Informació important sobre les dades de Chromium</translation> <translation id="459535195905078186">Aplicacions de Chromium</translation> <translation id="4677944499843243528">Sembla que un altre procés de Chromium (<ph name="PROCESS_ID" />) està fent servir el perfil en un altre ordinador (<ph name="HOST_NAME" />). Chromium ha bloquejat el perfil perquè no es malmeti. Si esteu segur que no hi ha cap altre procés que utilitzi el perfil, podeu desbloquejar-lo i tornar a iniciar Chromium.</translation> -<translation id="473775607612524610">Actualitza</translation> <translation id="4743926867934016338">Accepta i cerca</translation> <translation id="4888717733111232871">Regla d'entrada de Chromium per permetre el trànsit de mDNS.</translation> <translation id="4943838377383847465">Chromium està en mode de segon pla.</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">Ara resulta més fàcil utilitzar Chromium amb el vostre compte de Google i en ordinadors compartits.</translation> <translation id="6373523479360886564">Esteu segur que voleu desinstal·lar Chromium?</translation> <translation id="6403826409255603130">Chromium és un navegador web que executa les pàgines web i les aplicacions a gran velocitat. És ràpid, estable i fàcil d'utilitzar. Navegueu per Internet amb més seguretat amb protecció inserida a Chromium contra el programari maliciós i contra la pesca (suplantació d'identitat).</translation> -<translation id="6424492062988593837">Chrome ara és millor. Hi ha una versió nova disponible.</translation> <translation id="6475912303565314141">També controla la pàgina que es mostra quan inicieu Chromium.</translation> <translation id="6485906693002546646">Utilitzeu <ph name="PROFILE_EMAIL" /> per sincronitzar el contingut de Chromium. Per modificar la preferència de sincronització o per utilitzar Chromium sense cap compte de Google, dirigiu-vos a <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Desinstal·la Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_cs.xtb b/chrome/app/resources/chromium_strings_cs.xtb index d61d3be..33af8117 100644 --- a/chrome/app/resources/chromium_strings_cs.xtb +++ b/chrome/app/resources/chromium_strings_cs.xtb
@@ -108,7 +108,6 @@ <translation id="457845228957001925">Důležité informace o datech prohlížeče Chromium</translation> <translation id="459535195905078186">Aplikace Chromium</translation> <translation id="4677944499843243528">Profil je zřejmě využíván jiným procesem aplikace Chromium (<ph name="PROCESS_ID" />) nebo v jiném počítači (<ph name="HOST_NAME" />). Aplikace Chromium profil uzamkla, aby nedošlo k jeho poškození. Pokud jste si jisti, že žádný jiný proces tento profil nevyužívá, můžete jej odemknout a aplikaci Chromium znovu spustit.</translation> -<translation id="473775607612524610">Aktualizovat</translation> <translation id="4743926867934016338">Přijmout a vyhledat</translation> <translation id="4888717733111232871">Pravidlo příchozího provozu pro prohlížeč Chromium, které povolí provoz mDNS.</translation> <translation id="4943838377383847465">Chromium je v režimu na pozadí.</translation> @@ -142,7 +141,6 @@ <translation id="6334986366598267305">Používání prohlížeče Chromium se spravovaným účtem Google a sdílenými počítači je nyní snazší.</translation> <translation id="6373523479360886564">Jste si jisti, že chcete Chromium odinstalovat?</translation> <translation id="6403826409255603130">Chromium je webový prohlížeč, který spouští webové stránky a aplikace rychlostí blesku. Je rychlý a snadno se používá. Prohlížejte web bezpečněji díky ochraně proti malwaru a phishingu integrované v prohlížeči Chromium.</translation> -<translation id="6424492062988593837">Chromium je opět o něco lepší. K dispozici je nová verze.</translation> <translation id="6475912303565314141">Také řídí, která stránka se zobrazí při spuštění prohlížeče Chromium.</translation> <translation id="6485906693002546646">Synchronizujete obsah a nastavení prohlížeče Chromium s účtem <ph name="PROFILE_EMAIL" />. Chcete-li možnosti synchronizace upravit nebo Chromium používat bez účtu Google, navštivte <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Odinstalovat Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_da.xtb b/chrome/app/resources/chromium_strings_da.xtb index a231373e..d6d8644 100644 --- a/chrome/app/resources/chromium_strings_da.xtb +++ b/chrome/app/resources/chromium_strings_da.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">Vigtige oplysninger om dine Chromium-data</translation> <translation id="459535195905078186">Chromium-apps</translation> <translation id="4677944499843243528">Profilen ser ud til at være i brug i en anden Chromium-proces (<ph name="PROCESS_ID" />) på en anden computer (<ph name="HOST_NAME" />). Chromium har låst profilen, så den ikke bliver beskadiget. Hvis du er sikker på, at ingen andre processer anvender denne profil, kan du fjerne blokeringen af profilen og genstarte Chromium.</translation> -<translation id="473775607612524610">Opdater</translation> <translation id="4743926867934016338">Acceptér, og søg</translation> <translation id="4888717733111232871">Indgående regel for Chromium om at tillade mDNS-trafik.</translation> <translation id="4943838377383847465">Chromium kører i baggrunden.</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">Det er nu blevet nemmere at bruge Chromium med din Google-konto og på delte computere.</translation> <translation id="6373523479360886564">Er du sikker på, at du vil afinstallere Chromium?</translation> <translation id="6403826409255603130">Chromium er en webbrowser, der kører websider og applikationer med lynets hast. Den er hurtig, stabil og brugervenlig. Beskyttelse mod malware og phishing er indbygget i Chromium, så du kan søge mere sikkert på internettet.</translation> -<translation id="6424492062988593837">Chromium er lige blevet bedre! Der er en ny tilgængelig version.</translation> <translation id="6475912303565314141">Den styrer også, hvilken side der vises, når du åbner Chromium.</translation> <translation id="6485906693002546646">Du bruger <ph name="PROFILE_EMAIL" /> til at synkronisere dine Chromium-ting med. Gå til <ph name="SETTINGS_LINK" />, hvis du vil opdatere dine synkroniseringspræference eller bruge Chromium uden en Google-konto.</translation> <translation id="6510925080656968729">Afinstaller Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_de.xtb b/chrome/app/resources/chromium_strings_de.xtb index fa2b628..9ec398c3 100644 --- a/chrome/app/resources/chromium_strings_de.xtb +++ b/chrome/app/resources/chromium_strings_de.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">Wichtige Informationen zu Ihren Chromium-Daten</translation> <translation id="459535195905078186">Chromium-Apps</translation> <translation id="4677944499843243528">Das Profil wird offenbar gerade von einem Chromium-Prozess (<ph name="PROCESS_ID" />) auf einem anderen Computer (<ph name="HOST_NAME" />) verwendet. Das Profil wurde von Chromium gesperrt, damit es nicht beschädigt wird. Wenn Sie sicher sind, dass das Profil nicht von anderen Prozessen verwendet wird, können Sie das Profil entsperren und Chromium neu starten.</translation> -<translation id="473775607612524610">Aktualisieren</translation> <translation id="4743926867934016338">Akzeptieren und suchen</translation> <translation id="4888717733111232871">Eingangsregel für die Zulassung von mDNS-Verkehr in Chromium</translation> <translation id="4943838377383847465">Chromium wird im Hintergrundmodus ausgeführt.</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">Sie können Chromium jetzt noch einfacher mit Ihrem Google-Konto und auf gemeinsam genutzten Computern verwenden.</translation> <translation id="6373523479360886564">Möchten Sie Chromium wirklich deinstallieren?</translation> <translation id="6403826409255603130">Chromium ist ein Webbrowser, der Webseiten und Apps in Sekundenschnelle lädt und dabei äußerst stabil und nutzerfreundlich ist. Dank des integrierten Malware- und Phishing-Schutzes können Sie bedenkenlos im Internet surfen.</translation> -<translation id="6424492062988593837">Chromium ist jetzt noch besser! Es ist eine neue Version verfügbar.</translation> <translation id="6475912303565314141">Die Erweiterung legt auch die Seite fest, die beim Start von Chromium angezeigt wird.</translation> <translation id="6485906693002546646">Ihre E-Mail-Adresse <ph name="PROFILE_EMAIL" /> wird zurzeit für die Synchronisierung Ihrer Chromium-Inhalte verwendet. Wenn Sie Ihre Synchronisierungseinstellungen ändern oder Chromium ohne Google-Konto verwenden möchten, rufen Sie <ph name="SETTINGS_LINK" /> auf.</translation> <translation id="6510925080656968729">Chromium deinstallieren</translation>
diff --git a/chrome/app/resources/chromium_strings_el.xtb b/chrome/app/resources/chromium_strings_el.xtb index 90ee02a71..9b78896 100644 --- a/chrome/app/resources/chromium_strings_el.xtb +++ b/chrome/app/resources/chromium_strings_el.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">Σημαντικές πληροφορίες σχετικά με τα δεδομένα σας στο Chromium</translation> <translation id="459535195905078186">Εφαρμογές Chromium</translation> <translation id="4677944499843243528">Το προφίλ φαίνεται ότι χρησιμοποιείται από άλλη διεργασία του Chromium (<ph name="PROCESS_ID" />) σε άλλο υπολογιστή (<ph name="HOST_NAME" />). Το Chromium έχει κλειδώσει το προφίλ, για να μην καταστραφεί. Αν είστε σίγουροι ότι το προφίλ δεν χρησιμοποιείται από κάποια άλλη διεργασία, μπορείτε να το ξεκλειδώσετε και να επανεκκινήσετε το Chromium.</translation> -<translation id="473775607612524610">Ενημέρωση</translation> <translation id="4743926867934016338">Αποδοχή και Αναζήτηση</translation> <translation id="4888717733111232871">Εισερχόμενος κανόνας για το Chromium για να επιτρέπεται η κυκλοφορία του mDNS.</translation> <translation id="4943838377383847465">Το Chromium εκτελείται στο παρασκήνιο.</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">Τώρα μπορείτε να χρησιμοποιείτε πιο εύκολα το Chromium με το Λογαριασμό σας Google και σε κοινόχρηστους υπολογιστές.</translation> <translation id="6373523479360886564">Είστε βέβαιοι ότι θέλετε να καταργήσετε την εγκατάσταση του Chromium;</translation> <translation id="6403826409255603130">Το Chromium είναι ένα πρόγραμμα περιήγησης ιστού που εκτελεί εφαρμογές και ιστοσελίδες με απίστευτη ταχύτητα. Είναι γρήγορο, σταθερό και εύχρηστο. Περιηγηθείτε στον ιστό με μεγαλύτερη ασφάλεια με την ενσωματωμένη προστασία από κακόβουλα προγράμματα και ηλεκτρονικό "ψάρεμα" (phishing).</translation> -<translation id="6424492062988593837">Το Chromium μόλις βελτιώθηκε! Μια νέα έκδοση είναι διαθέσιμη.</translation> <translation id="6475912303565314141">Επίσης, ελέγχει τη σελίδα που εμφανίζεται κατά την εκκίνηση του Chromium.</translation> <translation id="6485906693002546646">Χρησιμοποιείτε το προφίλ <ph name="PROFILE_EMAIL" /> για το συγχρονισμό του περιεχομένου σας στο Chromium. Για να ενημερώσετε τις προτιμήσεις συγχρονισμού ή για να χρησιμοποιήστε το Chromium χωρίς Λογαριασμό Google, μεταβείτε στην περιοχή <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Κατάργηση εγκατάστασης Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_en-GB.xtb b/chrome/app/resources/chromium_strings_en-GB.xtb index b5ccec1..a03e78d 100644 --- a/chrome/app/resources/chromium_strings_en-GB.xtb +++ b/chrome/app/resources/chromium_strings_en-GB.xtb
@@ -108,7 +108,6 @@ <translation id="457845228957001925">Important information regarding your Chromium data</translation> <translation id="459535195905078186">Chromium Apps</translation> <translation id="4677944499843243528">The profile appears to be in use by another Chromium process (<ph name="PROCESS_ID" />) on another computer (<ph name="HOST_NAME" />). Chromium has locked the profile so that it doesn't get corrupted. If you are sure that no other processes are using this profile, you can unlock the profile and relaunch Chromium.</translation> -<translation id="473775607612524610">Update</translation> <translation id="4743926867934016338">Accept & Search</translation> <translation id="4888717733111232871">Inbound rule for Chromium to allow mDNS traffic.</translation> <translation id="4943838377383847465">Chromium is in background mode.</translation> @@ -142,7 +141,6 @@ <translation id="6334986366598267305">Now it's easier to use Chromium with your Google Account and on shared computers.</translation> <translation id="6373523479360886564">Are you sure you want to uninstall Chromium?</translation> <translation id="6403826409255603130">Chromium is a web browser that runs webpages and applications with lightning speed. It's fast, stable, and easy to use. Browse the web more safely with malware and phishing protection built into Chromium.</translation> -<translation id="6424492062988593837">Chromium just got better! A new version is available.</translation> <translation id="6475912303565314141">It also controls what page is shown when you start Chromium.</translation> <translation id="6485906693002546646">You're using <ph name="PROFILE_EMAIL" /> to sync your Chromium stuff. To update your sync preference or to use Chromium without a Google account, visit <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Uninstall Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_es-419.xtb b/chrome/app/resources/chromium_strings_es-419.xtb index 25ad4193..08d36b1 100644 --- a/chrome/app/resources/chromium_strings_es-419.xtb +++ b/chrome/app/resources/chromium_strings_es-419.xtb
@@ -104,7 +104,6 @@ <translation id="457845228957001925">Información importante sobre tus datos de Chromium</translation> <translation id="459535195905078186">Aplicaciones de Chromium</translation> <translation id="4677944499843243528">Parece que otro proceso de Chromium (<ph name="PROCESS_ID" />) está utilizando el perfil en otra computadora (<ph name="HOST_NAME" />). Chromium bloqueó el perfil para que no se dañe. Si puedes confirmar que ningún otro proceso está utilizando este perfil, puedes desbloquearlo y volver a iniciar Chromium.</translation> -<translation id="473775607612524610">Actualizar</translation> <translation id="4743926867934016338">Aceptar y buscar</translation> <translation id="4888717733111232871">Regla de entrada para que Chromium permita el tráfico mDNS.</translation> <translation id="4943838377383847465">Chromium está en modo de segundo plano</translation> @@ -138,7 +137,6 @@ <translation id="6334986366598267305">Ahora es más sencillo utilizar Chromium con la cuenta de Google y en computadoras compartidas.</translation> <translation id="6373523479360886564">¿Estás seguro de que deseas desinstalar Chromium?</translation> <translation id="6403826409255603130">Chromium es un navegador web que ejecuta páginas web y aplicaciones con la velocidad de la luz. Es rápido, estable y fácil de usar. Navega por la Web con seguridad y protección integrada contra software mailicioso y suplantación de identidad.</translation> -<translation id="6424492062988593837">¡Chromium mejoró! Hay una nueva versión disponible.</translation> <translation id="6475912303565314141">También controla qué página se muestra al iniciar Chromium.</translation> <translation id="6485906693002546646">Estás utilizando <ph name="PROFILE_EMAIL" /> para sincronizar los datos de Chromium. Si quieres actualizar las preferencias de sincronización o utilizar Chromium sin una cuenta de Google, accede a <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Desinstalar Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_es.xtb b/chrome/app/resources/chromium_strings_es.xtb index 4b24e93c..45a3f9f 100644 --- a/chrome/app/resources/chromium_strings_es.xtb +++ b/chrome/app/resources/chromium_strings_es.xtb
@@ -108,7 +108,6 @@ <translation id="457845228957001925">Información importante sobre tus datos de Chromium</translation> <translation id="459535195905078186">Aplicaciones de Chromium</translation> <translation id="4677944499843243528">Parece que otro proceso de Chromium (<ph name="PROCESS_ID" />) está utilizando el perfil en otro ordenador (<ph name="HOST_NAME" />). Chromium ha bloqueado el perfil para que no se dañe. Si estás seguro de que ningún otro proceso está utilizando este perfil, puedes desbloquearlo y volver a iniciar Chromium.</translation> -<translation id="473775607612524610">Actualizar</translation> <translation id="4743926867934016338">Aceptar y buscar</translation> <translation id="4888717733111232871">Regla entrante para que Chromium permita tráfico mDNS.</translation> <translation id="4943838377383847465">Chromium está en modo de segundo plano.</translation> @@ -142,7 +141,6 @@ <translation id="6334986366598267305">Ahora es más fácil utilizar Chromium con tu cuenta de Google y en ordenadores compartidos.</translation> <translation id="6373523479360886564">¿Seguro que quieres desinstalar Chromium?</translation> <translation id="6403826409255603130">Chromium es un navegador web que ejecuta páginas web y aplicaciones a gran velocidad. Es rápido, estable y fácil de utilizar. Chromium te permite navegar en la Web de forma más segura, ya que incluye protección contra software malicioso y phishing.</translation> -<translation id="6424492062988593837">Chromium sigue mejorando. Hay una nueva versión disponible.</translation> <translation id="6475912303565314141">También controla qué página se muestra al iniciar Chromium.</translation> <translation id="6485906693002546646">Estás utilizando <ph name="PROFILE_EMAIL" /> para sincronizar tu contenido de Chromium. Para actualizar tus preferencias de sincronización o utilizar Chromium sin una cuenta de Google, accede a <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Desinstalar Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_et.xtb b/chrome/app/resources/chromium_strings_et.xtb index 2245599..c307b83 100644 --- a/chrome/app/resources/chromium_strings_et.xtb +++ b/chrome/app/resources/chromium_strings_et.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">Oluline teave teie Chromiumi andmete kohta</translation> <translation id="459535195905078186">Chromiumi rakendused</translation> <translation id="4677944499843243528">Näib, et profiili kasutab Chromiumi muu protsess (<ph name="PROCESS_ID" />) mingis muus arvutis (<ph name="HOST_NAME" />). Chromium on profiili lukustanud, et seda ei saaks rikkuda. Kui olete kindel, et ükski muu protsess seda profiili ei kasuta, saate profiili avada ja Chromiumi taaskäivitada.</translation> -<translation id="473775607612524610">Värskenda</translation> <translation id="4743926867934016338">Nõustun, otsi</translation> <translation id="4888717733111232871">Sissetuleku reegel Chromiumile mDNS-liikluse lubamiseks.</translation> <translation id="4943838377383847465">Chromium on taustarežiimis.</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">Nüüd on Chromiumi lihtsam kasutada Google'i kontoga ja jagatud arvutistes.</translation> <translation id="6373523479360886564">Kas soovite kindlasti Chromiumi desinstallida?</translation> <translation id="6403826409255603130">Chromium on veebibrauser, mis avab veebilehti ja rakendusi välgukiirusel. See on kiire, stabiilne ja hõlpsasti kasutatav. Sirvige veebi turvalisemalt tänu Chromiumi sisseehitatud pahavara- ja andmepüügikaitsele.</translation> -<translation id="6424492062988593837">Chromium muutus just veelgi paremaks! Saadaval on uus versioon.</translation> <translation id="6475912303565314141">Lisaks juhib see seda, mis leht kuvatakse Chromiumi käivitamisel.</translation> <translation id="6485906693002546646">Kasutate Chromiumi kraami sünkroonimiseks kontot <ph name="PROFILE_EMAIL" />. Sünkroonimiseelistuste värskendamiseks või Chromiumi kasutamiseks ilma Google'i kontota avage <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Desinstalli Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_fa.xtb b/chrome/app/resources/chromium_strings_fa.xtb index 9b14ff45..45857dd2 100644 --- a/chrome/app/resources/chromium_strings_fa.xtb +++ b/chrome/app/resources/chromium_strings_fa.xtb
@@ -105,7 +105,6 @@ <translation id="457845228957001925">اطلاعات مهم در مورد دادههای Chromium</translation> <translation id="459535195905078186">برنامههای Chromium</translation> <translation id="4677944499843243528">ظاهراً نمایه توسط فرآیند Chromium دیگری (<ph name="PROCESS_ID" />) در رایانهای دیگر (<ph name="HOST_NAME" />) در حال استفاده است. Chromium نمایه را قفل کرده است تا خراب نشود. اگر مطمئنید فرآیندهای دیگری از این نمایه استفاده نمیکنند، میتوانید قفل نمایه را باز کنید و Chromium را مجدداً راهاندازی نمایید.</translation> -<translation id="473775607612524610">بهروزرسانی</translation> <translation id="4743926867934016338">پذیرش و جستجو</translation> <translation id="4888717733111232871">قانون ترافیک ورودی برای Chromium جهت اجازه به ترافیک mDNS.</translation> <translation id="4943838377383847465">Chromium در حالت پسزمینه است.</translation> @@ -139,7 +138,6 @@ <translation id="6334986366598267305">اکنون استفاده از Chromium با حساب Google شما و در رایانههای مشترک آسانتر شده است.</translation> <translation id="6373523479360886564">آیا مطمئن هستید که میخواهید Chromium را حذف نصب کنید؟</translation> <translation id="6403826409255603130">Chromium یک مرورگر وب است که صفحات وب و برنامهها را با سرعت بسیار زیاد اجرا میکند. این مرورگر خیلی سریع، پایدار و دارای کاربرد آسان است. با محافظت در مقابل بدافزار و فیشینگ طراحی شده در داخل Chromium، با امنیت بیشتری وب را مرور کنید.</translation> -<translation id="6424492062988593837">Chromium بهتر شده است! نسخه جدید آن در دسترس است.</translation> <translation id="6475912303565314141">این برنامه همچنین صفحهای را که هنگام راهاندازی Chromium نشان داده میشود، کنترل میکند.</translation> <translation id="6485906693002546646">شما از <ph name="PROFILE_EMAIL" /> برای همگامسازی موارد Chromium خودتان استفاده میکنید. برای بهروزرسانی تنظیمات ترجیحی همگامسازیتان یا استفاده از Chromium بدون حساب Google، به <ph name="SETTINGS_LINK" /> مراجعه کنید.</translation> <translation id="6510925080656968729">حذف نصب Chromium </translation>
diff --git a/chrome/app/resources/chromium_strings_fi.xtb b/chrome/app/resources/chromium_strings_fi.xtb index 72073d93..447da5d 100644 --- a/chrome/app/resources/chromium_strings_fi.xtb +++ b/chrome/app/resources/chromium_strings_fi.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">Tärkeitä tietoja Chromium-tiedoistasi</translation> <translation id="459535195905078186">Chromium-sovellukset</translation> <translation id="4677944499843243528">Profiili näyttäisi olevan toisen Chromium-prosessin (<ph name="PROCESS_ID" />) käytössä toisella tietokoneella (<ph name="HOST_NAME" />). Chromium on lukinnut profiilin, jotta se ei vioitu. Jos olet varma, että mikään toinen prosessi ei käytä tätä profiilia, voit poistaa profiilin lukituksen ja käynnistää Chromiumin uudelleen.</translation> -<translation id="473775607612524610">Päivitä</translation> <translation id="4743926867934016338">Hyväksy ja hae</translation> <translation id="4888717733111232871">Chromiumin saapuvien yhteyksien sääntö, joka sallii mDNS-liikenteen.</translation> <translation id="4943838377383847465">Chromium on käynnissä taustalla</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">Nyt voit helpommin käyttää Chromiumia Google-tililläsi ja jaetuilla tietokoneilla.</translation> <translation id="6373523479360886564">Haluatko varmasti poistaa Chromiumin asennuksen?</translation> <translation id="6403826409255603130">Chromium on selain, jolla verkkosivut ja sovellukset toimivat salamannopeasti. Se on nopea, vakaa ja helppokäyttöinen. Chromiumin sisäänrakennettu haittaohjelma- ja tietojenkalastelusuojaus tekevät verkkoselauksesta turvallisempaa.</translation> -<translation id="6424492062988593837">Chromiumista tuli juuri entistä parempi! Uusi versio on saatavilla.</translation> <translation id="6475912303565314141">Määrittää myös Chromiumin aloitussivun.</translation> <translation id="6485906693002546646">Synkronoit Chromiumin tietosi osoitteella <ph name="PROFILE_EMAIL" />. Voit vaihtaa synkronoinnin asetuksia tai siirtyä käyttämään Chromiumia ilman Google-tiliä käymällä <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Poista Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_fil.xtb b/chrome/app/resources/chromium_strings_fil.xtb index 21edbd7e..328d7bc 100644 --- a/chrome/app/resources/chromium_strings_fil.xtb +++ b/chrome/app/resources/chromium_strings_fil.xtb
@@ -108,7 +108,6 @@ <translation id="457845228957001925">Mahalagang impormasyon patungkol sa iyong data sa Chromium</translation> <translation id="459535195905078186">Chromium Apps</translation> <translation id="4677944499843243528">Mukhang ginagamit ang profile ng iba pang proseso ng Chromium (<ph name="PROCESS_ID" />) sa iba pang computer (<ph name="HOST_NAME" />). Ni-lock ng Chromium ang profile upang hindi ito ma-corrupt. Kung nakakatiyak ka na walang ibang mga proseso ang gumagamit sa profile na ito, maaari mong i-unlock ang profile at ilunsad muli ang Chromium.</translation> -<translation id="473775607612524610">Mag-update</translation> <translation id="4743926867934016338">Tanggapin at Maghanap</translation> <translation id="4888717733111232871">Inbound na panuntunan para sa Chromium upang payagan ang trapiko ng mDNS.</translation> <translation id="4943838377383847465">Nasa background mode ang Chromium.</translation> @@ -142,7 +141,6 @@ <translation id="6334986366598267305">Ngayon, mas madali nang gamitin ang Chromium sa iyong Google Account at sa mga nakabahaging computer.</translation> <translation id="6373523479360886564">Sigurado ka bang nais mong i-uninstall ang Chromium?</translation> <translation id="6403826409255603130">Ang Chromium ay isang web browser na nagpapatakbo ng mga webpage at application sa bilis ng kidlat. Ito ay mabilis, maaasahan, at madaling gamitin. Mas maingat na mag-browse sa web gamit ang proteksyon ng Chromium laban sa malware at phishing.</translation> -<translation id="6424492062988593837">Naging mas mahusay na ang Chromium! Available na ang bagong bersyon.</translation> <translation id="6475912303565314141">Kinokontrol din nito kung anong pahina ang ipinapakita kapag sinimulan mo ang Chromium.</translation> <translation id="6485906693002546646">Ginagamit mo ang <ph name="PROFILE_EMAIL" /> upang i-sync ang iyong bagay sa Chromium. Upang ma-update ang iyong kagustuhan sa pag-sync o upang magamit ang Chromium nang walang Google account, bisitahin ang <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">I-uninstall ang Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_fr.xtb b/chrome/app/resources/chromium_strings_fr.xtb index 0a7cc0ea..9a1baa01a 100644 --- a/chrome/app/resources/chromium_strings_fr.xtb +++ b/chrome/app/resources/chromium_strings_fr.xtb
@@ -107,7 +107,6 @@ <translation id="457845228957001925">Information importante concernant vos données Chromium</translation> <translation id="459535195905078186">Applications Chromium</translation> <translation id="4677944499843243528">Le profil semble être utilisé dans le cadre d'un autre processus Chromium (<ph name="PROCESS_ID" />) sur un autre ordinateur (<ph name="HOST_NAME" />). Ce profil a été verrouillé de sorte qu'il ne soit pas endommagé. Si vous êtes sûr que le profil n'est utilisé dans le cadre d'aucun autre processus, vous pouvez le déverrouiller et relancer Chromium.</translation> -<translation id="473775607612524610">Mettre à jour</translation> <translation id="4743926867934016338">Accepter et rechercher</translation> <translation id="4888717733111232871">Règle de trafic entrant pour Chromium autorisant le trafic mDNS</translation> <translation id="4943838377383847465">Chromium est exécuté en mode arrière-plan</translation> @@ -141,7 +140,6 @@ <translation id="6334986366598267305">Il est désormais plus facile d'utiliser Chromium avec votre compte Google et sur des ordinateurs partagés.</translation> <translation id="6373523479360886564">Voulez-vous vraiment désinstaller Chromium ?</translation> <translation id="6403826409255603130">Chromium est un navigateur Web qui exécute les pages Web et les applications à une vitesse fulgurante. Il est rapide, stable et simple d'utilisation. Naviguez sur le Web en toute sécurité tout en bénéficiant de la protection offerte par Chromium contre les logiciels malveillants et de phishing.</translation> -<translation id="6424492062988593837">Chromium a été amélioré ! Une nouvelle version est désormais disponible.</translation> <translation id="6475912303565314141">Elle contrôle également la page qui s'affiche au démarrage de Chromium.</translation> <translation id="6485906693002546646">Vous utilisez le compte <ph name="PROFILE_EMAIL" /> pour synchroniser votre contenu dans Chromium. Pour mettre à jour vos préférences de synchronisation ou pour utiliser Chromium sans compte Google, accédez à la page <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Désinstaller Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_gu.xtb b/chrome/app/resources/chromium_strings_gu.xtb index 0f7aaff1..ef4a9219 100644 --- a/chrome/app/resources/chromium_strings_gu.xtb +++ b/chrome/app/resources/chromium_strings_gu.xtb
@@ -109,7 +109,6 @@ <translation id="457845228957001925">તમારા Chromium ડેટા અંગેની મહત્વપૂર્ણ માહિતી</translation> <translation id="459535195905078186">Chromium એપ્લિકેશનો</translation> <translation id="4677944499843243528">બીજા કમ્પ્યુટર (<ph name="HOST_NAME" />) પર પ્રોફાઇલ બીજી Chromium પ્રક્રિયા (<ph name="PROCESS_ID" />) દ્વારા ઉપયોગમાં હોય એવું લાગે છે. Chromium એ પ્રોફાઇલને લૉક કરી છે જેથી તે દૂષિત ન થઈ જાય. જો તમને ખાતરી છે કે કોઈ અન્ય પ્રક્રિયાઓ આ પ્રોફાઇલનો ઉપયોગ કરી રહી નથી, તો તમે પ્રોફાઇલને અનલૉક કરી અને Chromium ને ફરીથી લોંચ કરી શકો છો.</translation> -<translation id="473775607612524610">અપડેટ કરો</translation> <translation id="4743926867934016338">સ્વીકારો અને શોધો</translation> <translation id="4888717733111232871">mDNS ટ્રાફિકને મંજૂરી આપવા Chromium માટે ઇનબાઉન્ડ નિયમ.</translation> <translation id="4943838377383847465">Chromium પૃષ્ઠભૂમિ મોડમાં છે.</translation> @@ -143,7 +142,6 @@ <translation id="6334986366598267305">હવે તમારા Google એકાઉન્ટ સાથે અને શેર કરેલ કમ્પ્યુટર્સ પર Chromium નો ઉપયોગ કરવો વધુ સરળ છે.</translation> <translation id="6373523479360886564">શું તમે ખરેખર તમે Chromium ને અનઇન્સ્ટોલ કરવા માંગો છો?</translation> <translation id="6403826409255603130">Chromium એ એક એવું વેબ બ્રાઉઝર છે જે પ્રકાશની ગતિએ વેબપૃષ્ઠો અને એપ્લિકેશંસને ચલાવે છે. તે ઝડપી, સ્થિર અને ઉપયોગમાં સરળ છે. Google Chromium માં નિર્મિત મૉલવેર અને ફિશીંગ સુરક્ષા સાથે વેબને વધુ સુરક્ષિત રૂપે બ્રાઉઝ કરો.</translation> -<translation id="6424492062988593837">Chrome હમણાં જ વધુ સારું થયું છે! નવું સંસ્કરણ ઉપલબ્ધ છે.</translation> <translation id="6475912303565314141">જ્યારે તમે Chromium શરૂ કરો ત્યારે કયું પૃષ્ઠ બતાવવામાં આવે તે તેનું પણ નિયંત્રણ કરે છે.</translation> <translation id="6485906693002546646">તમે તમારી Chromium સામગ્રીનું સમન્વયન કરવા માટે <ph name="PROFILE_EMAIL" /> નો ઉપયોગ કરી રહ્યાં છો. તમારી સમન્વયન પસંદગીને અપડેટ કરવા માટે અથવા Chromium ને Google એકાઉન્ટ વગર ઉપયોગ કરવા માટે, <ph name="SETTINGS_LINK" /> ની મુલાકાત લો.</translation> <translation id="6510925080656968729">Chromium ને અનઇન્સ્ટોલ કરો</translation>
diff --git a/chrome/app/resources/chromium_strings_hi.xtb b/chrome/app/resources/chromium_strings_hi.xtb index 0f3d9a3..f517a00 100644 --- a/chrome/app/resources/chromium_strings_hi.xtb +++ b/chrome/app/resources/chromium_strings_hi.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">आपके क्रोमियम डेटा से संबंधित महत्वपूर्ण जानकारी</translation> <translation id="459535195905078186">क्रोमियम ऐप्स</translation> <translation id="4677944499843243528">ऐसा लगता है कि प्रोफ़ाइल का उपयोग अन्य क्रोमियम प्रोसेस (<ph name="PROCESS_ID" />) द्वारा किसी अन्य कंप्यूटर (<ph name="HOST_NAME" />) पर किया जा रहा है. क्रोमियम ने प्रोफ़ाइल को लॉक कर दिया है ताकि वह दूषित न हो. यदि आप सुनिश्चित हैं कि कोई अन्य प्रोसेस इस प्रोफ़ाइल का उपयोग नहीं कर रही हैं, तो आप प्रोफ़ाइल को अनलॉक कर सकते हैं और क्रोमियम को फिर से लॉन्च कर सकते हैं.</translation> -<translation id="473775607612524610">अपडेट करें</translation> <translation id="4743926867934016338">स्वीकार करें और खोजें</translation> <translation id="4888717733111232871">mDNS ट्रैफ़िक की अनुमति देने के लिए क्रोमियम के लिए इनबाउंड नियम.</translation> <translation id="4943838377383847465">क्रोमियम पृष्ठभूमि मोड में है.</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">अब अपने Google खाते के साथ और साझा किए गए कंप्यूटर पर क्रोमियम का उपयोग करना आसान हो गया है.</translation> <translation id="6373523479360886564">क्या आप वाकई क्रोमियम को अनइंस्टाल करना चाहते हैं?</translation> <translation id="6403826409255603130">क्रोमियम वेब ब्राउज़र है जो बहुत तेज़ी से वेबपृष्ठ और ऐप्लिकेशन चलाता है. यह तेज़, स्थिर, और उपयोग में आसान है. क्रोमियम में अंतर्निहित मैलवेयर और फ़ीशिंग सुरक्षा के साथ अधिक आसानी से वेब ब्राउज़ करें.</translation> -<translation id="6424492062988593837">Chrome अब बेहतर हो गया है! नया वर्शन उपलब्ध है.</translation> <translation id="6475912303565314141">इससे यह भी नियंत्रित होता है कि जब आप क्रोमियम प्रारंभ करते हैं तब कौन सा पृष्ठ दिखाया जाए.</translation> <translation id="6485906693002546646">आप अपनी क्रोमियम सामग्री को समन्वयित करने के लिए <ph name="PROFILE_EMAIL" /> का उपयोग कर रहे हैं. अपनी समन्वयन प्राथमिकता को अपडेट करने या Google खाते के बिना क्रोमियम का उपयोग करने के लिए, <ph name="SETTINGS_LINK" /> पर जाएं.</translation> <translation id="6510925080656968729">क्रोमियम को अनइंस्टाल करें</translation>
diff --git a/chrome/app/resources/chromium_strings_hr.xtb b/chrome/app/resources/chromium_strings_hr.xtb index 67e0c1c..046d524 100644 --- a/chrome/app/resources/chromium_strings_hr.xtb +++ b/chrome/app/resources/chromium_strings_hr.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">Važne informacije o vašim podacima u sustavu Chromium</translation> <translation id="459535195905078186">Aplikacije sustava Chromium</translation> <translation id="4677944499843243528">Izgleda da neki drugi proces Chromiuma (<ph name="PROCESS_ID" />) na nekom drugom računalu (<ph name="HOST_NAME" />) upotrebljava taj profil. Chromium je zaključao profil da se profil ne bi promijenio. Ako ste sigurni da nijedan drugi proces ne upotrebljava taj profil, možete ga otključati i ponovo pokrenuti Chromium.</translation> -<translation id="473775607612524610">Ažuriraj</translation> <translation id="4743926867934016338">Prihvati i traži</translation> <translation id="4888717733111232871">Ulazno pravilo kako bi Chromium dopustio mDNS promet.</translation> <translation id="4943838377383847465">Chromium radi u pozadini.</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">Upotreba Chromiuma s vašim Google računom te na dijeljenim računalima sada je još jednostavnija.</translation> <translation id="6373523479360886564">Jeste li sigurni da želite deinstalirati Chromium?</translation> <translation id="6403826409255603130">Chromium je web-preglednik koji munjevitom brzinom prikazuje web-stranice i aplikacije. Brz je, stabilan i jednostavan za upotrebu. Pregledavajte web sigurnije jer je zaštita od zlonamjernog softvera i krađe identiteta ugrađena u Chromium.</translation> -<translation id="6424492062988593837">Chromium je postao još bolji! Dostupna je nova verzija.</translation> <translation id="6475912303565314141">Upravlja i time koja se stranica prikazuje prilikom pokretanja Chromiuma.</translation> <translation id="6485906693002546646">Upotrebljavate <ph name="PROFILE_EMAIL" /> za sinkronizaciju sadržaja u Chromiumu. Za ažuriranje postavki sinkroniziranja ili upotrebu Chromiuma bez Google računa posjetite <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Deinstaliranje Chromiuma</translation>
diff --git a/chrome/app/resources/chromium_strings_hu.xtb b/chrome/app/resources/chromium_strings_hu.xtb index b07b2143..22aa13f 100644 --- a/chrome/app/resources/chromium_strings_hu.xtb +++ b/chrome/app/resources/chromium_strings_hu.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">Fontos információ az Ön Chromium-adatairól</translation> <translation id="459535195905078186">Chromium-alkalmazások</translation> <translation id="4677944499843243528">Úgy tűnik, a profilt egy másik Chromium-folyamat (<ph name="PROCESS_ID" />) használja egy másik számítógépen (<ph name="HOST_NAME" />). A Chromium zárolta a profilt, hogy az ne sérülhessen. Ha biztos benne, hogy nem használja másik folyamat a profilt, feloldhatja azt, és újraindíthatja a Chromiumot.</translation> -<translation id="473775607612524610">Frissítés</translation> <translation id="4743926867934016338">Elfogadás és keresés</translation> <translation id="4888717733111232871">Bejövő szabály a Chromiumhoz az mDNS forgalom engedélyezése céljából.</translation> <translation id="4943838377383847465">A Chromium háttérmódban van.</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">Google-fiókjával most még egyszerűbben használhatja a Chromiumot közösen használt számítógépeken.</translation> <translation id="6373523479360886564">Biztos, hogy el szeretné távolítani a Chromiumot?</translation> <translation id="6403826409255603130">A Chromium olyan böngésző, amely villámgyorsan futtatja a weboldalakat és az alkalmazásokat. Gyors, stabil és könnyen használható. A beépített, adathalászat és kártékony programok elleni védelemmel biztonságosabban böngészhet az interneten.</translation> -<translation id="6424492062988593837">A Chromium most még jobb lett! Új verzió áll rendelkezésre.</translation> <translation id="6475912303565314141">Továbbá azt is szabályozza, hogy melyik oldal jelenik meg a Chromium indításakor.</translation> <translation id="6485906693002546646">Chromiumos dolgainak szinkronizálásához a(z) <ph name="PROFILE_EMAIL" /> fiókot használja. Szinkronizálási beállításainak frissítéséhez, illetve a Chromium Google-fiók nélküli használatához keresse fel a <ph name="SETTINGS_LINK" /> linket.</translation> <translation id="6510925080656968729">Chromium eltávolítása</translation>
diff --git a/chrome/app/resources/chromium_strings_id.xtb b/chrome/app/resources/chromium_strings_id.xtb index b1089182..43aed7f0 100644 --- a/chrome/app/resources/chromium_strings_id.xtb +++ b/chrome/app/resources/chromium_strings_id.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">Informasi penting terkait data Chromium Anda</translation> <translation id="459535195905078186">Aplikasi Chromium</translation> <translation id="4677944499843243528">Profil tersebut mungkin digunakan pada proses Chromium lainnya (<ph name="PROCESS_ID" />) pada komputer lain (<ph name="HOST_NAME" />). Chromium telah mengunci profil tersebut agar tidak rusak. Jika yakin tidak ada proses lain yang menggunakan profil tersebut, Anda dapat membuka profil dan meluncurkan Chromium kembali.</translation> -<translation id="473775607612524610">Mutakhirkan</translation> <translation id="4743926867934016338">Terima & Telusuri</translation> <translation id="4888717733111232871">Inbound rule untuk Chromium guna mengizinkan lalu lintas mDNS.</translation> <translation id="4943838377383847465">Chromium berjalan di mode latar belakang.</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">Kini, menggunakan Chromium dengan Akun Google Anda dan di komputer bersama jadi lebih mudah.</translation> <translation id="6373523479360886564">Anda yakin ingin mencopot pemasangan Chromium?</translation> <translation id="6403826409255603130">Chromium adalah browser web yang menjalankan laman web dan aplikasi dengan kecepatan kilat. Browser ini cepat, stabil, dan mudah digunakan. Jelajahi web lebih aman dengan perlindungan dari perangkat lunak perusak dan phishing yang tertanam di dalam Chromium.</translation> -<translation id="6424492062988593837">Chromium jadi semakin baik! Versi baru telah tersedia.</translation> <translation id="6475912303565314141">Juga mengontrol laman apa yang ditampilkan saat Anda memulai Chromium.</translation> <translation id="6485906693002546646">Anda menggunakan <ph name="PROFILE_EMAIL" /> untuk menyinkronkan barang-barang Chromium. Untuk memperbarui preferensi sinkronisasi atau menggunakan Chromium tanpa akun Google, kunjungi <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Copot Pemasangan Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_it.xtb b/chrome/app/resources/chromium_strings_it.xtb index 0ba5301..8849cfd 100644 --- a/chrome/app/resources/chromium_strings_it.xtb +++ b/chrome/app/resources/chromium_strings_it.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">Informazioni importanti relative ai tuoi dati Chromium</translation> <translation id="459535195905078186">Applicazioni Chromium</translation> <translation id="4677944499843243528">Sembra che il profilo sia in uso in un altro processo Chromium (<ph name="PROCESS_ID" />) su un altro computer (<ph name="HOST_NAME" />). Chromium ha bloccato il profilo affinché non venga danneggiato. Se sei sicuro che nessun altro processo stia utilizzando questo profilo, puoi sbloccare il profilo e riavviare Chromium.</translation> -<translation id="473775607612524610">Aggiorna</translation> <translation id="4743926867934016338">Accetta e cerca</translation> <translation id="4888717733111232871">Regola inbound per consentire il traffico mDNS in Chromium.</translation> <translation id="4943838377383847465">Chromium è in modalità background.</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">Ora è più facile utilizzare Chromium con il tuo account Google e sui computer condivisi.</translation> <translation id="6373523479360886564">Vuoi disinstallare Chromium?</translation> <translation id="6403826409255603130">Chromium è un browser web che esegue le pagine web e le applicazioni alla velocità della luce. È veloce, stabile e facile da utilizzare. Naviga su Internet in modo più sicuro grazie alla protezione da malware e phishing integrata in Chromium.</translation> -<translation id="6424492062988593837">Chromium è stato migliorato. È disponibile una nuova versione.</translation> <translation id="6475912303565314141">Controlla anche la pagina visualizzata all'avvio di Chromium.</translation> <translation id="6485906693002546646">Stai utilizzando <ph name="PROFILE_EMAIL" /> per sincronizzare i tuoi contenuti di Chromium. Per aggiornare la tua preferenza di sincronizzazione o per utilizzare Chromium senza un account Google, accedi alla pagina <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Disinstalla Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_iw.xtb b/chrome/app/resources/chromium_strings_iw.xtb index 4a14bc0..d4c4b0c4 100644 --- a/chrome/app/resources/chromium_strings_iw.xtb +++ b/chrome/app/resources/chromium_strings_iw.xtb
@@ -104,7 +104,6 @@ <translation id="457845228957001925">מידע חשוב בנוגע לנתונים שלך ב-Chromium</translation> <translation id="459535195905078186">יישומי Chromium</translation> <translation id="4677944499843243528">נראה שהפרופיל נמצא בשימוש על ידי תהליך Chromium אחר (<ph name="PROCESS_ID" />) במחשב אחר (<ph name="HOST_NAME" />). Chromium נעל את הפרופיל כדי שלא ייפגם. אם אתה משוכנע שאף תהליך אחר אינו משתמש בפרופיל זה, תוכל לבטל את נעילת הפרופיל ולהפעיל את Chromium מחדש.</translation> -<translation id="473775607612524610">עדכן</translation> <translation id="4743926867934016338">אשר וחפש</translation> <translation id="4888717733111232871">כלל נכנס עבור Chromium על מנת לאפשר תנועת mDNS.</translation> <translation id="4943838377383847465">Chromium נמצא במצב רקע.</translation> @@ -138,7 +137,6 @@ <translation id="6334986366598267305">קל יותר כעת להשתמש ב-Chromium באמצעות חשבון Google שלך ובמחשבים משותפים.</translation> <translation id="6373523479360886564">האם אתה בטוח שברצונך להסיר את התקנת Chromium?</translation> <translation id="6403826409255603130">Chromium הוא דפדפן אינטרנט המפעיל דפי אינטרנט ואפליקציות במהירות הבזק. זהו דפדפן מהיר, יציב וקל לשימוש. תוכל לגלוש באינטרנט בצורה מאובטחת יותר הודות להגנה מפני תוכנות זדוניות ודיוג המובנית ב-Chromium.</translation> -<translation id="6424492062988593837">Chromium ממשיך להשתפר! קיימת גירסה חדשה.</translation> <translation id="6475912303565314141">הגדרה זו גם קובעת איזה דף מוצג כשאתה מפעיל את Chromium.</translation> <translation id="6485906693002546646">אתה משתמש ב-<ph name="PROFILE_EMAIL" /> כדי לסנכרן את הפריטים שלך ב-Chromium. עבור אל '<ph name="SETTINGS_LINK" />' כדי לעדכן את העדפות הסנכרון או להשתמש ב-Chromium ללא חשבון Google.</translation> <translation id="6510925080656968729">הסר את התקנת Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_ja.xtb b/chrome/app/resources/chromium_strings_ja.xtb index 93e03fd..9087354 100644 --- a/chrome/app/resources/chromium_strings_ja.xtb +++ b/chrome/app/resources/chromium_strings_ja.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">Chromium データに関する重要な情報</translation> <translation id="459535195905078186">Chromium アプリ</translation> <translation id="4677944499843243528">プロフィールは、別のコンピュータ(<ph name="HOST_NAME" />)の別の Chromium プロセス(<ph name="PROCESS_ID" />)で使用されているようです。Chromium はプロフィールが破損しないようにプロフィールをロックしています。他のプロセスがこのプロフィールを使用していないことが確実であれば、プロフィールのロックを解除して Chromium を再起動できます。</translation> -<translation id="473775607612524610">アップデート</translation> <translation id="4743926867934016338">承諾して検索</translation> <translation id="4888717733111232871">mDNS トラフィックを許可する Chromium のインバウンド ルールです。</translation> <translation id="4943838377383847465">Chromium はバックグラウンド モードです。</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">共有パソコンの Chromium で Google アカウントが簡単に使用できるようになりました。</translation> <translation id="6373523479360886564">Chromium をアンインストールしてもよろしいですか?</translation> <translation id="6403826409255603130">Chromium は、ウェブページやアプリケーションを高速に実行できるスピードと、高い安定性を兼ね備えた非常に使いやすいウェブブラウザです。不正なソフトウェアやフィッシングに対する保護機能が組み込まれており、ウェブを安全にブラウジングできます。</translation> -<translation id="6424492062988593837">Chromium のアップデートが見つかりました。新しいバージョンが利用可能です。</translation> <translation id="6475912303565314141">この拡張機能では、Chromium の起動時に表示されるページも制御されます。</translation> <translation id="6485906693002546646">Chromium データの同期に <ph name="PROFILE_EMAIL" /> を使用しています。同期設定を更新する、または Google アカウントなしで Chromium を使用するには、<ph name="SETTINGS_LINK" /> にアクセスしてください。</translation> <translation id="6510925080656968729">Chromium をアンインストール</translation>
diff --git a/chrome/app/resources/chromium_strings_kn.xtb b/chrome/app/resources/chromium_strings_kn.xtb index 10db2f8..5735de9 100644 --- a/chrome/app/resources/chromium_strings_kn.xtb +++ b/chrome/app/resources/chromium_strings_kn.xtb
@@ -104,7 +104,6 @@ <translation id="457845228957001925">ನಿಮ್ಮ Chromium ಡೇಟಾಗೆ ಸಂಬಂಧಿಸಿದ ಪ್ರಮುಖ ಮಾಹಿತಿ</translation> <translation id="459535195905078186">Chromium ಅಪ್ಲಿಕೇಶನ್ಗಳು</translation> <translation id="4677944499843243528">ಮತ್ತೊಂದು ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ (<ph name="HOST_NAME" />) ಇನ್ನೊಂದು Chromium ಪ್ರಕ್ರಿಯೆಯ (<ph name="PROCESS_ID" />) ಮೂಲಕ ಪ್ರೊಫೈಲ್ ಬಳಕೆಯಲ್ಲಿರುವಂತೆ ತೋರುತ್ತಿದೆ. ಪ್ರೊಫೈಲ್ ದೋಷಪೂರಿತಗೊಳ್ಳದಂತೆ ಅದನ್ನು Chromium ಲಾಕ್ ಮಾಡಿದೆ. ಇತರ ಯಾವುದೇ ಪ್ರಕ್ರಿಯೆಗಳು ಈ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಬಳಸುತ್ತಿಲ್ಲವೆಂದು ನಿಮಗೆ ಖಚಿತವಾಗಿದ್ದರೆ, ನೀವು ಪ್ರೊಫೈಲ್ ಅನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಬಹುದು ಮತ್ತು Chromium ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಬಹುದು.</translation> -<translation id="473775607612524610">ಅಪ್ಡೇಟ್</translation> <translation id="4743926867934016338">ಸಮ್ಮತಿಸಿ & ಹುಡುಕಿ</translation> <translation id="4888717733111232871">mDNS ಟ್ರಾಫಿಕ್ಗೆ ಅನುಮತಿಸುವ ನಿಟ್ಟಿನಲ್ಲಿ Chromium ಗೆ ಒಳಬರುವ ನಿಯಮ.</translation> <translation id="4943838377383847465">Chromium ಹಿನ್ನೆಲೆ ಮೋಡ್ನಲ್ಲಿದೆ.</translation> @@ -138,7 +137,6 @@ <translation id="6334986366598267305">ನಿಮ್ಮ Google ಖಾತೆಯ ಮೂಲಕ ಮತ್ತು ಹಂಚಿದ ಕಂಪ್ಯೂಟರ್ಗಳಲ್ಲಿ Chromium ಬಳಕೆಯು ಇದೀಗ ತುಂಬಾ ಸುಲಭವಾಗಿದೆ.</translation> <translation id="6373523479360886564">Chromium ಅಸ್ಥಾಪಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?</translation> <translation id="6403826409255603130">Chromium ಒಂದು ವೆಬ್ ಬ್ರೌಸರ್ ಆಗಿದ್ದು ವೆಬ್ಪುಟಗಳನ್ನು ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ವೇಗದೊಂದಿಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಇದು ವೇಗವಾದ, ಸ್ಥಿರವಾದ, ಮತ್ತು ಬಳಸಲು ಸುಲಭವಾಗಿದೆ. ಮಾಲ್ವೇರ್ನೊಂದಿಗೆ ಹೆಚ್ಚು ಸುರಕ್ಷಿತವಾಗಿ ಹಾಗೂ Chromium ನಲ್ಲಿ ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ ಫಿಶಿಂಗ್ ಸುರಕ್ಷೆಯೊಂದಿಗೆ ವೆಬ್ ಅನ್ನು ಬ್ರೌಸ್ ಮಾಡಿ.</translation> -<translation id="6424492062988593837">Chrome ಈಗ ತಾನೇ ಉತ್ತಮಗೊಂಡಿದೆ! ಹೊಸ ಆವೃತ್ತಿ ಲಭ್ಯವಿದೆ.</translation> <translation id="6475912303565314141">ನೀವು Chromium ಪ್ರಾರಂಭಿಸಿದಾಗ ತೋರಿಸಬೇಕಾದ ಪುಟವನ್ನು ಕೂಡಾ ಇದು ನಿಯಂತ್ರಿಸುತ್ತದೆ.</translation> <translation id="6485906693002546646">ನಿಮ್ಮ Chromium ವಿಷಯವನ್ನು ಸಿಂಕ್ ಮಾಡಲು ನೀವು <ph name="PROFILE_EMAIL" /> ಅನ್ನು ಬಳಸುತ್ತಿರುವಿರಿ. Google ಖಾತೆ ಇಲ್ಲದೆ ನಿಮ್ಮ ಸಿಂಕ್ ಪ್ರಾಶಸ್ತ್ಯಗಳನ್ನು ನವೀಕರಿಸಲು ಅಥವಾ Chromium ಬಳಸಲು, <ph name="SETTINGS_LINK" /> ಭೇಟಿ ನೀಡಿ.</translation> <translation id="6510925080656968729">Chromium ಅಸ್ಥಾಪಿಸಿ</translation>
diff --git a/chrome/app/resources/chromium_strings_ko.xtb b/chrome/app/resources/chromium_strings_ko.xtb index fa4ae0a..dfa48ae 100644 --- a/chrome/app/resources/chromium_strings_ko.xtb +++ b/chrome/app/resources/chromium_strings_ko.xtb
@@ -108,7 +108,6 @@ <translation id="457845228957001925">Chromium 데이터 관련 중요 정보</translation> <translation id="459535195905078186">Chromium 앱</translation> <translation id="4677944499843243528">다른 컴퓨터(<ph name="HOST_NAME" />)의 다른 Chromium 프로세스(<ph name="PROCESS_ID" />)에서 프로필을 사용 중인 것 같습니다. 프로필이 손상되지 않도록 Chromium에서 잠금 설정했습니다. 다른 프로세스에서 프로필을 사용 중이지 않은 것이 확실한 경우 프로필을 잠금 해제하고 Chromium을 다시 시작하세요.</translation> -<translation id="473775607612524610">업데이트</translation> <translation id="4743926867934016338">동의 및 검색</translation> <translation id="4888717733111232871">Chromium이 mDNS 트래픽을 허용하는 인바운드 규칙입니다.</translation> <translation id="4943838377383847465">Chromium이 백그라운드 모드로 실행 중입니다.</translation> @@ -142,7 +141,6 @@ <translation id="6334986366598267305">이제 Google 계정으로 공유 컴퓨터에서 Chromium을 손쉽게 사용할 수 있습니다.</translation> <translation id="6373523479360886564">Chromium을 제거하시겠습니까?</translation> <translation id="6403826409255603130">Chromium은 빠른 속도로 웹페이지와 애플리케이션을 실행하는 웹 브라우저입니다. 빠르고 안정적이며 사용하기에 편리합니다. Chromium에 내장된 멀웨어 및 악성 코드 방지 기능을 사용하여 더욱 안전하게 웹을 검색하세요.</translation> -<translation id="6424492062988593837">한층 개선된 Chromium의 최신 버전이 출시되었습니다.</translation> <translation id="6475912303565314141">또한 Chromium을 시작할 때 표시되는 페이지를 설정합니다.</translation> <translation id="6485906693002546646">Chromium 콘텐츠를 동기화하기 위해 <ph name="PROFILE_EMAIL" />을(를) 사용 중입니다. 동기화 환경설정을 업데이트하거나 Google 계정 없이 Chromium을 사용하려면 <ph name="SETTINGS_LINK" />(으)로 이동하세요.</translation> <translation id="6510925080656968729">Chromium 설치 제거</translation>
diff --git a/chrome/app/resources/chromium_strings_lt.xtb b/chrome/app/resources/chromium_strings_lt.xtb index bba89f4..c0aac1e 100644 --- a/chrome/app/resources/chromium_strings_lt.xtb +++ b/chrome/app/resources/chromium_strings_lt.xtb
@@ -108,7 +108,6 @@ <translation id="457845228957001925">Svarbi informacija apie jūsų „Chromium“ duomenis</translation> <translation id="459535195905078186">„Chromium“ programos</translation> <translation id="4677944499843243528">Atrodo, kad profilį naudoja kitas „Chromium“ procesas (<ph name="PROCESS_ID" />) kitame kompiuteryje (<ph name="HOST_NAME" />). „Chromium“ užrakino profilį, kad jis nebūtų sugadintas. Jei esate tikri, kad jokie kiti procesai nenaudoja šio profilio, galite atrakinti profilį ir iš naujo paleisti „Chromium“.</translation> -<translation id="473775607612524610">Atnaujinti</translation> <translation id="4743926867934016338">Sutikti ir ieškoti</translation> <translation id="4888717733111232871">„Chromium“ skirta taisyklė, pagal kurią leidžiamas mDNS srautas.</translation> <translation id="4943838377383847465">„Chromium“ veikia fono režimu.</translation> @@ -142,7 +141,6 @@ <translation id="6334986366598267305">Dabar galite lengviau naudoti „Chromium“ naudodami „Google“ paskyrą ir bendrinamus kompiuterius.</translation> <translation id="6373523479360886564">Ar tikrai norite pašalinti „Chromium"?</translation> <translation id="6403826409255603130">„Chromium“ – tai žiniatinklio naršyklė, kurią naudojant akimirksniu paleidžiami tinklalapiai ir programos. Ji greita, stabili ir lengvai naudojama. Saugiau naršykite žiniatinklį naudodami į „Chromium“ integruotą apsaugą nuo kenkėjiškų programų ir sukčiavimo.</translation> -<translation id="6424492062988593837">„Chromium“ patobulėjo! Galima nauja versija.</translation> <translation id="6475912303565314141">Ji taip pat kontroliuoja, koks puslapis rodomas, kai paleidžiate „Chromium“.</translation> <translation id="6485906693002546646">Sinchronizuoti „Chromium“ duomenims naudojate <ph name="PROFILE_EMAIL" />. Jei norite atnaujinti sinchronizavimo nuostatą arba naudoti „Chromium“ be „Google“ paskyros, apsilankykite <ph name="SETTINGS_LINK" /> skiltyje.</translation> <translation id="6510925080656968729">Pašalinti „Chromium“</translation>
diff --git a/chrome/app/resources/chromium_strings_lv.xtb b/chrome/app/resources/chromium_strings_lv.xtb index 5cea9872..3e9fd55 100644 --- a/chrome/app/resources/chromium_strings_lv.xtb +++ b/chrome/app/resources/chromium_strings_lv.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">Svarīga informācija par jūsu datiem operētājsistēmā Chromium</translation> <translation id="459535195905078186">Chromium lietotnes</translation> <translation id="4677944499843243528">Šķiet, ka profils tiek izmantots citā Chromium procesā (<ph name="PROCESS_ID" />) citā datorā (<ph name="HOST_NAME" />). Lai profils netiktu bojāts, pārlūkā Chromium tas ir bloķēts. Ja esat pārliecināts, ka šis profils netiek izmantots citos procesos, varat to atbloķēt un restartēt pārlūku Chromium.</translation> -<translation id="473775607612524610">Atjaunināt</translation> <translation id="4743926867934016338">Pieņemt un meklēt</translation> <translation id="4888717733111232871">Ienākošo savienojumu kārtula pārlūkam Chromium, lai atļautu mDNS datplūsmu.</translation> <translation id="4943838377383847465">Chromium darbojas fona režīmā.</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">Tagad pārlūkā Chromium ir vieglāk izmantot Google kontu, kā arī ir atvieglota lietošana datoros, ko izmanto vairākas personas.</translation> <translation id="6373523479360886564">Vai tiešām vēlaties atinstalēt pārlūku Chromium?</translation> <translation id="6403826409255603130">Chromium ir tīmekļa pārlūks, kas darbina tīmekļa lapas un lietojumprogrammas zibenīgā ātrumā. Tas ir ātrs, stabils un ērti lietojams. Pārlūkojiet tīmekli vēl drošāk ar aizsardzību pret ļaunprātīgu programmatūru un pikšķerēšanu, kas iebūvēta pārlūkā Chromium.</translation> -<translation id="6424492062988593837">Lietojumprogramma Chromium ir uzlabota! Ir pieejama jauna versija.</translation> <translation id="6475912303565314141">Tas nosaka arī to, kāda lapa tiks rādīta, kad atvērsiet pārlūku Chromium.</translation> <translation id="6485906693002546646">Chromium satura sinhronizēšanai jūs izmantojat kontu <ph name="PROFILE_EMAIL" />. Lai atjauninātu savas sinhronizācijas preferences vai izmantotu Chromium bez Google konta, dodieties uz: <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Atinstalēt Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_ml.xtb b/chrome/app/resources/chromium_strings_ml.xtb index af17f323..bb49942 100644 --- a/chrome/app/resources/chromium_strings_ml.xtb +++ b/chrome/app/resources/chromium_strings_ml.xtb
@@ -109,7 +109,6 @@ <translation id="457845228957001925">നിങ്ങളുടെ Chromium ഡാറ്റയെ സംബന്ധിച്ച പ്രധാനപ്പെട്ട വിവരങ്ങൾ</translation> <translation id="459535195905078186">Chromium അപ്ലിക്കേഷനുകൾ</translation> <translation id="4677944499843243528">മറ്റൊരു കമ്പ്യൂട്ടറിൽ (<ph name="HOST_NAME" />) മറ്റൊരു Chromium പ്രോസസ്സ് (<ph name="PROCESS_ID" />) പ്രൊഫൈൽ ഉപയോഗിക്കുന്നതുപോലെ തോന്നുന്നു. Chromium പ്രൊഫൈൽ ലോക്കുചെയ്തതിനാൽ ഇത് കേടാകുകയില്ല. മറ്റ് പ്രോസസ്സുകളൊന്നും ഈ പ്രൊഫൈൽ ഉപയോഗിക്കുന്നില്ലെന്ന് ഉറപ്പാണെങ്കിൽ നിങ്ങൾക്ക് പ്രൊഫൈൽ അൺലോക്കുചെയ്ത് Chromium വീണ്ടും സമാരംഭിക്കാം.</translation> -<translation id="473775607612524610">അപ്ഡേറ്റുചെയ്യുക</translation> <translation id="4743926867934016338">അംഗീകരിച്ച് തിരയുക</translation> <translation id="4888717733111232871">mDNS ട്രാഫിക്ക് അനുവദിക്കാൻ Chromium-നുള്ള ഇൻബൗണ്ട് നയം.</translation> <translation id="4943838377383847465">Chromium പശ്ചാത്തല മോഡിലാണ്.</translation> @@ -143,7 +142,6 @@ <translation id="6334986366598267305">ഇപ്പോൾ നിങ്ങളുടെ Google അക്കൗണ്ട് ഉപയോഗിച്ച്, പങ്കിട്ട കമ്പ്യൂട്ടറുകളിൽ Chromium ഉപയോഗിക്കാൻ എളുപ്പമാണ്.</translation> <translation id="6373523479360886564">Chromium അൺഇൻസ്റ്റാളുചെയ്യാൻ നിങ്ങൾ താൽപ്പര്യപ്പെടുന്നുവെന്ന് തീർച്ചയാണോ?</translation> <translation id="6403826409255603130">മിന്നൽ വേഗത്തിൽ വെബ്പേജുകളും അപ്ലിക്കേഷനുകളും പ്രവർത്തിപ്പിക്കുന്ന ഒരു വെബ് ബ്രൗസറാണ് Chromium. ഇത് വേഗതയുള്ളതും സ്ഥിരതയാർന്നതും ഉപയോഗിക്കാൻ എളുപ്പമുള്ളതുമാണ്. Chromium-ൽ അന്തർനിർമ്മിതമായ ക്ഷുദ്രവെയർ, ഫിഷിംഗ് എന്നിവയ്ക്കെതിരായുള്ള പരിരക്ഷയോടൊപ്പം കൂടുതൽ സുരക്ഷിതമായി വെബ് ബ്രൗസുചെയ്യുക.</translation> -<translation id="6424492062988593837">Chromium ഒന്നുകൂടി മികച്ചതായി! ഒരു പുതിയ പതിപ്പ് ലഭ്യമാണ്.</translation> <translation id="6475912303565314141">നിങ്ങൾ Chromium ആരംഭിക്കുമ്പോൾ ദൃശ്യമാകുന്ന പേജും അത് നിയന്ത്രിയ്ക്കും.</translation> <translation id="6485906693002546646">Chromium ഫയൽ സമന്വയിപ്പിക്കാൻ നിങ്ങൾ <ph name="PROFILE_EMAIL" /> ഉപയോഗിക്കുന്നു. നിങ്ങളുടെ സമന്വയ മുൻഗണനകൾ അപ്ഡേറ്റുചെയ്യാനോ ഒരു Google അക്കൗണ്ട് ഇല്ലാതെ Chromium ഉപയോഗിക്കാനോ, <ph name="SETTINGS_LINK" /> സന്ദർശിക്കുക.</translation> <translation id="6510925080656968729">Chromium അൺഇൻസ്റ്റാളുചെയ്യുക</translation>
diff --git a/chrome/app/resources/chromium_strings_mr.xtb b/chrome/app/resources/chromium_strings_mr.xtb index d85947ae..f1923f70 100644 --- a/chrome/app/resources/chromium_strings_mr.xtb +++ b/chrome/app/resources/chromium_strings_mr.xtb
@@ -107,7 +107,6 @@ <translation id="457845228957001925">आपल्या Chromium डेटाशी संबंधित महत्त्वाची माहिती</translation> <translation id="459535195905078186">Chromium Apps</translation> <translation id="4677944499843243528">प्रोफाईल दुसर्या संगणकावरील (<ph name="HOST_NAME" />) दुसर्या Chromium प्रक्रियेद्वारे (<ph name="PROCESS_ID" />) वापरले जात असल्याचे दिसते. Chromium ने प्रोफाईल लॉक केले आहे जेणेकरून ते दूषित होत नाही. कोणतीही अन्य प्रक्रिया हे प्रोफाईल वापरत नसल्याची आपल्याला खात्री असल्यास, आपण प्रोफाईल अनलॉक करू शकता आणि Chromium रीलाँच करू शकता.</translation> -<translation id="473775607612524610">अद्यतनित करा</translation> <translation id="4743926867934016338">स्वीकार करा आणि शोधा</translation> <translation id="4888717733111232871">mDNS रहदारीस अनुमती देण्यासाठी Chromium साठी अंतर्गामी नियम.</translation> <translation id="4943838377383847465">Chromium पार्श्वभूमी मोड मध्ये आहे.</translation> @@ -141,7 +140,6 @@ <translation id="6334986366598267305">आता आपल्या Google खात्यावर आणि सामायिक केलेल्या संगणकांवर Chromium वापरणे अधिक सुलभ आहे.</translation> <translation id="6373523479360886564">आपल्याला खात्री आहे की आपण Chromium विस्थापित करू इच्छिता?</translation> <translation id="6403826409255603130">Chromium हे एक वेबब्राउझर असून ते वेबपृष्ठे आणि अनुप्रयोग अतिशय वेगात चालवते. हे वापरण्यास जलद, स्थिर आणि सोपे आहे. Chromium मध्ये तयार करण्यासाठी मालवेयर आणि फिशिंग संरक्षणासह वेब अधिक सुरक्षितपणे ब्राउझ करा.</translation> -<translation id="6424492062988593837">Chrome आता सर्वोत्तम झाले आहे! नवीन आवृत्ती उपलब्ध आहे.</translation> <translation id="6475912303565314141">आपण Chromium प्रारंभ करता तेव्हा कोणते पृष्ठ दर्शविले जाते हे देखील हे नियंत्रित करते.</translation> <translation id="6485906693002546646">आपण आपली Chromium सामग्री संकालित करण्यासाठी <ph name="PROFILE_EMAIL" /> वापरत आहात. आपले संकालन प्राधान्य अद्यतनित करण्यासाठी किंवा Google खाते न सोडता Chromium वापरण्यासाठी, <ph name="SETTINGS_LINK" /> ला भेट द्या.</translation> <translation id="6510925080656968729">Chromium विस्थापित करा</translation>
diff --git a/chrome/app/resources/chromium_strings_ms.xtb b/chrome/app/resources/chromium_strings_ms.xtb index 718d2695..5693459 100644 --- a/chrome/app/resources/chromium_strings_ms.xtb +++ b/chrome/app/resources/chromium_strings_ms.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">Maklumat penting mengenai data Chromium anda</translation> <translation id="459535195905078186">Apl Chromium</translation> <translation id="4677944499843243528">Nampaknya profil digunakan oleh proses Chromium lain (<ph name="PROCESS_ID" />) pada komputer lain (<ph name="HOST_NAME" />). Chromium telah mengunci profil supaya profil tidak rosak. Jika anda pasti tiada proses lain yang menggunakan profil ini, anda boleh membuka profil dan melancarkan semula Chromium.</translation> -<translation id="473775607612524610">Kemas kini</translation> <translation id="4743926867934016338">Terima & Cari</translation> <translation id="4888717733111232871">Peraturan masuk bagi Chromium untuk membolehkan trafik mDNS.</translation> <translation id="4943838377383847465">Chromium dalam mod latar belakang.</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">Kini lebih mudah menggunakan Chromium dengan Akaun Google anda dan pada komputer yang dikongsi.</translation> <translation id="6373523479360886564">Adakah anda pasti mahu menyahpasang Chromium?</translation> <translation id="6403826409255603130">Chromium merupakan penyemak imbas yang mengendalikan laman web dan aplikasi dengan kelajuan sepantas kilat. Chromium cepat, stabil dan mudah digunakan. Semak imbas web lebih selamat dengan perlindungan perisian hasad dan pancingan data terbina dalam Chromium.</translation> -<translation id="6424492062988593837">Chromium telah dipertingkatkan! Versi baharu kini boleh didapati.</translation> <translation id="6475912303565314141">Sambungan turut mengawal halaman yang ditunjukkan apabila anda memulakan Chromium.</translation> <translation id="6485906693002546646">Anda menggunakan <ph name="PROFILE_EMAIL" /> untuk menyegerakkan bahan digital chromium anda. Untuk mengemas kini pilihan penyegerakan anda atau menggunakan Chromium tanpa akaun Google, lawati <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Nyahpasang Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_nl.xtb b/chrome/app/resources/chromium_strings_nl.xtb index dba6cfe..c7e40ab 100644 --- a/chrome/app/resources/chromium_strings_nl.xtb +++ b/chrome/app/resources/chromium_strings_nl.xtb
@@ -108,7 +108,6 @@ <translation id="457845228957001925">Belangrijke informatie over je Chromium-gegevens</translation> <translation id="459535195905078186">Chromium-apps</translation> <translation id="4677944499843243528">Het profiel lijkt te worden gebruikt door een ander proces in Chromium (<ph name="PROCESS_ID" />) op een andere computer (<ph name="HOST_NAME" />). Het profiel is vergrendeld zodat het niet wordt beschadigd. Als je zeker weet dat dit profiel niet door andere processen wordt gebruikt, kun je het profiel ontgrendelen en Chromium opnieuw starten.</translation> -<translation id="473775607612524610">Updaten</translation> <translation id="4743926867934016338">Accepteren en zoeken</translation> <translation id="4888717733111232871">Inkomende regel zodat Chromium mDNS-verkeer toestaat.</translation> <translation id="4943838377383847465">Chromium bevindt zich in de achtergrondmodus.</translation> @@ -142,7 +141,6 @@ <translation id="6334986366598267305">Het is nu gemakkelijker om Chromium met je Google-account en op gedeelde computers te gebruiken.</translation> <translation id="6373523479360886564">Weet je zeker dat je Chromium wilt verwijderen?</translation> <translation id="6403826409255603130">Chromium is een webbrowser die webpagina's en applicaties bliksemsnel uitvoert. Chromium is snel, stabiel en eenvoudig in gebruik. Surf veiliger op internet met de in Chromium ingebouwde beveiliging tegen malware en phishing.</translation> -<translation id="6424492062988593837">Chromium is nu nog beter! Er is een nieuwe versie beschikbaar.</translation> <translation id="6475912303565314141">Hiermee wordt ook gecontroleerd welke pagina wordt weergegeven wanneer je Chromium start.</translation> <translation id="6485906693002546646">Je gebruikt <ph name="PROFILE_EMAIL" /> om je Chromium-bestanden te synchroniseren. Als je je synchronisatievoorkeur wilt bijwerken of Chromium zonder een Google-account wilt gebruiken, ga je naar '<ph name="SETTINGS_LINK" />'.</translation> <translation id="6510925080656968729">Chromium verwijderen</translation>
diff --git a/chrome/app/resources/chromium_strings_no.xtb b/chrome/app/resources/chromium_strings_no.xtb index 3c2a9cd..60d8e28 100644 --- a/chrome/app/resources/chromium_strings_no.xtb +++ b/chrome/app/resources/chromium_strings_no.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">Viktig informasjon om Chromium-dataene dine</translation> <translation id="459535195905078186">Chromium-apper</translation> <translation id="4677944499843243528">Profilen ser ut til å være i bruk av en annen Chromium-prosess (<ph name="PROCESS_ID" />) på en annen datamaskin (<ph name="HOST_NAME" />). Chromium har låst profilen slik at den ikke blir infisert. Hvis du er sikker på at ingen andre prosesser bruker profilen, kan du låse opp profilen og starte Chromium på nytt.</translation> -<translation id="473775607612524610">Oppdater</translation> <translation id="4743926867934016338">Godta og søk</translation> <translation id="4888717733111232871">Regel om innkommende trafikk for Chromium for å tillate mDNS-trafikk.</translation> <translation id="4943838377383847465">Chromium er i bakgrunnsmodus.</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">Nå er det enklere å bruke Chromium med Google-kontoen din og på datamaskiner du deler med andre.</translation> <translation id="6373523479360886564">Er du sikker på at du vil avinstallere Chromium?</translation> <translation id="6403826409255603130">Chromium er en nettleser som kjører nettsider og programmer i lynets hastighet. Den er rask, stabil og enkel å bruke. Surf på nettet på en tryggere måte med Chromium, som har innebygd beskyttelse mot skadelig programvare og nettfisking.</translation> -<translation id="6424492062988593837">Chromium har blitt enda bedre. En ny versjon er nå tilgjengelig.</translation> <translation id="6475912303565314141">Den styrer også hvilken side som vises når du starter Chromium.</translation> <translation id="6485906693002546646">Du bruker <ph name="PROFILE_EMAIL" /> for synkronisering av Chromium-tingene dine. For å oppdatere alternativene for synkronisering eller bruke Chromium uten Google-konto, kan du gå til <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Avinstaller Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_pl.xtb b/chrome/app/resources/chromium_strings_pl.xtb index f69d3d3..31a2f99 100644 --- a/chrome/app/resources/chromium_strings_pl.xtb +++ b/chrome/app/resources/chromium_strings_pl.xtb
@@ -104,7 +104,6 @@ <translation id="457845228957001925">Ważne informacje dotyczące Twoich danych Chromium</translation> <translation id="459535195905078186">Aplikacje Chromium</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="473775607612524610">Aktualizuj</translation> <translation id="4743926867934016338">Zaakceptuj i szukaj</translation> <translation id="4888717733111232871">Reguła dla ruchu przychodzącego w Chromium zezwalająca na ruch mDNS.</translation> <translation id="4943838377383847465">Chromium jest w trybie działania w tle</translation> @@ -138,7 +137,6 @@ <translation id="6334986366598267305">Korzystanie z Chromium na wspólnych komputerach i przy użyciu konta Google jest teraz jeszcze łatwiejsze.</translation> <translation id="6373523479360886564">Czy na pewno chcesz odinstalować Chromium?</translation> <translation id="6403826409255603130">Chromium to przeglądarka obsługująca strony i aplikacje z szybkością błyskawicy. Jest szybka, stabilna i łatwa w użyciu. Bezpiecznie przeglądaj internet dzięki wbudowanej w Chromium ochronie przed złośliwym oprogramowaniem i phishingiem.</translation> -<translation id="6424492062988593837">Chromium jest teraz jeszcze lepsze! Dostępna jest nowa wersja.</translation> <translation id="6475912303565314141">Kontroluje także to, jaka strona wyświetla się po uruchomieniu Chromium.</translation> <translation id="6485906693002546646">Używasz adresu <ph name="PROFILE_EMAIL" /> do synchronizowania danych w Chromium. Aby zaktualizować ustawienia synchronizacji lub używać Chromium bez konta Google, wejdź na stronę <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Odinstaluj Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_pt-BR.xtb b/chrome/app/resources/chromium_strings_pt-BR.xtb index bd1ba7ea..18ab770 100644 --- a/chrome/app/resources/chromium_strings_pt-BR.xtb +++ b/chrome/app/resources/chromium_strings_pt-BR.xtb
@@ -104,7 +104,6 @@ <translation id="457845228957001925">Informação importante sobre seus dados do Chromium</translation> <translation id="459535195905078186">Aplicativos do Chromium</translation> <translation id="4677944499843243528">O perfil parece estar em uso por outro processo do Chromium (<ph name="PROCESS_ID" />) em outro computador (<ph name="HOST_NAME" />). O Chromium bloqueou o perfil para que ele não seja corrompido. Se você tiver certeza de que nenhum outro processo está usando este perfil, pode desbloquear o perfil e reiniciar o Chromium.</translation> -<translation id="473775607612524610">Atualizar</translation> <translation id="4743926867934016338">Aceitar e pesquisar</translation> <translation id="4888717733111232871">Regra interna para que o Chromium permita tráfego mDNS.</translation> <translation id="4943838377383847465">O Chromium está em modo de segundo plano.</translation> @@ -138,7 +137,6 @@ <translation id="6334986366598267305">Agora ficou mais fácil usar o Chromium com sua Conta do Google e em computadores compartilhados.</translation> <translation id="6373523479360886564">Tem certeza de que deseja desinstalar o Chromium?</translation> <translation id="6403826409255603130">O Chromium é um navegador que executa páginas e aplicativos da web com alta velocidade. É rápido, estável e fácil de usar. Navegue na web com mais segurança com a proteção contra malware e phishing incorporada ao Chromium.</translation> -<translation id="6424492062988593837">O Chromium ficou ainda melhor! Uma nova versão está disponível.</translation> <translation id="6475912303565314141">Controla também qual página deve ser exibida quando você inicia o Chromium.</translation> <translation id="6485906693002546646">Você está usando <ph name="PROFILE_EMAIL" /> para sincronizar suas informações do Chromium. Para atualizar suas preferências de sincronização ou usar o Chromium sem uma Conta do Google, vá para <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Desinstalar Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_pt-PT.xtb b/chrome/app/resources/chromium_strings_pt-PT.xtb index 4483376..e0b5763 100644 --- a/chrome/app/resources/chromium_strings_pt-PT.xtb +++ b/chrome/app/resources/chromium_strings_pt-PT.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">Informações importantes acerca dos seus dados do Chromium</translation> <translation id="459535195905078186">Aplicações do Chromium</translation> <translation id="4677944499843243528">O perfil parece estar a ser utilizado por outro processo do Chromium (<ph name="PROCESS_ID" />) noutro computador (<ph name="HOST_NAME" />). O Chromium bloqueou o perfil para que não seja danificado. Se tiver a certeza de que não existem outros processos a utilizar este perfil, pode desbloqueá-lo e reiniciar o Chromium.</translation> -<translation id="473775607612524610">Actualizar</translation> <translation id="4743926867934016338">Aceitar e pesquisar</translation> <translation id="4888717733111232871">Regra de importação para o Chromium permitir o tráfego mDNS.</translation> <translation id="4943838377383847465">O Chromium está no modo em segundo plano.</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">Agora é mais fácil utilizar o Chromium com a sua Conta Google e em computadores partilhados.</translation> <translation id="6373523479360886564">Tem a certeza de que pretende desinstalar o Chromium?</translation> <translation id="6403826409255603130">O Chromium é um navegador de internet que executa páginas Web e aplicações à velocidade da luz. É rápido, estável e fácil de utilizar. Navegue na Web com mais segurança, com proteção contra programas maliciosos e phishing integrada no Chromium.</translation> -<translation id="6424492062988593837">O Chromium ficou ainda melhor! Está disponível uma nova versão.</translation> <translation id="6475912303565314141">Também controla a página apresentada quando inicia o Chromium.</translation> <translation id="6485906693002546646">Está a utilizar <ph name="PROFILE_EMAIL" /> para sincronizar os seus conteúdos do Chromium. Para atualizar a preferência de sincronização ou utilizar o Chromium sem uma Conta Google, aceda a <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Desinstalar o Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_ro.xtb b/chrome/app/resources/chromium_strings_ro.xtb index 9da8e65..070024b 100644 --- a/chrome/app/resources/chromium_strings_ro.xtb +++ b/chrome/app/resources/chromium_strings_ro.xtb
@@ -83,9 +83,9 @@ <translation id="358997566136285270">Sigla Chromium</translation> <translation id="3738139272394829648">Atinge pentru a căuta</translation> <translation id="3748537968684000502">Acum afișați o pagină Chromium securizată.</translation> -<translation id="378917192836375108">Chromium vă permite să faceți clic pe un număr de telefon de pe web pentru a-l apela cu Skype!</translation> +<translation id="378917192836375108">Chromium vă permite să dați clic pe un număr de telefon de pe web pentru a-l apela cu Skype!</translation> <translation id="3848258323044014972"><ph name="PAGE_TITLE" /> - Chromium</translation> -<translation id="3849925841547750267">Ne pare rău, setările dvs. Mozilla Firefox nu sunt disponibile cât timp browserul respectiv rulează. Pentru a importa aceste setări în Chromium, salvați ceea ce lucrați și închideți toate ferestrele Firefox. Apoi faceți clic pe Continuați.</translation> +<translation id="3849925841547750267">Ne pare rău, setările dvs. Mozilla Firefox nu sunt disponibile cât timp browserul respectiv rulează. Pentru a importa aceste setări în Chromium, salvați ceea ce lucrați și închideți toate ferestrele Firefox. Apoi dați clic pe Continuați.</translation> <translation id="3883381313049582448">Folosește parola generată de Chromium</translation> <translation id="3889543394854987837">Dați clic pe numele dvs. pentru a deschide Chromium și a începe să navigați.</translation> <translation id="390894725198123737">Pe Mac, parolele pot fi salvate în aplicația Keychain și pot fi accesate sau sincronizate de alți utilizatori Chromium care folosesc același cont de OS X.</translation> @@ -106,7 +106,6 @@ <translation id="457845228957001925">Informații importante cu privire la datele dvs. Chromium</translation> <translation id="459535195905078186">Aplicații Chromium</translation> <translation id="4677944499843243528">Profilul pare să fie utilizat de alt proces Chromium (<ph name="PROCESS_ID" />), pe alt computer (<ph name="HOST_NAME" />). Chromium a blocat profilul pentru a nu se deteriora. Dacă aveți certitudinea că profilul nu este utilizat de alte procese, puteți să îl deblocați și să relansați Chromium.</translation> -<translation id="473775607612524610">Actualizează</translation> <translation id="4743926867934016338">Acceptă și caută</translation> <translation id="4888717733111232871">Regula de intrare pentru Chromium pentru a permite traficul mDNS.</translation> <translation id="4943838377383847465">Chromium este în modul fundal.</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">Acum este mai ușor să folosiți Chromium cu Contul Google și pe computerele utilizate în comun.</translation> <translation id="6373523479360886564">Sigur doriți să dezinstalați Chromium?</translation> <translation id="6403826409255603130">Chromium este un browser web care rulează pagini web și aplicații cu viteza fulgerului. Este rapid, stabil și ușor de utilizat. Navigați pe web în condiții de mai multă siguranță, beneficiind de o protecție sporită, încorporată în Chromium, împotriva programelor malware și a tentativelor de phishing.</translation> -<translation id="6424492062988593837">Chromium a devenit și mai bun! Este disponibilă o nouă versiune.</translation> <translation id="6475912303565314141">Stabilește și ce pagină se afișează când porniți Chromium.</translation> <translation id="6485906693002546646">În prezent, folosiți <ph name="PROFILE_EMAIL" /> pentru a sincroniza datele Chromium. Pentru a actualiza preferințele de sincronizare sau pentru a folosi Chromium fără un Cont Google, accesați <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Dezinstalați Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_ru.xtb b/chrome/app/resources/chromium_strings_ru.xtb index 501d9934..92c3b5e 100644 --- a/chrome/app/resources/chromium_strings_ru.xtb +++ b/chrome/app/resources/chromium_strings_ru.xtb
@@ -104,7 +104,6 @@ <translation id="457845228957001925">Важная информация о ваших данных в Chromium</translation> <translation id="459535195905078186">Приложения Chromium</translation> <translation id="4677944499843243528">Скорее всего, профиль используется другим процессом Chromium (<ph name="PROCESS_ID" />) на другом компьютере (<ph name="HOST_NAME" />). Во избежание сбоев профиль был заблокирован. Если вы уверены, что профиль не используется другими процессами, разблокируйте его и перезапустите Chromium.</translation> -<translation id="473775607612524610">Обновление</translation> <translation id="4743926867934016338">Принимаю</translation> <translation id="4888717733111232871">Разрешить в Chromium передачу входящего трафика по протоколу mDNS</translation> <translation id="4943838377383847465">Chromium работает в фоновом режиме</translation> @@ -138,7 +137,6 @@ <translation id="6334986366598267305">Теперь с Chromium ещё удобнее работать в аккаунте Google, в том числе на общих компьютерах.</translation> <translation id="6373523479360886564">Вы действительно хотите удалить Chromium?</translation> <translation id="6403826409255603130">Chromium – браузер, который открывает веб-страницы и приложения за секунды. Он быстр, стабилен в работе и прост в использовании. Встроенная в Chromium защита от мошенничества и вредоносного ПО обеспечивает максимально безопасную работу в Интернете.</translation> -<translation id="6424492062988593837">Chromium становится лучше! Доступна новая версия.</translation> <translation id="6475912303565314141">Кроме того, расширение изменило стартовую страницу Chromium.</translation> <translation id="6485906693002546646">Для синхронизации данных Chromium используется аккаунт <ph name="PROFILE_EMAIL" />. Изменить параметры синхронизации или отключить аккаунт можно в <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Удаление Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_sk.xtb b/chrome/app/resources/chromium_strings_sk.xtb index 2dcf323..3f1d44d7 100644 --- a/chrome/app/resources/chromium_strings_sk.xtb +++ b/chrome/app/resources/chromium_strings_sk.xtb
@@ -108,7 +108,6 @@ <translation id="457845228957001925">Dôležité informácie týkajúce sa údajov prehliadača Chromium</translation> <translation id="459535195905078186">Aplikácie Chromium</translation> <translation id="4677944499843243528">Zdá sa, že profil používa ďalší proces prehliadača Chromium (<ph name="PROCESS_ID" />) na inom počítači (<ph name="HOST_NAME" />). Prehliadač Chromium daný profil uzamkol, aby sa nepoškodil. Ak s istotou viete, že tento profil nepoužívajú žiadne iné procesy, môžete ho odomknúť a prehliadač Chromium znova spustiť.</translation> -<translation id="473775607612524610">Aktualizovať</translation> <translation id="4743926867934016338">Prijať a vyhľadať</translation> <translation id="4888717733111232871">Pravidlo pre prichádzajúce prenosy pre prehliadač Chromium, ktoré povoľuje prenos dát mDNS.</translation> <translation id="4943838377383847465">Chromium je v režime na pozadí.</translation> @@ -142,7 +141,6 @@ <translation id="6334986366598267305">Teraz je používanie prehliadača Chromium s účtom Google a na zdieľaných počítačoch oveľa ľahšie.</translation> <translation id="6373523479360886564">Naozaj chcete Chromium odinštalovať?</translation> <translation id="6403826409255603130">Chromium je webový prehliadač, ktorý spúšťa webové stránky a aplikácie rýchlosťou svetla. Je rýchly, stabilný a ľahko sa používa. S ochranou proti škodlivému softvéru a phishingu, ktorá je zabudovaná do prehliadača Chromium, môžete prehliadať web bezpečnejšie.</translation> -<translation id="6424492062988593837">Systém Chromium bol práve vylepšený. K dispozícii je nová verzia.</translation> <translation id="6475912303565314141">Tiež určuje, ktorá stránka sa zobrazí pri spustení prehliadača Chromium.</translation> <translation id="6485906693002546646">Na synchronizáciu prehliadača Chromium používate účet <ph name="PROFILE_EMAIL" />. Ak chcete upraviť predvoľby synchronizácie alebo používať prehliadač Chromium bez účtu Google, prejdite na <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Odinštalovať Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_sl.xtb b/chrome/app/resources/chromium_strings_sl.xtb index d5963455..4052268 100644 --- a/chrome/app/resources/chromium_strings_sl.xtb +++ b/chrome/app/resources/chromium_strings_sl.xtb
@@ -108,7 +108,6 @@ <translation id="457845228957001925">Pomembne informacije o vaših podatkih v Chromiumu</translation> <translation id="459535195905078186">Aplikacije za Chromium</translation> <translation id="4677944499843243528">Videti je, da profil uporablja drug Chromiumov proces (<ph name="PROCESS_ID" />) v drugem računalniku (<ph name="HOST_NAME" />). Chromium je zaklenil profil, da se ne poškoduje. Če ste prepričani, da tega profila ne uporabljajo nobeni drugi procesi, ga lahko odklenete in znova zaženete Chromium.</translation> -<translation id="473775607612524610">Posodobi</translation> <translation id="4743926867934016338">Sprejem in iskanje</translation> <translation id="4888717733111232871">Pravilo za dohodni promet za Chromium, ki omogoča promet mDNS.</translation> <translation id="4943838377383847465">Chromium se izvaja v ozadju.</translation> @@ -142,7 +141,6 @@ <translation id="6334986366598267305">Zdaj je Chromium lažje uporabljati z Google Računom in v računalnikih, ki so v skupni rabi.</translation> <translation id="6373523479360886564">Ali ste prepričani, da želite odstraniti Chromiuma?</translation> <translation id="6403826409255603130">Chromium je spletni brskalnik, ki bliskovito odpira spletne strani in izvaja aplikacije. Je hiter, stabilen in preprost za uporabo. Z vgrajeno zaščito pred zlonamerno programsko opremo in lažnim predstavljanjem je brskanje po spletu varno.</translation> -<translation id="6424492062988593837">Chromium je izboljšan! Na voljo je nova različica.</translation> <translation id="6475912303565314141">Določa tudi, katera stran je prikazana, ko zaženete Chromium.</translation> <translation id="6485906693002546646">Za sinhronizacijo stvari v Chromiumu uporabljate <ph name="PROFILE_EMAIL" />. Če želite posodobiti nastavitve sinhroniziranja ali uporabljati Chromium brez Google Računa, odprite <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Odstranitev Chromiuma</translation>
diff --git a/chrome/app/resources/chromium_strings_sr.xtb b/chrome/app/resources/chromium_strings_sr.xtb index 3de8186..322ab832 100644 --- a/chrome/app/resources/chromium_strings_sr.xtb +++ b/chrome/app/resources/chromium_strings_sr.xtb
@@ -108,7 +108,6 @@ <translation id="457845228957001925">Важне информације у вези са Chromium подацима</translation> <translation id="459535195905078186">Chromium апликације</translation> <translation id="4677944499843243528">Изгледа да се профил користи у неком другом Chromium процесу (<ph name="PROCESS_ID" />) на неком другом рачунару (<ph name="HOST_NAME" />). Chromium је закључао профил да не би био оштећен. Ако сте сигурни да ниједан други процес не користи овај профил, можете да откључате профил и поново покренете Chromium.</translation> -<translation id="473775607612524610">Ажурирај</translation> <translation id="4743926867934016338">Прихватам, претражи</translation> <translation id="4888717733111232871">Правило за долазни саобраћај за Chromium да би се омогућио mDNS саобраћај.</translation> <translation id="4943838377383847465">Chromium је у позадинском режиму.</translation> @@ -142,7 +141,6 @@ <translation id="6334986366598267305">Сада можете лакше да користите Chromium са Google налогом и на дељеним рачунарима.</translation> <translation id="6373523479360886564">Јесте ли сигурни да желите да деинсталирате Chromium?</translation> <translation id="6403826409255603130">Chromium је веб прегледач који покреће веб-странице и апликације муњевитом брзином. Брз је, стабилан и једноставан за коришћење. Прегледајте Веб безбедније са заштитом од малвера и „пецања“ која је уграђена у Chromium.</translation> -<translation id="6424492062988593837">Chromium је управо постао бољи! Доступна је нова верзија.</translation> <translation id="6475912303565314141">Контролише и страницу која се приказује када покренете Chromium.</translation> <translation id="6485906693002546646">Користите <ph name="PROFILE_EMAIL" /> за синхронизацију Chromium садржаја. Да бисте ажурирали подешавање синхронизације или користили Chromium без Google налога, посетите <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Деинсталирај Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_sv.xtb b/chrome/app/resources/chromium_strings_sv.xtb index 1cb40e0..d965aa5 100644 --- a/chrome/app/resources/chromium_strings_sv.xtb +++ b/chrome/app/resources/chromium_strings_sv.xtb
@@ -108,7 +108,6 @@ <translation id="457845228957001925">Viktig information om uppgifter i Chromium</translation> <translation id="459535195905078186">Chromium-appar</translation> <translation id="4677944499843243528">Profilen verkar användas av en annan Chromium-process (<ph name="PROCESS_ID" />) på en annan dator (<ph name="HOST_NAME" />). Profilen har låsts så att den inte används på otillåtet sätt. Om du är säker på att profilen inte används i några andra processer låser du upp profilen och startar om Chromium.</translation> -<translation id="473775607612524610">Uppdatera</translation> <translation id="4743926867934016338">Acceptera och sök</translation> <translation id="4888717733111232871">Regel som tillåter inkommande mDNS-trafik för Chromium.</translation> <translation id="4943838377383847465">Chromium körs i bakgrundsläge.</translation> @@ -142,7 +141,6 @@ <translation id="6334986366598267305">Nu är det enklare att använda Chromium med ditt Google-konto och på delade datorer.</translation> <translation id="6373523479360886564">Vill du avinstallera Chromium?</translation> <translation id="6403826409255603130">Chromium är en webbläsare som kör webbsidor och appar blixtsnabbt. Den är snabb, stabil och lätt att använda. Surfa säkrare med Chromiums skydd mot skadliga program och lösenordsfiske.</translation> -<translation id="6424492062988593837">Chrome har blivit ännu bättre! En ny version finns tillgänglig.</translation> <translation id="6475912303565314141">Det styr också vilken sida som visas när du startar Chromium.</translation> <translation id="6485906693002546646">Du synkroniserar dina grejer i Chromium med <ph name="PROFILE_EMAIL" />. Om du vill ändra synkroniseringsinställningen eller använda Chromium utan ett Google-konto besöker du <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Avinstallera Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_sw.xtb b/chrome/app/resources/chromium_strings_sw.xtb index 6aa81815..82c6fdd 100644 --- a/chrome/app/resources/chromium_strings_sw.xtb +++ b/chrome/app/resources/chromium_strings_sw.xtb
@@ -108,7 +108,6 @@ <translation id="457845228957001925">Maelezo muhimu kuhusu data yako ya Chromium</translation> <translation id="459535195905078186">Programu za Chromium</translation> <translation id="4677944499843243528">Wasifu unaonekana kuwa unatumika na mchakato mwingine wa Chromium (<ph name="PROCESS_ID" />) kwenye kompyuta nyingine (<ph name="HOST_NAME" />). Chromium imefunga wasifu huu ili usifisidiwe. Kama una uhakika hakuna michakato mingine inatumia wasifu huu, unaweza kufungua wasifu na uzindue tena Chromium.</translation> -<translation id="473775607612524610">Sasisha</translation> <translation id="4743926867934016338">Kubali na Utafute</translation> <translation id="4888717733111232871">Sheria ya ndani ya Chromium ili kuruhusu trafiki ya mDNS.</translation> <translation id="4943838377383847465">Chromium iko katika hali ya chini chini.</translation> @@ -142,7 +141,6 @@ <translation id="6334986366598267305">Sasa ni rahisi zaidi kutumia Chromium pamoja na Akaunti yako ya Google na kwenye kompyuta zinazoshirikiwa.</translation> <translation id="6373523479360886564">Je, una hakika unataka kusanidua Chromium?</translation> <translation id="6403826409255603130">Chromium ni kivinjari cha wavuti kinachoendesha kurasa za wavuti na programu kwa kasi ya umeme. Ni ya haraka, imara, na rahisi kutumia. Vinjari wavuti kwa usalama zaidi dhidi ya hadaa na programu hasidi ukiwa na ulinzi uliojengwa ndani ya Chromium.</translation> -<translation id="6424492062988593837">Chromium imekuwa bora! Toleo jipya linapatikana.</translation> <translation id="6475912303565314141">Pia inadhibiti ukurasa unaoonyeshwa unapoanzisha Chromium.</translation> <translation id="6485906693002546646">Unatumia <ph name="PROFILE_EMAIL" /> kusawazisha vitu vyako vya Chromium. Ili usasishe mapendeleo yako ya usawazishaji au utumie Chromium bila akaunti ya Google, tembelea <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Sanidua Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_ta.xtb b/chrome/app/resources/chromium_strings_ta.xtb index 847b4ad..e1e20a6c 100644 --- a/chrome/app/resources/chromium_strings_ta.xtb +++ b/chrome/app/resources/chromium_strings_ta.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">உங்கள் Chromium தரவு தொடர்பான முக்கியமான தகவல்</translation> <translation id="459535195905078186">Chromium பயன்பாடுகள்</translation> <translation id="4677944499843243528">இந்தச் சுயவிவரமானது மற்றொரு கணினியில் (<ph name="HOST_NAME" />) மற்றொரு Google Chromium செயல்முறையால் (<ph name="PROCESS_ID" />) பயன்படுத்தப்படுவதாகத் தோன்றுகிறது. Chromium, இந்தச் சுயவிவரத்தைப் பூட்டியுள்ளதால், இது சிதைவடையாது. இந்தச் சுயவிவரத்தை மற்ற செயல்முறைகள் பயன்படுத்தவில்லை என்பதில் நீங்கள் உறுதியாக இருந்தால், நீங்கள் சுயவிவரத்தைப் பூட்டுநீக்கி, Chromium ஐ மீண்டும் துவங்கலாம்.</translation> -<translation id="473775607612524610">புதுப்பி</translation> <translation id="4743926867934016338">ஏற்கிறேன் & தேடு</translation> <translation id="4888717733111232871">mDNS ட்ராஃபிக்கை அனுமதிப்பதற்கான, Chromium க்கான உள்வரும் விதி.</translation> <translation id="4943838377383847465">Chromium பின்புல பயன்முறையில் இயங்குகிறது.</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">இப்போது உங்கள் Google கணக்குடனும், பகிரப்பட்ட கணினிகளிலும் Chromium ஐப் பயன்படுத்துவது எளிதானது.</translation> <translation id="6373523479360886564">Chromium ஐ நிச்சயமாக நிறுவல் நீக்கவா?</translation> <translation id="6403826409255603130">Chromium ஆனது வலைப்பக்கங்கள் மற்றும் பயன்பாடுகளில் குறைவான வேகத்துடன் இயங்கும் வலை உலாவியாகும். இது விரைவானது, நிலையானது மற்றும் பயன்படுத்துவதற்கு எளிமையானது. Chromium இல் உருவாக்கப்பட்ட தீப்பொருள் மற்றும் ஃபிஷிங் பாதுகாப்பு மூலம் வலையை மிகவும் பாதுகாப்பாக உலாவலாம்.</translation> -<translation id="6424492062988593837">Chromium தற்போதுதான் சிறப்பைப் பெற்றது! புதிய பதிப்பு உள்ளது.</translation> <translation id="6475912303565314141">Chromium ஐத் தொடங்கும்போது காண்பிக்கப்படும் பக்கத்தையும் இது கட்டுப்படுத்துகிறது.</translation> <translation id="6485906693002546646">உங்கள் Chromium விஷயங்களை ஒத்திசைக்க, <ph name="PROFILE_EMAIL" /> ஐப் பயன்படுத்துகிறீர்கள். உங்கள் ஒத்திசைவு விருப்பத்தேர்வைப் புதுப்பிக்க அல்லது Google கணக்கு இல்லாமல் Chromium ஐப் பயன்படுத்த, <ph name="SETTINGS_LINK" /> ஐப் பார்வையிடவும்.</translation> <translation id="6510925080656968729">Chromium ஐ நிறுவல் நீக்கு</translation>
diff --git a/chrome/app/resources/chromium_strings_te.xtb b/chrome/app/resources/chromium_strings_te.xtb index d503539b..ff977ba7 100644 --- a/chrome/app/resources/chromium_strings_te.xtb +++ b/chrome/app/resources/chromium_strings_te.xtb
@@ -104,7 +104,6 @@ <translation id="457845228957001925">మీ Chromium డేటాకు సంబంధించిన ముఖ్యమైన సమాచారం</translation> <translation id="459535195905078186">Chromium అనువర్తనాలు</translation> <translation id="4677944499843243528">ప్రొఫైల్ని మరొక కంప్యూటర్ (<ph name="HOST_NAME" />)లో మరో Chromium ప్రాసెస్ (<ph name="PROCESS_ID" />) ఉపయోగిస్తున్నట్లు కనిపిస్తోంది. Chromium ప్రొఫైల్ని లాక్ చేసినందున అది పాడవదు. ఈ ప్రొఫైల్ని వేరే ఇతర ప్రాసెస్లు ఏవీ ఉపయోగించడం లేదని మీకు ఖచ్చితంగా తెలిస్తే, మీరు ప్రొఫైల్ని అన్లాక్ చేసి Chromiumని మళ్లీ లాంచ్ చేయవచ్చు.</translation> -<translation id="473775607612524610">నవీకరణ</translation> <translation id="4743926867934016338">ఆమోదిస్తున్నాను, శోధించు</translation> <translation id="4888717733111232871">mDNS ట్రాఫిక్ను అనుమతించడానికి Chromium ఇన్బౌండ్ నియమం.</translation> <translation id="4943838377383847465">Chromium నేపథ్య మోడ్లో ఉంది.</translation> @@ -138,7 +137,6 @@ <translation id="6334986366598267305">ఇప్పుడు మీ Google ఖాతాతో మరియు భాగస్వామ్య కంప్యూటర్ల్లో Chromiumని సులభంగా ఉపయోగించవచ్చు.</translation> <translation id="6373523479360886564">మీరు Chromiumని అన్ఇన్స్టాల్ చేయాలనుకుంటున్నారా?</translation> <translation id="6403826409255603130">Chromium అనేది మెరుపు వేగంతో వెబ్పేజీలను మరియు అనువర్తనాలను అమలు చేసే వెబ్ బ్రౌజర్. ఇది వేగవంతమైనది, స్థిరమైనది మరియు ఉపయోగించడానికి సులభమైనది. Chromiumలో రూపొందించిన మాల్వేర్ మరియు ఫిషింగ్ రక్షణతో మరింత సురక్షితంగా వెబ్లో బ్రౌజ్ చేయండి.</translation> -<translation id="6424492062988593837">Chrome ఇప్పుడే మెరుగుపరచబడింది! క్రొత్త సంస్కరణ అందుబాటులో ఉంది.</translation> <translation id="6475912303565314141">ఇది మీరు Chromiumని ప్రారంభించేటప్పుడు చూపబడే పేజీని కూడా నియంత్రిస్తుంది.</translation> <translation id="6485906693002546646">మీరు మీ Chromium అంశాలను సమకాలీకరించడానికి <ph name="PROFILE_EMAIL" />ని ఉపయోగిస్తున్నారు. మీ సమకాలీకరణ ప్రాధాన్యతను నవీకరించడానికి లేదా Google ఖాతా లేకుండా Chromiumని ఉపయోగించడానికి, <ph name="SETTINGS_LINK" />ను సందర్శించండి.</translation> <translation id="6510925080656968729">Chromiumని అన్ఇన్స్టాల్ చేయి</translation>
diff --git a/chrome/app/resources/chromium_strings_th.xtb b/chrome/app/resources/chromium_strings_th.xtb index b285881a..35dfc27 100644 --- a/chrome/app/resources/chromium_strings_th.xtb +++ b/chrome/app/resources/chromium_strings_th.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">ข้อมูลสำคัญเกี่ยวกับข้อมูล Chromium ของคุณ</translation> <translation id="459535195905078186">แอป Chromium</translation> <translation id="4677944499843243528">ดูเหมือนว่าโปรไฟล์กำลังถูกใช้งานโดยกระบวนการอื่นของ Chromium (<ph name="PROCESS_ID" />) บนคอมพิวเตอร์อีกเครื่อง (<ph name="HOST_NAME" />) Chromium ล็อกโปรไฟล์ไว้เพื่อไม่ให้โปรไฟล์เกิดความเสียหาย หากคุณมั่นใจว่าไม่มีกระบวนการอื่นใดกำลังใช้โปรไฟล์นี้อยู่ คุณสามารถปลดล็อกโปรไฟล์และเปิด Chromium ใหม่</translation> -<translation id="473775607612524610">การอัปเดต</translation> <translation id="4743926867934016338">ยอมรับและค้นหา</translation> <translation id="4888717733111232871">กฎขาเข้าสำหรับ Chromium เพื่ออนุญาตการเข้าชมแบบ mDNS</translation> <translation id="4943838377383847465">Chromium กำลังอยู่ในโหมดทำงานในพื้นหลัง</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">ตอนนี้การใช้ Chromium กับบัญชี Google ของคุณและบนคอมพิวเตอร์ที่ใช้ร่วมกันทำได้ง่ายกว่าเดิม</translation> <translation id="6373523479360886564">คุณแน่ใจหรือไม่ว่าต้องการถอนการติดตั้ง Chromium</translation> <translation id="6403826409255603130">Chromium เป็นเว็บเบราว์เซอร์ที่เรียกใช้หน้าเว็บและแอปพลิเคชันด้วยความเร็วสูง มีความรวดเร็ว เสถียร และง่ายในการใช้งาน เรียกดูเว็บได้อย่างปลอดภัยมากขึ้นด้วยการป้องกันมัลแวร์และฟิชชิงที่สร้างอยู่ภายใน Chromium</translation> -<translation id="6424492062988593837">Chromium พัฒนาใหม่! มีรุ่นใหม่ให้ใช้งานแล้ว</translation> <translation id="6475912303565314141">อีกทั้งยังควบคุมหน้าที่จะแสดงเมื่อคุณเปิด Chromium ด้วย</translation> <translation id="6485906693002546646">คุณกำลังใช้ <ph name="PROFILE_EMAIL" /> ในการซิงค์ข้อมูลใน Chromium หากต้องการอัปเดตค่ากำหนดการซิงค์หรือใช้ Chromium โดยไม่มีบัญชี Google โปรดไปที่ <ph name="SETTINGS_LINK" /></translation> <translation id="6510925080656968729">ถอนการติดตั้ง Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_tr.xtb b/chrome/app/resources/chromium_strings_tr.xtb index 030e8f03..fc6dc888 100644 --- a/chrome/app/resources/chromium_strings_tr.xtb +++ b/chrome/app/resources/chromium_strings_tr.xtb
@@ -104,7 +104,6 @@ <translation id="457845228957001925">Chromium verilerinizle ilgili önemli bilgiler</translation> <translation id="459535195905078186">Chromium Uygulamaları</translation> <translation id="4677944499843243528">Profilin başka bir bilgisayarda (<ph name="HOST_NAME" />) başka bir Chromium işlemi (<ph name="PROCESS_ID" />) tarafından kullanıldığı anlaşılıyor. Chromium, profili bozulmaması için kilitledi. Bu profili başka hiçbir işlemin kullanmadığından eminseniz profilin kilidini açabilir ve Chromium'u tekrar başlatabilirsiniz.</translation> -<translation id="473775607612524610">Güncelle</translation> <translation id="4743926867934016338">Kabul Et ve Ara</translation> <translation id="4888717733111232871">Chromium'un mDNS trafiğine izin vermeyi sağlayan gelen trafik kuralı.</translation> <translation id="4943838377383847465">Chromium arka plan modunda.</translation> @@ -138,7 +137,6 @@ <translation id="6334986366598267305">Chromium'u Google Hesabınızla ve paylaşılan bilgisayarlarda kullanmak artık daha kolay.</translation> <translation id="6373523479360886564">Chromium'u kaldırmak istediğinizden emin misiniz?</translation> <translation id="6403826409255603130">Chromium, Web sayfalarını ve uygulamaları yıldırım hızıyla çalıştıran bir Web tarayıcısıdır. Hızlı ve kararlı çalışır, kolay kullanılır. Chromium'da dahili olarak bulunan zararlı yazılım ve kimlik avı koruması sayesinde Web'de daha güvenli gezinin.</translation> -<translation id="6424492062988593837">Chromium daha da iyi hale geldi! Yeni bir sürüm var.</translation> <translation id="6475912303565314141">Ayrıca, Chromium'u başlattığınızda gösterilecek sayfayı da denetler.</translation> <translation id="6485906693002546646">Chromium öğelerinizi senkronize etmek için <ph name="PROFILE_EMAIL" /> adresini kullanıyorsunuz. Senkronizasyon tercihinizi güncellemek veya Chromium'u bir Google Hesabı olmadan kullanmak için şurayı ziyaret edin: <ph name="SETTINGS_LINK" /></translation> <translation id="6510925080656968729">Chromium'u Kaldır</translation>
diff --git a/chrome/app/resources/chromium_strings_uk.xtb b/chrome/app/resources/chromium_strings_uk.xtb index 7558419..6259f68 100644 --- a/chrome/app/resources/chromium_strings_uk.xtb +++ b/chrome/app/resources/chromium_strings_uk.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">Важлива інформація про ваші дані Chromium</translation> <translation id="459535195905078186">Програми Chromium</translation> <translation id="4677944499843243528">Схоже, профіль використовується іншим процесом Chromium (<ph name="PROCESS_ID" />) на іншому комп’ютері (<ph name="HOST_NAME" />). Chromium заблокував профіль, щоб запобігти його спотворенню. Якщо ви впевнені, що жоден інший процес не використовує цей профіль, розблокуйте профіль і перезапустіть Chromium.</translation> -<translation id="473775607612524610">Оновити</translation> <translation id="4743926867934016338">Прийняти й шукати</translation> <translation id="4888717733111232871">Вхідне правило для Chromium дозволяє трафік mDNS.</translation> <translation id="4943838377383847465">Chromium у фоновому режимі.</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">Користуватися Chromium у своєму обліковому записі Google на спільних комп’ютерах стало легше.</translation> <translation id="6373523479360886564">Дійсно видалити Chromium?</translation> <translation id="6403826409255603130">Chromium – це веб-переглядач, який запускає веб-сторінки та програми з блискавичною швидкістю. Він швидкий, надійний і зручний у користуванні. Вбудований у Chromium захист від шкідливих програм і фішингу гарантує ще більшу безпеку під час перегляду веб-сторінок.</translation> -<translation id="6424492062988593837">Chromium став ще кращим! Доступна нова версія.</translation> <translation id="6475912303565314141">Також указує сторінку, яка відкривається під час запуску Chromium.</translation> <translation id="6485906693002546646">Ви синхронізуєте дані Chromium через обліковий запис <ph name="PROFILE_EMAIL" />. Щоб оновити параметри синхронізації або використовувати Chromium без облікового запису Google, перейдіть на сторінку <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Видалити Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_vi.xtb b/chrome/app/resources/chromium_strings_vi.xtb index 61dafee1..affe2e91 100644 --- a/chrome/app/resources/chromium_strings_vi.xtb +++ b/chrome/app/resources/chromium_strings_vi.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">Thông tin quan trọng liên quan đến dữ liệu Chromium của bạn</translation> <translation id="459535195905078186">Ứng dụng Chromium</translation> <translation id="4677944499843243528">Dường như cấu hình này đang được quy trình Chromium khác (<ph name="PROCESS_ID" />) trên máy tính khác (<ph name="HOST_NAME" />) sử dụng. Chromium đã khóa cấu hình này để cấu hình không bị lỗi. Nếu bạn chắc chắn không có quy trình nào khác đang sử dụng cấu hình này, bạn có thể mở khóa cấu hình và chạy lại Chromium.</translation> -<translation id="473775607612524610">Cập nhật</translation> <translation id="4743926867934016338">Chấp nhận và tìm kiếm</translation> <translation id="4888717733111232871">Quy tắc kết nối để Chromium cho phép lưu lượng truy cập mDNS.</translation> <translation id="4943838377383847465">Chromium đang chạy trong nền.</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">Giờ đây, việc sử dụng Chromium bằng tài khoản Google của bạn và trên máy tính dùng chung trở nên dễ dàng hơn.</translation> <translation id="6373523479360886564">Bạn có chắc chắn muốn gỡ cài đặt Chromium không?</translation> <translation id="6403826409255603130">Chromium là trình duyệt web chạy các trang web và ứng dụng với tốc độ cực nhanh. Đây là một trình duyệt web nhanh, ổn định và dễ sử dụng. Duyệt web trở nên an toàn hơn với tính năng bảo vệ chống lại phần mềm độc hại và lừa đảo được tích hợp sẵn vào Chromium.</translation> -<translation id="6424492062988593837">Chromium được cải tiến hơn! Đã có phiên bản mới.</translation> <translation id="6475912303565314141">Tiện ích này cũng điều khiển trang nào được hiển thị khi bạn khởi động Chromium.</translation> <translation id="6485906693002546646">Bạn đang sử dụng <ph name="PROFILE_EMAIL" /> để đồng bộ hóa nội dung Chromium của mình. Để cập nhật tùy chọn đồng bộ hóa hoặc sử dụng Chromium mà không cần tài khoản Google, hãy truy cập <ph name="SETTINGS_LINK" />.</translation> <translation id="6510925080656968729">Gỡ cài đặt Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_zh-CN.xtb b/chrome/app/resources/chromium_strings_zh-CN.xtb index cc4f4408..e652172 100644 --- a/chrome/app/resources/chromium_strings_zh-CN.xtb +++ b/chrome/app/resources/chromium_strings_zh-CN.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">与您的 Chromium 数据相关的重要信息</translation> <translation id="459535195905078186">Chromium 应用</translation> <translation id="4677944499843243528">其他计算机 (<ph name="HOST_NAME" />) 的另一个 Chromium 进程 (<ph name="PROCESS_ID" />) 好像正在使用此个人资料。Chromium 已锁定此个人资料以防止其受损。如果您确定其他进程目前未使用此个人资料,请为其解锁并重新启动 Chromium。</translation> -<translation id="473775607612524610">更新</translation> <translation id="4743926867934016338">接受并搜索</translation> <translation id="4888717733111232871">Chromium的入站规则,允许mDNS流量。</translation> <translation id="4943838377383847465">Chromium处于后台运行模式。</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">现在,无论是通过Google帐户还是在共用的计算机上,您都可以更轻松地使用Chromium。</translation> <translation id="6373523479360886564">确定要卸载 Chromium 吗?</translation> <translation id="6403826409255603130">Chromium 是一款可高速运行网页和应用的网络浏览器。它快捷、稳定且易于使用。Chromium 内置的防护恶意软件和网上诱骗的功能可让您更安全地浏览网页。</translation> -<translation id="6424492062988593837">Chromium 刚刚经过了改进!新版本已推出。</translation> <translation id="6475912303565314141">它还能够控制Chromium启动后显示的页面。</translation> <translation id="6485906693002546646">您在使用<ph name="PROFILE_EMAIL" />同步自己的Chromium资料和数据。要更新您的同步偏好设置或在不登录Google帐户的情况下使用Chromium,请前往<ph name="SETTINGS_LINK" />部分。</translation> <translation id="6510925080656968729">卸载 Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_zh-TW.xtb b/chrome/app/resources/chromium_strings_zh-TW.xtb index 1704dc44..d9154a9 100644 --- a/chrome/app/resources/chromium_strings_zh-TW.xtb +++ b/chrome/app/resources/chromium_strings_zh-TW.xtb
@@ -106,7 +106,6 @@ <translation id="457845228957001925">Chromium 資料的相關重要資訊</translation> <translation id="459535195905078186">Chromium 應用程式</translation> <translation id="4677944499843243528">另一台電腦 (<ph name="HOST_NAME" />) 的 Chromium 處理程序 (<ph name="PROCESS_ID" />) 正在使用這個設定檔。Chromium 已鎖定此設定檔,確保其不致受損。如果您確定其他處理程序目前未使用此設定檔,請予以解除鎖定,然後重新啟動 Chromium。</translation> -<translation id="473775607612524610">更新</translation> <translation id="4743926867934016338">接受並搜尋</translation> <translation id="4888717733111232871">允許 mDNS 流量的 Chromium 輸入規則。</translation> <translation id="4943838377383847465">Chromium 正在背景模式中執行。</translation> @@ -140,7 +139,6 @@ <translation id="6334986366598267305">無論是登入 Google 帳戶使用 Chromium,還是以 Google 帳戶使用共用電腦,現在都變得更容易了。</translation> <translation id="6373523479360886564">您確定要解除安裝 Chromium 嗎?</translation> <translation id="6403826409255603130">Chromium 網路瀏覽器開啟網頁和執行應用程式的速度十分迅速。除了迅速、穩定且易於使用之外,Chromium 的內建惡意軟體與網路釣魚防護功能,可讓您安心悠遊網路。</translation> -<translation id="6424492062988593837">Chromium 現在變得更進步了!歡迎您升級使用新版本。</translation> <translation id="6475912303565314141">這個擴充功能也會控管您啟動 Chromium 時所顯示的網頁。</translation> <translation id="6485906693002546646">您正使用 <ph name="PROFILE_EMAIL" /> 帳戶同步處理您的 Chromium 資料。如要更新您的偏好設定,或是在未登入 Google 帳戶的情況下使用 Chromium,請前往 [<ph name="SETTINGS_LINK" />]。</translation> <translation id="6510925080656968729">解除安裝 Chromium</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index b030839..bff16f30 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">ግባ</translation> <translation id="1864676585353837027">እነዚህ ፋይሎች እንዴት እንደሚጋሩ ይቀይሩ</translation> <translation id="1864756863218646478">ፋይሉ ሊገኝ አልቻለም።</translation> +<translation id="1865769994591826607">የተመሳሳይ-ጣቢያ ግንኙነቶች ብቻ</translation> <translation id="186612162884103683">«<ph name="EXTENSION" />» ምልክት በተደረገባቸው አካባቢዎች ውስጥ ምስሎችን፣ ቪዲዮ እና የድምጽ ፋይሎችን ማንበብ እና መጻፍ ይችላል።</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> ጭነትዎን ለማጠናቀቅ ዝግጁ ነው</translation> <translation id="1873879463550486830">የSUID ማጠሪያ</translation> @@ -1196,6 +1197,7 @@ <translation id="2743387203779672305">ወደ ቅንጥብ ሰሌዳ ገልብጥ</translation> <translation id="2744221223678373668">የተጋራ</translation> <translation id="2745080116229976798">Microsoft Qualified Subordination</translation> +<translation id="2745576239403924641">በእርስዎ Chromebook ላይ ለማሄድ የAndroid መተግበሪያዎችን ያንቁ።</translation> <translation id="2747990718031257077">(በግንባታ ላይ ያለ) የአዲሱ ቅጥያ የመሣሪያ አሞሌ ንድፍ ያነቃል።</translation> <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> ውስጥ ይግቡ</translation> <translation id="2749881179542288782">ሰዋሰው እና ሆሄ አርም</translation> @@ -1409,6 +1411,7 @@ <translation id="3011284594919057757">ስለ Flash</translation> <translation id="3011362742078013760">&ሁሉንም እልባቶች ማንነትን በማያሳውቅ መስኮት ውስጥ ክፈት</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">ደህንነታቸው የተጠበቀ የተመሳሳይ-ጣቢያ ግንኙነቶችን ብቻ</translation> <translation id="3012890944909934180">Chromeን በዴስክቶፑ ላይ ዳግም ያስጀምሩት</translation> <translation id="3012917896646559015">ኮምፒውተርዎን ወደ ጥገና ክፍል ለመላክ እባክዎ የሃርድዌርዎ አምራቹን ወዲያውኑ ያግኙ።</translation> <translation id="3015992588037997514">ይህ ኮድ በእርስዎ የChromebox ማያ ገጽ ላይ ይታያል?</translation> @@ -1642,6 +1645,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" /> አዝራር፦ በመለያ የመግባት ስህተት</translation> <translation id="3319048459796106952">አዲስ ማን&ነትን የማያሳውቅ መስኮት</translation> <translation id="331915893283195714">ሁሉም ጣቢያዎች የመዳፊት ጠቋሚን እንዲያሰናክሉ ፍቀድ</translation> +<translation id="3319364804843246307">የAndroid መተግበሪያዎች</translation> <translation id="3320859581025497771">የእርስዎ ድምጸ ተያያዥ ሞደም</translation> <translation id="3323235640813116393">ገጾችን እንደ MHTML ማስቀመጥ ያስችላል፤ ኤችቲኤምኤል እና ሁሉም ንዑስ ንብረቶችን የያዘ አንድ ነጠላ የጽሑፍ ፋይል።</translation> <translation id="3323447499041942178">የፅሁፍ ሳጥን</translation> @@ -1746,6 +1750,7 @@ <translation id="347719495489420368"><ph name="PLUGIN_NAME" />ን ለማጫወት ቀኝ ጠቅ ማድረግ።</translation> <translation id="347785443197175480"><ph name="HOST" /> ካሜራዎን እና ማይክሮፎንዎን እንዲደርስ መፍቀዱን ይቀጥሉ</translation> <translation id="3478315065074101056">XPS በChrome በኩል ከደመና ህትመት ጋር ለተገናኙ የሚታወቁ አታሚዎች የላቁ አማራጮችን ያነቃል። ይህ ዕልባት ከተቀየረ በኋላ አታሚዎች ዳግም መገናኘት አለባቸው።</translation> +<translation id="3479539252931486093">ይህ ያልተጠበቀ ነበር? <ph name="BEGIN_LINK" />ያሳውቁን<ph name="END_LINK" /></translation> <translation id="3479552764303398839">አሁን አይደለም</translation> <translation id="3480892288821151001">መስኮት ግራ ላይ ትከል</translation> <translation id="3481915276125965083">በዚህ ገጽ ላይ የሚከተሉት ብቅ-ባዮች ታግደዋል፦</translation> @@ -2718,6 +2723,7 @@ <translation id="4941246025622441835">መሣሪያው ለድርጅት አስተዳደር ሲያስመዘግቡት ይህን የመሣሪያ መውረሻ ይጠቀሙ፦</translation> <translation id="4942394808693235155">ዝማኔዎች ካሉ ያረጋግጡ እና ይተግብሯቸው</translation> <translation id="494286511941020793">የተኪ ውቅር እገዛ</translation> +<translation id="4945378551914476156">የእርስዎ እልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌሎች ቅንብሮች ወደ ከGoogle መለያዎ ጋር ይሰመራሉ፣ በዚህም Chromeን በሚጠቀሙበት ቦታ ሁሉ ሊጠቀሙባቸው ይችላሉ። ይህንን በ<ph name="BEGIN_LINK" /> ውስጥ መለወጥ ይችላሉ</translation> <translation id="4950138595962845479">አማራጮች...</translation> <translation id="4952186391360931024">ቁሳዊ ያልሆነ</translation> <translation id="4954544650880561668">የመሣሪያ ቁጥጥር</translation> @@ -2852,7 +2858,6 @@ <ph name="LINE_BREAKS" /> መሣሪያዎ ስራ ላይ እያለ ማስወገድ የውሂብ መጥፋት ሊያስከትል ይችላል። እባክዎ ክወናው እስኪጠናቀቅ ድረስ ይጠብቁ፣ ከዚያ የፋይሎች መተግበሪያውን በመጠቀም መሣሪያውን ያስወጡት።</translation> <translation id="5159488553889181171">የ<ph name="PLUGIN_NAME" /> ውርድ ተሰርዟል።</translation> -<translation id="5159628598068481063">የWindows ዴስክቶፕ ፍለጋ አቅጣጫ ማስለወጥ አማራጭ</translation> <translation id="5160857336552977725">ወደ የእርስዎ <ph name="DEVICE_TYPE" /> ይግቡ</translation> <translation id="5163869187418756376">ማጋራት አልተሳካም። ግንኙነትዎን ይፈትሹ እና ቆይተው እንደገና ይሞክሩ።</translation> <translation id="516592729076796170">የአሜሪካ Dvorak ፕሮግራመር</translation> @@ -3222,7 +3227,6 @@ <translation id="567881659373499783">ስሪት <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">የእርስዎን ውሂብ በ<ph name="WEBSITE_1" /> ላይ ያንብቡ</translation> <translation id="5680928275846978395">በአጠቃላይ እይታ ሁነታ ላይ ጽሑፍ ማጣራት</translation> -<translation id="568428328938709143">መለያ ተወግዷል</translation> <translation id="5684661240348539843">የእሴት ለይቶ ማወቂያ</translation> <translation id="569068482611873351">አስመጣ...</translation> <translation id="56907980372820799">ውሂብ አገናኝ</translation> @@ -3463,6 +3467,7 @@ <translation id="604001903249547235">የክላውድ ምትኬ</translation> <translation id="6040143037577758943">ዝጋ</translation> <translation id="604124094241169006">ራስ-ሰር</translation> +<translation id="6042308850641462728">ተጨማሪ</translation> <translation id="604257181445267932">Smart Lock Google ላይ ያስቀመጡትን የይለፍ ቃል በመጠቀም በፍጥነት ወደ መተግበሪዎች እና ጣቢያዎች እንዲገቡ ያግዘዎታል።</translation> <translation id="6049065490165456785">ፎቶ ከውስጣዊ ካሜራ</translation> <translation id="6051028581720248124">ወደ FedEx Office በማተም የእነሱን <ph name="START_LINK" />አገልግሎት ውል<ph name="END_LINK" /> ተቀብለዋል።</translation> @@ -3494,7 +3499,6 @@ <translation id="6089481419520884864">ገጹን አጣራ</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">ዝማኔን በመሰረዝ ላይ...</translation> -<translation id="6095149522260432647">የWindows ዴስክቶፕ ፍለጋዎችን ወደ ነባሪ የፍለጋ ፕሮግራም አቅጣጫ ዳግም ለማዞር አማራጮችን ያነቃል።</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">ሰፍቶ ክፈት</translation> <translation id="6096326118418049043">X.500 ስም</translation> @@ -4678,6 +4682,7 @@ <translation id="7926906273904422255">ደህንነታቸው ያልተረጋገጡ ምንጮችን ደህንነታቸው ያልተረጋገጡ ወይም «አጠራጣሪ» የሚል ምልክት አድርግበት።</translation> <translation id="7928710562641958568">መሣሪያን አውጣ</translation> <translation id="7938594894617528435">በአሁኑ ጊዜ ከመስመር ውጪ</translation> +<translation id="7939374455203157513">የደመና አገልግሎቶችን አንቃ</translation> <translation id="7939412583708276221">ለማንኛውም አስቀምጥ</translation> <translation id="7939997691108949385">አቀናባሪው ለዚህ ክትተል የሚደረግበት ተጠቃሚ ገደቦችን እና ቅንብሮችን በ<ph name="MANAGEMENT_URL" /> ላይ ሊያዋቅር ይችላል።</translation> <translation id="7943385054491506837">የአሜሪካ ኮልማክ</translation> @@ -5235,6 +5240,7 @@ <translation id="872537912056138402">ክሮሽያንኛ</translation> <translation id="8726206820263995930">የመምሪያ ቅንብሮች ከዚህ አገልጋይ በማምጣት ላይ ሳለ ስህተት፦ <ph name="CLIENT_ERROR" />።</translation> <translation id="8726888928275282477">የቅጥያ አማራጮች በአዲስ ትር ውስጥ ከመክፈት ይልቅ በchrome://extensions ውስጥ እንደ አንድ የተካተተ አባል ያሳያል።</translation> +<translation id="8727142376512517020">ይህን ዳግም አታሳይ</translation> <translation id="8728672262656704056">ማንነት የማያሳውቅ ሁነታ ውስጥ ገብተዋል</translation> <translation id="8730621377337864115">ተከናውኗል</translation> <translation id="8731332457891046104"><ph name="DEVICE_TYPE" />ን ከምዝገባ አውጣ</translation> @@ -5319,7 +5325,7 @@ <translation id="8863489667196658337">የዕልባት መተግበሪያዎችን ለመፍጠር አዲሱን ስርዓት ያነቃል።</translation> <translation id="8870318296973696995">መነሻ ገጽ</translation> <translation id="8870413625673593573">በቅርብ ጊዜ የተዘጉ</translation> -<translation id="8871551568777368300">በአስተዳዳሪ የተለጠፈ</translation> +<translation id="8871551568777368300">በአስተዳዳሪ የተሰካ</translation> <translation id="8871696467337989339">የማይደገፍ የትዕዛዝ-መስመር ጥቆማ ነው እየተጠቀሙ ያሉት፦ <ph name="BAD_FLAG" />። እርጋታ እና ደህንነት ችግር ይደርስባቸዋል።</translation> <translation id="8871974300055371298">የይዘት ቅንብሮች</translation> <translation id="8872155268274985541">የማይሰራ የKiosk ውጫዊ ዝማኔ አንጸባራቂ ፋይል ተገኝቷል። የKiosk መተግበሪያን ማዘመን አልተሳካም። እባክዎ የዩ.ኤስ.ቢ. ስቲኩን ያስወግዱ።</translation> @@ -5397,7 +5403,6 @@ <translation id="8986362086234534611">እርሳ</translation> <translation id="8986494364107987395">የአጠቃቀም ስታስቲክስ እና የብልሽት ሪፖርቶች በራስ ሰር ወደ Google ይላኩ።</translation> <translation id="8987927404178983737">ወር</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">የNetscape ሰርቲፊኬት መሰረት</translation> <translation id="8994845581478641365">DirectWrite የቁምፊ መሸጎጫ ገንቢ</translation> <translation id="8995603266996330174">የተቀናበረው በ<ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index 36cb149c..45b57086 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -607,6 +607,7 @@ <translation id="1864111464094315414">تسجيل الدخول</translation> <translation id="1864676585353837027">تغيير كيفية مشاركة هذه الملفات</translation> <translation id="1864756863218646478">تعذر العثور على الملف.</translation> +<translation id="1865769994591826607">اتصالات من نفس الموقع فقط</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" يمكنها قراءة ملفات الصور والفيديو والصوت وكتابتها في المواقع المحددة.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> جاهز لإكمال عملية التثبيت</translation> <translation id="1873879463550486830">صندوق حماية SUID</translation> @@ -1195,6 +1196,7 @@ <translation id="2743387203779672305">نسخ إلى الحافظة</translation> <translation id="2744221223678373668">مشتركة</translation> <translation id="2745080116229976798">إخضاع مؤهل لـ Microsoft</translation> +<translation id="2745576239403924641">تمكين تشغيل تطبيقات Android على جهاز Chromebook</translation> <translation id="2747990718031257077">تمكين تصميم شريط أدوات الإضافة الجديدة (قيد التطوير).</translation> <translation id="2749756011735116528">تسجيل الدخول إلى <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">تحقق من التدقيق النحوي مع التدقيق الإملائي</translation> @@ -1408,6 +1410,7 @@ <translation id="3011284594919057757">حول Flash</translation> <translation id="3011362742078013760">فتح كل الإشارات المرجعية &في نافذة التصفح المتخفي</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">الاتصالات الآمنة من نفس الموقع فقط</translation> <translation id="3012890944909934180">إعادة تشغيل Chrome على سطح المكتب</translation> <translation id="3012917896646559015">الرجاء الاتصال بجهة تصنيع الجهاز على الفور لإرسال جهاز الكمبيوتر إلى أحد مرافق الإصلاح.</translation> <translation id="3015992588037997514">هل يظهر هذا الرمز على شاشة Chromebox؟</translation> @@ -1638,6 +1641,7 @@ <translation id="331752765902890099">زر <ph name="PROFILE_NAME" />: خطأ في تسجيل الدخول</translation> <translation id="3319048459796106952">نافذة & جديدة للتصفح المتخفي</translation> <translation id="331915893283195714">السماح لجميع المواقع بتعطيل مؤشر الماوس</translation> +<translation id="3319364804843246307">تطبيقات Android</translation> <translation id="3320859581025497771">شركة الاتصالات</translation> <translation id="3323235640813116393">يُمكِّن من حفظ الصفحات بصيغة MHTML: ملف نصي واحد يحتوي على HTML وجميع الموارد الفرعية.</translation> <translation id="3323447499041942178">مربع نص</translation> @@ -1742,6 +1746,7 @@ <translation id="347719495489420368">انقر بزر الماوس الأيمن لتشغيل <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">مواصلة إتاحة دخول <ph name="HOST" /> إلى الكاميرا والميكروفون التابعين لك</translation> <translation id="3478315065074101056">تمكّن نقاط الخبرة الخيارات المتقدمة للطابعات الكلاسيكية المرتبطة بـ Cloud Print مع Chrome. تجب إعادة ربط الطابعات بعد تغيير هذه العلامة.</translation> +<translation id="3479539252931486093">ألم تتوقَّع هذا؟ <ph name="BEGIN_LINK" />أطلِعنا على الأمر<ph name="END_LINK" /></translation> <translation id="3479552764303398839">ليس الآن</translation> <translation id="3480892288821151001">إرساء النافذة لليسار</translation> <translation id="3481915276125965083">تم منع عرض النوافذ المنبثقة التالية في هذه الصفحة:</translation> @@ -2712,6 +2717,7 @@ <translation id="4941246025622441835">استخدام طلب الجهاز عند تسجيل الجهاز في إدارة المؤسسات:</translation> <translation id="4942394808693235155">تحقق من وجود التحديثات وتطبيقها</translation> <translation id="494286511941020793">مساعدة تهيئة الخادم الوكيل</translation> +<translation id="4945378551914476156">ستتلقَى الإشارات المرجعية والسجل وكلمات المرور والإعدادات الأخرى المزامنة مع حسابك في Google حتى يتسنَّى لك استخدامها مع Chrome. يمكنك تغيير هذا في <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">خيارات...</translation> <translation id="4952186391360931024">غير متعدد الأبعاد</translation> <translation id="4954544650880561668">التحكم في الجهاز</translation> @@ -2845,7 +2851,6 @@ <ph name="LINE_BREAKS" /> قد تؤدي إزالة جهازك أثناء وجوده قيد الاستخدام إلى فقدان البيانات. الرجاء الانتظار حتى انتهاء العملية، ثم إخراج الجهاز باستخدام تطبيق الملفات.</translation> <translation id="5159488553889181171">تم إلغاء تنزيل <ph name="PLUGIN_NAME" />.</translation> -<translation id="5159628598068481063">تفضيل إعادة توجيه بحث سطح مكتب Windows</translation> <translation id="5160857336552977725">سجّل الدخول إلى <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">أخفقت المشاركة. تحقق من اتصالك وأعد المحاولة لاحقًا.</translation> <translation id="516592729076796170">لوحة مفاتيح المطور الأمريكية Dvorak</translation> @@ -3213,7 +3218,6 @@ <translation id="567881659373499783">الإصدار <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">قراءة بياناتك على <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">تصفية النص في وضع نظرة عامة</translation> -<translation id="568428328938709143">تمت إزالة الحساب</translation> <translation id="5684661240348539843">معرّف الأصول</translation> <translation id="569068482611873351">استيراد...</translation> <translation id="56907980372820799">ربط البيانات</translation> @@ -3453,6 +3457,7 @@ <translation id="604001903249547235">النسخ الاحتياطي عبر السحاب.</translation> <translation id="6040143037577758943">إغلاق</translation> <translation id="604124094241169006">تلقائي</translation> +<translation id="6042308850641462728">المزيد</translation> <translation id="604257181445267932">يساعدك Smart Lock على تسجيل الدخول بسرعة إلى التطبيقات والمواقع باستخدام كلمات المرور التي حفظتها مع Google.</translation> <translation id="6049065490165456785">صور من الكاميرا الداخلية</translation> <translation id="6051028581720248124">من خلال الطباعة إلى مكتب FedEx، فإنك توافق على <ph name="START_LINK" />بنود الاستخدام<ph name="END_LINK" /> الخاصة بهم.</translation> @@ -3484,7 +3489,6 @@ <translation id="6089481419520884864">صفحة التنقية</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">جارٍ إلغاء التحديث...</translation> -<translation id="6095149522260432647">يمكن تمكين تفضيل يسمح بإعادة توجيه عمليات بحث سطح مكتب Windows إلى محرك البحث الافتراضي.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">فتح في وضع التكبير</translation> <translation id="6096326118418049043">اسم X.500</translation> @@ -4669,6 +4673,7 @@ <translation id="7926906273904422255">وضع علامة على الأصول غير الآمنة كغير آمنة، أو "مشكوك فيها".</translation> <translation id="7928710562641958568">إخراج الجهاز</translation> <translation id="7938594894617528435">في وضع عدم الاتصال حاليًا</translation> +<translation id="7939374455203157513">تمكين خدمات السحاب</translation> <translation id="7939412583708276221">المتابعة على أية حال</translation> <translation id="7939997691108949385">سيتمكن المشرف من تهيئة القيود والإعدادات لهذا المستخدم الذي يخضع للإشراف على <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">الأمريكية Colemak</translation> @@ -5220,6 +5225,7 @@ <translation id="872537912056138402">الكرواتية</translation> <translation id="8726206820263995930">حدث خطأ عند جلب إعدادات السياسة من الخادم: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">عرض خيارات الإضافة كعنصر مضمن في chrome://extensions بدلاً من فتح علامة تبويب جديدة.</translation> +<translation id="8727142376512517020">عدم إظهار ذلك مرة أخرى</translation> <translation id="8728672262656704056">لقد انتقلت إلى وضع التصفح المتخفي</translation> <translation id="8730621377337864115">تم</translation> <translation id="8731332457891046104">إلغاء تسجيل <ph name="DEVICE_TYPE" /></translation> @@ -5382,7 +5388,6 @@ <translation id="8986362086234534611">حذف</translation> <translation id="8986494364107987395">إرسال إحصائيات الاستخدام وتقارير الأعطال إلى Google تلقائيًا</translation> <translation id="8987927404178983737">شهر</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">عنوان URL الأساسي لشهادة Netscape</translation> <translation id="8994845581478641365">أداة إنشاء ذاكرة التخزين المؤقت للخطوط DirectWrite</translation> <translation id="8995603266996330174">مدار بواسطة <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index cd92e24..b7c5a6a 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -603,6 +603,7 @@ <translation id="1864111464094315414">Вход</translation> <translation id="1864676585353837027">Промяна на начина на споделяне на тези файлове</translation> <translation id="1864756863218646478">Файлът не можа да бъде намерен.</translation> +<translation id="1865769994591826607">Само връзки в същия сайт</translation> <translation id="186612162884103683"><ph name="EXTENSION" /> може да чете и записва изображения, видео- и звукови файлове в местоположенията с отметка.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> е готов да завърши инсталирането</translation> <translation id="1873879463550486830">Тестова среда „SUID“</translation> @@ -1192,6 +1193,7 @@ <translation id="2743387203779672305">Копиране в буферната памет</translation> <translation id="2744221223678373668">Споделени</translation> <translation id="2745080116229976798">Удостоверена субординация от Microsoft</translation> +<translation id="2745576239403924641">Активиране на приложенията за Android за изпълнение на вашия Chromebook.</translation> <translation id="2747990718031257077">Активира новия дизайн (в процес на разработване) на лентата с инструменти за разширения.</translation> <translation id="2749756011735116528">Вход в <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Проверка на граматиката заедно с правописа</translation> @@ -1405,6 +1407,7 @@ <translation id="3011284594919057757">Всичко за Flash</translation> <translation id="3011362742078013760">Отваряне на всички отметки в прозорец в режим „&инкогнито“</translation> <translation id="3012631534724231212">(вложена рамка)</translation> +<translation id="3012804260437125868">Само сигурни връзки в същия сайт</translation> <translation id="3012890944909934180">Повторно стартиране на Chrome на работния плот</translation> <translation id="3012917896646559015">Моля, незабавно се свържете с производителя на хардуера си, за да изпратите компютъра си на поправка.</translation> <translation id="3015992588037997514">Този код показва ли се на екрана на вашия Chromebox?</translation> @@ -1637,6 +1640,7 @@ <translation id="331752765902890099">Бутон за <ph name="PROFILE_NAME" />: Грешка при влизане в профила</translation> <translation id="3319048459796106952">Нов &прозорец при използване на функцията „инкогнито“</translation> <translation id="331915893283195714">Да се разреши на всички сайтове да деактивират курсора на мишката</translation> +<translation id="3319364804843246307">Приложения за Android</translation> <translation id="3320859581025497771">оператора</translation> <translation id="3323235640813116393">Активира запазването на страниците като MHTML: един текстов файл, съдържащ HTML кода и всички подресурси.</translation> <translation id="3323447499041942178">Текстово поле</translation> @@ -1741,6 +1745,7 @@ <translation id="347719495489420368">Кликнете с десен бутон, за да стартирате <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">Достъпът на <ph name="HOST" /> до камерата и микрофона ви да продължава да е разрешен</translation> <translation id="3478315065074101056">XPS активира разширени опции за традиционни принтери, свързани с Отпечатване в облак за Chrome. След като промените този флаг, принтерите трябва да се свържат отново.</translation> +<translation id="3479539252931486093">Това неочаквано ли беше? <ph name="BEGIN_LINK" />Уведомете ни<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Не сега</translation> <translation id="3480892288821151001">Закрепване на прозореца отляво</translation> <translation id="3481915276125965083">Следните изскачащи прозорци са блокирани на тази страница:</translation> @@ -2714,6 +2719,7 @@ <translation id="4941246025622441835">Използване на заявката за устройството при записването му за корпоративно управление:</translation> <translation id="4942394808693235155">Проверка за актуализации и прилагане на наличните</translation> <translation id="494286511941020793">Помощ за конфигурация на прокси сървър</translation> +<translation id="4945378551914476156">Вашите отметки, история, пароли и други настройки ще се синхронизират с профила ви в Google, за да можете да ги използвате, когато работите с Chrome. Можете да промените това от <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Опции...</translation> <translation id="4952186391360931024">Без material design</translation> <translation id="4954544650880561668">Контролиране на устройството</translation> @@ -2848,7 +2854,6 @@ <ph name="LINE_BREAKS" /> Премахването на устройството, докато се използва, може да доведе до загуба на данни. Моля, изчакайте завършването на операцията, след което го извадете посредством приложението Файлове.</translation> <translation id="5159488553889181171">Изтеглянето на „<ph name="PLUGIN_NAME" />“ бе анулирано.</translation> -<translation id="5159628598068481063">Предпочитание за пренасочване на търсенията от работния плот на Windows</translation> <translation id="5160857336552977725">Влезте в своя <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Споделянето не бе успешно. Проверете връзката си и опитайте отново по-късно.</translation> <translation id="516592729076796170">Американска (Дворак) клавиатура за програмисти</translation> @@ -3217,7 +3222,6 @@ <translation id="567881659373499783">Версия <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Четене на данните ви от <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Филтриране чрез текст в режима за общ преглед</translation> -<translation id="568428328938709143">Профилът бе премахнат</translation> <translation id="5684661240348539843">Идентификатор на актива</translation> <translation id="569068482611873351">Импортиране...</translation> <translation id="56907980372820799">Свързване на данните</translation> @@ -3457,6 +3461,7 @@ <translation id="604001903249547235">Резервни копия в облака</translation> <translation id="6040143037577758943">Затваряне</translation> <translation id="604124094241169006">Автоматично</translation> +<translation id="6042308850641462728">Още</translation> <translation id="604257181445267932">Smart Lock ви помага да влизате бързо в приложения и сайтове посредством паролите, които сте запазили в Google.</translation> <translation id="6049065490165456785">Снимка от вътрешната камера</translation> <translation id="6051028581720248124">С отпечатването в офис на FedEx приемате <ph name="START_LINK" />общите условия<ph name="END_LINK" /> на компанията.</translation> @@ -3488,7 +3493,6 @@ <translation id="6089481419520884864">Създаване на сбит вариант на страницата</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Актуализирането се анулира...</translation> -<translation id="6095149522260432647">Активира предпочитание, което позволява търсенията от работния плот на Windows да се пренасочват към стандартната търсеща машина.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Отваряне с увеличен изглед</translation> <translation id="6096326118418049043">Име на X.500</translation> @@ -4669,6 +4673,7 @@ <translation id="7926906273904422255">Означаване на незащитените източници като ненадеждни или съмнителни.</translation> <translation id="7928710562641958568">Изваждане на устройството</translation> <translation id="7938594894617528435">Понастоящем е офлайн</translation> +<translation id="7939374455203157513">Активиране на услугите в облака</translation> <translation id="7939412583708276221">Запазване въпреки това</translation> <translation id="7939997691108949385">Мениджърът ще може да конфигурира ограничения и настройки за този контролиран потребител на адрес <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">Американска (Коулмак) клавиатура</translation> @@ -5220,6 +5225,7 @@ <translation id="872537912056138402">хърватски</translation> <translation id="8726206820263995930">Грешка при извличането на настройките за правилa от сървъра: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Опциите за разширенията се показват като вграден елемент в „chrome://extensions“, вместо да се отварят в нов раздел.</translation> +<translation id="8727142376512517020">Без повторно показване</translation> <translation id="8728672262656704056">Преминахте в режим „инкогнито“</translation> <translation id="8730621377337864115">Готово</translation> <translation id="8731332457891046104">Отписване на <ph name="DEVICE_TYPE" /></translation> @@ -5382,7 +5388,6 @@ <translation id="8986362086234534611">Забравяне</translation> <translation id="8986494364107987395">Автоматично изпращане до Google на статистически данни за използването на Chrome и сигнали за сривове</translation> <translation id="8987927404178983737">Месец</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Основен URL адрес на сертификат на Netscape</translation> <translation id="8994845581478641365">Създаване на кеш на шрифтове за DirectWrite</translation> <translation id="8995603266996330174">Управлявано от <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index 3eb90ef3..eb007cb5 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -178,7 +178,7 @@ <translation id="1248269069727746712">নেটওয়ার্কে সংযোগ করতে <ph name="PRODUCT_NAME" /> আপনার মোবাইল ডিভাইসের প্রক্সি সেটিংস ব্যবহার করছে৷</translation> <translation id="1254117744268754948">ফোল্ডার চয়ন করুন</translation> <translation id="1254593899333212300">সরাসরি ইন্টারনেট সংযোগ</translation> -<translation id="1257390253112646227">বাজান, সম্পাদনা করুন, ভাগ করুন, কাজগুলি সম্পন্ন করুন৷</translation> +<translation id="1257390253112646227">বাজান, সম্পাদনা করুন, শেয়ার করুন, কাজগুলি সম্পন্ন করুন৷</translation> <translation id="1259724620062607540">শেল্ফ আইটেম ৭</translation> <translation id="1260240842868558614">দেখান:</translation> <translation id="126710816202626562">অনুবাদের ভাষা:</translation> @@ -507,7 +507,7 @@ <translation id="1701062906490865540">এই ব্যক্তিকে সরান</translation> <translation id="1702534956030472451">পশ্চিমী</translation> <translation id="1702987929180449188">সক্ষম করা হলে, সর্বনিম্ন স্ক্রীন dp >= ৮০০ এর ডিভাইসগুলিতে স্ক্রলিংয়ের কারণে সরঞ্জম দণ্ড কখনোই লুকানো হবে না। তবে পৃষ্ঠার বিষয়বস্তু পূর্ণস্ক্রীনে গেলে, তখন এটি আড়াল করা হবে।</translation> -<translation id="1707463636381878959">অন্য ব্যবহারকারীদের সাথে এই নেটওয়ার্ক ভাগ করুন</translation> +<translation id="1707463636381878959">অন্য ব্যবহারকারীদের সাথে এই নেটওয়ার্ক শেয়ার করুন</translation> <translation id="1708199901407471282">নতুন ট্যাব পৃষ্ঠা থেকে একটি প্রস্তাবিত ওয়েবপৃষ্ঠা খোলার সময় যদি প্রস্তাবটির জন্য ইতোমধ্যে একটি ট্যাব খোলা থাকে, তাহলে নতুন ট্যাবে প্রস্তাবটি খোলার পরিবর্তে যেটি খোলা আছে সেটিতে চলে যায়।</translation> <translation id="1708338024780164500">(নিষ্ক্রিয়)</translation> <translation id="1711973684025117106">জিপ করা ব্যর্থ হয়েছে, অপ্রত্যাশিত ত্রুটি: $1</translation> @@ -527,7 +527,7 @@ <translation id="1731589410171062430">মোট: <ph name="NUMBER_OF_SHEETS" /> <ph name="SHEETS_LABEL" /> (<ph name="NUMBER_OF_PAGES" /> <ph name="PAGE_OR_PAGES_LABEL" />)</translation> <translation id="173188813625889224">দিকনির্দেশ</translation> <translation id="1731911755844941020">অনুরোধ পাঠানো হচ্ছে...</translation> -<translation id="173215889708382255">আপনার স্ক্রীন ভাগ করুন - <ph name="APP_NAME" /></translation> +<translation id="173215889708382255">আপনার স্ক্রীন শেয়ার করুন - <ph name="APP_NAME" /></translation> <translation id="1732215134274276513">ট্যাবগুলি আনপিন করুন</translation> <translation id="1737968601308870607">ফাইল বাগ</translation> <translation id="1744108098763830590">পৃষ্ঠভূমি পৃষ্ঠা</translation> @@ -590,7 +590,7 @@ <translation id="1834560242799653253">সজ্জা:</translation> <translation id="1835339313324024">ভার্চুয়াল কিবোর্ডের স্মার্ট ডিপ্লয়মেন্ট করুন</translation> <translation id="1838374766361614909">অনুসন্ধান সাফ করুন</translation> -<translation id="1839704667838141620">এই ফাইলটি কীভাবে ভাগ করা হবে তা পরিবর্তন করুন</translation> +<translation id="1839704667838141620">এই ফাইলটি কীভাবে শেয়ার করা হবে তা পরিবর্তন করুন</translation> <translation id="1839913225882990152">কী ঘটছে তা আমাদের বলুন৷</translation> <translation id="1842969606798536927">অর্থ প্রদান করুন</translation> <translation id="184456654378801210">(দেশীয়)</translation> @@ -604,8 +604,9 @@ <translation id="1857166538520940818">ফাইল সংযুক্ত করুন:</translation> <translation id="1859234291848436338">লিখন নির্দেশনা</translation> <translation id="1864111464094315414">লগইন</translation> -<translation id="1864676585353837027">এই ফাইলগুলি কীভাবে ভাগ করা হবে তা পরিবর্তন করুন</translation> +<translation id="1864676585353837027">এই ফাইলগুলি কীভাবে শেয়ার করা হবে তা পরিবর্তন করুন</translation> <translation id="1864756863218646478">ফাইলটি পাওয়া যায়নি৷</translation> +<translation id="1865769994591826607">শুধুমাত্র একই-সাইট সংযোগগুলি</translation> <translation id="186612162884103683">" <ph name="EXTENSION" /> " নির্দিষ্ট করা অবস্থানে চিত্র, ভিডিও, এবং শব্দের ফাইলগুলি পড়তে ও লিখতে পারে৷</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> আপনার ইনস্টেলশন সম্পূর্ণ করার জন্য প্রস্তুত</translation> <translation id="1873879463550486830">SUID Sandbox</translation> @@ -1193,8 +1194,9 @@ <translation id="2739842825616753233">যখন কোনো সাইট আপনার ক্যামেরা ও মাইক্রোফোনে অ্যাক্সেস চায় তখন জিজ্ঞাসা করবে (প্রস্তাবিত)</translation> <translation id="2740393541869613458">তত্ত্বাবধানে থাকা ব্যবহারকারীর দ্বারা পরিদর্শিত ওয়েবসাইটগুলি পর্যালোচনা করুন, এবং</translation> <translation id="2743387203779672305">ক্লিপবোর্ডে অনুলিপি করুন</translation> -<translation id="2744221223678373668">ভাগ করে নেওয়া</translation> +<translation id="2744221223678373668">শেয়ার করে নেওয়া</translation> <translation id="2745080116229976798">Microsoft Qualified Subordination</translation> +<translation id="2745576239403924641">আপনার Chromebook এ চালানোর জন্য Android অ্যাপ্লিকেশানগুলি সক্ষম করুন।</translation> <translation id="2747990718031257077">নতুন এক্সটেনশান সরঞ্জামদন্ড ডিজাইন (বিকাশের ক্ষেত্রে) সক্ষম করে৷</translation> <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> এ সাইন ইন করুন </translation> <translation id="2749881179542288782">বানান সহ ব্যাকরণ চেক করুন</translation> @@ -1408,6 +1410,7 @@ <translation id="3011284594919057757">Flash সম্পর্কে</translation> <translation id="3011362742078013760">ছ্দ্মবেশী উইন্ডোতে সকল &বুকমার্ক খুলুন</translation> <translation id="3012631534724231212">(আইফ্রেম)</translation> +<translation id="3012804260437125868">শুধুমাত্র সুরক্ষিত একই-সাইটের সংযোগগুলি</translation> <translation id="3012890944909934180">ডেস্কটপে Chrome পুনরারম্ভ করুন</translation> <translation id="3012917896646559015">দয়া করে আপনার কম্পিউটারকে মেরামতের সুবিধা প্রদানকারীর কাছে পাঠাতে অবিলম্বে আপনার হার্ডওয়্যার প্রস্তুতকারকের সাথে যোগাযোগ করুন৷</translation> <translation id="3015992588037997514">এই কোডটি কি আপনার Chromebox এর স্ক্রীনে প্রদর্শিত হয়?</translation> @@ -1605,7 +1608,7 @@ <translation id="3294437725009624529">অতিথি</translation> <translation id="329650768420594634">Pack এক্সটেনশান সতর্কীকরণ</translation> <translation id="3296763833017966289">জর্জিয়ান</translation> -<translation id="3297788108165652516">নেটওয়ার্কটি অন্যান্য ব্যবহারকারীদের সাথে ভাগ করা হয়েছে৷</translation> +<translation id="3297788108165652516">নেটওয়ার্কটি অন্যান্য ব্যবহারকারীদের সাথে শেয়ার করা হয়েছে৷</translation> <translation id="3298076529330673844">সর্বদা চালানোর জন্য মঞ্জুরি প্রাপ্ত</translation> <translation id="329838636886466101">মেরামত</translation> <translation id="3298461240075561421">আপনি এই ওয়েবসাইট থেকে ফাইলগুলি আগে ডাউনলোড করে থাকলেও, ওয়েবসাইটটি হ্যাক হয়ে থাকতে পারে৷ এই ফাইলটি পুনরুদ্ধার করার বদলে, আপনি পরে ডাউনলোড করার চেষ্টা করতে পারেন৷</translation> @@ -1636,6 +1639,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" /> বোতাম: সাইন ইন ত্রুটি</translation> <translation id="3319048459796106952">নতুন &ছদ্মবেশ উইন্ডো</translation> <translation id="331915893283195714">মাউস কার্সার অক্ষম করতে সব সাইটকে অনুমতি দিন</translation> +<translation id="3319364804843246307">Android অ্যাপ্লিকেশানগুলি</translation> <translation id="3320859581025497771">আপনার ক্যারিয়ার</translation> <translation id="3323235640813116393">MHTML হিসাবে পৃষ্ঠাগুলির সংরক্ষণকে সক্ষম করে: HTML এবং সমস্ত উপ-সম্পদগুলি সহ একটিমাত্র টেক্সট ফাইল৷</translation> <translation id="3323447499041942178">পাঠ্য বাক্স</translation> @@ -1740,6 +1744,7 @@ <translation id="347719495489420368"><ph name="PLUGIN_NAME" /> চালাতে ডান-ক্লিক করুন।</translation> <translation id="347785443197175480">আপনার ক্যামেরা এবং মাইক্রোফোন অ্যাক্সেস করতে <ph name="HOST" /> এর মঞ্জুরি অবিরত রাখুন</translation> <translation id="3478315065074101056">XPS Chrome এর সঙ্গে থাকা মেঘ মুদ্রণের সঙ্গে সংযুক্ত ক্লাসিক মুদ্রণগুলির জন্য উন্নত সেটিংগুলি সক্ষম করে। এই ফ্ল্যাগ পরিবর্তন করার পর মুদ্রণগুলি আবার সংযুক্ত করা আবশ্যক।</translation> +<translation id="3479539252931486093">এটি কি অপ্রত্যাশিত ছিল? <ph name="BEGIN_LINK" />আমাদেরকে জানান<ph name="END_LINK" /></translation> <translation id="3479552764303398839">এখনই নয়</translation> <translation id="3480892288821151001">উইন্ডো বাম দিকে রাখুন</translation> <translation id="3481915276125965083">এই পৃষ্ঠাতে নিম্নোক্ত পপ-আপগুলি ব্লক করা হয়েছে:</translation> @@ -1774,7 +1779,7 @@ <translation id="3512410469020716447">{NUM_DOWNLOAD,plural, =1{ডাউনলোড বাতিল করুন}one{ডাউনলোডগুলি বাতিল করুন}other{ডাউনলোডগুলি বাতিল করুন}}</translation> <translation id="3512810056947640266">URL (ঐচ্ছিক):</translation> <translation id="351486934407749662">খুবই দীর্ঘ সময়</translation> -<translation id="3517839692979918726"><ph name="APP_NAME" /> আপনার স্ক্রীনের সামগ্রী ভাগ করতে চায়৷ আপনি কি ভাগ করতে চান তা চয়ন করুন।</translation> +<translation id="3517839692979918726"><ph name="APP_NAME" /> আপনার স্ক্রীনের সামগ্রী শেয়ার করতে চায়৷ আপনি কি শেয়ার করতে চান তা চয়ন করুন।</translation> <translation id="3518086201899641494">ক্যাপটিভ পোর্টালগুলির সম্বন্ধে বিজ্ঞপ্তিগুলি</translation> <translation id="3519867315646775981">লিপ্যন্তরকরণ (shalom ← שלום)</translation> <translation id="3522159121915794564">অবৈধ TLS/SSL শংসাপত্রের চেইনসমূহ সংগ্রহ নির্বাচন করতে ব্যবহারকারীদের মঞ্জুরি দেয়৷</translation> @@ -1797,7 +1802,7 @@ <translation id="3550915441744863158">Chrome স্বয়ংক্রিয়ভাবে আপডেট হয় তাই আপনি সবসময় নবীনতম সংস্করণটি পান</translation> <translation id="3551117997325569860">প্রক্সি সেটিংস পরিবর্তন করতে, "<ph name="USE_SHARED_PROXIES" />" সেটিং সক্ষম করুন৷</translation> <translation id="3551320343578183772">ট্যাব বন্ধ করুন</translation> -<translation id="3554751249011484566">নিম্নলিখিত বিশদ বিবরণটি <ph name="SITE" /> এর সাথে ভাগ করা হবে</translation> +<translation id="3554751249011484566">নিম্নলিখিত বিশদ বিবরণটি <ph name="SITE" /> এর সাথে শেয়ার করা হবে</translation> <translation id="3555812735919707620">এক্সটেনশান সরান</translation> <translation id="3559661023937741623">আপনার সুরক্ষার জন্য, দয়া করে আপনার কার্ডের বিবরণ যাচাই করুন৷</translation> <translation id="3561204836318837461">BSSID:</translation> @@ -1807,7 +1812,7 @@ <translation id="3564334271939054422">আপনি যে (<ph name="NETWORK_ID" />) Wi-Fi নেটওয়ার্ক ব্যবহার করছেন তার জন্য লগ ইন পৃষ্ঠা দেখার প্রয়োজন হতে পারে৷</translation> <translation id="3564708465992574908">জুম স্তরগুলি</translation> <translation id="356512994079769807">সিস্টেম ইনস্টলেশনের সেটিংস</translation> -<translation id="3569382839528428029">আপনি কি <ph name="APP_NAME" /> এর দ্বারা আপনার স্ক্রিন ভাগ করতে চান?</translation> +<translation id="3569382839528428029">আপনি কি <ph name="APP_NAME" /> এর দ্বারা আপনার স্ক্রিন শেয়ার করতে চান?</translation> <translation id="3569954353360281408">প্যাক করা অ্যাপ্লিকেশানগুলি ত্রুটিমুক্তকরণ</translation> <translation id="3570985609317741174">ওয়েব সামগ্রী</translation> <translation id="3571734092741541777">সেট আপ</translation> @@ -1815,8 +1820,8 @@ <translation id="3574305903863751447"><ph name="CITY" />, <ph name="STATE" /> <ph name="COUNTRY" /></translation> <translation id="357479282490346887">লিথুয়ানিয়ান</translation> <translation id="3578331450833904042">ডিফল্ট (সবকিছু টেনে নেয়)</translation> -<translation id="3578594933904494462">এই ট্যাবের সামগ্রী ভাগ করা হচ্ছে৷</translation> -<translation id="357886715122934472">আপনার মালিকানাধীন একটি গোষ্ঠীর সাথে <strong><ph name="SENDER" /></strong> একটি মুদ্রক ভাগ করতে চান <strong><ph name="PRINTER_NAME" /></strong>: <strong><ph name="GROUP_NAME" /></strong>. যদি আপানি স্বীকার করেন তবে, গোষ্ঠীর সকল সদস্য মুদ্রকটিকে মুদ্রণ করতে পারবেন৷</translation> +<translation id="3578594933904494462">এই ট্যাবের সামগ্রী শেয়ার করা হচ্ছে৷</translation> +<translation id="357886715122934472">আপনার মালিকানাধীন একটি গোষ্ঠীর সাথে <strong><ph name="SENDER" /></strong> একটি মুদ্রক শেয়ার করতে চান <strong><ph name="PRINTER_NAME" /></strong>: <strong><ph name="GROUP_NAME" /></strong>. যদি আপানি স্বীকার করেন তবে, গোষ্ঠীর সকল সদস্য মুদ্রকটিকে মুদ্রণ করতে পারবেন৷</translation> <translation id="3581912141526548234">বলবত্ করে (হ্যাশ পেতে চেষ্টা করে, এবং সফল হলে তাদের বলবত্ করে)</translation> <translation id="3582742550193309836">পুনরাবৃত্তির হার:</translation> <translation id="3582792037806681688">একটি ব্যবহারকারীর জন্য এই সেশনে একাধিক সাইন ইন অননুমোদিত হয়েছে</translation> @@ -1887,7 +1892,7 @@ <translation id="3654092442379740616">সিঙ্ক ত্রুটি: <ph name="PRODUCT_NAME" /> তারিখ সীমার বাইরে এবং আপডেট করা প্রয়োজন৷</translation> <translation id="3655670868607891010">আপনি যদি এটি প্রায়শই দেখতে পান, তাহলে <ph name="HELP_LINK" /> চেষ্টা করে দেখুন৷</translation> <translation id="3655712721956801464">{NUM_FILES,plural, =1{একটি ফাইলে এটার স্থায়ী অ্যাক্সেস আছে৷}one{#টি ফাইলে এটার স্থায়ী অ্যাক্সেস আছে৷}other{#টি ফাইলে এটার স্থায়ী অ্যাক্সেস আছে৷}}</translation> -<translation id="3656059567098593256"><ph name="APP_NAME" /> আপনার স্ক্রীনের সামগ্রী <ph name="TARGET_NAME" /> এর সঙ্গে ভাগ করতে চায়৷ আপনি কি ভাগ করতে চান তা চয়ন করুন।</translation> +<translation id="3656059567098593256"><ph name="APP_NAME" /> আপনার স্ক্রীনের সামগ্রী <ph name="TARGET_NAME" /> এর সঙ্গে শেয়ার করতে চায়৷ আপনি কি শেয়ার করতে চান তা চয়ন করুন।</translation> <translation id="3657468915905674858">PPAPI Win32k লকডাউন সক্ষম করুন।</translation> <translation id="3660234220361471169">অবিশ্বস্থ</translation> <translation id="3665371460012342183">জুম করা বুদ্বুদ সক্রিয় করুন যা ঘটনাক্রমে একই সময়ে একটির বেশি লিঙ্কে স্পর্শ করলে টাচস্ক্রীন প্রদর্শিত হয়৷</translation> @@ -1902,7 +1907,7 @@ <translation id="3678559383040232393">মাল্টাদেশীয় কীবোর্ড</translation> <translation id="3680173818488851340">নিম্ন অগ্রাধিকারের আইফ্রেমগুলি।</translation> <translation id="3681007416295224113">শংসাপত্র তথ্য</translation> -<translation id="3683524264665795342"><ph name="APP_NAME" /> এর থেকে স্ক্রিন ভাগ করার অনুরোধ</translation> +<translation id="3683524264665795342"><ph name="APP_NAME" /> এর থেকে স্ক্রিন শেয়ার করার অনুরোধ</translation> <translation id="3685122418104378273">মোবাইল ডেট ব্যবহার করার সময় ডিফল্টরূপে Google ড্রাইভ সিঙ্ক অক্ষম করা হয়৷</translation> <translation id="3685387984467886507">একটি নির্দিষ্ট সময়কালের জন্য SSL ত্রুটিগুলির মাধ্যমে চালনা করতে, সিদ্ধান্তগুলিকে মনে রাখে৷</translation> <translation id="3687701603889589626">chrome:// URLগুলিতে এক্সটেনশানগুলির চলাকে সক্ষম করে, যেখানে এক্সটেনশানগুলি স্পষ্ট রূপে এই অনুমতির অনুরোধ করে৷</translation> @@ -2058,7 +2063,7 @@ <translation id="3893536212201235195">আপনার অ্যাক্সেসিবিলিটি সেটিংস পড়ুন ও পরিবর্তন করুন</translation> <translation id="3893630138897523026">ChromeVox (কথ্য প্রতিক্রিয়া)</translation> <translation id="3893977120523121937">সকল প্ল্যাগ ইন সামগ্রী চালু করুন</translation> -<translation id="389589731200570180">অতিথিদের সাথে ভাগ করুন</translation> +<translation id="389589731200570180">অতিথিদের সাথে শেয়ার করুন</translation> <translation id="3897092660631435901">মেনু</translation> <translation id="3898521660513055167">টোকেন স্থিতি</translation> <translation id="3899879303189199559">এক বছরের বেশি অফ লাইন</translation> @@ -2229,7 +2234,7 @@ <translation id="4163560723127662357">অজানা কীবোর্ড</translation> <translation id="4165986682804962316">সাইটের সেটিংস</translation> <translation id="4166210099837486476">আপনি Chrome এ অ্যাকশন গ্রহনের সময় নজর রাখুন</translation> -<translation id="4168015872538332605"><ph name="PRIMARY_EMAIL" /> এর কিছু সেটিংস আপনার সাথে ভাগ করা হচ্ছে৷ এই সেটিংস শুধুমাত্র আপনার অ্যাকাউন্টে একাধিক সাইন ইন ব্যবহারের সময় কাজ করে৷</translation> +<translation id="4168015872538332605"><ph name="PRIMARY_EMAIL" /> এর কিছু সেটিংস আপনার সাথে শেয়ার করা হচ্ছে৷ এই সেটিংস শুধুমাত্র আপনার অ্যাকাউন্টে একাধিক সাইন ইন ব্যবহারের সময় কাজ করে৷</translation> <translation id="4172051516777682613">সর্বদা দেখান</translation> <translation id="417475959318757854">অ্যাপ্লিকেশান লঞ্চারটিকে কেন্দ্রে আনুন।</translation> <translation id="4176463684765177261">অক্ষম</translation> @@ -2561,7 +2566,7 @@ <translation id="4731351517694976331">আপনার অবস্থান অ্যাক্সেস করতে Google পরিষেবাগুলিকে মঞ্জুর করুন</translation> <translation id="4731422630970790516">শেল্ফ আইটেম ৩</translation> <translation id="473221644739519769">আপনার মুদ্রকগুলি Google মেঘ মুদ্রণের সাথে যোগ করা হলে তা আপনাকে যেকোনো স্থান থেকে, - যেকোনো স্থানে মুদ্রণের মঞ্জুরি দেয়৷ আপনি যার সাথে চান তার সাথে আপনার মুদ্রকগুলি ভাগ করুন + যেকোনো স্থানে মুদ্রণের মঞ্জুরি দেয়৷ আপনি যার সাথে চান তার সাথে আপনার মুদ্রকগুলি শেয়ার করুন এবং তাদেরকে Chrome, আপনার ফোন, ট্যাবলেট, PC, বা অন্য যেকোনো ওয়েব-সংযুক্ত ডিভাইস থেকে মুদ্রণ করুন৷</translation> <translation id="4732760563705710320">দুঃখিত, এই ভিডিওটি আপনার কাস্ট ডিভাইসে সমর্থিত নয়৷</translation> @@ -2710,6 +2715,7 @@ <translation id="4941246025622441835">এন্টারপ্রাইজ ব্যবস্থাপনার জন্য নথিভুক্ত করার সময় এই ডিভাইস দাবি ব্যবহার করুন:</translation> <translation id="4942394808693235155">আপডেটগুলি পরীক্ষা এবং প্রয়োগ করুন</translation> <translation id="494286511941020793">প্রক্সি কনফিগারেশন সহায়তা</translation> +<translation id="4945378551914476156">আপনার বুকমার্ক, ইতিহাস এবং অন্যান্য সেটিংস আপনার Google অ্যাকাউন্টে সিঙ্ক হবে যাতে আপনি যেখানেই Chrome ব্যবহার করেন সেখানেই সেগুলি ব্যবহার করতে পারেন। আপনি <ph name="BEGIN_LINK" /> থেকে এটি পরিবর্তন করতে পারেন।</translation> <translation id="4950138595962845479">বিকল্পসমূহ...</translation> <translation id="4952186391360931024">অ-মেটারিয়াল</translation> <translation id="4954544650880561668">ডিভাইস নিয়ন্ত্রণ</translation> @@ -2843,9 +2849,8 @@ <ph name="LINE_BREAKS" /> ব্যবহার চলাকালীন অবস্থায় আপনার ডিভাইস সরিয়ে ফেলা হলে ডেটা হারিয়ে যেতে পারে৷ দয়া করে ক্রিয়াকলাপ শেষ হয়ে যাওয়া পর্যন্ত অপেক্ষা করুন, তারপর ফাইলগুলির অ্যাপ্লিকেশান ব্যবহার করে ডিভাইসটি বের করে নিন৷</translation> <translation id="5159488553889181171"><ph name="PLUGIN_NAME" /> এর ডাউনলোড বাতিল করা হয়েছে৷</translation> -<translation id="5159628598068481063">Windows ডেস্কটপ অনুসন্ধান পুনঃনির্দেশ পছন্দ</translation> <translation id="5160857336552977725">আপনার <ph name="DEVICE_TYPE" />-এ সাইন ইন করুন</translation> -<translation id="5163869187418756376">ভাগ করে ব্যর্থ হয়েছে৷ আপনার সংযোগটি পরীক্ষা করে পরে আবার চেষ্টা করুন৷</translation> +<translation id="5163869187418756376">শেয়ার করে ব্যর্থ হয়েছে৷ আপনার সংযোগটি পরীক্ষা করে পরে আবার চেষ্টা করুন৷</translation> <translation id="516592729076796170">মার্কিন যুক্তরাষ্ট্র প্রোগ্রামার ডিভোরাক</translation> <translation id="516595669341608434">মেটারিয়াল ডিজাইন নীতি পৃষ্ঠা সক্ষম করুন</translation> <translation id="5166159831426598151">পৃষ্ঠার ট্রিগার করা পূর্ণ স্ক্রীন বা মাউস পয়েন্টার লক অবস্থা যোগ করার সময় একটি পরীক্ষামূলক নতুন ব্যবহারকারীর অভিজ্ঞতা।</translation> @@ -3212,7 +3217,6 @@ <translation id="567881659373499783">সংস্করণ <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522"><ph name="WEBSITE_1" />এ আপনার ডেটা পড়ে</translation> <translation id="5680928275846978395">ওভারভিউ মোডে পাঠ্য ফিল্টার করা</translation> -<translation id="568428328938709143">অ্যাকাউন্ট সরানো হয়েছে</translation> <translation id="5684661240348539843">সম্পদ শনাক্তকারী</translation> <translation id="569068482611873351">আমদানি...</translation> <translation id="56907980372820799">ডেটা লিঙ্ক করুন</translation> @@ -3452,6 +3456,7 @@ <translation id="604001903249547235">ক্লাউড ব্যাকআপ</translation> <translation id="6040143037577758943">বন্ধ</translation> <translation id="604124094241169006">স্বয়ংক্রিয়</translation> +<translation id="6042308850641462728">আরো</translation> <translation id="604257181445267932">Smart Lock আপনাকে Google এর মাধ্যমে আপনি সংরক্ষণ করেছেন এমন পাসওয়ার্ডগুলি ব্যবহার করে অ্যাপ্লিকেশান ও সাইটগুলিতে সাইন ইন করতে সাহায্য করে।</translation> <translation id="6049065490165456785">অভ্যন্তরীণ ক্যামেরা থেকে ফটো</translation> <translation id="6051028581720248124">FedEx Office মুদ্রণের দ্বারা, আপনি তাদের <ph name="START_LINK" />ব্যবহারের শর্তাদিতে <ph name="END_LINK" /> সম্মত হন৷</translation> @@ -3483,7 +3488,6 @@ <translation id="6089481419520884864">পৃষ্ঠা পাতন করুন</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">আপডেট বাতিল হচ্ছে...</translation> -<translation id="6095149522260432647">একটি পছন্দ সক্ষম করে যা ডিফল্ট সার্চ ইঞ্জিনে Windows ডেস্কটপ অনুসন্ধানগুলির পুনঃনির্দেশ অনুমোদিত করে।</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">সর্বাধিক খুলুন</translation> <translation id="6096326118418049043">X.500 নাম</translation> @@ -3754,12 +3758,12 @@ <translation id="6515074996644569021">প্রথম-চালিত টিউটোরিয়ালের রুপান্তরণ প্রাণবন্ত হয়।</translation> <translation id="6518014396551869914">ছবি অনুলি&পি করুন</translation> <translation id="6518133107902771759">যাচাই করুন</translation> -<translation id="651942933739530207">আপনার স্ক্রীন এবং অডিও আউটপুট ভাগ করতে আপনি কি <ph name="APP_NAME" /> চান?</translation> +<translation id="651942933739530207">আপনার স্ক্রীন এবং অডিও আউটপুট শেয়ার করতে আপনি কি <ph name="APP_NAME" /> চান?</translation> <translation id="6519437681804756269">[<ph name="TIMESTAMP" />] <ph name="FILE_INFO" /> <ph name="EVENT_NAME" /></translation> <translation id="6523029110630438127"><ph name="ORIGIN" /> এখন পূর্ণ-স্ক্রীনে প্রদর্শন করা হয়৷</translation> -<translation id="6527303717912515753">ভাগ করুন</translation> +<translation id="6527303717912515753">শেয়ার করুন</translation> <translation id="6528546217685656218">এই ক্লায়েন্ট শংসাপত্রের জন্য ব্যক্তিগত কী পাওয়া যাচ্ছে না বা এটি অবৈধ।</translation> <translation id="653019979737152879"><ph name="FILE_NAME" /> সিঙ্ক হচ্ছে...</translation> <translation id="6534583978616527129">সংযোগটি আরম্ভ করুন</translation> @@ -4563,7 +4567,7 @@ <translation id="7788668840732459509">অবস্থান:</translation> <translation id="7791543448312431591">যুক্ত করুন</translation> <translation id="7792012425874949788">সাইন ইন করার সময় কিছু সমস্যা হয়েছে</translation> -<translation id="7792388396321542707">ভাগ করা বন্ধ করুন</translation> +<translation id="7792388396321542707">শেয়ার করা বন্ধ করুন</translation> <translation id="7794058097940213561">ডিভাইস বিন্যাস করুন</translation> <translation id="7799329977874311193"> HTML দস্তাবেজ</translation> <translation id="7800304661137206267">বার্তা প্রমাণীকরণ এবং <ph name="KX" />-কে কী এক্সচেঞ্জ নির্মাণকৌশল হিসাবে সংযোগটি <ph name="CIPHER" /> ব্যবহার করে <ph name="MAC" />-এর সাথে এনক্রিপ্ট হয়েছে৷</translation> @@ -4602,7 +4606,7 @@ <translation id="7847212883280406910"><ph name="IDS_SHORT_PRODUCT_OS_NAME" /> এ স্যুইচ করার জন্য Ctrl + Alt + S টিপুন</translation> <translation id="7848981435749029886">আপনার ক্যামেরা অ্যাক্সেস আপনার প্রশাসক দ্বারা নিয়ন্ত্রিত৷</translation> <translation id="7849264908733290972">&চিত্র নতুন ট্যাবে খুলুন</translation> -<translation id="7850851215703745691">এই ড্রাইভ ফাইলগুলি এখনো ভাগ করা হয়নি</translation> +<translation id="7850851215703745691">এই ড্রাইভ ফাইলগুলি এখনো শেয়ার করা হয়নি</translation> <translation id="7851457902707056880">শুধুমাত্র মালিক অ্যাকউন্টে সাইন ইন সীমাবদ্ধ করা হয়েছে৷ দয়া করে পুনরায় বুট করে মালিক অ্যাকউন্ট দিয়ে সাইন ইন করুন৷ মেশিনটি 30 সেকেন্ডের মধ্যে স্বয়ংক্রিয় ভাবে পুনরায় বুট হবে৷</translation> <translation id="7851716364080026749">সর্বদা ক্যামেরা এবং মাইক্রোফোনের অ্যাক্সেস অবরুদ্ধ করুন</translation> <translation id="7851842096760874408">ট্যাব ক্যাপচার আপস্কেলিং গুণমান৷</translation> @@ -4665,6 +4669,7 @@ <translation id="7926906273904422255">অ-নিরাপদ মূলগুলিকে অ-নিরাপদ বা "সন্দেহজনক" হিসেবে চিহ্নিত করুন৷</translation> <translation id="7928710562641958568">বের করে দেওযার ডিভাইস</translation> <translation id="7938594894617528435">বর্তমানে অফলাইন</translation> +<translation id="7939374455203157513">ক্লাউড পরিষেবাগুলি সক্ষম করুন</translation> <translation id="7939412583708276221">যে কোনও অবস্থাতেই রাখুন</translation> <translation id="7939997691108949385">পরিচালক <ph name="MANAGEMENT_URL" /> এ এই তত্ত্বাবধানে থাকা ব্যবহারকারীর জন্য বিধিনিষেধ এবং সেটিংস কনফিগার করতে সক্ষম হবেন৷</translation> <translation id="7943385054491506837">মার্কিন যুক্তরাষ্ট্রীয় কোলেম্যাক</translation> @@ -4780,7 +4785,7 @@ <translation id="8101987792947961127">পরবর্তী রিবুটে পাওয়ারওয়াশ প্রয়োজন</translation> <translation id="8102535138653976669"><ph name="PRODUCT_NAME" /> নিরাপপদভাবে আপনার ডেটাকে আপনার Google অ্যাকাউন্টের সাথে সিঙ্ক করে৷ সবকিছুকে সিঙ্ক করুন অথবা সিঙ্ক করা ডেটার প্রকার এবং এনক্রিপশন সেটিংস কাস্টমাইজ করুন৷</translation> <translation id="8104696615244072556">আপনার <ph name="IDS_SHORT_PRODUCT_NAME" /> ডিভাইসটি পাওয়ারওয়াশ করুন এবং পূর্ববর্তী সংস্করণে ফিরে যান।</translation> -<translation id="8106045200081704138">আমার সাথে ভাগ করা</translation> +<translation id="8106045200081704138">আমার সাথে শেয়ার করা</translation> <translation id="8106211421800660735">ক্রেডিট কার্ড নম্বর</translation> <translation id="8106242143503688092">লোড করবেন না (প্রস্তাবিত)</translation> <translation id="8109930990200908494">ব্যবহারকারী সার্টিফিকেটের জন্য সাইন ইন প্রয়োজন।</translation> @@ -4805,7 +4810,7 @@ <translation id="8135013534318544443">2D ক্যানভাস কমান্ডগুলি রেকর্ড করতে প্রদর্শন তালিকা ব্যবহার করা সক্ষম করে। এর ফলে 2D ক্যানভাস রাস্টারাইজ করার কাজটি ভিন্ন থ্রেডে সম্পাদন করা যায়।</translation> <translation id="8135557862853121765"><ph name="NUM_KILOBYTES" />K</translation> <translation id="8136149669168180907"><ph name="TOTAL_SIZE" />-এর <ph name="DOWNLOADED_AMOUNT" /> ডাউনলোড হয়েছে</translation> -<translation id="8137331602592933310">"<ph name="FILENAME" />" আপনার সাথে ভাগ করা হয়েছে৷ আপনি এটিকে মুছে ফেলতে পারবেন না কারণ আপনি এটির মালিক নন৷</translation> +<translation id="8137331602592933310">"<ph name="FILENAME" />" আপনার সাথে শেয়ার করা হয়েছে৷ আপনি এটিকে মুছে ফেলতে পারবেন না কারণ আপনি এটির মালিক নন৷</translation> <translation id="8137559199583651773">এক্সটেনশানগুলি পরিচালনা করুন</translation> <translation id="8138082791834443598">ঐচ্ছিক — এই ডিভাইসের সাথে যুক্ত করার জন্য নতুন তথ্য দিন বা বিদ্যমান তথ্য আপডেট করুন।</translation> <translation id="8140778357236808512">একটি বিদ্যমান তত্ত্বাবধানে থাকা ব্যবহারকারীকে আমদানি করুন</translation> @@ -5179,10 +5184,10 @@ <translation id="8680251145628383637">আপনার সকল ডিভাইসে আপনার বুকমার্ক, ইতিহাস এবং অন্যান্য সেটিংস পেতে সাইন ইন করুন। এছাড়াও আপনি স্বয়ংক্রিয়ভাবে আপনার Google পরিষেবায় সাইন ইন করবেন।</translation> <translation id="8680536109547170164"><ph name="QUERY" />, উত্তর, <ph name="ANSWER" /></translation> <translation id="8684255857039823328">পাসওয়ার্ড সংরক্ষিত হয়েছে। এখানে <ph name="MANAGEMENT_LINK" /> গিয়ে যেকোনো ডিভাইস থেকে আপনার পাসওয়ার্ডগুলি অ্যাক্সেস করুন।</translation> -<translation id="8686213429977032554">এই ড্রাইভ ফাইল এখনো ভাগ করা হয়নি</translation> +<translation id="8686213429977032554">এই ড্রাইভ ফাইল এখনো শেয়ার করা হয়নি</translation> <translation id="8687485617085920635">পরবর্তী উইন্ডো</translation> <translation id="8688579245973331962">আপনার নাম দেখতে পাচ্ছেন না?</translation> -<translation id="8688644143607459122">‘অবিরত থাকুন’ ক্লিক করার মাধ্যমে আপনি Google Payments ব্যবহার করার সম্মতি জানাচ্ছেন। জালিয়াতি থেকে আপনাকে সুরক্ষা দিতে, আপনার কম্পিউটার (এর অবস্থান সমেত) সম্পর্কিত তথ্য Google Payments এর সাথে ভাগ করা হবে।</translation> +<translation id="8688644143607459122">‘অবিরত থাকুন’ ক্লিক করার মাধ্যমে আপনি Google Payments ব্যবহার করার সম্মতি জানাচ্ছেন। জালিয়াতি থেকে আপনাকে সুরক্ষা দিতে, আপনার কম্পিউটার (এর অবস্থান সমেত) সম্পর্কিত তথ্য Google Payments এর সাথে শেয়ার করা হবে।</translation> <translation id="8689102680909215706">"<ph name="EXTENSION_NAME" />" এক্সটেনশানটিকে দূর থেকে ইনস্টল করা হয়েছে৷</translation> <translation id="8689341121182997459">মেয়াদ শেষ:</translation> <translation id="8690754533598178758">Adobe Flash Player মাইক্রোফোন ব্যতিক্রমগুলি ভিন্ন।</translation> @@ -5217,6 +5222,7 @@ <translation id="872537912056138402">ক্রোয়েশিয়</translation> <translation id="8726206820263995930">সার্ভার থেকে নীতি সেটিংস নিয়ে আসার সময়ে ত্রুটি: <ph name="CLIENT_ERROR" />৷</translation> <translation id="8726888928275282477">নতুন ট্যাব খোলার পরিবর্তে chrome://এক্সটেনশানে এমবেডেড উপাদান হিসেবে এক্সটেনশানের বিকল্পগুলি প্রদর্শন করে।</translation> +<translation id="8727142376512517020">এটিকে আবার দেখাবেন না</translation> <translation id="8728672262656704056">আপনি ছদ্মবেশে রয়েছেন৷</translation> <translation id="8730621377337864115">সম্পন্ন হয়েছে</translation> <translation id="8731332457891046104"><ph name="DEVICE_TYPE" /> কে তালিকামুক্ত করুন</translation> @@ -5253,11 +5259,11 @@ <translation id="8777628254805677039">রুট পাসওয়ার্ড</translation> <translation id="878069093594050299">এই শংসাপত্রটি নিম্নলিখিত ব্যবহারগুলির জন্য যাচাইকৃত:</translation> <translation id="8782565991310229362">Kiosk অ্যাপ্লিকেশান লঞ্চ বাতিল হয়েছে৷</translation> -<translation id="8783093612333542422">আপনার সাথে <strong><ph name="SENDER" /></strong> একটি মুদ্রক ভাগ করতে চান <strong><ph name="PRINTER_NAME" /></strong>৷</translation> +<translation id="8783093612333542422">আপনার সাথে <strong><ph name="SENDER" /></strong> একটি মুদ্রক শেয়ার করতে চান <strong><ph name="PRINTER_NAME" /></strong>৷</translation> <translation id="878431691778285679">দেখে মনে হচ্ছে আপনি ইতিমধ্যেই সেই নামটি দিয়ে একটি ব্যবহারকারীকে পরিচালনা করছেন৷<ph name="LINE_BREAK" />আপনি কি এই ডিভাইসে <ph name="BEGIN_LINK" />আমদানি <ph name="PROFILE_NAME" /> করতে চান<ph name="END_LINK" />?</translation> <translation id="8784626084144195648">হাজার প্রতি গড়</translation> <translation id="8785135611469711856">প্ল্যাগ ইন প্রতিক্রিয়াবিহীন</translation> -<translation id="8787254343425541995">ভাগ করে নেওয়া নেটওয়ার্কগুলির জন্য প্রক্সিগুলির অনুমতি দিন</translation> +<translation id="8787254343425541995">শেয়ার করে নেওয়া নেটওয়ার্কগুলির জন্য প্রক্সিগুলির অনুমতি দিন</translation> <translation id="878763818693997570">এই নামটি খুবই লম্বা</translation> <translation id="8787865569533773240">পরিবর্তিত <ph name="IDS_SHORT_PRODUCT_NAME" /> সেটিংস রিসেট করুন</translation> <translation id="8791534160414513928">আপনার ব্রাউজিং ট্র্যাফিকের মাধ্যমে একটি 'ট্র্যাক করবেন না' অনুরোধ পাঠান</translation> @@ -5327,7 +5333,7 @@ <translation id="8901822611024316615">চেক QWERTY কীবোর্ড</translation> <translation id="8903921497873541725">জুম বাড়ান</translation> <translation id="8908902564709148335">সতর্কতা: আপনি এই কম্পিউটারে --স্ক্রিপ্টের-প্রয়োজনীয়-অ্যাকশন ফ্ল্যাগ সক্ষম করেছেন, যা এই এক্সটেনশানটির কার্যক্ষমতাকে সীমিত করে৷ যদিও, অন্য ডিভাইসগুলি এই পতাকা সমর্থন নাও করতে পারে বা এটি হয়তো সক্ষম করা নাও থাকতে পারে৷ এছাড়াও সেই ডিভাইসগুলিতে, এই এক্সটেনশানটি এগুলি করতে পারে:</translation> -<translation id="8910146161325739742">আপনার স্ক্রীন ভাগ করুন</translation> +<translation id="8910146161325739742">আপনার স্ক্রীন শেয়ার করুন</translation> <translation id="8911079125461595075">Google <ph name="EXTENSION_NAME" /> কে ক্ষতিকারক হিসাবে পতাকাঙ্কিত করেছে এবং ইনস্টলেশনকে আটকে দিয়েছে৷</translation> <translation id="8912793549644936705">বিস্তার</translation> <translation id="8914326144705007149">খুব বড়</translation> @@ -5379,7 +5385,6 @@ <translation id="8986362086234534611">ভুলে যান</translation> <translation id="8986494364107987395">ব্যবহারের পরিসংখ্যান এবং ক্র্যাশ প্রতিবেদনগুলি স্বয়ংক্রিয়ভাবে Google-এ পাঠান</translation> <translation id="8987927404178983737">মাস</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Netscape শংসাপত্র ভিত্তি URL</translation> <translation id="8994845581478641365">DirectWrite হরফ ক্যাশে নির্মাতা</translation> <translation id="8995603266996330174">পরিচালনা করেছেন <ph name="DOMAIN" /> </translation> @@ -5518,7 +5523,7 @@ <translation id="9186729806195986201">এছাড়াও <ph name="IDS_SHORT_PRODUCT_NAME" /> এর পূর্বে ইনস্টল করা সংস্করণ ফিরিয়ে আনুন৷</translation> <translation id="9188441292293901223">এই <ph name="DEVICE_TYPE" /> আনলক করতে দয়া করে আপনার ফোনকে একটি আরো নতুন সংস্করণের Android এ আপডেট করুন৷</translation> <translation id="9189690067274055051">আপনার ফোন আনলক করুন এবং প্রবেশ করতে আপনার <ph name="DEVICE_TYPE" />-এর কাছাকাছি আনুন।</translation> -<translation id="9190063653747922532">L2TP/IPসেকে + পূর্বে-ভাগ করা কী</translation> +<translation id="9190063653747922532">L2TP/IPসেকে + পূর্বে-শেয়ার করা কী</translation> <translation id="9201305942933582053">Chrome এর জন্য Google Now!</translation> <translation id="9203398526606335860">&প্রোফাইলিং সক্ষমিত</translation> <translation id="9203478404496196495">ট্যাব সশব্দ করুন</translation> @@ -5548,7 +5553,7 @@ <translation id="942954117721265519">এই ডিরেক্টরিতে কোনো চিত্র নেই৷</translation> <translation id="945522503751344254">প্রতিক্রিয়া পাঠান</translation> <translation id="946810925362320585">সুপারিশ অনুসরণ করুন</translation> -<translation id="949382280525592713"><ph name="LEGAL_DOC_AGREEMENT" /> জালিয়াতি থেকে আপনাকে সুরক্ষা দিতে, আপনার কম্পিউটার (এর অবস্থান সমেত) সম্পর্কিত তথ্য Google Payments এর সাথে ভাগ করা হবে।</translation> +<translation id="949382280525592713"><ph name="LEGAL_DOC_AGREEMENT" /> জালিয়াতি থেকে আপনাকে সুরক্ষা দিতে, আপনার কম্পিউটার (এর অবস্থান সমেত) সম্পর্কিত তথ্য Google Payments এর সাথে শেয়ার করা হবে।</translation> <translation id="951981865514037445"><ph name="URL" /> আপনার ডিভাইসের অবস্থান ব্যবহার করতে চায়৷</translation> <translation id="952838760238220631">Brotli সামগ্রী-এনকোডিং সমর্থন সক্ষম করুন।</translation> <translation id="952992212772159698">সক্রিয় নেই</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index f6ea3ce..43542b8 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -110,7 +110,7 @@ <translation id="1155759005174418845">Català</translation> <translation id="1156185823432343624">Volum: silenciat</translation> <translation id="1156689104822061371">Disposició del teclat</translation> -<translation id="1158054703003659942">Activat com a adreces d'interès</translation> +<translation id="1158054703003659942">Activades com a adreces d'interès</translation> <translation id="1158274711289833876">Connexió TLS segura</translation> <translation id="1160536908808547677">En apropar la imatge, els elements en una posició fixa i les barres de desplaçament escalades s'adjuntaran a la finestra gràfica.</translation> <translation id="1161575384898972166">Inicieu la sessió a <ph name="TOKEN_NAME" /> per exportar el certificat de client.</translation> @@ -606,6 +606,7 @@ <translation id="1864111464094315414">Inicia la sessió</translation> <translation id="1864676585353837027">Canvieu la manera de compartir aquests fitxers.</translation> <translation id="1864756863218646478">No s'ha pogut trobar el fitxer.</translation> +<translation id="1865769994591826607">Només les connexions dins del mateix lloc</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" pot llegir imatges, vídeos i fitxers d'àudio de les ubicacions marcades, així com escriure-hi.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> està llest per completar la instal·lació</translation> <translation id="1873879463550486830">Sandbox SUID</translation> @@ -1194,6 +1195,7 @@ <translation id="2743387203779672305">Copia al porta-retalls</translation> <translation id="2744221223678373668">Compartides</translation> <translation id="2745080116229976798">Subordinació qualificada de Microsoft</translation> +<translation id="2745576239403924641">Vull activar l'execució de les aplicacions per a Android al Chromebook.</translation> <translation id="2747990718031257077">Activa el disseny de la nova barra d'eines d'extensions (en desenvolupament).</translation> <translation id="2749756011735116528">Inicia la sessió a <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Comprova la gramàtica amb l'ortografia</translation> @@ -1407,6 +1409,7 @@ <translation id="3011284594919057757">Quant a Flash</translation> <translation id="3011362742078013760">Obre totes les adreces d'interès en una &finestra d'incògnit</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Només les connexions segures dins del mateix lloc</translation> <translation id="3012890944909934180">Torna a iniciar Chrome a l'escriptori</translation> <translation id="3012917896646559015">Contacteu immediatament amb el fabricant del maquinari per enviar l'ordinador a un taller de reparació.</translation> <translation id="3015992588037997514">Aquest codi es mostra a la pantalla de Chromebox?</translation> @@ -1639,6 +1642,7 @@ <translation id="331752765902890099">Botó de: <ph name="PROFILE_NAME" />, error d'inici de sessió</translation> <translation id="3319048459796106952">Finestra d'incògnit nova</translation> <translation id="331915893283195714">Permet que tots els llocs puguin desactivar el cursor del ratolí</translation> +<translation id="3319364804843246307">Aplicacions d'Android</translation> <translation id="3320859581025497771">el vostre operador</translation> <translation id="3323235640813116393">Activa l'opció per desar pàgines com a MHTML: un únic fitxer de text que conté HTML i tots els subrecursos.</translation> <translation id="3323447499041942178">Quadre de text</translation> @@ -1743,6 +1747,7 @@ <translation id="347719495489420368">Feu clic amb el botó dret per reproduir <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">Continua permetent que <ph name="HOST" /> accedeixi a la càmera i al micròfon</translation> <translation id="3478315065074101056">XPS activa les opcions avançades per a les impressores clàssiques connectades a Cloud Print amb Chrome. Les impressores s'han de tornar a connectar després de canviar aquesta marca.</translation> +<translation id="3479539252931486093">Heu trobat el lloc bloquejat de manera inesperada? <ph name="BEGIN_LINK" />Informeu-nos-en<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Ara no</translation> <translation id="3480892288821151001">Redueix la finestra cap a l'esquerra</translation> <translation id="3481915276125965083">S'han bloquejat les finestres emergents següents en aquesta pàgina:</translation> @@ -2713,6 +2718,7 @@ <translation id="4941246025622441835">Feu servir aquesta sol·licitud de dispositiu en inscriure el dispositiu per a la gestió d'empresa:</translation> <translation id="4942394808693235155">Cerca actualitzacions i aplica-les</translation> <translation id="494286511941020793">Ajuda per configurar servidors intermediaris</translation> +<translation id="4945378551914476156">Les adreces d'interès, l'historial, les contrasenyes i altres opcions de configuració se sincronitzaran amb el vostre compte de Google perquè hi pugueu accedir des de qualsevol dispositiu en què feu servir Chrome. Podeu canviar aquesta configuració a <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Opcions...</translation> <translation id="4952186391360931024">No material</translation> <translation id="4954544650880561668">Control del dispositiu</translation> @@ -2845,7 +2851,6 @@ <ph name="LINE_BREAKS" /> Si retireu el dispositiu mentre encara s'està utilitzant, es poden perdre dades. Espereu fins que hagi acabat l'operació i, a continuació, expulseu el dispositiu amb l'aplicació Fitxers.</translation> <translation id="5159488553889181171">La baixada del connector <ph name="PLUGIN_NAME" /> s'ha cancel·lat.</translation> -<translation id="5159628598068481063">Preferències de redirecció per a la cerca a l'escriptori de Windows</translation> <translation id="5160857336552977725">Inicieu la sessió al vostre dispositiu (<ph name="DEVICE_TYPE" />)</translation> <translation id="5163869187418756376">S'ha produït un error en compartir. Comproveu la connexió i torneu-ho a provar més tard.</translation> <translation id="516592729076796170">Dvorak nord-americà per a programadors</translation> @@ -3215,7 +3220,6 @@ <translation id="567881659373499783">Versió <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Llegir les dades del lloc <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Filtre de text en mode de visió general</translation> -<translation id="568428328938709143">Compte eliminat</translation> <translation id="5684661240348539843">Identificador d'elements</translation> <translation id="569068482611873351">Importa...</translation> <translation id="56907980372820799">Enllaça les dades</translation> @@ -3315,7 +3319,7 @@ <translation id="5819442873484330149">Configuració 3 de hangul (final)</translation> <translation id="5819484510464120153">Crea &dreceres d'aplicacions...</translation> <translation id="5822838715583768518">Inicia l'aplicació</translation> -<translation id="5824480603702411398">Activat com a pàgines desades</translation> +<translation id="5824480603702411398">Activades com a pàgines desades</translation> <translation id="5826507051599432481">Nom comú (CN)</translation> <translation id="5827266244928330802">Safari</translation> <translation id="5828228029189342317">Heu triat que s'obrin alguns tipus de fitxers automàticament després de baixar-los.</translation> @@ -3456,6 +3460,7 @@ <translation id="604001903249547235">Còpia de seguretat a Cloud</translation> <translation id="6040143037577758943">Tanca</translation> <translation id="604124094241169006">Automàtic</translation> +<translation id="6042308850641462728">Més</translation> <translation id="604257181445267932">Smart Lock serveix per iniciar la sessió ràpidament a les aplicacions i als llocs amb contrasenyes que hàgiu desat a Google.</translation> <translation id="6049065490165456785">Foto de la càmera interna</translation> <translation id="6051028581720248124">En imprimir a FedEx Office, accepteu les seves <ph name="START_LINK" />condicions del servei<ph name="END_LINK" />.</translation> @@ -3487,7 +3492,6 @@ <translation id="6089481419520884864">Condensa la pàgina</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">S’està cancel·lant l’actualització...</translation> -<translation id="6095149522260432647">Activa una preferència que permet redirigir les cerques de l'escriptori de Windows al motor de cerca predeterminat.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Obre-la maximitzada</translation> <translation id="6096326118418049043">Nom X.500</translation> @@ -4660,6 +4664,7 @@ <translation id="7926906273904422255">Marca els orígens no segurs com a no segurs o com a "dubtosos".</translation> <translation id="7928710562641958568">Expulsa el dispositiu</translation> <translation id="7938594894617528435">Fora de línia en aquest moment</translation> +<translation id="7939374455203157513">Activa els serveis en núvol</translation> <translation id="7939412583708276221">Continua de totes maneres</translation> <translation id="7939997691108949385">L'administrador podrà configurar les restriccions i la configuració d'aquest usuari supervisat a la pàgina <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">Colemak nord-americà</translation> @@ -5210,6 +5215,7 @@ <translation id="872537912056138402">Croat</translation> <translation id="8726206820263995930">S'ha produït un error en recuperar la configuració de la política del servidor: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Mostra les opcions d'extensió com un element inserit a chrome://extensions en lloc d'obrir una pestanya nova.</translation> +<translation id="8727142376512517020">No ho tornis a mostrar</translation> <translation id="8728672262656704056">Heu passat al mode d'incògnit.</translation> <translation id="8730621377337864115">Fet</translation> <translation id="8731332457891046104">Cancel·leu el registre del dispositiu <ph name="DEVICE_TYPE" /></translation> @@ -5372,7 +5378,6 @@ <translation id="8986362086234534611">Esborra</translation> <translation id="8986494364107987395">Envia automàticament estadístiques d'ús i informes d'error a Google</translation> <translation id="8987927404178983737">Mes</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">URL base de certificat de Netscape</translation> <translation id="8994845581478641365">Creador de memòria cau de tipus de lletra DirectWrite</translation> <translation id="8995603266996330174">Gestionat per <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index 3552623..696ab98 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -607,6 +607,7 @@ <translation id="1864111464094315414">Přihlásit</translation> <translation id="1864676585353837027">Změňte způsob sdílení těchto souborů.</translation> <translation id="1864756863218646478">Soubor se nepodařilo nalézt.</translation> +<translation id="1865769994591826607">Pouze připojení ke stejnému webu</translation> <translation id="186612162884103683">Rozšíření <ph name="EXTENSION" /> může číst obrázky, video a zvukové soubory v povolených umístěních a zapisovat do nich.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> je připraven dokončit instalaci.</translation> <translation id="1873879463550486830">Izolovaný prostor SUID</translation> @@ -1193,6 +1194,7 @@ <translation id="2743387203779672305">Zkopírovat do schránky</translation> <translation id="2744221223678373668">Sdílené</translation> <translation id="2745080116229976798">Kvalifikované podřízení Microsoft</translation> +<translation id="2745576239403924641">Umožnit spouštění aplikací pro Android v Chromebooku</translation> <translation id="2747990718031257077">Aktivuje nový vzhled lišty rozšíření (který je ve vývoji).</translation> <translation id="2749756011735116528">Přihlásit se do prohlížeče <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Zkontrolovat pravopis a gramatiku</translation> @@ -1406,6 +1408,7 @@ <translation id="3011284594919057757">O formátu Flash</translation> <translation id="3011362742078013760">Otevřít všechny záložky v &anonymním okně</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Pouze zabezpečená připojení ke stejnému webu</translation> <translation id="3012890944909934180">Spustit Chrome znovu na klasické ploše</translation> <translation id="3012917896646559015">Požádejte prosím bezodkladně výrobce hardwaru, aby počítač poslal k opravě.</translation> <translation id="3015992588037997514">Zobrazuje se tento kód na obrazovce zařízení Chromebox?</translation> @@ -1636,6 +1639,7 @@ <translation id="331752765902890099">Tlačítko <ph name="PROFILE_NAME" />: chyba přihlášení</translation> <translation id="3319048459796106952">Nové &anonymní okno</translation> <translation id="331915893283195714">Povolit webům deaktivovat ukazatel myši</translation> +<translation id="3319364804843246307">Aplikace pro Android</translation> <translation id="3320859581025497771">svého operátora</translation> <translation id="3323235640813116393">Aktivuje ukládání stránek ve formátu MHTML, tj. do jednoho textového souboru s kódem HTML a všemi dílčími zdroji.</translation> <translation id="3323447499041942178">Textové pole</translation> @@ -1740,6 +1744,7 @@ <translation id="347719495489420368">Chcete-li plugin <ph name="PLUGIN_NAME" /> přehrát, klikněte na něj pravým tlačítkem.</translation> <translation id="347785443197175480">Povolit webu <ph name="HOST" /> přístup k webové kameře a mikrofonu i nadále</translation> <translation id="3478315065074101056">Balíček XPS aktivuje pokročilé možnosti pro klasické tiskárny připojené ke službě Cloud Print s prohlížečem Chrome. Po změně tohoto příznaku je třeba tiskárny znovu připojit.</translation> +<translation id="3479539252931486093">Nebylo toto očekáváno? <ph name="BEGIN_LINK" />Informujte nás<ph name="END_LINK" />.</translation> <translation id="3479552764303398839">Nyní ne</translation> <translation id="3480892288821151001">Ukotvit okno vlevo</translation> <translation id="3481915276125965083">Na této stránce byla zablokována následující vyskakovací okna:</translation> @@ -2711,6 +2716,7 @@ <translation id="4941246025622441835">Použít tento požadavek zařízení při registraci zařízení do podnikové správy.</translation> <translation id="4942394808693235155">Ověřit dostupnost a nainstalovat aktualizace</translation> <translation id="494286511941020793">Nápověda ke konfiguraci proxy serveru</translation> +<translation id="4945378551914476156">Vaše záložky, historie, hesla a další nastavení budou synchronizována do účtu Google, abyste je mohli používat ve všech svých zařízeních s Chromem. Toto nastavení můžete změnit v <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Možnosti...</translation> <translation id="4952186391360931024">Jiný než Material</translation> <translation id="4954544650880561668">Řízení zařízení</translation> @@ -2843,7 +2849,6 @@ <ph name="LINE_BREAKS" /> Pokud zařízení odeberete během používání, může dojít ke ztrátě dat. Počkejte prosím na dokončení operace a poté zařízení odpojte pomocí aplikace Soubory.</translation> <translation id="5159488553889181171">Stahování pluginu <ph name="PLUGIN_NAME" /> bylo zrušeno.</translation> -<translation id="5159628598068481063">Předvolba přesměrování vyhledávání na ploše Windows</translation> <translation id="5160857336552977725">Přihlaste se do zařízení <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Sdílení se nezdařilo. Zkontrolujte připojení k síti a zkuste to znovu.</translation> <translation id="516592729076796170">Americká klávesnice Dvorak</translation> @@ -3211,7 +3216,6 @@ <translation id="567881659373499783">Verze <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Čtení vašich dat na webu <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Filtrování textu v režimu přehledu</translation> -<translation id="568428328938709143">Účet byl odebrán</translation> <translation id="5684661240348539843">Identifikátor položky</translation> <translation id="569068482611873351">Import...</translation> <translation id="56907980372820799">Propojit data</translation> @@ -3453,6 +3457,7 @@ <translation id="604001903249547235">Zálohování do cloudu</translation> <translation id="6040143037577758943">Zavřít</translation> <translation id="604124094241169006">Automaticky</translation> +<translation id="6042308850641462728">Více</translation> <translation id="604257181445267932">Funkce Smart Lock usnadňuje rychlé přihlášení k aplikacím a stránkám pomocí hesel, které jste na Googlu uložili.</translation> <translation id="6049065490165456785">Fotka z interního fotoaparátu</translation> <translation id="6051028581720248124">Pokud budete tisknout v pobočce společnosti FedEx, přijímáte její <ph name="START_LINK" />smluvní podmínky<ph name="END_LINK" />.</translation> @@ -3484,7 +3489,6 @@ <translation id="6089481419520884864">Zpracovat stránku</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Rušení aktualizace...</translation> -<translation id="6095149522260432647">Aktivuje předvolbu, která umožňuje přesměrovat vyhledávání na ploše Windows na výchozí vyhledávač.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Otevřít maximalizované</translation> <translation id="6096326118418049043">Název X.500</translation> @@ -4663,6 +4667,7 @@ <translation id="7926906273904422255">Označit nezabezpečené zdroje jako nezabezpečené, nebo jako „podezřelé“.</translation> <translation id="7928710562641958568">Vysunout zařízení</translation> <translation id="7938594894617528435">Momentálně offline</translation> +<translation id="7939374455203157513">Aktivovat cloudové služby</translation> <translation id="7939412583708276221">Přesto ponechat</translation> <translation id="7939997691108949385">Správce bude moci konfigurovat omezení a nastavení pro tohoto uživatele na adrese <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">Americká klávesnice Colemak</translation> @@ -5215,6 +5220,7 @@ <translation id="872537912056138402">chorvatština</translation> <translation id="8726206820263995930">Při načítání nastavení zásad ze serveru došlo k chybě: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Namísto otevření nové karty zobrazí možnosti rozšíření jako vložený prvek na stránce chrome://extensions.</translation> +<translation id="8727142376512517020">Příště tuto zprávu nezobrazovat</translation> <translation id="8728672262656704056">Jste v anonymním režimu</translation> <translation id="8730621377337864115">Hotovo</translation> <translation id="8731332457891046104">Zrušení registrace zařízení <ph name="DEVICE_TYPE" /></translation> @@ -5377,7 +5383,6 @@ <translation id="8986362086234534611">Odstranit</translation> <translation id="8986494364107987395">Automaticky posílat společnosti Google statistiky používání a zprávy o selhání</translation> <translation id="8987927404178983737">Měsíc</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Základní adresa URL certifikátu Netscape</translation> <translation id="8994845581478641365">Nástroj na vytváření mezipaměti písem DirectWrite</translation> <translation id="8995603266996330174">Správce: <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index 682a16db..e0e3510e 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -603,6 +603,7 @@ <translation id="1864111464094315414">Login</translation> <translation id="1864676585353837027">Rediger, hvordan disse filer deles</translation> <translation id="1864756863218646478">Filen blev ikke fundet.</translation> +<translation id="1865769994591826607">Kun forbindelser på samme website</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" har læse- og skriverettigheder til billed-, video- og lydfiler på de markerede placeringer.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> er klar til at færdiggøre din installation</translation> <translation id="1873879463550486830">SUID-sandkasse</translation> @@ -1193,6 +1194,7 @@ <translation id="2743387203779672305">Kopiér til udklipsholderen</translation> <translation id="2744221223678373668">Delte</translation> <translation id="2745080116229976798">Microsoft-kvalificeret delegering</translation> +<translation id="2745576239403924641">Aktivér Android-apps, som skal køre på din Chromebook.</translation> <translation id="2747990718031257077">Aktiverer det nye (under udvikling) design for udvidelsesværktøjslinjen.</translation> <translation id="2749756011735116528">Log ind på <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Kontrollér grammatik med stavning</translation> @@ -1406,6 +1408,7 @@ <translation id="3011284594919057757">Om Flash</translation> <translation id="3011362742078013760">Åbn alle bogmærker i &inkognitovindue</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Kun sikre forbindelser på samme website</translation> <translation id="3012890944909934180">Genstart Chrome på skrivebordet</translation> <translation id="3012917896646559015">Kontakt straks din hardwareproducent, og send din computer til reparation.</translation> <translation id="3015992588037997514">Vises denne kode på din Chromebox-skærm?</translation> @@ -1639,6 +1642,7 @@ <translation id="331752765902890099">Knappen <ph name="PROFILE_NAME" />: loginfejl</translation> <translation id="3319048459796106952">Nyt &inkognito-vindue</translation> <translation id="331915893283195714">Tillad, at alle websites kan deaktivere musemarkøren</translation> +<translation id="3319364804843246307">Android-apps</translation> <translation id="3320859581025497771">dit telefonselskab</translation> <translation id="3323235640813116393">Aktiverer lagring af sider som MHTML: en enkelt tekstfil, der indeholder HTML, og alle underressourcer.</translation> <translation id="3323447499041942178">Tekstfelt</translation> @@ -1743,6 +1747,7 @@ <translation id="347719495489420368">Højreklik for at afspille <ph name="PLUGIN_NAME" /> .</translation> <translation id="347785443197175480">Tillad fortsat, at <ph name="HOST" /> har adgang til dit kamera og din mikrofon</translation> <translation id="3478315065074101056">XPS giver avancerede muligheder for klassiske printere, som er tilsluttet Cloudprinter med Chrome. Printere skal tilsluttes igen, når dette flag er ændret.</translation> +<translation id="3479539252931486093">Var dette uventet? <ph name="BEGIN_LINK" />Giv os gerne feedback<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Ikke nu</translation> <translation id="3480892288821151001">Fastgør vinduet til venstre</translation> <translation id="3481915276125965083">Følgende pop op-vinduer blev blokeret på denne side:</translation> @@ -2715,6 +2720,7 @@ <translation id="4941246025622441835">Anvend denne enhedsrekvisition, når du tilmelder enheden til virksomhedsadministration.</translation> <translation id="4942394808693235155">Søg efter og anvend opdateringer</translation> <translation id="494286511941020793">Hjælp til proxykonfiguration</translation> +<translation id="4945378551914476156">Dine bogmærker, din historik, dine adgangskoder og andre indstillinger synkroniseres til din Google-konto, så du kan bruge dem, der hvor du bruger Chrome. Du kan ændre dette under <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Indstillinger...</translation> <translation id="4952186391360931024">Ikke-material</translation> <translation id="4954544650880561668">Enhedskontrol</translation> @@ -2848,7 +2854,6 @@ <ph name="LINE_BREAKS" /> Hvis du fjerner din enhed, mens den er i brug, kan det medføre datatab. Vent, indtil handlingen er gennemført, og fjern derefter enheden ved hjælp af appen Filer.</translation> <translation id="5159488553889181171">Download af <ph name="PLUGIN_NAME" /> blev annulleret.</translation> -<translation id="5159628598068481063">Præference for omdirigering af søgning på Windows-skrivebord</translation> <translation id="5160857336552977725">Log ind på din <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Deling mislykkedes. Kontrollér din forbindelse, og prøv igen senere.</translation> <translation id="516592729076796170">Amerikansk (Programmer Dvorak) tastatur</translation> @@ -3216,7 +3221,6 @@ <translation id="567881659373499783">Version <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Læs dine data på <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Tekstfiltrering i oversigtstilstand</translation> -<translation id="568428328938709143">Kontoen er blevet fjernet</translation> <translation id="5684661240348539843">Aktiv-id</translation> <translation id="569068482611873351">Importer...</translation> <translation id="56907980372820799">Tilknyt data</translation> @@ -3456,6 +3460,7 @@ <translation id="604001903249547235">Sikkerhedskopiering i skyen</translation> <translation id="6040143037577758943">Luk</translation> <translation id="604124094241169006">Automatisk</translation> +<translation id="6042308850641462728">Mere</translation> <translation id="604257181445267932">Med Smart Lock kan du hurtigt logge ind på apps og websites, der anvender adgangskoder, du har gemt med Google.</translation> <translation id="6049065490165456785">Billede fra internt kamera</translation> <translation id="6051028581720248124">Ved udskrivning til FedEx Office accepterer du deres <ph name="START_LINK" />servicevilkår<ph name="END_LINK" />.</translation> @@ -3487,7 +3492,6 @@ <translation id="6089481419520884864">Destiller side</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Annullerer opdatering...</translation> -<translation id="6095149522260432647">Aktiverer en præference, der tillader omdirigering af søgninger på Windows-skrivebordet til standardsøgemaskinen.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Åbn maksimeret</translation> <translation id="6096326118418049043">X.500-navn</translation> @@ -4669,6 +4673,7 @@ <translation id="7926906273904422255">Markér usikre kilder som "usikre" eller "tvivlsomme".</translation> <translation id="7928710562641958568">Skub enheden ud</translation> <translation id="7938594894617528435">I øjeblikket offline</translation> +<translation id="7939374455203157513">Aktivér Cloud-tjenester</translation> <translation id="7939412583708276221">Behold alligevel</translation> <translation id="7939997691108949385">Administratoren kan konfigurere begrænsninger og indstillinger for den administrerede bruger på <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">Amerikansk (Colemak)</translation> @@ -5220,6 +5225,7 @@ <translation id="872537912056138402">Kroatisk</translation> <translation id="8726206820263995930">Fejl ved hentning af politikindstillinger fra serveren: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Vis udvidelsesmuligheder som et integreret elementet i chrome://extensions i stedet for at åbne en ny fane.</translation> +<translation id="8727142376512517020">Vis ikke denne underretning igen</translation> <translation id="8728672262656704056">Du er nu i inkognitotilstand</translation> <translation id="8730621377337864115">Fuldført</translation> <translation id="8731332457891046104">Frameld <ph name="DEVICE_TYPE" /></translation> @@ -5383,7 +5389,6 @@ <translation id="8986362086234534611">Glem</translation> <translation id="8986494364107987395">Send automatisk brugsstatistikker og nedbrudsrapporter til Google</translation> <translation id="8987927404178983737">Måned</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Webadresse for Netscape-certifikatbase</translation> <translation id="8994845581478641365">Værktøj til oprettelse af skrifttypecache til DirectWrite</translation> <translation id="8995603266996330174">Administreres af <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index 154851c7..a7bf73ff 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -603,6 +603,7 @@ <translation id="1864111464094315414">Anmeldung</translation> <translation id="1864676585353837027">Angeben, wie die Dateien geteilt werden sollen</translation> <translation id="1864756863218646478">Die Datei wurde nicht gefunden.</translation> +<translation id="1865769994591826607">Nur bei Verbindungen zur gleichen Website</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" kann Bilder, Video- und Sounddateien an den geprüften Orten lesen und schreiben.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> ist zum Abschließen der Installation bereit.</translation> <translation id="1873879463550486830">SUID-Sandbox</translation> @@ -1191,6 +1192,7 @@ <translation id="2743387203779672305">In Zwischenablage kopieren</translation> <translation id="2744221223678373668">Freigegeben</translation> <translation id="2745080116229976798">Microsoft - Qualifizierte Unterordnung</translation> +<translation id="2745576239403924641">Verwendung von Android-Apps auf Ihrem Chromebook aktivieren.</translation> <translation id="2747990718031257077">Aktivierung des neuen Designs für die Erweiterungssymbolleiste (in Entwicklung)</translation> <translation id="2749756011735116528">In <ph name="PRODUCT_NAME" /> anmelden</translation> <translation id="2749881179542288782">Grammatik zusammen mit Rechtschreibung prüfen</translation> @@ -1404,6 +1406,7 @@ <translation id="3011284594919057757">Über Flash</translation> <translation id="3011362742078013760">Alle Lesezeichen in &Inkognito-Fenster öffnen</translation> <translation id="3012631534724231212">(Iframe)</translation> +<translation id="3012804260437125868">Nur bei sicheren Verbindungen zur gleichen Website</translation> <translation id="3012890944909934180">Chrome auf dem Desktop neu starten</translation> <translation id="3012917896646559015">Wenden Sie sich bitte umgehend an Ihren Hardware-Hersteller, um Ihren Computer an eine Reparaturwerkstatt zu senden.</translation> <translation id="3015992588037997514">Erscheint dieser Code auf Ihrem Chromebox-Bildschirm?</translation> @@ -1637,6 +1640,7 @@ <translation id="331752765902890099">Schaltfläche für <ph name="PROFILE_NAME" />: Anmeldefehler</translation> <translation id="3319048459796106952">Neues &Inkognito-Fenster</translation> <translation id="331915893283195714">Allen Websites erlauben, den Mauszeiger zu deaktivieren</translation> +<translation id="3319364804843246307">Android-Apps</translation> <translation id="3320859581025497771">Ihr Mobilfunkanbieter</translation> <translation id="3323235640813116393">Bei Aktivierung werden Seiten als MHTML gespeichert: eine einzelne Textdatei mit HTML und allen Unterressourcen.</translation> <translation id="3323447499041942178">Textfeld</translation> @@ -1741,6 +1745,7 @@ <translation id="347719495489420368">Klicken Sie zum Abspielen von <ph name="PLUGIN_NAME" /> mit der rechten Maustaste.</translation> <translation id="347785443197175480"><ph name="HOST" /> weiterhin Zugriff auf Kamera und Mikrofon gestatten</translation> <translation id="3478315065074101056">XPS aktiviert erweiterte Optionen für klassische Drucker, die über Chrome mit Google Cloud Print verbunden sind. Drucker müssen nach Änderung dieses Attributs wieder neu verbunden werden.</translation> +<translation id="3479539252931486093">Geschah dies unerwartet? <ph name="BEGIN_LINK" />Informieren Sie uns<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Jetzt nicht</translation> <translation id="3480892288821151001">Fenster links verankern</translation> <translation id="3481915276125965083">Die folgenden Pop-ups wurden auf dieser Seite blockiert:</translation> @@ -2712,6 +2717,7 @@ <translation id="4941246025622441835">Diese Geräteanforderung beim Registrieren des Geräts für die Unternehmensverwaltung verwenden:</translation> <translation id="4942394808693235155">Updates suchen und installieren</translation> <translation id="494286511941020793">Proxy-Konfigurationshilfe</translation> +<translation id="4945378551914476156">Lesezeichen, Verlauf, Passwörter und andere Einstellungen werden mit Ihrem Google-Konto synchronisiert, damit Sie mit Chrome überall nutzen können. Sie können diese Einstellung unter dem folgenden Link ändern: <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Optionen...</translation> <translation id="4952186391360931024">Non-Material</translation> <translation id="4954544650880561668">Gerätesteuerung</translation> @@ -2844,7 +2850,6 @@ <ph name="LINE_BREAKS" /> Wenn Sie Ihr Gerät entfernen, während es verwendet wird, können Daten verloren gehen. Warten Sie, bis der Vorgang abgeschlossen ist, und werfen Sie das Gerät dann über die App "Dateien" aus.</translation> <translation id="5159488553889181171"><ph name="PLUGIN_NAME" />-Download wurde abgebrochen.</translation> -<translation id="5159628598068481063">Weiterleitungseinstellung der Windows-Desktopsuche</translation> <translation id="5160857336552977725">Auf Ihrem <ph name="DEVICE_TYPE" /> anmelden</translation> <translation id="5163869187418756376">Fehler bei der Freigabe. Bitte überprüfen Sie Ihre Verbindung und versuchen Sie es später erneut.</translation> <translation id="516592729076796170">USA – Programmer Dvorak</translation> @@ -3212,7 +3217,6 @@ <translation id="567881659373499783">Version <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Ihre Daten auf <ph name="WEBSITE_1" /> lesen</translation> <translation id="5680928275846978395">Textfilterung im Übersichtsmodus</translation> -<translation id="568428328938709143">Konto entfernt</translation> <translation id="5684661240348539843">Geräte-ID</translation> <translation id="569068482611873351">Importieren...</translation> <translation id="56907980372820799">Daten verknüpfen</translation> @@ -3452,6 +3456,7 @@ <translation id="604001903249547235">Cloud-Sicherung</translation> <translation id="6040143037577758943">Schließen</translation> <translation id="604124094241169006">Automatisch</translation> +<translation id="6042308850641462728">Mehr</translation> <translation id="604257181445267932">Über Smart Lock können Sie sich mit Passwörtern, die Sie bei Google gespeichert haben, schnell in Apps und Websites anmelden.</translation> <translation id="6049065490165456785">Foto von interner Kamera</translation> <translation id="6051028581720248124">Durch das Drucken über FedEx Office akzeptieren Sie deren <ph name="START_LINK" />Nutzungsbedingungen<ph name="END_LINK" />.</translation> @@ -3483,7 +3488,6 @@ <translation id="6089481419520884864">Seite konvertieren</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Aktualisierung wird abgebrochen...</translation> -<translation id="6095149522260432647">Mit dieser Einstellung werden Anfragen in der Windows-Desktopsuche an die standardmäßig eingerichtete Suchmaschine umgeleitet.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Maximiert öffnen</translation> <translation id="6096326118418049043">X.500-Name</translation> @@ -4666,6 +4670,7 @@ <translation id="7926906273904422255">Nicht sicheren Ursprung als nicht sicher oder als "zweifelhaft" markieren</translation> <translation id="7928710562641958568">Gerät auswerfen</translation> <translation id="7938594894617528435">Derzeit offline</translation> +<translation id="7939374455203157513">Clouddienste aktivieren</translation> <translation id="7939412583708276221">Trotzdem beibehalten</translation> <translation id="7939997691108949385">Der Manager kann unter <ph name="MANAGEMENT_URL" /> Beschränkungen und Einstellungen für diesen betreuten Nutzer konfigurieren.</translation> <translation id="7943385054491506837">USA – Colemak</translation> @@ -5216,6 +5221,7 @@ <translation id="872537912056138402">Kroatisch</translation> <translation id="8726206820263995930">Fehler beim Übertragen von Richtlinieneinstellungen vom Server: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Erweiterungsoptionen als eingebettetes Element unter "chrome://extensions" anzeigen, statt einen neuen Tab zu öffnen</translation> +<translation id="8727142376512517020">Nicht mehr anzeigen</translation> <translation id="8728672262656704056">Sie haben den Inkognitomodus aktiviert</translation> <translation id="8730621377337864115">Fertig</translation> <translation id="8731332457891046104">Registrierung von <ph name="DEVICE_TYPE" /> aufheben</translation> @@ -5378,7 +5384,6 @@ <translation id="8986362086234534611">Entfernen</translation> <translation id="8986494364107987395">Nutzungsstatistiken und Absturzberichte automatisch an Google senden</translation> <translation id="8987927404178983737">Monat</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Basis-URL für Netscape-Zertifikate</translation> <translation id="8994845581478641365">Generator für den DirectWrite-Schriftartencache</translation> <translation id="8995603266996330174">Verwaltet von <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index 3b08406..cacfcaca 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -608,6 +608,7 @@ <translation id="1864111464094315414">Σύνδεση</translation> <translation id="1864676585353837027">Αλλάξτε τον τρόπο με τον οποίο κοινοποιούνται αυτά τα αρχεία</translation> <translation id="1864756863218646478">Δεν ήταν δυνατή η εύρεση του αρχείου.</translation> +<translation id="1865769994591826607">Μόνο συνδέσεις στον ίδιο ιστότοπο</translation> <translation id="186612162884103683">Η επέκταση "<ph name="EXTENSION" />" μπορεί να διαβάσει και να εγγράψει εικόνες, βίντεο και αρχεία ήχου στις επιλεγμένες τοποθεσίες.</translation> <translation id="1867780286110144690">Το <ph name="PRODUCT_NAME" /> είναι έτοιμο για την ολοκλήρωση της εγκατάστασής σας</translation> <translation id="1873879463550486830">Περιβάλλον δοκιμών SUID</translation> @@ -1199,6 +1200,7 @@ <translation id="2743387203779672305">Αντιγραφή στο πρόχειρο</translation> <translation id="2744221223678373668">Κοινόχρηστο</translation> <translation id="2745080116229976798">Microsoft Qualified Subordination</translation> +<translation id="2745576239403924641">Ενεργοποίηση εφαρμογών Android για εκτέλεση στο Chromebook σας.</translation> <translation id="2747990718031257077">Ενεργοποιεί την υπό κατασκευή σχεδίαση νέας γραμμής εργαλείων επεκτάσεων.</translation> <translation id="2749756011735116528">Συνδεθείτε στο <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Γραμματικός Έλεγχος Μαζί με τον Ορθογραφικό</translation> @@ -1414,6 +1416,7 @@ <translation id="3011284594919057757">Σχετικά με το Flash</translation> <translation id="3011362742078013760">Άνοιγμα Όλων των Σελιδοδεικτών σε Παράθυρο για &Ανώνυμη Περιήγηση</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Μόνο ασφαλείς συνδέσεις στον ίδιο ιστότοπο</translation> <translation id="3012890944909934180">Επανεκκίνηση του Chrome στην επιφάνεια εργασίας</translation> <translation id="3012917896646559015">Επικοινωνήστε με τον κατασκευαστή του υλικού σας άμεσα για να στείλει τον υπολογιστή σας για επισκευή.</translation> <translation id="3015992588037997514">Αυτός ο κωδικός εμφανίζεται στην οθόνη του Chromebox σας;</translation> @@ -1649,6 +1652,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" /> κουμπί: σφάλμα σύνδεσης</translation> <translation id="3319048459796106952">Νέο &παράθυρο ανώνυμης περιήγησης</translation> <translation id="331915893283195714">Να επιτρέπεται σε όλους τους ιστότοπους η απενεργοποίηση του δείκτη του ποντικιού</translation> +<translation id="3319364804843246307">Εφαρμογές Android</translation> <translation id="3320859581025497771">ο πάροχος σας κινητής τηλεφωνίας</translation> <translation id="3323235640813116393">Ενεργοποιεί την αποθήκευση σελίδων ως MHTML: ένα μεμονωμένο αρχείο κειμένου που περιέχει HTML και όλους τους δευτερεύοντες πόρους.</translation> <translation id="3323447499041942178">Πλαίσιο κειμένου </translation> @@ -1753,6 +1757,7 @@ <translation id="347719495489420368">Κάντε δεξί κλικ για να επιτρέψετε την εκτέλεση της προσθήκης <ph name="PLUGIN_NAME" /> .</translation> <translation id="347785443197175480">Να συνεχίσει να επιτρέπεται στο <ph name="HOST" /> η πρόσβαση στην κάμερα και στο μικρόφωνό σας</translation> <translation id="3478315065074101056">Το XPS ενεργοποιεί σύνθετες επιλογές για τυπικούς εκτυπωτές με σύνδεση στο Cloud Print μέσω του Chrome. Οι εκτυπωτές θα πρέπει να συνδεθούν εκ νέου μετά από την αλλαγή αυτής της επισήμανσης.</translation> +<translation id="3479539252931486093">Δεν το περιμένατε; <ph name="BEGIN_LINK" />Ενημερώστε μας<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Όχι τώρα</translation> <translation id="3480892288821151001">Αγκύρωση παραθύρου αριστερά</translation> <translation id="3481915276125965083">Έγινε αποκλεισμός των ακόλουθων αναδυόμενων παραθύρων σε αυτήν τη σελίδα:</translation> @@ -2731,6 +2736,7 @@ <translation id="4941246025622441835">Χρησιμοποιήστε αυτήν την επίταξη συσκευής κατά την εγγραφή της συσκευής στο πρόγραμμα εταιρικής διαχείρισης:</translation> <translation id="4942394808693235155">Έλεγχος και εφαρμογή ενημερώσεων</translation> <translation id="494286511941020793">Βοήθεια για τη διαμόρφωση διακομιστή μεσολάβησης</translation> +<translation id="4945378551914476156">Οι σελιδοδείκτες, το ιστορικό, οι κωδικοί πρόσβασης και άλλες ρυθμίσεις θα συγχρονιστούν με το Λογαριασμό σας Google, για να μπορείτε από οπουδήποτε χρησιμοποιείτε το Chrome. Μπορείτε να αλλάξετε αυτήν τη ρύθμιση στην ενότητα <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Επιλογές...</translation> <translation id="4952186391360931024">Non-material</translation> <translation id="4954544650880561668">Έλεγχος συσκευής</translation> @@ -2867,7 +2873,6 @@ <ph name="LINE_BREAKS" /> Η αφαίρεση της συσκευής σας ενώ εξακολουθεί να χρησιμοποιείται μπορεί να οδηγήσει σε απώλεια δεδομένων. Περιμένετε έως ότου ολοκληρωθεί η λειτουργία και έπειτα αφαιρέστε τη συσκευή χρησιμοποιώντας την εφαρμογή Αρχεία.</translation> <translation id="5159488553889181171">Η λήψη του <ph name="PLUGIN_NAME" /> ακυρώθηκε.</translation> -<translation id="5159628598068481063">Προτίμηση ανακατεύθυνσης για τις αναζητήσεις επιφάνειας εργασίας των Windows</translation> <translation id="5160857336552977725">Συνδεθείτε στη συσκευή σας <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Αποτυχία κοινής χρήσης. Ελέγξτε τη σύνδεσή σας και δοκιμάστε ξανά αργότερα.</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> @@ -3237,7 +3242,6 @@ <translation id="567881659373499783">Έκδοση <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Ανάγνωση των δεδομένων σας στο <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Φιλτράρισμα κειμένου στη λειτουργία επισκόπησης</translation> -<translation id="568428328938709143">Ο λογαριασμός καταργήθηκε</translation> <translation id="5684661240348539843">Αναγνωριστικό στοιχείου</translation> <translation id="569068482611873351">Εισαγωγή...</translation> <translation id="56907980372820799">Σύνδεση δεδομένων</translation> @@ -3477,6 +3481,7 @@ <translation id="604001903249547235">Αντίγραφο ασφαλείας στο cloud</translation> <translation id="6040143037577758943">Κλείσιμο</translation> <translation id="604124094241169006">Αυτόματη</translation> +<translation id="6042308850641462728">Περισσότερα</translation> <translation id="604257181445267932">Το Smart Lock σας βοηθά να συνδεθείτε γρήγορα σε εφαρμογές και ιστότοπους που χρησιμοποιούν κωδικούς πρόσβασης που έχετε αποθηκεύσει στο Google.</translation> <translation id="6049065490165456785">Φωτογραφία από την εσωτερική φωτογραφική μηχανή</translation> <translation id="6051028581720248124">Πραγματοποιώντας εκτύπωση στο FedEx Office, αποδέχεστε τους αντίστοιχους <ph name="START_LINK" />όρους παροχής υπρεσιών<ph name="END_LINK" />.</translation> @@ -3508,7 +3513,6 @@ <translation id="6089481419520884864">Φιλτράρισμα σελίδας</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Ακύρωση ενημέρωσης...</translation> -<translation id="6095149522260432647">Ενεργοποιεί μια προτίμηση που επιτρέπει την ανακατεύθυνση των αναζητήσεων επιφάνειας εργασίας των Windows στην προεπιλεγμένη μηχανή αναζήτησης.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Άνοιγμα μεγιστοποιημένης εφαρμογής</translation> <translation id="6096326118418049043">Όνομα X.500</translation> @@ -4696,6 +4700,7 @@ <translation id="7926906273904422255">Επισημάνετε μη ασφαλείς προελεύσεις ως μη ασφαλείς ή ως "αμφίβολες".</translation> <translation id="7928710562641958568">Εξαγωγή συσκευής</translation> <translation id="7938594894617528435">Αυτήν τη στιγμή εκτός σύνδεσης</translation> +<translation id="7939374455203157513">Ενεργοποίηση υπηρεσιών cloud</translation> <translation id="7939412583708276221">Να συνεχιστεί</translation> <translation id="7939997691108949385">Ο διαχειριστής θα έχει τη δυνατότητα να διαμορφώνει τους περιορισμούς και τις ρυθμίσεις για αυτόν τον εποπτευόμενη χρήστη στη διεύθυνση <ph name="MANAGEMENT_URL" /> .</translation> <translation id="7943385054491506837">Colemak ΗΠΑ</translation> @@ -5253,6 +5258,7 @@ </translation> <translation id="8726206820263995930">Σφάλμα ανάκτησης ρυθμίσεων πολιτικής από το διακομιστή: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Προβάλετε επιλογές επεκτάσεων ως ενσωματωμένο στοιχείο στο chrome://extensions, αντί να ανοίξετε μια νέα καρτέλα.</translation> +<translation id="8727142376512517020">Να μην εμφανιστεί ξανά</translation> <translation id="8728672262656704056">Πραγματοποιείτε ανώνυμη περιήγηση</translation> <translation id="8730621377337864115">Ολοκληρώθηκε</translation> <translation id="8731332457891046104">Κατάργηση συσκευής <ph name="DEVICE_TYPE" /></translation> @@ -5415,7 +5421,6 @@ <translation id="8986362086234534611">Διαγραφή από τη μνήμη</translation> <translation id="8986494364107987395">Αυτόματη αποστολή στατιστικών στοιχείων χρήσης και αναφορών σφαλμάτων στην Google</translation> <translation id="8987927404178983737">Μήνας</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Βασική διεύθυνση URL πιστοποιητικού Netscape</translation> <translation id="8994845581478641365">Εργαλείο δημιουργίας κρυφής μνήμης γραμματοσειράς DirectWrite</translation> <translation id="8995603266996330174">Έγινε διαχείριση από <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index 65d9db6..22b8f35 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -607,6 +607,7 @@ <translation id="1864111464094315414">Login</translation> <translation id="1864676585353837027">Change how these files are shared</translation> <translation id="1864756863218646478">The file could not be found.</translation> +<translation id="1865769994591826607">Same-site connections only</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" can read and write images, video and sound files in the ticked locations.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> is ready to complete your installation</translation> <translation id="1873879463550486830">SUID Sandbox</translation> @@ -1196,6 +1197,7 @@ <translation id="2743387203779672305">Copy to clipboard</translation> <translation id="2744221223678373668">Shared</translation> <translation id="2745080116229976798">Microsoft Qualified Subordination</translation> +<translation id="2745576239403924641">Enable Android Apps to run on your Chromebook.</translation> <translation id="2747990718031257077">Enables the (in development) new extension toolbar toolbar design.</translation> <translation id="2749756011735116528">Sign in to <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Check Grammar With Spelling</translation> @@ -1409,6 +1411,7 @@ <translation id="3011284594919057757">About Flash</translation> <translation id="3011362742078013760">Open All Bookmarks in &Incognito Window</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Secure same-site connections only</translation> <translation id="3012890944909934180">Relaunch Chrome on the desktop</translation> <translation id="3012917896646559015">Please contact your hardware manufacturer immediately to send your computer to a repair facility.</translation> <translation id="3015992588037997514">Does this code appear on your Chromebox screen?</translation> @@ -1642,6 +1645,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" /> button: sign in error</translation> <translation id="3319048459796106952">New &incognito window</translation> <translation id="331915893283195714">Allow all sites to disable the mouse cursor</translation> +<translation id="3319364804843246307">Android Apps</translation> <translation id="3320859581025497771">your operator</translation> <translation id="3323235640813116393">Enables saving pages as MHTML: a single text file containing HTML and all sub-resources.</translation> <translation id="3323447499041942178">Text box</translation> @@ -1746,6 +1750,7 @@ <translation id="347719495489420368">Right-click to play <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">Continue allowing <ph name="HOST" /> to access your camera and microphone</translation> <translation id="3478315065074101056">XPS enables advanced options for classic printers connected to the Cloud Print with Chrome. Printers must be re-connected after changing this flag.</translation> +<translation id="3479539252931486093">Was this unexpected? <ph name="BEGIN_LINK" />Let us know<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Not now</translation> <translation id="3480892288821151001">Dock window left</translation> <translation id="3481915276125965083">The following pop-ups were blocked on this page:</translation> @@ -2720,6 +2725,7 @@ <translation id="4941246025622441835">Use this device requisition when enrolling the device for enterprise management:</translation> <translation id="4942394808693235155">Check for and apply updates</translation> <translation id="494286511941020793">Proxy Configuration Help</translation> +<translation id="4945378551914476156">Your bookmarks, history, passwords and other settings will be synced to your Google Account so you can use them wherever you use Chrome. You can change this in <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Options...</translation> <translation id="4952186391360931024">Non-material</translation> <translation id="4954544650880561668">Device control</translation> @@ -2854,7 +2860,6 @@ <ph name="LINE_BREAKS" /> Removing your device while it is in use may cause data loss. Please wait until the operation is over, then eject the device using the Files app.</translation> <translation id="5159488553889181171"><ph name="PLUGIN_NAME" /> download was cancelled.</translation> -<translation id="5159628598068481063">Windows desktop search redirection preference</translation> <translation id="5160857336552977725">Sign in to your <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Sharing failed. Please check your connection and try again later.</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> @@ -3222,7 +3227,6 @@ <translation id="567881659373499783">Version <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Read your data on <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Text filtering in Overview Mode</translation> -<translation id="568428328938709143">Account removed</translation> <translation id="5684661240348539843">Asset Identifier</translation> <translation id="569068482611873351">Import...</translation> <translation id="56907980372820799">Link data</translation> @@ -3464,6 +3468,7 @@ <translation id="604001903249547235">Cloud backup</translation> <translation id="6040143037577758943">Close</translation> <translation id="604124094241169006">Automatic</translation> +<translation id="6042308850641462728">More</translation> <translation id="604257181445267932">Smart Lock helps you quickly sign in to apps and sites using passwords you have saved with Google.</translation> <translation id="6049065490165456785">Photo from internal camera</translation> <translation id="6051028581720248124">By printing to FedEx Office, you accept their <ph name="START_LINK" />terms of use<ph name="END_LINK" />.</translation> @@ -3495,7 +3500,6 @@ <translation id="6089481419520884864">Distill page</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Cancelling update...</translation> -<translation id="6095149522260432647">Enables a preference that allows redirection of Windows desktop searches to the default search engine.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Open maximised</translation> <translation id="6096326118418049043">X.500 Name</translation> @@ -4679,6 +4683,7 @@ <translation id="7926906273904422255">Mark non-secure origins as non-secure or "dubious".</translation> <translation id="7928710562641958568">Eject device</translation> <translation id="7938594894617528435">Currently offline</translation> +<translation id="7939374455203157513">Enable Cloud Services</translation> <translation id="7939412583708276221">Keep anyway</translation> <translation id="7939997691108949385">The manager will be able to configure restrictions and settings for this supervised user at <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">US Colemak</translation> @@ -5231,6 +5236,7 @@ <translation id="872537912056138402">Croatian</translation> <translation id="8726206820263995930">Error when fetching policy settings from the server: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Display extension options as an embedded element in chrome://extensions rather than opening a new tab.</translation> +<translation id="8727142376512517020">Don’t show this again</translation> <translation id="8728672262656704056">You’ve gone incognito</translation> <translation id="8730621377337864115">Finished</translation> <translation id="8731332457891046104">Unenrol <ph name="DEVICE_TYPE" /></translation> @@ -5393,7 +5399,6 @@ <translation id="8986362086234534611">Forget</translation> <translation id="8986494364107987395">Automatically send usage statistics and crash reports to Google</translation> <translation id="8987927404178983737">Month</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Netscape Certificate Base URL</translation> <translation id="8994845581478641365">DirectWrite Font Cache Builder</translation> <translation id="8995603266996330174">Managed by <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb index e99c76c..b101c6d7 100644 --- a/chrome/app/resources/generated_resources_es-419.xtb +++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -110,7 +110,7 @@ <translation id="1155759005174418845">Català</translation> <translation id="1156185823432343624">Volumen: silenciado</translation> <translation id="1156689104822061371">Diseño del teclado:</translation> -<translation id="1158054703003659942">Habilitada como marcadores</translation> +<translation id="1158054703003659942">Habilitadas como marcadores</translation> <translation id="1158274711289833876">Conexión segura de TLS</translation> <translation id="1160536908808547677">Al acercar la imagen, los elementos de posición fija y las barras de desplazamiento adaptadas se acoplarán a esta ventana gráfica.</translation> <translation id="1161575384898972166">Accede a <ph name="TOKEN_NAME" /> para exportar el certificado de cliente.</translation> @@ -603,6 +603,7 @@ <translation id="1864111464094315414">Acceder</translation> <translation id="1864676585353837027">Cambiar la forma de compartir estos archivos</translation> <translation id="1864756863218646478">No se pudo encontrar el archivo.</translation> +<translation id="1865769994591826607">Conexiones al mismo sitio únicamente</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" puede leer archivos de video, sonido e imágenes en las ubicaciones seleccionadas y editarlos.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> está preparado para completar la instalación.</translation> <translation id="1873879463550486830">Entorno de pruebas SUID</translation> @@ -1192,6 +1193,7 @@ <translation id="2743387203779672305">Copiar al portapapeles</translation> <translation id="2744221223678373668">Compartidas</translation> <translation id="2745080116229976798">Subordinación certificada de Microsoft</translation> +<translation id="2745576239403924641">Permite que las apps de Android se ejecuten en tu Chromebook.</translation> <translation id="2747990718031257077">Habilita el diseño de la nueva barra de herramientas de extensiones (en desarrollo).</translation> <translation id="2749756011735116528">Iniciar sesión en <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Controlar la gramática con la ortografía</translation> @@ -1405,6 +1407,7 @@ <translation id="3011284594919057757">Acerca de Flash</translation> <translation id="3011362742078013760">Abrir todos los marcadores en una ventana de &incógnito</translation> <translation id="3012631534724231212">(marco flotante)</translation> +<translation id="3012804260437125868">Conexiones seguras al mismo sitio únicamente</translation> <translation id="3012890944909934180">Reiniciar Chrome en el escritorio</translation> <translation id="3012917896646559015">Comunícate con el fabricante del hardware de inmediato para enviar tu computadora a reparación.</translation> <translation id="3015992588037997514">¿Este código aparece en la pantalla de la Chromebox?</translation> @@ -1638,6 +1641,7 @@ <translation id="331752765902890099">Botón de <ph name="PROFILE_NAME" />: error de acceso</translation> <translation id="3319048459796106952">Nueva ventana de &incógnito</translation> <translation id="331915893283195714">Permitir que todos los sitios inhabiliten el cursor del mouse</translation> +<translation id="3319364804843246307">Apps de Android</translation> <translation id="3320859581025497771">tu proveedor</translation> <translation id="3323235640813116393">Permite guardar páginas como MHTML (un único archivo de texto que contiene una página HTML y todos los recursos secundarios).</translation> <translation id="3323447499041942178">Cuadro de texto</translation> @@ -1742,6 +1746,7 @@ <translation id="347719495489420368">Haz clic con el botón derecho para reproducir <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">Continuar permitiendo que <ph name="HOST" /> acceda a la cámara y al micrófono</translation> <translation id="3478315065074101056">XPS habilita opciones avanzadas para impresoras clásicas conectadas a Cloud Print con Chrome. Las impresoras se deben volver a conectar después de cambiar esta marca.</translation> +<translation id="3479539252931486093">¿Ocurrió algo inesperado? <ph name="BEGIN_LINK" />Cuéntanos<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Ahora no</translation> <translation id="3480892288821151001">Acoplar ventana a la izquierda</translation> <translation id="3481915276125965083">Se bloquearon las siguientes ventanas emergentes en esta página:</translation> @@ -2715,6 +2720,7 @@ <translation id="4941246025622441835">Utiliza esta solicitud de dispositivo al registrar el dispositivo para la administración empresarial:</translation> <translation id="4942394808693235155">Buscar actualizaciones y aplicarlas</translation> <translation id="494286511941020793">Ayuda para la configuración de proxy</translation> +<translation id="4945378551914476156">Tus marcadores, el historial, las contraseñas y otras opciones de configuración se sincronizarán con tu cuenta de Google para que puedas utilizarlos en todos los dispositivos en los que uses Chrome. Esta configuración se puede modificar en <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Opciones...</translation> <translation id="4952186391360931024">Sin material</translation> <translation id="4954544650880561668">Control del dispositivo</translation> @@ -2849,7 +2855,6 @@ <ph name="LINE_BREAKS" /> Si retiras el dispositivo mientras está en uso, puedes perder datos. Espera hasta que la operación finalice y, luego, expulsa el dispositivo con la aplicación Archivos.</translation> <translation id="5159488553889181171">Se canceló la descarga de <ph name="PLUGIN_NAME" />.</translation> -<translation id="5159628598068481063">Preferencia de redirección de la búsqueda de escritorio de Windows</translation> <translation id="5160857336552977725">Accede a tu <ph name="DEVICE_TYPE" />.</translation> <translation id="5163869187418756376">Se produjo un error al compartir el contenido. Comprueba tu conexión y vuelve a intentarlo.</translation> <translation id="516592729076796170">Programmer Dvorak, EE. UU.</translation> @@ -3217,7 +3222,6 @@ <translation id="567881659373499783">Versión <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Leer los datos en <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Filtrado de texto en el modo de vista general</translation> -<translation id="568428328938709143">Cuenta eliminada</translation> <translation id="5684661240348539843">Identificador de recursos</translation> <translation id="569068482611873351">Importar...</translation> <translation id="56907980372820799">Vincular datos</translation> @@ -3317,7 +3321,7 @@ <translation id="5819442873484330149">Hangul de triple alternancia (final)</translation> <translation id="5819484510464120153">Crear acce&sos directos a aplicaciones...</translation> <translation id="5822838715583768518">Ejecutar aplicación</translation> -<translation id="5824480603702411398">Habilitada como páginas guardadas</translation> +<translation id="5824480603702411398">Habilitadas como páginas guardadas</translation> <translation id="5826507051599432481">Nombre común (CN)</translation> <translation id="5827266244928330802">Safari</translation> <translation id="5828228029189342317">Has elegido abrir ciertos tipos de archivo automáticamente después de la descarga.</translation> @@ -3457,6 +3461,7 @@ <translation id="604001903249547235">Copia de seguridad en la nube</translation> <translation id="6040143037577758943">Cerrar</translation> <translation id="604124094241169006">Automático</translation> +<translation id="6042308850641462728">Más</translation> <translation id="604257181445267932">Smart Lock te ayuda a acceder rápidamente a aplicaciones y sitios con las contraseñas que hayas guardado en Google.</translation> <translation id="6049065490165456785">Foto de la cámara interna</translation> <translation id="6051028581720248124">Al imprimir en una sucursal de FedEx Office, aceptas sus <ph name="START_LINK" />condiciones de uso<ph name="END_LINK" />.</translation> @@ -3488,7 +3493,6 @@ <translation id="6089481419520884864">Filtrar página</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Cancelando actualización…</translation> -<translation id="6095149522260432647">Habilita una preferencia que permite redireccionar las búsquedas de escritorio de Windows al motor de búsqueda predeterminado.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Abrir de forma maximizada</translation> <translation id="6096326118418049043">Nombre X 500</translation> @@ -4669,6 +4673,7 @@ <translation id="7926906273904422255">Marcar un origen no seguro como "no seguro" o "dudoso"</translation> <translation id="7928710562641958568">Dispositivo de expulsión</translation> <translation id="7938594894617528435">Sin conexión actualmente</translation> +<translation id="7939374455203157513">Habilitar los servicios de nube</translation> <translation id="7939412583708276221">Continuar de todos modos</translation> <translation id="7939997691108949385">El administrador podrá configurar restricciones y parámetros de configuración para este usuario supervisado en <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">Inglés (Estados Unidos; Colemak)</translation> @@ -5219,6 +5224,7 @@ <translation id="872537912056138402">Croata</translation> <translation id="8726206820263995930">Se produjo un error al recuperar la configuración de la política del servidor: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Muestra las opciones de extensión como elemento incorporado en chrome://extensions, en lugar de abrir una pestaña nueva.</translation> +<translation id="8727142376512517020">No volver a mostrar</translation> <translation id="8728672262656704056">Estás en modo incógnito</translation> <translation id="8730621377337864115">Listo</translation> <translation id="8731332457891046104">Anular registro de <ph name="DEVICE_TYPE" /></translation> @@ -5381,7 +5387,6 @@ <translation id="8986362086234534611">Borrar</translation> <translation id="8986494364107987395">Enviar automáticamente estadísticas de uso e informes sobre fallos a Google</translation> <translation id="8987927404178983737">Mes</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">URL base del certificado Netscape</translation> <translation id="8994845581478641365">Generador de caché de fuente de DirectWrite</translation> <translation id="8995603266996330174">Administrado por <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index ffb4d6b..53304607 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">Acceder</translation> <translation id="1864676585353837027">Cambiar forma de compartir estos archivos</translation> <translation id="1864756863218646478">No se ha podido encontrar el archivo.</translation> +<translation id="1865769994591826607">Solo conexiones al mismo sitio web</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" puede leer y escribir en archivos de sonido, vídeo e imágenes en las ubicaciones seleccionadas.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> está listo para completar la instalación.</translation> <translation id="1873879463550486830">Zona de pruebas SUID</translation> @@ -1196,6 +1197,7 @@ <translation id="2743387203779672305">Copiar al portapapeles</translation> <translation id="2744221223678373668">Compartidas</translation> <translation id="2745080116229976798">Subordinación completa de Microsoft</translation> +<translation id="2745576239403924641">Habilitar la ejecución de aplicaciones de Android en tu Chromebook</translation> <translation id="2747990718031257077">Habilita el diseño de la nueva barra de herramientas de extensiones (en desarrollo).</translation> <translation id="2749756011735116528">Iniciar sesión en <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Comprobar gramática con la ortografía</translation> @@ -1411,6 +1413,7 @@ <translation id="3011284594919057757">Acerca de Flash</translation> <translation id="3011362742078013760">Abrir todos los marcadores en una ventana de &incógnito</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Solo conexiones seguras al mismo sitio web</translation> <translation id="3012890944909934180">Reiniciar Chrome en el escritorio</translation> <translation id="3012917896646559015">Ponte en contacto inmediatamente con el fabricante del hardware para enviar tu ordenador a un centro de reparación.</translation> <translation id="3015992588037997514">¿Aparece este código en la pantalla de Chromebox?</translation> @@ -1641,6 +1644,7 @@ <translation id="331752765902890099">Botón de <ph name="PROFILE_NAME" />: error de inicio de sesión</translation> <translation id="3319048459796106952">Nueva ventana de &incógnito</translation> <translation id="331915893283195714">Permitir que todos los sitios inhabiliten el cursor del ratón</translation> +<translation id="3319364804843246307">Aplicaciones de Android</translation> <translation id="3320859581025497771">tu operador de telefonía</translation> <translation id="3323235640813116393">Permite guardar páginas como MHTML, es decir, un único archivo de texto que contiene código HTML y todos los subrecursos.</translation> <translation id="3323447499041942178">Cuadro de texto</translation> @@ -1745,6 +1749,7 @@ <translation id="347719495489420368">Clic derecho para reproducir <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">Seguir permitiendo que <ph name="HOST" /> acceda a la cámara y al micrófono</translation> <translation id="3478315065074101056">XPS habilita opciones avanzadas para impresoras tradicionales conectadas a Cloud Print con Chrome. Las impresoras deben volver a conectarse después de cambiar esta opción.</translation> +<translation id="3479539252931486093">¿No te lo esperabas? <ph name="BEGIN_LINK" />Notifícanoslo<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Ahora no</translation> <translation id="3480892288821151001">Acoplar ventana a la izquierda</translation> <translation id="3481915276125965083">Se han bloqueado los siguientes pop-ups en esta página:</translation> @@ -2717,6 +2722,7 @@ <translation id="4941246025622441835">Utiliza esta solicitud de dispositivo al registrar el dispositivo para la administración empresarial:</translation> <translation id="4942394808693235155">Buscar actualizaciones y aplicarlas</translation> <translation id="494286511941020793">Ayuda para la configuración de proxy</translation> +<translation id="4945378551914476156">Tus marcadores, tu historial, tus contraseñas y otros ajustes se sincronizarán con tu cuenta de Google para que puedas utilizarlos en cualquier dispositivo en el que uses Chrome. Puedes cambiar esta opción en <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Opciones...</translation> <translation id="4952186391360931024">Sin material</translation> <translation id="4954544650880561668">Control del dispositivo</translation> @@ -2848,7 +2854,6 @@ <ph name="LINE_BREAKS" /> Si desconectas el dispositivo mientras se utiliza, puedes perder tus datos. Espera hasta que finalice la operación y, a continuación, desconecta el dispositivo con la aplicación Archivos.</translation> <translation id="5159488553889181171">Se ha cancelado la descarga de <ph name="PLUGIN_NAME" />.</translation> -<translation id="5159628598068481063">Preferencia para redireccionar las búsquedas del escritorio de Windows</translation> <translation id="5160857336552977725">Inicia sesión en tu <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Se ha producido un error al compartir contenido. Comprueba la conexión e inténtalo de nuevo más tarde.</translation> <translation id="516592729076796170">Programmer Dvorak de EE. UU.</translation> @@ -3216,7 +3221,6 @@ <translation id="567881659373499783">Versión <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Leer tus datos en <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Filtrado de texto en modo de vista general</translation> -<translation id="568428328938709143">Cuenta eliminada</translation> <translation id="5684661240348539843">Identificador de recurso</translation> <translation id="569068482611873351">Importar...</translation> <translation id="56907980372820799">Vincular datos</translation> @@ -3458,6 +3462,7 @@ <translation id="604001903249547235">Copia de seguridad en la nube</translation> <translation id="6040143037577758943">Cerrar</translation> <translation id="604124094241169006">Automático</translation> +<translation id="6042308850641462728">Más</translation> <translation id="604257181445267932">Smart Lock te ayuda a iniciar sesión rápidamente en aplicaciones y sitios web con contraseñas que hayas guardado en Google.</translation> <translation id="6049065490165456785">Foto de cámara interna</translation> <translation id="6051028581720248124">Al imprimir en un establecimiento FedEx Office, aceptas sus <ph name="START_LINK" />condiciones de uso<ph name="END_LINK" />.</translation> @@ -3489,7 +3494,6 @@ <translation id="6089481419520884864">Convertir página</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Cancelando la actualización...</translation> -<translation id="6095149522260432647">Habilita una preferencia que redirecciona las búsquedas realizadas en el escritorio de Windows hacia el motor de búsqueda predeterminado.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Abrir de forma maximizada</translation> <translation id="6096326118418049043">Nombre X.500</translation> @@ -4669,6 +4673,7 @@ <translation id="7926906273904422255">Marca conexiones de origen que no son seguras como no seguras o dudosas.</translation> <translation id="7928710562641958568">Expulsar dispositivo</translation> <translation id="7938594894617528435">Sin conexión actualmente</translation> +<translation id="7939374455203157513">Habilitar servicios en la nube</translation> <translation id="7939412583708276221">Mantener de todos modos</translation> <translation id="7939997691108949385">El administrador podrá configurar restricciones y opciones para este usuario supervisado en la página <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">Estados Unidos (Colemak)</translation> @@ -5221,6 +5226,7 @@ <translation id="872537912056138402">Croata</translation> <translation id="8726206820263995930">Error al recuperar la configuración de política del servidor (<ph name="CLIENT_ERROR" />)</translation> <translation id="8726888928275282477">Permite ver las opciones de extensión como un elemento insertado en chrome://extensions en lugar de abrir una nueva pestaña.</translation> +<translation id="8727142376512517020">No volver a mostrar esta notificación</translation> <translation id="8728672262656704056">Has iniciado una sesión de incógnito</translation> <translation id="8730621377337864115">Listo</translation> <translation id="8731332457891046104">Anular registro de <ph name="DEVICE_TYPE" /></translation> @@ -5383,7 +5389,6 @@ <translation id="8986362086234534611">Dejar de recordar</translation> <translation id="8986494364107987395">Enviar automáticamente estadísticas de uso e informes sobre fallos a Google</translation> <translation id="8987927404178983737">Mes</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">URL base de certificado de Netscape</translation> <translation id="8994845581478641365">Creador de caché de fuentes de DirectWrite</translation> <translation id="8995603266996330174">Administrado por <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index 304409f50b..9651a59 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">Sisselogimine</translation> <translation id="1864676585353837027">Muutke seda, kuidas faile jagatakse</translation> <translation id="1864756863218646478">Faili ei leitud.</translation> +<translation id="1865769994591826607">Ainult sama saidi ühendused</translation> <translation id="186612162884103683">„<ph name="EXTENSION" />” saab loa märgitud asukohtade pildi-, video- ja helifaile lugeda ja kirjutada.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> oma valmis teie installi lõpuni viima</translation> <translation id="1873879463550486830">SUID-liivakast</translation> @@ -1196,6 +1197,7 @@ <translation id="2743387203779672305">Kopeeri lõikelauale</translation> <translation id="2744221223678373668">Jagatud</translation> <translation id="2745080116229976798">Microsofti piiratud subordinatsioon</translation> +<translation id="2745576239403924641">Lubage oma Chromebookis Androidi rakenduste käitamine.</translation> <translation id="2747990718031257077">Lubab (arendatava) uue laienduse tööriistariba disaini.</translation> <translation id="2749756011735116528">Logi sisse teenusesse <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Kontrolli grammatikat õigekirjakontrolliga</translation> @@ -1409,6 +1411,7 @@ <translation id="3011284594919057757">Teave Flashi kohta</translation> <translation id="3011362742078013760">Ava kõik järjehoidjad &inkognito aknas</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Ainult turvalised sama saidi ühendused</translation> <translation id="3012890944909934180">Käivitage Chrome uuesti töölaual</translation> <translation id="3012917896646559015">Võtke kohe ühendust oma riistvaratootjaga, et arvuti parandusse saata.</translation> <translation id="3015992588037997514">Kas see kood kuvatakse teie Chromeboxi ekraanil?</translation> @@ -1642,6 +1645,7 @@ <translation id="331752765902890099">Profiili <ph name="PROFILE_NAME" /> nupp: sisselogimise viga</translation> <translation id="3319048459796106952">Uus &inkognito aken</translation> <translation id="331915893283195714">Luba kõikidel saitidel hiirekursor keelata</translation> +<translation id="3319364804843246307">Androidi rakendused</translation> <translation id="3320859581025497771">teie operaator</translation> <translation id="3323235640813116393">Võimaldab lehed salvestada MHTML-ina: üks tekstifail, mis sisaldab HTML-i ja kõiki alamressursse.</translation> <translation id="3323447499041942178">Tekstiväli</translation> @@ -1746,6 +1750,7 @@ <translation id="347719495489420368">Paremklõpsake pistikprogrammi <ph name="PLUGIN_NAME" /> esitamiseks.</translation> <translation id="347785443197175480">Luba hostile <ph name="HOST" /> jätkuvalt juurdepääs kaamerale ja mikrofonile</translation> <translation id="3478315065074101056">XPS lubab täpsemad valikud klassikaliste printerite jaoks, mis on ühendatud Chrome'i abil pilvprintimisega. Printerid tuleb pärast selle märgendi muutmist uuesti ühendada.</translation> +<translation id="3479539252931486093">Kas see oli ootamatu? <ph name="BEGIN_LINK" />Andke meile sellest teada<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Mitte praegu</translation> <translation id="3480892288821151001">Doki aken vasakule</translation> <translation id="3481915276125965083">Sellel lehel blokeeriti järgmised hüpikaknad:</translation> @@ -2719,6 +2724,7 @@ <translation id="4941246025622441835">Kasutage seadme registreerimisel ettevõttehalduses seda seadmenõuet:</translation> <translation id="4942394808693235155">Otsi ja rakenda värskendusi</translation> <translation id="494286511941020793">Puhverserveri konfigureerimise abi</translation> +<translation id="4945378551914476156">Teie järjehoidjad, ajalugu, paroolid ja muud seaded sünkroonitakse teie Google'i kontoga, et saaksite neid kasutada kõikjal, kus Chrome'i kasutate. Seda saate muuta jaotises <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Valikud...</translation> <translation id="4952186391360931024">Mittemateriaalne</translation> <translation id="4954544650880561668">Seadme juhtimine</translation> @@ -2853,7 +2859,6 @@ <ph name="LINE_BREAKS" /> Kasutuses oleva seadme eemaldamisel võivad andmed kaduma minna. Oodake, kuni toiming on lõpetatud, seejärel väljutage seade rakendusega Failid.</translation> <translation id="5159488553889181171">Pistikprogrammi <ph name="PLUGIN_NAME" /> allalaadimine tühistati.</translation> -<translation id="5159628598068481063">Windowsi töölauaotsingu ümbersuunamise eelistus</translation> <translation id="5160857336552977725">Logige sisse seadmesse <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Jagamine ebaõnnestus. Kontrollige ühendust ja proovige uuesti.</translation> <translation id="516592729076796170">USA programmeerija Dvorak</translation> @@ -3221,7 +3226,6 @@ <translation id="567881659373499783">Versioon <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Lugege oma andmeid veebisaidil <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Teksti filtreerimine ülevaaterežiimis</translation> -<translation id="568428328938709143">Konto on eemaldatud</translation> <translation id="5684661240348539843">Vara kood</translation> <translation id="569068482611873351">Impordi ...</translation> <translation id="56907980372820799">Lingi andmed</translation> @@ -3463,6 +3467,7 @@ <translation id="604001903249547235">Pilvepõhine varundus</translation> <translation id="6040143037577758943">Sule</translation> <translation id="604124094241169006">Automaatne</translation> +<translation id="6042308850641462728">Rohkem</translation> <translation id="604257181445267932">Smart Lock aitab teil rakendustesse ja saitidele kiiresti sisse logida paroolidega, mille olete Google’i kontole salvestanud.</translation> <translation id="6049065490165456785">Foto sisemisest kaamerast</translation> <translation id="6051028581720248124">FedEx Office'i kaudu printides nõustute nende <ph name="START_LINK" />kasutustingimustega<ph name="END_LINK" />.</translation> @@ -3494,7 +3499,6 @@ <translation id="6089481419520884864">Lehe teisendamine</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Värskenduse tühistamine ...</translation> -<translation id="6095149522260432647">Lubatakse eelistus, mis võimaldab Windowsi töölauaotsingud ümber suunata vaikeotsingumootorisse.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Ava maksimeeritult</translation> <translation id="6096326118418049043">X.500 nimi</translation> @@ -4677,6 +4681,7 @@ <translation id="7926906273904422255">Ebaturvalised allikad märgitakse ebaturvaliseks või kahtlaseks.</translation> <translation id="7928710562641958568">Seadme väljutamine</translation> <translation id="7938594894617528435">Praegu võrguühenduseta</translation> +<translation id="7939374455203157513">Luba pilveteenused</translation> <translation id="7939412583708276221">Säilita ikkagi</translation> <translation id="7939997691108949385">Haldur saab valvatava kasutaja piiranguid ja seadeid seadistada aadressil <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">USA Colemak</translation> @@ -5228,6 +5233,7 @@ <translation id="872537912056138402">horvaatia keel</translation> <translation id="8726206820263995930">Serverist reegli seadete toomisel ilmnes viga: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Kuva laiendamise valikud manustatud elemendina jaotises chrome://extensions, mitte ära ava uut vahelehte.</translation> +<translation id="8727142376512517020">Ära näita seda uuesti</translation> <translation id="8728672262656704056">Olete inkognito režiimis</translation> <translation id="8730621377337864115">Valmis</translation> <translation id="8731332457891046104">Seadme <ph name="DEVICE_TYPE" /> registreerimise tühistamine</translation> @@ -5390,7 +5396,6 @@ <translation id="8986362086234534611">Unusta</translation> <translation id="8986494364107987395">Saada kasutusstatistika ja krahhiaruanded automaatselt Google'ile</translation> <translation id="8987927404178983737">kuu</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Netscape'i sertifikaadi baas-URL</translation> <translation id="8994845581478641365">DirectWrite'i fondi vahemälu koostaja</translation> <translation id="8995603266996330174">Haldaja: <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index 1a11e4f..5ea0a215 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -604,6 +604,7 @@ <translation id="1864111464094315414">ورود به سیستم</translation> <translation id="1864676585353837027">نحوه اشتراکگذاری این فایلها را تغییر دهید</translation> <translation id="1864756863218646478">این فایل پیدا نشد.</translation> +<translation id="1865769994591826607">فقط اتصالات same-site</translation> <translation id="186612162884103683">«<ph name="EXTENSION" />» میتواند تصاویر، ویدیوها و فایلهای صوتی را از مکانهای انتخاب شده بخوانید یا بنویسید.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> آماده تکمیل نصب است</translation> <translation id="1873879463550486830">SUID Sandbox</translation> @@ -1192,6 +1193,7 @@ <translation id="2743387203779672305">کپی در بریدهدان</translation> <translation id="2744221223678373668">اشتراکگذاری شده</translation> <translation id="2745080116229976798">وابستگی مشروط Microsoft</translation> +<translation id="2745576239403924641">برنامههای Android را قادر به اجرا در Chromebook شما میکند.</translation> <translation id="2747990718031257077">طرح نوار ابزار برنامه افزودنی جدید (در حال توسعه) را فعال میکند.</translation> <translation id="2749756011735116528">ورود به سیستم <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">بررسی گرامر با املا</translation> @@ -1405,6 +1407,7 @@ <translation id="3011284594919057757">درباره Flash</translation> <translation id="3011362742078013760">باز کردن همه نشانکها در &پنجره حالت ناشناس</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">فقط اتصالات ایمن same-site</translation> <translation id="3012890944909934180">راهاندازی مجدد Chrome در دسکتاپ</translation> <translation id="3012917896646559015">لطفاً برای ارسال رایانه خود به مرکز تعمیر، فوراً با سازنده سختافزار خود تماس بگیرید.</translation> <translation id="3015992588037997514">آیا این کد در صفحه نمایش Chromebox شما نشان داده میشود؟</translation> @@ -1638,6 +1641,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" /> دکمه: خطای ورود به سیستم</translation> <translation id="3319048459796106952">&پنجره جدید حالت ناشناس</translation> <translation id="331915893283195714">به همه سایتها اجازه داده شود مکاننمای موشواره را غیرفعال کنند</translation> +<translation id="3319364804843246307">برنامههای Android</translation> <translation id="3320859581025497771">شرکت مخابراتی شما</translation> <translation id="3323235640813116393">ذخیره صفحات را بهعنوان MHTML فعال میکند: یک فایل نوشتاری واحد شامل HTML و همه منابع فرعی.</translation> <translation id="3323447499041942178">کادر متنی</translation> @@ -1742,6 +1746,7 @@ <translation id="347719495489420368">برای اجرای <ph name="PLUGIN_NAME" />، کلیک راست کنید.</translation> <translation id="347785443197175480">همچنان دسترسی به دوربین و میکروفون شما، توسط <ph name="HOST" /> مجاز باشد</translation> <translation id="3478315065074101056">XPS گزینههای پیشرفته برای چاپگرهای کلاسیک مرتبط شده با Cloud Print از طریق Chrome را فعال میکند. چاپگرها بعد از تغییر این پرچم باید دوباره متصل شوند.</translation> +<translation id="3479539252931486093">غیرمنتظره بود؟ <ph name="BEGIN_LINK" />به ما اطلاع دهید<ph name="END_LINK" /></translation> <translation id="3479552764303398839">اکنون نه</translation> <translation id="3480892288821151001">قراردادن پنجره در چپ</translation> <translation id="3481915276125965083">پنجرههای بازشوی زیر در این صفحه مسدود شدهاند:</translation> @@ -2714,6 +2719,7 @@ <translation id="4941246025622441835">هنگام ثبتنام دستگاه برای مدیریت سازمانی، از این درخواست دستگاه استفاده کنید:</translation> <translation id="4942394808693235155">بهروزرسانیها را بررسی کرده و آنها را اعمال کنید</translation> <translation id="494286511941020793">راهنمای پیکربندی پراکسی</translation> +<translation id="4945378551914476156">نشانکها، سابقه، گذرواژه و سایر تنظیماتتان در حساب Google شما همگامسازی میشود، بنابراین میتوانید هرجا که از Chrome استفاده میکنید از آنها استفاده کنید. این تنظیم را میتوانید در <ph name="BEGIN_LINK" /> تغییر دهید.</translation> <translation id="4950138595962845479">گزینهها...</translation> <translation id="4952186391360931024">غیرسهبعدی</translation> <translation id="4954544650880561668">کنترل دستگاه</translation> @@ -2849,7 +2855,6 @@ <ph name="LINE_BREAKS" /> جداکردن دستگاه هنگامی که در حال استفاده است ممکن است باعث از دست رفتن دادهها شود. لطفاً تا به پایان رسیدن عملیات صبر کنید، سپس دستگاه را با استفاده از برنامه Files خارج نمایید.</translation> <translation id="5159488553889181171">دانلود <ph name="PLUGIN_NAME" /> لغو شد.</translation> -<translation id="5159628598068481063">اولویت هدایت جستجوی دسکتاپ Windows</translation> <translation id="5160857336552977725">وارد سیستم <ph name="DEVICE_TYPE" /> خودتان شوید</translation> <translation id="5163869187418756376">اشتراکگذاری انجام نشد. اتصال خود را بررسی کرده، بعداً دوباره امتحان کنید.</translation> <translation id="516592729076796170">دووراک آمریکایی برنامهنویسها</translation> @@ -3217,7 +3222,6 @@ <translation id="567881659373499783">نسخه <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">خواندن دادههای شما در <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">فیلتر کردن نوشتار در حالت نمای کلی</translation> -<translation id="568428328938709143">حساب برداشته شد</translation> <translation id="5684661240348539843">شناسه دارایی</translation> <translation id="569068482611873351">وارد کردن...</translation> <translation id="56907980372820799">دادههای پیوند</translation> @@ -3457,6 +3461,7 @@ <translation id="604001903249547235">پشتیبانگیری Cloud</translation> <translation id="6040143037577758943">بستن</translation> <translation id="604124094241169006">خودکار</translation> +<translation id="6042308850641462728">بیشتر</translation> <translation id="604257181445267932">Smart Lock به شما کمک میکند با استفاده از گذرواژههایی که با Google ذخیره کردهاید، سریع به سیستم برنامهها و سایتها وارد شوید.</translation> <translation id="6049065490165456785">عکس از دوربین داخلی</translation> <translation id="6051028581720248124">با چاپ در دفتر FedEx شما <ph name="START_LINK" />شرایط استفاده<ph name="END_LINK" /> آنها را میپذیرید.</translation> @@ -3488,7 +3493,6 @@ <translation id="6089481419520884864">صفحه فشرده</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">در حال لغو بهروزرسانی...</translation> -<translation id="6095149522260432647">اولویتی را فعال می کند که اجازه میدهد جستجوهای دسکتاپ Windows به موتور جستجوی پیشفرض هدایت شود.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">باز کردن در حداکثر اندازه</translation> <translation id="6096326118418049043">نام X.500</translation> @@ -4670,6 +4674,7 @@ <translation id="7926906273904422255">علامتگذاری منبع اصلی غیرایمن به عنوان «غیرایمن» یا به عنوان «مشکوک».</translation> <translation id="7928710562641958568">خارج کردن دستگاه</translation> <translation id="7938594894617528435">در حال حاضر آفلاین</translation> +<translation id="7939374455203157513">فعال کردن سرویسهای ابری</translation> <translation id="7939412583708276221">درهر حال حفظ شود</translation> <translation id="7939997691108949385">مدیر قادر خواهد بود محدودیتها و تنظیمات این کاربر نظارتشده را در <ph name="MANAGEMENT_URL" /> پیکربندی کند.</translation> <translation id="7943385054491506837">کلماک آمریکایی</translation> @@ -5220,6 +5225,7 @@ <translation id="872537912056138402">کرواسی</translation> <translation id="8726206820263995930">خطا هنگام واکشی تنظیمات خطمشی از سرور: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">بهجای باز کردن برگه جدید، گزینههای برنامه افزودنی را به صورت عنصر جاسازیشده در chrome://extensions نشان دهید.</translation> +<translation id="8727142376512517020">دیگر نشان داده نشود</translation> <translation id="8728672262656704056">به صورت ناشناس وارد شدید</translation> <translation id="8730621377337864115">تمام</translation> <translation id="8731332457891046104">لغو ثبت <ph name="DEVICE_TYPE" /></translation> @@ -5382,7 +5388,6 @@ <translation id="8986362086234534611">فراموش شود</translation> <translation id="8986494364107987395">ارسال خودکار آمار مصرف و گزارشهای خرابی به Google</translation> <translation id="8987927404178983737">ماه</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">نشانی وب گواهی Netscape</translation> <translation id="8994845581478641365">سازنده حافظه نهان قلم DirectWrite</translation> <translation id="8995603266996330174">مدیریت شده توسط <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb index 77cb64d..3b51e03c 100644 --- a/chrome/app/resources/generated_resources_fi.xtb +++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">Kirjaudu</translation> <translation id="1864676585353837027">Muuta tiedostojen jakotapaa</translation> <translation id="1864756863218646478">Tiedostoa ei löytynyt.</translation> +<translation id="1865769994591826607">Vain samalle sivustolle muodostetut yhteydet</translation> <translation id="186612162884103683"><ph name="EXTENSION" /> voi lukea ja kirjoittaa kuva-, video- ja äänitiedostoja valituissa sijainneissa.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> on valmis suorittamaan asennuksen loppuun.</translation> <translation id="1873879463550486830">SUID-hiekkalaatikko</translation> @@ -1196,6 +1197,7 @@ <translation id="2743387203779672305">Kopioi leikepöydälle</translation> <translation id="2744221223678373668">Jaettu</translation> <translation id="2745080116229976798">Microsoftin kelpaava alistaminen</translation> +<translation id="2745576239403924641">Ota Android-sovellukset käyttöön Chromebookissasi</translation> <translation id="2747990718031257077">Ottaa käyttöön (kehitteillä olevan) uuden laajennusyläpalkin ulkoasun.</translation> <translation id="2749756011735116528">Kirjaudu sisään tuotteeseen <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Tarkista kielioppi oikeinkirjoituksen yhteydessä</translation> @@ -1409,6 +1411,7 @@ <translation id="3011284594919057757">Tietoja Flashista</translation> <translation id="3011362742078013760">Avaa kaikki kirjanmerkit incognito-ikkunassa</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Vain samalle sivustolle muodostetut suojatut yhteydet</translation> <translation id="3012890944909934180">Käynnistä Chrome uudelleen työpöytätilassa</translation> <translation id="3012917896646559015">Ota heti yhteys tietokoneesi valmistajaan ja toimita se korjattavaksi.</translation> <translation id="3015992588037997514">Näkyykö tämä koodi Chromebox-näytölläsi?</translation> @@ -1641,6 +1644,7 @@ <translation id="331752765902890099">Painike <ph name="PROFILE_NAME" />: kirjautumisvirhe</translation> <translation id="3319048459796106952">Uusi &incognito-ikkuna</translation> <translation id="331915893283195714">Anna kaikkien sivustojen poistaa hiiren osoitin käytöstä</translation> +<translation id="3319364804843246307">Android-sovellukset</translation> <translation id="3320859581025497771">operaattorisi</translation> <translation id="3323235640813116393">Ottaa käyttöön sivujen tallentamisen MHTML-muodoissa eli yhtenä tekstitiedostona, joka sisältää HTML-koodin ja kaikki alaresurssit.</translation> <translation id="3323447499041942178">Tekstiruutu</translation> @@ -1745,6 +1749,7 @@ <translation id="347719495489420368">Toista <ph name="PLUGIN_NAME" /> klikkaamalla hiiren kakkospainikkeella.</translation> <translation id="347785443197175480">Anna sivuston <ph name="HOST" /> käyttää edelleen kameraasi ja mikrofoniasi</translation> <translation id="3478315065074101056">XPS mahdollistaa lisätoimintoja tavallisilla tulostimilla, jotka on yhdistetty Cloud Printiin Chromen avulla.Tulostimet täytyy yhdistää palveluun uudelleen tämän asetuksen muuttamisen jälkeen.</translation> +<translation id="3479539252931486093">Etkö odottanut tätä? <ph name="BEGIN_LINK" />Kerro siitä meille.<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Ei nyt</translation> <translation id="3480892288821151001">Kiinnitä ikkuna vasemmalle</translation> <translation id="3481915276125965083">Seuraavat ponnahdusikkunat estettiin tällä sivulla:</translation> @@ -2710,6 +2715,7 @@ <translation id="4941246025622441835">Käytä tätä laitepyyntöä, kun rekisteröit laitteen yrityshallintaan:</translation> <translation id="4942394808693235155">Tarkista päivitykset ja ota ne käyttöön</translation> <translation id="494286511941020793">Välityspalvelinmäärityksen ohje</translation> +<translation id="4945378551914476156">Kirjanmerkkisi, historiasi, salasanasi ja muut asetuksesi synkronoidaan Google-tilillesi, joten voit käyttää niitä aina, kun käytät Chromea. Voit muokata tätä asetusta täällä: <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Asetukset...</translation> <translation id="4952186391360931024">Muu kuin Material</translation> <translation id="4954544650880561668">Laitehallinta</translation> @@ -2842,7 +2848,6 @@ <ph name="LINE_BREAKS" /> Jos irrotat laitteen sen ollessa käytössä, voit menettää tietoja. Odota, kunnes toiminto on suoritettu, ja poista laite sitten käytöstä Tiedostot-sovelluksen kautta.</translation> <translation id="5159488553889181171">Laajennuksen <ph name="PLUGIN_NAME" /> lataus peruutettiin.</translation> -<translation id="5159628598068481063">Windowsin työpöytähaun uudelleenohjausvalinta</translation> <translation id="5160857336552977725">Kirjaudu sisään <ph name="DEVICE_TYPE" />-laitteeseesi.</translation> <translation id="5163869187418756376">Jakaminen epäonnistui. Tarkista internetyhteytesi ja yritä myöhemmin uudelleen.</translation> <translation id="516592729076796170">US, Dvorak ohjelmoijille</translation> @@ -3210,7 +3215,6 @@ <translation id="567881659373499783">Versio <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Lukea tietojasi sivustossa <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Yleiskatsaustilan suodatus tekstillä</translation> -<translation id="568428328938709143">Tili poistettu</translation> <translation id="5684661240348539843">Laitteen tunnus</translation> <translation id="569068482611873351">Tuo...</translation> <translation id="56907980372820799">Yhdistä tiedot</translation> @@ -3450,6 +3454,7 @@ <translation id="604001903249547235">Pilvivarmuuskopiointi</translation> <translation id="6040143037577758943">Sulje</translation> <translation id="604124094241169006">Automaattinen</translation> +<translation id="6042308850641462728">Lisää</translation> <translation id="604257181445267932">Smart Lockin avulla voit kirjautua nopeasti sovelluksiin ja sivustoille, joiden salasanat olet tallentanut Googleen.</translation> <translation id="6049065490165456785">Kuva laitteen kamerasta</translation> <translation id="6051028581720248124">Käyttämällä FedEx Office -palvelua hyväksyt sen <ph name="START_LINK" />käyttöehdot<ph name="END_LINK" />.</translation> @@ -3481,7 +3486,6 @@ <translation id="6089481419520884864">Koontisivu</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Peruutetaan päivitystä...</translation> -<translation id="6095149522260432647">Sallii valinnan, jonka seurauksena Windowsin työpöytähaut voidaan ohjata oletushakukoneeseen.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Avaa suuressa koossa</translation> <translation id="6096326118418049043">X.500-nimi</translation> @@ -4662,6 +4666,7 @@ <translation id="7926906273904422255">Merkitse suojaamattomat alkuperät suojaamattomiksi tai ”epäilyttäviksi”.</translation> <translation id="7928710562641958568">Poista laite</translation> <translation id="7938594894617528435">Offline-tilassa</translation> +<translation id="7939374455203157513">Ota pilvipalvelut käyttöön</translation> <translation id="7939412583708276221">Säilytä</translation> <translation id="7939997691108949385">Hallinnoija voi määrittää rajoitteita ja asetuksia tälle valvotulle käyttäjälle osoitteessa <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">USA, Colemak</translation> @@ -5212,6 +5217,7 @@ <translation id="872537912056138402">kroaatti</translation> <translation id="8726206820263995930">Virhe noudettaessa käytäntöasetuksia palvelimelta: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Näytä laajennusten asetukset upotettuna elementtinä chrome://extensions-kohdassa uuden välilehden sijaan.</translation> +<translation id="8727142376512517020">Älä näytä tätä uudelleen.</translation> <translation id="8728672262656704056">Olet muuttunut näkymättömäksi</translation> <translation id="8730621377337864115">Valmis</translation> <translation id="8731332457891046104">Poista laitteen <ph name="DEVICE_TYPE" /> rekisteröinti</translation> @@ -5374,7 +5380,6 @@ <translation id="8986362086234534611">Unohda</translation> <translation id="8986494364107987395">Lähetä Googlelle käyttötilastoja ja virheraportteja automaattisesti</translation> <translation id="8987927404178983737">Kuukausi</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Netscape-varmenteen URL-osoite</translation> <translation id="8994845581478641365">DirectWrite-kirjasinvälimuistin rakentaja</translation> <translation id="8995603266996330174">Hallinnoija: <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb index 19f81d38..93866faf 100644 --- a/chrome/app/resources/generated_resources_fil.xtb +++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -607,6 +607,7 @@ <translation id="1864111464094315414">Mag-login</translation> <translation id="1864676585353837027">Baguhin kung paano ibinabahagi ang mga file na ito</translation> <translation id="1864756863218646478">Hindi mahanap ang file.</translation> +<translation id="1865769994591826607">Mga koneksyon sa iisang site lang</translation> <translation id="186612162884103683">Ang "<ph name="EXTENSION" />" ay nakakabasa at nakakapagsulat ng mga larawan, video, file ng tunog sa mga may check na lokasyon.</translation> <translation id="1867780286110144690">Ang <ph name="PRODUCT_NAME" /> ay handa nang kumpletuhin ang iyong pag-install</translation> <translation id="1873879463550486830">SUID Sandbox</translation> @@ -1198,6 +1199,7 @@ <translation id="2743387203779672305">Kopyahin sa clipboard</translation> <translation id="2744221223678373668">Nakabahagi</translation> <translation id="2745080116229976798">Microsoft Qualified Subordination</translation> +<translation id="2745576239403924641">I-enable ang mga Android App na tumakbo sa iyong Chromebook.</translation> <translation id="2747990718031257077">Ine-enable ang (kasalukuyang dine-develop) bagong disenyo ng toolbar ng extension.</translation> <translation id="2749756011735116528">Mag-sign in sa <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Check Grammar With Spelling</translation> @@ -1411,6 +1413,7 @@ <translation id="3011284594919057757">Tungkol sa Flash</translation> <translation id="3011362742078013760">Buksan ang Lahat ng Bookmark sa &Incognito Window</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Mga ligtas na koneksyon sa iisang site lang</translation> <translation id="3012890944909934180">Muling ilunsad ang Chrome sa desktop</translation> <translation id="3012917896646559015">Mangyaring makipag-ugnay agad sa manufacturer ng iyong hardware upang ipadala ang iyong computer sa pasilidad sa pagkumpuni.</translation> <translation id="3015992588037997514">Lumalabas ba ang code na ito sa screen ng iyong Chromebox?</translation> @@ -1644,6 +1647,7 @@ <translation id="331752765902890099">Button ng <ph name="PROFILE_NAME" />: error sa pag-sign in</translation> <translation id="3319048459796106952">Bagong &incognito window</translation> <translation id="331915893283195714">Payagan ang lahat ng site na i-disable ang cursor ng mouse</translation> +<translation id="3319364804843246307">Mga Android App</translation> <translation id="3320859581025497771">ang iyong carrier</translation> <translation id="3323235640813116393">Pinapagana ang pag-save ng mga page bilang MHTML: iisang text file na naglalaman ng HTML at ng lahat ng sub-resource.</translation> <translation id="3323447499041942178">Text box</translation> @@ -1748,6 +1752,7 @@ <translation id="347719495489420368">I-right-click upang i-play ang <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">Magpatuloy sa pagpayag sa <ph name="HOST" /> na i-access ang iyong camera at mikropono</translation> <translation id="3478315065074101056">Ine-enable ng XPS ang mga advanced na opsyon para sa mga classic na printer na nakakonekta sa Cloud Print sa Chrome. Dapat ay muling ikonekta ang mga printer pagkatapos baguhin ang flag na ito.</translation> +<translation id="3479539252931486093">Hindi mo ba ito inaasahan? <ph name="BEGIN_LINK" />Ipaalam sa amin<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Hindi ngayon</translation> <translation id="3480892288821151001">I-dock ang window sa kaliwa</translation> <translation id="3481915276125965083">Hinarang ang mga sumusunod na pop-up sa pahinang ito:</translation> @@ -2723,6 +2728,7 @@ <translation id="4941246025622441835">Gamitin ang paghihingi sa device na ito kapag ine-enroll ang device para sa enterprise management:</translation> <translation id="4942394808693235155">Suriin para sa at maglapat ng mga update</translation> <translation id="494286511941020793">Tulong sa Configuration ng Proxy</translation> +<translation id="4945378551914476156">Masi-sync ang iyong mga bookmark, history, password at iba pang mga setting sa iyong Google Account nang sa gayon ay magamit mo ang mga ito sa tuwing gagamitin mo ang Chrome. Mababago mo ito sa <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Mga Pagpipilian...</translation> <translation id="4952186391360931024">Hindi material</translation> <translation id="4954544650880561668">Pagkontrol sa device</translation> @@ -2857,7 +2863,6 @@ <ph name="LINE_BREAKS" /> Maaaring magsanhi ng pagkawala ng data ang pag-aalis sa iyong device habang ginagamit ito. Mangyaring maghintay hanggang matapos ang operasyon, pagkatapos ay i-eject ang device gamit ang Files app.</translation> <translation id="5159488553889181171">Kinansela ang pag-download ng <ph name="PLUGIN_NAME" />.</translation> -<translation id="5159628598068481063">Kagustuhan sa pag-redirect ng paghahanap sa Windows desktop</translation> <translation id="5160857336552977725">Mag-sign in sa iyong <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Nabigo ang pagbabahagi. Suriin ang iyong koneksyon at subukang muli sa ibang pagkakataon.</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> @@ -3225,7 +3230,6 @@ <translation id="567881659373499783">Bersyon <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Basahin ang iyong data sa <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Pagfi-filter ng text sa Overview Mode</translation> -<translation id="568428328938709143">Inalis ang account</translation> <translation id="5684661240348539843">Identifier ng Asset</translation> <translation id="569068482611873351">I-import...</translation> <translation id="56907980372820799">I-link ang data</translation> @@ -3467,6 +3471,7 @@ <translation id="604001903249547235">Pag-back up sa Cloud</translation> <translation id="6040143037577758943">Isara</translation> <translation id="604124094241169006">Awtomatiko</translation> +<translation id="6042308850641462728">Higit pa</translation> <translation id="604257181445267932">Nakakatulong sa iyo ang Smart Lock na mabilisang mag-sign in sa mga app at site gamit ang mga password na na-save mo sa Google.</translation> <translation id="6049065490165456785">Larawan mula sa panloob na camera</translation> <translation id="6051028581720248124">Sa pamamagitan ng pag-print sa FedEx Office, tinatanggap mo ang kanilang <ph name="START_LINK" />mga tuntunin ng paggamit<ph name="END_LINK" />.</translation> @@ -3498,7 +3503,6 @@ <translation id="6089481419520884864">Distill page</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Kinakansela ang pag-update...</translation> -<translation id="6095149522260432647">Nag-e-enable ng kagustuhang nagbibigay-daan sa pag-redirect ng mga paghahanap sa Windows desktop sa default na search engine.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Buksan ang naka-maximize</translation> <translation id="6096326118418049043">Pangalan na X.500</translation> @@ -4683,6 +4687,7 @@ <translation id="7926906273904422255">Markahan ang mga hindi secure na pinagmulan bilang hindi secure o bilang "kahina-hinala."</translation> <translation id="7928710562641958568">I-eject ang device</translation> <translation id="7938594894617528435">Kasalukuyang offline</translation> +<translation id="7939374455203157513">I-enable ang Mga Serbisyo sa Cloud</translation> <translation id="7939412583708276221">Panatilihin pa rin</translation> <translation id="7939997691108949385">Mako-configure ng manager ang mga paghihigpit at setting para sa pinangangasiwaang user na ito sa <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">US Colemak</translation> @@ -5237,6 +5242,7 @@ <translation id="872537912056138402">Croatian</translation> <translation id="8726206820263995930">Error kapag kumukuha ng mga setting ng patakaran mula sa server: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Ipakita ang mga opsyon sa extension bilang naka-embed na elemento sa chrome://extensions sa halip na magbukas ng bagong tab.</translation> +<translation id="8727142376512517020">Huwag na itong ipakitang muli</translation> <translation id="8728672262656704056">Naging incognito ka</translation> <translation id="8730621377337864115">Tapos na</translation> <translation id="8731332457891046104">I-unenroll ang <ph name="DEVICE_TYPE" /></translation> @@ -5400,7 +5406,6 @@ <translation id="8986362086234534611">Kalimutan</translation> <translation id="8986494364107987395">Awtomatikong ipadala ang mga istatistika ng paggamit at mga ulat ng pag-crash sa Google</translation> <translation id="8987927404178983737">Buwan</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">URL ng Netscape Certificate Base</translation> <translation id="8994845581478641365">Panggawa ng Cache ng Font para sa DirectWrite</translation> <translation id="8995603266996330174">Pinamamahalaan ni <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index 7533fb3b..7ae6723 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">Connexion</translation> <translation id="1864676585353837027">Modifiez le mode de partage de ces fichiers.</translation> <translation id="1864756863218646478">Fichier introuvable.</translation> +<translation id="1865769994591826607">Uniquement les connexions au même site</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" dispose d'un droit d'accès en lecture et en écriture sur les images, les vidéos et les fichiers audio figurant dans les dossiers sélectionnés.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> est prêt à terminer l'installation.</translation> <translation id="1873879463550486830">Sandbox SUID</translation> @@ -1195,6 +1196,7 @@ <translation id="2743387203779672305">Copier dans le Presse-papier</translation> <translation id="2744221223678373668">Partagés</translation> <translation id="2745080116229976798">Subordination qualifiée Microsoft</translation> +<translation id="2745576239403924641">Activer les applications Android pour qu'elle fonctionnent sur votre Chromebook</translation> <translation id="2747990718031257077">Utiliser la nouvelle apparence de la barre d'outils d'extension (en développement)</translation> <translation id="2749756011735116528">Connexion à <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Vérifier la grammaire et l'orthographe</translation> @@ -1408,6 +1410,7 @@ <translation id="3011284594919057757">À propos de Flash</translation> <translation id="3011362742078013760">Ouvrir tous les favoris dans une fenêtre de &navigation privée</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Uniquement les connexions sécurisées au même site</translation> <translation id="3012890944909934180">Relancer Chrome sur le Bureau</translation> <translation id="3012917896646559015">Veuillez contacter votre fabricant de matériel dans les plus brefs délais afin de faire réparer votre ordinateur.</translation> <translation id="3015992588037997514">Est-ce que ce code s'affiche sur l'écran de votre Chromebox ?</translation> @@ -1641,6 +1644,7 @@ <translation id="331752765902890099">Bouton <ph name="PROFILE_NAME" /> : erreur de connexion</translation> <translation id="3319048459796106952">Nouvelle fenêtre de nav&igation privée</translation> <translation id="331915893283195714">Autoriser tous les sites à désactiver le curseur de la souris</translation> +<translation id="3319364804843246307">Applications Android</translation> <translation id="3320859581025497771">votre opérateur</translation> <translation id="3323235640813116393">Activer l'enregistrement des pages en MHTML : un seul fichier texte contenant le code HTML et toutes les sous-ressources</translation> <translation id="3323447499041942178">Zone de saisie</translation> @@ -1745,6 +1749,7 @@ <translation id="347719495489420368">Pour lancer <ph name="PLUGIN_NAME" />, cliquez avec le bouton droit de la souris.</translation> <translation id="347785443197175480">Continuer à autoriser <ph name="HOST" /> à accéder à votre caméra et à votre micro</translation> <translation id="3478315065074101056">Avec la technologie XPS, des options avancées sont activées pour les imprimantes classiques connectées à Cloud Print via Chrome. Après avoir modifié cet indicateur, vous devez connecter à nouveau ces imprimantes.</translation> +<translation id="3479539252931486093">S'agit-il d'une erreur inattendue ? <ph name="BEGIN_LINK" />Signaler<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Pas maintenant</translation> <translation id="3480892288821151001">Ancrer la fenêtre à gauche</translation> <translation id="3481915276125965083">Les fenêtres pop-up suivantes ont été bloquées sur cette page :</translation> @@ -2718,6 +2723,7 @@ <translation id="4941246025622441835">Utiliser cette réquisition pour l'enregistrement de l'appareil dans le cadre de la gestion d'entreprise :</translation> <translation id="4942394808693235155">Rechercher et appliquer des mises à jour</translation> <translation id="494286511941020793">Aide pour la configuration de proxy</translation> +<translation id="4945378551914476156">Vos favoris, votre historique, vos mots de passe et d'autres paramètres sont synchronisés avec votre compte Google afin que vous puissiez les utiliser sur tous les appareils sur lesquels vous vous connectez à Chrome. Vous pouvez sélectionner les éléments à synchroniser dans <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Options...</translation> <translation id="4952186391360931024">Autre que Material</translation> <translation id="4954544650880561668">Contrôle de l'appareil</translation> @@ -2852,7 +2858,6 @@ <ph name="LINE_BREAKS" /> Si vous retirez votre périphérique pendant qu'il est utilisé, vous risquez de perdre des données. Veuillez attendre la fin de l'opération, puis éjecter le périphérique à l'aide de l'application Fichiers.</translation> <translation id="5159488553889181171">Le téléchargement de <ph name="PLUGIN_NAME" /> a été annulé.</translation> -<translation id="5159628598068481063">Préférences relatives à la redirection des recherches sur le bureau Windows</translation> <translation id="5160857336552977725">Connectez-vous à votre <ph name="DEVICE_TYPE" />.</translation> <translation id="5163869187418756376">Échec du partage. Veuillez vérifier la connexion, puis réessayer.</translation> <translation id="516592729076796170">Dvorak américain pour programmeurs</translation> @@ -3221,7 +3226,6 @@ <translation id="567881659373499783">Version <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Lire vos données sur <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Filtrage textuel en mode aperçu</translation> -<translation id="568428328938709143">Compte supprimé</translation> <translation id="5684661240348539843">Identifiant d'élément</translation> <translation id="569068482611873351">Importer...</translation> <translation id="56907980372820799">Associer les données</translation> @@ -3463,6 +3467,7 @@ <translation id="604001903249547235">Sauvegarde Cloud</translation> <translation id="6040143037577758943">Fermer</translation> <translation id="604124094241169006">Automatique</translation> +<translation id="6042308850641462728">Plus</translation> <translation id="604257181445267932">Smart Lock vous permet de vous connecter rapidement à des applications et à des sites au moyen de mots de passe que vous avez enregistrés sur Google.</translation> <translation id="6049065490165456785">Photo d'un appareil photo interne</translation> <translation id="6051028581720248124">En imprimant votre document dans une agence FedEx, vous acceptez leurs <ph name="START_LINK" />Conditions d'utilisation<ph name="END_LINK" />.</translation> @@ -3494,7 +3499,6 @@ <translation id="6089481419520884864">Convertir la page</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Annulation de la mise à jour...</translation> -<translation id="6095149522260432647">Active une option de préférence permettant la redirection des recherches sur le bureau Windows vers le moteur de recherche par défaut.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Ouvrir la version agrandie</translation> <translation id="6096326118418049043">Nom X.500</translation> @@ -4675,6 +4679,7 @@ <translation id="7926906273904422255">Marquer les origines non sécurisées comme non sécurisées ou douteuses</translation> <translation id="7928710562641958568">Éjecter l'appareil</translation> <translation id="7938594894617528435">Actuellement hors connexion</translation> +<translation id="7939374455203157513">Activer les services Google Cloud</translation> <translation id="7939412583708276221">Conserver quand même</translation> <translation id="7939997691108949385">Le gestionnaire pourra configurer les restrictions et les paramètres de l'utilisateur supervisé à l'adresse <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">Colemak américain</translation> @@ -5226,6 +5231,7 @@ <translation id="872537912056138402">Croate</translation> <translation id="8726206820263995930">Erreur survenue lors de la récupération des paramètres des règles depuis le serveur : <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Afficher les options des extensions en tant qu'élément intégré dans chrome://extensions plutôt que d'ouvrir un nouvel onglet</translation> +<translation id="8727142376512517020">Ne plus afficher ce message</translation> <translation id="8728672262656704056">Vous êtes passé en mode navigation privée</translation> <translation id="8730621377337864115">OK</translation> <translation id="8731332457891046104">Annuler l'enregistrement du <ph name="DEVICE_TYPE" /></translation> @@ -5388,7 +5394,6 @@ <translation id="8986362086234534611">Retirer</translation> <translation id="8986494364107987395">Envoyer automatiquement les statistiques d'utilisation et les rapports d'erreur à Google</translation> <translation id="8987927404178983737">Mois</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">URL de base du certificat Netscape</translation> <translation id="8994845581478641365">Création du cache de polices DirectWrite</translation> <translation id="8995603266996330174">Géré par <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index caeecc6..e8edf28 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -602,6 +602,7 @@ <translation id="1864111464094315414">લૉગિન</translation> <translation id="1864676585353837027">આ ફાઇલો જે રીતે શેર કરેલી છે તે બદલો</translation> <translation id="1864756863218646478">ફાઇલ શોધી શકાઈ નથી.</translation> +<translation id="1865769994591826607">માત્ર સમાન-સાઇટ કનેક્શન્સ</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" આ તપાસાયેલા સ્થાનોમાં છબીઓ, વિડિઓ અને સાઉન્ડ ફાઇલોને વાંચી અને લખી શકે છે.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> તમારું ઇન્સ્ટોલેશન પૂર્ણ કરવાની તૈયારીમાં છે</translation> <translation id="1873879463550486830">SUID sandbox</translation> @@ -1192,6 +1193,7 @@ <translation id="2743387203779672305">ક્લિપબોર્ડ પર કૉપિ કરો</translation> <translation id="2744221223678373668">શેર કરેલી</translation> <translation id="2745080116229976798">Microsoft Qualified Subordination</translation> +<translation id="2745576239403924641">તમારી Chromebook પર શરૂ કરવા માટે Android ઍપ્લિકેશનો સક્ષમ કરો</translation> <translation id="2747990718031257077">(વિકાસમાં) નવી એક્સ્ટેન્શન ટૂલબાર, ટૂલબાર ડિઝાઇનને સક્ષમ કરે છે.</translation> <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> પર સાઇન ઇન કરો</translation> <translation id="2749881179542288782">જોડણી સાથે વ્યાકરણ તપાસો</translation> @@ -1405,6 +1407,7 @@ <translation id="3011284594919057757">ફ્લેશ વિશે </translation> <translation id="3011362742078013760">બધા બુકમાર્ક્સને &છુપી વિંડોમાં ખોલો</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">માત્ર સુરક્ષિત સમાન-સાઇટ કનેક્શન્સ</translation> <translation id="3012890944909934180">ડેસ્કટૉપ પર Chrome ફરીથી લૉંચ કરો</translation> <translation id="3012917896646559015">તમારા કમ્પ્યુટરને સમારકામ સગવડ પર મોકલવા માટે તુરંત તમારા હાર્ડવેર નિર્માતાનો સંપર્ક કરો.</translation> <translation id="3015992588037997514">શું આ કોડ તમારી Chromebox સ્ક્રીન પર દેખાયો?</translation> @@ -1638,6 +1641,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" /> બટન: સાઇન ઇન ભૂલ</translation> <translation id="3319048459796106952">નવી &છુપી વિંડો</translation> <translation id="331915893283195714">તમામ સાઇટ્સને તમારા માઉસ કર્સરને અક્ષમ કરવાની મંજૂરી આપો</translation> +<translation id="3319364804843246307">Android ઍપ્લિકેશનો</translation> <translation id="3320859581025497771">તમારો વાહક</translation> <translation id="3323235640813116393">પૃષ્ઠોને MHTML તરીકે સાચવવાનું પસંદ કરે છે: જે HTML અને તમામ પેટા-સંસાધનો ધરાવતી એકલ ટેક્સ્ટ ફાઇલ છે.</translation> <translation id="3323447499041942178">ટેક્સ્ટ બૉક્સ</translation> @@ -1742,6 +1746,7 @@ <translation id="347719495489420368"><ph name="PLUGIN_NAME" /> ચલાવવા માટે જમણી-ક્લિક કરો.</translation> <translation id="347785443197175480">તમારા કૅમેરા અને માઇક્રોફોનને ઍક્સેસ કરવા માટે <ph name="HOST" /> ને સતત મંજૂરી આપે છે </translation> <translation id="3478315065074101056">XPS, Chrome સાથે મેઘ મુદ્રણ પર કનેક્ટ કરેલા ક્લાસિક પ્રિન્ટર્સ માટે વિગતવાર વિકલ્પોને સક્ષમ કરે છે. આ ફ્લેગ બદલ્યાં પછી પ્રિન્ટર્સ ફરીથી કનેક્ટ કરવા આવશ્યક છે.</translation> +<translation id="3479539252931486093">શું આ અનપેક્ષિત હતું? <ph name="BEGIN_LINK" />અમને જણાવો<ph name="END_LINK" /></translation> <translation id="3479552764303398839">હમણાં નહીં</translation> <translation id="3480892288821151001">વિન્ડો ડાબે ડૉક કરો</translation> <translation id="3481915276125965083">આ પૃષ્ઠ પર નીચેના પૉપ-અપ્સ અવરોધિત હતા:</translation> @@ -2715,6 +2720,7 @@ <translation id="4941246025622441835">જ્યારે ઉપકરણની એન્ટરપ્રાઇઝ મેનેજમેન્ટ માટે નોંધણી કરાવો ત્યારે આ ઉપકરણ માગણીનો ઉપયોગ કરો:</translation> <translation id="4942394808693235155">અપડેટ્સ માટે તપાસો અને લાગુ કરો</translation> <translation id="494286511941020793">Proxy ગોઠવણી સહાય</translation> +<translation id="4945378551914476156">તમારા Google એકાઉન્ટ પર તમારા બુકમાર્ક્સ, ઇતિહાસ, પાસવર્ડ્સ અને અન્ય સેટિંગ્સ સમન્વયિત કરવામાં આવશે જેથી તમે જ્યાં પણ Chrome નો ઉપયોગ કરો ત્યાં તેમનો ઉપયોગ કરી શકો. તમે આને <ph name="BEGIN_LINK" /> માં બદલી શકો છો</translation> <translation id="4950138595962845479">વિકલ્પો...</translation> <translation id="4952186391360931024">બિન-સામગ્રી</translation> <translation id="4954544650880561668">ઉપકરણ નિયંત્રણ</translation> @@ -2847,7 +2853,6 @@ <ph name="LINE_BREAKS" /> ઉપયોગમાં રહેલા તમારા ઉપકરણને દૂર કરવાથી ડેટાનું નુકસાન થઈ શકે છે. ક્રિયા પૂર્ણ થાય ત્યાં સુધી કૃપા કરીને રાહ જુઓ, તે પછી ફાઇલ્સ એપ્લિકેશનનો ઉપયોગ કરીને ઉપકરણને કાઢી નાખો.</translation> <translation id="5159488553889181171"><ph name="PLUGIN_NAME" /> ડાઉનલોડ રદ કરવામાં આવ્યું હતું.</translation> -<translation id="5159628598068481063">Windows ડેસ્કટૉપ શોધ રીડાયરેક્શન પસંદગી</translation> <translation id="5160857336552977725">તમારા <ph name="DEVICE_TYPE" /> પર સાઇન ઇન કરો</translation> <translation id="5163869187418756376">શેરિંગ નિષ્ફળ થયું. તમારું કનેક્શન તપાસો અને થોડીવાર પછી ફરી પ્રયાસ કરો.</translation> <translation id="516592729076796170">યુએસ પ્રોગ્રામર ડ્વોરેક</translation> @@ -3216,7 +3221,6 @@ <translation id="567881659373499783">સંસ્કરણ <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522"><ph name="WEBSITE_1" /> પર તમારો ડેટા વાંચી શકે છે</translation> <translation id="5680928275846978395">વિહંગાવલોકન મોડમાં ટેક્સ્ટ ફિલ્ટરિંગ</translation> -<translation id="568428328938709143">એકાઉન્ટ દૂર કર્યું</translation> <translation id="5684661240348539843">સંપત્તિ ઓળખકર્તા</translation> <translation id="569068482611873351">આયાત કરો...</translation> <translation id="56907980372820799">ડેટાને લિંક કરો</translation> @@ -3456,6 +3460,7 @@ <translation id="604001903249547235">મેઘ બેકઅપ</translation> <translation id="6040143037577758943">બંધ કરો</translation> <translation id="604124094241169006">સ્વચલિત</translation> +<translation id="6042308850641462728">વધુ</translation> <translation id="604257181445267932">Smart Lock તમને તમે Google પર સાચવેલા પાસવર્ડ્સનો ઉપયોગ કરીને ઍપ્લિકેશનો અને સાઇટ્સ પર ઝડપથી સાઇન ઇન કરવામાં સહાય કરે છે.</translation> <translation id="6049065490165456785">આંતરિક કૅમેરાથી ફોટો</translation> <translation id="6051028581720248124">FedEx Office પર પ્રિંટ કરીને, તમે તેમની <ph name="START_LINK" />ઉપયોગની શરતો<ph name="END_LINK" />ને સ્વીકારો છો.</translation> @@ -3487,7 +3492,6 @@ <translation id="6089481419520884864">Distill પૃષ્ઠ</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">અપડેટને રદ કરી રહ્યું છે...</translation> -<translation id="6095149522260432647">એક પસંદગી સક્ષમ કરે છે જે Windows ડેસ્કટૉપ શોધના રીડાયરેક્શનને ડિફોલ્ટ શોધ એંજિન પર મંજૂરી આપે છે.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">મહત્તમ ખોલો</translation> <translation id="6096326118418049043">X.500 નામ</translation> @@ -4670,6 +4674,7 @@ <translation id="7926906273904422255">બિન-સુરક્ષિત મૂળને બિન-સુરક્ષિત તરીકે અથવા "શંકાસ્પદ" તરીકે ચિહ્નિત કરો.</translation> <translation id="7928710562641958568">ઉપકરણ હટાવો</translation> <translation id="7938594894617528435">હાલમાં ઑફલાઇન</translation> +<translation id="7939374455203157513">મેઘ સેવાઓ સક્ષમ કરો</translation> <translation id="7939412583708276221">તો પણ રાખો</translation> <translation id="7939997691108949385">સંચાલક <ph name="MANAGEMENT_URL" /> પર આ નિરીક્ષણ કરેલા વપરાશકર્તા માટે પ્રતિબંધો અને સેટિંગ્સને ગોઠવવામાં સમર્થ હશે.</translation> <translation id="7943385054491506837">યુએસ કોલમેક</translation> @@ -5218,6 +5223,7 @@ <translation id="872537912056138402">ક્રોએશિયન</translation> <translation id="8726206820263995930">સર્વરમાંથી નીતિ સેટિંગ્સનું આનયન કરતી વખતે ભૂલ: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">એક નવું ટેબ ખોલવાને બદલે એક્સ્ટેંશન વિકલ્પોને chrome://extensions માં એમ્બેડ કરેલ ઘટક તરીકે પ્રદર્શિત કરો.</translation> +<translation id="8727142376512517020">આ ફરી બતાવશો નહીં</translation> <translation id="8728672262656704056">તમે છુપા મોડમાં ગયા છો</translation> <translation id="8730621377337864115">થઈ ગયું</translation> <translation id="8731332457891046104"><ph name="DEVICE_TYPE" /> ની નોંધણી રદ કરો</translation> @@ -5380,7 +5386,6 @@ <translation id="8986362086234534611">ભૂલી ગયા</translation> <translation id="8986494364107987395">ઉપયોગિતા આંકડાઓ અને ક્રેશ રિપોર્ટ્સ Google ને આપમેળે મોકલો</translation> <translation id="8987927404178983737">મહિનો</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">નેટસ્કેપ પ્રમાણપત્ર બેઝ URL</translation> <translation id="8994845581478641365">DirectWrite ફોન્ટ કેશ બિલ્ડર</translation> <translation id="8995603266996330174"><ph name="DOMAIN" /> દ્વારા સંચાલિત</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb index b35e3295..cd1f648 100644 --- a/chrome/app/resources/generated_resources_hi.xtb +++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">प्रवेश करें</translation> <translation id="1864676585353837027">इन फ़ाइलों को साझा करने का तरीका बदलें</translation> <translation id="1864756863218646478">फ़ाइल नहीं मिल सकी.</translation> +<translation id="1865769994591826607">केवल समान-साइट कनेक्शन</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" चेक किए गए स्थानों में चित्रों, वीडियो, और ध्वनि फ़ाइलों को पढ़ और लिख सकता है.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> आपकी स्थापना पूर्ण करने के लिए तैयार है</translation> <translation id="1873879463550486830">SUID सैंडबॉक्स</translation> @@ -1195,6 +1196,7 @@ <translation id="2743387203779672305">क्लिपबोर्ड पर प्रतिलिपि बनाएं</translation> <translation id="2744221223678373668">साझा किए गए</translation> <translation id="2745080116229976798">Microsoft Qualified Subordination</translation> +<translation id="2745576239403924641">अपने Chromebook पर चलाने के लिए Android ऐप्स सक्षम करें.</translation> <translation id="2747990718031257077">(विकास में) नए एक्सटेंशन टूलबार टूलबार डिज़ाइन को सक्षम करता है.</translation> <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> में प्रवेश करें</translation> <translation id="2749881179542288782">वर्तनी के साथ व्याकरण की जांच करें</translation> @@ -1408,6 +1410,7 @@ <translation id="3011284594919057757">Flash के बारे में</translation> <translation id="3011362742078013760">सभी बुकमार्क &गुप्त विंडो में खोलें</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">केवल समान-साइट कनेक्शन को सुरक्षित बनाएं</translation> <translation id="3012890944909934180">डेस्कटॉप पर Chrome फिर से लॉन्च करें</translation> <translation id="3012917896646559015">अपने कंप्यूटर को सुधार सुविधा केंद्र पर भेजने के लिए कृपया तत्काल अपने हार्डवेयर निर्माता से संपर्क करें.</translation> <translation id="3015992588037997514">क्या यह कोड आपकी Chromebox स्क्रीन पर दिखाई देता है?</translation> @@ -1641,6 +1644,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" /> बटन: प्रवेश करने की त्रुटि</translation> <translation id="3319048459796106952">नई &गुप्त विंडो</translation> <translation id="331915893283195714">सभी साइटों को माउस कर्सर को अक्षम करने दें</translation> +<translation id="3319364804843246307">Android ऐप्स</translation> <translation id="3320859581025497771">आपका कैरियर</translation> <translation id="3323235640813116393">पृष्ठों को MHTML के रूप में सहेजना सक्षम करती है: HTML तथा सभी उप-संसाधनों वाली एकल लेख फ़ाइल.</translation> <translation id="3323447499041942178">टेक्स्ट बॉक्स</translation> @@ -1745,6 +1749,7 @@ <translation id="347719495489420368"><ph name="PLUGIN_NAME" /> चलाने के लिए राइट-क्लिक करें.</translation> <translation id="347785443197175480"><ph name="HOST" /> को अपने कैमरे और माइक्रोफ़ोन को एक्सेस करते रहन दें</translation> <translation id="3478315065074101056">XPS, Chrome के साथ क्लाउड प्रिंट से कनेक्ट किए गए क्लासिक प्रिंटर के लिए उन्नत विकल्पों को सक्षम करता है. इस फ़्लैग को बदलने के बाद प्रिंटर पुन: कनेक्ट किए जाने चाहिए.</translation> +<translation id="3479539252931486093">क्या यह अनपेक्षित था? <ph name="BEGIN_LINK" />हमें बताएं<ph name="END_LINK" /></translation> <translation id="3479552764303398839">अभी नहीं</translation> <translation id="3480892288821151001">विंडो को बाईं ओर डॉक करें</translation> <translation id="3481915276125965083">इस पृष्ठ पर निम्न पॉप-अप अवरोधित कर दिए गए थे:</translation> @@ -2718,6 +2723,7 @@ <translation id="4941246025622441835">एंटरप्राइज़ प्रबंधन के लिए डिवाइस को नामांकित करते समय इस डिवाइस अनुरोध का उपयोग करें:</translation> <translation id="4942394808693235155">अपडेट जांचें और लागू करें</translation> <translation id="494286511941020793">प्रॉक्सी कॉन्फ़िगरेशन सहायता</translation> +<translation id="4945378551914476156">आपके बुकमार्क, इतिहास, पासवर्ड और अन्य सेटिंग आपके Google खाते में समन्वयित की जाएंगी ताकि आप उनका उपयोग वहां कर सकें जहां आप Chrome का उपयोग करते हैं. आप इसे <ph name="BEGIN_LINK" /> में बदल सकते हैं</translation> <translation id="4950138595962845479">विकल्प...</translation> <translation id="4952186391360931024">गैर-मटीरियल</translation> <translation id="4954544650880561668">डिवाइस नियंत्रण</translation> @@ -2852,7 +2858,6 @@ <ph name="LINE_BREAKS" /> उपयोग के दौरान अपने डिवाइस को निकालने से डेटा की हानि हो सकती है. कृपया ऑपरेशन पूर्ण हो जाने तक प्रतीक्षा करें, फिर फ़ाइलें ऐप्स का उपयोग करके डिवाइस को निकाल लें.</translation> <translation id="5159488553889181171"><ph name="PLUGIN_NAME" /> डाउनलोड बंद कर दिया गया था.</translation> -<translation id="5159628598068481063">Windows डेस्कटॉप खोज रीडायरेक्शन प्राथमिकता</translation> <translation id="5160857336552977725">अपने <ph name="DEVICE_TYPE" /> में प्रवेश करें</translation> <translation id="5163869187418756376">साझाकरण विफल रहा. अपना कनेक्शन जांचें और बाद में पुन: प्रयास करें.</translation> <translation id="516592729076796170">यूएस प्रोग्रामर ड्वोरक</translation> @@ -3220,7 +3225,6 @@ <translation id="567881659373499783">वर्शन <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522"><ph name="WEBSITE_1" /> पर अपना डेटा पढ़ें</translation> <translation id="5680928275846978395">अवलोकन मोड में लेख फ़िल्टरिंग</translation> -<translation id="568428328938709143">खाता निकाला गया</translation> <translation id="5684661240348539843">एसेट पहचानकर्ता</translation> <translation id="569068482611873351">आयात करें...</translation> <translation id="56907980372820799">डेटा लिंक करें</translation> @@ -3320,7 +3324,7 @@ <translation id="5819442873484330149">हंगुल 3 सेट (अंतिम)</translation> <translation id="5819484510464120153">ऐप्स शार्टकट बनाएं...</translation> <translation id="5822838715583768518">ऐप्स लॉन्च करें</translation> -<translation id="5824480603702411398">सहेजे गए पृष्ठों के रूप में सक्षम किया गया</translation> +<translation id="5824480603702411398">सहेजे गए पृष्ठों के रूप में सक्षम किया गया</translation> <translation id="5826507051599432481">सामान्य नाम (CN)</translation> <translation id="5827266244928330802">Safari</translation> <translation id="5828228029189342317">आपने डाउनलोड करने के बाद अपने आप कुछ फ़ाइल प्रकार खोलना चुना है.</translation> @@ -3462,6 +3466,7 @@ <translation id="604001903249547235">क्लाउड बैकअप</translation> <translation id="6040143037577758943">बंद करें</translation> <translation id="604124094241169006">स्वचालित</translation> +<translation id="6042308850641462728">अधिक</translation> <translation id="604257181445267932">Smart Lock उन ऐप्स और साइटों में तेज़ी से प्रवेश करने में आपकी सहायता करता है जो आपके द्वारा Google के साथ सहेजे गए पासवर्ड का उपयोग करते हैं.</translation> <translation id="6049065490165456785">आंतरिक कैमरे का फ़ोटो</translation> <translation id="6051028581720248124">FedEx Office पर प्रिंट करके, आप उनकी <ph name="START_LINK" />उपयोग की शर्तों<ph name="END_LINK" /> को स्वीकार करते हैं.</translation> @@ -3493,7 +3498,6 @@ <translation id="6089481419520884864">शुद्ध पृष्ठ</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">अपडेट रद्द किया जा रहा है...</translation> -<translation id="6095149522260432647">उस प्राथमिकता को सक्षम करता है जो Windows डेस्कटॉप खोजों को डिफ़ॉल्ट खोज इंजन में रीडायरेक्ट करने की अनुमति देती है.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">बड़े दृश्य में खोलें</translation> <translation id="6096326118418049043">X.500 नाम</translation> @@ -4677,6 +4681,7 @@ <translation id="7926906273904422255">गैर-सुरक्षित मूल को गैर-सुरक्षित के रूप में या "संदिग्ध" के रूप में चिह्नित करें.</translation> <translation id="7928710562641958568">डिवाइस निकालें</translation> <translation id="7938594894617528435">वर्तमान में ऑफ़लाइन</translation> +<translation id="7939374455203157513">क्लाउड सेवाएं सक्षम करें</translation> <translation id="7939412583708276221">फिर भी रखें</translation> <translation id="7939997691108949385">प्रबंधक <ph name="MANAGEMENT_URL" /> पर इस पर्यवेक्षित उपयोगकर्ता के लिए प्रतिबंध और सेटिंग कॉन्फ़िगर करने के लिए उत्तरदायी होगा.</translation> <translation id="7943385054491506837">यूएस कोलमैक</translation> @@ -5227,6 +5232,7 @@ <translation id="872537912056138402">क्रोएशियाई</translation> <translation id="8726206820263995930">सर्वर से नीति सेटिंग फ़ेच करते समय त्रुटि: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">एक्सटेंशन विकल्पों को नए टैब में खोलने की बजाय chrome://extensions में एम्बेड किए गए तत्व के रूप में दिखाएं.</translation> +<translation id="8727142376512517020">इसे दोबारा ना दिखाएं</translation> <translation id="8728672262656704056">आप गुप्त मोड में चले गए हैं</translation> <translation id="8730621377337864115">पूर्ण</translation> <translation id="8731332457891046104"><ph name="DEVICE_TYPE" /> का नामांकन रद्द करना</translation> @@ -5389,7 +5395,6 @@ <translation id="8986362086234534611">भूल जाएं</translation> <translation id="8986494364107987395">Google को उपयोग के आंकड़े और क्रैश रिपोर्ट अपने आप भेजें</translation> <translation id="8987927404178983737">माह</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Netscape प्रमाणपत्र आधार URL</translation> <translation id="8994845581478641365">DirectWrite फ़ाॅन्ट संचय बिल्डर</translation> <translation id="8995603266996330174"><ph name="DOMAIN" /> द्वारा प्रबंधित</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index a9b90e9..ba6a297 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">Prijava</translation> <translation id="1864676585353837027">Promjena načina dijeljenja ovih datoteka</translation> <translation id="1864756863218646478">Nije bilo moguće pronaći datoteku.</translation> +<translation id="1865769994591826607">Samo veze iste web-lokacije</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" može čitati i zapisivati slikovne, video i audiodatoteke na označenim lokacijama.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> je spreman za dovršetak instalacije</translation> <translation id="1873879463550486830">Sigurna okolina SUID</translation> @@ -1195,6 +1196,7 @@ <translation id="2743387203779672305">Kopiraj u međuspremnik</translation> <translation id="2744221223678373668">Dijeljeno</translation> <translation id="2745080116229976798">Microsoftova kvalificirana podređenost</translation> +<translation id="2745576239403924641">Omogući izvođenje Android aplikacija na Chromebooku.</translation> <translation id="2747990718031257077">Omogućuje novi dizajn proširenja alatne trake (u razvoju).</translation> <translation id="2749756011735116528">Prijava na uslugu <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Uz pravopis provjeri i gramatiku</translation> @@ -1408,6 +1410,7 @@ <translation id="3011284594919057757">O Flashu</translation> <translation id="3011362742078013760">Otvori sve oznake u &anonimnom prozoru</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Samo sigurne veze iste web-lokacije</translation> <translation id="3012890944909934180">Ponovo pokrenite Chrome na radnoj površini</translation> <translation id="3012917896646559015">Odmah se obratite proizvođaču hardvera radi slanja svojeg računala na servis.</translation> <translation id="3015992588037997514">Pojavljuje li se ovaj kôd na zaslonu Chromeboxa?</translation> @@ -1640,6 +1643,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" /> gumb: pogreška prijave</translation> <translation id="3319048459796106952">&Novi anonimni prozor</translation> <translation id="331915893283195714">Dopusti svim web-lokacijama onemogućivanje pokazivača miša</translation> +<translation id="3319364804843246307">Android aplikacije</translation> <translation id="3320859581025497771">vaš davatelj usluge</translation> <translation id="3323235640813116393">Omogućuje spremanje stranica u MHTML obliku: jedna tekstna datoteka koja sadrži HTML i sve podređene resurse.</translation> <translation id="3323447499041942178">Tekstni okvir</translation> @@ -1744,6 +1748,7 @@ <translation id="347719495489420368">Kliknite desnom tipkom da biste pokrenuli <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">Nastavi dopuštati hostu <ph name="HOST" /> pristup kameri i mikrofonu</translation> <translation id="3478315065074101056">XPS omogućuje napredne opcije za klasične pisače povezane s Cloud Printom putem Chromea. Pisači se moraju ponovo povezati nakon promjene te oznake.</translation> +<translation id="3479539252931486093">Niste to očekivali? <ph name="BEGIN_LINK" />Javite nam<ph name="END_LINK" />.</translation> <translation id="3479552764303398839">Ne sada</translation> <translation id="3480892288821151001">Usidri prozor ulijevo</translation> <translation id="3481915276125965083">Na ovoj su stranici blokirani sljedeći skočni prozori:</translation> @@ -2718,6 +2723,7 @@ <translation id="4941246025622441835">Upotrijebite taj zahtjev uređaja kada prijavljujete uređaj za poslovno upravljanje:</translation> <translation id="4942394808693235155">Provjerite i primijenite ažuriranja</translation> <translation id="494286511941020793">Pomoć za proxy konfiguraciju</translation> +<translation id="4945378551914476156">Vaše oznake, povijest, zaporke i ostale postavke sinkronizirat će se s vašim Google računom kako biste ih mogli upotrebljavati na svim uređajima na kojima upotrebljavate Chrome. To možete promijeniti na ovoj vezi <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Opcije...</translation> <translation id="4952186391360931024">Nematerijalno</translation> <translation id="4954544650880561668">Kontrola uređaja</translation> @@ -2852,7 +2858,6 @@ <ph name="LINE_BREAKS" /> Uklanjanje uređaja dok je još u upotrebi može uzrokovati gubitak podataka. Pričekajte da uređaj dovrši radnju, a potom ga izbacite pomoću aplikacije Datoteke.</translation> <translation id="5159488553889181171">Preuzimanje dodatka <ph name="PLUGIN_NAME" /> otkazano je.</translation> -<translation id="5159628598068481063">Postavka preusmjeravanja pretraživanja računala sa sustavom Windows</translation> <translation id="5160857336552977725">Prijavite se na uređaj <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Dijeljenje nije uspjelo. Provjerite vezu i pokušajte ponovo kasnije.</translation> <translation id="516592729076796170">Američka programerska Dvorak</translation> @@ -3220,7 +3225,6 @@ <translation id="567881659373499783">Verzija <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">čitati vaše podatke s web-lokacije <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Filtriranje teksta u načinu pregleda</translation> -<translation id="568428328938709143">Račun je uklonjen</translation> <translation id="5684661240348539843">Identifikator uređaja</translation> <translation id="569068482611873351">Uvezi...</translation> <translation id="56907980372820799">Povežite podatke</translation> @@ -3460,6 +3464,7 @@ <translation id="604001903249547235">Sigurnosno kopiranje u oblaku</translation> <translation id="6040143037577758943">Zatvori</translation> <translation id="604124094241169006">Automatski</translation> +<translation id="6042308850641462728">Više</translation> <translation id="604257181445267932">Smart Lock omogućuje brzu prijavu u aplikacije i na web-lokacije pomoću zaporki koje ste spremili na Google.</translation> <translation id="6049065490165456785">Fotografija iz internog fotoaparata</translation> <translation id="6051028581720248124">Ispisom putem usluge FedEx Office prihvaćate njene <ph name="START_LINK" />uvjete pružanja usluge<ph name="END_LINK" />.</translation> @@ -3491,7 +3496,6 @@ <translation id="6089481419520884864">Sažmi stranicu</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Otkazivanje ažuriranja...</translation> -<translation id="6095149522260432647">Omogućuje postavku kojom se pretraživanja računala sa sustavom Windows preusmjeravaju na zadanu tražilicu.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Otvori maksimalno</translation> <translation id="6096326118418049043">X.500 naziv</translation> @@ -4670,6 +4674,7 @@ <translation id="7926906273904422255">Označi nesigurne izvore kao nesigurne ili "sumnjive".</translation> <translation id="7928710562641958568">Izbaci uređaj</translation> <translation id="7938594894617528435">Trenutačno izvan mreže</translation> +<translation id="7939374455203157513">Omogući usluge u oblaku</translation> <translation id="7939412583708276221">Svejedno zadrži</translation> <translation id="7939997691108949385">Upravitelj će moći konfigurirati ograničenja i postavke za tog nadziranog korisnika na adresi <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">američka (SAD Colemak)</translation> @@ -5220,6 +5225,7 @@ <translation id="872537912056138402">Hrvatski</translation> <translation id="8726206820263995930">Pogreška pri dohvaćanju postavki pravila s poslužitelja: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Prikaži opcije proširenja kao ugrađeni element u chrome://extensions umjesto otvaranja nove kartice.</translation> +<translation id="8727142376512517020">Ne prikazuj to ponovo</translation> <translation id="8728672262656704056">Radite u anonimnom načinu</translation> <translation id="8730621377337864115">Gotovo</translation> <translation id="8731332457891046104">Poništavanje registracije uređaja <ph name="DEVICE_TYPE" /></translation> @@ -5382,7 +5388,6 @@ <translation id="8986362086234534611">Zaboravi</translation> <translation id="8986494364107987395">Automatski usluzi Google šalje statistiku o upotrebi i izvješća o padu programa</translation> <translation id="8987927404178983737">Mjesec</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Osnovni URL Netscape certifikata</translation> <translation id="8994845581478641365">Predmemoriranje fontova za DirectWrite</translation> <translation id="8995603266996330174">Upravlja <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index f0a9047..82a07385 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">Bejelentkezés</translation> <translation id="1864676585353837027">Módosítsa a fájlok megosztási módját</translation> <translation id="1864756863218646478">A fájl nem található.</translation> +<translation id="1865769994591826607">Csak egyező webhelyek kapcsolata esetén</translation> <translation id="186612162884103683">A(z) „<ph name="EXTENSION" />” olvashat és írhat képeket, videókat és hangfájlokat a megjelölt helyeken.</translation> <translation id="1867780286110144690">A <ph name="PRODUCT_NAME" /> készen áll a telepítés befejezésére</translation> <translation id="1873879463550486830">SUID Sandbox</translation> @@ -1196,6 +1197,7 @@ <translation id="2743387203779672305">Másolás a vágólapra</translation> <translation id="2744221223678373668">Megosztott</translation> <translation id="2745080116229976798">Microsoft minősített altanúsítvány-kibocsátók</translation> +<translation id="2745576239403924641">Android-alkalmazások futtatásának engedélyezése a Chromebookon.</translation> <translation id="2747990718031257077">Engedélyezi a még fejlesztés alatt álló új kialakítást a böngésző eszköztárán.</translation> <translation id="2749756011735116528">Bejelentkezés a <ph name="PRODUCT_NAME" />-ba</translation> <translation id="2749881179542288782">Nyelvhelyesség és helyesírás ellenőrzése</translation> @@ -1409,6 +1411,7 @@ <translation id="3011284594919057757">A Flash-ről</translation> <translation id="3011362742078013760">Az összes könyvjelző megnyitása &inkognitóablakban</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Csak egyező webhelyek biztonságos kapcsolata esetén</translation> <translation id="3012890944909934180">Chrome újraindítása az asztalon</translation> <translation id="3012917896646559015">Kérjük, azonnal vegye fel a kapcsolatot hardvergyártójával, és küldje számítógépét szervizbe.</translation> <translation id="3015992588037997514">Megjelenik a kód a Chromebox-képernyőn?</translation> @@ -1642,6 +1645,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" /> gomb: bejelentkezési hiba</translation> <translation id="3319048459796106952">Új &inkognitóablak</translation> <translation id="331915893283195714">Valamennyi webhely számára lehetővé teszi az egérmutató letiltását</translation> +<translation id="3319364804843246307">Android-alkalmazások</translation> <translation id="3320859581025497771">adathordozó</translation> <translation id="3323235640813116393">Lehetővé teszi az oldalak MHTML formátumban való mentését; ez egyetlen szöveges fájlban tartalmazza a HTML-t és az összes alárendelt forrást.</translation> <translation id="3323447499041942178">Szövegmező</translation> @@ -1746,6 +1750,7 @@ <translation id="347719495489420368">A(z) <ph name="PLUGIN_NAME" /> indításához kattintson rá jobb gombbal.</translation> <translation id="347785443197175480">A(z) <ph name="HOST" /> továbbra is hozzáférhet az Ön kamerájához és mikrofonjához</translation> <translation id="3478315065074101056">Az XPS speciális beállításokat engedélyez a Cloud Print szolgáltatáshoz a Chrome-mal kapcsolódó hagyományos nyomtatók esetében. A jelölő módosítását követően a nyomtatókat újra kell csatlakoztatni.</translation> +<translation id="3479539252931486093">Ez váratlanul érte Önt? <ph name="BEGIN_LINK" />Tudassa velünk.<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Ne most</translation> <translation id="3480892288821151001">Ablak rögzítése balra</translation> <translation id="3481915276125965083">A következő előugró ablakokat letiltottuk ezen az oldalon:</translation> @@ -2718,6 +2723,7 @@ <translation id="4941246025622441835">Jelen eszközigénylés használata az eszköz regisztrálásakor vállalati felügyelet céljából:</translation> <translation id="4942394808693235155">Frissítések keresése és végrehajtása</translation> <translation id="494286511941020793">Proxykonfigurációs súgó</translation> +<translation id="4945378551914476156">A rendszer szinkronizálni fogja a könyvjelzőket, az előzményeket, a jelszavakat és az egyéb beállításokat Google-fiókjával, hogy bárhol hozzájuk férjen, ha Chrome-ot használ. Ezt a következő helyen tudja módosítani: <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Beállítások...</translation> <translation id="4952186391360931024">Nem anyagszerű</translation> <translation id="4954544650880561668">Eszközvezérlés</translation> @@ -2852,7 +2858,6 @@ <ph name="LINE_BREAKS" /> Ha használat közben távolítja el eszközét, az adatvesztést eredményezhet. Kérjük, várjon, amíg a művelet befejeződik, majd válassza le az eszközt a Fájlok alkalmazás használatával.</translation> <translation id="5159488553889181171">A(z) <ph name="PLUGIN_NAME" /> letöltését megszakították.</translation> -<translation id="5159628598068481063">Windows asztali keresés átirányítási preferenciája</translation> <translation id="5160857336552977725">Jelentkezzen be <ph name="DEVICE_TYPE" /> eszközén</translation> <translation id="5163869187418756376">Nem sikerült a megosztás. Ellenőrizze a kapcsolatot, és később próbálkozzon újra.</translation> <translation id="516592729076796170">US Dvorak programozó</translation> @@ -3221,7 +3226,6 @@ <translation id="567881659373499783">Verzió: <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Adatok beolvasása a következő webhelyen: <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Szöveg általi szűrés áttekintés módban</translation> -<translation id="568428328938709143">Fiók eltávolítva</translation> <translation id="5684661240348539843">Tartalomazonosító</translation> <translation id="569068482611873351">Importálás...</translation> <translation id="56907980372820799">Adatok összekapcsolása</translation> @@ -3461,6 +3465,7 @@ <translation id="604001903249547235">Biztonsági mentés a felhőbe</translation> <translation id="6040143037577758943">Bezárás</translation> <translation id="604124094241169006">Automatikus</translation> +<translation id="6042308850641462728">Hosszabban</translation> <translation id="604257181445267932">A Smart Lock segítségével gyorsan beléphet különféle alkalmazásokba és webhelyekre a Google rendszerében mentett jelszavakkal.</translation> <translation id="6049065490165456785">Fotó a belső kamerával</translation> <translation id="6051028581720248124">A FedEx Office üzletben történő nyomtatással elfogadja az ő <ph name="START_LINK" />felhasználási feltételeiket<ph name="END_LINK" />.</translation> @@ -3492,7 +3497,6 @@ <translation id="6089481419520884864">Oldal előállítása</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Frissítés leállítása...</translation> -<translation id="6095149522260432647">Engedélyezi azt a beállítást, amely lehetővé teszi a Windowsban végrehajtott asztali keresések átirányítását az alapértelmezett keresőhöz.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Megnyitás teljes méretben</translation> <translation id="6096326118418049043">X.500 név</translation> @@ -4673,6 +4677,7 @@ <translation id="7926906273904422255">A nem biztonságos eredet megjelölése nem biztonságosként vagy „gyanúsként”.</translation> <translation id="7928710562641958568">Eszköz kiadása</translation> <translation id="7938594894617528435">Jelenleg offline</translation> +<translation id="7939374455203157513">Felhőszolgáltatások engedélyezése</translation> <translation id="7939412583708276221">Megtartás</translation> <translation id="7939997691108949385">A kezelő a következő címen konfigurálhatja az erre a felügyelt felhasználóra vonatkozó korlátozásokat és beállításokat: <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">USA Colemak</translation> @@ -5224,6 +5229,7 @@ <translation id="872537912056138402">horvát</translation> <translation id="8726206820263995930">Hiba a kiszolgálóról származó irányelv-beállítások fogadásakor: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">A bővítménylehetőségek beágyazott elemként jelennek meg a chrome://extensions oldalon, nem pedig új lapon nyílnak meg.</translation> +<translation id="8727142376512517020">Ez ne jelenjen meg többé</translation> <translation id="8728672262656704056">Ön inkognitómódra váltott</translation> <translation id="8730621377337864115">Kész</translation> <translation id="8731332457891046104">A(z) <ph name="DEVICE_TYPE" /> regisztrációjának törlése</translation> @@ -5386,7 +5392,6 @@ <translation id="8986362086234534611">Elfelejt</translation> <translation id="8986494364107987395">Használati statisztikák és hibajelentések automatikus küldése a Google-nak</translation> <translation id="8987927404178983737">hónap</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Netscape tanúsítvány - alap URL</translation> <translation id="8994845581478641365">DirectWrite betűtípus-gyorsítótár építő</translation> <translation id="8995603266996330174">Kezelő: <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index 9dff5855..00228ce 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">Masuk</translation> <translation id="1864676585353837027">Ubah cara file ini dibagikan</translation> <translation id="1864756863218646478">File tidak dapat ditemukan.</translation> +<translation id="1865769994591826607">Hanya sambungan situs serupa</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" dapat membaca dan menulis file gambar, video, dan suara di lokasi yang dicentang.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> siap menyelesaikan penginstalan</translation> <translation id="1873879463550486830">Sandbox SUID</translation> @@ -1195,6 +1196,7 @@ <translation id="2743387203779672305">Salin ke papan klip</translation> <translation id="2744221223678373668">Dibagikan</translation> <translation id="2745080116229976798">Microsoft Qualified Subordination</translation> +<translation id="2745576239403924641">Izinkan Aplikasi Android dijalankan di Chromebook Anda.</translation> <translation id="2747990718031257077">Mengaktifkan rancangan bilah alat bilah alat ekstensi baru (dalam pengembangan).</translation> <translation id="2749756011735116528">Masuk ke <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Periksa Grammar Dengan Ejaaan</translation> @@ -1408,6 +1410,7 @@ <translation id="3011284594919057757">Tentang Flash</translation> <translation id="3011362742078013760">Buka Semua Bookmark di &Jendela Penyamaran</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Hanya sambungan situs serupa yang aman</translation> <translation id="3012890944909934180">Luncurkan ulang Chrome di desktop</translation> <translation id="3012917896646559015">Segera hubungi pabrikan perangkat keras Anda untuk mengirimkan komputer ke fasilitas perbaikan.</translation> <translation id="3015992588037997514">Apakah kode ini muncul pada layar Chromebox?</translation> @@ -1641,6 +1644,7 @@ <translation id="331752765902890099">Tombol <ph name="PROFILE_NAME" />: terjadi kesalahan saat masuk</translation> <translation id="3319048459796106952">Jendela &penyamaran baru</translation> <translation id="331915893283195714">Izinkan semua situs menonaktifkan kursor mouse</translation> +<translation id="3319364804843246307">Aplikasi Android</translation> <translation id="3320859581025497771">operator Anda</translation> <translation id="3323235640813116393">Memungkinkan penyimpanan laman dalam bentuk MHTML: file teks tunggal berisi HTML dan semua sub-sumber daya.</translation> <translation id="3323447499041942178">Kotak teks</translation> @@ -1745,6 +1749,7 @@ <translation id="347719495489420368">Klik kanan untuk memainkan <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">Terus izinkan <ph name="HOST" /> untuk mengakses kamera dan mikrofon Anda</translation> <translation id="3478315065074101056">XPS memungkinkan opsi lanjutan untuk printer klasik yang tersambung ke Cloud Print dengan Chrome. Printer harus disambungkan kembali setelah mengubah tanda ini.</translation> +<translation id="3479539252931486093">Apakah hal ini tidak diharapkan? <ph name="BEGIN_LINK" />Beri tahu kami<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Jangan sekarang</translation> <translation id="3480892288821151001">Galangkan jendela ke kiri</translation> <translation id="3481915276125965083">Munculan berikut dicekal di laman ini:</translation> @@ -2719,6 +2724,7 @@ <translation id="4941246025622441835">Gunakan permintaan perangkat ini saat mendaftarkan perangkat untuk pengelolaan perusahaan:</translation> <translation id="4942394808693235155">Periksa dan terapkan pembaruan</translation> <translation id="494286511941020793">Bantuan Konfigurasi Proxy</translation> +<translation id="4945378551914476156">Bookmark, riwayat, sandi, dan setelan lainnya akan disinkronkan dengan Akun Google sehingga Anda dapat menggunakannya di semua perangkat tempat Anda menggunakan Chrome. Anda dapat mengubahnya di <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Opsi...</translation> <translation id="4952186391360931024">Non-material</translation> <translation id="4954544650880561668">Kontrol perangkat</translation> @@ -2853,7 +2859,6 @@ <ph name="LINE_BREAKS" /> Menghapus perangkat Anda saat digunakan dapat menyebabkan hilangnya data. Tunggu hingga operasi berakhir, lalu keluarkan perangkat menggunakan aplikasi File.</translation> <translation id="5159488553889181171">Unduhan <ph name="PLUGIN_NAME" /> dibatalkan.</translation> -<translation id="5159628598068481063">Preferensi pengalihan penelusuran desktop Windows</translation> <translation id="5160857336552977725">Masuk ke <ph name="DEVICE_TYPE" /> Anda</translation> <translation id="5163869187418756376">Gagal berbagi. Periksa sambungan Anda dan coba lagi nanti.</translation> <translation id="516592729076796170">Programmer Dvorak AS</translation> @@ -3221,7 +3226,6 @@ <translation id="567881659373499783">Versi <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Membaca data Anda di <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Pemfilteran teks di Mode Ikhtisar</translation> -<translation id="568428328938709143">Akun dihapus</translation> <translation id="5684661240348539843">Pengenal Aset</translation> <translation id="569068482611873351">Impor...</translation> <translation id="56907980372820799">Tautkan data</translation> @@ -3461,6 +3465,7 @@ <translation id="604001903249547235">Cadangan Awan</translation> <translation id="6040143037577758943">Tutup</translation> <translation id="604124094241169006">Otomatis</translation> +<translation id="6042308850641462728">Lainnya</translation> <translation id="604257181445267932">Smart Lock membantu Anda masuk ke aplikasi dan situs dengan cepat menggunakan sandi yang telah disimpan dengan Google.</translation> <translation id="6049065490165456785">Foto dari kamera internal</translation> <translation id="6051028581720248124">Dengan mencetak ke Kantor FedEx, Anda menyetujui <ph name="START_LINK" />persyaratan penggunaan<ph name="END_LINK" /> mereka.</translation> @@ -3492,7 +3497,6 @@ <translation id="6089481419520884864">Laman saring</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Membatalkan pembaruan...</translation> -<translation id="6095149522260432647">Mengaktifkan preferensi yang memungkinkan pengalihan penelusuran desktop Windows ke mesin telusur default.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Buka yang dimaksimalkan</translation> <translation id="6096326118418049043">X.500 Name</translation> @@ -4673,6 +4677,7 @@ <translation id="7926906273904422255">Menandai asal tidak aman sebagai tidak aman, atau sebagai "meragukan".</translation> <translation id="7928710562641958568">Keluarkan perangkat</translation> <translation id="7938594894617528435">Sedang offline</translation> +<translation id="7939374455203157513">Aktifkan Layanan Awan</translation> <translation id="7939412583708276221">Lanjutkan saja</translation> <translation id="7939997691108949385">Pengelola akan dapat mengonfigurasi batasan dan setelan untuk pengguna yang dilindungi ini di <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">Colemak AS</translation> @@ -5223,6 +5228,7 @@ <translation id="872537912056138402">Kroat</translation> <translation id="8726206820263995930">Terjadi kesalahan saat mengambil setelan kebijakan dari server: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Menampilkan opsi ekstensi sebagai elemen yang disematkan di chrome://extensions, bukan membuka tab baru.</translation> +<translation id="8727142376512517020">Jangan tampilkan ini lagi</translation> <translation id="8728672262656704056">Anda masuk mode penyamaran</translation> <translation id="8730621377337864115">Selesai</translation> <translation id="8731332457891046104">Membatalkan pendaftaran <ph name="DEVICE_TYPE" /></translation> @@ -5385,7 +5391,6 @@ <translation id="8986362086234534611">Lupakan</translation> <translation id="8986494364107987395">Otomatis kirim statistik pemakaian dan laporan kemacetan sistem ke Google</translation> <translation id="8987927404178983737">Bulan</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Netscape Certificate Base URL</translation> <translation id="8994845581478641365">Pembuat Cache Font DirectWrite</translation> <translation id="8995603266996330174">Dikelola menurut <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb index 6614088..e4394940 100644 --- a/chrome/app/resources/generated_resources_it.xtb +++ b/chrome/app/resources/generated_resources_it.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">Accesso</translation> <translation id="1864676585353837027">Cambia la modalità di condivisione di questi file</translation> <translation id="1864756863218646478">Impossibile trovare il file.</translation> +<translation id="1865769994591826607">Solo connessioni stesso sito</translation> <translation id="186612162884103683">L'estensione "<ph name="EXTENSION" />" può leggere e scrivere file di immagini, video e audio nelle posizioni selezionate.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> è pronto a completare l'installazione</translation> <translation id="1873879463550486830">Sandbox SUID</translation> @@ -1193,6 +1194,7 @@ <translation id="2743387203779672305">Copia negli appunti</translation> <translation id="2744221223678373668">Condivise</translation> <translation id="2745080116229976798">Subordinazione qualificata Microsoft</translation> +<translation id="2745576239403924641">Attiva l'esecuzione di app Android sul Chromebook.</translation> <translation id="2747990718031257077">Consente di attivare il nuovo design della barra degli strumenti di estensioni (in fase di sviluppo).</translation> <translation id="2749756011735116528">Accedi a <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Controllo ortografia e grammatica</translation> @@ -1406,6 +1408,7 @@ <translation id="3011284594919057757">Informazioni su Flash</translation> <translation id="3011362742078013760">Apri tutti i Preferiti nella finestra di navigazione in &incognito</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Solo connessioni stesso sito protette</translation> <translation id="3012890944909934180">Riavvia Chrome sul desktop</translation> <translation id="3012917896646559015">Contatta immediatamente il produttore dell'hardware per inviare il computer a un centro di riparazione.</translation> <translation id="3015992588037997514">Sullo schermo del Chromebox viene mostrato questo codice?</translation> @@ -1637,6 +1640,7 @@ <translation id="331752765902890099">Pulsante <ph name="PROFILE_NAME" />: errore di accesso</translation> <translation id="3319048459796106952">Nuova f&inestra di navigazione in incognito</translation> <translation id="331915893283195714">Consenti a tutti i siti di disattivare il puntatore del mouse</translation> +<translation id="3319364804843246307">App Android</translation> <translation id="3320859581025497771">il tuo operatore</translation> <translation id="3323235640813116393">Consente di attivare il salvataggio delle pagine in MHTML: un singolo file di testo contenente il codice HTML e tutte le risorse secondarie.</translation> <translation id="3323447499041942178">Casella di testo</translation> @@ -1741,6 +1745,7 @@ <translation id="347719495489420368">Fai clic con il pulsante destro del mouse per riprodurre <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">Continua a consentire l'accesso di <ph name="HOST" /> alla webcam e al microfono</translation> <translation id="3478315065074101056">XPS attiva opzioni avanzate per le stampanti classiche collegate a Cloud Print con Chrome. Dopo avere modificato questo flag è necessario ricollegare le stampanti.</translation> +<translation id="3479539252931486093">Non era previsto? <ph name="BEGIN_LINK" />Contattaci<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Non adesso</translation> <translation id="3480892288821151001">Aggancia la finestra a sinistra</translation> <translation id="3481915276125965083">I seguenti popup sono stati bloccati in questa pagina:</translation> @@ -2712,6 +2717,7 @@ <translation id="4941246025622441835">Utilizza questa richiesta dispositivo durante la registrazione del dispositivo per la gestione aziendale:</translation> <translation id="4942394808693235155">Controlla aggiornamenti e applica</translation> <translation id="494286511941020793">Guida configurazione proxy</translation> +<translation id="4945378551914476156">I tuoi Preferiti, la cronologia, le password e altre impostazioni verranno sincronizzati con il tuo account Google per consentirti di trovarli su qualsiasi dispositivo su cui utilizzi Chrome. Puoi modificare questa impostazione in <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Opzioni...</translation> <translation id="4952186391360931024">Non Material</translation> <translation id="4954544650880561668">Controllo dispositivo</translation> @@ -2846,7 +2852,6 @@ <ph name="LINE_BREAKS" /> La rimozione del dispositivo mentre è in uso potrebbe causare la perdita di dati. Attendi fino al termine dell'operazione, quindi espelli il dispositivo utilizzando l'app File.</translation> <translation id="5159488553889181171">Il download di <ph name="PLUGIN_NAME" /> è stato annullato.</translation> -<translation id="5159628598068481063">Preferenza di reindirizzamento da Windows Desktop Search</translation> <translation id="5160857336552977725">Accedi al tuo dispositivo <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Condivisione non riuscita. Controlla la connessione e riprova più tardi.</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> @@ -3214,7 +3219,6 @@ <translation id="567881659373499783">Versione <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Lettura dei dati su <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Applicazione di filtri mediante inserimento di testo in modalità Panoramica</translation> -<translation id="568428328938709143">Account rimosso</translation> <translation id="5684661240348539843">Identificatore asset</translation> <translation id="569068482611873351">Importa...</translation> <translation id="56907980372820799">Collega dati</translation> @@ -3454,6 +3458,7 @@ <translation id="604001903249547235">Backup nella cloud</translation> <translation id="6040143037577758943">Chiudi</translation> <translation id="604124094241169006">Automatica</translation> +<translation id="6042308850641462728">Più</translation> <translation id="604257181445267932">Smart Lock ti aiuta ad accedere rapidamente ad app e siti utilizzando le password che hai salvato con Google.</translation> <translation id="6049065490165456785">Foto dalla fotocamera interna</translation> <translation id="6051028581720248124">Se stampi presso una sede FedEx Office, accetti i relativi <ph name="START_LINK" />termini e condizioni d'uso<ph name="END_LINK" />.</translation> @@ -3485,7 +3490,6 @@ <translation id="6089481419520884864">Pagina Distill</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Annullamento aggiornamento...</translation> -<translation id="6095149522260432647">Consente di attivare una preferenza che permette il reindirizzamento delle ricerche su Windows Desktop Search al motore di ricerca predefinito.</translation> <translation id="6095984072944024315">–</translation> <translation id="6096047740730590436">Apri ingrandita</translation> <translation id="6096326118418049043">Nome X.500</translation> @@ -4264,7 +4268,7 @@ <translation id="73289266812733869">Deselezionato</translation> <translation id="7329154610228416156">Accesso non riuscito perché è stato configurato l'utilizzo di un URL non protetto (<ph name="BLOCKED_URL" />). Contatta l'amministratore.</translation> <translation id="7331786426925973633">Un browser web creato per garantire velocità, semplicità e sicurezza</translation> -<translation id="733186066867378544">Eccezioni di localizzazione geografica</translation> +<translation id="733186066867378544">Eccezioni di geolocalizzazione</translation> <translation id="7334190995941642545">La funzione Smart Lock non è al momento disponibile. Riprova più tardi.</translation> <translation id="7339763383339757376">PKCS #7, singolo certificato</translation> <translation id="7339785458027436441">Controllo ortografico durante la digitazione</translation> @@ -4658,6 +4662,7 @@ <translation id="7926906273904422255">Contrassegna origini non sicure come "non sicure" o "dubbie".</translation> <translation id="7928710562641958568">Espelli dispositivo</translation> <translation id="7938594894617528435">Attualmente offline</translation> +<translation id="7939374455203157513">Attiva servizi cloud</translation> <translation id="7939412583708276221">Mantieni comunque</translation> <translation id="7939997691108949385">Il gestore potrà configurare limitazioni e impostazioni per questo utente supervisionato all'indirizzo <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">Colemak USA</translation> @@ -5208,6 +5213,7 @@ <translation id="872537912056138402">Croato</translation> <translation id="8726206820263995930">Errore durante il recupero delle impostazioni criterio dal server. <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Visualizza le opzioni delle estensioni come elemento incorporato in chrome://extensions anziché aprire una nuova scheda.</translation> +<translation id="8727142376512517020">Non visualizzare più</translation> <translation id="8728672262656704056">Sei passato alla navigazione in incognito</translation> <translation id="8730621377337864115">Fine</translation> <translation id="8731332457891046104">Annulla la registrazione di <ph name="DEVICE_TYPE" /></translation> @@ -5370,7 +5376,6 @@ <translation id="8986362086234534611">Elimina</translation> <translation id="8986494364107987395">Invia automaticamente a Google statistiche sull'utilizzo e segnalazioni sugli arresti anomali</translation> <translation id="8987927404178983737">Mese</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">URL di base certificato Netscape</translation> <translation id="8994845581478641365">DirectWrite Font Cache Builder</translation> <translation id="8995603266996330174">Gestito da <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index ddbb6b2f..541491dd 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -602,6 +602,7 @@ <translation id="1864111464094315414">התחבר</translation> <translation id="1864676585353837027">שנה את אופן השיתוף של הקבצים האלו</translation> <translation id="1864756863218646478">הקובץ לא נמצא.</translation> +<translation id="1865769994591826607">חיבורים מאותו אתר בלבד</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" יכול לקרוא ולכתוב קובצי תמונות, וידאו ואודיו במיקומים המסומנים.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> מוכן להשלים את ההתקנה שלך</translation> <translation id="1873879463550486830">ארגז החול של SUID</translation> @@ -1186,6 +1187,7 @@ <translation id="2743387203779672305">העתק ללוח</translation> <translation id="2744221223678373668">משותף</translation> <translation id="2745080116229976798">שיעבוד מוגדר של Microsoft</translation> +<translation id="2745576239403924641">אפשר הרצה של אפליקציות Android ב-Chromebook.</translation> <translation id="2747990718031257077">מאפשר עיצוב סרגל של תוסף חדש (בפיתוח).</translation> <translation id="2749756011735116528">היכנס אל <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">בדוק דקדוק עם איות</translation> @@ -1399,6 +1401,7 @@ <translation id="3011284594919057757">מידע על Flash</translation> <translation id="3011362742078013760">פתח את כל הסימניות בחלון &גלישה בסתר</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">חיבורים מאובטחים מאותו אתר בלבד</translation> <translation id="3012890944909934180">הפעל מחדש את Chrome בשולחן העבודה</translation> <translation id="3012917896646559015">צור קשר עם יצרן החומרה באופן מיידי כדי לשלוח את המחשב לתיקון.</translation> <translation id="3015992588037997514">האם קוד זה מופיע במסך ה-Chromebox שלך?</translation> @@ -1631,6 +1634,7 @@ <translation id="331752765902890099">לחצן <ph name="PROFILE_NAME" />: כניסה שגויה</translation> <translation id="3319048459796106952">חלון 'גלישה בסתר' חדש</translation> <translation id="331915893283195714">אפשר לכל האתרים להשבית את סמן העכבר</translation> +<translation id="3319364804843246307">אפליקציות Android</translation> <translation id="3320859581025497771">הספק שלך</translation> <translation id="3323235640813116393">מפעיל שמירה של דפים כ-HTML: קובץ טקסט יחיד המכיל HTML ואת כל משאבי המשנה.</translation> <translation id="3323447499041942178">תיבת טקסט</translation> @@ -1735,6 +1739,7 @@ <translation id="347719495489420368">לחץ לחיצה ימנית כדי להפעיל את <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">המשך לאפשר ל-<ph name="HOST" /> לגשת למצלמה ולמיקרופון</translation> <translation id="3478315065074101056">XPS מפעיל אפשרויות מתקדמות עבור מדפסות רגילות המחוברות ל-Cloud Print באמצעות Chrome. יש לחבר מחדש מדפסות לאחר שינוי התראה זו.</translation> +<translation id="3479539252931486093">האם זה קרה באופן בלתי צפוי? <ph name="BEGIN_LINK" />ספר לנו על כך<ph name="END_LINK" /></translation> <translation id="3479552764303398839">לא עכשיו</translation> <translation id="3480892288821151001">עגן חלון לשמאל</translation> <translation id="3481915276125965083">ההודעות הקופצות הבאות נחסמו בדף זה:</translation> @@ -2709,6 +2714,8 @@ <translation id="4941246025622441835">השתמש במכשיר זה בעת הרשמת המכשיר לניהול ארגוני:</translation> <translation id="4942394808693235155">חפש ובצע עדכונים</translation> <translation id="494286511941020793">עזרה של תצורת שרת Proxy</translation> +<translation id="4945378551914476156">הסימניות, ההיסטוריה, הסיסמאות והגדרות נוספות יסונכרנו עם חשבון Google שלך, כך שניתן יהיה להשתמש בהם בכל מכשיר שבו פועל Chrome. +ניתן לשנות הגדרה זו ב<ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">אפשרויות...</translation> <translation id="4952186391360931024">לא בעיצוב חדשני תלת-ממדי</translation> <translation id="4954544650880561668">בקרת מכשיר</translation> @@ -2843,7 +2850,6 @@ <ph name="LINE_BREAKS" /> הסרת המכשיר בעודו בשימוש תגרום לאובדן נתונים. המתן עד לסיום הפעולה, ולאחר מכן נתק את המכשיר דרך היישום 'קבצים'.</translation> <translation id="5159488553889181171">ההורדה של <ph name="PLUGIN_NAME" /> בוטלה.</translation> -<translation id="5159628598068481063">העדפת ניתוב מחדש של חיפוש בשולחן העבודה של Windows</translation> <translation id="5160857336552977725">היכנס אל ה-<ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">השיתוף נכשל. בדוק את החיבור ונסה שוב מאוחר יותר.</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> @@ -3211,7 +3217,6 @@ <translation id="567881659373499783">גרסה <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">קריאת הנתונים שלך באתר <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">סינון טקסט במצב סקירה כללית</translation> -<translation id="568428328938709143">החשבון הוסר</translation> <translation id="5684661240348539843">מזהה נכסים</translation> <translation id="569068482611873351">יבא...</translation> <translation id="56907980372820799">קשר נתונים</translation> @@ -3451,6 +3456,7 @@ <translation id="604001903249547235">גיבוי בענן</translation> <translation id="6040143037577758943">סגור</translation> <translation id="604124094241169006">אוטומטי</translation> +<translation id="6042308850641462728">עוד</translation> <translation id="604257181445267932">התכונה Smart Lock עוזרת לך להיכנס במהירות לאפליקציות ולאתרים באמצעות סיסמאות ששמרת ב-Google.</translation> <translation id="6049065490165456785">תמונה מהמצלמה הפנימית</translation> <translation id="6051028581720248124">על ידי הדפסה ל-FedEx Office, אתה מקבל את <ph name="START_LINK" />תנאי השימוש<ph name="END_LINK" /> שלהם.</translation> @@ -3482,7 +3488,6 @@ <translation id="6089481419520884864">זקק דף</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">מבטל עדכון...</translation> -<translation id="6095149522260432647">מפעיל העדפה המאפשרת הפניה מחדש של חיפושים בשולחן העבודה של Windows למנוע החיפוש המוגדר כברירת מחדל.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">פתח בגודל מרבי</translation> <translation id="6096326118418049043">שם X.500</translation> @@ -4654,6 +4659,7 @@ <translation id="7926906273904422255">סמן מקורות לא מאובטחים כ'לא מאובטחים' או כ'מפוקפקים'.</translation> <translation id="7928710562641958568">הוצא את המכשיר</translation> <translation id="7938594894617528435">לא מקוונת כעת</translation> +<translation id="7939374455203157513">הפעלת שירותי ענן</translation> <translation id="7939412583708276221">שמור בכל מקרה</translation> <translation id="7939997691108949385">המנהל יוכל לקבוע הגבלות והגדרות עבור משתמש בפיקוח זה בכתובת <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">ארה"ב - Colemak</translation> @@ -5204,6 +5210,7 @@ <translation id="872537912056138402">קרואטית</translation> <translation id="8726206820263995930">אירעה שגיאה בעת הבאת הגדרות מדיניות מהשרת: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">הצג אפשרויות תוסף כרכיב מוטמע ב-chrome://extensions במקום לפתוח כרטיסייה חדשה.</translation> +<translation id="8727142376512517020">אל תציג הודעה זו שוב</translation> <translation id="8728672262656704056">עברת למצב גלישה בסתר</translation> <translation id="8730621377337864115">בוצע</translation> <translation id="8731332457891046104">ביטול הרישום של <ph name="DEVICE_TYPE" /></translation> @@ -5366,7 +5373,6 @@ <translation id="8986362086234534611">שכח</translation> <translation id="8986494364107987395">שלח ל-Google דוחות קריסה וסטטיסטיקת שימוש באופן אוטומטי</translation> <translation id="8987927404178983737">חודש</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">כתובת אתר בסיסית של אישור Netscape</translation> <translation id="8994845581478641365">בונה הקובץ השמור של גופני DirectWrite</translation> <translation id="8995603266996330174">מנוהל על ידי <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb index aa82ca6..ca43408 100644 --- a/chrome/app/resources/generated_resources_ja.xtb +++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -607,6 +607,7 @@ <translation id="1864111464094315414">ログイン</translation> <translation id="1864676585353837027">これらのファイルの共有方法を変更してください</translation> <translation id="1864756863218646478">ファイルが見つかりませんでした。</translation> +<translation id="1865769994591826607">同一サイトの接続のみ</translation> <translation id="186612162884103683">「<ph name="EXTENSION" />」はチェックした場所にある画像、動画、音声の各ファイルの読み込みと書き込みが可能です。</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> をインストールする準備ができました</translation> <translation id="1873879463550486830">SUID サンドボックス</translation> @@ -1196,6 +1197,7 @@ <translation id="2743387203779672305">クリップボードにコピー</translation> <translation id="2744221223678373668">共有</translation> <translation id="2745080116229976798">Microsoft 限定従属</translation> +<translation id="2745576239403924641">Android アプリを Chromebook で使えるようにする。</translation> <translation id="2747990718031257077">(開発中の)拡張機能ツールバーの新しいデザインを有効にします。</translation> <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> にログイン</translation> <translation id="2749881179542288782">スペルと一緒に文法をチェック</translation> @@ -1409,6 +1411,7 @@ <translation id="3011284594919057757">Flash について</translation> <translation id="3011362742078013760">すべてのブックマークをシークレット ウィンドウで開く(&I)</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">同一サイトの保護された接続のみ</translation> <translation id="3012890944909934180">デスクトップで Chrome を再起動する</translation> <translation id="3012917896646559015">すぐにハードウェアの製造元に連絡し、パソコンを修理センターに送るよう手配してください。</translation> <translation id="3015992588037997514">このコードが Chromebox の画面に表示されていますか?</translation> @@ -1642,6 +1645,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" /> ボタン: ログインエラー</translation> <translation id="3319048459796106952">シークレット ウィンドウを開く(&I)</translation> <translation id="331915893283195714">すべてのサイトに対してマウス カーソルの無効化を許可する</translation> +<translation id="3319364804843246307">Android アプリ</translation> <translation id="3320859581025497771">携帯通信会社</translation> <translation id="3323235640813116393">ページを MHTML 形式で保存できるようにします。MHTML は、HTML とすべてのサブリソースを含む単一のテキスト ファイルです。</translation> <translation id="3323447499041942178">テキスト ボックス</translation> @@ -1746,6 +1750,7 @@ <translation id="347719495489420368">右クリックして <ph name="PLUGIN_NAME" /> を再生します。</translation> <translation id="347785443197175480"><ph name="HOST" /> によるカメラとマイクへのアクセスを引き続き許可する</translation> <translation id="3478315065074101056">XPS を使用すると、Chrome でクラウド プリントに接続している従来のプリンタに対し、詳細オプションを有効にできます。このフラグの設定を変更した場合は、プリンタを接続し直す必要があります。</translation> +<translation id="3479539252931486093">想定外の動作である場合は、<ph name="BEGIN_LINK" />問題を報告<ph name="END_LINK" />してください。</translation> <translation id="3479552764303398839">後で</translation> <translation id="3480892288821151001">ウィンドウを左に固定</translation> <translation id="3481915276125965083">このページの次のポップアップがブロックされました:</translation> @@ -2720,6 +2725,7 @@ <translation id="4941246025622441835">エンタープライズ管理のためにデバイスを登録するときにこのデバイス利用申請を使用する:</translation> <translation id="4942394808693235155">アップデートを確認して適用</translation> <translation id="494286511941020793">プロキシ設定ヘルプ</translation> +<translation id="4945378551914476156">ブックマーク、履歴、パスワードなどの設定が Google アカウントに同期され、どの端末の Chrome でも利用できるようになります。この設定は次の場所で変更できます: <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">オプション...</translation> <translation id="4952186391360931024">マテリアルを使用しない</translation> <translation id="4954544650880561668">デバイス制御</translation> @@ -2854,7 +2860,6 @@ <ph name="LINE_BREAKS" /> 使用中のデバイスを取り外すと、データが失われる恐れがあります。操作が完了してから、ファイル アプリを使ってデバイスを取り外してください。</translation> <translation id="5159488553889181171"><ph name="PLUGIN_NAME" /> のダウンロードをキャンセルしました。</translation> -<translation id="5159628598068481063">Windows デスクトップ検索のリダイレクト設定</translation> <translation id="5160857336552977725"><ph name="DEVICE_TYPE" /> にログインしてください</translation> <translation id="5163869187418756376">共有できませんでした。接続を確認し、しばらくしてからもう一度お試しください。</translation> <translation id="516592729076796170">US Programmer Dvorak 配列</translation> @@ -3222,7 +3227,6 @@ <translation id="567881659373499783">バージョン <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522"><ph name="WEBSITE_1" /> でのユーザーデータの読み取り</translation> <translation id="5680928275846978395">概観モードでのテキストの絞り込み</translation> -<translation id="568428328938709143">アカウントは削除されました</translation> <translation id="5684661240348539843">アセット ID</translation> <translation id="569068482611873351">インポート...</translation> <translation id="56907980372820799">データをリンク</translation> @@ -3462,6 +3466,7 @@ <translation id="604001903249547235">クラウド バックアップ</translation> <translation id="6040143037577758943">閉じる</translation> <translation id="604124094241169006">自動設定</translation> +<translation id="6042308850641462728">詳細表示</translation> <translation id="604257181445267932">スマートロックを使用すると、Google に保存したパスワードを使ってアプリやサイトにすばやくログインできます。</translation> <translation id="6049065490165456785">内蔵カメラの写真</translation> <translation id="6051028581720248124">FedEx Office で印刷すると、<ph name="START_LINK" />利用規約<ph name="END_LINK" />に同意したことになります。</translation> @@ -3493,7 +3498,6 @@ <translation id="6089481419520884864">ページを抽出</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">更新をキャンセルしています...</translation> -<translation id="6095149522260432647">設定を有効にした場合、Windows デスクトップ検索でデフォルトの検索エンジンにリダイレクトできるようになります。</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">最大化して開く</translation> <translation id="6096326118418049043">X.500 名</translation> @@ -4677,6 +4681,7 @@ <translation id="7926906273904422255">保護されていない発行元に、「保護されていない発行元」または「保護されていない可能性のある発行元」のマークを付けます。</translation> <translation id="7928710562641958568">デバイスの取り出し</translation> <translation id="7938594894617528435">現在オフライン</translation> +<translation id="7939374455203157513">クラウド サービスを有効にする</translation> <translation id="7939412583708276221">続行する</translation> <translation id="7939997691108949385">管理者は、この監視対象ユーザーの制限と設定を <ph name="MANAGEMENT_URL" /> で指定できます。</translation> <translation id="7943385054491506837">US Colemak 配列</translation> @@ -5227,6 +5232,7 @@ <translation id="872537912056138402">クロアチア語</translation> <translation id="8726206820263995930">サーバーからポリシー設定を取得するときにエラーが発生しました: <ph name="CLIENT_ERROR" />。</translation> <translation id="8726888928275282477">拡張機能のオプションを、新しいタブを開いたときではなく chrome://extensions の埋め込み要素として表示します。</translation> +<translation id="8727142376512517020">今後このメッセージを表示しない</translation> <translation id="8728672262656704056">シークレット モードです</translation> <translation id="8730621377337864115">完了</translation> <translation id="8731332457891046104"><ph name="DEVICE_TYPE" /> の登録解除</translation> @@ -5389,7 +5395,6 @@ <translation id="8986362086234534611">切断</translation> <translation id="8986494364107987395">使用統計データや障害レポートを自動的に Google に送信する</translation> <translation id="8987927404178983737">月</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Netscape 証明書基本 URL</translation> <translation id="8994845581478641365">DirectWrite フォント キャッシュ ビルダー</translation> <translation id="8995603266996330174">管理ドメイン: <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index a76f5f7..d63317e1 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -607,6 +607,7 @@ <translation id="1864111464094315414">ಲಾಗಿನ್</translation> <translation id="1864676585353837027">ಈ ಫೈಲ್ಗಳು ಹಂಚಿಕೆಯಾಗಿರುವ ಬಗೆಯನ್ನು ಬದಲಾಯಿಸಿ</translation> <translation id="1864756863218646478">ಫೈಲ್ ಅನ್ನು ಕಂಡುಹಿಡಿಯಲಾಗಲಿಲ್ಲ.</translation> +<translation id="1865769994591826607">ಅದೇ-ಸೈಟ್ ಸಂಪರ್ಕಗಳು ಮಾತ್ರ</translation> <translation id="186612162884103683">ಗುರುತಿಸಿದ ಸ್ಥಳಗಳಲ್ಲಿ "<ph name="EXTENSION" />" ಚಿತ್ರಗಳು, ವಿಡಿಯೋ, ಮತ್ತು ಧ್ವನಿ ಫೈಲ್ಗಳನ್ನು ಓದಬಹುದು ಮತ್ತು ಬರೆಯಬಹುದು.</translation> <translation id="1867780286110144690">ನಿಮ್ಮ ಸ್ಥಾಪನೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು <ph name="PRODUCT_NAME" /> ಸಿದ್ದವಾಗಿದೆ</translation> <translation id="1873879463550486830">SUID Sandbox</translation> @@ -1196,6 +1197,7 @@ <translation id="2743387203779672305">ಕ್ಲಿಪ್ಬೋರ್ಡ್ಗೆ ನಕಲಿಸಿ</translation> <translation id="2744221223678373668">ಹಂಚಿಕೊಳ್ಳಲಾಗಿರುವುದು</translation> <translation id="2745080116229976798">Microsoft Qualified Subordination</translation> +<translation id="2745576239403924641">ನಿಮ್ಮ Chromebook ನಲ್ಲಿ ರನ್ ಮಾಡಲು Android Apps ಸಕ್ರಿಯಗೊಳಿಸಿ.</translation> <translation id="2747990718031257077">ಪರಿಕರಪಟ್ಟಿ ವಿನ್ಯಾಸವನ್ನು ಹೊಸ ವಿಸ್ತರಣೆ ಪರಿಕರಪಟ್ಟಿ ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ (ಅಭಿವೃದ್ಧಿಯಲ್ಲಿರುವ).</translation> <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> ಗೆ ಸೈನ್ ಇನ್ ಆಗಿ</translation> <translation id="2749881179542288782">ವ್ಯಾಕರಣವನ್ನು ಕಾಗುಣಿತದೊಂದಿಗೆ ಪರಿಶೀಲಿಸಿ</translation> @@ -1409,6 +1411,7 @@ <translation id="3011284594919057757">Flash ಬಗ್ಗೆ </translation> <translation id="3011362742078013760">&ಎಲ್ಲ ಬುಕ್ಮಾರ್ಕ್ಗಳನ್ನು ಅಜ್ಞಾತ ವಿಂಡೋದಲ್ಲಿ ತೆರೆಯಿರಿ</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">ಅದೇ-ಸೈಟ್ ಸಂಪರ್ಕಗಳನ್ನು ಮಾತ್ರ ಸುರಕ್ಷಿತವಾಗಿರಿಸಿ</translation> <translation id="3012890944909934180">ಡೆಸ್ಕ್ಟಾಪ್ನಲ್ಲಿ Chrome ಮರುಪ್ರಾರಂಭಿಸಿ</translation> <translation id="3012917896646559015">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ದುರಸ್ತಿ ಸೌಲಭ್ಯಕ್ಕೆ ಕಳುಹಿಸಲು ದಯವಿಟ್ಟು ನಿಮ್ಮ ಹಾರ್ಡ್ವೇರ್ ತಯಾರಕರನ್ನು ತಕ್ಷಣವೇ ಸಂಪರ್ಕಿಸಿ.</translation> <translation id="3015992588037997514">ಈ ಕೋಡ್ ನಿಮ್ಮ Chromebox ನ ಪರದೆಯಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆಯೇ?</translation> @@ -1640,6 +1643,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" /> ಬಟನ್: ಸೈನ್ ಇನ್ ದೋಷ</translation> <translation id="3319048459796106952">ಹೊಸ &ಅಜ್ಞಾತ ವಿಂಡೋ</translation> <translation id="331915893283195714">ಮೌಸ್ ಕರ್ಸರ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಎಲ್ಲ ಸೈಟ್ಗಳನ್ನು ಅನುಮತಿಸಿ</translation> +<translation id="3319364804843246307">Android Apps</translation> <translation id="3320859581025497771">ನಿಮ್ಮ ಕ್ಯಾರಿಯರ್</translation> <translation id="3323235640813116393">MHTML ನಂತೆ ಉಳಿಸಿರುವ ಪುಟಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ: HTML ಮತ್ತು ಎಲ್ಲಾ ಉಪ-ಸಂಪನ್ಮೂಲಗಳನ್ನು ಹೊಂದಿರುವ ಏಕೈಕ ಪಠ್ಯದ ಫೈಲ್.</translation> <translation id="3323447499041942178">ಪಠ್ಯ ಪೆಟ್ಟಿಗೆ</translation> @@ -1744,6 +1748,7 @@ <translation id="347719495489420368"><ph name="PLUGIN_NAME" /> ಪ್ಲೇ ಮಾಡಲು ರೈಟ್ ಕ್ಲಿಕ್ ಮಾಡಿ.</translation> <translation id="347785443197175480">ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಹಾಗೂ ಮೈಕ್ರೋಫೋನ್ ಅನ್ನು ಪ್ರವೇಶಿಸಲು <ph name="HOST" /> ಗೆ ಅನುಮತಿಸುವುದನ್ನು ಮುಂದುವರೆಸಿ</translation> <translation id="3478315065074101056">Chrome ಜೊತೆಗೆ ಮೇಘ ಮುದ್ರಣಕ್ಕೆ ಸಂಪರ್ಕಗೊಂಡಿರುವ ಕ್ಲಾಸಿಕ್ ಮುದ್ರಕಗಳಿಗಾಗಿ ಸುಧಾರಿತ ಆಯ್ಕೆಗಳನ್ನು XPS ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ. ಈ ಫ್ಲ್ಯಾಗ್ ಬದಲಾಯಿಸಿದ ನಂತರ ಮುದ್ರಕಗಳನ್ನು ಮರು-ಸಂಪರ್ಕಗೊಳಿಸಬೇಕು.</translation> +<translation id="3479539252931486093">ಇದು ಅನಿರೀಕ್ಷಿತವೇ? <ph name="BEGIN_LINK" />ನಮಗೆ ತಿಳಿಸಿ<ph name="END_LINK" /></translation> <translation id="3479552764303398839">ಈಗ ಬೇಡ</translation> <translation id="3480892288821151001">ವಿಂಡೋದ ಎಡಕ್ಕೆ ಡಾಕ್ ಮಾಡಿ</translation> <translation id="3481915276125965083">ಕೆಳಗಿನ ಪಾಪ್-ಅಪ್ಗಳನ್ನು ಈ ಪುಟದಲ್ಲಿ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ:</translation> @@ -2719,6 +2724,7 @@ <translation id="4941246025622441835">ಎಂಟರ್ಪ್ರೈಸ್ ನಿರ್ವಹಣೆಗಾಗಿ ಸಾಧನವನ್ನು ದಾಖಲಿಸುತ್ತಿರುವಾಗ ಈ ಸಾಧನದ ನಿಯೋಜನೆಯನ್ನು ಬಳಸಿ:</translation> <translation id="4942394808693235155">ಪರಿಶೀಲಿಸಿ ಮತ್ತು ನವೀಕರಣಗಳನ್ನು ಅನ್ವಯಿಸಿ</translation> <translation id="494286511941020793">ಪ್ರಾಕ್ಸಿ ಕಾನ್ಫಿಗರೇಶನ್ ಸಹಾಯ</translation> +<translation id="4945378551914476156">ನಿಮ್ಮ ಬುಕ್ಮಾರ್ಕ್ಗಳು, ಇತಿಹಾಸ, ಪಾಸ್ವರ್ಡ್ಗಳು ಮತ್ತು ಇತರ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ನಿಮ್ಮ Google ಖಾತೆಗೆ ಸಿಂಕ್ ಮಾಡಲಾಗುತ್ತದೆ ಈ ಮೂಲಕ ನೀವು Chrome ಬಳಸುವಾಗ ನೀವು ಅವುಗಳನ್ನು ಬಳಸಬಹುದಾಗಿರುತ್ತದೆ. ನೀವು ಇದನ್ನು <ph name="BEGIN_LINK" /> ನಲ್ಲಿ ಬದಲಾಯಿಸಬಹುದು.</translation> <translation id="4950138595962845479">ಆಯ್ಕೆಗಳು...</translation> <translation id="4952186391360931024">ವಸ್ತು ಅಲ್ಲದ</translation> <translation id="4954544650880561668">ಸಾಧನದ ನಿಯಂತ್ರಣ</translation> @@ -2855,7 +2861,6 @@ <ph name="LINE_BREAKS" /> ಬಳಕೆಯಲ್ಲಿರುವ ಸಂದರ್ಭದಲ್ಲಿಯೇ ನಿಮ್ಮ ಸಾಧನವನ್ನು ತೆಗೆಯುವುದರಿಂದ ಡೇಟಾ ನಾಶವಾಗಲು ಕಾರಣವಾಗಬಹುದು. ದಯವಿಟ್ಟು ಕಾರ್ಯಾಚರಣೆ ಮುಗಿಯುವವರೆಗೂ ನಿರೀಕ್ಷಿಸಿ, ನಂತರ ಫೈಲ್ಗಳ ಅಪ್ಲಿಕೇಶನ್ ಬಳಸಿಕೊಂಡು ಸಾಧನವನ್ನು ಹೊರಹಾಕಿ.</translation> <translation id="5159488553889181171"><ph name="PLUGIN_NAME" /> ಡೌನ್ಲೋಡ್ ರದ್ದು ಮಾಡಲಾಗಿದೆ.</translation> -<translation id="5159628598068481063">Windows ಡೆಸ್ಕ್ಟಾಪ್ ಹುಡುಕಾಟ ಮರುನಿರ್ದೇಶನ ಪ್ರಾಶಸ್ತ್ಯ</translation> <translation id="5160857336552977725">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಸಾಧನದಲ್ಲಿ ಸೈನ್ ಇನ್ ಮಾಡಿ</translation> <translation id="5163869187418756376">ಹಂಚಿಕೆ ವಿಫಲಗೊಂಡಿದೆ. ನಿಮ್ಮ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ ಹಾಗೂ ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="516592729076796170">US ಪ್ರೊಗ್ರಾಮರ್ ಡಿವೊರಾಕ್</translation> @@ -3224,7 +3229,6 @@ <translation id="567881659373499783">ಆವೃತ್ತಿ <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">ನಿಮ್ಮ ಡೇಟಾವನ್ನು <ph name="WEBSITE_1" /> ನಲ್ಲಿ ಓದಿ</translation> <translation id="5680928275846978395">ಸಮಗ್ರ ನೋಟ ಮೋಡ್ನಲ್ಲಿ ಪಠ್ಯ ಫಿಲ್ಟರ್ ಮಾಡುವಿಕೆ</translation> -<translation id="568428328938709143">ಖಾತೆ ತೆಗೆದುಹಾಕಲಾಗಿದೆ</translation> <translation id="5684661240348539843">ಸ್ವತ್ತು ಗುರುತಿಸುವಿಕೆ</translation> <translation id="569068482611873351">ಆಮದು...</translation> <translation id="56907980372820799">ಲಿಂಕ್ ಡೇಟಾ</translation> @@ -3464,6 +3468,7 @@ <translation id="604001903249547235">ಮೇಘ ಬ್ಯಾಕಪ್</translation> <translation id="6040143037577758943">ಮುಚ್ಚು</translation> <translation id="604124094241169006">ಸ್ವಯಂಚಾಲಿತ</translation> +<translation id="6042308850641462728">ಇನ್ನಷ್ಟು</translation> <translation id="604257181445267932">Google ಮೂಲಕ ನೀವು ಉಳಿಸಲಾದ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ಸೈಟ್ಗಳಿಗೆ ತ್ವರಿತವಾಗಿ ಸೈನ್ ಇನ್ ಮಾಡಲು ನಿಮಗೆ Smart Lock ಸಹಾಯ ಮಾಡುತ್ತದೆ.</translation> <translation id="6049065490165456785">ಆಂತರಿಕ ಕ್ಯಾಮರಾದಿಂದ ಫೋಟೋ</translation> <translation id="6051028581720248124">FedEx Office ಗೆ ಮುದ್ರಿಸುವ ಮೂಲಕ, ನೀವು ಅವರ <ph name="START_LINK" />ಬಳಕೆಯ ನಿಯಮಗಳನ್ನು<ph name="END_LINK" /> ಸಮ್ಮತಿಸುತ್ತೀರಿ.</translation> @@ -3495,7 +3500,6 @@ <translation id="6089481419520884864">ಪುಟವನ್ನು ಶೋಧಿಸು</translation> <translation id="6092270396854197260">ಎಮ್ಎಸ್ಪಿವೈ</translation> <translation id="6093888419484831006">ನವೀಕರಣವನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗುತ್ತಿದೆ...</translation> -<translation id="6095149522260432647">Windows ಡೆಸ್ಕ್ಟಾಪ್ ಹುಡುಕಾಟಗಳ ಮರುನಿರ್ದೇಶನವನ್ನು ಡೀಫಾಲ್ಟ್ ಹುಡುಕಾಟ ಎಂಜಿನ್ಗೆ ಅನುಮತಿಸುವ ಪ್ರಾಶಸ್ತ್ಯವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">ಗರಿಷ್ಠಗೊಳಿಸುವಿಕೆಯಲ್ಲಿ ತೆರೆಯಿರಿ</translation> <translation id="6096326118418049043">X.500 ಹೆಸರು</translation> @@ -4677,6 +4681,7 @@ <translation id="7926906273904422255">ಅಸುರಕ್ಷಿತ ಮೂಲಗಳನ್ನು ಅಸುರಕ್ಷಿತ ಅಥವಾ "ಸಂಶಯಾಸ್ಪದ" ಎಂದು ಗುರುತಿಸಿ.</translation> <translation id="7928710562641958568">ಸಾಧನ ತೆಗೆದುಹಾಕು</translation> <translation id="7938594894617528435">ಪ್ರಸ್ತುತ ಆಫ್ಲೈನ್</translation> +<translation id="7939374455203157513">ಮೇಘ ಸೇವೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation> <translation id="7939412583708276221">ಹೇಗಾದರೂ ಇರಿಸಿ</translation> <translation id="7939997691108949385"><ph name="MANAGEMENT_URL" /> ನಲ್ಲಿ ನಿರ್ವಾಹಕರಿಗೆ ಈ ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರಿಗಾಗಿ ನಿರ್ಬಂಧಗಳು ಮತ್ತು ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ.</translation> <translation id="7943385054491506837">US ಕೋಲ್ಮ್ಯಾಕ್</translation> @@ -5224,6 +5229,7 @@ <translation id="872537912056138402">ಕ್ರೋಯೇಶಿಯನ್</translation> <translation id="8726206820263995930">ಸರ್ವರ್ನಿಂದ ನೀತಿ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಪಡೆಯುತ್ತಿರುವಾಗ ದೋಷ: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">ಹೊಸ ಟ್ಯಾಬ್ ತೆರೆಯುವ ಬದಲಾಗಿ chrome://extensions ನಲ್ಲಿ ವಿಸ್ತರಣೆ ಆಯ್ಕೆಗಳನ್ನು ಎಂಬೆಡ್ ಮಾಡಲಾದ ಅಂಶದಂತೆ ಪ್ರದರ್ಶಿಸಿ.</translation> +<translation id="8727142376512517020">ಇದನ್ನು ಮತ್ತೆ ತೋರಿಸಬೇಡ</translation> <translation id="8728672262656704056">ನೀವು ಅಜ್ಞಾತ ವಿಂಡೋಗೆ ಹೋಗಿರುವಿರಿ</translation> <translation id="8730621377337864115">ಮುಗಿದಿದೆ</translation> <translation id="8731332457891046104"><ph name="DEVICE_TYPE" /> ನೋಂದಣಿ ರದ್ದುಮಾಡಿ</translation> @@ -5386,7 +5392,6 @@ <translation id="8986362086234534611">ಮರೆತುಹೋಗು</translation> <translation id="8986494364107987395">ಬಳಕೆಯ ಅಂಕಿಅಂಶಗಳನ್ನು ಮತ್ತು Google ಗೆ ಕ್ರಾಶ್ ವರದಿಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕಳುಹಿಸು</translation> <translation id="8987927404178983737">ತಿಂಗಳು</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Netscape ಪ್ರಮಾಣಪತ್ರ ಆಧಾರ URL</translation> <translation id="8994845581478641365">ನೇರಬರವಣಿಗೆ ಫಾಂಟ್ ಸಂಗ್ರಹ ಬಿಲ್ಡರ್</translation> <translation id="8995603266996330174"><ph name="DOMAIN" /> ನಿಂದ ನಿರ್ವಹಿಸಲಾಗಿದೆ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb index 918f612..9dda0177 100644 --- a/chrome/app/resources/generated_resources_ko.xtb +++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -607,6 +607,7 @@ <translation id="1864111464094315414">로그인</translation> <translation id="1864676585353837027">파일 공유 방법을 변경하세요.</translation> <translation id="1864756863218646478">파일을 찾지 못했습니다.</translation> +<translation id="1865769994591826607">동일한 사이트에서 연결하는 경우에만</translation> <translation id="186612162884103683">'<ph name="EXTENSION" />'은(는) 선택된 위치에서 이미지, 동영상 및 사운드 파일을 읽고 쓸 수 있습니다.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" />에서 설치 완료 준비가 되었습니다.</translation> <translation id="1873879463550486830">SUID 샌드박스</translation> @@ -1197,6 +1198,7 @@ <translation id="2743387203779672305">클립보드로 복사</translation> <translation id="2744221223678373668">공유</translation> <translation id="2745080116229976798">Microsoft Qualified Subordination</translation> +<translation id="2745576239403924641">Android 앱이 Chromebook에서 실행되도록 합니다.</translation> <translation id="2747990718031257077">(개발 중인) 새 확장 프로그램 툴바 디자인을 사용 설정합니다.</translation> <translation id="2749756011735116528"><ph name="PRODUCT_NAME" />에 로그인</translation> <translation id="2749881179542288782">영문 철자 및 문법 검사</translation> @@ -1410,6 +1412,7 @@ <translation id="3011284594919057757">플래시 정보</translation> <translation id="3011362742078013760">모든 북마크를 시크릿 창에서 열기(&I)</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">동일한 사이트에서 보안 연결하는 경우에만</translation> <translation id="3012890944909934180">데스크톱에서 Chrome 다시 실행</translation> <translation id="3012917896646559015">하드웨어 제조업체에 즉시 문의하여 수리 센터로 컴퓨터를 보내시기 바랍니다.</translation> <translation id="3015992588037997514">Chromebox 화면에 이 코드가 표시됩니까?</translation> @@ -1643,6 +1646,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" /> 버튼: 로그인 오류</translation> <translation id="3319048459796106952">새 시크릿 창(&I)</translation> <translation id="331915893283195714">모든 사이트에서 마우스 커서를 사용 중지하도록 허용</translation> +<translation id="3319364804843246307">Android 앱</translation> <translation id="3320859581025497771">네트워크 사업자</translation> <translation id="3323235640813116393">페이지를 MHTML로 저장하도록 설정: HTML 및 모든 하위 리소스를 포함하는 단일 텍스트 파일</translation> <translation id="3323447499041942178">입력란</translation> @@ -1747,6 +1751,7 @@ <translation id="347719495489420368"><ph name="PLUGIN_NAME" />을(를) 실행하려면 마우스 오른쪽 버튼을 클릭합니다.</translation> <translation id="347785443197175480"><ph name="HOST" />에서 카메라와 마이크에 액세스하도록 계속 허용</translation> <translation id="3478315065074101056">XPS에서 Chrome을 이용하여 클라우드 프린트에 연결된 일반 프린터용 고급 옵션을 사용하도록 설정합니다. 이 플래그를 변경한 후 프린터를 다시 연결해야 합니다.</translation> +<translation id="3479539252931486093">예기치 않은 문제가 발생했나요? <ph name="BEGIN_LINK" />Google에 알리기<ph name="END_LINK" /></translation> <translation id="3479552764303398839">나중에</translation> <translation id="3480892288821151001">창을 왼쪽에 고정</translation> <translation id="3481915276125965083">이 페이지에서 다음 팝업이 차단되었습니다.</translation> @@ -2720,6 +2725,7 @@ <translation id="4941246025622441835">다음과 같이 기기를 엔터프라이즈 관리용으로 등록할 때 이 기기 요청을 사용합니다.</translation> <translation id="4942394808693235155">업데이트 확인 및 적용</translation> <translation id="494286511941020793">프록시 설정 도움말</translation> +<translation id="4945378551914476156">북마크, 방문 기록, 비밀번호, 기타 설정이 Google 계정에 동기화되므로 Chrome만 있으면 어디에서나 사용할 수 있습니다. 이 설정은 <ph name="BEGIN_LINK" />에서 변경할 수 있습니다.</translation> <translation id="4950138595962845479">옵션...</translation> <translation id="4952186391360931024">머티리얼 이외</translation> <translation id="4954544650880561668">기기 제어</translation> @@ -2854,7 +2860,6 @@ <ph name="LINE_BREAKS" /> 사용 중인 기기를 분리하면 데이터가 삭제될 수 있습니다. 작업이 끝날 때까지 기다린 다음 파일 앱을 사용하여 기기를 꺼내세요.</translation> <translation id="5159488553889181171"><ph name="PLUGIN_NAME" /> 다운로드가 취소되었습니다.</translation> -<translation id="5159628598068481063">Windows 데스크톱 검색 리디렉션 환경설정</translation> <translation id="5160857336552977725"><ph name="DEVICE_TYPE" />에 로그인</translation> <translation id="5163869187418756376">공유하지 못했습니다. 인터넷 연결을 확인하고 나중에 다시 시도해 주세요.</translation> <translation id="516592729076796170">미국 프로그래머 드보락</translation> @@ -3222,7 +3227,6 @@ <translation id="567881659373499783">버전 <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522"><ph name="WEBSITE_1" />에서 데이터 읽기</translation> <translation id="5680928275846978395">최근 사용 모드에서 텍스트 필터링</translation> -<translation id="568428328938709143">계정이 삭제되었습니다.</translation> <translation id="5684661240348539843">애셋 식별자</translation> <translation id="569068482611873351">가져오기...</translation> <translation id="56907980372820799">데이터 연결</translation> @@ -3464,6 +3468,7 @@ <translation id="604001903249547235">클라우드 백업</translation> <translation id="6040143037577758943">닫기</translation> <translation id="604124094241169006">자동</translation> +<translation id="6042308850641462728">더보기</translation> <translation id="604257181445267932">Smart Lock을 사용하면 Google에 저장한 비밀번호로 앱과 사이트에 빠르게 로그인할 수 있습니다.</translation> <translation id="6049065490165456785">내부 카메라의 사진</translation> <translation id="6051028581720248124">FedEx Office로 인쇄하면 해당 회사의 <ph name="START_LINK" />이용약관<ph name="END_LINK" />에 동의하게 됩니다.</translation> @@ -3495,7 +3500,6 @@ <translation id="6089481419520884864">페이지 추출</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">업데이트를 취소하는 중...</translation> -<translation id="6095149522260432647">Windows 데스크톱 검색을 기본 검색 엔진으로 리디렉션하도록 허용하는 환경설정을 사용합니다.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">최대화 상태로 열기</translation> <translation id="6096326118418049043">X.500 이름</translation> @@ -4678,6 +4682,7 @@ <translation id="7926906273904422255">보안이 약한 출처를 비보안 또는 '의심스러운'으로 표시합니다.</translation> <translation id="7928710562641958568">기기 꺼내기</translation> <translation id="7938594894617528435">현재 오프라인 상태</translation> +<translation id="7939374455203157513">클라우드 서비스 사용 설정</translation> <translation id="7939412583708276221">계속 다운로드</translation> <translation id="7939997691108949385">관리자는 <ph name="MANAGEMENT_URL" /> 페이지에서 이 관리 대상 사용자에 대한 제한사항 및 설정을 지정할 수 있습니다.</translation> <translation id="7943385054491506837">영어(미국) 콜마크</translation> @@ -5230,6 +5235,7 @@ <translation id="872537912056138402">크로아티아어</translation> <translation id="8726206820263995930">서버에서 정책 설정을 가져오는 중에 오류 발생: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">확장 프로그램 옵션은 새 탭이 열리는 대신 chrome://extensions에 내장형 요소로 표시됩니다.</translation> +<translation id="8727142376512517020">이 메시지를 다시 표시하지 않음</translation> <translation id="8728672262656704056">시크릿 모드로 전환됨</translation> <translation id="8730621377337864115">완료</translation> <translation id="8731332457891046104"><ph name="DEVICE_TYPE" /> 등록 취소</translation> @@ -5392,7 +5398,6 @@ <translation id="8986362086234534611">저장 안함</translation> <translation id="8986494364107987395">사용 통계 및 오류 보고서를 Google에 자동으로 보내기</translation> <translation id="8987927404178983737">월</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Netscape Certificate Base URL</translation> <translation id="8994845581478641365">DirectWrite 폰트 캐시 빌더</translation> <translation id="8995603266996330174">관리자: <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb index 1fa2965..a4a8a41 100644 --- a/chrome/app/resources/generated_resources_lt.xtb +++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">Prisijungimas</translation> <translation id="1864676585353837027">Keiskite, kaip bendrinami šie failai</translation> <translation id="1864756863218646478">Nepavyko rasti failo.</translation> +<translation id="1865769994591826607">Tik ryšiai toje pačioje svetainėje</translation> <translation id="186612162884103683">„<ph name="EXTENSION" />“ patikrintose vietose gali nuskaityti ir įrašyti vaizdus, vaizdo įrašus ir garso failus.</translation> <translation id="1867780286110144690">„<ph name="PRODUCT_NAME" />“ pasirengusi baigti diegimą</translation> <translation id="1873879463550486830">SUID Sandbox</translation> @@ -1196,6 +1197,7 @@ <translation id="2743387203779672305">Kopijuoti į iškarpinę</translation> <translation id="2744221223678373668">Bendrinama</translation> <translation id="2745080116229976798">„Microsoft“ tinkamas pavaldumas</translation> +<translation id="2745576239403924641">Įgalinti, kad „Android“ programos būtų paleidžiamos „Chromebook“.</translation> <translation id="2747990718031257077">Įgalinamas (vystoma) naujas plėtinių įrankių juostos dizainas.</translation> <translation id="2749756011735116528">Prisijungti prie „<ph name="PRODUCT_NAME" />“</translation> <translation id="2749881179542288782">Tikrinti gramatiką ir rašybą</translation> @@ -1409,6 +1411,7 @@ <translation id="3011284594919057757">Apie „Flash“</translation> <translation id="3011362742078013760">Atidaryti visas žymes &inkognito lange</translation> <translation id="3012631534724231212">(„iframe“)</translation> +<translation id="3012804260437125868">Tik saugūs ryšiai toje pačioje svetainėje</translation> <translation id="3012890944909934180">Iš naujo paleisti „Chrome“ darbalaukyje</translation> <translation id="3012917896646559015">Nedelsdami susisiekite su aparatinės įrangos gamintoju, kad siųstumėte kompiuterį remonto paslaugų įmonei.</translation> <translation id="3015992588037997514">Ar šis kodas rodomas „Chromebox“ ekrane?</translation> @@ -1641,6 +1644,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" /> mygtukas: prisijungimo klaida</translation> <translation id="3319048459796106952">Naujas &nežinomas langas</translation> <translation id="331915893283195714">Leisti visose svetainėse neleisti pelės žymeklio</translation> +<translation id="3319364804843246307">„Android“ programos</translation> <translation id="3320859581025497771">jūsų operatorius</translation> <translation id="3323235640813116393">Leidžia saugoti puslapius kaip HTML: vieną teksto failą su HTML ir visais papildomais ištekliais.</translation> <translation id="3323447499041942178">Teksto laukelis</translation> @@ -1745,6 +1749,7 @@ <translation id="347719495489420368">Spustelėkite dešiniuoju pelės klavišu, kad paleistumėte „<ph name="PLUGIN_NAME" />“.</translation> <translation id="347785443197175480">Toliau leisti <ph name="HOST" /> pasiekti fotoaparatą ir mikrofoną</translation> <translation id="3478315065074101056">XPS įgalina išplėstines parinktis klasikiniuose spausdintuvuose, prijungtuose prie „Chrome“ spausdinimo iš debesies paslaugos. Pakeitus šią žymą būtina iš naujo prijungti spausdintuvus.</translation> +<translation id="3479539252931486093">Ar tai buvo netikėta? <ph name="BEGIN_LINK" />Praneškime mums apie tai<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Ne dabar</translation> <translation id="3480892288821151001">Pritvirtinti langą kairėje</translation> <translation id="3481915276125965083">Šiame puslapyje šie iššokantieji langai buvo užblokuoti:</translation> @@ -2718,6 +2723,7 @@ <translation id="4941246025622441835">Naudoti šio įrenginio užklausas registruojant įrenginį įmonei valdyti:</translation> <translation id="4942394808693235155">Tikrinti, ar yra naujinių, ir taikyti juos</translation> <translation id="494286511941020793">Tarpinio serverio konfigūracijos pagalba</translation> +<translation id="4945378551914476156">Žymės, istorija slaptažodžiai ir kiti nustatymai bus sinchronizuojami „Google“ paskyroje, kad galėtumėte juos naudoti naršyklėje „Chrome“. Šį nustatymą galite pakeisti <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Parinktys...</translation> <translation id="4952186391360931024">Ne trimačiai objektai</translation> <translation id="4954544650880561668">Įrenginio valdymas</translation> @@ -2852,7 +2858,6 @@ <ph name="LINE_BREAKS" /> Pašalinę dar naudojamą įrenginį galite prarasti duomenų. Palaukite, kol pasibaigs operacija, ir pašalinkite įrenginį naudodami programą „Failai“.</translation> <translation id="5159488553889181171">„<ph name="PLUGIN_NAME" />“ atsisiuntimas atšauktas.</translation> -<translation id="5159628598068481063">„Windows Desktop Search“ paieškų peradresavimo nuostata</translation> <translation id="5160857336552977725">Prisijunkite prie „<ph name="DEVICE_TYPE" />“</translation> <translation id="5163869187418756376">Nepavyko bendrinti. Patikrinkite ryšį ir vėliau bandykite dar kartą.</translation> <translation id="516592729076796170">Programuotojų JAV Dvorako</translation> @@ -3221,7 +3226,6 @@ <translation id="567881659373499783"><ph name="PRODUCT_VERSION" /> versija</translation> <translation id="5678955352098267522">Skaityti duomenis svetainėje <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Teksto filtravimas apžvalgos režimu</translation> -<translation id="568428328938709143">Paskyra pašalinta</translation> <translation id="5684661240348539843">Ištekliaus identifikatorius</translation> <translation id="569068482611873351">Importuoti...</translation> <translation id="56907980372820799">Susieti duomenis</translation> @@ -3463,6 +3467,7 @@ <translation id="604001903249547235">Atsarginis kopijavimas debesyje</translation> <translation id="6040143037577758943">Uždaryti</translation> <translation id="604124094241169006">Automatinis</translation> +<translation id="6042308850641462728">Daugiau</translation> <translation id="604257181445267932">„Smart Lock“ padeda greitai prisijungti prie programų ir svetainių naudojant slaptažodžius, kuriuos išsaugojote sistemoje „Google“.</translation> <translation id="6049065490165456785">Vidiniu fotoaparatu daryta nuotrauka</translation> <translation id="6051028581720248124">Spausdindami „FedEx Office“, sutinkate su jų <ph name="START_LINK" />naudojimo sąlygomis<ph name="END_LINK" />.</translation> @@ -3494,7 +3499,6 @@ <translation id="6089481419520884864">„Distill“ puslapis</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Naujinys atšaukiamas...</translation> -<translation id="6095149522260432647">Įgalinama nuostata, leidžianti peradresuoti „Windows Desktop Search“ paieškas į numatytąjį paieškos variklį.</translation> <translation id="6095984072944024315">–</translation> <translation id="6096047740730590436">Atidaryti padidintą</translation> <translation id="6096326118418049043">X.500 vardas</translation> @@ -4679,6 +4683,7 @@ <translation id="7926906273904422255">Pažymėkite nesaugius šaltinius kaip nesaugius ar „įtartinus“.</translation> <translation id="7928710562641958568">Išstumti įrenginį</translation> <translation id="7938594894617528435">Šiuo metu neprijungta</translation> +<translation id="7939374455203157513">Įgalinti debesies paslaugas</translation> <translation id="7939412583708276221">Vis tiek saugoti</translation> <translation id="7939997691108949385">Valdytojas galės konfigūruoti šiam prižiūrimam naudotojui taikomus apribojimus ir nustatymus adresu <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">JAV „Colemak“</translation> @@ -5231,6 +5236,7 @@ <translation id="872537912056138402">Kroatų</translation> <translation id="8726206820263995930">Politikos nustatymų gavimo iš serverio klaida: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Plėtinių parinktys bus rodomos kaip įterptasis elementas dalyje „chrome://extensions“, o ne naujo skirtuko lape.</translation> +<translation id="8727142376512517020">Daugiau nerodyti</translation> <translation id="8728672262656704056">Veikia inkognito režimas</translation> <translation id="8730621377337864115">Atlikta</translation> <translation id="8731332457891046104">Išregistruoti „<ph name="DEVICE_TYPE" />“</translation> @@ -5393,7 +5399,6 @@ <translation id="8986362086234534611">Pamiršti</translation> <translation id="8986494364107987395">Automatiškai siųsti naudojimo statistiką ir strigčių ataskaitas „Google“</translation> <translation id="8987927404178983737">Mėnuo</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">„Netscape“ sertifikatų bazės URL</translation> <translation id="8994845581478641365">„DirectWrite“ šriftų talpyklos daryklė</translation> <translation id="8995603266996330174">Valdoma „<ph name="DOMAIN" />“</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb index 5b6c766..feb3c34 100644 --- a/chrome/app/resources/generated_resources_lv.xtb +++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">Pieteikties</translation> <translation id="1864676585353837027">Mainīt, kā tiek kopīgoti šie faili</translation> <translation id="1864756863218646478">Failu nevarēja atrast.</translation> +<translation id="1865769994591826607">Tikai vienas vietnes savienojumi</translation> <translation id="186612162884103683">“<ph name="EXTENSION" />” var lasīt un rakstīt attēlus, videoklipus un skaņu failus atzīmētajās vietās.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> var pabeigt instalēšanu</translation> <translation id="1873879463550486830">SUID smilškaste</translation> @@ -1196,6 +1197,7 @@ <translation id="2743387203779672305">Kopēt starpliktuvē</translation> <translation id="2744221223678373668">Koplietojamie</translation> <translation id="2745080116229976798">Microsoft pilnīga pakārtotība</translation> +<translation id="2745576239403924641">Iespējot Android lietotņu darbību savā Chromebook datorā.</translation> <translation id="2747990718031257077">Iespējo (izstrādes stadijā) jaunā paplašinājuma rīkjoslas dizainu.</translation> <translation id="2749756011735116528">Pierakstīties produktā <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Pārbaudīt gramatiku un pareizrakstību</translation> @@ -1409,6 +1411,7 @@ <translation id="3011284594919057757">Par Flash</translation> <translation id="3011362742078013760">Atvērt visas grāmatzīmes &inkognito režīma logā</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Tikai droši vienas vietnes savienojumi</translation> <translation id="3012890944909934180">Restartēt Chrome darbvirsmā</translation> <translation id="3012917896646559015">Lūdzu, nekavējoties sazinieties ar savas aparatūras ražotāju, lai nosūtītu datoru uz remontu.</translation> <translation id="3015992588037997514">Vai šis kods tiek rādīts jūsu Chromebox datora ekrānā?</translation> @@ -1643,6 +1646,7 @@ <translation id="331752765902890099">Poga <ph name="PROFILE_NAME" />: pierakstīšanās kļūda</translation> <translation id="3319048459796106952">Jauns &inkognito logs</translation> <translation id="331915893283195714">Ļaut visām vietnēm atspējot peles kursoru</translation> +<translation id="3319364804843246307">Android lietotnes</translation> <translation id="3320859581025497771">jūsu informācijas nesējs</translation> <translation id="3323235640813116393">Ļauj saglabāt lapas kā MHTML: vienu teksta failu ar HTML un visiem apakšresursiem.</translation> <translation id="3323447499041942178">Tekstlodziņš</translation> @@ -1747,6 +1751,7 @@ <translation id="347719495489420368">Lai atskaņotu <ph name="PLUGIN_NAME" />, noklikšķiniet uz tā ar labo pogu.</translation> <translation id="347785443197175480">Arī turpmāk ļaut vietnei <ph name="HOST" /> piekļūt kamerai un mikrofonam</translation> <translation id="3478315065074101056">XPS iespējo papildu opcijas klasiskajiem printeriem, kas pievienoti pakalpojumam Mākoņdruka, izmantojot Chrome. Pēc šī karodziņa maiņas ir atkārtoti jāizveido printeru savienojums.</translation> +<translation id="3479539252931486093">Vai tas bija negaidīti? <ph name="BEGIN_LINK" />Informējiet mūs<ph name="END_LINK" />!</translation> <translation id="3479552764303398839">Vēlāk</translation> <translation id="3480892288821151001">Dokot logu kreisajā pusē</translation> <translation id="3481915276125965083">Lapā tika bloķēti šādi uznirstošie logi:</translation> @@ -2721,6 +2726,7 @@ <translation id="4941246025622441835">Izmantot šo ierīces pieprasījumu, reģistrējot ierīci uzņēmuma pārvaldībai:</translation> <translation id="4942394808693235155">Pārbaudīt un lietot atjauninājumus</translation> <translation id="494286511941020793">Starpniekservera konfigurācijas palīdzība</translation> +<translation id="4945378551914476156">Jūsu grāmatzīmes, vēsture, paroles un citi iestatījumi tiks sinhronizēti ar jūsu Google kontu, lai jūs varētu tos izmantot pārlūkā Chrome jebkurā ierīcē. Varat to mainīt šeit: <ph name="BEGIN_LINK" />.</translation> <translation id="4950138595962845479">Opcijas...</translation> <translation id="4952186391360931024">Nav materiāla dizains</translation> <translation id="4954544650880561668">Ierīces vadība</translation> @@ -2855,7 +2861,6 @@ <ph name="LINE_BREAKS" /> Atvienojot ierīci lietošanas laikā, var tikt zaudēti dati. Lūdzu, uzgaidiet, līdz tiks pabeigta darbība, un pēc tam atvienojiet ierīci, izmantojot lietotni Faili.</translation> <translation id="5159488553889181171"><ph name="PLUGIN_NAME" /> lejupielāde tika atcelta.</translation> -<translation id="5159628598068481063">Novirzīšanas preference Windows datoros</translation> <translation id="5160857336552977725">Pierakstieties ierīcē <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Kopīgošana neizdevās. Pārbaudiet savienojumu un vēlāk mēģiniet vēlreiz.</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> @@ -3223,7 +3228,6 @@ <translation id="567881659373499783">Versija <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Lasīt jūsu datus vietnē <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Teksta filtrēšana kopsavilkuma režīmā</translation> -<translation id="568428328938709143">Konts noņemts</translation> <translation id="5684661240348539843">Līdzekļu identifikators</translation> <translation id="569068482611873351">Importēt...</translation> <translation id="56907980372820799">Saistīt datus</translation> @@ -3465,6 +3469,7 @@ <translation id="604001903249547235">Dublēšana mākonī</translation> <translation id="6040143037577758943">Aizvērt</translation> <translation id="604124094241169006">Automātiski</translation> +<translation id="6042308850641462728">Vairāk</translation> <translation id="604257181445267932">Smart Lock palīdz ērti pierakstīties lietotnēs un vietnēs, izmantojot paroles, ko esat saglabājis Google sistēmā.</translation> <translation id="6049065490165456785">Fotoattēls no iekšējās kameras</translation> <translation id="6051028581720248124">Drukājot FedEx birojā, jūs piekrītat FedEx <ph name="START_LINK" />pakalpojumu sniegšanas noteikumiem<ph name="END_LINK" />.</translation> @@ -3496,7 +3501,6 @@ <translation id="6089481419520884864">Attīrīt lapu</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Notiek atjaunināšanas atcelšana...</translation> -<translation id="6095149522260432647">Iespējo preferenci, ar kuru tiek atļauta Windows datorā veiktu meklēšanas vaicājumu novirzīšana uz noklusējuma meklētājprogrammu.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Atvērt maksimizētā logā</translation> <translation id="6096326118418049043">X.500 nosaukums</translation> @@ -4680,6 +4684,7 @@ <translation id="7926906273904422255">Atzīmēt nedrošus avotus kā nedrošus vai “apšaubāmus”.</translation> <translation id="7928710562641958568">Ierīces atvienošana</translation> <translation id="7938594894617528435">Pašlaik atrodas bezsaistē</translation> +<translation id="7939374455203157513">Iespējot mākoņa pakalpojumus</translation> <translation id="7939412583708276221">Tik un tā saglabāt</translation> <translation id="7939997691108949385">Pārzinis vietnē <ph name="MANAGEMENT_URL" /> varēs konfigurēt šī uzraudzītā lietotāja ierobežojumus un iestatījumus.</translation> <translation id="7943385054491506837">ASV Colemak</translation> @@ -5232,6 +5237,7 @@ <translation id="872537912056138402">Horvātu valoda</translation> <translation id="8726206820263995930">Iegūstot politikas iestatījumus no servera, radās kļūda: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Rādiet paplašinājumu opcijas kā iegultu elementu lapā chrome://extensions tā vietā, lai atvērtu jaunu cilni.</translation> +<translation id="8727142376512517020">Vairs nerādīt šo paziņojumu</translation> <translation id="8728672262656704056">Jūs esat atvēris inkognito režīmu</translation> <translation id="8730621377337864115">Gatavs</translation> <translation id="8731332457891046104"><ph name="DEVICE_TYPE" /> ierīces reģistrācijas atcelšana</translation> @@ -5394,7 +5400,6 @@ <translation id="8986362086234534611">Aizmirst</translation> <translation id="8986494364107987395">Automātiski sūtīt lietošanas statistiku un avāriju pārskatus uzņēmumam Google</translation> <translation id="8987927404178983737">Mēnesis</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Netscape sertifikāta Base URL</translation> <translation id="8994845581478641365">DirectWrite fontu kešatmiņas veidotājs</translation> <translation id="8995603266996330174">Pārvalda domēnu <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index b78fd08..1d57680 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -160,7 +160,7 @@ <translation id="121827551500866099">എല്ലാ ഡൌണ്ലോഡുകളും കാണിക്കുക...</translation> <translation id="122082903575839559">സര്ട്ടിഫിക്കറ്റ് സിഗ്നേച്ചര് അല്ഗോരിതം</translation> <translation id="1221024147024329929">RSA എന്ക്രിപ്ഷനോടുകൂടിയ PKCS #1 MD2</translation> -<translation id="1221462285898798023">ദയവായി <ph name="PRODUCT_NAME" /> ഒരു സാധാരണ ഉപയോക്താവെന്ന നിലയില് ആരംഭിക്കുക. റൂട്ട് ആയി റണ് ചെയ്യുവാന്, നിങ്ങള് പ്രൊഫൈല് വിവരം സംഭരിക്കുന്നതിനുള്ള ഒരു ബദല് --ഉപയോക്തൃ-ഡാറ്റ-ഡയറക്ടറി നിര്ദ്ദേശിക്കണം.</translation> +<translation id="1221462285898798023">ദയവായി <ph name="PRODUCT_NAME" /> ഒരു സാധാരണ ഉപയോക്താവെന്ന നിലയില് ആരംഭിക്കുക. റൂട്ട് ആയി റണ് ചെയ്യുവാന്, നിങ്ങള് പ്രൊഫൈൽ വിവരം സംഭരിക്കുന്നതിനുള്ള ഒരു ബദല് --ഉപയോക്തൃ-ഡാറ്റ-ഡയറക്ടറി നിര്ദ്ദേശിക്കണം.</translation> <translation id="1221825588892235038">തിരഞ്ഞെടുത്തവ മാത്രം</translation> <translation id="1223853788495130632">നിങ്ങളുടെ അഡ്മിനിസ്ട്രേറ്റർ ഈ ക്രമീകരണത്തിനായി ഒരു നിർദ്ദിഷ്ട മൂല്യം ശുപാർശ ചെയ്യുന്നു.</translation> <translation id="1225177025209879837">അഭ്യർത്ഥന പ്രോസസ്സുചെയ്യുന്നു...</translation> @@ -604,6 +604,7 @@ <translation id="1864111464094315414">സൈൻ ഇൻ</translation> <translation id="1864676585353837027">ഈ ഫയലുകൾ പങ്കിടുന്ന രീതി മാറ്റുക</translation> <translation id="1864756863218646478">ഫയൽ കണ്ടെത്താൻ കഴിഞ്ഞില്ല.</translation> +<translation id="1865769994591826607">സമാന-സൈറ്റ് കണക്ഷനുകൾ മാത്രം</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" എന്നതിന് ചെക്കുചെയ്ത ലൊക്കേഷനുകളിൽ ചിത്രങ്ങളും വീഡിയോകളും ശബ്ദ ഫയലുകളും റീഡുചെയ്യാനും റൈറ്റുചെയ്യാനുമാകും.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> നിങ്ങളുടെ ഇന്സ്റ്റാളേഷന് പൂര്ത്തിയാക്കുന്നതിന് തയ്യാറാണ്</translation> <translation id="1873879463550486830">SUID സാന്ഡ്ബോക്സ്</translation> @@ -1195,6 +1196,7 @@ <translation id="2743387203779672305">ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തുക</translation> <translation id="2744221223678373668">പങ്കിട്ടു</translation> <translation id="2745080116229976798">Microsoft Qualified Subordination</translation> +<translation id="2745576239403924641">നിങ്ങളുടെ Chromebook-ൽ റൺ ചെയ്യുന്നതിന് Android ആപ്സിനെ പ്രവർത്തനക്ഷമമാക്കുക.</translation> <translation id="2747990718031257077">പുതിയ വിപുലീകരണ ടൂൾബാൾ രൂപകൽപ്പന (വികസിപ്പിച്ചുകൊണ്ടിരിക്കുന്നത്) പ്രവർത്തനക്ഷമമാക്കുന്നു.</translation> <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> എന്നതിലേയ്ക്ക് സൈൻ ഇൻ ചെയ്യുക</translation> <translation id="2749881179542288782">സ്പെല്ലിംഗിനൊപ്പം വ്യാകരണവും പരിശോധിക്കുക</translation> @@ -1408,6 +1410,7 @@ <translation id="3011284594919057757">Flash-നെക്കുറിച്ച്</translation> <translation id="3011362742078013760">എല്ലാ ബുക്ക്മാര്ക്കുകളും &വേഷ പ്രച്ഛന്ന വിന്ഡോയില് തുറക്കുക</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">സമാന-സൈറ്റ് കണക്ഷനുകൾ മാത്രം സുരക്ഷിതമാക്കുക</translation> <translation id="3012890944909934180">Chrome ഡെസ്ക്ടോപ്പിൽ വീണ്ടും സമാരംഭിക്കുക</translation> <translation id="3012917896646559015">നിങ്ങളുടെ കമ്പ്യൂട്ടർ കേടുപാടുകൾ തീർക്കുന്നതിനായി അയയ്ക്കുന്നതിന് നിങ്ങളുടെ ഹാർഡ്വെയർ നിർമ്മാതാവിനെ ഉടൻ ബന്ധപ്പെടുക.</translation> <translation id="3015992588037997514">ഈ കോഡ് നിങ്ങളുടെ Chromebox സ്ക്രീനിൽ ദൃശ്യമാകുന്നുണ്ടോ?</translation> @@ -1641,6 +1644,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" /> ബട്ടൺ: സൈൻ ഇൻ പിശക്</translation> <translation id="3319048459796106952">പുതിയ &അദൃശ്യ വിന്ഡോ</translation> <translation id="331915893283195714">എല്ലാ സൈറ്റുകളെയും മൗസ് കഴ്സർ അപ്രാപ്തമാക്കാൻ അനുവദിക്കുക</translation> +<translation id="3319364804843246307">Android ആപ്സ്</translation> <translation id="3320859581025497771">നിങ്ങളുടെ കാരിയര് </translation> <translation id="3323235640813116393">MHTML ആയി പേജുകൾ സംരക്ഷിക്കുന്നതിനെ പ്രവർത്തനക്ഷമമാക്കുന്നു: HTML-ഉം എല്ലാ ഉപ ഉറവിടങ്ങളും അടങ്ങിയിരിക്കുന്ന ഒറ്റ ടെക്സ്റ്റ് ഫയൽ.</translation> <translation id="3323447499041942178">പാഠബോക്സ്</translation> @@ -1745,6 +1749,7 @@ <translation id="347719495489420368"><ph name="PLUGIN_NAME" /> പ്ലേ ചെയ്യാൻ വലത് ക്ലിക്കുചെയ്യുക</translation> <translation id="347785443197175480">നിങ്ങളുടെ ക്യാമറയും മൈക്രോഫോണും ആക്സസ്സുചെയ്യുന്നതിന് <ph name="HOST" /> എന്നതിനെ അനുവദിക്കുന്നത് തുടരുക</translation> <translation id="3478315065074101056">Chrome ഉള്ള ക്ലൗഡ് പ്രിന്റിലേക്ക് കണക്റ്റുചെയ്തിരിക്കുന്ന ക്ലാസിക് പ്രിന്ററുകൾക്കായുള്ള വിപുലമായ ഓപ്ഷനുകൾ XPS പ്രവർത്തനക്ഷമമാക്കുന്നു. ഈ ഫ്ലാഗ് മാറ്റിയ ശേഷം പ്രിന്ററുകൾ വീണ്ടും കണക്റ്റുചെയ്യണം.</translation> +<translation id="3479539252931486093">ഇത് അപ്രതീക്ഷിതമായിരുന്നോ? <ph name="BEGIN_LINK" />ഞങ്ങളെ അറിയിക്കുക<ph name="END_LINK" /></translation> <translation id="3479552764303398839">ഇപ്പോഴല്ല</translation> <translation id="3480892288821151001">വിൻഡോ ഇടതുവശത്തേയ്ക്ക് ഡോക്കുചെയ്യുക</translation> <translation id="3481915276125965083">ഈ പേജില് ഇനിപ്പറയുന്ന പോപ്പ്-അപ്പുകളെ തടഞ്ഞു:</translation> @@ -2718,6 +2723,7 @@ <translation id="4941246025622441835">ഉപകരണ എന്റർപ്രൈസ് മാനേജുമെന്റിനായി എൻറോൾ ചെയ്യുമ്പോൾ ഈ ഉപകരണ അഭ്യർത്ഥന ഉപയോഗിക്കുക:</translation> <translation id="4942394808693235155">അപ്ഡേറ്റുകൾ പരിശോധിച്ചതിന് ശേഷം പ്രയോഗിക്കുക</translation> <translation id="494286511941020793">പ്രോക്സി ക്രമീകരണ സഹായം</translation> +<translation id="4945378551914476156">നിങ്ങളുടെ ബുക്ക്മാർക്കുകൾ, ചരിത്രം, പാസ്വേഡുകൾ, മറ്റ് ക്രമീകരണം എന്നിവ Google അക്കൗണ്ടിലേക്ക് സമന്വയിപ്പിക്കുന്നതിലൂടെ Chrome ഉപയോഗിക്കുമ്പോഴെല്ലാം നിങ്ങൾക്ക് ഇവ ഉപയോഗിക്കാം. നിങ്ങൾക്ക് ഇത് <ph name="BEGIN_LINK" /> ലിങ്കിൽ മാറ്റാനാകും</translation> <translation id="4950138595962845479">ഓപ്ഷനുകള്...</translation> <translation id="4952186391360931024">നോൺ-മെറ്റീരിയൽ</translation> <translation id="4954544650880561668">ഉപകരണ നിയന്ത്രണം</translation> @@ -2852,7 +2858,6 @@ <ph name="LINE_BREAKS" /> ഉപയോഗത്തിലിരിക്കുന്ന നിങ്ങളുടെ ഉപകരണം നീക്കംചെയ്യുന്നത് ഡാറ്റ നഷ്ടത്തിന് കാരണമാകാം. പ്രവർത്തനം പൂർത്തിയാകുന്നതുവരെ കാത്തിരിക്കുക, തുടർന്ന് ഫയൽ അപ്ലിക്കേഷൻ ഉപയോഗിച്ച് ഉപകരണം ഒഴിവാക്കുക.</translation> <translation id="5159488553889181171"><ph name="PLUGIN_NAME" /> ഡൗൺലോഡ് റദ്ദാക്കി.</translation> -<translation id="5159628598068481063">Windows ഡെസ്ക്ക്ടോപ്പ് തിരയൽ റീഡയറക്ഷൻ മുൻഗണന</translation> <translation id="5160857336552977725">നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> എന്നതിൽ സൈൻ ഇൻ ചെയ്യുക</translation> <translation id="5163869187418756376">പങ്കിടൽ പരാജയപ്പെട്ടു. നിങ്ങളുടെ കണക്ഷൻ പരിശോധിച്ച് പിന്നീട് വീണ്ടും ശ്രമിക്കുക.</translation> <translation id="516592729076796170">യുഎസ് പ്രോഗ്രാമർ ഡൊറാക്ക്</translation> @@ -3131,7 +3136,7 @@ <translation id="5534520101572674276">കണക്കാക്കിയ വലുപ്പം</translation> <translation id="5535080075879535355">ക്യാപ്റ്റീവ് പോർട്ടൽ അംഗീകാരത്തിനായുള്ള ബൈപാസ് പ്രോക്സി</translation> <translation id="5538092967727216836">ഫ്രെയിം വീണ്ടും ലോഡുചെയ്യുക</translation> -<translation id="5542132724887566711">പ്രൊഫൈല്</translation> +<translation id="5542132724887566711">പ്രൊഫൈൽ</translation> <translation id="5542721662280972920">വീഡിയോ, ഓഡിയോ ഘടകങ്ങളിലെ എൻക്രിപ്റ്റ് ചെയ്ത മീഡിയ വിപുലീകരണങ്ങൾ.</translation> <translation id="5543983818738093899">സ്റ്റാറ്റസിനായി പരിശോധിക്കുന്നു...</translation> <translation id="5544363333869861395">V8 പാഴ്സർ ഡാറ്റ കാഷെ ചെയ്യുക.</translation> @@ -3220,7 +3225,6 @@ <translation id="567881659373499783">പതിപ്പ് <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522"><ph name="WEBSITE_1" /> എന്നതിലെ നിങ്ങളുടെ വിവരം വായിക്കുക</translation> <translation id="5680928275846978395">ചുരുക്കവിവരണ മോഡിലെ ടെക്സ്റ്റ് ഫിൽട്ടർചെയ്യൽ</translation> -<translation id="568428328938709143">അക്കൗണ്ട് നീക്കംചെയ്തു</translation> <translation id="5684661240348539843">അസറ്റ് ഐഡന്റിഫയർ</translation> <translation id="569068482611873351">ഇറക്കുമതി ചെയ്യുക...</translation> <translation id="56907980372820799">ഡാറ്റ ലിങ്കുചെയ്യുക</translation> @@ -3433,9 +3437,9 @@ <translation id="5991049340509704927">മാഗ്നിഫൈ ചെയ്യുക</translation> <translation id="5991774521050363748">വെബ് അറിയിപ്പുകൾക്കായി ഇഷ്ടാനുസൃത ലേഔട്ടുകൾ പ്രവർത്തനക്ഷമമാക്കുക. അവയിൽ മറ്റൊരു തരത്തിലും സാധ്യമാകാത്ത സൂക്ഷ്മമായ ലേഔട്ട് മെച്ചപ്പെടുത്തലുകൾ ഉണ്ടാകും.</translation> <translation id="5993332328670040093">നിങ്ങളുടെ ഡാറ്റ ഉപയോഗം ഇനി കണക്കാക്കുന്നതല്ല.</translation> -<translation id="5996258716334177896">നിങ്ങളുടെ പ്രൊഫൈല് ശരിയായി തുറക്കാന് കഴിഞ്ഞില്ല. +<translation id="5996258716334177896">നിങ്ങളുടെ പ്രൊഫൈൽ ശരിയായി തുറക്കാന് കഴിഞ്ഞില്ല. -ചില സവിശേഷതകള് ലഭ്യമല്ലായിരിക്കാം. പ്രൊഫൈല് നിലവിലുണ്ടോയെന്നും അതിന്റെ ഉള്ളടക്കങ്ങള് എഴുതുകയും വായിക്കുകയും ചെയ്യുന്നതിന് നിങ്ങള്ക്ക് അനുമതിയുണ്ടോയെന്നും പരിശോധിക്കുക.</translation> +ചില സവിശേഷതകള് ലഭ്യമല്ലായിരിക്കാം. പ്രൊഫൈൽ നിലവിലുണ്ടോയെന്നും അതിന്റെ ഉള്ളടക്കങ്ങള് എഴുതുകയും വായിക്കുകയും ചെയ്യുന്നതിന് നിങ്ങള്ക്ക് അനുമതിയുണ്ടോയെന്നും പരിശോധിക്കുക.</translation> <translation id="5999606216064768721">സിസ്റ്റം ശീര്ഷക ബാറും ബോര്ഡറുകളും ഉപയോഗിക്കുക</translation> <translation id="6003177993629630467"><ph name="PRODUCT_NAME" /> ന് ഒരുപക്ഷേ തന്നത്താനേ അപ്ഡേറ്റ് ചെയ്യാന് സാധിക്കുന്നില്ലായിരിക്കാം.</translation> <translation id="6003294706906016758">ഹോസ്റ്റുചെയ്ത ആപ്സിനുള്ള വെബ് ആപ്പ് സ്റ്റൈൽ ഫ്രെയിം സജ്ജമാക്കുന്നു</translation> @@ -3462,6 +3466,7 @@ <translation id="604001903249547235">ക്ലൗഡ് ബാക്കപ്പ്</translation> <translation id="6040143037577758943">അടയ്ക്കുക</translation> <translation id="604124094241169006">സ്വപ്രേരിതം</translation> +<translation id="6042308850641462728">കൂടുതൽ</translation> <translation id="604257181445267932">നിങ്ങൾ Google-ൽ സംരക്ഷിച്ച പാസ്വേഡുകൾ ഉപയോഗിച്ച് ആപ്സിലേക്കും സൈറ്റുകളിലേക്കും വേഗത്തിൽ സൈൻ ഇൻ ചെയ്യാൻ Smart Lock സഹായിക്കുന്നു.</translation> <translation id="6049065490165456785">ആന്തരിക ക്യാമറയിൽ നിന്നുള്ള ഫോട്ടോ</translation> <translation id="6051028581720248124">FedEx Office-ൽ പ്രിന്റുചെയ്യുന്നതിലൂടെ, നിങ്ങൾ അവയുടെ <ph name="START_LINK" />ഉപയോഗ നിബന്ധനകൾ<ph name="END_LINK" /> അംഗീകരിക്കുകയാണ്,</translation> @@ -3493,7 +3498,6 @@ <translation id="6089481419520884864">പേജ് ഡിസ്റ്റിൽ ചെയ്യുക</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">അപ്ഡേറ്റ് ചെയ്തത് റദ്ദാക്കുന്നു...</translation> -<translation id="6095149522260432647">ഡിഫോൾട്ട് തിരയൽ എഞ്ചിനിലേക്കുള്ള Windows ഡെസ്ക്ക്ടോപ്പ് തിരയലുകളുടെ റീഡയറക്ഷൻ അനുവദിക്കുന്ന ഒരു മുൻഗണന പ്രവർത്തനക്ഷമമാക്കുന്നു.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">വലുതാക്കി തുറക്കുക</translation> <translation id="6096326118418049043">X.500 നാമം</translation> @@ -3875,7 +3879,7 @@ <translation id="6699065916437121401">സ്ഥിര ഹാർഡ്വെയർ ലേഔട്ടിൽ അല്ലാതെ ചാനൽ ലേഔട്ടുകൾ ലഭ്യമാണോയെന്ന് പരിശോധിക്കാൻ ഓഡിയോ ഔട്ട്പുട്ട് സ്ട്രീം ചെയ്യുന്നതിനിടയാക്കുന്നു.</translation> <translation id="6699283942308121454">Zip ഫയൽ ക്രിയേറ്റർ</translation> <translation id="6700480081846086223"><ph name="HOST_NAME" /> കാസ്റ്റുചെയ്യുക</translation> -<translation id="6701535245008341853">പ്രൊഫൈല് നേടാന് കഴിഞ്ഞില്ല.</translation> +<translation id="6701535245008341853">പ്രൊഫൈൽ നേടാന് കഴിഞ്ഞില്ല.</translation> <translation id="6702639462873609204">&എഡിറ്റുചെയ്യുക...</translation> <translation id="6703985642190525976">ടച്ച് ടെക്സ്റ്റ് ഹാൻഡിലുകൾ വലിച്ചിടുമ്പോൾ ടെക്സ്റ്റ് തിരഞ്ഞെടുക്കൽ ഗ്രാനുലാരിറ്റി മാറുന്ന രീതി നിയന്ത്രിക്കുന്നു. സ്ഥിരമല്ലാത്ത പ്രവർത്തനരീതി പരീക്ഷണാത്മകമാണ്.</translation> <translation id="6707389671160270963">SSL ക്ലയന്റ് സര്ട്ടിഫിക്കറ്റ്</translation> @@ -4677,6 +4681,7 @@ <translation id="7926906273904422255">സുരക്ഷിതമല്ലാത്ത ഉറവിടങ്ങളെ സുരക്ഷിതമല്ലാത്തത് അല്ലെങ്കിൽ "അവ്യക്തമായത്" എന്ന് അടയാളപ്പെടുത്തുക.</translation> <translation id="7928710562641958568">ഉപകരണം നീക്കംചെയ്യുക</translation> <translation id="7938594894617528435">നിലവിൽ ഓഫ്ലൈനിലാണ്</translation> +<translation id="7939374455203157513">ക്ലൗഡ് സേവനങ്ങൾ പ്രവർത്തനക്ഷമമാക്കുക</translation> <translation id="7939412583708276221">എങ്ങനെയാണെങ്കിലും സൂക്ഷിക്കുക</translation> <translation id="7939997691108949385">മാനേജർക്ക് സൂപ്പർവൈസുചെയ്ത ഉപയോക്താവിനായി <ph name="MANAGEMENT_URL" />-ൽ നിയന്ത്രണങ്ങളും ക്രമീകരണങ്ങളും കോൺഫിഗർ ചെയ്യാനാകും.</translation> <translation id="7943385054491506837">യുഎസ് കോൾമാക്ക്</translation> @@ -5229,6 +5234,7 @@ <translation id="872537912056138402">ക്രൊയേഷ്യന്</translation> <translation id="8726206820263995930">സെർവറിൽ നിന്നും നയ ക്രമീകരണങ്ങൾ ലഭ്യമാക്കുന്നതിൽ പിശക്: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">ഒരു പുതിയ ടാബ് തുറക്കുന്നതിനെ അപേക്ഷിച്ച്, chrome://extensions എന്നതിൽ ഉൾച്ചേർത്ത ഘടകമായി വിപുലീകരണ ഓപ്ഷനുകൾ പ്രദർശിപ്പിക്കുക.</translation> +<translation id="8727142376512517020">ഇത് വീണ്ടും കാണിക്കരുത്</translation> <translation id="8728672262656704056">നിങ്ങൾ ആൾമാറാട്ടത്തിലേക്ക് പോയി</translation> <translation id="8730621377337864115">പൂർത്തിയാക്കി</translation> <translation id="8731332457891046104"><ph name="DEVICE_TYPE" /> അൺഎൻറോൾ ചെയ്യുക</translation> @@ -5390,7 +5396,6 @@ <translation id="8986362086234534611">മറന്നു</translation> <translation id="8986494364107987395">Google ലേക്ക് സ്വപ്രേരിതമായി ഉപയോഗ സ്ഥിതിവിവരക്കണക്കുകളും ക്രാഷ് റിപ്പോര്ട്ടുകളും അയയ്ക്കുക</translation> <translation id="8987927404178983737">മാസം</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">നെറ്റ്സ്കേപ്പ് സര്ട്ടിഫിക്കറ്റ് ബേസ് URL</translation> <translation id="8994845581478641365">DirectWrite ഫോണ്ട് കാഷെ ബിൽഡർ</translation> <translation id="8995603266996330174"><ph name="DOMAIN" /> എന്നത് കൈകാര്യം ചെയ്യുന്നു</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index e579f18..7131663f 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -605,6 +605,7 @@ <translation id="1864111464094315414">लॉगिन</translation> <translation id="1864676585353837027">या फायली कशा सामायिक केल्या जातात ते बदला</translation> <translation id="1864756863218646478">फाइल आढळू शकली नाही.</translation> +<translation id="1865769994591826607">केवळ समान-साइट वरील कनेक्शनसाठी</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" प्रतिमा, व्हिडिओ आणि चेक केलेल्या स्थानांमधील ध्वनी फायली वाचू आणि लिहू शकते.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> आपली स्थापना पूर्ण करण्यासाठी सज्ज आहे</translation> <translation id="1873879463550486830">SUID Sandbox</translation> @@ -1194,6 +1195,7 @@ <translation id="2743387203779672305">क्लिपबोर्डवर कॉपी करा</translation> <translation id="2744221223678373668">सामायिक</translation> <translation id="2745080116229976798">Microsoft Qualified Subordination</translation> +<translation id="2745576239403924641">आपल्या Chromebook वर चालविण्यासाठी Android Apps सक्षम करा.</translation> <translation id="2747990718031257077">नवीन विस्तार टूलबार टूलबार डिझाइन (विकासामध्ये) सक्षम करतो.</translation> <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> मध्ये साइन इन करा</translation> <translation id="2749881179542288782">शुद्धलेखनासह व्याकरण तपासा</translation> @@ -1407,6 +1409,7 @@ <translation id="3011284594919057757">फ्लॅश बद्दल</translation> <translation id="3011362742078013760">सर्व बुकमार्क &गुप्त विंडोमध्ये उघडा</translation> <translation id="3012631534724231212">(आयफ्रेम)</translation> +<translation id="3012804260437125868">केवळ सुरक्षित समान-साइट कनेक्शनसाठी</translation> <translation id="3012890944909934180">डेस्कटॉपवर Chrome पुन्हा लाँच करा</translation> <translation id="3012917896646559015">कृपया आपल्या संगणकास एक दुरुस्ती सुविधा पाठविण्यासाठी आपल्या हार्डवेअर निर्मात्याशी तात्काळ संपर्क साधा.</translation> <translation id="3015992588037997514">आपल्या Chromebox स्क्रीनवर हा कोड दिसतो?</translation> @@ -1640,6 +1643,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" /> बटण: साइन इन त्रुटी</translation> <translation id="3319048459796106952">नवीन &गुप्त विंडो</translation> <translation id="331915893283195714">सर्व साइट्सनां माउस कर्सर अक्षम करण्याची अनुमती द्या</translation> +<translation id="3319364804843246307">Android Apps</translation> <translation id="3320859581025497771">आपले कॅरियर</translation> <translation id="3323235640813116393">MHTML म्हणून पृष्ठे जतन करणे सक्षम करते: HTML आणि सर्व उप-संसाधने असलेली एक एकल मजकूर फाईल.</translation> <translation id="3323447499041942178">मजकूर बॉक्स</translation> @@ -1744,6 +1748,7 @@ <translation id="347719495489420368"><ph name="PLUGIN_NAME" /> प्ले करण्यासाठी उजवीकडे-क्लिक करा.</translation> <translation id="347785443197175480">आपल्या कॅमेरा आणि मायक्रोफोनवर प्रवेश करण्यासाठी <ph name="HOST" /> ला अनुमती देणे सुरू ठेवा</translation> <translation id="3478315065074101056">Chrome सह मेघ मुद्रणशी कनेक्ट केलेल्या क्लासिक प्रिंटरसाठी XPS प्रगत पर्याय सक्षम करते. हे ध्वजांकन बदलल्यानतर प्रिंटर पुन्हा कनेक्ट करणे आवश्यक आहे.</translation> +<translation id="3479539252931486093">हे अनपेक्षित होते? <ph name="BEGIN_LINK" />आम्हाला कळवा<ph name="END_LINK" /></translation> <translation id="3479552764303398839">सध्या नाही</translation> <translation id="3480892288821151001">विंडो डावीकडे आणा</translation> <translation id="3481915276125965083">खालील पॉप-अप या पृष्ठावर अवरोधित केलेली आहेत:</translation> @@ -2716,6 +2721,7 @@ <translation id="4941246025622441835">एंटरप्राइज व्यवस्थापनासाठी डिव्हाइसची नोंदणी करताना ही डिव्हाइस मागणी वापरा:</translation> <translation id="4942394808693235155">अद्यतने तपासा आणि लागू करा</translation> <translation id="494286511941020793">प्रॉक्सी कॉन्फिगरेशन मदत</translation> +<translation id="4945378551914476156">आपले बुकमार्क, इतिहास, संकेतशब्द आणि अन्य सेटिंग्ज आपल्या Google खात्यात संकालित केल्या जातील जेणेकरून आपण जिथेही Chrome वापरता तिथे त्यांचा वापर करू शकाल. आपण हे <ph name="BEGIN_LINK" /> मध्ये बदलू शकता</translation> <translation id="4950138595962845479">पर्याय...</translation> <translation id="4952186391360931024">वस्तू-नसलेले</translation> <translation id="4954544650880561668">डिव्हाइस नियंत्रण</translation> @@ -2851,7 +2857,6 @@ <ph name="LINE_BREAKS" /> आपला डिव्हाइस वापरात असताना तो काढण्यामुळे डेटा गमावू शकतो. कृपया ऑपरेशन पूर्ण होईपर्यंत प्रतीक्षा करा, नंतर फाईल अॅप वापरून डिव्हाइस बाहेर काढा.</translation> <translation id="5159488553889181171"><ph name="PLUGIN_NAME" /> डाउनलोड रद्द केले होते.</translation> -<translation id="5159628598068481063">Windows डेस्कटॉप शोध पुनर्निदेशन प्राधान्य</translation> <translation id="5160857336552977725">आपल्या <ph name="DEVICE_TYPE" /> वर साइन इन करा</translation> <translation id="5163869187418756376">सामायिकरण अयशस्वी. आपले कनेक्शन तपासा आणि नंतर पुन्हा प्रयत्न करा.</translation> <translation id="516592729076796170">यूएस प्रोग्रामर द्वोराक</translation> @@ -3219,7 +3224,6 @@ <translation id="567881659373499783">आवृत्ती <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522"><ph name="WEBSITE_1" /> वर आपला डेटा वाचा</translation> <translation id="5680928275846978395">विहंगावलोकन मोड मध्ये मजकूर फिल्टरिंग</translation> -<translation id="568428328938709143">खाते काढले</translation> <translation id="5684661240348539843">मालमत्ता अभिज्ञापक</translation> <translation id="569068482611873351">आयात...</translation> <translation id="56907980372820799">डेटा चा दुवा जोडा</translation> @@ -3459,6 +3463,7 @@ <translation id="604001903249547235">मेघ बॅकअप</translation> <translation id="6040143037577758943">बंद करा</translation> <translation id="604124094241169006">स्वयंचलित</translation> +<translation id="6042308850641462728">अधिक</translation> <translation id="604257181445267932">आपण Google सह जतन केलेल्या संकेतशब्दांचा वापर करून अॅप्स आणि साइटमध्ये द्रुतपणे साइन इन करण्यास Smart Lock आपल्याला मदत करेल.</translation> <translation id="6049065490165456785">अंतर्गत कॅमेर्यातील फोटो</translation> <translation id="6051028581720248124">FedEx Office वर मुद्रण करून, आपण त्यांच्या <ph name="START_LINK" />वापर अटी<ph name="END_LINK" /> स्वीकारता.</translation> @@ -3490,7 +3495,6 @@ <translation id="6089481419520884864">Distill पृष्ठ</translation> <translation id="6092270396854197260">एमएसपीवाय</translation> <translation id="6093888419484831006">अद्यतन रद्द करत आहे...</translation> -<translation id="6095149522260432647">Windows डेस्कटॉप शोधांच्या डीफॉल्ट शोध इंजिन वरील पुनर्निर्देशनास अनुमती देणारे प्राधान्य सक्षम करते.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">वाढवलेले उघडा</translation> <translation id="6096326118418049043">X.500 नाव</translation> @@ -4671,6 +4675,7 @@ <translation id="7926906273904422255">सुरक्षित नसलेले मूळ हे सुरक्षित-नसलेले म्हणून किंवा "अनिश्चित" म्हणून चिन्हांकित करा.</translation> <translation id="7928710562641958568">डिव्हाइस काढून टाका</translation> <translation id="7938594894617528435">सध्या ऑफलाइन</translation> +<translation id="7939374455203157513">मेघ सेवा सक्षम करा</translation> <translation id="7939412583708276221">तरीही राहू द्या</translation> <translation id="7939997691108949385">व्यवस्थापक <ph name="MANAGEMENT_URL" /> वर या पर्यवेक्षी वापरकर्त्यासाठी प्रतिबंध आणि सेटिंग्ज कॉन्फिगर करण्यात सक्षम असेल.</translation> <translation id="7943385054491506837">यूएस कोलमॅक</translation> @@ -5221,6 +5226,7 @@ <translation id="872537912056138402">क्रोएशियन</translation> <translation id="8726206820263995930">सर्व्हरवरून धोरण सेटिंग्ज आणताना त्रुटी: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">एक नवीन टॅब उघडण्याऐवजी chrome://extensions मधील अंतःस्थापित घटक म्हणून विस्तार पर्याय प्रदर्शित करा.</translation> +<translation id="8727142376512517020">हे पुन्हा दर्शवू नका</translation> <translation id="8728672262656704056">आपण गुप्त झाला आहात</translation> <translation id="8730621377337864115">पूर्ण झाले</translation> <translation id="8731332457891046104"><ph name="DEVICE_TYPE" /> ची नोंदणी रद्द करा</translation> @@ -5384,7 +5390,6 @@ <translation id="8986362086234534611">विसरा</translation> <translation id="8986494364107987395">Google ला वापर आकडेवारी आणि क्रॅश अहवाल स्वयंचलितपणे पाठवा</translation> <translation id="8987927404178983737">महिना</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Netscape प्रमाणपत्र मूळ URL</translation> <translation id="8994845581478641365">DirectWrite फॉन्ट कॅशे बिल्डर</translation> <translation id="8995603266996330174"><ph name="DOMAIN" /> द्वारे व्यवस्थापित</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb index e50a8449..4fa8d6f 100644 --- a/chrome/app/resources/generated_resources_ms.xtb +++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">Log masuk</translation> <translation id="1864676585353837027">Tukar cara fail ini dikongsi.</translation> <translation id="1864756863218646478">Fail tidak dapat dijumpai.</translation> +<translation id="1865769994591826607">Sambungan tapak yang sama sahaja</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" boleh membaca dan menulis fail imej, video dan bunyi di lokasi yang ditandai.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> sedia untuk melengkapkan pemasangan anda</translation> <translation id="1873879463550486830">Kotak pasir SUID</translation> @@ -1196,6 +1197,7 @@ <translation id="2743387203779672305">Salin ke papan keratan</translation> <translation id="2744221223678373668">Dikongsi</translation> <translation id="2745080116229976798">Subordinasi Layak Microsoft</translation> +<translation id="2745576239403924641">Dayakan Apl Android untuk dijalankan pada Chromebook anda.</translation> <translation id="2747990718031257077">Dayakan reka bentuk bar alat sambungan baharu (dalam pembangunan).</translation> <translation id="2749756011735116528">Log masuk ke <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Periksa Tatabahasa Dengan Ejaan</translation> @@ -1409,6 +1411,7 @@ <translation id="3011284594919057757">Mengenai Flash</translation> <translation id="3011362742078013760">Buka Semua Penanda Halaman dalam Tetingkap &Inkognito</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Sambungan selamat tapak yang sama sahaja</translation> <translation id="3012890944909934180">Lancarkan semula Chrome pada desktop</translation> <translation id="3012917896646559015">Sila hubungi pengeluar perkakasan anda dengan segera untuk menghantar komputer anda ke kemudahan membaiki.</translation> <translation id="3015992588037997514">Adakah kod ini muncul di skrin Chromebox anda?</translation> @@ -1642,6 +1645,7 @@ <translation id="331752765902890099">Butang <ph name="PROFILE_NAME" /> : ralat log masuk</translation> <translation id="3319048459796106952">Tetingkap &inkognito baharu</translation> <translation id="331915893283195714">Benarkan semua tapak untuk melumpuhkan kursor tetikus</translation> +<translation id="3319364804843246307">Apl Android</translation> <translation id="3320859581025497771">pembawa anda</translation> <translation id="3323235640813116393">Mendayakan penyimpanan laman sebagai MHTML: satu fail teks tunggal yang mengandungi HTML dan semua sub sumbernya.</translation> <translation id="3323447499041942178">Kotak teks</translation> @@ -1746,6 +1750,7 @@ <translation id="347719495489420368">Klik kanan untuk memainkan <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">Teruskan membenarkan <ph name="HOST" /> untuk mengakses kamera dan mikrofon anda</translation> <translation id="3478315065074101056">XPS mendayakan pilihan terperinci untuk pencetak klasik yang disambungkan ke Cetakan Awan dengan Chrome. Pencetak harus disambung semula selepas menukar bendera ini.</translation> +<translation id="3479539252931486093">Adakah hal ini tidak dijangka? <ph name="BEGIN_LINK" />Beritahu kami<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Bukan sekarang</translation> <translation id="3480892288821151001">Letakkan tetingkap di kiri</translation> <translation id="3481915276125965083">Pop muncul berikut disekat pada halaman ini:</translation> @@ -2720,6 +2725,7 @@ <translation id="4941246025622441835">Gunakan permintaan peranti ini apabila mendaftarkan peranti untuk pengurusan perusahaan:</translation> <translation id="4942394808693235155">Semak dan kenakan kemas kini</translation> <translation id="494286511941020793">Bantuan Konfigurasi Proksi</translation> +<translation id="4945378551914476156">Penanda halaman, sejarah, kata laluan dan tetapan anda yang lain akan disegerakkan ke Akaun Google supaya anda dapat menggunakannya di mana sahaja anda menggunakan Chrome. Anda boleh menukarnya di <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Pilihan...</translation> <translation id="4952186391360931024">Bukan bahan</translation> <translation id="4954544650880561668">Kawalan peranti</translation> @@ -2854,7 +2860,6 @@ <ph name="LINE_BREAKS" /> Mengalih keluar peranti anda semasa sedang digunakan boleh menyebabkan kehilangan data. Sila tunggu sehingga operasi telah selesai, kemudian lentingkan peranti menggunakan apl Fail.</translation> <translation id="5159488553889181171"><ph name="PLUGIN_NAME" /> muat turun dibatalkan.</translation> -<translation id="5159628598068481063">Pilihan pengubahan hala carian desktop Windows</translation> <translation id="5160857336552977725">Log masuk ke <ph name="DEVICE_TYPE" /> anda</translation> <translation id="5163869187418756376">Perkongsian gagal. Periksa sambungan anda dan cuba lagi nanti.</translation> <translation id="516592729076796170">Dvorak Pengatur Cara AS</translation> @@ -3222,7 +3227,6 @@ <translation id="567881659373499783">Versi <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Baca data anda di <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Penapisan Teks dalam Mod Ikhtisar</translation> -<translation id="568428328938709143">Akaun dialih keluar</translation> <translation id="5684661240348539843">Pengecam Aset</translation> <translation id="569068482611873351">Import...</translation> <translation id="56907980372820799">Pautkan data</translation> @@ -3462,6 +3466,7 @@ <translation id="604001903249547235">Sandaran awan</translation> <translation id="6040143037577758943">Tutup</translation> <translation id="604124094241169006">Automatik</translation> +<translation id="6042308850641462728">Lagi</translation> <translation id="604257181445267932">Smart Lock membantu anda log masuk ke apl dan tapak web dengan cepat menggunakan kata laluan yang telah anda simpan di Google.</translation> <translation id="6049065490165456785">Foto dari kamera dalaman</translation> <translation id="6051028581720248124">Dengan mencetak ke Pejabat FedEx, anda menerima <ph name="START_LINK" />syarat penggunaan<ph name="END_LINK" /> mereka.</translation> @@ -3493,7 +3498,6 @@ <translation id="6089481419520884864">Menyuling halaman</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Membatalkan kemas kini...</translation> -<translation id="6095149522260432647">Mendayakan pilihan yang membenarkan pengubahan hala carian desktop Windows kepada enjin carian lalai.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Buka Dimaksimumkan</translation> <translation id="6096326118418049043">X.500 Nama</translation> @@ -4674,6 +4678,7 @@ <translation id="7926906273904422255">Tandai asal tidak selamat sebagai tidak selamat atau sebagai "meragukan".</translation> <translation id="7928710562641958568">Keluarkan peranti</translation> <translation id="7938594894617528435">Di luar talian pada masa ini</translation> +<translation id="7939374455203157513">Dayakan Perkhidmatan Awan</translation> <translation id="7939412583708276221">Simpan juga</translation> <translation id="7939997691108949385">Pengurus akan dapat mengkonfigurasi sekatan dan tetapan untuk pengguna diselia ini di <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">Bahasa Colemak AS</translation> @@ -5226,6 +5231,7 @@ <translation id="872537912056138402">Bahasa Croatia</translation> <translation id="8726206820263995930">Ralat semasa mengambil tetapan dasar dari pelayan: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Paparkan pilihan pelanjutan sebagai elemen terbenam dalam chrome://extensions berbanding membuka tab baharu.</translation> +<translation id="8727142376512517020">Jangan tunjukkannya lagi</translation> <translation id="8728672262656704056">Anda menggunakan mod inkognito</translation> <translation id="8730621377337864115">Selesai</translation> <translation id="8731332457891046104">Nyahdaftarkan <ph name="DEVICE_TYPE" /></translation> @@ -5388,7 +5394,6 @@ <translation id="8986362086234534611">Lupa</translation> <translation id="8986494364107987395">Hantar statistik penggunaan dan laporan nahas kepada Google secara automatik</translation> <translation id="8987927404178983737">Bulan</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">URL Tapak Sijil Netscape</translation> <translation id="8994845581478641365">Pembina Cache Fon DirectWrite</translation> <translation id="8995603266996330174">Diuruskan oleh <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index 23216a6..defa649 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">Aanmelden</translation> <translation id="1864676585353837027">Wijzig de manier waarop deze bestanden worden gedeeld</translation> <translation id="1864756863218646478">Het bestand kan niet worden gevonden.</translation> +<translation id="1865769994591826607">Alleen verbindingen binnen dezelfde site</translation> <translation id="186612162884103683">'<ph name="EXTENSION" />' kan afbeeldingen, video- en geluidsbestanden lezen en schrijven op de gecontroleerde locaties.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> is gereed voor het voltooien van je installatie.</translation> <translation id="1873879463550486830">SUID-sandbox</translation> @@ -1196,6 +1197,7 @@ <translation id="2743387203779672305">Kopiëren naar klembord</translation> <translation id="2744221223678373668">Gedeeld</translation> <translation id="2745080116229976798">Gekwalificeerde ondergeschiktheid van Microsoft</translation> +<translation id="2745576239403924641">Android-apps inschakelen om uit te voeren op je Chromebook.</translation> <translation id="2747990718031257077">Schakelt het nieuwe ontwerp van de extensiewerkbalk (in ontwikkeling) in.</translation> <translation id="2749756011735116528">Inloggen op <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Controleer grammatica met spelling</translation> @@ -1409,6 +1411,7 @@ <translation id="3011284594919057757">Over Flash</translation> <translation id="3011362742078013760">Alle bladwijzers openen in &incognitovenster</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Alleen beveiligde verbindingen binnen dezelfde site</translation> <translation id="3012890944909934180">Chrome opnieuw openen op het bureaublad</translation> <translation id="3012917896646559015">Neem onmiddellijk contact op met je hardwarefabrikant om je computer op te sturen voor reparatie.</translation> <translation id="3015992588037997514">Wordt deze code weergegeven op het scherm van je Chromebox?</translation> @@ -1642,6 +1645,7 @@ <translation id="331752765902890099">Knop <ph name="PROFILE_NAME" />: inlogfout</translation> <translation id="3319048459796106952">Nieuw &incognitovenster</translation> <translation id="331915893283195714">Alle sites toestaan de muisaanwijzer uit te schakelen</translation> +<translation id="3319364804843246307">Android-apps</translation> <translation id="3320859581025497771">je provider</translation> <translation id="3323235640813116393">Schakelt het opslaan van pagina's als MHTML uit: één tekstbestand dat HTML en alle subbronnen bevat.</translation> <translation id="3323447499041942178">Tekstvak</translation> @@ -1746,6 +1750,7 @@ <translation id="347719495489420368">Klik met de rechtermuisknop om <ph name="PLUGIN_NAME" /> af te spelen.</translation> <translation id="347785443197175480"><ph name="HOST" /> toegang blijven geven tot je camera en microfoon</translation> <translation id="3478315065074101056">XPS schakelt geavanceerde opties in voor klassieke printers die via Chrome zijn gekoppeld aan Cloudprinter. Printers moeten opnieuw worden gekoppeld nadat deze markering is gewijzigd.</translation> +<translation id="3479539252931486093">Wat dit onverwacht? <ph name="BEGIN_LINK" />Laat het ons weten<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Niet nu</translation> <translation id="3480892288821151001">Venster links koppelen</translation> <translation id="3481915276125965083">De volgende pop-ups zijn op deze pagina geblokkeerd:</translation> @@ -2719,6 +2724,7 @@ <translation id="4941246025622441835">Gebruik deze apparaataanvraag wanneer het apparaat wordt geactiveerd voor bedrijfsbeheer:</translation> <translation id="4942394808693235155">Controleren op updates en deze uitvoeren</translation> <translation id="494286511941020793">Ondersteuning voor proxyconfiguratie</translation> +<translation id="4945378551914476156">Je bladwijzers, geschiedenis, wachtwoorden en andere instellingen worden gesynchroniseerd met je Google-account, zodat je ze overal met Chrome kunt gebruiken. Je kunt dit wijzigen in <ph name="BEGIN_LINK" />.</translation> <translation id="4950138595962845479">Opties...</translation> <translation id="4952186391360931024">Immaterieel</translation> <translation id="4954544650880561668">Apparaatbeheer</translation> @@ -2852,7 +2858,6 @@ Als je je apparaat verwijdert terwijl het wordt gebruikt, raak je mogelijk gegevens kwijt. Wacht totdat de bewerking is voltooid en werp het apparaat vervolgens uit via de app Bestanden.</translation> <translation id="5159488553889181171">Download van <ph name="PLUGIN_NAME" /> is geannuleerd.</translation> -<translation id="5159628598068481063">Voorkeur voor omleiding van Windows-desktopzoekopdrachten</translation> <translation id="5160857336552977725">Log in bij je <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Delen mislukt. Controleer de verbinding en probeer het later opnieuw.</translation> <translation id="516592729076796170">Amerikaans Programmer Dvorak</translation> @@ -3220,7 +3225,6 @@ <translation id="567881659373499783">Versie <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Je gegevens voor <ph name="WEBSITE_1" /> lezen</translation> <translation id="5680928275846978395">Tekst filteren in Overzichtsmodus</translation> -<translation id="568428328938709143">Account verwijderd</translation> <translation id="5684661240348539843">Item-ID</translation> <translation id="569068482611873351">Importeren...</translation> <translation id="56907980372820799">Gegevens koppelen</translation> @@ -3462,6 +3466,7 @@ <translation id="604001903249547235">Cloudback-up</translation> <translation id="6040143037577758943">Sluiten</translation> <translation id="604124094241169006">Automatisch</translation> +<translation id="6042308850641462728">Meer</translation> <translation id="604257181445267932">Met Smart Lock kun je snel inloggen bij apps en op sites met de wachtwoorden die je hebt opgeslagen via Google.</translation> <translation id="6049065490165456785">Foto via interne camera</translation> <translation id="6051028581720248124">Je gaat akkoord met de <ph name="START_LINK" />gebruiksvoorwaarden<ph name="END_LINK" /> door af te drukken naar FedEx Office.</translation> @@ -3493,7 +3498,6 @@ <translation id="6089481419520884864">Pagina omzetten</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Update annuleren...</translation> -<translation id="6095149522260432647">Schakelt een voorkeur in waarmee Windows-desktopzoekopdrachten kunnen worden omgeleid naar de standaardzoekmachine.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Gemaximaliseerd openen</translation> <translation id="6096326118418049043">X.500-naam</translation> @@ -4677,6 +4681,7 @@ <translation id="7926906273904422255">Niet-beveiligde beginpunten markeren als niet-veilig of 'verdacht'.</translation> <translation id="7928710562641958568">Apparaat uitwerpen</translation> <translation id="7938594894617528435">Op dit moment offline</translation> +<translation id="7939374455203157513">Cloudservices inschakelen</translation> <translation id="7939412583708276221">Toch bewaren</translation> <translation id="7939997691108949385">De beheerder kan de beperkingen en instellingen voor deze gebruiker met beperkte rechten configureren op <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">Amerikaans Colemak</translation> @@ -5229,6 +5234,7 @@ <translation id="872537912056138402">Kroatisch</translation> <translation id="8726206820263995930">Fout bij het ophalen van beleidsinstellingen van de server: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Geef extensie-opties weer als een ingesloten element in chrome://extensions in plaats van een nieuw tabblad te openen.</translation> +<translation id="8727142376512517020">Dit bericht niet meer weergeven</translation> <translation id="8728672262656704056">Je bent incognito</translation> <translation id="8730621377337864115">Gereed</translation> <translation id="8731332457891046104"><ph name="DEVICE_TYPE" /> uitschrijven</translation> @@ -5390,9 +5396,8 @@ <translation id="8982248110486356984">Gebruikers wijzigen</translation> <translation id="8986267729801483565">Downloadlocatie:</translation> <translation id="8986362086234534611">Vergeten</translation> -<translation id="8986494364107987395">Automatisch gebruiksstatistieken en crashmeldingen naar Google verzenden</translation> +<translation id="8986494364107987395">Automatisch gebruiksstatistieken en crashrapporten naar Google verzenden</translation> <translation id="8987927404178983737">Maand</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Basis-URL voor Netscape-certificaat</translation> <translation id="8994845581478641365">DirectWrite Font Cache Builder</translation> <translation id="8995603266996330174">Beheerd door <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index 9df7ce7..bf1588b1 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -603,6 +603,7 @@ <translation id="1864111464094315414">Pålogging</translation> <translation id="1864676585353837027">Endre hvordan disse filene deles</translation> <translation id="1864756863218646478">Kunne ikke finne filen.</translation> +<translation id="1865769994591826607">Bare tilkoblinger til samme nettsted</translation> <translation id="186612162884103683">«<ph name="EXTENSION" />» kan lese og redigere bilder, videofiler og lydfiler i de avmerkede mappene.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> er klar til å fullføre installasjonen</translation> <translation id="1873879463550486830">SUID-sandkasse</translation> @@ -1191,6 +1192,7 @@ <translation id="2743387203779672305">Kopiér til utklippstavlen</translation> <translation id="2744221223678373668">Delte</translation> <translation id="2745080116229976798">Microsoft kvalifisert underordning</translation> +<translation id="2745576239403924641">La Android-apper kjøre på Chromebooken din.</translation> <translation id="2747990718031257077">Aktiverer den nye utformingen av verktøylinjen for utvidelser, som er i utviklingsfasen.</translation> <translation id="2749756011735116528">Logg på <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Kontroller·grammatikk·og·staving</translation> @@ -1404,6 +1406,7 @@ <translation id="3011284594919057757">Om Flash</translation> <translation id="3011362742078013760">Åpne alle bokmerker i &inkognitovindu</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Bare sikre tilkoblinger til samme nettsted</translation> <translation id="3012890944909934180">Start Chrome på nytt via skrivebordet</translation> <translation id="3012917896646559015">Kontakt maskinvareprodusenten umiddelbart for å sende datamaskinen til et verksted.</translation> <translation id="3015992588037997514">Ser du denne koden på Chromebox-skjermen din?</translation> @@ -1635,6 +1638,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" />-knapp: påloggingsfeil</translation> <translation id="3319048459796106952">Nytt &inkognitovindu</translation> <translation id="331915893283195714">Tillat alle nettsteder å deaktivere markøren</translation> +<translation id="3319364804843246307">Android-apper</translation> <translation id="3320859581025497771">din operatør</translation> <translation id="3323235640813116393">Gjør det mulig å lagre sider som MHTML – én enkelt tekstfil som inneholder HTML og alle underressurser.</translation> <translation id="3323447499041942178">Tekstboks</translation> @@ -1739,6 +1743,7 @@ <translation id="347719495489420368">Høyreklikk for å aktivere <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">Fortsett å gi <ph name="HOST" /> tillatelse til å bruke kameraet og mikrofonen</translation> <translation id="3478315065074101056">XPS aktiverer avanserte alternativer for klassiske skrivere som er tilkoblet Cloud Print med Chrome. Skriverne må kobles til på nytt når dette flagget endres.</translation> +<translation id="3479539252931486093">Var dette uventet? <ph name="BEGIN_LINK" />Si fra til oss<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Ikke nå</translation> <translation id="3480892288821151001">Forankre vinduet til venstre</translation> <translation id="3481915276125965083">Følgende forgrunnsvinduer er blokkert på siden:</translation> @@ -2710,6 +2715,7 @@ <translation id="4941246025622441835">Bruk denne enhetsrekvisisjonen når du registrerer enheten for bedriftsadministrering.</translation> <translation id="4942394808693235155">Se etter og installer oppdateringer</translation> <translation id="494286511941020793">Hjelp for konfigurering av mellomtjenere</translation> +<translation id="4945378551914476156">Bokmerkene, loggen, passordene og de andre innstillingene dine blir synkronisert til Google-kontoen din, slik at du kan bruke dem uansett hvor du bruker Chrome. Du kan forandre dette i <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Alternativer</translation> <translation id="4952186391360931024">Ikke-materielt</translation> <translation id="4954544650880561668">Enhetskontroll</translation> @@ -2841,7 +2847,6 @@ <ph name="LINE_BREAKS" /> Fjerning av enheten mens den er i bruk kan resultere i tap av data. Vent til handlingen er utført før du mater ut enheten ved bruk av Filer-appen.</translation> <translation id="5159488553889181171"><ph name="PLUGIN_NAME" />-nedlastingen ble avbrutt.</translation> -<translation id="5159628598068481063">Innstilling for omdirigering av PC-søk i Windows</translation> <translation id="5160857336552977725">Logg på <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Delingen mislyktes. Sjekk tilkoblingen din og prøv på nytt senere.</translation> <translation id="516592729076796170">Amerikansk programmeringstastatur (Dvorak)</translation> @@ -3209,7 +3214,6 @@ <translation id="567881659373499783">Versjon <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Les dataene dine på <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Tekstfiltrering i oversiktsmodus</translation> -<translation id="568428328938709143">Kontoen er fjernet</translation> <translation id="5684661240348539843">Ressursidentifikator</translation> <translation id="569068482611873351">Importer</translation> <translation id="56907980372820799">Koble sammen data</translation> @@ -3449,6 +3453,7 @@ <translation id="604001903249547235">Skybasert sikkerhetskopiering</translation> <translation id="6040143037577758943">Lukk</translation> <translation id="604124094241169006">Automatisk</translation> +<translation id="6042308850641462728">Mer</translation> <translation id="604257181445267932">Med Smart Lock kan du raskt logge på apper og nettsteder som bruker passord du har lagret hos Google.</translation> <translation id="6049065490165456785">Bilde fra internt kamera</translation> <translation id="6051028581720248124">Ved utskrift til FedEx-kontorer, godtar du <ph name="START_LINK" />vilkårene<ph name="END_LINK" /> deres.</translation> @@ -3480,7 +3485,6 @@ <translation id="6089481419520884864">Destiller siden</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Avbryter oppdatering …</translation> -<translation id="6095149522260432647">Slår på en innstilling som gjør at PC-søk i Windows kan omdirigeres til en standardsøkemotor.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Maksimer ved åpning</translation> <translation id="6096326118418049043">X.500 navn</translation> @@ -4653,6 +4657,7 @@ <translation id="7926906273904422255">Merk usikre opprinnelser som usikret eller «tvilsomme».</translation> <translation id="7928710562641958568">Utløserenhet</translation> <translation id="7938594894617528435">Frakoblet for øyeblikket</translation> +<translation id="7939374455203157513">Slå på nettskytjenester</translation> <translation id="7939412583708276221">Behold uansett</translation> <translation id="7939997691108949385">Administratoren kan konfigurere begrensninger og innstillinger for denne administrerte brukeren på <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">USA Colemak</translation> @@ -5203,6 +5208,7 @@ <translation id="872537912056138402">Kroatisk</translation> <translation id="8726206820263995930">Feil under henting av innstillingsangivelser fra tjeneren: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Viser alternativer for utvidelser som et innebygd element i chrome://extensions fremfor å åpne en ny fane.</translation> +<translation id="8727142376512517020">Ikke vis dette igjen</translation> <translation id="8728672262656704056">Du er nå i inkognitomodus</translation> <translation id="8730621377337864115">Ferdig</translation> <translation id="8731332457891046104">Avregistrer <ph name="DEVICE_TYPE" /></translation> @@ -5365,7 +5371,6 @@ <translation id="8986362086234534611">Glem</translation> <translation id="8986494364107987395">Send bruksstatistikk og programstopprapporter automatisk til Google</translation> <translation id="8987927404178983737">Måned</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Primære nettadresse for Netscape-sertifikat</translation> <translation id="8994845581478641365">DirectWrite Font Cache Builder</translation> <translation id="8995603266996330174">Drevet av <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index 2956b6455..3aa8a4be 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">Zaloguj się</translation> <translation id="1864676585353837027">Zmień sposób udostępniania tych plików</translation> <translation id="1864756863218646478">Nie można znaleźć pliku.</translation> +<translation id="1865769994591826607">Tylko połączenia z tą samą witryną</translation> <translation id="186612162884103683">„<ph name="EXTENSION" />” może odczytywać oraz zapisywać pliki graficzne, wideo i dźwiękowe z wybranych lokalizacji.</translation> <translation id="1867780286110144690">Przeglądarka <ph name="PRODUCT_NAME" /> jest gotowa do ukończenia instalacji.</translation> <translation id="1873879463550486830">Piaskownica identyfikatora SUID</translation> @@ -1195,6 +1196,7 @@ <translation id="2743387203779672305">Skopiuj do schowka</translation> <translation id="2744221223678373668">Udostępniane</translation> <translation id="2745080116229976798">Subordynacja kwalifikowana firmy Microsoft</translation> +<translation id="2745576239403924641">Włącz na Chromebooku obsługę aplikacji na Androida.</translation> <translation id="2747990718031257077">Włącza nowy wygląd paska narzędzi rozszerzenia (w opracowaniu).</translation> <translation id="2749756011735116528">Zaloguj się w <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Sprawdzaj gramatykę razem z pisownią</translation> @@ -1408,6 +1410,7 @@ <translation id="3011284594919057757">Flash – informacje</translation> <translation id="3011362742078013760">Otwórz wszystkie zakładki w oknie &incognito</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Tylko bezpieczne połączenia z tą samą witryną</translation> <translation id="3012890944909934180">Ponownie uruchom Chrome na pulpicie</translation> <translation id="3012917896646559015">Jak najszybciej skontaktuj się z producentem sprzętu, aby wysłać komputer do serwisu.</translation> <translation id="3015992588037997514">Widzisz ten kod na ekranie Chromeboksa?</translation> @@ -1641,6 +1644,7 @@ <translation id="331752765902890099">Przycisk <ph name="PROFILE_NAME" />: błąd logowania</translation> <translation id="3319048459796106952">Nowe okno &incognito</translation> <translation id="331915893283195714">Zezwalaj wszystkim witrynom na wyłączanie kursora myszy</translation> +<translation id="3319364804843246307">Aplikacje na Androida</translation> <translation id="3320859581025497771">Twój operator</translation> <translation id="3323235640813116393">Włącza zapisywanie stron w formacie MHTML: pojedynczego pliku tekstowego zawierającego kod HTML i wszystkie zasoby podrzędne.</translation> <translation id="3323447499041942178">Pole tekstowe</translation> @@ -1745,6 +1749,7 @@ <translation id="347719495489420368">Kliknij prawym przyciskiem myszy, by uruchomić <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">Nadal zezwalaj witrynie <ph name="HOST" /> na dostęp do kamery i mikrofonu</translation> <translation id="3478315065074101056">XPS włącza zaawansowane opcje w klasycznych drukarkach podłączonych do Cloud Print przy użyciu Chrome. Po zmianie tej flagi drukarki trzeba podłączyć ponownie.</translation> +<translation id="3479539252931486093">Zaskoczyło Cię to? <ph name="BEGIN_LINK" />Daj nam znać<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Nie teraz</translation> <translation id="3480892288821151001">Umieść okno po lewej</translation> <translation id="3481915276125965083">Następujące wyskakujące okienka na tej stronie zostały zablokowane:</translation> @@ -2716,6 +2721,7 @@ <translation id="4941246025622441835">Użyj tej informacji o przeznaczeniu urządzenia, gdy urządzenie będzie rejestrowane na potrzeby zarządzania w firmie:</translation> <translation id="4942394808693235155">Sprawdź i zastosuj aktualizacje</translation> <translation id="494286511941020793">Konfiguracja serwera proxy – pomoc</translation> +<translation id="4945378551914476156">Zakładki, historia, hasła i inne ustawienia zostaną zsynchronizowane z kontem Google, by można było z nich korzystać na dowolnym urządzeniu z Chrome. Możesz to zmienić na stronie <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Opcje</translation> <translation id="4952186391360931024">Styl inny niż Material</translation> <translation id="4954544650880561668">Sterowanie urządzeniem</translation> @@ -2851,7 +2857,6 @@ <ph name="LINE_BREAKS" /> Jeśli to zrobisz w trakcie pracy, możesz spowodować utratę danych. Poczekaj na zakończenie operacji, a następnie odłącz urządzenie, używając aplikacji Pliki.</translation> <translation id="5159488553889181171">Anulowano pobieranie wtyczki <ph name="PLUGIN_NAME" />.</translation> -<translation id="5159628598068481063">Ustawienie przekierowania wyszukiwania z pulpitu systemu Windows</translation> <translation id="5160857336552977725">Zaloguj się na urządzeniu <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Niepowodzenie udostępniania. Sprawdź połączenie i spróbuj ponownie później.</translation> <translation id="516592729076796170">Amerykańska programisty (Dvorak)</translation> @@ -3219,7 +3224,6 @@ <translation id="567881659373499783">Wersja <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Odczyt Twoich danych na stronie <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Filtrowanie tekstowe w trybie przeglądu</translation> -<translation id="568428328938709143">Konto zostało usunięte</translation> <translation id="5684661240348539843">Identyfikator zasobu</translation> <translation id="569068482611873351">Importuj...</translation> <translation id="56907980372820799">Połącz dane</translation> @@ -3459,6 +3463,7 @@ <translation id="604001903249547235">Kopia zapasowa w chmurze</translation> <translation id="6040143037577758943">Zamknij</translation> <translation id="604124094241169006">Automatyczne</translation> +<translation id="6042308850641462728">Więcej</translation> <translation id="604257181445267932">Smart Lock umożliwia szybkie logowanie się w aplikacjach i na stronach przy użyciu haseł zapisanych w Google.</translation> <translation id="6049065490165456785">Zdjęcie z wbudowanego aparatu</translation> <translation id="6051028581720248124">Drukując za pomocą FedEx Office, akceptujesz ich <ph name="START_LINK" />Warunki korzystania z usługi<ph name="END_LINK" />.</translation> @@ -3490,7 +3495,6 @@ <translation id="6089481419520884864">Zbadaj stronę</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Anulowanie aktualizacji...</translation> -<translation id="6095149522260432647">Umożliwia ustawienie przekierowania wyszukiwań z pulpitu systemu Windows do domyślnej wyszukiwarki.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Otwórz zmaksymalizowane</translation> <translation id="6096326118418049043">Nazwa X.500</translation> @@ -4663,6 +4667,7 @@ <translation id="7926906273904422255">Oznacza niezabezpieczone źródła jako niezabezpieczone lub budzące wątpliwości.</translation> <translation id="7928710562641958568">Odłącz urządzenie</translation> <translation id="7938594894617528435">Aktualnie offline</translation> +<translation id="7939374455203157513">Włącz usługi w chmurze</translation> <translation id="7939412583708276221">Zachowaj mimo to</translation> <translation id="7939997691108949385">Menedżer będzie mógł konfigurować ograniczenia i ustawienia dla użytkownika nadzorowanego na stronie <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">amerykańska klawiatura Colemak</translation> @@ -5213,6 +5218,7 @@ <translation id="872537912056138402">Chorwacki</translation> <translation id="8726206820263995930">Podczas pobierania ustawień zasad z serwera wystąpił błąd: <ph name="CLIENT_ERROR" /></translation> <translation id="8726888928275282477">Wyświetla opcje rozszerzenia jako wbudowany element w chrome://extensions zamiast otwierania nowej karty.</translation> +<translation id="8727142376512517020">Nie pokazuj ponownie</translation> <translation id="8728672262656704056">Jesteś w trybie incognito</translation> <translation id="8730621377337864115">Gotowe</translation> <translation id="8731332457891046104">Wyrejestruj urządzenie <ph name="DEVICE_TYPE" /></translation> @@ -5375,7 +5381,6 @@ <translation id="8986362086234534611">Zapomnij</translation> <translation id="8986494364107987395">Automatycznie przesyłaj statystyki użytkowania i raporty o awariach do Google</translation> <translation id="8987927404178983737">Miesiąc</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Podstawowy adres URL certyfikatu firmy Netscape</translation> <translation id="8994845581478641365">Kreator pamięci podręcznej czcionek DirectWrite</translation> <translation id="8995603266996330174">Zarządzane przez <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index b2ebcc1..e1fbd73 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">Login</translation> <translation id="1864676585353837027">Alterar a forma como esses arquivos são compartilhados</translation> <translation id="1864756863218646478">O arquivo não foi encontrado.</translation> +<translation id="1865769994591826607">Apenas conexões com o mesmo site</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" pode ler e gravar imagens, vídeos e arquivos de som nos locais marcados.</translation> <translation id="1867780286110144690">O <ph name="PRODUCT_NAME" /> está pronto para concluir a instalação</translation> <translation id="1873879463550486830">Sandbox de SUID</translation> @@ -1195,6 +1196,7 @@ <translation id="2743387203779672305">Copiar para a área de trabalho</translation> <translation id="2744221223678373668">Compartilhadas</translation> <translation id="2745080116229976798">Subordinação qualificada da Microsoft</translation> +<translation id="2745576239403924641">Ative a execução de apps do Android no seu Chromebook.</translation> <translation id="2747990718031257077">Ativa o novo design da barra de ferramentas de extensões (em desenvolimento).</translation> <translation id="2749756011735116528">Fazer login no <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Verificar a gramática com a ortografia</translation> @@ -1408,6 +1410,7 @@ <translation id="3011284594919057757">Sobre o Flash</translation> <translation id="3011362742078013760">Abrir todos os favoritos em &janela anônima</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Apenas conexões seguras com mesmo site</translation> <translation id="3012890944909934180">Reiniciar o Google Chrome na área de trabalho</translation> <translation id="3012917896646559015">Entre em contato com o fabricante do hardware imediatamente para enviar seu computador para a assistência técnica.</translation> <translation id="3015992588037997514">Esse código aparece na sua tela do Chromebox?</translation> @@ -1641,6 +1644,7 @@ <translation id="331752765902890099">Botão <ph name="PROFILE_NAME" />: erro de login</translation> <translation id="3319048459796106952">Nova janela &anônima</translation> <translation id="331915893283195714">Permitir que todos os sites ocultem o cursor do mouse</translation> +<translation id="3319364804843246307">Apps para Android</translation> <translation id="3320859581025497771">sua operadora</translation> <translation id="3323235640813116393">Permite salvar páginas como MHTML: um único arquivo de texto contendo HTML e todos os sub-recursos.</translation> <translation id="3323447499041942178">Caixa de texto</translation> @@ -1745,6 +1749,7 @@ <translation id="347719495489420368">Clique com o botão direito do mouse para reproduzir <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">Continuar permitindo que <ph name="HOST" /> acesse sua câmera e seu microfone</translation> <translation id="3478315065074101056">O XPS ativa opções avançadas para impressoras clássicas ligadas ao Cloud Print com o Chrome. As impressoras precisam ser reconectadas após a alteração dessa sinalização.</translation> +<translation id="3479539252931486093">Isso foi inesperado? <ph name="BEGIN_LINK" />Informe-nos<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Não agora</translation> <translation id="3480892288821151001">Encaixar janela à esquerda</translation> <translation id="3481915276125965083">Os seguintes pop-ups foram bloqueados nesta página:</translation> @@ -2716,6 +2721,7 @@ <translation id="4941246025622441835">Usar essa requisição de dispositivo ao inscrever o dispositivo no gerenciamento corporativo:</translation> <translation id="4942394808693235155">Verificar e aplicar atualizações</translation> <translation id="494286511941020793">Ajuda da configuração de proxy</translation> +<translation id="4945378551914476156">Seus favoritos, histórico, senhas e outras configurações serão sincronizados com sua Conta do Google para que você possa usá-los sempre que usar o Chrome. essa configuração pode ser alterada em <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Opções...</translation> <translation id="4952186391360931024">Não material</translation> <translation id="4954544650880561668">Controle de dispositivo</translation> @@ -2850,7 +2856,6 @@ <ph name="LINE_BREAKS" /> A remoção do dispositivo enquanto ele está em uso pode causar perda de dados. Espere até que a operação esteja terminada e remova o dispositivo usando o aplicativo Arquivos.</translation> <translation id="5159488553889181171">O download de <ph name="PLUGIN_NAME" /> foi cancelado.</translation> -<translation id="5159628598068481063">Preferência de redirecionamento da pesquisa na área de trabalho do Windows</translation> <translation id="5160857336552977725">Faça login no seu <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Falha no compartilhamento. Verifique sua conexão e tente novamente mais tarde.</translation> <translation id="516592729076796170">Programmer Dvorak americano</translation> @@ -3219,7 +3224,6 @@ <translation id="567881659373499783">Versão <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Leia seus dados em <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Filtro de texto no modo de visão geral</translation> -<translation id="568428328938709143">Conta removida</translation> <translation id="5684661240348539843">Identificador de recurso</translation> <translation id="569068482611873351">Importar...</translation> <translation id="56907980372820799">Vincular dados</translation> @@ -3459,6 +3463,7 @@ <translation id="604001903249547235">Backup em nuvem</translation> <translation id="6040143037577758943">Fechar</translation> <translation id="604124094241169006">Automático</translation> +<translation id="6042308850641462728">Mais</translation> <translation id="604257181445267932">O Smart Lock ajuda você a fazer login rapidamente em aplicativos e sites usando senhas salvas com o Google.</translation> <translation id="6049065490165456785">Foto da câmera interna</translation> <translation id="6051028581720248124">Ao imprimir no FedEx Office, você aceita os <ph name="START_LINK" />termos de uso<ph name="END_LINK" />.</translation> @@ -3490,7 +3495,6 @@ <translation id="6089481419520884864">Página de conversão</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Cancelando atualização...</translation> -<translation id="6095149522260432647">Ativa uma preferência que permite o redirecionamento das pesquisas da área de trabalho do Windows para o mecanismo de pesquisa padrão.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Abrir maximizado</translation> <translation id="6096326118418049043">Nome X.500</translation> @@ -4674,6 +4678,7 @@ <translation id="7926906273904422255">Marcar origens não seguras como "não seguras" ou "duvidosas".</translation> <translation id="7928710562641958568">Ejetar dispositivo</translation> <translation id="7938594894617528435">Atualmente off-line</translation> +<translation id="7939374455203157513">Ativar serviços em nuvem</translation> <translation id="7939412583708276221">Manter assim mesmo</translation> <translation id="7939997691108949385">O gerente poderá configurar restrições e configurações para este usuário supervisionado em <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">Colemak EUA</translation> @@ -5224,6 +5229,7 @@ <translation id="872537912056138402">Croata</translation> <translation id="8726206820263995930">Erro ao obter as configurações da política a partir do servidor: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Exibir opções de extensão como um elemento incorporado em chrome://extensions em vez de abrir uma nova guia.</translation> +<translation id="8727142376512517020">Não mostrar isto novamente</translation> <translation id="8728672262656704056">Você entrou no modo de navegação anônima</translation> <translation id="8730621377337864115">Concluído</translation> <translation id="8731332457891046104">Cancelar a inscrição do <ph name="DEVICE_TYPE" /></translation> @@ -5386,7 +5392,6 @@ <translation id="8986362086234534611">Esquecer</translation> <translation id="8986494364107987395">Enviar automaticamente estatísticas de uso e relatórios de erros ao Google</translation> <translation id="8987927404178983737">Mês</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">URL base do certificado do Netscape</translation> <translation id="8994845581478641365">Construtor do DirectWrite Font Cache</translation> <translation id="8995603266996330174">Gerenciado por <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index 0675b0e8..5f11edf 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -607,6 +607,7 @@ <translation id="1864111464094315414">Início de sessão</translation> <translation id="1864676585353837027">Alterar a forma como estes ficheiros são partilhados</translation> <translation id="1864756863218646478">Não foi possível encontrar o ficheiro.</translation> +<translation id="1865769994591826607">Apenas ligações do mesmo site</translation> <translation id="186612162884103683">A extensão "<ph name="EXTENSION" />" consegue ler e escrever em imagens, em ficheiros de vídeo e de som nas localizações confirmadas.</translation> <translation id="1867780286110144690">O <ph name="PRODUCT_NAME" /> está preparado para concluir a instalação</translation> <translation id="1873879463550486830">Isolamento de processos SUID</translation> @@ -1196,6 +1197,7 @@ <translation id="2743387203779672305">Copiar para a área de transferência</translation> <translation id="2744221223678373668">Partilhadas</translation> <translation id="2745080116229976798">Subordinação qualificada Microsoft</translation> +<translation id="2745576239403924641">Permitir que as aplicações Android sejam executadas no Chromebook.</translation> <translation id="2747990718031257077">Ativa o novo design da barra de ferramentas de extensões (em desenvolvimento).</translation> <translation id="2749756011735116528">Iniciar sessão no <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Verificar gramática com a ortografia</translation> @@ -1410,6 +1412,7 @@ <translation id="3011284594919057757">Acerca do Flash</translation> <translation id="3011362742078013760">Abrir Todos os Marcadores na Janela de &Navegação Anónima</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Apenas ligações seguras do mesmo site</translation> <translation id="3012890944909934180">Reiniciar o Chrome no computador</translation> <translation id="3012917896646559015">Contacte o seu fabricante de hardware imediatamente para enviar o seu computador para reparação.</translation> <translation id="3015992588037997514">Este código é apresentado no ecrã do Chromebox?</translation> @@ -1642,6 +1645,7 @@ <translation id="331752765902890099">Botão de <ph name="PROFILE_NAME" />: erro de início de sessão</translation> <translation id="3319048459796106952">&Nova janela sem registo</translation> <translation id="331915893283195714">Permitir que todos os Web sites desativem o cursor do rato</translation> +<translation id="3319364804843246307">Aplicações Android</translation> <translation id="3320859581025497771">a sua operadora</translation> <translation id="3323235640813116393">Permite guardar páginas como MHTML: um ficheiro de texto único que contém HTML e todos os recursos secundários.</translation> <translation id="3323447499041942178">Caixa de texto</translation> @@ -1746,6 +1750,7 @@ <translation id="347719495489420368">Clique com o botão direito do rato para reproduzir o <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">Continuar a permitir que <ph name="HOST" /> aceda à sua câmara e microfone</translation> <translation id="3478315065074101056">O XPS ativa opções avançadas para as impressoras clássicas ligadas ao Cloud Print com o Chrome. As impressoras têm de ser novamente ligadas após alterar esta sinalização.</translation> +<translation id="3479539252931486093">Esta ação foi inesperada? <ph name="BEGIN_LINK" />Informe-nos<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Agora não</translation> <translation id="3480892288821151001">Colocar janela à esquerda</translation> <translation id="3481915276125965083">Os seguintes pop-ups foram bloqueados nesta página:</translation> @@ -2719,6 +2724,7 @@ <translation id="4941246025622441835">Utilizar a requisição deste dispositivo ao inscrever o dispositivo para gestão empresarial:</translation> <translation id="4942394808693235155">Verificar a existência de atualizações e aplicá-las</translation> <translation id="494286511941020793">Ajuda de configuração de proxy</translation> +<translation id="4945378551914476156">Os marcadores, histórico, palavras-passe e outras definições são sincronizados com a sua Conta Google para estarem disponíveis sempre que utilizar o Chrome. Pode alterar esta opção em <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Opções...</translation> <translation id="4952186391360931024">Não material</translation> <translation id="4954544650880561668">Controlo do dispositivo</translation> @@ -2853,7 +2859,6 @@ <ph name="LINE_BREAKS" /> Remover o dispositivo enquanto está a ser utilizado pode provocar perda de dados. Aguarde pela conclusão da operação e, em seguida, ejete o dispositivo através da aplicação Ficheiros.</translation> <translation id="5159488553889181171">A transferência de <ph name="PLUGIN_NAME" /> foi cancelada.</translation> -<translation id="5159628598068481063">Preferência de redirecionamento da pesquisa no ambiente de trabalho do Windows</translation> <translation id="5160857336552977725">Inicie sessão no <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Falha ao partilhar. Verifique a ligação e tente novamente mais tarde.</translation> <translation id="516592729076796170">Dvorak de programador americano</translation> @@ -3222,7 +3227,6 @@ <translation id="567881659373499783">Versão <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Ler os seus dados em <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Filtragem de texto no Modo de vista geral</translation> -<translation id="568428328938709143">Conta removida</translation> <translation id="5684661240348539843">Identificador de recursos</translation> <translation id="569068482611873351">Importar...</translation> <translation id="56907980372820799">Associar dados</translation> @@ -3462,6 +3466,7 @@ <translation id="604001903249547235">Cópia de segurança na nuvem</translation> <translation id="6040143037577758943">Fechar</translation> <translation id="604124094241169006">Automático</translation> +<translation id="6042308850641462728">Mais</translation> <translation id="604257181445267932">O Smart Lock ajuda-o a iniciar sessão rapidamente em aplicações e sites com palavras-passe que guardou com o Google.</translation> <translation id="6049065490165456785">Fotografia tirada com a câmara interna</translation> <translation id="6051028581720248124">Ao imprimir para a FedEx Office, aceita os seus <ph name="START_LINK" />termos de utilização<ph name="END_LINK" />.</translation> @@ -3493,7 +3498,6 @@ <translation id="6089481419520884864">Página de destilação</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">A cancelar a atualização...</translation> -<translation id="6095149522260432647">Ativa uma preferência que permite o redirecionamento das pesquisas no ambiente de trabalho do Windows para o motor de pesquisa predefinido.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Abrir maximizada</translation> <translation id="6096326118418049043">Nome X.500</translation> @@ -4674,6 +4678,7 @@ <translation id="7926906273904422255">Marque as origens não seguras como não seguras ou como "duvidosas".</translation> <translation id="7928710562641958568">Ejetar aparelho</translation> <translation id="7938594894617528435">Atualmente offline</translation> +<translation id="7939374455203157513">Ativar serviços na nuvem</translation> <translation id="7939412583708276221">Manter na mesma</translation> <translation id="7939997691108949385">O gestor poderá configurar restrições e definições para este utilizador supervisionado em <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">EUA Colemak</translation> @@ -5224,6 +5229,7 @@ <translation id="872537912056138402">Croata</translation> <translation id="8726206820263995930">Erro ao obter as definições da política do servidor: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Apresenta opções de extensões como um elemento incorporado em chrome://extensions em vez de abrir um novo separador.</translation> +<translation id="8727142376512517020">Não voltar a mostrar</translation> <translation id="8728672262656704056">Está anónimo</translation> <translation id="8730621377337864115">Concluído</translation> <translation id="8731332457891046104">Anular inscrição de <ph name="DEVICE_TYPE" /></translation> @@ -5386,7 +5392,6 @@ <translation id="8986362086234534611">Esquecer</translation> <translation id="8986494364107987395">Enviar automaticamente estatísticas de utilização e relatórios de falhas para a Google</translation> <translation id="8987927404178983737">Mês</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">URL base do certificado Netscape</translation> <translation id="8994845581478641365">Criador de cache de tipos de letra do DirectWrite</translation> <translation id="8995603266996330174">Gerido por <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index b76c9e53..2b59867 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -276,7 +276,7 @@ <translation id="1406500794671479665">Se verifică...</translation> <translation id="1407050882688520094">Există certificate care identifică aceste autorități de certificare:</translation> <translation id="1407489512183974736">Pe centru, decupat</translation> -<translation id="1408789165795197664">Avansat...</translation> +<translation id="1408789165795197664">Avansate...</translation> <translation id="1408803555324839240">Hopa! Nu poate fi creat un utilizator monitorizat nou. Asigurați-vă că v-ați conectat în mod corect și încercați din nou.</translation> <translation id="1409390508152595145">Creați un utilizator monitorizat</translation> <translation id="1410616244180625362">Permiteți în continuare accesul <ph name="HOST" /> la camera dvs.</translation> @@ -606,6 +606,7 @@ <translation id="1864111464094315414">Conectați-vă</translation> <translation id="1864676585353837027">Modifică modul în care se permite accesul la aceste fișiere</translation> <translation id="1864756863218646478">Fișierul nu a putut fi găsit.</translation> +<translation id="1865769994591826607">Numai conexiunile către același site</translation> <translation id="186612162884103683">Extensia „<ph name="EXTENSION" />” poate citi și scrie imagini, videoclipuri și fișiere audio în locațiile indicate.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> este pregătit pentru a finaliza instalarea</translation> <translation id="1873879463550486830">Mediu de testare securizat SUID</translation> @@ -660,7 +661,7 @@ <translation id="197288927597451399">Păstrează</translation> <translation id="1973491249112991739">Descărcarea pluginului <ph name="PLUGIN_NAME" /> a eșuat.</translation> <translation id="1974043046396539880">Puncte de distribuție CRL</translation> -<translation id="1974060860693918893">Avansat</translation> +<translation id="1974060860693918893">Avansate</translation> <translation id="1974371662733320303">Strategie de ștergere a memoriei de utilizat</translation> <translation id="197560921582345123">Poate edita</translation> <translation id="1975841812214822307">Elimină...</translation> @@ -1195,6 +1196,7 @@ <translation id="2743387203779672305">Copiați în clipboard</translation> <translation id="2744221223678373668">Comune</translation> <translation id="2745080116229976798">Subordonare calificată Microsoft</translation> +<translation id="2745576239403924641">Activează rularea aplicațiilor Android pe Chromebook.</translation> <translation id="2747990718031257077">Activează noul design al barei de instrumente pentru extensii (în curs de dezvoltare).</translation> <translation id="2749756011735116528">Conectează-te la <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Verificare gramaticală și ortografică</translation> @@ -1408,6 +1410,7 @@ <translation id="3011284594919057757">Despre Flash</translation> <translation id="3011362742078013760">Deschideți toate marcajele într-o &fereastră incognito</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Numai conexiunile securizate către același site</translation> <translation id="3012890944909934180">Relansați Chrome pe desktop</translation> <translation id="3012917896646559015">Contactați imediat producătorul hardware-ului pentru a vă trimite computerul la o unitate de reparații.</translation> <translation id="3015992588037997514">Acest cod apare pe ecranul Chromeboxului?</translation> @@ -1640,6 +1643,7 @@ <translation id="331752765902890099">Butonul <ph name="PROFILE_NAME" />: eroare la conectare</translation> <translation id="3319048459796106952">Fereastră nouă &incognito</translation> <translation id="331915893283195714">Permiteți tuturor site-urilor să dezactiveze cursorul mouse-ului</translation> +<translation id="3319364804843246307">Aplicații Android</translation> <translation id="3320859581025497771">operatorul tău</translation> <translation id="3323235640813116393">Permite salvarea paginilor în format MHTML: un singur fișier text care conține cod HTML și toate subresursele.</translation> <translation id="3323447499041942178">Casetă de text</translation> @@ -1744,6 +1748,7 @@ <translation id="347719495489420368">Clic dreapta pentru a reda <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">Permiteți în continuare accesul <ph name="HOST" /> la camera și microfonul dvs.</translation> <translation id="3478315065074101056">XPS permite opțiuni avansate pentru imprimantele clasice conectate la Cloud Print prin Chrome. Imprimantele trebuie să fie conectate din nou după modificarea acestui semnalizator.</translation> +<translation id="3479539252931486093">A fost o situație neașteptată? <ph name="BEGIN_LINK" />Anunță-ne<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Nu acum</translation> <translation id="3480892288821151001">Andocați fereastra la stânga</translation> <translation id="3481915276125965083">Următoarele ferestre pop-up au fost blocate pe această pagină:</translation> @@ -2717,6 +2722,7 @@ <translation id="4941246025622441835">Utilizați această solicitare pentru dispozitiv la înscrierea dispozitivului pentru gestionarea la nivel de întreprindere:</translation> <translation id="4942394808693235155">Caută și aplică actualizările</translation> <translation id="494286511941020793">Ajutor de configurare pentru proxy</translation> +<translation id="4945378551914476156">Marcajele, istoricul, parolele și alte setări vor fi sincronizate cu Contul Google, pentru a le putea folosi oriunde utilizezi Chrome. Poți modifica această opțiune în <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Opțiuni...</translation> <translation id="4952186391360931024">Non-material</translation> <translation id="4954544650880561668">Controlul dispozitivului</translation> @@ -2851,7 +2857,6 @@ <ph name="LINE_BREAKS" /> Dacă scoateți dispozitivul în timp ce este folosit, puteți pierde date. Așteptați finalizarea operației, apoi scoateți dispozitivul folosind aplicația Fișiere.</translation> <translation id="5159488553889181171">Descărcarea pluginului <ph name="PLUGIN_NAME" /> a fost anulată.</translation> -<translation id="5159628598068481063">Preferință privind redirecționarea căutărilor de pe desktopul Windows</translation> <translation id="5160857336552977725">Conectează-te la <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Trimiterea nu a reușit. Verificați conexiunea la internet și încercați din nou mai târziu.</translation> <translation id="516592729076796170">Programator S.U.A. Dvorak</translation> @@ -3219,7 +3224,6 @@ <translation id="567881659373499783">Versiunea <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Citește datele de pe <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Filtrarea textului în modul Prezentare generală</translation> -<translation id="568428328938709143">Cont eliminat</translation> <translation id="5684661240348539843">Identificator articol</translation> <translation id="569068482611873351">Importă...</translation> <translation id="56907980372820799">Conectați datele</translation> @@ -3459,6 +3463,7 @@ <translation id="604001903249547235">Backup în cloud</translation> <translation id="6040143037577758943">Închide</translation> <translation id="604124094241169006">Automat</translation> +<translation id="6042308850641462728">Mai multe</translation> <translation id="604257181445267932">Smart Lock te ajută să te conectezi rapid la aplicații și site-uri folosind parolele pe care le-ai salvat cu Google.</translation> <translation id="6049065490165456785">Fotografii de pe camera foto internă</translation> <translation id="6051028581720248124">Printând cu FedEx Office, sunteți de acord cu <ph name="START_LINK" />termenii și condițiile<ph name="END_LINK" /> acestui serviciu.</translation> @@ -3490,7 +3495,6 @@ <translation id="6089481419520884864">Faceți conversia paginii</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Se anulează actualizarea...</translation> -<translation id="6095149522260432647">Activează o preferință care permite redirecționarea căutărilor de pe desktopul Windows către motorul de căutare prestabilit.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Deschideți aplicația maximizată</translation> <translation id="6096326118418049043">Nume X.500</translation> @@ -4671,6 +4675,7 @@ <translation id="7926906273904422255">Marchează originile nesecurizate ca nesecurizate sau ca „îndoielnice”.</translation> <translation id="7928710562641958568">Scoateți dispozitivul</translation> <translation id="7938594894617528435">Offline în prezent</translation> +<translation id="7939374455203157513">Activează serviciile cloud</translation> <translation id="7939412583708276221">Păstrați oricum</translation> <translation id="7939997691108949385">Managerul va putea să configureze restricții și setări pentru acest utilizator monitorizat la <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">S.U.A. Colemak</translation> @@ -5221,6 +5226,7 @@ <translation id="872537912056138402">Croată</translation> <translation id="8726206820263995930">Eroare la preluarea setărilor politicii de pe server: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Afișează opțiunile pentru extensii ca element încorporat în chrome://extensions, în loc să deschidă o filă nouă.</translation> +<translation id="8727142376512517020">Nu mai afișa acest mesaj</translation> <translation id="8728672262656704056">Ați trecut în modul incognito</translation> <translation id="8730621377337864115">Terminat</translation> <translation id="8731332457891046104">Anulează înregistrarea dispozitivului <ph name="DEVICE_TYPE" /></translation> @@ -5383,7 +5389,6 @@ <translation id="8986362086234534611">Șterge</translation> <translation id="8986494364107987395">Trimite automat statisticile de utilizare și rapoartele de blocare la Google</translation> <translation id="8987927404178983737">Lună</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Adresă URL de bază pentru certificat Netscape</translation> <translation id="8994845581478641365">Creator de memorie cache pentru fontul DirectWrite</translation> <translation id="8995603266996330174">Gestionat de <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index 93cae3d..a8e3ae7 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">Вход</translation> <translation id="1864676585353837027">Измените настройки доступа к файлам.</translation> <translation id="1864756863218646478">Не удалось найти файл.</translation> +<translation id="1865769994591826607">Только соединения с тем же сайтом</translation> <translation id="186612162884103683">Расширению "<ph name="EXTENSION" />" будет предоставлен доступ для чтения и записи к изображениям, видео- и аудиофайлам в отмеченных папках.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> готов к завершению установки.</translation> <translation id="1873879463550486830">Песочница SUID</translation> @@ -1197,6 +1198,7 @@ <translation id="2743387203779672305">Скопировать в буфер</translation> <translation id="2744221223678373668">Общедоступные</translation> <translation id="2745080116229976798">Квалифицированное подчинение Microsoft</translation> +<translation id="2745576239403924641">Включить приложения Android на вашем Chromebook</translation> <translation id="2747990718031257077">Включить новое экспериментальное оформление панели инструментов расширений.</translation> <translation id="2749756011735116528">Войти в <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Проверять грамматику и правописание</translation> @@ -1410,6 +1412,7 @@ <translation id="3011284594919057757">О платформе Flash</translation> <translation id="3011362742078013760">Открыть все закладки в режиме &инкогнито</translation> <translation id="3012631534724231212">(окно iframe)</translation> +<translation id="3012804260437125868">Только безопасные соединения с тем же сайтом</translation> <translation id="3012890944909934180">Перезапустить Chrome в режиме рабочего стола</translation> <translation id="3012917896646559015">Обратитесь к производителю, чтобы отправить компьютер в сервисный центр.</translation> <translation id="3015992588037997514">Вы видите этот код на экране Chromebox?</translation> @@ -1642,6 +1645,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" />: ошибка входа</translation> <translation id="3319048459796106952">Новое окно в режиме &инкогнито</translation> <translation id="331915893283195714">Разрешить всем сайтам скрывать курсор</translation> +<translation id="3319364804843246307">Приложения Android</translation> <translation id="3320859581025497771">ваш оператор</translation> <translation id="3323235640813116393">Страницы будут сохраняться в формате MHTML (один текстовый файл с HTML-кодом и всеми вспомогательными ресурсами).</translation> <translation id="3323447499041942178">Текстовое поле</translation> @@ -1746,6 +1750,7 @@ <translation id="347719495489420368">Нажмите правую кнопку мыши, чтобы запустить <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">Предоставить сайту <ph name="HOST" /> доступ к камере и микрофону</translation> <translation id="3478315065074101056">XPS дает дополнительные возможности принтерам, подключенным к Виртуальному принтеру с помощью Chrome. После изменения этого параметра принтеры должны быть подключены заново.</translation> +<translation id="3479539252931486093">Этот сайт не должен быть заблокирован? <ph name="BEGIN_LINK" />Сообщите нам об этом<ph name="END_LINK" />.</translation> <translation id="3479552764303398839">Не сейчас</translation> <translation id="3480892288821151001">Закрепить окно слева</translation> <translation id="3481915276125965083">Заблокированы следующие всплывающие окна:</translation> @@ -2720,6 +2725,7 @@ <translation id="4941246025622441835">Воспользуйтесь этой заявкой при регистрации устройства в домене предприятия:</translation> <translation id="4942394808693235155">Поиск и установка обновлений</translation> <translation id="494286511941020793">Справка по конфигурации прокси-сервера</translation> +<translation id="4945378551914476156">Пароли, закладки, история и другие параметры будут синхронизированы с аккаунтом Google, чтобы они всегда были доступны вам при работе с Chrome. Изменить настройки синхронизации можно здесь: <ph name="BEGIN_LINK" />.</translation> <translation id="4950138595962845479">Параметры…</translation> <translation id="4952186391360931024">Обычный</translation> <translation id="4954544650880561668">Управление устройством</translation> @@ -2854,7 +2860,6 @@ <ph name="LINE_BREAKS" /> Дождитесь окончания операции и извлеките устройство с помощью приложения "Файлы". В противном случае некоторые данные могут быть утеряны.</translation> <translation id="5159488553889181171">Скачивание плагина <ph name="PLUGIN_NAME" /> отменено.</translation> -<translation id="5159628598068481063">Перенаправлять поисковые запросы с рабочего стола Windows</translation> <translation id="5160857336552977725">Войдите в аккаунт на устройстве <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Не удалось предоставить доступ. Проверьте подключение к сети и повторите попытку.</translation> <translation id="516592729076796170">Клавиатура Дворака для программистов (США)</translation> @@ -3222,7 +3227,6 @@ <translation id="567881659373499783">Версия <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Просмотр данных на сайте <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Текстовая фильтрация в обзорном режиме</translation> -<translation id="568428328938709143">Аккаунт удален</translation> <translation id="5684661240348539843">Идентификатор объекта</translation> <translation id="569068482611873351">Импорт...</translation> <translation id="56907980372820799">Связать аккаунты</translation> @@ -3462,6 +3466,7 @@ <translation id="604001903249547235">Резервное копирование в облако</translation> <translation id="6040143037577758943">Закрыть</translation> <translation id="604124094241169006">Автоматически</translation> +<translation id="6042308850641462728">Подробнее...</translation> <translation id="604257181445267932">Функция Smart Lock, которая использует сохраненные в Google пароли, позволяет быстро входить в аккаунты на сайтах и в приложениях.</translation> <translation id="6049065490165456785">Фотография с устройства</translation> <translation id="6051028581720248124">Выполняя печать в отделении FedEx, вы принимаете <ph name="START_LINK" />Условия использования<ph name="END_LINK" />.</translation> @@ -3493,7 +3498,6 @@ <translation id="6089481419520884864">Сжать страницу</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Отмена обновления...</translation> -<translation id="6095149522260432647">Перенаправлять запросы с рабочего стола Windows в поисковую систему по умолчанию</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Развернуть</translation> <translation id="6096326118418049043">Имя X.500</translation> @@ -4675,6 +4679,7 @@ <translation id="7926906273904422255">Незащищенные источники будут помечены как небезопасные или сомнительные.</translation> <translation id="7928710562641958568">Извлечь устройство</translation> <translation id="7938594894617528435">Сейчас не в Сети</translation> +<translation id="7939374455203157513">Включить облачные сервисы Google</translation> <translation id="7939412583708276221">Все равно продолжить</translation> <translation id="7939997691108949385">Менеджер сможет устанавливать ограничения и настройки для этого контролируемого профиля на странице <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">США (Colemak)</translation> @@ -5225,6 +5230,7 @@ <translation id="872537912056138402">Хорватский</translation> <translation id="8726206820263995930">Ошибка при получении настроек политики с сервера: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Показывать настройки расширения не в новой вкладке, а в виде встроенного элемента на странице chrome://extensions.</translation> +<translation id="8727142376512517020">Больше не показывать</translation> <translation id="8728672262656704056">Вы перешли в режим инкогнито</translation> <translation id="8730621377337864115">Готово</translation> <translation id="8731332457891046104">Отмена регистрации устройства <ph name="DEVICE_TYPE" /></translation> @@ -5387,7 +5393,6 @@ <translation id="8986362086234534611">Удалить</translation> <translation id="8986494364107987395">Автоматически отправлять в Google статистику использования и отчеты о сбоях</translation> <translation id="8987927404178983737">Месяц</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">URL базы сертификатов Netscape</translation> <translation id="8994845581478641365">Построитель кеша шрифтов для DirectWrite</translation> <translation id="8995603266996330174">В домене <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index 0dc541b..802bd57 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -185,7 +185,7 @@ <translation id="1272079795634619415">Zastaviť</translation> <translation id="1272978324304772054">Tento používateľský účet nepatrí do domény, do ktorej je zaregistrované toto zariadenie. Ak sa chcete zaregistrovať do inej domény, musíte najprv zariadenie obnoviť.</translation> <translation id="127353061808977798">Písma a kódovanie</translation> -<translation id="1274997165432133392">Súbory cookie a ďalšie údaje webových stránok</translation> +<translation id="1274997165432133392">Súbory cookie a ďalšie dáta webov</translation> <translation id="1275718070701477396">Vybraté</translation> <translation id="1278049586634282054">Skontrolovať zobrazenia:</translation> <translation id="1278813325885878377">Maďarská klávesnica QWERTY</translation> @@ -549,7 +549,7 @@ <translation id="1767519210550978135">Hsu</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="177336675152937177">Údaje hostených aplikácií</translation> +<translation id="177336675152937177">Dáta hostených aplikácií</translation> <translation id="1774367687019337077">Umožňuje používateľovi požiadať o stránky pre tablety. Webový obsah je často optimalizovaný pre tablety. Keď je táto možnosť vybratá, reťazec používateľského agenta sa zmení tak, aby označoval tablet. Potom sa na aktuálnej karte načíta webový obsah optimalizovaný pre tablety.</translation> <translation id="1774833706453699074">Pridať otvorené stránky medzi záložky...</translation> <translation id="1776883657531386793"><ph name="OID" />: <ph name="INFO" /></translation> @@ -606,6 +606,7 @@ <translation id="1864111464094315414">Prihlásiť sa</translation> <translation id="1864676585353837027">Zmeňte spôsob zdieľania týchto súborov</translation> <translation id="1864756863218646478">Súbor sa nepodarilo nájsť.</translation> +<translation id="1865769994591826607">Iba pripojenia z rovnakého webu</translation> <translation id="186612162884103683"><ph name="EXTENSION" /> môže čítať a zapisovať obrázky, video a zvukové súbory vo vybratých umiestneniach.</translation> <translation id="1867780286110144690">Aplikácia <ph name="PRODUCT_NAME" /> je pripravená dokončiť inštaláciu</translation> <translation id="1873879463550486830">Karanténa SUID</translation> @@ -748,7 +749,7 @@ <translation id="2113921862428609753">Prístup k informáciám certifikačnej autority</translation> <translation id="2114224913786726438">Moduly (<ph name="TOTAL_COUNT" />) – Nenašli sa žiadne konflikty</translation> <translation id="2115926821277323019">Musíte zadať platnú webovú adresu</translation> -<translation id="2116673936380190819">posledná hodina</translation> +<translation id="2116673936380190819">poslednú hodinu</translation> <translation id="2125314715136825419">Pokračovať bez aktualizácie programu Adobe Reader (neodporúčané)</translation> <translation id="2127166530420714525">Nepodarilo sa zmeniť stav napájania adaptéra Bluetooth.</translation> <translation id="2127372758936585790">Nabíjačka s nízkym výkonom</translation> @@ -1197,6 +1198,7 @@ <translation id="2743387203779672305">Kopírovať do schránky</translation> <translation id="2744221223678373668">Zdieľané</translation> <translation id="2745080116229976798">Oprávnené podriadenie od spoločnosti Microsoft</translation> +<translation id="2745576239403924641">Povoliť aplikácie pre Android na Chromebooku</translation> <translation id="2747990718031257077">Povolí (vo vývoji) nový vzhľad panela s nástrojmi rozšírení.</translation> <translation id="2749756011735116528">Prihlásiť sa do služby <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Skontrolovať gramatiku s pravopisom</translation> @@ -1410,6 +1412,7 @@ <translation id="3011284594919057757">O formáte Flash</translation> <translation id="3011362742078013760">Otvoriť všetky záložky v okne &inkognito</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Iba zabezpečené pripojenia z rovnakého webu</translation> <translation id="3012890944909934180">Spustiť Chrome znova na pracovnej ploche</translation> <translation id="3012917896646559015">Okamžite kontaktujte výrobcu hardvéru, aby počítač poslal na opravu.</translation> <translation id="3015992588037997514">Zobrazuje sa tento kód na obrazovke vášho zariadenia Chromebox?</translation> @@ -1642,6 +1645,7 @@ <translation id="331752765902890099">Tlačidlo <ph name="PROFILE_NAME" /> : chyba prihlásenia</translation> <translation id="3319048459796106952">Nové okno i&nkognito</translation> <translation id="331915893283195714">Všetkým webovým stránkam povoliť zakázanie kurzora myši</translation> +<translation id="3319364804843246307">Aplikácie pre Android</translation> <translation id="3320859581025497771">váš operátor</translation> <translation id="3323235640813116393">Povolí ukladanie stránok iba vo formáte MHTML, t. j. do jedného textového súboru s kódom HTML a so všetkými čiastkovými zdrojmi.</translation> <translation id="3323447499041942178">Textové pole</translation> @@ -1746,6 +1750,7 @@ <translation id="347719495489420368">Doplnok <ph name="PLUGIN_NAME" /> spustíte kliknutím pravým tlačidlom myši.</translation> <translation id="347785443197175480">Aj naďalej povoliť stránkam <ph name="HOST" /> prístup ku kamere a mikrofónu</translation> <translation id="3478315065074101056">Funkcia XPS umožní klasickým tlačiarňam pripojeným k službe Cloud Print pomocou prehliadača Chrome používať rozšírené možnosti. Po zmenení tohto príznaku je potrebné tlačiarne znova pripojiť.</translation> +<translation id="3479539252931486093">Neočakávali ste to? <ph name="BEGIN_LINK" />Povedzte nám o tom<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Teraz nie</translation> <translation id="3480892288821151001">Prichytiť okno vľavo</translation> <translation id="3481915276125965083">Na tejto stránke boli zablokované nasledujúce kontextové okná:</translation> @@ -2034,7 +2039,7 @@ <translation id="3835522725882634757">Tento server odosiela údaje, ktoré sú pre prehliadač <ph name="PRODUCT_NAME" /> nezrozumiteľné. <ph name="BEGIN_LINK" />Nahláste chybu<ph name="END_LINK" /> a priložte <ph name="BEGIN2_LINK" />nespracovaný záznam<ph name="END2_LINK" />.</translation> <translation id="383652340667548381">Srbčina</translation> <translation id="3838486795898716504">Ďalšie <ph name="PAGE_TITLE" /></translation> -<translation id="3838543471119263078">Súbory cookie a ďalšie údaje webových stránok a doplnkov</translation> +<translation id="3838543471119263078">Súbory cookie a ďalšie dáta webov a doplnkov</translation> <translation id="3839497635014791588">Dodatočná dotyková spätná väzba pre komponenty používateľského rozhrania</translation> <translation id="3840053866656739575">Pripojenie k vášmu zariadeniu Chromebox bolo stratené. Priblížte sa alebo skontrolujte svoje zariadenie, zatiaľ čo prebehne pokus o opätovné pripojenie.</translation> <translation id="3842552989725514455">Pätkové písmo</translation> @@ -2719,6 +2724,7 @@ <translation id="4941246025622441835">Pri zaraďovaní zariadenia do správy firmy použite nasledujúcu rekvizíciu zariadenia:</translation> <translation id="4942394808693235155">Aktualizácie – skontrolovať dostupnosť a nainštalovať</translation> <translation id="494286511941020793">Pomocník konfigurácie servera proxy</translation> +<translation id="4945378551914476156">Záložky, história, heslá a ďalšie nastavenia budú synchronizované s vaším účtom Google a budete ich môcť použiť všade tam, kde používate Chrome. Môžete to zmeniť v časti <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Možnosti...</translation> <translation id="4952186391360931024">Iný vzhľad než Material</translation> <translation id="4954544650880561668">Ovládanie zariadenia</translation> @@ -2853,7 +2859,6 @@ <ph name="LINE_BREAKS" /> Odpojením zariadenia počas používania môžete spôsobiť stratu údajov. Počkajte na dokončenie operácie a následne zariadenie vysuňte pomocou aplikácie Súbory.</translation> <translation id="5159488553889181171">Sťahovanie doplnku <ph name="PLUGIN_NAME" /> bolo zrušené.</translation> -<translation id="5159628598068481063">Predvoľba presmerovania vyhľadávania z pracovnej plochy systému Windows</translation> <translation id="5160857336552977725">Prihláste sa do svojho zariadenia <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Zdieľanie zlyhalo. Skontrolujte pripojenie a skúste to znova neskôr.</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> @@ -3221,7 +3226,6 @@ <translation id="567881659373499783">Verzia <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Čítať vaše údaje na: <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Filtrovať text v režime prehľadu</translation> -<translation id="568428328938709143">Účet bol odstránený</translation> <translation id="5684661240348539843">Identifikátor obsahu</translation> <translation id="569068482611873351">Importovať...</translation> <translation id="56907980372820799">Prepojiť údaje</translation> @@ -3463,6 +3467,7 @@ <translation id="604001903249547235">Záloha v cloude</translation> <translation id="6040143037577758943">Zatvoriť</translation> <translation id="604124094241169006">Automatické</translation> +<translation id="6042308850641462728">Viac</translation> <translation id="604257181445267932">Funkcia Smart Lock vám umožňuje rýchlo sa prihlásiť do aplikácií a na webových stránkach pomocou hesiel uložených na Googli.</translation> <translation id="6049065490165456785">Fotografia z vnútorného fotoaparátu</translation> <translation id="6051028581720248124">Ak tlačíte v službe FedEx Office, súhlasíte s jej <ph name="START_LINK" />zmluvnými podmienkami<ph name="END_LINK" />.</translation> @@ -3494,7 +3499,6 @@ <translation id="6089481419520884864">Destilovať stránku</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Zrušenie aktualizácie...</translation> -<translation id="6095149522260432647">Tento príznak povolí predvoľbu umožňujúcu presmerovanie vyhľadávaní z pracovnej plochy systému Windows do predvoleného vyhľadávača.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Otvoriť maximalizované</translation> <translation id="6096326118418049043">Názov X.500</translation> @@ -3897,7 +3901,7 @@ <translation id="6731320427842222405">Môže to trvať niekoľko minút</translation> <translation id="6731638353631257659">Režim ukladania do vyrovnávacej pamäte V8</translation> <translation id="6732586201820838268">Nepodarilo sa nadviazať spojenie s vaším telefónom. Uistite sa, že používate kompatibilný telefón s Androidom, ktorý je zapnutý a v dosahu. <a>Ďalšie informácie</a></translation> -<translation id="6735304988756581115">Zobraziť súbory cookie a ďalšie údaje webových stránok...</translation> +<translation id="6735304988756581115">Zobraziť súbory cookie a ďalšie dáta webov…</translation> <translation id="6736045498964449756">Hops, heslá sa nezhodujú.</translation> <translation id="6736329909263487977"><ph name="ISSUED_BY" /> [ <ph name="ISSUED_TO" /> ]</translation> <translation id="6739254200873843030">Platnosť tejto karty vypršala. Skontrolujte dátum alebo zadajte novú kartu.</translation> @@ -3971,7 +3975,7 @@ <translation id="6860097299815761905">Nastavenia servera proxy...</translation> <translation id="6860427144121307915">Otvoriť na karte</translation> <translation id="6862635236584086457">Všetky súbory uložené v tomto priečinku sa automaticky zálohujú online</translation> -<translation id="6865313869410766144">Údaje formulára Automatické dopĺňanie</translation> +<translation id="6865313869410766144">Dáta automatického dopĺňania formulárov</translation> <translation id="6865319096921627602">Povoliť jednotný tok médií v systéme Android</translation> <translation id="6867678160199975333">Prepnúť na používateľa <ph name="NEW_PROFILE_NAME" /></translation> <translation id="6869402422344886127">Vybraté začiarkavacie políčko</translation> @@ -4512,7 +4516,7 @@ <translation id="7685049629764448582">Pamäť jazyka JavaScript</translation> <translation id="7687314205250676044">Zmeniť späť na miestne nastavenie <ph name="FROM_LOCALE" /> (vyžaduje sa odhlásenie)</translation> <translation id="7690853182226561458">Pridať &priečinok...</translation> -<translation id="7693221960936265065">všetko</translation> +<translation id="7693221960936265065">celú dobu</translation> <translation id="769569204874261517"><ph name="USER_DISPLAY_NAME" /> (už je na tomto zariadení)</translation> <translation id="770015031906360009">Gréčtina</translation> <translation id="7701040980221191251">Žiadne</translation> @@ -4677,6 +4681,7 @@ <translation id="7926906273904422255">Označiť nezabezpečené zdroje ako Nezabezpečené alebo Pochybné.</translation> <translation id="7928710562641958568">Vysunúť zariadenie</translation> <translation id="7938594894617528435">Momentálne offline</translation> +<translation id="7939374455203157513">Povoliť cloudové služby</translation> <translation id="7939412583708276221">Aj tak ponechať</translation> <translation id="7939997691108949385">Správca bude môcť nakonfigurovať obmedzenia a nastavenia pre tohto kontrolovaného používateľa na adrese <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">Americká klávesnica s rozložením klávesov Colemak</translation> @@ -5228,6 +5233,7 @@ <translation id="872537912056138402">Chorvátčina</translation> <translation id="8726206820263995930">Pri načítavaní nastavení pravidla zo servera sa vyskytla chyba: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Zobraziť možnosti rozšírenia ako vložený prvok na stránke chrome://extensions namiesto otvorenia novej karty.</translation> +<translation id="8727142376512517020">Viac nezobrazovať</translation> <translation id="8728672262656704056">Ste v režime inkognito</translation> <translation id="8730621377337864115">Hotovo</translation> <translation id="8731332457891046104">Zrušiť registráciu zariadenia <ph name="DEVICE_TYPE" /></translation> @@ -5390,7 +5396,6 @@ <translation id="8986362086234534611">Odstrániť</translation> <translation id="8986494364107987395">Automaticky odosielať štatistiky o používaní a správy o zlyhaní spoločnosti Google</translation> <translation id="8987927404178983737">Mesiac</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Netscape – základná webová adresa certifikátu</translation> <translation id="8994845581478641365">DirectWrite Font Cache Builder</translation> <translation id="8995603266996330174">Spravované doménou <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index 8e45184..20aa121 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -607,6 +607,7 @@ <translation id="1864111464094315414">Prijava</translation> <translation id="1864676585353837027">Spremenite način skupne rabe teh datotek</translation> <translation id="1864756863218646478">Datoteke ni bilo mogoče najti.</translation> +<translation id="1865769994591826607">Samo povezave z istim spletnim mestom</translation> <translation id="186612162884103683">Razširitev »<ph name="EXTENSION" />« lahko prebere slike ter videodatoteke in zvočne datoteke na označenih lokacijah.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> je pripravljen, da konča namestitev</translation> <translation id="1873879463550486830">Varnostne omejitve SUID</translation> @@ -1197,6 +1198,7 @@ <translation id="2743387203779672305">Kopiraj v odložišče</translation> <translation id="2744221223678373668">V skupni rabi</translation> <translation id="2745080116229976798">Microsoftova kvalificirana podrejenost</translation> +<translation id="2745576239403924641">Omogočanje izvajanja aplikacij za Android v Chromebooku.</translation> <translation id="2747990718031257077">Omogoča (v razvoju) novo oblikovanje orodne vrstice razširitve.</translation> <translation id="2749756011735116528">Prijavite se v storitev <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Preverjanje slovnice in črkovanja</translation> @@ -1410,6 +1412,7 @@ <translation id="3011284594919057757">O programu Flash</translation> <translation id="3011362742078013760">Vse zaznamke odpri v &oknu brez beleženja zgodovine</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Samo varne povezave z istim spletnim mestom</translation> <translation id="3012890944909934180">Vnovični zagon Chroma na namizju</translation> <translation id="3012917896646559015">Takoj se obrnite na proizvajalca strojne opreme glede pošiljanja računalnika na servis.</translation> <translation id="3015992588037997514">Ali je na zaslonu Chromeboxa prikazana ta koda?</translation> @@ -1643,6 +1646,7 @@ <translation id="331752765902890099">Gumb profila <ph name="PROFILE_NAME" />: napaka pri prijavi</translation> <translation id="3319048459796106952">Novo &okno brez beleženja zgodovine</translation> <translation id="331915893283195714">Dovoli vsem spletnim mestom, da onemogočijo miškin kazalec</translation> +<translation id="3319364804843246307">Aplikacije za Android</translation> <translation id="3320859581025497771">vaš operater</translation> <translation id="3323235640813116393">Omogoča shranjevanje strani v obliki MHTML: ena besedilna datoteka, ki vsebuje HTML in vse podrejene vire.</translation> <translation id="3323447499041942178">Besedilno polje</translation> @@ -1747,6 +1751,7 @@ <translation id="347719495489420368">Če želite predvajati <ph name="PLUGIN_NAME" />, kliknite z desno tipko.</translation> <translation id="347785443197175480">Še naprej omogočaj gostitelju <ph name="HOST" /> dostop do kamere in mikrofona</translation> <translation id="3478315065074101056">XPS omogoča dodatne možnosti za klasične tiskalnike, ki so povezani z Google Tiskanjem v oblaku v Chromu. Po spremembi te zastavice je treba tiskalnike znova povezati.</translation> +<translation id="3479539252931486093">Ali tega niste pričakovali? <ph name="BEGIN_LINK" />Sporočite nam<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Ne zdaj</translation> <translation id="3480892288821151001">Zasidraj okno levo</translation> <translation id="3481915276125965083">Na tej strani so blokirana ta pojavna okna:</translation> @@ -2721,6 +2726,7 @@ <translation id="4941246025622441835">Uporaba te zahteva za napravo pri včlanjevanju naprave za upravljanje v velikih poslovnih okoljih:</translation> <translation id="4942394808693235155">Poišči in namesti posodobitve</translation> <translation id="494286511941020793">Pomoč pri nastavitvi strežnika proxy</translation> +<translation id="4945378551914476156">Vaši zaznamki, zgodovina, gesla in druge nastavitve bodo sinhronizirani z Google Računom, tako da jih boste uporabljali povsod, kjer uporabljate Chrome. To nastavitev lahko spremenite na <ph name="BEGIN_LINK" />.</translation> <translation id="4950138595962845479">Možnosti ...</translation> <translation id="4952186391360931024">Nematerialno</translation> <translation id="4954544650880561668">Nadzor naprav</translation> @@ -2855,7 +2861,6 @@ <ph name="LINE_BREAKS" /> Če odstranite napravo, ko je še v uporabi, lahko izgubite podatke. Počakajte do konca postopka in nato napravo izvrzite z aplikacijo Datoteke.</translation> <translation id="5159488553889181171">Prenos vtičnika <ph name="PLUGIN_NAME" /> je bil preklican.</translation> -<translation id="5159628598068481063">Izbira preusmeritve pri iskanju na namizju v sistemu Windows</translation> <translation id="5160857336552977725">Prijavite se v napravo <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Souporaba ni uspela. Preverite povezavo in poskusite znova.</translation> <translation id="516592729076796170">Angleška tipkovnica Dvorak za programerje (ZDA)</translation> @@ -3224,7 +3229,6 @@ <translation id="567881659373499783">Različica <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Branje vaših podatkov na spletnem mestu <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Filtriranje besedila v načinu pregleda</translation> -<translation id="568428328938709143">Račun odstranjen</translation> <translation id="5684661240348539843">ID sredstva</translation> <translation id="569068482611873351">Uvozi ...</translation> <translation id="56907980372820799">Poveži podatke</translation> @@ -3466,6 +3470,7 @@ <translation id="604001903249547235">Varnostno kopiranje v oblak</translation> <translation id="6040143037577758943">Zapri</translation> <translation id="604124094241169006">Samodejno</translation> +<translation id="6042308850641462728">Več</translation> <translation id="604257181445267932">Funkcija Smart Lock vam pomaga pri hitrejši prijavi v aplikacije in na spletnih mestih z gesli, ki ste jih shranili v Googlu.</translation> <translation id="6049065490165456785">Fotografija iz notranjega fotoaparata</translation> <translation id="6051028581720248124">S tiskanjem v FedExovi poslovalnici sprejemate njihove <ph name="START_LINK" />pogoje uporabe<ph name="END_LINK" />.</translation> @@ -3497,7 +3502,6 @@ <translation id="6089481419520884864">Ustvari povzetek strani</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Preklic posodabljanja ...</translation> -<translation id="6095149522260432647">Omogoča nastavitev, ki dovoljuje preusmeritev iskanja na namizju v sistemu Windows v privzeti iskalnik.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Odpri povečano</translation> <translation id="6096326118418049043">Ime X.500</translation> @@ -4677,6 +4681,7 @@ <translation id="7926906273904422255">Izvore, ki niso varni, označi tako, da niso varni ali so »vprašljivi«.</translation> <translation id="7928710562641958568">Izpni napravo</translation> <translation id="7938594894617528435">Trenutno brez povezave</translation> +<translation id="7939374455203157513">Omogočanje storitev v oblaku</translation> <translation id="7939412583708276221">Vseeno obdrži</translation> <translation id="7939997691108949385">Upravitelj bo lahko na <ph name="MANAGEMENT_URL" /> nastavil omejitve in nastavitve za tega nadzorovanega uporabnika.</translation> <translation id="7943385054491506837">Združene države – Colemak</translation> @@ -5229,6 +5234,7 @@ <translation id="872537912056138402">hrvaščina</translation> <translation id="8726206820263995930">Napaka pri prenosu nastavitev pravilnika iz strežnika: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Prikaz možnosti razširitve kot vdelan element v chrome://extensions namesto odpiranja novega zavihka.</translation> +<translation id="8727142376512517020">Ne prikaži več tega</translation> <translation id="8728672262656704056">Uporabljate način brez beleženja zgodovine</translation> <translation id="8730621377337864115">Končano</translation> <translation id="8731332457891046104">Preklic včlanitve naprave <ph name="DEVICE_TYPE" /></translation> @@ -5391,7 +5397,6 @@ <translation id="8986362086234534611">Pozabi</translation> <translation id="8986494364107987395">Samodejno pošlji statistiko uporabe in poročila o zrušitvi Googlu</translation> <translation id="8987927404178983737">Mesec</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Osnovni spletni naslov Netscapeovega potrdila</translation> <translation id="8994845581478641365">Pripomoček za ustvarjanje predpomnilnika za pisavo DirectWrite</translation> <translation id="8995603266996330174">Upravljavec: <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 1221e294..267af8e 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -603,6 +603,7 @@ <translation id="1864111464094315414">Пријављивање</translation> <translation id="1864676585353837027">Промените начин дељења ових датотека</translation> <translation id="1864756863218646478">Није могуће пронаћи датотеку.</translation> +<translation id="1865769994591826607">Само везе са истим сајтом</translation> <translation id="186612162884103683">„<ph name="EXTENSION" />“ може да чита слике, видео и аудио датотеке на наведеним локацијама, као и да уписује податке у њих.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> је спреман да доврши инсталацију</translation> <translation id="1873879463550486830">SUID заштићено окружење</translation> @@ -1192,6 +1193,7 @@ <translation id="2743387203779672305">Копирај у меморију</translation> <translation id="2744221223678373668">Дељено</translation> <translation id="2745080116229976798">Microsoft квалификовано подређивање</translation> +<translation id="2745576239403924641">Омогућите покретање Android апликација на Chromebook-у.</translation> <translation id="2747990718031257077">Омогућава нови дизајн траке са алаткама за додатке (у развоју).</translation> <translation id="2749756011735116528">Пријави ме на производ <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Провери граматику и правопис</translation> @@ -1405,6 +1407,7 @@ <translation id="3011284594919057757">О Flash-у</translation> <translation id="3011362742078013760">Отвори све обележиваче у &прозору за прегледање без архивирања</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Само безбедне везе са истим сајтом</translation> <translation id="3012890944909934180">Поново покрени Chrome на рачунару</translation> <translation id="3012917896646559015">Одмах контактирајте произвођача хардвера да бисте послали рачунар у сервис.</translation> <translation id="3015992588037997514">Да ли се овај кôд појављује на екрану Chromebox-а?</translation> @@ -1638,6 +1641,7 @@ <translation id="331752765902890099">Дугме <ph name="PROFILE_NAME" />: грешка при пријављивању</translation> <translation id="3319048459796106952">Нови &прозор „Без архивирања“</translation> <translation id="331915893283195714">Дозволи да било који сајт онемогући курсор</translation> +<translation id="3319364804843246307">Android апликације</translation> <translation id="3320859581025497771">ваш мобилни оператер</translation> <translation id="3323235640813116393">Омогућава чување страница у MHTML формату: једној текстуалној датотеци која садржи HTML и све подресурсе.</translation> <translation id="3323447499041942178">Оквир за текст</translation> @@ -1742,6 +1746,7 @@ <translation id="347719495489420368">Кликните десним тастером да бисте покренули <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">И даље дозвољавај сајту <ph name="HOST" /> да приступа камери и микрофону</translation> <translation id="3478315065074101056">XPS омогућава напредне опције за класичне штампаче повезане са Cloud штампањем помоћу Chrome-а. Морате поново да повежете штампаче када промените ово обележје.</translation> +<translation id="3479539252931486093">Да ли је ово било неочекивано? <ph name="BEGIN_LINK" />Обавестите нас<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Не сада</translation> <translation id="3480892288821151001">Спајање прозора са леве стране</translation> <translation id="3481915276125965083">Следећи искачући прозори су блокирани на овој страници:</translation> @@ -2313,7 +2318,7 @@ <translation id="4298972503445160211">Језик тастатуре: дански</translation> <translation id="4299273509016391946">Омогућава поље за потврду за поједностављивање страница у дијалогу прегледа пре штампања</translation> <translation id="4299729908419173967">португалски (Бразил)</translation> -<translation id="4301786491084298653">Онемогући на <ph name="DOMAIN" /></translation> +<translation id="4301786491084298653">Онемогући за <ph name="DOMAIN" /></translation> <translation id="4304224509867189079">Пријављивање</translation> <translation id="430714521864499800">Омогућава експерименталну примену директиве „Cache-Control: stale-while-revalidate“. То дозвољава серверима да наведу да ће неки ресурси можда бити поново проверени у позадини да би се смањило кашњење.</translation> <translation id="4307281933914537745">Сазнајте више о обнављању система</translation> @@ -2658,7 +2663,7 @@ <translation id="4861833787540810454">&Пусти</translation> <translation id="4862050643946421924">Додаје се уређај...</translation> <translation id="4862642413395066333">Потписивање OCSP одговора</translation> -<translation id="4865571580044923428">Управљај изузецима...</translation> +<translation id="4865571580044923428">Управљајте изузецима...</translation> <translation id="4870177177395420201"><ph name="PRODUCT_NAME" /> не може да одреди нити да подеси подразумевани прегледач.</translation> <translation id="4871210892959306034">$1 kB</translation> <translation id="4871308555310586478">Није из Chrome веб-продавнице.</translation> @@ -2716,6 +2721,7 @@ <translation id="4941246025622441835">Користи овај захтев за уређај при регистрацији уређаја за управљање предузећем:</translation> <translation id="4942394808693235155">Потражи и примени ажурирања</translation> <translation id="494286511941020793">Помоћ за конфигурацију проксија</translation> +<translation id="4945378551914476156">Обележивачи, историја, лозинке и друга подешавања ће се синхронизовати са Google налогом да бисте могли да их користите свуда где користите Chrome. То можете да промените у одељку <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Опције...</translation> <translation id="4952186391360931024">Није за Material</translation> <translation id="4954544650880561668">Контрола уређаја</translation> @@ -2850,7 +2856,6 @@ <ph name="LINE_BREAKS" /> Ако уклоните уређај док се још користи, може да дође до губитка података. Сачекајте да се операција заврши, па избаците уређај помоћу апликације Датотеке.</translation> <translation id="5159488553889181171">Преузимање додатне компоненте <ph name="PLUGIN_NAME" /> је отказано.</translation> -<translation id="5159628598068481063">Подешавање преусмеравања претрага на Windows радној површини</translation> <translation id="5160857336552977725">Пријавите се на <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Дељење није успело. Проверите везу и покушајте поново касније.</translation> <translation id="516592729076796170">Америчка Дворак тастатура за програмере</translation> @@ -3219,7 +3224,6 @@ <translation id="567881659373499783">Верзија <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Читање ваших података на <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Филтрирање помоћу текста у Режиму прегледа</translation> -<translation id="568428328938709143">Налог је уклоњен</translation> <translation id="5684661240348539843">Идентификатор елемента</translation> <translation id="569068482611873351">Увези...</translation> <translation id="56907980372820799">Повежи податке</translation> @@ -3462,6 +3466,7 @@ <translation id="604001903249547235">Прављење резервних копија у клауду</translation> <translation id="6040143037577758943">Затвори</translation> <translation id="604124094241169006">Аутоматски</translation> +<translation id="6042308850641462728">Више</translation> <translation id="604257181445267932">Smart Lock вам помаже да се брзо пријавите у апликације и на сајтове који користе лозинке које сте сачували на Google-у.</translation> <translation id="6049065490165456785">Слика са интерне камере</translation> <translation id="6051028581720248124">Штампањем у FedEx продавници прихватате њихове <ph name="START_LINK" />услове коришћења услуге<ph name="END_LINK" />.</translation> @@ -3493,7 +3498,6 @@ <translation id="6089481419520884864">Пречишћавање странице</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Отказивање ажурирања...</translation> -<translation id="6095149522260432647">Омогућава подешавање које дозвољава преусмеравање претрага на Windows радној површини у подразумевани претраживач.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Отвори увећано</translation> <translation id="6096326118418049043">X.500 име</translation> @@ -4669,6 +4673,7 @@ <translation id="7926906273904422255">Обележава небезбедно порекло као небезбедно или као „сумњиво“.</translation> <translation id="7928710562641958568">Избаци уређај</translation> <translation id="7938594894617528435">Тренутно је ван мреже</translation> +<translation id="7939374455203157513">Омогући Cloud услуге</translation> <translation id="7939412583708276221">Ипак задржи</translation> <translation id="7939997691108949385">Менаџер ће моћи да конфигурише ограничења и подешавања за овог корисника под надзором на <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">америчка Colemak</translation> @@ -5221,6 +5226,7 @@ <translation id="872537912056138402">хрватски</translation> <translation id="8726206820263995930">Грешка при преузимању подешавања смерница са сервера: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Приказујте опције додатака као уграђени елемент у chrome://extensions уместо да отварате нову картицу.</translation> +<translation id="8727142376512517020">Не приказуј ово поново</translation> <translation id="8728672262656704056">Прешли сте у режим Без архивирања</translation> <translation id="8730621377337864115">Готово</translation> <translation id="8731332457891046104">Опозовите регистрацију уређаја <ph name="DEVICE_TYPE" /></translation> @@ -5383,7 +5389,6 @@ <translation id="8986362086234534611">Заборави</translation> <translation id="8986494364107987395">Аутоматски шаљи Google-у статистичке податке о коришћењу и извештаје о отказивању</translation> <translation id="8987927404178983737">Месец</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Основна URL адреса за Netscape сертификат</translation> <translation id="8994845581478641365">Прављење кеша DirectWrite фонтова</translation> <translation id="8995603266996330174">Управља <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index 4613e53..01cf81d5 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -605,6 +605,7 @@ <translation id="1864111464094315414">Inloggning</translation> <translation id="1864676585353837027">Ändra hur dessa filer delas</translation> <translation id="1864756863218646478">Filen hittades inte.</translation> +<translation id="1865769994591826607">Endast anslutningar på samma webbplats</translation> <translation id="186612162884103683"><ph name="EXTENSION" /> kan läsa och skriva bilder, video och ljudfiler på de markerade platserna.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> kan nu slutföra installationen</translation> <translation id="1873879463550486830">SUID-sandlåda</translation> @@ -1195,6 +1196,7 @@ <translation id="2743387203779672305">Kopiera till Urklipp</translation> <translation id="2744221223678373668">Delade</translation> <translation id="2745080116229976798">Microsofts kvalificerade underordning</translation> +<translation id="2745576239403924641">Aktivera Android-appar på Chromebook.</translation> <translation id="2747990718031257077">Aktiverar den nya utformningen (under utveckling) av tilläggsfältet.</translation> <translation id="2749756011735116528">Logga in på <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Kontrollera grammatik och stavning</translation> @@ -1410,6 +1412,7 @@ <translation id="3011284594919057757">Om Flash</translation> <translation id="3011362742078013760">Öppna alla bokmärken i ett &inkognitofönster</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Endast säkra anslutningar på samma webbplats</translation> <translation id="3012890944909934180">Starta om Chrome på datorn</translation> <translation id="3012917896646559015">Kontakta maskinvarutillverkaren omedelbart om du vill skicka datorn till en reparationsverkstad.</translation> <translation id="3015992588037997514">Visas den här koden på skärmen i din Chromebook?</translation> @@ -1643,6 +1646,7 @@ <translation id="331752765902890099">Knapp för <ph name="PROFILE_NAME" />: inloggningsfel</translation> <translation id="3319048459796106952">Nytt &inkognitofönster</translation> <translation id="331915893283195714">Tillåt alla webbplatser att inaktivera muspekaren</translation> +<translation id="3319364804843246307">Android-appar</translation> <translation id="3320859581025497771">din operatör</translation> <translation id="3323235640813116393">När det här alternativet är aktiverat kan du spara sidor som MHTML: en enda textfil med HTML-koden och alla dess underresurser.</translation> <translation id="3323447499041942178">Textruta</translation> @@ -1747,6 +1751,7 @@ <translation id="347719495489420368">Högerklicka för att spela upp <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">Fortsätt tillåta att <ph name="HOST" /> använder kameran och mikrofonen</translation> <translation id="3478315065074101056">Med XPS blir avancerade alternativ tillgängliga för klassiska skrivare som är anslutna till Cloud Print med Chrome. Skrivarna måste anslutas på nytt när den här flaggan har ändrats.</translation> +<translation id="3479539252931486093">Var det här oväntat? <ph name="BEGIN_LINK" />Meddela oss<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Inte nu</translation> <translation id="3480892288821151001">Docka fönstret till vänster</translation> <translation id="3481915276125965083">Följande popup-fönster blockerades på den här sidan:</translation> @@ -2721,6 +2726,7 @@ <translation id="4941246025622441835">Använd den här enhetsanmälan när enheten upptas för företagshantering:</translation> <translation id="4942394808693235155">Sök efter och installera uppdateringar</translation> <translation id="494286511941020793">Hjälp för proxykonfiguration</translation> +<translation id="4945378551914476156">Bokmärken, historik, lösenord och andra liknande inställningar synkroniseras med Google-kontot så att du kan använda dem på alla ställen där du använder Chrome. Du kan ändra det här i <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Alternativ...</translation> <translation id="4952186391360931024">Inte Material Design</translation> <translation id="4954544650880561668">Enhetskontroll</translation> @@ -2855,7 +2861,6 @@ <ph name="LINE_BREAKS" /> Om du tar bort enheten medan den används kan du förlora data. Vänta tills åtgärden är slutförd och koppla sedan från enheten med appen Files.</translation> <translation id="5159488553889181171">Nedladdningen av <ph name="PLUGIN_NAME" /> avbröts.</translation> -<translation id="5159628598068481063">Inställning för omdirigering av sökning på Windows-skrivbord</translation> <translation id="5160857336552977725">Logga in på din <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Delningen misslyckades. Kontrollera anslutningen och försök igen senare.</translation> <translation id="516592729076796170">Dvorak för programmerare i USA</translation> @@ -3223,7 +3228,6 @@ <translation id="567881659373499783">Version <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Läsa din data på <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Textfiltrering i översiktsläge</translation> -<translation id="568428328938709143">Kontot har tagits bort</translation> <translation id="5684661240348539843">Tillgångsidentifierare</translation> <translation id="569068482611873351">Importera...</translation> <translation id="56907980372820799">Länkdata</translation> @@ -3465,6 +3469,7 @@ <translation id="604001903249547235">Säkerhetskopiering i molnet</translation> <translation id="6040143037577758943">Stäng</translation> <translation id="604124094241169006">Automatisk</translation> +<translation id="6042308850641462728">Mer</translation> <translation id="604257181445267932">Med Smart Lock kan du snabbt logga in i appar och på webbplatser med lösenord som du har sparat hos Google.</translation> <translation id="6049065490165456785">Bild från intern kamera</translation> <translation id="6051028581720248124">När du skriver ut till ett FedEx Office-kontor accepterar du deras <ph name="START_LINK" />användarvillkor<ph name="END_LINK" />.</translation> @@ -3496,7 +3501,6 @@ <translation id="6089481419520884864">Skapa Distiller-sida</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Avbryter uppdatering ...</translation> -<translation id="6095149522260432647">Aktiverar inställningen som gör att sökningar på Windows-skrivbordet kan omdirigeras till standardsökmotorn.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Öppna maximerad</translation> <translation id="6096326118418049043">X.500-namn</translation> @@ -4676,6 +4680,7 @@ <translation id="7926906273904422255">Markera osäkra källor som osäkra eller som tvivelaktiga.</translation> <translation id="7928710562641958568">Mata ut enhet</translation> <translation id="7938594894617528435">Offline just nu</translation> +<translation id="7939374455203157513">Aktivera molntjänster</translation> <translation id="7939412583708276221">Behåll ändå</translation> <translation id="7939997691108949385">Övervakaren kommer att kunna konfigurera begränsningar och inställningar för denna hanterade användare på <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">USA (colemak)</translation> @@ -5226,6 +5231,7 @@ <translation id="872537912056138402">kroatiska</translation> <translation id="8726206820263995930">Det uppstod ett fel när policyinställningarna hämtades från servern: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Visa tilläggsalternativ som ett inbäddat element i chrome://extensions i stället för att öppna en ny flik.</translation> +<translation id="8727142376512517020">Visa inte det här igen</translation> <translation id="8728672262656704056">Du surfar inkognito.</translation> <translation id="8730621377337864115">Klart</translation> <translation id="8731332457891046104">Avregistrera <ph name="DEVICE_TYPE" /></translation> @@ -5388,7 +5394,6 @@ <translation id="8986362086234534611">Glöm</translation> <translation id="8986494364107987395">Skicka användningsstatistik och kraschrapporter till Google automatiskt</translation> <translation id="8987927404178983737">Månad</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Basadress för Netscape-certifikat</translation> <translation id="8994845581478641365">Byggverktyg för cacheminne för DirectWrite-teckensnitt</translation> <translation id="8995603266996330174">Hanteras av <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index 4b43696..d100d331 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -604,6 +604,7 @@ <translation id="1864111464094315414">Ingia</translation> <translation id="1864676585353837027">Badilisha jinsi faili hizi zinavyoshirikiwa</translation> <translation id="1864756863218646478">Faili haikupatikana.</translation> +<translation id="1865769994591826607">Miunganisho ya tovuti sawa pekee</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" inaweza kusoma na kuandika picha, video, na faili za sauti katika maeneo yaliyowekewa alama.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> iko tayari kukamilisha usakinishaji wako</translation> <translation id="1873879463550486830">SUID Sandbox</translation> @@ -1193,6 +1194,7 @@ <translation id="2743387203779672305">Nakili kwenye ubao wa kunakili</translation> <translation id="2744221223678373668">Inayoshirikiwa</translation> <translation id="2745080116229976798">Microsoft Qualified Subordination</translation> +<translation id="2745576239403924641">Washa Programu za Android ili zifanye kazi kwenye Chromebook yako.</translation> <translation id="2747990718031257077">Huwasha (inaendelea kuundwa) muundo mpya wa upau wa vidhibiti wa kiendelezi.</translation> <translation id="2749756011735116528">Ingia kwenye <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Kagua Sarufi Pamoja na Tahajia</translation> @@ -1406,6 +1408,7 @@ <translation id="3011284594919057757">Kuhusu Flash</translation> <translation id="3011362742078013760">Fungua Alamisho Zote katika Dirisha Fiche</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Miunganisho salama ya tovuti sawa pekee</translation> <translation id="3012890944909934180">Anzisha upya Chrome kwenye eneokazi</translation> <translation id="3012917896646559015">Tafadhali wasiliana na mtengenezaji wako wa maunzi mara moja ili utume kompyuta yako kwa kituo cha kukarabati.</translation> <translation id="3015992588037997514">Je, msimbo huu unaonekana kwenye sk Chromebox yako?</translation> @@ -1635,6 +1638,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" /> kitufe: hitilafu ya kuingia katika akaunti</translation> <translation id="3319048459796106952">Dirisha &fiche jipya</translation> <translation id="331915893283195714">Ruhusu tovuti zote kuzima kishale cha kipanya</translation> +<translation id="3319364804843246307">Programu za Android</translation> <translation id="3320859581025497771">mtoaji wako wa huduma</translation> <translation id="3323235640813116393">Huwasha kuhifadhi kurasa kama MHTML: faili moja ya maandishi iliyo na HTML na rasilimali zote ndogo.</translation> <translation id="3323447499041942178">Kikasha maandishi</translation> @@ -1739,6 +1743,7 @@ <translation id="347719495489420368">Bofya kulia ili kucheza <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">Endelea kuruhusu <ph name="HOST" /> kufikia kamera na maikrofoni yako</translation> <translation id="3478315065074101056">XPS huwasha chaguo mahiri kwa printa za kawaida zilizounganishwa kwenye Printa ya Wingu iliyo na Chrome. Lazima printa ziunganishwe tena baada ya kubadilisha ripoti hii.</translation> +<translation id="3479539252931486093">Je, hukutarajia tukio hili? <ph name="BEGIN_LINK" />Tujulishe<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Sio sasa</translation> <translation id="3480892288821151001">Shikilia dirisha kushoto</translation> <translation id="3481915276125965083">Madirisha ibukizi yafuatayo yalizuiwa kwenye ukurasa huu:</translation> @@ -2708,6 +2713,7 @@ <translation id="4941246025622441835">Tumia shurutisho la kifaa hiki unapoandikisha kifaa kwa usimamizi wa biashara:</translation> <translation id="4942394808693235155">Angalia na utumie sasisho</translation> <translation id="494286511941020793">Msaada wa Usanidi wa Proksi</translation> +<translation id="4945378551914476156">Alamisho zako, historia, manenosiri, na mipangilio yako mingine itasawazishwa kwenye Akaunti yako ya Google ili uweze kuitumia wakati wowote unapotumia Chrome. Unaweza kubadilisha hii katika <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Chaguo...</translation> <translation id="4952186391360931024">Isiyo na usanifu bora</translation> <translation id="4954544650880561668">Kidhibiti cha kifaa</translation> @@ -2842,7 +2848,6 @@ <ph name="LINE_BREAKS" /> Kuondoa kifaa chako kikiwa kinatumika kunaweza kusababisha kupoteza data. Tafadhali subiri hadi uendeshaji ukamilike, kisha uondoe kifaa kwa kutumia programu ya Faili.</translation> <translation id="5159488553889181171">Upakuaji wa <ph name="PLUGIN_NAME" /> ulighairiwa.</translation> -<translation id="5159628598068481063">Mapendeleo ya kuelekeza upya utafutaji kwa ajili ya kompyuta za mezani za Windows</translation> <translation id="5160857336552977725">Ingia katika kifaa chako cha <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Kushiriki kumeshindwa. Angalia muunganisho wako na ujaribu tena baadaye.</translation> <translation id="516592729076796170">Kibodi ya Programmer Dvorak, Marekani</translation> @@ -3210,7 +3215,6 @@ <translation id="567881659373499783">Toleo <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Soma data yako kwenye <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Uchujaji wa maandishi katika Hali ya Muhtasari</translation> -<translation id="568428328938709143">Akaunti imeondolewa</translation> <translation id="5684661240348539843">Kitambulisho cha Kipengee</translation> <translation id="569068482611873351">Ingiza...</translation> <translation id="56907980372820799">Unganisha data</translation> @@ -3452,6 +3456,7 @@ <translation id="604001903249547235">Hifadhi rudufu ya wingu</translation> <translation id="6040143037577758943">Funga</translation> <translation id="604124094241169006">Otomatiki</translation> +<translation id="6042308850641462728">Zaidi</translation> <translation id="604257181445267932">Smart Lock hukusaidia kuingia katika programu na tovuti kwa haraka kwa kutumia manenosiri ambayo umehifadhi kwenye Google.</translation> <translation id="6049065490165456785">Picha kutoka kamera ya ndani</translation> <translation id="6051028581720248124">Kwa kuchapisha katika FedEx Office, unakubali sheria na masharti <ph name="START_LINK" />ya<ph name="END_LINK" />.</translation> @@ -3483,7 +3488,6 @@ <translation id="6089481419520884864">Tenganisha ukurasa</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Inaghairi usasishaji...</translation> -<translation id="6095149522260432647">Huwasha mapendeleo yanayoruhusu kuelekeza upya utafutaji kwa ajili ya kompyuta za mezani za Windows hadi injini chaguo-msingi ya utafutaji.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Fungua iliyoongezwa</translation> <translation id="6096326118418049043">Jina la X.500</translation> @@ -4666,6 +4670,7 @@ <translation id="7926906273904422255">Alamisha asili zisizo salama kama zisizo salama, au kama "mbaya".</translation> <translation id="7928710562641958568">Ondoa kifaa</translation> <translation id="7938594894617528435">Nje ya mtandao kwa sasa</translation> +<translation id="7939374455203157513">Washa Huduma za Wingu</translation> <translation id="7939412583708276221">Hata hivyo weka</translation> <translation id="7939997691108949385">Mdhibiti ataweza kuweka vikwazo na mipangilio ya mtumiaji anayesimamiwa katika <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">Colemak ya Marekani</translation> @@ -5219,6 +5224,7 @@ <translation id="872537912056138402">Kikroeshia</translation> <translation id="8726206820263995930">Hitilafu wakati wa kupata mipangilio ya sera kutoka kwenye seva: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Onyesha chaguo za kiendelezi kama kipengee kilichopachikwa katika viendelezi vya chrome://badala ya kufungua kichupo kipya.</translation> +<translation id="8727142376512517020">Usionyeshe hii tena</translation> <translation id="8728672262656704056">Unavinjari katika hali fiche.</translation> <translation id="8730621377337864115">Nimemaliza</translation> <translation id="8731332457891046104">Ondoa usajili wa <ph name="DEVICE_TYPE" /></translation> @@ -5381,7 +5387,6 @@ <translation id="8986362086234534611">Sahau</translation> <translation id="8986494364107987395">Tumia Google, moja kwa moja, takwimu za matumizi na ripoti za mara ambazo kivinjari kinaacha kufanya kazi</translation> <translation id="8987927404178983737">Mwezi</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">URL ya Msingi wa Vyeti wa Netscape</translation> <translation id="8994845581478641365">Zana ya Kujenga Akiba ya Fonti ya DirectWrite</translation> <translation id="8995603266996330174">Inadhibitiwa na <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index 1e75cbc8..89a396f 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">உள்நுழைவு</translation> <translation id="1864676585353837027">இந்தக் கோப்புகள் பகிரப்படும் விதத்தை மாற்றவும்</translation> <translation id="1864756863218646478">கோப்பைக் கண்டறிய முடியவில்லை.</translation> +<translation id="1865769994591826607">ஒரே தள இணைப்புகள் மட்டும்</translation> <translation id="186612162884103683">தேர்வுசெய்யப்பட்ட இடங்களில் உள்ள படங்கள், வீடியோ மற்றும் ஒலி கோப்புகள் ஆகியவற்றை "<ph name="EXTENSION" />" ஆல் படிக்க மற்றும் எழுத முடியும்.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> உங்கள் நிறுவலை நிறைவு செய்யத் தயாராக உள்ளது</translation> <translation id="1873879463550486830">SUID சாண்ட்பாக்ஸ்</translation> @@ -1196,6 +1197,7 @@ <translation id="2743387203779672305">கிளிப்போர்டுக்கு நகலெடு</translation> <translation id="2744221223678373668">பகிர்ந்தது</translation> <translation id="2745080116229976798">Microsoft Qualified Subordination</translation> +<translation id="2745576239403924641">உங்கள் Chromebookஇல் இயங்குவதற்கான Android பயன்பாடுகளை இயக்கவும்.</translation> <translation id="2747990718031257077">புதிய நீட்டிப்பின் (மேம்பாட்டில் உள்ளது) கருவிப்பட்டி வடிவத்தை இயக்குகிறது.</translation> <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> இல் உள்நுழையவும்</translation> <translation id="2749881179542288782">இலக்கணம் மற்றும் எழுத்துப்பிழை சரிபார்</translation> @@ -1409,6 +1411,7 @@ <translation id="3011284594919057757">Flash அறிமுகம்</translation> <translation id="3011362742078013760">&மறைநிலை சாளரத்தில் எல்லா புக்மார்க்ஸையும் திற</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">பாதுகாப்பான ஒரே தள இணைப்புகள் மட்டும்</translation> <translation id="3012890944909934180">டெஸ்க்டாப்பில் Chrome ஐ மீண்டும் தொடங்கு</translation> <translation id="3012917896646559015">உங்கள் கணினியைச் சரிசெய்ய நிர்வாக வசதிக்கு அனுப்புவதற்கு உங்களின் வன்பொருள் தயாரிப்பாளரை உடனடியாக தொடர்புகொள்ளவும்.</translation> <translation id="3015992588037997514">உங்கள் Chromebox திரையில் இந்தக் குறியீடு தெரிகிறதா?</translation> @@ -1641,6 +1644,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" /> பொத்தான்: உள்நுழைவுப் பிழை</translation> <translation id="3319048459796106952">புதிய &மறைநிலை சாளரம்</translation> <translation id="331915893283195714">இடஞ்சுட்டியை முடக்க எல்லா தளங்களையும் அனுமதி</translation> +<translation id="3319364804843246307">Android பயன்பாடுகள்</translation> <translation id="3320859581025497771">உங்கள் கேரியர்</translation> <translation id="3323235640813116393">பக்கங்களை MHTML ஆகச் சேமிப்பதை இயக்குகிறது: ஒற்றை உரை கோப்பில் HTML மற்றும் எல்லா துணை மூலங்களும் உள்ளன.</translation> <translation id="3323447499041942178">உரை பெட்டி</translation> @@ -1745,6 +1749,7 @@ <translation id="347719495489420368"><ph name="PLUGIN_NAME" />ஐ இயக்க, வலது கிளிக் செய்யவும்.</translation> <translation id="347785443197175480">உங்கள் கேமராவையும் மைக்ரோஃபோனையும் அணுக <ph name="HOST" /> ஐத் தொடர்ந்து அனுமதி</translation> <translation id="3478315065074101056">Chrome மூலம் மேகக்கணி அச்சுடன் இணைக்கப்பட்ட கிளாசிக் பிரிண்டர்களுக்கு மேம்பட்ட விருப்பங்களை XPS இயக்குகிறது. இந்தக் கொடியை மாற்றிய பின் பிரிண்டர்கள் மீண்டும் இணைக்கப்பட வேண்டும்.</translation> +<translation id="3479539252931486093">இதை எதிர்பார்க்கவில்லையா? <ph name="BEGIN_LINK" />எங்களுக்குத் தெரியப்படுத்தவும்<ph name="END_LINK" /></translation> <translation id="3479552764303398839">இப்பொழுது இல்லை</translation> <translation id="3480892288821151001">சாளரத்தை இடப்பக்கம் பொருத்து</translation> <translation id="3481915276125965083">இந்தப் பக்கத்தில் பின்வரும் பாப்-அப்கள் தடுக்கப்பட்டன:</translation> @@ -2716,6 +2721,7 @@ <translation id="4941246025622441835">நிறுவன மேலாண்மைக்காக சாதனத்தைச் சேர்க்கும்போது இந்தச் சாதனக் கோரிக்கையைப் பயன்படுத்தவும்:</translation> <translation id="4942394808693235155">புதுப்பிப்புகள் உள்ளதா எனத் தேடி, பயன்படுத்தவும்</translation> <translation id="494286511941020793">பதிலி உள்ளமைவு உதவி</translation> +<translation id="4945378551914476156">Chromeஐ எந்த சாதனத்தில் பயன்படுத்தினாலும் உங்கள் புத்தகக்குறிகள், வரலாறு, கடவுச்சொற்கள் மற்றும் பிற அமைப்புகளை பயன்படுத்தும்படி அவை உங்கள் Google கணக்குடன் ஒத்திசைக்கப்படும். இதனை <ph name="BEGIN_LINK" /> இல் மாற்றலாம்</translation> <translation id="4950138595962845479">விருப்பங்கள்...</translation> <translation id="4952186391360931024">மெட்டீரியல்-அல்லாதது</translation> <translation id="4954544650880561668">சாதனக் கட்டுப்பாடு</translation> @@ -2848,7 +2854,6 @@ <ph name="LINE_BREAKS" /> பயன்பாட்டில் இருக்கும்போது உங்கள் சாதனத்தை அகற்றுவது தரவு இழப்பை ஏற்படுத்தலாம். செயல்முறை முடியும்வரை காத்திருந்து, பின்பு கோப்புகள் பயன்பாட்டைப் பயன்படுத்தி சாதனத்தை வெளியேற்றலாம்.</translation> <translation id="5159488553889181171"><ph name="PLUGIN_NAME" /> பதிவிறக்கம் ரத்துசெய்யப்பட்டது.</translation> -<translation id="5159628598068481063">Windows டெஸ்க்டாப் தேடலை திசைதிருப்பும் விருப்பத்தேர்வு</translation> <translation id="5160857336552977725"><ph name="DEVICE_TYPE" /> இல் உள்நுழையவும்</translation> <translation id="5163869187418756376">பகிர்வு தோல்வியடைந்தது. உங்கள் இணைப்பைச் சரிபார்த்து, பிறகு மீண்டும் முயற்சிக்கவும்.</translation> <translation id="516592729076796170">US புரோகிராமர் டிவோரக்</translation> @@ -3217,7 +3222,6 @@ <translation id="567881659373499783">பதிப்பு <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">உங்கள் தரவை <ph name="WEBSITE_1" /> இல் படிக்கவும்</translation> <translation id="5680928275846978395">மேலோட்டப் பயன்முறையில் உரை வடிப்பான்</translation> -<translation id="568428328938709143">கணக்கு அகற்றப்பட்டது</translation> <translation id="5684661240348539843">பண்பு அடையாளங்காட்டி</translation> <translation id="569068482611873351">இறக்குமதி செய்க...</translation> <translation id="56907980372820799">தரவை இணை</translation> @@ -3457,6 +3461,7 @@ <translation id="604001903249547235">மேகக்கணி காப்புப் பிரதி</translation> <translation id="6040143037577758943">மூடு</translation> <translation id="604124094241169006">தானியங்கு</translation> +<translation id="6042308850641462728">மேலும்</translation> <translation id="604257181445267932">Google இல் நீங்கள் சேமித்துள்ள கடவுச்சொற்களைப் பயன்படுத்தி பயன்பாடுகளிலும் தளங்களிலும் விரைவாக உள்நுழைய Smart Lock உதவுகிறது.</translation> <translation id="6049065490165456785">உட்புற கேமராவிலிருந்து படம்</translation> <translation id="6051028581720248124">FedEx அலுவலகத்தில் அச்சிடுவதன் மூலம், அவர்களின் <ph name="START_LINK" />பயன்பாட்டு விதிகளை<ph name="END_LINK" /> ஒப்புக்கொள்கிறீர்கள்.</translation> @@ -3488,7 +3493,6 @@ <translation id="6089481419520884864">பக்கத்தைப் பிரி</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">புதுப்பிப்பை ரத்துசெய்கிறது...</translation> -<translation id="6095149522260432647">Windows டெஸ்க்டாப் தேடல்களை இயல்புநிலைத் தேடல் இன்ஜினுக்குத் திசைதிருப்ப அனுமதிக்கும் விருப்பத்தேர்வை இயக்கும்.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">பெரிதாக்கப்பட்டதை திற</translation> <translation id="6096326118418049043">X.500 பெயர்</translation> @@ -4661,6 +4665,7 @@ <translation id="7926906273904422255">பாதுகாப்பற்ற மூலங்களைப் பாதுகாப்பற்றவை அல்லது "சந்தேகத்திற்குரியவை" எனக் குறிக்கவும்.</translation> <translation id="7928710562641958568">சாதனத்தை வெளித்தள்ளு</translation> <translation id="7938594894617528435">தற்போது ஆஃப்லைனில் உள்ளது</translation> +<translation id="7939374455203157513">மேகக்கணிச் சேவைகளை இயக்கு</translation> <translation id="7939412583708276221">எப்படியும் வைத்திரு</translation> <translation id="7939997691108949385">இந்தக் கண்காணிக்கப்படும் பயனருக்கான கட்டுப்பாடுகள் மற்றும் அமைப்புகளை நிர்வாகியால் <ph name="MANAGEMENT_URL" /> இல் உள்ளமைக்க முடியும்.</translation> <translation id="7943385054491506837">யு.எஸ். கோல்மேக்</translation> @@ -5212,6 +5217,7 @@ <translation id="872537912056138402">குரோஷியன்</translation> <translation id="8726206820263995930">சேவையகத்திலிருந்து கொள்கை அமைப்புகளைப் பெறுவதில் பிழை: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">புதிய தாவலில் திறப்பதற்குப் பதிலாக நீட்டிப்பு விருப்பங்களை chrome://extensions இல் உள்ளமைந்த கூறாகக் காட்டுகிறது.</translation> +<translation id="8727142376512517020">இதை மீண்டும் காட்டாதே</translation> <translation id="8728672262656704056">மறைநிலைக்குச் சென்றுவிட்டீர்கள்</translation> <translation id="8730621377337864115">முடிந்தது</translation> <translation id="8731332457891046104"><ph name="DEVICE_TYPE" />ஐப் பதிவுநீக்கவும்</translation> @@ -5374,7 +5380,6 @@ <translation id="8986362086234534611">மற</translation> <translation id="8986494364107987395">பயன்பாட்டு புள்ளிவிவரங்கள் மற்றும் சிதைவு அறிக்கைகளைத் தானாகவே Google க்கு அனுப்பு</translation> <translation id="8987927404178983737">மாதம்</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Netscape சான்றிதழ் அடிப்படை URL</translation> <translation id="8994845581478641365">DirectWrite ஃபான்ட் கேச்சே பில்டர்</translation> <translation id="8995603266996330174"><ph name="DOMAIN" /> ஆல் நிர்வகிக்கப்படுகிறது</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index cedee086..d7d0ec54 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">లాగిన్</translation> <translation id="1864676585353837027">ఈ ఫైల్లు భాగస్వామ్యం చేయబడే విధానాన్ని మార్చండి</translation> <translation id="1864756863218646478">ఫైల్ను కనుగొనబడలేదు.</translation> +<translation id="1865769994591826607">ఒకే సైట్ కనెక్షన్లు మాత్రమే</translation> <translation id="186612162884103683">తనిఖీ చేయబడిన స్థానాల్లో "<ph name="EXTENSION" />" చిత్రాలను, వీడియోను మరియు సౌండ్ ఫైల్లను చదవగలదు మరియు వ్రాయగలదు.</translation> <translation id="1867780286110144690">మీ వ్యవస్థాపనను పూర్తి చెయ్యడానికి <ph name="PRODUCT_NAME" /> సిద్ధంగా ఉంది</translation> <translation id="1873879463550486830">SUID శాండ్బాక్స్</translation> @@ -1195,6 +1196,7 @@ <translation id="2743387203779672305">క్లిప్బోర్డ్కు కాపీ చేయి</translation> <translation id="2744221223678373668">భాగస్వామ్యం చెయ్యబడింది</translation> <translation id="2745080116229976798">Microsoft Qualified Subordination</translation> +<translation id="2745576239403924641">మీ Chromebookలో అమలు కావడానికి Android అనువర్తనాలను ప్రారంభించండి.</translation> <translation id="2747990718031257077">కొత్త పొడిగింపు సాధన పట్టీ (అభివృద్ధిలో ఉన్న) రూపకల్పనను ప్రారంభిస్తుంది.</translation> <translation id="2749756011735116528"><ph name="PRODUCT_NAME" />కి సైన్ ఇన్ చేయండి</translation> <translation id="2749881179542288782">అక్షరక్రమంతో వ్యాకరణాన్ని తనిఖీ చేయి</translation> @@ -1408,6 +1410,7 @@ <translation id="3011284594919057757">Flash గురించి</translation> <translation id="3011362742078013760">అన్ని బుక్మార్క్లను &అజ్ఞాత విండోలో తెరువు</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">సురక్షితమైన ఒకే సైట్ కనెక్షన్లు మాత్రమే</translation> <translation id="3012890944909934180">Chromeను డెస్క్టాప్లో తిరిగి ప్రారంభించండి</translation> <translation id="3012917896646559015">దయచేసి మీ కంప్యూటర్ను మరమ్మత్తు చేయడం కోసం పంపడానికి వెంటనే మీ హార్డ్వేర్ తయారీదారుని సంప్రదించండి.</translation> <translation id="3015992588037997514">మీ Chromebox స్క్రీన్పై ఈ కోడ్ కనిపిస్తోందా?</translation> @@ -1641,6 +1644,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" /> బటన్: సైన్ ఇన్ లోపం</translation> <translation id="3319048459796106952">క్రొత్త &అజ్ఞాత విండో</translation> <translation id="331915893283195714">మౌస్ కర్సర్ను ఆపివేయడానికి అన్ని సైట్లను అనుమతించు</translation> +<translation id="3319364804843246307">Android అనువర్తనాలు</translation> <translation id="3320859581025497771">మీ క్యారియర్</translation> <translation id="3323235640813116393">పేజీలను MHTMLగా సేవ్ చేయడాన్ని ప్రారంభిస్తుంది: HTML మరియు అన్ని ఉప-వనరులను కలిగి ఉండే ఏకైక వచన ఫైల్.</translation> <translation id="3323447499041942178">టెక్స్ట్ బాక్స్</translation> @@ -1745,6 +1749,7 @@ <translation id="347719495489420368"><ph name="PLUGIN_NAME" />ని ప్లే చేయడానికి కుడి-క్లిక్ చేయండి.</translation> <translation id="347785443197175480">మీ కెమెరా మరియు మైక్రోఫోన్ను ప్రాప్యత చేయడానికి <ph name="HOST" />ను అనుమతించడాన్ని కొనసాగించండి</translation> <translation id="3478315065074101056">Chromeతో Cloud ముద్రణకి కనెక్ట్ చేయబడిన క్లాసిక్ ప్రింటర్ల కోసం XPS అధునాతన ఎంపికలను ప్రారంభిస్తుంది. ఈ ఫ్లాగ్ని మార్చిన తర్వాత ప్రింటర్లను తప్పనిసరిగా మళ్లీ కనెక్ట్ చేయాలి.</translation> +<translation id="3479539252931486093">ఊహించని విధంగా ఇది సంభవించిందా? <ph name="BEGIN_LINK" />మాకు తెలియజేయండి<ph name="END_LINK" /></translation> <translation id="3479552764303398839">ఇప్పుడు కాదు</translation> <translation id="3480892288821151001">విండోను ఎడమవైపుకు డాక్ చేయి</translation> <translation id="3481915276125965083">ఈ పేజీపై క్రింది పాప్-అప్లు నిరోధించబడ్డాయి:</translation> @@ -2719,6 +2724,7 @@ <translation id="4941246025622441835">పరికరాన్ని వ్యాపార నిర్వహణ కోసం నమోదు చేసేటప్పుడు ఈ పరికర అభ్యర్థనను ఉపయోగించండి:</translation> <translation id="4942394808693235155">నవీకరణలను తనిఖీ చేసి, వర్తింపజేయి</translation> <translation id="494286511941020793">ప్రాక్సీ కన్ఫిగరేషన్ సహాయం</translation> +<translation id="4945378551914476156">మీ బుక్మార్క్లు, చరిత్ర, పాస్వర్డ్లు మరియు ఇతర సెట్టింగ్లు మీ Google ఖాతాకు సమకాలీకరించబడతాయి, కాబట్టి మీరు Chromeని ఉపయోగించే అన్నిచోట్లా వీటిని ఉపయోగించగలరు. మీరు <ph name="BEGIN_LINK" />లో దీన్ని మార్చవచ్చు</translation> <translation id="4950138595962845479">ఎంపికలు...</translation> <translation id="4952186391360931024">విశిష్ట యేతరం</translation> <translation id="4954544650880561668">పరికర నియంత్రణ</translation> @@ -2853,7 +2859,6 @@ <ph name="LINE_BREAKS" /> మీ పరికరం ఉపయోగంలో ఉన్నప్పుడు తీసివేస్తే డేటా నష్టం కలగవచ్చు. దయచేసి చర్య పూర్తయ్యే వరకు వేచి ఉండి ఆపై ఫైల్ల అనువర్తనాన్ని ఉపయోగించి పరికరాన్ని తీసివేయండి.</translation> <translation id="5159488553889181171"><ph name="PLUGIN_NAME" /> డౌన్లోడ్ను రద్దు చేశారు.</translation> -<translation id="5159628598068481063">Windows డెస్క్టాప్ శోధన దారి మళ్లింపు ప్రాధాన్యత</translation> <translation id="5160857336552977725">మీ <ph name="DEVICE_TYPE" />కి సైన్ ఇన్ చేయండి</translation> <translation id="5163869187418756376">భాగస్వామ్యం చేయడంలో విఫలమైంది. మీ కనెక్షన్ను తనిఖీ చేసి, తర్వాత మళ్లీ ప్రయత్నించండి.</translation> <translation id="516592729076796170">US ప్రోగ్రామర్ డ్వోరక్</translation> @@ -3221,7 +3226,6 @@ <translation id="567881659373499783"><ph name="PRODUCT_VERSION" /> సంస్కరణ</translation> <translation id="5678955352098267522"><ph name="WEBSITE_1" />లోని మీ డేటాను చదవండి</translation> <translation id="5680928275846978395">స్థూలదృష్టి మోడ్లో వచనాన్ని ఫిల్టర్ చేయడం</translation> -<translation id="568428328938709143">ఖాతా తీసివేయబడింది</translation> <translation id="5684661240348539843">అసెట్ ఐడెంటిఫైయర్</translation> <translation id="569068482611873351">దిగుమతి చెయ్యి...</translation> <translation id="56907980372820799">డేటాను జోడించు</translation> @@ -3461,6 +3465,7 @@ <translation id="604001903249547235">Cloud బ్యాకప్</translation> <translation id="6040143037577758943">మూసివేయి</translation> <translation id="604124094241169006">స్వయంచాలకంగా</translation> +<translation id="6042308850641462728">మరింత</translation> <translation id="604257181445267932">Smart Lock అనువర్తనాలు మరియు సైట్లకు శీఘ్రంగా సైన్ ఇన్ చేయడంలో మీరు Googleతో సేవ్ చేసిన పాస్వర్డ్లను ఉపయోగించి మీకు సహాయపడగలదు.</translation> <translation id="6049065490165456785">అంతర్గత కెమెరా నుండి ఫోటో</translation> <translation id="6051028581720248124">FedEx కార్యాలయానికి ముద్రించడం ద్వారా, మీరు వారి <ph name="START_LINK" />ఉపయోగ నిబంధనలు<ph name="END_LINK" />ను అంగీకరిస్తున్నారు.</translation> @@ -3492,7 +3497,6 @@ <translation id="6089481419520884864">పేజీ డిస్టిల్ చేయి</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">నవీకరణ రద్దు చేయడం...</translation> -<translation id="6095149522260432647">Windows డెస్క్టాప్ శోధనలను డిఫాల్ట్ శోధన ఇంజిన్కు మళ్లించేందుకు అనుమతించే ప్రాధాన్యతను ప్రారంభిస్తుంది.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">గరిష్టీకరించిన దాన్ని తెరువు</translation> <translation id="6096326118418049043">X.500 పేరు</translation> @@ -4674,6 +4678,7 @@ <translation id="7926906273904422255">అసురక్షిత మూలాలను అసురక్షితంగా లేదా "అవిశ్వసనీయం"గా గుర్తిస్తుంది.</translation> <translation id="7928710562641958568">పరికరాన్ని తీసివేయండి</translation> <translation id="7938594894617528435">ప్రస్తుతం ఆఫ్లైన్లో ఉంది</translation> +<translation id="7939374455203157513">క్లౌడ్ సేవలను ప్రారంభించు</translation> <translation id="7939412583708276221">ఏదేమైనా ఉంచు</translation> <translation id="7939997691108949385">నిర్వాహకులు <ph name="MANAGEMENT_URL" />లో ఈ పర్యవేక్షించబడే వినియోగదారు కోసం పరిమితులు మరియు సెట్టింగ్లను కాన్ఫిగర్ చేయగలరు.</translation> <translation id="7943385054491506837">యుఎస్ కోల్మక్</translation> @@ -5221,6 +5226,7 @@ <translation id="872537912056138402">క్రోవేషియన్</translation> <translation id="8726206820263995930">విధాన సెట్టింగ్లను సర్వర్ నుండి పొందుతున్నప్పుడు లోపం: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">పొడిగింపు ఎంపికలను కొత్త ట్యాబ్లో తెరవడానికి బదులుగా chrome://పొడిగింపుల్లో పొందుపరిచిన మూలకం వలె ప్రదర్శించండి.</translation> +<translation id="8727142376512517020">దీన్ని మళ్లీ చూపవద్దు</translation> <translation id="8728672262656704056">మీరు అజ్ఞాతంగా ఉన్నారు</translation> <translation id="8730621377337864115">పూర్తయింది</translation> <translation id="8731332457891046104"><ph name="DEVICE_TYPE" /> నమోదు తీసివేయండి</translation> @@ -5383,7 +5389,6 @@ <translation id="8986362086234534611">మరిచిపోయారా</translation> <translation id="8986494364107987395">Googleకు స్వయంచాలకంగా ఉపయోగ గణాంకాలను మరియు క్రాష్ నివేదికలను పంపు</translation> <translation id="8987927404178983737">నెల</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Netscape సర్టిఫికెట్ ఆధార URL</translation> <translation id="8994845581478641365">DirectWrite ఫాంట్ కాష్ బిల్డర్</translation> <translation id="8995603266996330174"><ph name="DOMAIN" /> ద్వారా నిర్వహించబడింది</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index c631c41..f5ed00e7 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">ลงชื่อเข้าใช้</translation> <translation id="1864676585353837027">เปลี่ยนวิธีการแชร์ไฟล์เหล่านี้</translation> <translation id="1864756863218646478">ไม่พบไฟล์</translation> +<translation id="1865769994591826607">การเชื่อมต่อเว็บไซต์เดียวกันเท่านั้น</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" สามารถอ่านและเขียนรูปภาพ วิดีโอ และไฟล์เสียงในตำแหน่งที่เลือก</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> พร้อมที่จะดำเนินการติดตั้งให้คุณ</translation> <translation id="1873879463550486830">การทดลองใช้ผลิตภัณฑ์ SUID</translation> @@ -1195,6 +1196,7 @@ <translation id="2743387203779672305">คัดลอกไว้ที่คลิปบอร์ด</translation> <translation id="2744221223678373668">ที่แชร์</translation> <translation id="2745080116229976798">ตัวย่อยที่เหมาะสมของ Microsoft</translation> +<translation id="2745576239403924641">เปิดใช้แอป Android เพื่อเรียกใช้บน Chromebook ของคุณ</translation> <translation id="2747990718031257077">เปิดใช้การออกแบบแถบเครื่องมือส่วนขยายใหม่ (กำลังพัฒนา)</translation> <translation id="2749756011735116528">ลงชื่อเข้าใช้ <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">ตรวจสอบไวยากรณ์และตัวสะกด</translation> @@ -1408,6 +1410,7 @@ <translation id="3011284594919057757">เกี่ยวกับ Flash</translation> <translation id="3011362742078013760">เปิดบุ๊กมาร์กทั้งหมดใน&หน้าต่างที่ไม่ระบุตัวตน</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">การเชื่อมต่อเว็บไซต์เดียวกันที่ปลอดภัยเท่านั้น</translation> <translation id="3012890944909934180">เปิดใช้ Chrome บนเดสก์ท็อปอีกครั้ง</translation> <translation id="3012917896646559015">โปรดติดต่อผู้ผลิตฮาร์ดแวร์ของคุณทันที เพื่อส่งคอมพิวเตอร์ไปยังศูนย์ซ่อม</translation> <translation id="3015992588037997514">รหัสนี้ปรากฏขึ้นบนหน้าจอ Chromebox ไหม</translation> @@ -1640,6 +1643,7 @@ <translation id="331752765902890099">ปุ่ม <ph name="PROFILE_NAME" />: เกิดข้อผิดพลาดในการลงชื่อเข้าใช้</translation> <translation id="3319048459796106952">หน้าต่างใหม่และไม่ระบุตัวตน</translation> <translation id="331915893283195714">อนุญาตให้ทุกไซต์ปิดใช้งานเคอร์เซอร์เมาส์</translation> +<translation id="3319364804843246307">แอป Android</translation> <translation id="3320859581025497771">ผู้ให้บริการของคุณ</translation> <translation id="3323235640813116393">เปิดใช้การบันทึกหน้าเป็น MHTML ซึ่งเป็นไฟล์ข้อความไฟล์เดียวที่มี HTML และทรัพยากรย่อยทั้งหมด</translation> <translation id="3323447499041942178">ช่องข้อความ</translation> @@ -1744,6 +1748,7 @@ <translation id="347719495489420368">คลิกขวาเพื่อเล่น <ph name="PLUGIN_NAME" /></translation> <translation id="347785443197175480">อนุญาตให้ <ph name="HOST" /> เข้าถึงกล้องถ่ายรูปและไมโครโฟนของคุณต่อไป</translation> <translation id="3478315065074101056">XPS เปิดใช้ตัวเลือกขั้นสูงสำหรับเครื่องพิมพ์คลาสสิกที่เชื่อมต่อกับ Cloud Print ด้วย Chrome ต้องเชื่อมต่อเครื่องพิมพ์อีกครั้งหลังจากที่เปลี่ยนธงนี้แล้ว</translation> +<translation id="3479539252931486093">เหตุการณ์นี้ผิดปกติไหม <ph name="BEGIN_LINK" />แจ้งให้เราทราบ<ph name="END_LINK" /></translation> <translation id="3479552764303398839">ไม่ใช่ตอนนี้</translation> <translation id="3480892288821151001">จัดวางหน้าต่างไว้ทางซ้าย</translation> <translation id="3481915276125965083">หน้าเว็บนี้บล็อกป๊อปอัปต่อไปนี้:</translation> @@ -2082,7 +2087,7 @@ <translation id="3924145049010392604">Meta</translation> <translation id="3925247638945319984">คุณไม่มีบันทึก WebRTC ที่จับภาพเมื่อเร็วๆ นี้</translation> <translation id="3925573269917483990">กล้อง:</translation> -<translation id="3925842537050977900">เลิกตรึงจากชั้นวาง</translation> +<translation id="3925842537050977900">เลิกตรึงในชั้นวาง</translation> <translation id="3926002189479431949">โทรศัพท์ของ Smart Lock มีการเปลี่ยนแปลง</translation> <translation id="3927932062596804919">ปฏิเสธ</translation> <translation id="3930521966936686665">เล่นใน</translation> @@ -2717,6 +2722,7 @@ <translation id="4941246025622441835">ใช้ข้อกำหนดของอุปกรณ์นี้เมื่อลงทะเบียนอุปกรณ์สำหรับการจัดการองค์กร:</translation> <translation id="4942394808693235155">ตรวจหาและนำการอัปเดตไปใช้</translation> <translation id="494286511941020793">ความช่วยเหลือในการกำหนดค่าพร็อกซี</translation> +<translation id="4945378551914476156">บุ๊กมาร์ก ประวัติการเข้าชม รหัสผ่าน และการตั้งค่าอื่นๆ ของคุณจะซิงค์กับบัญชี Google เพื่อให้คุณสามารถใช้งานได้ทุกที่ที่ใช้ Chrome คุณสามารถเปลี่ยนการทำงานนี้ได้ใน <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">ตัวเลือก...</translation> <translation id="4952186391360931024">ไม่ใช่ Material</translation> <translation id="4954544650880561668">การควบคุมอุปกรณ์</translation> @@ -2851,7 +2857,6 @@ <ph name="LINE_BREAKS" /> การนำอุปกรณ์ออกขณะใช้งานอยู่อาจทำให้ข้อมูลสูญหาย โปรดรอจนกว่าการทำงานจะเสร็จสิ้น จากนั้นนำอุปกรณ์ออกโดยใช้แอป "ไฟล์"</translation> <translation id="5159488553889181171">ยกเลิกการดาวน์โหลด <ph name="PLUGIN_NAME" /> แล้ว</translation> -<translation id="5159628598068481063">ค่ากำหนดการเปลี่ยนเส้นทางการค้นหาบนเดสก์ท็อปของ Windows</translation> <translation id="5160857336552977725">ลงชื่อเข้าใช้ <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">การแชร์ล้มเหลว ตรวจสอบการเชื่อมต่อของคุณและพยายามอีกครั้งในภายหลัง</translation> <translation id="516592729076796170">ดีโวรักโปรแกรมเมอร์สหรัฐอเมริกา</translation> @@ -3219,7 +3224,6 @@ <translation id="567881659373499783">รุ่น <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">อ่านข้อมูลใน <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">การกรองข้อความในโหมดภาพรวม</translation> -<translation id="568428328938709143">นำบัญชีออกแล้ว</translation> <translation id="5684661240348539843">รหัสสินทรัพย์</translation> <translation id="569068482611873351">นำเข้า...</translation> <translation id="56907980372820799">ลิงก์ข้อมูล</translation> @@ -3459,6 +3463,7 @@ <translation id="604001903249547235">การสำรองข้อมูลในระบบคลาวด์</translation> <translation id="6040143037577758943">ปิด</translation> <translation id="604124094241169006">อัตโนมัติ</translation> +<translation id="6042308850641462728">เพิ่มเติม</translation> <translation id="604257181445267932">Smart Lock ช่วยให้คุณลงชื่อเข้าใช้แอปและเว็บไซต์ได้รวดเร็วด้วยรหัสผ่านที่คุณบันทึกไว้กับ Google</translation> <translation id="6049065490165456785">รูปภาพจากกล้องภายใน</translation> <translation id="6051028581720248124">การพิมพ์ไปยังสำนักงาน FedEx หมายถึงคุณยอมรับ<ph name="START_LINK" />ข้อกำหนดในการให้บริการ<ph name="END_LINK" />ของสำนักงาน</translation> @@ -3490,7 +3495,6 @@ <translation id="6089481419520884864">สกัดหน้า</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">กำลังยกเลิกการอัปเดต…</translation> -<translation id="6095149522260432647">เปิดใช้ค่ากำหนดที่อนุญาตให้เปลี่ยนเส้นทางการค้นหาบนเดสก์ท็อปของ Windows เป็นเครื่องมือค้นหาเริ่มต้น</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">เปิดแบบเต็มหน้าจอ</translation> <translation id="6096326118418049043">ชื่อ X.500</translation> @@ -4671,6 +4675,7 @@ <translation id="7926906273904422255">ทำเครื่องหมายต้นกำเนิดที่ไม่ปลอดภัยเป็น ไม่ปลอดภัย หรือเป็น "น่าสงสัย"</translation> <translation id="7928710562641958568">ยกเลิกการต่อเชื่อมอุปกรณ์</translation> <translation id="7938594894617528435">ออฟไลน์อยู่ในปัจจุบัน</translation> +<translation id="7939374455203157513">เปิดใช้บริการคลาวด์</translation> <translation id="7939412583708276221">เก็บเอาไว้ ไม่ว่าอย่างไรก็ตาม</translation> <translation id="7939997691108949385">ผู้จัดการจะสามารถกำหนดค่าข้อจำกัดและการตั้งค่าสำหรับผู้ใช้ภายใต้การดูแลนี้ที่ <ph name="MANAGEMENT_URL" /></translation> <translation id="7943385054491506837">Colemak แบบสหรัฐอเมริกา</translation> @@ -4952,7 +4957,7 @@ <translation id="8327201046748601585">{COUNT,plural, =1{อีก 1 รายการ}other{อีก # รายการ}}</translation> <translation id="8329978297633540474">ข้อความล้วน</translation> <translation id="8330907072332288839">การคาดคะเนการเลื่อน</translation> -<translation id="8335587457941836791">เลิกตรึงจากชั้นวาง</translation> +<translation id="8335587457941836791">เลิกตรึงในชั้นวาง</translation> <translation id="8335971947739877923">ส่งออก...</translation> <translation id="8336153091935557858">เมื่อวานนี้ <ph name="YESTERDAY_DAYTIME" /></translation> <translation id="8336579025507394412">แป้นพิมพ์ไอซ์แลนด์</translation> @@ -5221,6 +5226,7 @@ <translation id="872537912056138402">โครเอเชีย</translation> <translation id="8726206820263995930">เกิดข้อผิดพลาดขณะดึงข้อมูลการตั้งค่านโยบายจากเซิร์ฟเวอร์: <ph name="CLIENT_ERROR" /></translation> <translation id="8726888928275282477">แสดงตัวเลือกส่วนขยายเป็นเอลิเมนต์ที่ฝังใน chrome://extensions แทนการเปิดแท็บใหม่</translation> +<translation id="8727142376512517020">ไม่ต้องแสดงข้อความนี้อีก</translation> <translation id="8728672262656704056">คุณได้เข้าสู่โหมดไม่ระบุตัวตนแล้ว</translation> <translation id="8730621377337864115">เสร็จสิ้น</translation> <translation id="8731332457891046104">ยกเลิกการลงทะเบียน <ph name="DEVICE_TYPE" /></translation> @@ -5383,7 +5389,6 @@ <translation id="8986362086234534611">ไม่จำ</translation> <translation id="8986494364107987395">ส่งสถิติการใช้งานและรายงานข้อขัดข้องไปยัง Google โดยอัตโนมัติ</translation> <translation id="8987927404178983737">เดือน</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">URL ที่อ้างอิงใบรับรองของ Netscape</translation> <translation id="8994845581478641365">เครื่องสร้างแคชแบบอักษร DirectWrite</translation> <translation id="8995603266996330174">จัดการโดย <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index 3613a5a..89cdcc49 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">Oturum Aç</translation> <translation id="1864676585353837027">Şu dosyaların paylaşılma biçimini değiştirin:</translation> <translation id="1864756863218646478">Dosya bulunamadı.</translation> +<translation id="1865769994591826607">Yalnızca aynı site bağlantıları</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" işaretli konumlardaki resimleri, video ve ses dosyalarını okuyabilir ve yazabilir.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" />, yükleme işleminizi tamamlamaya hazır</translation> <translation id="1873879463550486830">SUID Sandbox (Korumalı Alan)</translation> @@ -1196,6 +1197,7 @@ <translation id="2743387203779672305">Panoya kopyala</translation> <translation id="2744221223678373668">Paylaşıldı</translation> <translation id="2745080116229976798">Microsoft Nitelikli Yardımlaşma</translation> +<translation id="2745576239403924641">Android uygulamalarının Chromebook'umda çalışmasını etkinleştir.</translation> <translation id="2747990718031257077">Yapım aşamasında olan yeni uzantı araç çubuğu tasarımını etkinleştirir.</translation> <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> uygulamasında oturum aç...</translation> <translation id="2749881179542288782">Dilbilgisini Yazım ile Denetle</translation> @@ -1409,6 +1411,7 @@ <translation id="3011284594919057757">Flash hakkında</translation> <translation id="3011362742078013760">Tüm Yer İşaretlerini &Gizli Pencerede Aç</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Yalnızca güvenli aynı site bağlantıları</translation> <translation id="3012890944909934180">Chrome'u masaüstünde yeniden başlat</translation> <translation id="3012917896646559015">Lütfen bilgisayarınızı bir onarım tesisine göndermek üzere derhal donanım üreticinizle bağlantı kurun.</translation> <translation id="3015992588037997514">Chromebox ekranınızda bu kod görünüyor mu?</translation> @@ -1642,6 +1645,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" /> düğmesi: Oturum açma hatası</translation> <translation id="3319048459796106952">Yeni &gizli pencere</translation> <translation id="331915893283195714">Tüm sitelerin fare imlecini devre dışı bırakmasına izin ver</translation> +<translation id="3319364804843246307">Android Uygulamaları</translation> <translation id="3320859581025497771">operatörünüz</translation> <translation id="3323235640813116393">Sayfaların MHTML olarak kaydedilmesini etkinleştirir. MHTML, HTML'yi ve tüm alt kaynaklarını içeren tek bir metin dosyasıdır.</translation> <translation id="3323447499041942178">Metin kutusu</translation> @@ -1746,6 +1750,7 @@ <translation id="347719495489420368"><ph name="PLUGIN_NAME" /> eklentisini oynatmak için sağ tıklayın.</translation> <translation id="347785443197175480"><ph name="HOST" /> sitesinin kamerama ve mikrofonuma erişmesine izin vermeye devam et</translation> <translation id="3478315065074101056">XPS, Chrome ile Cloud Print'e bağlanan klasik yazıcılar için gelişmiş seçenekleri etkinleştirir. Bu işaret değiştirildikten sonra yazıcıların yeniden bağlanması gerekir.</translation> +<translation id="3479539252931486093">Bunu bekliyor muydunuz? <ph name="BEGIN_LINK" />Bize bildirin<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Şimdi değil</translation> <translation id="3480892288821151001">Pencereyi sola yerleştir</translation> <translation id="3481915276125965083">Bu sayfada engellenen pop-up'lar:</translation> @@ -2720,6 +2725,7 @@ <translation id="4941246025622441835">Cihazın kurumsal yönetim için kaydını yaparken şu cihaz talebini kullan:</translation> <translation id="4942394808693235155">Güncellemeleri kontrol et ve uygula</translation> <translation id="494286511941020793">Proxy Yapılandırması Yardımı</translation> +<translation id="4945378551914476156">Yer işaretleriniz, geçmişiniz, şifreleriniz ve diğer ayarlarınız Google Hesabınızla senkronize edilecek. Böylece, Chrome kullandığınız her yerde bu ayarlarınızı kullanabileceksiniz. Bu ayarı <ph name="BEGIN_LINK" /> bölümünden değiştirebilirsiniz.</translation> <translation id="4950138595962845479">Seçenekler...</translation> <translation id="4952186391360931024">Malzeme harici</translation> <translation id="4954544650880561668">Cihaz kontrolü</translation> @@ -2854,7 +2860,6 @@ <ph name="LINE_BREAKS" /> Cihazınızı kullanımdayken kaldırırsanız veri kaybına uğrayabilirsiniz. Lütfen işlem bitinceye kadar bekleyin, daha sonra Dosyalar uygulamasını kullanarak cihazı çıkarın.</translation> <translation id="5159488553889181171"><ph name="PLUGIN_NAME" /> indirme işlemi iptal edildi.</translation> -<translation id="5159628598068481063">Windows masaüstü araması yönlendirme tercihi</translation> <translation id="5160857336552977725"><ph name="DEVICE_TYPE" /> cihazınızda oturum açın</translation> <translation id="5163869187418756376">Paylaşılamadı. Bağlantınızı kontrol edin ve daha sonra tekrar deneyin.</translation> <translation id="516592729076796170">ABD Programcı Dvorak</translation> @@ -3223,7 +3228,6 @@ <translation id="567881659373499783">Sürüm <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522"><ph name="WEBSITE_1" /> sitesindeki verilerinizi okuma</translation> <translation id="5680928275846978395">Genel Bakış Modu'nda metin filtreleme</translation> -<translation id="568428328938709143">Hesap kaldırıldı</translation> <translation id="5684661240348539843">Öğe Tanımlayıcı</translation> <translation id="569068482611873351">İçe aktar...</translation> <translation id="56907980372820799">Verileri bağla</translation> @@ -3463,6 +3467,7 @@ <translation id="604001903249547235">Bulut yedekleme</translation> <translation id="6040143037577758943">Kapat</translation> <translation id="604124094241169006">Otomatik</translation> +<translation id="6042308850641462728">Daha fazla</translation> <translation id="604257181445267932">Smart Lock, Google'a kaydettiğiniz şifreleri kullanarak uygulamalarda ve sitelerde hızlı şekilde oturum açmanıza yardımcı olur.</translation> <translation id="6049065490165456785">Dahili kamera fotoğrafı</translation> <translation id="6051028581720248124">FedEx Office'e yazdırarak, kendilerinin <ph name="START_LINK" />kullanım şartlarını<ph name="END_LINK" /> kabul etmiş olursunuz.</translation> @@ -3494,7 +3499,6 @@ <translation id="6089481419520884864">Sayfayı ayrıştır</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Güncelleme iptal ediliyor...</translation> -<translation id="6095149522260432647">Windows masaüstü aramalarının varsayılan arama motoruna yönlendirilmesine olanak tanıyan bir tercihi etkinleştirir.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Ekranı kaplayacak şekilde aç</translation> <translation id="6096326118418049043">X.500 Adı</translation> @@ -4675,6 +4679,7 @@ <translation id="7926906273904422255">Güvenli olmayan başlangıç noktalarını güvenli değil veya "şüpheli" olarak işaretleyin.</translation> <translation id="7928710562641958568">Cihazı çıkar</translation> <translation id="7938594894617528435">Şu anda çevrimdışı</translation> +<translation id="7939374455203157513">Bulut Hizmetlerini etkinleştir</translation> <translation id="7939412583708276221">Korumaya devam et</translation> <translation id="7939997691108949385">Yönetici, denetlenen bu kullanıcıya ait kısıtlamaları ve ayarları <ph name="MANAGEMENT_URL" /> adresinden yapılandırabilir.</translation> <translation id="7943385054491506837">ABD Colemak</translation> @@ -5227,6 +5232,7 @@ <translation id="872537912056138402">Hırvatça</translation> <translation id="8726206820263995930">Sunucudan politika ayarları alınırken hata oluştu: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Uzantı seçeneklerini, yeni bir sekmede açmak yerine chrome://extensions sayfasındaki bir yerleşik öğe olarak görüntüleyin.</translation> +<translation id="8727142376512517020">Bu iletiyi tekrar gösterme</translation> <translation id="8728672262656704056">Gizli moda geçtiniz</translation> <translation id="8730621377337864115">Bitti</translation> <translation id="8731332457891046104"><ph name="DEVICE_TYPE" /> kaydını sil</translation> @@ -5389,7 +5395,6 @@ <translation id="8986362086234534611">Unut</translation> <translation id="8986494364107987395">Kullanım istatistiklerini ve çökme raporlarını otomatik olarak Google'a gönder</translation> <translation id="8987927404178983737">Ay</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Netscape Sertifikası Temel URL'si</translation> <translation id="8994845581478641365">DirectWrite Yazı Tipi Önbelleği Oluşturucu</translation> <translation id="8995603266996330174">Yöneten: <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb index 40ee99d..9d5fa52 100644 --- a/chrome/app/resources/generated_resources_uk.xtb +++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">Вхід</translation> <translation id="1864676585353837027">Змінити налаштування доступу до цих файлів</translation> <translation id="1864756863218646478">Файл неможливо знайти.</translation> +<translation id="1865769994591826607">Лише для з’єднань із тим самим сайтом</translation> <translation id="186612162884103683">Розширення "<ph name="EXTENSION" />" має доступ до читання й записування зображень, відео та звукових файлів у вибраних розташуваннях.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> готовий виконати інсталяцію</translation> <translation id="1873879463550486830">Механізм ізольованого програмного середовища SUID</translation> @@ -1195,6 +1196,7 @@ <translation id="2743387203779672305">Копіювати в буфер</translation> <translation id="2744221223678373668">Спільні</translation> <translation id="2745080116229976798">Посилене підпорядкування Microsoft</translation> +<translation id="2745576239403924641">Дозволити запуск додатків Android на вашому Chromebook.</translation> <translation id="2747990718031257077">Вмикає новий дизайн панелі інструментів розширення (у процесі розробки).</translation> <translation id="2749756011735116528">Увійти в <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Перевірити граматику та правопис</translation> @@ -1408,6 +1410,7 @@ <translation id="3011284594919057757">Про Flash</translation> <translation id="3011362742078013760">Відкрити всі закладки в &анонімному вікні</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Лише для захищених з’єднань із тим самим сайтом</translation> <translation id="3012890944909934180">Перезапустити Chrome на робочому столі</translation> <translation id="3012917896646559015">Негайно зв’яжіться з виробником свого апаратного забезпечення, щоб надіслати свій комп’ютер на ремонт.</translation> <translation id="3015992588037997514">Цей код відображається на екрані вашого Chromebox?</translation> @@ -1640,6 +1643,7 @@ <translation id="331752765902890099">Кнопка "<ph name="PROFILE_NAME" />": помилка входу</translation> <translation id="3319048459796106952">Нове &анонімне вікно</translation> <translation id="331915893283195714">Дозволяти всім сайтам вимикати курсор миші</translation> +<translation id="3319364804843246307">Додатки Android</translation> <translation id="3320859581025497771">ваш оператор</translation> <translation id="3323235640813116393">Вмикає зберігання сторінок у форматі MHTML: єдиний текстовий файл, який містить HTML і всі додаткові ресурси.</translation> <translation id="3323447499041942178">Текстове поле</translation> @@ -1744,6 +1748,7 @@ <translation id="347719495489420368">Натисніть правою кнопкою миші, щоб запустити <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">Продовжити надавати хосту <ph name="HOST" /> доступ до ваших камери та мікрофона</translation> <translation id="3478315065074101056">XPS вмикає розширені опції для типових принтерів, під’єднаних до Google Cloud Print через Chrome. Якщо змінити цю позначку, принтери потрібно буде під’єднувати ще раз.</translation> +<translation id="3479539252931486093">Не очікували? <ph name="BEGIN_LINK" />Повідомте нас<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Не зараз</translation> <translation id="3480892288821151001">Закріпити вікно ліворуч</translation> <translation id="3481915276125965083">На цій сторінці заблоковано такі спливаючі вікна:</translation> @@ -2718,6 +2723,7 @@ <translation id="4941246025622441835">Використати заявку цього пристрою під час його реєстрації для корпоративного керування:</translation> <translation id="4942394808693235155">Завантажити й установити оновлення (якщо є)</translation> <translation id="494286511941020793">Довідка про конфігурацію проксі-сервера</translation> +<translation id="4945378551914476156">Ваші закладки, історія, паролі й інші налаштування синхронізуватимуться з обліковим записом Google, щоб ви могли користуватися ними в Chrome будь-де. Ви можете змінити це на сторінці <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Параметри...</translation> <translation id="4952186391360931024">Нематеріальний</translation> <translation id="4954544650880561668">Керування пристроєм</translation> @@ -2852,7 +2858,6 @@ <ph name="LINE_BREAKS" /> Видалення пристрою під час його використання може спричинити втрату даних. Зачекайте, доки операція завершиться, а потім відключіть пристрій за допомогою програми "Файли".</translation> <translation id="5159488553889181171">Завантаження плагіна <ph name="PLUGIN_NAME" /> скасовано.</translation> -<translation id="5159628598068481063">Опція переспрямування пошукових запитів із комп’ютера Windows</translation> <translation id="5160857336552977725">Увійдіть в обліковий запис на пристрої <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">Помилка надання доступу. Перевірте з’єднання та повторіть спробу пізніше.</translation> <translation id="516592729076796170">Розкладка Дворака для програмістів (США)</translation> @@ -3220,7 +3225,6 @@ <translation id="567881659373499783">Версія <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Переглядати ваші дані на веб-сайті <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Фільтрування в режимі огляду шляхом введення тексту</translation> -<translation id="568428328938709143">Обліковий запис видалено</translation> <translation id="5684661240348539843">Ідентифікатор об’єкта</translation> <translation id="569068482611873351">Імпорт...</translation> <translation id="56907980372820799">Зв’язати облікові записи</translation> @@ -3460,6 +3464,7 @@ <translation id="604001903249547235">Резервне копіювання у хмару</translation> <translation id="6040143037577758943">Закрити</translation> <translation id="604124094241169006">Автоматично</translation> +<translation id="6042308850641462728">Більше</translation> <translation id="604257181445267932">Завдяки Smart Lock можна швидко входити в додатки й на сайти за допомогою паролів, збережених у Google.</translation> <translation id="6049065490165456785">Фотографія з внутрішньої камери</translation> <translation id="6051028581720248124">Друкуючи в службу FedEx Office, ви приймаєте її <ph name="START_LINK" />Загальні положення та умови<ph name="END_LINK" />.</translation> @@ -3491,7 +3496,6 @@ <translation id="6089481419520884864">Сторінка перетворення</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Скасування оновлення...</translation> -<translation id="6095149522260432647">Вмикається опція, яка переспрямовує пошукові запити з комп’ютера Windows у пошукову систему за умовчанням.</translation> <translation id="6095984072944024315">–</translation> <translation id="6096047740730590436">Відкрити в розгорнутому вигляді</translation> <translation id="6096326118418049043">Назва каталогу X.500</translation> @@ -4673,6 +4677,7 @@ <translation id="7926906273904422255">Позначати незахищені джерела як ненадійні або сумнівні.</translation> <translation id="7928710562641958568">Витягнути пристрій</translation> <translation id="7938594894617528435">Зараз офлайн</translation> +<translation id="7939374455203157513">Увімкнути хмарні служби</translation> <translation id="7939412583708276221">Усе ж зберегти</translation> <translation id="7939997691108949385">Менеджер зможе встановлювати обмеження й налаштування для цього контрольованого користувача на сторінці <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">Розкладка Colemak (США)</translation> @@ -5223,6 +5228,7 @@ <translation id="872537912056138402">Хорватська</translation> <translation id="8726206820263995930">Помилка під час отримання налаштувань політики із сервера: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Показувати параметри розширення як вбудований елемент на сторінці chrome://extensions, а не відкривати нову вкладку.</translation> +<translation id="8727142376512517020">Більше не показувати</translation> <translation id="8728672262656704056">Ви перейшли в режим анонімного перегляду</translation> <translation id="8730621377337864115">Готово</translation> <translation id="8731332457891046104">Скасувати реєстрацію <ph name="DEVICE_TYPE" /></translation> @@ -5385,7 +5391,6 @@ <translation id="8986362086234534611">Видалити</translation> <translation id="8986494364107987395">Автоматично надсилати статистику використання та звіти про аварійне завершення роботи в Google</translation> <translation id="8987927404178983737">Місяць</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Основна URL-адреса сертифіката Netscape</translation> <translation id="8994845581478641365">Засіб створення кешу шрифтів DirectWrite</translation> <translation id="8995603266996330174">Керується доменом <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index 93abb38..a65ad80 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -607,6 +607,7 @@ <translation id="1864111464094315414">Đăng nhập</translation> <translation id="1864676585353837027">Thay đổi cách chia sẻ các tệp này</translation> <translation id="1864756863218646478">Không thể tìm thấy tệp.</translation> +<translation id="1865769994591826607">Chỉ các kết nối cùng trang web</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" có thể đọc và ghi hình ảnh, video và tệp âm thanh trong các vị trí đã chọn.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> sẵn sàng hoàn tất việc cài đặt của bạn</translation> <translation id="1873879463550486830">Hộp cát SUID</translation> @@ -1197,6 +1198,7 @@ <translation id="2743387203779672305">Sao chép vào khay nhớ tạm</translation> <translation id="2744221223678373668">Được chia sẻ</translation> <translation id="2745080116229976798">Microsoft Qualified Subordination</translation> +<translation id="2745576239403924641">Bật ứng dụng Android để chạy trên Chromebook của bạn.</translation> <translation id="2747990718031257077">Cho phép thiết kế thanh công cụ tiện ích mới (đang phát triển).</translation> <translation id="2749756011735116528">Đăng nhập vào <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">Kiểm tra Ngữ pháp và Chính tả</translation> @@ -1410,6 +1412,7 @@ <translation id="3011284594919057757">Giới thiệu về Flash</translation> <translation id="3011362742078013760">Mở tất cả dấu trang trong &Cửa sổ ẩn danh</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">Chỉ các kết nối cùng trang web an toàn</translation> <translation id="3012890944909934180">Chạy lại Chrome trên máy tính để bàn</translation> <translation id="3012917896646559015">Vui lòng liên hệ ngay với nhà sản xuất phần cứng của bạn để gửi máy tính đến cơ sở sửa chữa.</translation> <translation id="3015992588037997514">Mã này có hiển thị trên màn hình Chromebox của bạn không?</translation> @@ -1643,6 +1646,7 @@ <translation id="331752765902890099">Nút <ph name="PROFILE_NAME" />: lỗi đăng nhập</translation> <translation id="3319048459796106952">Cửa sổ ẩn &danh mới</translation> <translation id="331915893283195714">Cho phép tất cả các trang web tắt con trỏ chuột</translation> +<translation id="3319364804843246307">Ứng dụng Android</translation> <translation id="3320859581025497771">nhà cung cấp của bạn</translation> <translation id="3323235640813116393">Bật lưu trang dưới dạng MHTML: một tệp văn bản chứa HTML và tất cả tài nguyên phụ.</translation> <translation id="3323447499041942178">Hộp văn bản</translation> @@ -1747,6 +1751,7 @@ <translation id="347719495489420368">Nhấp chuột phải để chạy <ph name="PLUGIN_NAME" />.</translation> <translation id="347785443197175480">Tiếp tục cho phép <ph name="HOST" /> truy cập vào máy ảnh và micrô của bạn</translation> <translation id="3478315065074101056">XPS bật tùy chọn nâng cao cho máy in cổ điển được kết nối với Cloud Print bằng Chrome. Máy in phải được kết nối lại sau khi thay đổi cờ này.</translation> +<translation id="3479539252931486093">Trang web này có như bạn mong đợi không? Hãy <ph name="BEGIN_LINK" />cho chúng tôi biết<ph name="END_LINK" /></translation> <translation id="3479552764303398839">Không phải bây giờ</translation> <translation id="3480892288821151001">Gắn cửa sổ về phía bên trái</translation> <translation id="3481915276125965083">Các cửa sổ bật lên sau đã bị chặn trên trang này:</translation> @@ -2721,6 +2726,7 @@ <translation id="4941246025622441835">Sử dụng yêu cầu thiết bị này khi đăng ký thiết bị để quản lý doanh nghiệp:</translation> <translation id="4942394808693235155">Kiểm tra và áp dụng bản cập nhật</translation> <translation id="494286511941020793">Trợ giúp Cấu hình Proxy</translation> +<translation id="4945378551914476156">Dấu trang, lịch sử, mật khẩu và các cài đặt khác sẽ được đồng bộ hóa với Tài khoản Google của bạn để bạn có thể sử dụng chúng bất cứ khi nào sử dụng Chrome. Bạn có thể thay đổi điều này trong <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">Tùy chọn...</translation> <translation id="4952186391360931024">Non-material</translation> <translation id="4954544650880561668">Điều khiển thiết bị</translation> @@ -2855,7 +2861,6 @@ <ph name="LINE_BREAKS" /> Tháo thiết bị của bạn khi đang được sử dụng có thể gây mất dữ liệu. Vui lòng đợi cho đến khi thao tác kết thúc, sau đó đẩy thiết bị ra bằng ứng dụng Tệp.</translation> <translation id="5159488553889181171">Đã hủy tải xuống <ph name="PLUGIN_NAME" />.</translation> -<translation id="5159628598068481063">Tùy chọn chuyển hướng tìm kiếm trên máy tính để bàn chạy Windows</translation> <translation id="5160857336552977725">Đăng nhập vào <ph name="DEVICE_TYPE" /> của bạn</translation> <translation id="5163869187418756376">Chia sẻ không thành công. Hãy kiểm tra kết nối và thử lại sau.</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> @@ -3223,7 +3228,6 @@ <translation id="567881659373499783">Phiên bản <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">Đọc dữ liệu của bạn trên <ph name="WEBSITE_1" /></translation> <translation id="5680928275846978395">Lọc văn bản ở chế độ Tổng quan</translation> -<translation id="568428328938709143">Đã xóa tài khoản</translation> <translation id="5684661240348539843">Số nhận dạng phần tử</translation> <translation id="569068482611873351">Nhập...</translation> <translation id="56907980372820799">Liên kết dữ liệu</translation> @@ -3465,6 +3469,7 @@ <translation id="604001903249547235">Sao lưu đám mây</translation> <translation id="6040143037577758943">Đóng</translation> <translation id="604124094241169006">Tự động</translation> +<translation id="6042308850641462728">Thêm</translation> <translation id="604257181445267932">Smart Lock giúp bạn đăng nhập nhanh vào ứng dụng và trang web nhờ sử dụng mật khẩu bạn đã lưu với Google.</translation> <translation id="6049065490165456785">Ảnh từ máy ảnh nội bộ</translation> <translation id="6051028581720248124">Bằng cách in tới FedEx Office, bạn đồng ý với <ph name="START_LINK" />điều khoản sử dụng<ph name="END_LINK" /> của họ.</translation> @@ -3496,7 +3501,6 @@ <translation id="6089481419520884864">Lọc trang</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">Đang hủy cập nhật...</translation> -<translation id="6095149522260432647">Bật tùy chọn cho phép chuyển hướng các tìm kiếm trên máy tính để bàn chạy Windows sang công cụ tìm kiếm mặc định.</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">Mở ở dạng phóng to</translation> <translation id="6096326118418049043">Tên X.500</translation> @@ -4679,6 +4683,7 @@ <translation id="7926906273904422255">Đánh dấu các nguồn gốc không an toàn là không an toàn hoặc "đáng ngờ".</translation> <translation id="7928710562641958568">Tháo thiết bị</translation> <translation id="7938594894617528435">Hiện đang ngoại tuyến</translation> +<translation id="7939374455203157513">Bật dịch vụ đám mây</translation> <translation id="7939412583708276221">Vẫn tiếp tục</translation> <translation id="7939997691108949385">Người quản lý có thể định cấu hình các giới hạn và cài đặt cho người dùng bị giám sát này tại <ph name="MANAGEMENT_URL" />.</translation> <translation id="7943385054491506837">Colemak Hoa Kỳ</translation> @@ -5229,6 +5234,7 @@ <translation id="872537912056138402">Tiếng Croatia</translation> <translation id="8726206820263995930">Lỗi khi tìm nạp cài đặt chính sách từ máy chủ: <ph name="CLIENT_ERROR" />.</translation> <translation id="8726888928275282477">Hiển thị các tùy chọn tiện ích ở dạng phần tử được nhúng trong chrome://extensions thay vì mở tab mới.</translation> +<translation id="8727142376512517020">Không hiển thị lại hộp thoại này</translation> <translation id="8728672262656704056">Bạn đã truy cập ẩn danh</translation> <translation id="8730621377337864115">Hoàn tất</translation> <translation id="8731332457891046104">Hủy đăng ký <ph name="DEVICE_TYPE" /></translation> @@ -5391,7 +5397,6 @@ <translation id="8986362086234534611">Quên</translation> <translation id="8986494364107987395">Tự động gửi số liệu thống kê về việc sử dụng và báo cáo sự cố cho Google</translation> <translation id="8987927404178983737">Tháng</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">URL Cơ sở Chứng chỉ Netscape</translation> <translation id="8994845581478641365">Trình tạo bộ nhớ cache phông chữ DirectWrite</translation> <translation id="8995603266996330174">Được quản lý bởi <ph name="DOMAIN" /></translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb index 1b75033..23817de4 100644 --- a/chrome/app/resources/generated_resources_zh-CN.xtb +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -110,7 +110,7 @@ <translation id="1155759005174418845">加泰罗尼亚语</translation> <translation id="1156185823432343624">音量:静音</translation> <translation id="1156689104822061371">键盘布局:</translation> -<translation id="1158054703003659942">作为书签启用</translation> +<translation id="1158054703003659942">启用为书签</translation> <translation id="1158274711289833876">安全的 TLS 连接</translation> <translation id="1160536908808547677">放大后,位置固定的元素和缩放滚动条会附加到此视口。</translation> <translation id="1161575384898972166">请登录“<ph name="TOKEN_NAME" />”,导出客户端证书。</translation> @@ -603,6 +603,7 @@ <translation id="1864111464094315414">登录</translation> <translation id="1864676585353837027">更改这些文件的分享方式</translation> <translation id="1864756863218646478">找不到该文件。</translation> +<translation id="1865769994591826607">仅限同一网站的连接</translation> <translation id="186612162884103683">“<ph name="EXTENSION" />”对于选中位置中的图片、视频及声音文件具有读取和写入权限。</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" />已准备就绪,可以进行安装。</translation> <translation id="1873879463550486830">SUID 沙盒</translation> @@ -1190,6 +1191,7 @@ <translation id="2743387203779672305">复制到剪贴板</translation> <translation id="2744221223678373668">已共享</translation> <translation id="2745080116229976798">Microsoft 合格的部署</translation> +<translation id="2745576239403924641">允许在您的 Chromebook 中运行 Android 应用。</translation> <translation id="2747990718031257077">启用新增的扩展程序工具栏设计功能(仍处于开发阶段)。</translation> <translation id="2749756011735116528">登录<ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">检查拼写和语法</translation> @@ -1403,6 +1405,7 @@ <translation id="3011284594919057757">关于 Flash</translation> <translation id="3011362742078013760">在隐身窗口中打开所有书签(&I)</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">仅限同一网站的安全连接</translation> <translation id="3012890944909934180">重新启动桌面版 Chrome</translation> <translation id="3012917896646559015">请立即与您的硬件制造商联系,将您的计算机送至维修机构。</translation> <translation id="3015992588037997514">您的 Chromebox 屏幕上显示有此确认码吗?</translation> @@ -1633,6 +1636,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" />按钮:登录错误</translation> <translation id="3319048459796106952">打开新的隐身窗口(&I)</translation> <translation id="331915893283195714">允许所有网站隐藏鼠标指针</translation> +<translation id="3319364804843246307">Android 应用</translation> <translation id="3320859581025497771">您的运营商</translation> <translation id="3323235640813116393">将网页保存为MHTML(即包含HTML和所有子资源的单个文本文件)。</translation> <translation id="3323447499041942178">文本框</translation> @@ -1737,6 +1741,7 @@ <translation id="347719495489420368">右键点击即可播放 <ph name="PLUGIN_NAME" />。</translation> <translation id="347785443197175480">继续允许 <ph name="HOST" /> 使用您的摄像头和麦克风</translation> <translation id="3478315065074101056">XPS用于在Chrome中为连接到云打印的传统打印机启用高级选项。更改此项后,您必须重新连接打印机。</translation> +<translation id="3479539252931486093">不应该出现这种情况?请<ph name="BEGIN_LINK" />告诉我们<ph name="END_LINK" /></translation> <translation id="3479552764303398839">以后再说</translation> <translation id="3480892288821151001">将窗口固定到左侧</translation> <translation id="3481915276125965083">已拦截此网页上的下列弹出式窗口:</translation> @@ -2706,6 +2711,7 @@ <translation id="4941246025622441835">将设备登记到企业管理目录下时使用此设备前提条件:</translation> <translation id="4942394808693235155">检查并应用更新</translation> <translation id="494286511941020793">代理配置帮助</translation> +<translation id="4945378551914476156">您的书签、历史记录、密码和其他设置将同步到您的 Google 帐户,这样您便可以在使用 Chrome 时随时使用这些内容。如果要更改此设置,请前往 <ph name="BEGIN_LINK" /></translation> <translation id="4950138595962845479">选项...</translation> <translation id="4952186391360931024">非 Material</translation> <translation id="4954544650880561668">设备控制</translation> @@ -2837,7 +2843,6 @@ <ph name="LINE_BREAKS" /> 取出使用中的设备可能会导致数据丢失。请等待操作完成,然后使用“文件”菜单弹出设备。</translation> <translation id="5159488553889181171">已取消下载<ph name="PLUGIN_NAME" />。</translation> -<translation id="5159628598068481063">Windows 桌面搜索重定向偏好设置</translation> <translation id="5160857336552977725">登录您的<ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">共享失败。请检查连接是否正常,然后重试。</translation> <translation id="516592729076796170">美式 Programmer Dvorak 键盘</translation> @@ -3205,7 +3210,6 @@ <translation id="567881659373499783">版本 <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">读取您在 <ph name="WEBSITE_1" /> 上的数据</translation> <translation id="5680928275846978395">概览模式下的文字过滤功能</translation> -<translation id="568428328938709143">帐户已移除</translation> <translation id="5684661240348539843">资产标识符</translation> <translation id="569068482611873351">导入...</translation> <translation id="56907980372820799">关联数据</translation> @@ -3305,7 +3309,7 @@ <translation id="5819442873484330149">韩语(3 Set,终极版)</translation> <translation id="5819484510464120153">创建应用快捷方式(&S)...</translation> <translation id="5822838715583768518">启动应用</translation> -<translation id="5824480603702411398">作为已保存的网页启用</translation> +<translation id="5824480603702411398">启用为已保存的网页</translation> <translation id="5826507051599432481">公用名 (CN)</translation> <translation id="5827266244928330802">Safari</translation> <translation id="5828228029189342317">您已选择在下载后自动打开特定类型的文件。</translation> @@ -3445,6 +3449,7 @@ <translation id="604001903249547235">云端备份</translation> <translation id="6040143037577758943">关闭</translation> <translation id="604124094241169006">自动</translation> +<translation id="6042308850641462728">更多</translation> <translation id="604257181445267932">借助 Smart Lock,您可以使用 Google 为您保存的密码快速登录应用和网站。</translation> <translation id="6049065490165456785">内部相机中的照片</translation> <translation id="6051028581720248124">通过 FedEx Office 进行打印即表示您接受其<ph name="START_LINK" />使用条款<ph name="END_LINK" />。</translation> @@ -3476,7 +3481,6 @@ <translation id="6089481419520884864">提取页面</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">正在取消更新...</translation> -<translation id="6095149522260432647">启用使 Windows 桌面搜索重定向到默认搜索引擎的偏好设置。</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">以最大化模式打开</translation> <translation id="6096326118418049043">X.500 名称</translation> @@ -4647,6 +4651,7 @@ <translation id="7926906273904422255">将不安全的来源标为“不安全”或“可疑”。</translation> <translation id="7928710562641958568">卸载设备</translation> <translation id="7938594894617528435">当前处于离线状态</translation> +<translation id="7939374455203157513">启用云服务</translation> <translation id="7939412583708276221">仍然保留</translation> <translation id="7939997691108949385">管理员可以转到 <ph name="MANAGEMENT_URL" />,配置针对此受监管用户的限制和设置。</translation> <translation id="7943385054491506837">美国英语(Colemak)</translation> @@ -5197,6 +5202,7 @@ <translation id="872537912056138402">克罗地亚语</translation> <translation id="8726206820263995930">从服务器抓取策略设置时出错:<ph name="CLIENT_ERROR" />。</translation> <translation id="8726888928275282477">使扩展程序选项在chrome://extensions中显示为嵌入式元素,而不是打开新的标签页。</translation> +<translation id="8727142376512517020">不要再显示此对话框</translation> <translation id="8728672262656704056">您已进入隐身模式</translation> <translation id="8730621377337864115">完成</translation> <translation id="8731332457891046104">取消注册<ph name="DEVICE_TYPE" /></translation> @@ -5359,7 +5365,6 @@ <translation id="8986362086234534611">不保存</translation> <translation id="8986494364107987395">将使用情况统计信息和崩溃报告自动发送给 Google</translation> <translation id="8987927404178983737">月</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Netscape 证书基本网址</translation> <translation id="8994845581478641365">DirectWrite 字体缓存构建工具</translation> <translation id="8995603266996330174">由 <ph name="DOMAIN" /> 管理</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb index d9ef968..28b3f8b2 100644 --- a/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -606,6 +606,7 @@ <translation id="1864111464094315414">登入</translation> <translation id="1864676585353837027">變更這些檔案的共用方式</translation> <translation id="1864756863218646478">找不到檔案。</translation> +<translation id="1865769994591826607">僅限同網站連線</translation> <translation id="186612162884103683">「<ph name="EXTENSION" />」對於勾選位置中的圖片、影片和聲音檔,具有讀取和寫入權限。</translation> <translation id="1867780286110144690">「<ph name="PRODUCT_NAME" />」已準備好完成安裝程序</translation> <translation id="1873879463550486830">SUID 沙箱</translation> @@ -1195,6 +1196,7 @@ <translation id="2743387203779672305">複製到剪貼簿</translation> <translation id="2744221223678373668">共用</translation> <translation id="2745080116229976798">Microsoft 合格分類</translation> +<translation id="2745576239403924641">允許 Android 應用程式在您的 Chromebook 上運作。</translation> <translation id="2747990718031257077">啟用新的擴充功能工具列設計 (仍處於開發階段)。</translation> <translation id="2749756011735116528">登入 <ph name="PRODUCT_NAME" /></translation> <translation id="2749881179542288782">檢查拼字及文法</translation> @@ -1408,6 +1410,7 @@ <translation id="3011284594919057757">關於 Flash</translation> <translation id="3011362742078013760">在無痕式視窗中開啟所有書籤(&I)</translation> <translation id="3012631534724231212">(iframe)</translation> +<translation id="3012804260437125868">僅限安全的同網站連線</translation> <translation id="3012890944909934180">在電腦上重新啟動 Chrome</translation> <translation id="3012917896646559015">請立即與您的硬體製造商聯絡,將電腦送返維修中心。</translation> <translation id="3015992588037997514">您的 Chromebox 螢幕上是否顯示這段代碼?</translation> @@ -1640,6 +1643,7 @@ <translation id="331752765902890099"><ph name="PROFILE_NAME" />按鈕:登入錯誤</translation> <translation id="3319048459796106952">新增無痕式視窗(&I)</translation> <translation id="331915893283195714">允許所有網站停用滑鼠游標</translation> +<translation id="3319364804843246307">Android 應用程式</translation> <translation id="3320859581025497771">您的系統業者</translation> <translation id="3323235640813116393">將網頁另存為 MHTML (包含 HTML 和所有子資源的單一文字檔案)。</translation> <translation id="3323447499041942178">文字框</translation> @@ -1744,6 +1748,7 @@ <translation id="347719495489420368">按一下滑鼠右鍵即可播放 <ph name="PLUGIN_NAME" />。</translation> <translation id="347785443197175480">繼續允許 <ph name="HOST" /> 存取您的攝影機和麥克風</translation> <translation id="3478315065074101056">XPS 會為透過 Chrome 連線至雲端列印的傳統印表機啟用進階選項。如果變更這個標記,必須為印表機重新建立連線。</translation> +<translation id="3479539252931486093">這是未預期的情況嗎?<ph name="BEGIN_LINK" />通知我們<ph name="END_LINK" /></translation> <translation id="3479552764303398839">現在不要</translation> <translation id="3480892288821151001">靠左固定視窗</translation> <translation id="3481915276125965083">系統已封鎖此網頁的下列彈出式視窗:</translation> @@ -2714,6 +2719,7 @@ <translation id="4941246025622441835">為企業管理服務註冊裝置時使用這個裝置申請單:</translation> <translation id="4942394808693235155">檢查並套用更新</translation> <translation id="494286511941020793">Proxy 設定說明</translation> +<translation id="4945378551914476156">您的書籤、歷史紀錄、密碼和其他設定都會在您的 Google 帳戶中保持同步,讓您在 Chrome 中使用。您可以在 [<ph name="BEGIN_LINK" />] 中變更這項設定</translation> <translation id="4950138595962845479">選項...</translation> <translation id="4952186391360931024">非質感</translation> <translation id="4954544650880561668">裝置管理</translation> @@ -2846,7 +2852,6 @@ <ph name="LINE_BREAKS" /> 您的裝置仍在運作中,如果立即移除裝置,您的資料很可能會遺失。請耐心等候作業結束,再使用「檔案」應用程式退出裝置。</translation> <translation id="5159488553889181171"><ph name="PLUGIN_NAME" /> 下載作業已取消。</translation> -<translation id="5159628598068481063">Windows 電腦搜尋重新導向偏好設定</translation> <translation id="5160857336552977725">登入您的 <ph name="DEVICE_TYPE" /></translation> <translation id="5163869187418756376">共用失敗。請檢查連線狀態,然後再試一次。</translation> <translation id="516592729076796170">Programmer Dvorak 美式配置</translation> @@ -3214,7 +3219,6 @@ <translation id="567881659373499783">版本 <ph name="PRODUCT_VERSION" /></translation> <translation id="5678955352098267522">讀取您在 <ph name="WEBSITE_1" /> 上產生的資料</translation> <translation id="5680928275846978395">總覽模式的文字篩選功能</translation> -<translation id="568428328938709143">帳戶已遭移除</translation> <translation id="5684661240348539843">資產識別碼</translation> <translation id="569068482611873351">匯入...</translation> <translation id="56907980372820799">連結資料</translation> @@ -3454,6 +3458,7 @@ <translation id="604001903249547235">雲端備份</translation> <translation id="6040143037577758943">關閉</translation> <translation id="604124094241169006">自動</translation> +<translation id="6042308850641462728">詳細資訊</translation> <translation id="604257181445267932">有了 Smart Lock,您就可以透過儲存在 Google 系統中的密碼快速登入應用程式和網站。</translation> <translation id="6049065490165456785">內部相機中的相片</translation> <translation id="6051028581720248124">透過 FedEx Office 進行列印,即表示您接受其<ph name="START_LINK" />使用條款<ph name="END_LINK" />。</translation> @@ -3485,7 +3490,6 @@ <translation id="6089481419520884864">提取頁面</translation> <translation id="6092270396854197260">MSPY</translation> <translation id="6093888419484831006">正在取消更新...</translation> -<translation id="6095149522260432647">啟用搜尋引擎偏好設定,將 Windows 電腦上的搜尋指令重新導向到預設的搜尋引擎。</translation> <translation id="6095984072944024315">−</translation> <translation id="6096047740730590436">最大化開啟</translation> <translation id="6096326118418049043">X.500 姓名</translation> @@ -4662,6 +4666,7 @@ <translation id="7926906273904422255">將不安全的來源標示為不安全或「可疑」。</translation> <translation id="7928710562641958568">退出裝置</translation> <translation id="7938594894617528435">目前離線</translation> +<translation id="7939374455203157513">啟用雲端服務</translation> <translation id="7939412583708276221">保留</translation> <translation id="7939997691108949385">管理員可以前往 <ph name="MANAGEMENT_URL" /> 修改這位受監管使用者的限制和設定。</translation> <translation id="7943385054491506837">Colemak 美式配置</translation> @@ -5212,6 +5217,7 @@ <translation id="872537912056138402">克羅埃西亞文</translation> <translation id="8726206820263995930">從伺服器擷取政策設定時發生錯誤:<ph name="CLIENT_ERROR" />。</translation> <translation id="8726888928275282477">在 chrome://extensions 中嵌入元素來顯示擴充功能選項,而非開啟新分頁。</translation> +<translation id="8727142376512517020">不要再顯示這個對話方塊</translation> <translation id="8728672262656704056">您已啟用無痕模式。</translation> <translation id="8730621377337864115">完成</translation> <translation id="8731332457891046104">取消註冊 <ph name="DEVICE_TYPE" /></translation> @@ -5374,7 +5380,6 @@ <translation id="8986362086234534611">清除</translation> <translation id="8986494364107987395">自動傳送使用統計資料及當機報告給 Google</translation> <translation id="8987927404178983737">月</translation> -<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="899403249577094719">Netscape 憑證基底網址</translation> <translation id="8994845581478641365">DirectWrite 字型快取產生器</translation> <translation id="8995603266996330174">由 <ph name="DOMAIN" /> 管理</translation>
diff --git a/chrome/app/resources/google_chrome_strings_am.xtb b/chrome/app/resources/google_chrome_strings_am.xtb index 285ddb7..5643de44 100644 --- a/chrome/app/resources/google_chrome_strings_am.xtb +++ b/chrome/app/resources/google_chrome_strings_am.xtb
@@ -55,7 +55,6 @@ <translation id="2397416548179033562">የChrome ምናሌ አሳይ</translation> <translation id="2429317896000329049">ማመሳሰል ለጎራዎ ስለማይገኝ Google Chrome ውሂብዎን ማመሳሰል አልቻለም።</translation> <translation id="2485422356828889247">አራግፍ</translation> -<translation id="2576431527583832481">Chrome አሁን ተሻሽሏል! አዲስ ስሪት አለ።</translation> <translation id="2580411288591421699">አሁን እየሰራ ካለው Google Chrome ጋር አንድ አይነት የሆነ ስሪት መጫን አይቻልም። እባክዎ Google Chrome ይዝጉና እንደገና ይሞክሩ።</translation> <translation id="2582790009689336987">የLinux ስርዓት ከአሁን በኋላ ስለማይደገፉ ይህ ኮምፒውተር በቅርቡ የGoogle Chrome ዝማኔዎችን መቀበል ያቆማል።</translation> <translation id="2588322182880276190">የChrome አርማ</translation> @@ -115,7 +114,6 @@ <translation id="4633000520311261472">Chrome ይበልጥ ደህንነቱ የተጠበቀ እንዲሆን ለማድረግ፣ በ<ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ውስጥ ያልተጠቀሱ እና እርስዎ ሳያውቋቸው የታከሉ ሊሆኑ የሚችሉ የተወሰኑ ዝርዝሮችን አሰናክለናል።</translation> <translation id="4700157086864140907">Google Chrome አሳሹ ላይ የሚተይቡትን ለGoogle አገልጋዮች በመላክ ይበልጥ አዋቂ የሆነ ፊደል አራሚ ሊያቀርብልዎት ይችላል፣ ይህም Google ፍለጋ የሚጠቀመውን ተመሳሳዩ የፊደል አራሚ ቴክኖሎጂ እንዲጠቀሙ ያስችልዎታል።</translation> <translation id="4728575227883772061">ተለይቶ ባልታወቀ ስህተት ምክንያት ጭነት ከሽፏል። Google Chrome አሁን እያሄደ ከሆነ ፣ እባክዎ ይዝጉትና እንደገና ይሞክሩ።</translation> -<translation id="473775607612524610">አዘምን</translation> <translation id="4743926867934016338">ተቀበል እና ፈልግ</translation> <translation id="4751441238232965030">ይህ ኮምፒውተር በቅርቡ 32-ቢት የGoogle Chrome ዝማኔዎችን አይቀበልም። እባክዎን ወደ 64-ቢት Google Chrome ያሻሽሉ።</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ar.xtb b/chrome/app/resources/google_chrome_strings_ar.xtb index 226fce6..3d5d8e52 100644 --- a/chrome/app/resources/google_chrome_strings_ar.xtb +++ b/chrome/app/resources/google_chrome_strings_ar.xtb
@@ -53,7 +53,6 @@ <translation id="2397416548179033562">لإظهار قائمة Chrome</translation> <translation id="2429317896000329049">تعذر على Google Chrome مزامنة البيانات نظرًا لأن المزامنة غير متاحة في نطاقك.</translation> <translation id="2485422356828889247">إزالة التثبيت</translation> -<translation id="2576431527583832481">لقد أصبح Chrome أفضل من ذي قبل! يتوفر إصدار جديد.</translation> <translation id="2580411288591421699">لا يمكن تثبيت نفس الإصدار المثبت من Google Chrome والذي يتم تشغيله حاليًا. الرجاء إغلاق Google Chrome وإعادة المحاولة.</translation> <translation id="2582790009689336987">سيتوقف هذا الكمبيوتر قريبًا عن تلقي تحديثات Google Chrome نظرًا لأن نظام Linux هذا لم يعد مدعومًا.</translation> <translation id="2588322182880276190">شعار Chrome</translation> @@ -113,7 +112,6 @@ <translation id="4633000520311261472">لجعل Chrome أكثر أمانًا، تم تعطيل بعض الإضافات غير المدرجة في <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> والتي ربما تمت إضافتها بدون علمك.</translation> <translation id="4700157086864140907">يمكن أن يقدم Google Chrome تدقيقًا إملائيًا أكثر دقة من خلال إرسال ما تكتبه في المتصفح إلى خوادم Google، مما يتيح لك استخدام تقنية التدقيق الإملائي ذاتها المستخدمة في بحث Google.</translation> <translation id="4728575227883772061">فشلت عملية التثبيت بسبب خطأ غير محدد. إذا كان Google Chrome في حالة التشغيل حاليًا، يُرجى إغلاقه وإعادة المحاولة.</translation> -<translation id="473775607612524610">تحديث</translation> <translation id="4743926867934016338">موافقة وبحث</translation> <translation id="4751441238232965030">سيتوقف هذا الكمبيوتر قريبًا عن تلقِّي تحديثات Google Chrome إصدار 32 بت. الرجاء الترقية إلى Google Chrome إصدار 64 بت.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bg.xtb b/chrome/app/resources/google_chrome_strings_bg.xtb index 9e9adf3..20e0d03 100644 --- a/chrome/app/resources/google_chrome_strings_bg.xtb +++ b/chrome/app/resources/google_chrome_strings_bg.xtb
@@ -53,7 +53,6 @@ <translation id="2397416548179033562">Показване на менюто на Chrome</translation> <translation id="2429317896000329049">Google Chrome не можа да синхронизира данните ви, защото синхронизирането не е налице за домейна ви.</translation> <translation id="2485422356828889247">Деинсталиране</translation> -<translation id="2576431527583832481">Chrome току-що се подобри! Налице е нова версия.</translation> <translation id="2580411288591421699">Не може да се инсталира същата версия на Google Chrome, която се използва понастоящем. Моля, затворете браузъра и опитайте отново.</translation> <translation id="2582790009689336987">Компютърът скоро ще спре да получава актуализации на Google Chrome, тъй като тази система Linux вече няма да се поддържа.</translation> <translation id="2588322182880276190">Лого на Chrome</translation> @@ -113,7 +112,6 @@ <translation id="4633000520311261472">За да направим Chrome по-безопасен, деактивирахме някои разширения, които не са посочени в <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> и може да са били добавени без ваше знание.</translation> <translation id="4700157086864140907">Google Chrome може да предостави по-интелигентна проверка на правописа, като изпрати до сървърите ни въвежданото от вас в браузъра, позволявайки ви да използвате същата технология за проверка на правописа, ползвана при търсенето с Google.</translation> <translation id="4728575227883772061">Инсталирането не бе успешно поради неизвестна грешка. Ако Google Chrome понастоящем работи, моля, затворете го и опитайте отново.</translation> -<translation id="473775607612524610">Актуализиране</translation> <translation id="4743926867934016338">Приемане и търсене</translation> <translation id="4751441238232965030">Този компютър скоро ще спре да получава актуализации за 32-битовата версия на Google Chrome. Моля, надстройте до 64-битовата версия на браузъра.</translation> <translation id="4754614261631455953">Google Chrome Canary (входящ трафик за mDNS)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bn.xtb b/chrome/app/resources/google_chrome_strings_bn.xtb index 246986a..cb024ed 100644 --- a/chrome/app/resources/google_chrome_strings_bn.xtb +++ b/chrome/app/resources/google_chrome_strings_bn.xtb
@@ -6,7 +6,7 @@ <translation id="1016765312371154165">Chrome সঠিকভাবে বন্ধ হয়নি৷</translation> <translation id="103396972844768118">আপনার Chrome ডেটা সংক্রান্ত গুরুত্বপূর্ণ তথ্য</translation> <translation id="1035334672863811645">Chrome এ সাইন ইন করুন</translation> -<translation id="1061441684050139317">এই সাইটের সাথে এটি ভাগ করতে Chrome এর মাইক্রোফোন অ্যাক্সেস প্রয়োজন।</translation> +<translation id="1061441684050139317">এই সাইটের সাথে এটি শেয়ার করতে Chrome এর মাইক্রোফোন অ্যাক্সেস প্রয়োজন।</translation> <translation id="1065672644894730302">আপনার অভিরুচিগুলি পড়া যাবে না৷ কিছু বৈশিষ্ট্য অনুপলব্ধ থাকতে পারে ও অভিরুচিগুলিতে করা পরিবর্তনগুলি সংরক্ষিত হবে না৷</translation> <translation id="1073391069195728457">Chrome - বিজ্ঞপ্তিগুলি</translation> <translation id="1104959162601287462">&Chrome OS সম্বন্ধে</translation> @@ -53,7 +53,6 @@ <translation id="2397416548179033562">Chrome মেনু দেখান</translation> <translation id="2429317896000329049">আপনার ডোমেনে সিঙ্ক উপলব্ধ না থাকার কারণে Google Chrome সিঙ্ক করতে পারেনি৷</translation> <translation id="2485422356828889247">আনইনস্টল</translation> -<translation id="2576431527583832481">Chrome আরো ভাল হয়েছে! একটি নতুন সংস্করণ উপলব্ধ আছে৷</translation> <translation id="2580411288591421699">বর্তমানে Google Chrome এর যে সংস্করণটি চলছে সেটি ইনস্টল করতে পারে না৷ দয়া করে Google Chrome বন্ধ করুন এবং আবার চেষ্টা করুন৷</translation> <translation id="2582790009689336987">এই কম্পিউটারটি শীঘ্রই Google Chrome এর আপডেটগুলি গ্রহণ করা বন্ধ করবে কারণ এই Linux সিস্টেম আর সমর্থন করা হবে না।</translation> <translation id="2588322182880276190">Chrome লোগো</translation> @@ -82,7 +81,7 @@ <translation id="3451115285585441894">Chrome-এ জোড়া হচ্ছে...</translation> <translation id="345171907106878721">Chrome এর সাথে নিজেকে যোগ করুন</translation> <translation id="3612333635265770873">একই নামের একটি মডিউল Google Chrome-এর সাথে বিবাদ করছে বলে জানা গেছে৷</translation> -<translation id="3622797965165704966">এখন আপনার Google অ্যাকাউন্ট ও ভাগ করা কম্পিউটারগুলিতে Chrome ব্যবহার করা আরো সহজ৷</translation> +<translation id="3622797965165704966">এখন আপনার Google অ্যাকাউন্ট ও শেয়ার করা কম্পিউটারগুলিতে Chrome ব্যবহার করা আরো সহজ৷</translation> <translation id="3735758079232443276">আপনি Chrome শুরু করলে কোন পৃষ্ঠাটি দেখানো হবে তা "<ph name="EXTENSION_NAME" />" এক্সটেনশান পরিবর্তন করেছে।</translation> <translation id="3738139272394829648">স্পর্শের মাধ্যমে অনুসন্ধান</translation> <translation id="3784527566857328444">Chrome থেকে সরান...</translation> @@ -98,7 +97,7 @@ <translation id="4147555960264124640">আপনি একটি পরিচালিত অ্যাকাউন্টের মাধ্যমে সাইন ইন করছেন এবং এর প্রশাসককে আপনার Google Chrome প্রোফাইলের উপরে নিয়ন্ত্রণ দিচ্ছেন৷ আপনার Chrome ডেটা, যেমন অ্যাপ্লিকেশানগুলি, বুকমার্কগুলি, ইতিহাস, পাসওয়ার্ডগুলি এবং অন্যান্য সেটিংস <ph name="USER_NAME" /> এতে স্থায়ীভাবে সম্পৃক্ত হবে৷ আপনি Google অ্যাকাউন্টগুলির ড্যাশবোর্ডের মাধ্যমে এই ডেটাগুলি মুছতে সক্ষম হবেন, কিন্তু আপনি অন্য একটি অ্যাকাউন্টের সাথে এই ডেটা সংশ্লিষ্ট করতে পারবেন না৷ <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">ইনস্টলারটি সংরক্ষণাগার কমপ্রেস মুক্ত করতে ব্যর্থ হয়েছে৷ দয়া করে পুনরায় Google Chrome ডাউনলোড করুন৷</translation> <translation id="4167057906098955729">Chrome অ্যাপ্লিকেশান, এক্সটেনশান, এবং ওয়েবসাইটগুলি থেকে আপনার সব বিজ্ঞপ্তি আপনি এখানে দেখতে পারবেন৷</translation> -<translation id="423410644998903704">এই সাইটের সাথে এগুলি ভাগ করতে Chrome এর অনুমতির অ্যাক্সেস প্রয়োজন।</translation> +<translation id="423410644998903704">এই সাইটের সাথে এগুলি শেয়ার করতে Chrome এর অনুমতির অ্যাক্সেস প্রয়োজন।</translation> <translation id="4251615635259297716">এই অ্যাকাউন্টে আপনার Chrome ডেটা লিঙ্ক করবেন?</translation> <translation id="4309555186815777032">(Chrome <ph name="BEGIN_BUTTON" />পুনরায় চালু করা<ph name="END_BUTTON" /> প্রয়োজন)</translation> <translation id="4331809312908958774">Chrome OS</translation> @@ -113,13 +112,12 @@ <translation id="4633000520311261472">Chrome কে আরো নিরাপদ করতে, আমরা কিছু এক্সটেনশান অক্ষম করেছি যা <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> এ তালিকাবদ্ধ করা হয়নি এবং হয়ত আপনাকে না জানিয়ে যোগ করা হয়েছে৷</translation> <translation id="4700157086864140907">Google Chrome আপনি Google সার্ভারগুলিতে ব্রাউজারে কী টাইপ করেন তা পাঠিয়ে আরো স্মার্ট বানান-পরীক্ষণ সরবরাহ করতে পারে এতে আপনাকে Google অনুসন্ধানে ব্যবহৃত একই বানান-পরীক্ষণের প্রযুক্তি ব্যবহার করার অনুমতি দেয়৷</translation> <translation id="4728575227883772061">অনির্দিষ্ট ত্রুটির জন্য ইনস্টলেশন ব্যর্থ হয়েছে৷ যদি Google Chrome বর্তমানে চলতে থাকে তবে দয়া করে এটি বন্ধ করে আবার চেষ্টা করুন৷</translation> -<translation id="473775607612524610">আপডেট</translation> <translation id="4743926867934016338">স্বীকার ও অনুসন্ধান করুন</translation> <translation id="4751441238232965030">এই কম্পিউটারটি শীঘ্রই ৩২-বিট Google Chrome আপডেট গ্রহণ করা বন্ধ করবে। দয়া করে ৬৪-বিট Google Chrome এ আপগ্রেড করুন।</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation> <translation id="4794050651896644714">Chrome এ বিবরণ সংরক্ষণ করুন</translation> <translation id="4891791193823137474">Google Chrome-কে পশ্চাদপটে চালতে দিন</translation> -<translation id="4921569541910214635">একটি কম্পিউটার ভাগ করবেন? এখন আপনি আপনার পছন্দমতো উপায়ে Chrome কে সেট আপ করতে পারেন৷</translation> +<translation id="4921569541910214635">একটি কম্পিউটার শেয়ার করবেন? এখন আপনি আপনার পছন্দমতো উপায়ে Chrome কে সেট আপ করতে পারেন৷</translation> <translation id="4925019873400497719">Chrome যাচাই করেছে যে <ph name="ISSUER" /> এই ওয়েবসাইটের শংসাপত্র জারি করেছে। সার্ভারটি শংসাপত্র স্বচ্ছতা তথ্য সরবরাহ করেছে, কিন্তু এটি অবৈধ।</translation> <translation id="4953650215774548573">আপনার ডিফল্ট ব্রাউজার হিসাবে Google Chrome কে সেট করুন</translation> <translation id="4987308747895123092">দয়া করে সমস্ত Google Chrome উইন্ডোগুলি (Windows 8 মোডে যেগুলি আছে সেগুলি সহ) বন্ধ করুন এবং আবার চেষ্টা করুন৷</translation> @@ -149,11 +147,11 @@ <translation id="5749068826913805084">ফাইল ডাউনলোড করতে Chrome এর জন্য সঞ্চয়স্থানের অ্যাক্সেস প্রয়োজন।</translation> <translation id="5855036575689098185">আপনার কম্পিউটারে যে সফটওয়্যারটি চলছে সেটি Google Chrome এর সঙ্গে সঙ্গতিপূর্ণ নয়৷</translation> <translation id="5877064549588274448">চ্যানেল পরিবর্তিত হয়েছে৷ পরিবর্তনগুলি প্রয়োগ করার জন্য আপনার ডিভাইস পুনরায় শুরু করুন৷</translation> -<translation id="5931853610562009806">Mac এ, পাসওয়ার্ডগুলি আপনার Keychain এ সংরক্ষিত হতে পারে এবং এই OS X অ্যাকাউন্টটি ভাগ করে এমন অন্য Chrome ব্যবহারকারীরা এটি অ্যাক্সেস বা সিঙ্ক করতে পারবে।</translation> +<translation id="5931853610562009806">Mac এ, পাসওয়ার্ডগুলি আপনার Keychain এ সংরক্ষিত হতে পারে এবং এই OS X অ্যাকাউন্টটি শেয়ার করে এমন অন্য Chrome ব্যবহারকারীরা এটি অ্যাক্সেস বা সিঙ্ক করতে পারবে।</translation> <translation id="5940385492829620908">আপনার ওয়েব, বুকমার্ক, এবং Chrome এর অন্যান্য জিনিস এখানে রয়েছে৷</translation> <translation id="5941830788786076944">Google Chrome-কে ডিফল্ট ব্রাউজার করুন</translation> <translation id="597770749449734237">Google Chrome ডিবাগ করার জন্য উপযোগী অতিরিক্ত কীবোর্ড শর্টকার্ট সক্ষম করে৷</translation> -<translation id="6012342843556706400">এই সাইটের সাথে এটি ভাগ করতে Chrome এর অবস্থানের অ্যাক্সেস প্রয়োজন।</translation> +<translation id="6012342843556706400">এই সাইটের সাথে এটি শেয়ার করতে Chrome এর অবস্থানের অ্যাক্সেস প্রয়োজন।</translation> <translation id="6014844626092547096">আপনি এখন Chrome এ সাইন ইন করেছেন! আপনার প্রশাসক দ্বারা সিঙ্ক অক্ষম করা আছে৷</translation> <translation id="6113794647360055231">Chrome আরো ভাল হয়ে উঠেছে</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation> @@ -208,7 +206,7 @@ <translation id="7761834446675418963">Chrome খোলার জন্য আপনার নামের উপরে ক্লিক করুন এবং ব্রাউজ করা শুরু করুন৷</translation> <translation id="7781002470561365167">Google Chrome এর একটি নতুন ভার্সন উপলব্ধ।</translation> <translation id="7787950393032327779">অন্য একটি কম্পিউটারে (<ph name="HOST_NAME" />) প্রোফাইলটি অন্য Google Chrome প্রক্রিয়া (<ph name="PROCESS_ID" />) দ্বারা ব্যবহৃত হচ্ছে বলে মনে হচ্ছে৷ Chrome প্রোফাইলটিকে লক করেছে যাতে এটি বিকৃত না হয়ে যায়৷ যদি আপনি নিশ্চিত হন যে আর কোনো প্রক্রিয়া এই প্রোফাইলটিকে ব্যবহার করছে না, তবে আপনি প্রোফাইলটিকে আনলক করতে পারেন এবং Chrome কে পুনরায় লঞ্চ করতে পারেন৷</translation> -<translation id="7788788617745289808">এই সাইটের সাথে এটি ভাগ করতে Chrome এর ক্যামেরা অ্যাক্সেস প্রয়োজন।</translation> +<translation id="7788788617745289808">এই সাইটের সাথে এটি শেয়ার করতে Chrome এর ক্যামেরা অ্যাক্সেস প্রয়োজন।</translation> <translation id="7808348361785373670">Chrome থেকে সরান...</translation> <translation id="7825851276765848807">অনির্দিষ্ট ত্রুটির জন্য ইনস্টলেশন ব্যর্থ হয়েছে৷ দয়া করে পুনরায় Google Chrome ডাউনলোড করুন৷</translation> <translation id="7890208801193284374">যদি আপনি একটি কম্পিউটার ভাগ করেন, তাহলে বন্ধু ও পরিবারের লোকজন পৃথকভাবে ব্রাউজ করতে পারবেন এবং তাদের ইচ্ছা অনুযায়ী Chrome এর সেটআপ করতে পারবেন৷</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ca.xtb b/chrome/app/resources/google_chrome_strings_ca.xtb index ba41aec..7c54bc1 100644 --- a/chrome/app/resources/google_chrome_strings_ca.xtb +++ b/chrome/app/resources/google_chrome_strings_ca.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Mostra el menú de Chrome</translation> <translation id="2429317896000329049">Google Chrome no ha pogut sincronitzar les dades perquè la sincronització no està disponible per al vostre domini.</translation> <translation id="2485422356828889247">Desinstal·la</translation> -<translation id="2576431527583832481">Chrome ara és millor. Hi ha una versió nova disponible.</translation> <translation id="2580411288591421699">No es pot instal·lar la mateixa versió de Google Chrome que s'executa actualment. Tanqueu Google Chrome i torneu-ho a provar.</translation> <translation id="2582790009689336987">Aquest ordinador aviat deixarà de rebre actualitzacions de Google Chrome perquè aquest sistema Linux ja no serà compatible.</translation> <translation id="2588322182880276190">Logotip de Chrome</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">Perquè Chrome sigui més segur, hem desactivat algunes de les extensions que no apareixen a <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> i que és possible que s'hagin afegit sense que ho sapigueu.</translation> <translation id="4700157086864140907">Perquè el corrector ortogràfic sigui més útil, Google Chrome envia als servidors de Google el text que escriviu al navegador i, així, poder fer servir la mateixa tecnologia de correcció ortogràfica de la cerca de Google.</translation> <translation id="4728575227883772061">S'ha produït un error no especificat durant la instal·lació. Si Google Chrome s'està executant en aquests moments, tanca'l i torna-ho a provar.</translation> -<translation id="473775607612524610">Actualitza</translation> <translation id="4743926867934016338">Accepta i cerca</translation> <translation id="4751441238232965030">Aquest ordinador aviat deixarà de rebre actualitzacions de Google Chrome de 32 bits. Feu l'actualització a Google Chrome de 64 bits.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_cs.xtb b/chrome/app/resources/google_chrome_strings_cs.xtb index 5013b09..8b4ce106 100644 --- a/chrome/app/resources/google_chrome_strings_cs.xtb +++ b/chrome/app/resources/google_chrome_strings_cs.xtb
@@ -55,7 +55,6 @@ <translation id="2397416548179033562">Zobrazit nabídku Chrome</translation> <translation id="2429317896000329049">Google Chrome nemohl synchronizovat vaše data, protože Synchronizace ve vaší doméně není k dispozici.</translation> <translation id="2485422356828889247">Odinstalovat</translation> -<translation id="2576431527583832481">Chrome je opět o něco lepší. K dispozici je nová verze.</translation> <translation id="2580411288591421699">Nelze nainstalovat verzi aplikace Google Chrome, která je právě spuštěná. Ukončete aplikaci Google Chrome a opakujte akci.</translation> <translation id="2582790009689336987">Google Chrome se v tomto počítači již brzy přestane aktualizovat, protože tento systém Linux již nebude podporován.</translation> <translation id="2588322182880276190">Logo Chrome</translation> @@ -115,7 +114,6 @@ <translation id="4633000520311261472">Aby byl Chrome bezpečnější, deaktivovali jsme některá rozšíření, která nejsou uvedena na webu <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> a mohla být přidána bez vašeho vědomí.</translation> <translation id="4700157086864140907">Google Chrome může poskytovat lepší kontrolu pravopisu tím, že text zadaný do prohlížeče odešle na servery Google. Umožňuje vám tak používat stejnou technologii kontroly pravopisu, jakou používá Vyhledávání Google.</translation> <translation id="4728575227883772061">Došlo k nespecifikované chybě, instalace se nezdařila. Pokud je Google Chrome právě spuštěný, zavřete jej prosím a zkuste to znovu.</translation> -<translation id="473775607612524610">Aktualizovat</translation> <translation id="4743926867934016338">Přijmout a vyhledat</translation> <translation id="4751441238232965030">Tento počítač brzy přestane dostávat aktualizace pro 32bitovou verzi prohlížeče Google Chrome. Nainstalujte prosím 64bitovou verzi Chromu.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_da.xtb b/chrome/app/resources/google_chrome_strings_da.xtb index 1092091..90aeb36 100644 --- a/chrome/app/resources/google_chrome_strings_da.xtb +++ b/chrome/app/resources/google_chrome_strings_da.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Vis Chrome-menuen</translation> <translation id="2429317896000329049">Google Chrome kunne ikke synkronisere dine data, fordi synkronisering ikke er tilgængelig for dit domæne.</translation> <translation id="2485422356828889247">Afinstaller</translation> -<translation id="2576431527583832481">Chrome er lige blevet bedre! Der er en ny tilgængelig version.</translation> <translation id="2580411288591421699">Det er ikke muligt at installere den samme version af Google Chrome, som allerede kører. Luk Google Chrome, og prøv igen.</translation> <translation id="2582790009689336987">Denne computer holder snart op med at modtage Google Chrome-opdateringer, da dette Linux-system ikke længere understøttes.</translation> <translation id="2588322182880276190">Chrome-logo</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">For at gøre Chrome sikrere har vi slået nogle udvidelser fra, som ikke er anført i <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> og muligvis er blevet tilføjet, uden at du vidste det.</translation> <translation id="4700157086864140907">Google Chrome kan anvende smartere stavekontrol ved at sende dine indtastninger i browseren til Googles servere, så du kan bruge den samme teknologi til stavekontrol, som der anvendes i Google-søgninger.</translation> <translation id="4728575227883772061">Installationen mislykkedes på grund af en ikke-specificeret fejl. Hvis Google Chrome kører, bedes du lukke programmet og prøve igen.</translation> -<translation id="473775607612524610">Opdater</translation> <translation id="4743926867934016338">Acceptér, og søg</translation> <translation id="4751441238232965030">Denne computer holder snart op med at modtage 32-bit Google Chrome-opdateringer. Opgrader til 64-bit Google Chrome.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_de.xtb b/chrome/app/resources/google_chrome_strings_de.xtb index f4322c7..62ab1a0 100644 --- a/chrome/app/resources/google_chrome_strings_de.xtb +++ b/chrome/app/resources/google_chrome_strings_de.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Chrome-Menü anzeigen</translation> <translation id="2429317896000329049">Google Chrome konnte Ihre Daten nicht synchronisieren, da die Synchronisierung für Ihre Domain nicht zur Verfügung steht.</translation> <translation id="2485422356828889247">Deinstallieren</translation> -<translation id="2576431527583832481">Chrome ist jetzt noch besser! Es ist eine neue Version verfügbar.</translation> <translation id="2580411288591421699">Die Google Chrome-Version kann nicht installiert werden, da sie aktuell ausgeführt wird. Schließen Sie Google Chrome und versuchen Sie es erneut.</translation> <translation id="2582790009689336987">Dieser Computer erhält demnächst keine Google Chrome-Updates mehr, da dieses Linux-System nicht mehr unterstützt wird.</translation> <translation id="2588322182880276190">Chrome-Logo</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">Um Chrome sicherer zu machen, haben wir einige Erweiterungen deaktiviert, die nicht im <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> aufgeführt sind und möglicherweise ohne Ihr Wissen hinzugefügt wurden.</translation> <translation id="4700157086864140907">Google Chrome bietet eine intelligentere Rechtschreibprüfung, indem der Browser das, was Sie eingeben, an die Google-Server sendet. So steht Ihnen dieselbe Technologie zur Rechtschreibprüfung zur Verfügung, die bei der Google-Suche zum Einsatz kommt.</translation> <translation id="4728575227883772061">Installation aufgrund von unbekanntem Fehler fehlgeschlagen. Falls Google Chrome bereits ausgeführt wird, schließen Sie es und versuchen Sie es erneut.</translation> -<translation id="473775607612524610">Aktualisieren</translation> <translation id="4743926867934016338">Akzeptieren und suchen</translation> <translation id="4751441238232965030">Für diesen Computer werden in Kürze keine weiteren Updates mehr für die 32-Bit-Version von Google Chrome bereitgestellt. Aktualisieren Sie bitte auf die 64-Bit-Version von Google Chrome.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_el.xtb b/chrome/app/resources/google_chrome_strings_el.xtb index ea4058e..598e156 100644 --- a/chrome/app/resources/google_chrome_strings_el.xtb +++ b/chrome/app/resources/google_chrome_strings_el.xtb
@@ -53,7 +53,6 @@ <translation id="2397416548179033562">Εμφάνιση του μενού του Chrome</translation> <translation id="2429317896000329049">Το Google Chrome δεν κατάφερε να συγχρονίσει τα δεδομένα σας επειδή ο συγχρονισμός δεν είναι διαθέσιμος για τον τομέα σας.</translation> <translation id="2485422356828889247">Κατάργηση Εγκατάστασης</translation> -<translation id="2576431527583832481">Το Chrome μόλις βελτιώθηκε! Μια νέα έκδοση είναι διαθέσιμη.</translation> <translation id="2580411288591421699">Δεν είναι δυνατή η εγκατάσταση της ίδιας έκδοσης του Google Chrome που εκτελείται αυτήν τη στιγμή. Κλείστε το Google Chrome και προσπαθήστε ξανά.</translation> <translation id="2582790009689336987">Αυτός ο υπολογιστής θα σταματήσει σύντομα να λαμβάνει ενημερώσεις για το Google Chrome, επειδή αυτό το σύστημα Linux δεν θα υποστηρίζεται πλέον.</translation> <translation id="2588322182880276190">Λογότυπο Chrome</translation> @@ -113,7 +112,6 @@ <translation id="4633000520311261472">Για να κάνουμε το Chrome πιο ασφαλές, απενεργοποιήσαμε ορισμένες επεκτάσεις που δεν αναφέρονται στο <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> και ενδέχεται να έχουν προστεθεί εν αγνοία σας.</translation> <translation id="4700157086864140907">Το Google Chrome μπορεί να παρέχει πιο έξυπνο ορθογραφικό έλεγχο, αποστέλλοντας ό,τι πληκτρολογείτε στο πρόγραμμα περιήγησης, στους διακομιστές της Google, επιτρέποντάς σας να χρησιμοποιείτε την ίδια τεχνολογία ορθογραφικού ελέγχου που χρησιμοποιείται από την αναζήτηση Google.</translation> <translation id="4728575227883772061">Η εγκατάσταση απέτυχε λόγω απροσδιόριστου σφάλματος. Αν το Google Chrome εκτελείται αυτήν τη στιγμή, κλείστε το και δοκιμάστε ξανά.</translation> -<translation id="473775607612524610">Ενημέρωση</translation> <translation id="4743926867934016338">Αποδοχή και Αναζήτηση</translation> <translation id="4751441238232965030">Αυτός ο υπολογιστής θα σταματήσει σύντομα να λαμβάνει ενημερώσεις 32 bit για το Google Chrome. Αναβαθμίστε σε Google Chrome 64 bit.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_en-GB.xtb b/chrome/app/resources/google_chrome_strings_en-GB.xtb index 81aeb695..254af11 100644 --- a/chrome/app/resources/google_chrome_strings_en-GB.xtb +++ b/chrome/app/resources/google_chrome_strings_en-GB.xtb
@@ -55,7 +55,6 @@ <translation id="2397416548179033562">Show Chrome menu</translation> <translation id="2429317896000329049">Google Chrome could not sync your data because Sync is not available for your domain.</translation> <translation id="2485422356828889247">Uninstall</translation> -<translation id="2576431527583832481">Chrome just got better! A new version is available.</translation> <translation id="2580411288591421699">Cannot install the same Google Chrome version that is currently running. Please close Google Chrome and try again.</translation> <translation id="2582790009689336987">This computer will soon stop receiving Google Chrome updates because this Linux system will no longer be supported.</translation> <translation id="2588322182880276190">Chrome logo</translation> @@ -115,7 +114,6 @@ <translation id="4633000520311261472">To make Chrome safer, we disabled some extensions that aren't listed in the <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> and may have been added without your knowledge.</translation> <translation id="4700157086864140907">Google Chrome can provide smarter spell-checking by sending what you type in the browser to Google servers, allowing you to use the same spell-checking technology used by Google search.</translation> <translation id="4728575227883772061">Installation failed due to unspecified error. If Google Chrome is currently running, please close it and try again.</translation> -<translation id="473775607612524610">Update</translation> <translation id="4743926867934016338">Accept & Search</translation> <translation id="4751441238232965030">This computer will soon stop receiving 32-bit Google Chrome updates. Please upgrade to 64-bit Google Chrome.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_es-419.xtb b/chrome/app/resources/google_chrome_strings_es-419.xtb index ee91bef4..547e6bc 100644 --- a/chrome/app/resources/google_chrome_strings_es-419.xtb +++ b/chrome/app/resources/google_chrome_strings_es-419.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Mostrar el menú de Chrome</translation> <translation id="2429317896000329049">Google Chrome no pudo sincronizar los datos porque la sincronización no está disponible para el dominio.</translation> <translation id="2485422356828889247">Desinstalación</translation> -<translation id="2576431527583832481">¡Chrome mejoró! Hay una nueva versión disponible.</translation> <translation id="2580411288591421699">No se puede instalar la misma versión de Google Chrome que se está ejecutando actualmente. Cierra Google Chrome e intenta nuevamente.</translation> <translation id="2582790009689336987">Esta computadora dejará de recibir actualizaciones de Google Chrome en breve porque este sistema Linux ya no se admitirá más.</translation> <translation id="2588322182880276190">Logo de Chrome</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">Para que Chrome sea más seguro, inhabilitamos algunas extensiones que no figuran en <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> y que posiblemente se hayan agregado sin tu conocimiento.</translation> <translation id="4700157086864140907">Google Chrome puede proporcionar una corrección ortográfica más inteligente al enviar lo que escribes en el navegador a los servidores de Google. Esto te permite utilizar la misma tecnología de corrección ortográfica que usa la búsqueda de Google.</translation> <translation id="4728575227883772061">No se pudo completar la instalación debido a un error no identificado. Si Google Chrome se está ejecutando en este momento, ciérrelo e intente nuevamente.</translation> -<translation id="473775607612524610">Actualizar</translation> <translation id="4743926867934016338">Aceptar y buscar</translation> <translation id="4751441238232965030">Esta computadora pronto dejará de recibir actualizaciones de Google Chrome de 32 bits. Actualiza a Google Chrome de 64 bits.</translation> <translation id="4754614261631455953">Google Chrome Canary (tráfico mDNS entrante)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_es.xtb b/chrome/app/resources/google_chrome_strings_es.xtb index a8fe925..577e231 100644 --- a/chrome/app/resources/google_chrome_strings_es.xtb +++ b/chrome/app/resources/google_chrome_strings_es.xtb
@@ -55,7 +55,6 @@ <translation id="2397416548179033562">Mostrar menú de Chrome</translation> <translation id="2429317896000329049">Google Chrome no ha podido sincronizar los datos porque la función de sincronización no está disponible para tu dominio.</translation> <translation id="2485422356828889247">Desinstalar</translation> -<translation id="2576431527583832481">Chrome sigue mejorando. Hay una nueva versión disponible.</translation> <translation id="2580411288591421699">No se puede instalar la misma versión de Google Chrome que se está ejecutando. Cierra el navegador y vuelve a intentarlo.</translation> <translation id="2582790009689336987">Este ordenador pronto dejará de recibir actualizaciones de Google Chrome porque este sistema Linux dejará de ser compatible.</translation> <translation id="2588322182880276190">Logotipo de Chrome</translation> @@ -115,7 +114,6 @@ <translation id="4633000520311261472">Para aumentar la seguridad de Chrome, hemos inhabilitado algunas extensiones que no figuran en <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> y que podrían haberse añadido sin tu conocimiento.</translation> <translation id="4700157086864140907">Para que el corrector ortográfico sea más útil, Google Chrome envía lo que escribes en el navegador a los servidores de Google con el fin de poder usar la tecnología de corrección ortográfica de la búsqueda de Google.</translation> <translation id="4728575227883772061">Debido a un error desconocido, la instalación no se ha llevado a cabo. Si Google Chrome se está ejecutando, ciérralo y vuelve a intentarlo.</translation> -<translation id="473775607612524610">Actualizar</translation> <translation id="4743926867934016338">Aceptar y buscar</translation> <translation id="4751441238232965030">Este ordenador pronto dejará de recibir actualizaciones de Google Chrome (32 bits). Actualiza Google Chrome a la versión de 64 bits.</translation> <translation id="4754614261631455953">Google Chrome Canary (tráfico mDNS entrante)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_et.xtb b/chrome/app/resources/google_chrome_strings_et.xtb index 310a9b5..57c4460e 100644 --- a/chrome/app/resources/google_chrome_strings_et.xtb +++ b/chrome/app/resources/google_chrome_strings_et.xtb
@@ -53,7 +53,6 @@ <translation id="2397416548179033562">Kuva Chrome'i menüü</translation> <translation id="2429317896000329049">Google Chrome ei saa teie andmeid sünkroonida, sest sünkroonimine pole teie domeenil saadaval.</translation> <translation id="2485422356828889247">Desinstalli</translation> -<translation id="2576431527583832481">Chrome muutus just veelgi paremaks! Saadaval on uus versioon.</translation> <translation id="2580411288591421699">Töötava Google Chrome'i versiooniga sama versiooni ei saa installida. Sulgege Google Chrome ja proovige uuesti.</translation> <translation id="2582790009689336987">See arvuti ei saa peagi enam Google Chrome'i värskendusi, kuna seda Linuxi süsteemi enam ei toetata.</translation> <translation id="2588322182880276190">Chrome'i logo</translation> @@ -113,7 +112,6 @@ <translation id="4633000520311261472">Chrome'i turvalisemaks muutmiseks keelasime mõned laiendused, mida ei leidu veebipoes <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ja mille lisamisest te ei pruugi teadlik olla.</translation> <translation id="4700157086864140907">Google Chrome võib õigekirjakontrolli täiustada, saates brauserisse sisestatud teksti Google'i serveritesse ja võimaldades kasutada sama õigekirjakontrolli tehnoloogiat, mida kasutatakse Google'i otsingus.</translation> <translation id="4728575227883772061">Install ebaõnnestus määramata vea tõttu. Kui Google Chrome parasjagu töötab, siis palun sulgege see ja proovige uuesti.</translation> -<translation id="473775607612524610">Värskenda</translation> <translation id="4743926867934016338">Nõustun, otsi</translation> <translation id="4751441238232965030">See arvuti ei saa peagi enam 32-bitise Google Chrome'i värskendusi. Viige Google Chrome üle 64-bitisele versioonile.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fa.xtb b/chrome/app/resources/google_chrome_strings_fa.xtb index 064b471..f3e24c0 100644 --- a/chrome/app/resources/google_chrome_strings_fa.xtb +++ b/chrome/app/resources/google_chrome_strings_fa.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">نمایش منوی Chrome</translation> <translation id="2429317896000329049">Google Chrome قادر به همگامسازی دادههای شما نبود زیرا همگامسازی برای دامنه شما قابل دسترسی نیست.</translation> <translation id="2485422356828889247">حذف نصب</translation> -<translation id="2576431527583832481">Chrome بهتر شده است! نسخه جدید آن در دسترس است.</translation> <translation id="2580411288591421699">نمیتوان همان نسخه Google Chrome را که اکنون در حال اجراست نصب کرد. لطفاً Google Chrome را ببندید و دوباره سعی کنید.</translation> <translation id="2582790009689336987">این رایانه به زودی دریافت بهروزرسانیهای Google Chrome را متوقف میکند، زیرا این سیستم Linux دیگر پشتیبانی نمیشود.</translation> <translation id="2588322182880276190">نشانواره Chrome</translation> @@ -112,7 +111,6 @@ <translation id="4633000520311261472">برای ایمنتر کردن Chrome، برخی از افزونههایی را که در<ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> فهرست نشدهاند و ممکن است بدون اطلاع شما اضافه شده باشند، غیرفعال کردیم.</translation> <translation id="4700157086864140907">Google chrome میتواند با ارسال آنچه در مرورگر تایپ میکنید به سرورهای Google، غلطگیر املایی هوشمندانهتری ارائه دهد که به شما امکان دهد از همان فناوری غلطگیر املایی استفادهشده در جستجوی Google استفاده کنید.</translation> <translation id="4728575227883772061">به دلیل خطای نامشخص نصب ناموفق بود. اگر Google Chrome در حال اجرا است، لطفاً آن را ببندید و دوباره سعی کنید.</translation> -<translation id="473775607612524610">بهروزرسانی</translation> <translation id="4743926867934016338">پذیرش و جستجو</translation> <translation id="4751441238232965030">بهزودی دریافت بهروزرسانیهای Google Chrome ۳۲ بیتی در این رایانه متوقف خواهد شد. لطفاً به Google Chrome ۶۴ بیتی ارتقا دهید.</translation> <translation id="4754614261631455953">Google Chrome Canary (ورودی mDNS)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fi.xtb b/chrome/app/resources/google_chrome_strings_fi.xtb index 28d6048..9dd7866 100644 --- a/chrome/app/resources/google_chrome_strings_fi.xtb +++ b/chrome/app/resources/google_chrome_strings_fi.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Näytä Chrome-valikko</translation> <translation id="2429317896000329049">Google Chrome ei voinut synkronoida tietoja, koska synkronointi ei ole käytettävissä verkkotunnuksessasi.</translation> <translation id="2485422356828889247">Poista</translation> -<translation id="2576431527583832481">Chromesta tuli juuri entistä parempi! Uusi versio on saatavilla.</translation> <translation id="2580411288591421699">Ei voi asentaa samaa Google Chromen versiota, joka tällä hetkellä on käytössä. Sulje Google Chrome ja yritä uudelleen.</translation> <translation id="2582790009689336987">Google Chromen päivitykset eivät pian ole saatavilla tällä tietokoneella, koska tämän Linux-järjestelmän tuki loppuu.</translation> <translation id="2588322182880276190">Chrome-logo</translation> @@ -112,7 +111,6 @@ <translation id="4633000520311261472">Paransimme Chromen turvallisuutta poistamalla käytöstä sovelluksia, joita ei löydy kohteesta <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ja jotka on voitu lisätä ilman lupaasi.</translation> <translation id="4700157086864140907">Google Chrome voi tarjota älykkäämmän oikeinkirjoituksen tarkistuspalvelun lähettämällä selaimeen kirjoittamasi tekstin Googlen palvelimille. Näin voit käyttää Google-haun kanssa samaa oikeinkirjoituksentarkistustekniikkaa.</translation> <translation id="4728575227883772061">Asennus epäonnistui tuntemattoman virheen takia. Jos Google Chrome on tällä hetkellä käynnissä, sulje ohjelma ja yritä uudelleen.</translation> -<translation id="473775607612524610">Päivitä</translation> <translation id="4743926867934016338">Hyväksy ja hae</translation> <translation id="4751441238232965030">Tämän tietokoneen 32-bittistä Google Chromea ei pian enää päivitetä. Päivitä Google Chrome 64-bittiseen versioon.</translation> <translation id="4754614261631455953">Google Chrome Canary (saapuva mDNS)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fil.xtb b/chrome/app/resources/google_chrome_strings_fil.xtb index 577b2be..6742a4f 100644 --- a/chrome/app/resources/google_chrome_strings_fil.xtb +++ b/chrome/app/resources/google_chrome_strings_fil.xtb
@@ -55,7 +55,6 @@ <translation id="2397416548179033562">Ipakita ang menu ng Chrome</translation> <translation id="2429317896000329049">Hindi mai-sync ng Google Chrome ang iyong data dahil hindi available ang Pag-sync para sa iyong domain.</translation> <translation id="2485422356828889247">I-uninstall</translation> -<translation id="2576431527583832481">Naging mas mahusay na ang Chrome! Available na ang bagong bersyon.</translation> <translation id="2580411288591421699">Hindi ma-install ang parehong bersyon ng Google Chrome na kasalukuyang tumatakbo. Mangyaring isara ang Google Chrome at muling subukan.</translation> <translation id="2582790009689336987">Malapit nang hindi makatanggap ng mga update sa Google Chrome ang computer na ito dahil hindi na susuportahan ang Linux system na ito.</translation> <translation id="2588322182880276190">Logo ng Chrome</translation> @@ -115,7 +114,6 @@ <translation id="4633000520311261472">Upang gawing mas ligtas ang Chrome, nag-disable kami ng ilang extension na hindi nakalista sa <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> at maaaring naidagdag nang hindi mo nalalaman.</translation> <translation id="4700157086864140907">Maaaring magbigay ng mas mahusay na pagsusuri ng pagbabaybay ang Google Chrome sa pamamagitan ng pagpapadala sa mga server ng Google kung ano ang iyong tina-type sa browser, na nagbibigay-daan sa iyong gamitin ang parehong teknolohiya ng pagsusuri ng pagbabaybay na ginagamit ng paghahanap sa Google.</translation> <translation id="4728575227883772061">Nabigo ang pag-install dahil sa hindi natukoy na error. Kung kasalukuyang tumatakbo ang Google Chrome, paki-sara ito at subukang muli.</translation> -<translation id="473775607612524610">Mag-update</translation> <translation id="4743926867934016338">Tanggapin at Maghanap</translation> <translation id="4751441238232965030">Malapit nang huminto sa pagtanggap ang computer na ito ng mga update sa 32-bit na Google Chrome. Mangyaring mag-upgrade sa 64-bit na Google Chrome.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fr.xtb b/chrome/app/resources/google_chrome_strings_fr.xtb index d449d6c..8041a60 100644 --- a/chrome/app/resources/google_chrome_strings_fr.xtb +++ b/chrome/app/resources/google_chrome_strings_fr.xtb
@@ -54,7 +54,6 @@ <translation id="2397416548179033562">Afficher le menu Chrome</translation> <translation id="2429317896000329049">Impossible de synchroniser vos données dans Google Chrome, car la synchronisation n'est pas disponible pour votre domaine.</translation> <translation id="2485422356828889247">Désinstaller</translation> -<translation id="2576431527583832481">Google Chrome s'est amélioré ! Une nouvelle version est désormais disponible.</translation> <translation id="2580411288591421699">Impossible d'installer la version de Google Chrome qui est en cours d'exécution. Fermez Google Chrome et réessayez.</translation> <translation id="2582790009689336987">Cet ordinateur ne recevra bientôt plus les mises à jour de Google Chrome, car la compatibilité ne sera plus assurée sur ce système Linux.</translation> <translation id="2588322182880276190">Logo Google Chrome</translation> @@ -115,7 +114,6 @@ <translation id="4633000520311261472">Afin de rendre Chrome plus sûr, nous avons désactivé certaines extensions qui ne sont pas répertoriées sur le <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> et qui ont pu être ajoutées à votre insu.</translation> <translation id="4700157086864140907">Google Chrome peut fournir une correction orthographique plus intelligente en envoyant ce que vous saisissez dans le navigateur aux serveurs Google, ce qui vous permet d'utiliser la même technologie de correction orthographique que la recherche Google.</translation> <translation id="4728575227883772061">Échec de l'installation suite à une erreur non spécifiée. Si Google Chrome est en cours d'exécution, fermez-le puis réessayez.</translation> -<translation id="473775607612524610">Mettre à jour</translation> <translation id="4743926867934016338">Accepter et rechercher</translation> <translation id="4751441238232965030">Cet ordinateur ne recevra bientôt plus les mises à jour de Google Chrome 32 bits. Veuillez passer à Google Chrome 64 bits.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_gu.xtb b/chrome/app/resources/google_chrome_strings_gu.xtb index 512ef11d..b409dc0f 100644 --- a/chrome/app/resources/google_chrome_strings_gu.xtb +++ b/chrome/app/resources/google_chrome_strings_gu.xtb
@@ -55,7 +55,6 @@ <translation id="2397416548179033562">Chrome મેનૂ દર્શાવો</translation> <translation id="2429317896000329049">Google Chrome તમારા ડેટાને સમન્વયિત કરી શક્યું નથી કારણ કે તમારા ડોમેન માટે સમન્વયન ઉપલબ્ધ નથી.</translation> <translation id="2485422356828889247">અનઇન્સ્ટોલ કરો</translation> -<translation id="2576431527583832481">Chrome હમણાં જ વધુ સારું થયું છે! એક નવું સંસ્કરણ ઉપલબ્ધ છે.</translation> <translation id="2580411288591421699">હાલમાં ચાલી રહ્યું છે તે જ Google Chrome સંસ્કરણને ઇન્સ્ટોલ કરી શકાતું નથી. કૃપા કરીને Google Chrome બંધ કરો અને ફરીથી પ્રયાસ કરો.</translation> <translation id="2582790009689336987">આ કમ્પ્યુટર ટૂંક સમયમાં Google Chrome અપડેટ્સ પ્રાપ્ત કરવાનું બંધ કરશે કારણ કે આ Linux સિસ્ટમ હવેથી સમર્થિત હશે નહીં.</translation> <translation id="2588322182880276190">Chrome લૉગો</translation> @@ -115,7 +114,6 @@ <translation id="4633000520311261472">Chrome ને સુરક્ષિત બનાવવા માટે, અમે <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> માં સૂચિબદ્ધ નથી અને તમારી જાણ વિના ઉમેરવામાં આવ્યાં હોઈ શકે છે તેવા કેટલાક એક્સ્ટેન્શન્સને અક્ષમ કર્યા છે.</translation> <translation id="4700157086864140907">તમે બ્રાઉઝરમાં જે કંઈ પણ લખો છો તે Google સર્વર્સ પર મોકલીને, Google શોધ દ્વારા ઉપયોગમાં લેવાતી સમાન જોડણી-પરીક્ષક તકનીકીનો ઉપયોગ કરવાની પરવાનગી આપતું, Google Chrome સ્માર્ટ જોડણી-પરીક્ષક પ્રાદન કરી શકે છે.</translation> <translation id="4728575227883772061">અનુલ્લેખિત ભૂલને કારણે ઇન્સ્ટોલેશન નિષ્ફળ રહ્યું. જો Google Chrome હાલમાં ચાલુ હોય, તો કૃપા કરીને તેને બંધ કરો અને તેનો ફરીથી પ્રયાસ કરો.</translation> -<translation id="473775607612524610">અપડેટ કરો</translation> <translation id="4743926867934016338">સ્વીકારો અને શોધો</translation> <translation id="4751441238232965030">આ કમ્પ્યુટર ટૂંક સમયમાં 32-બિટ Google Chrome અપડેટ્સ પ્રાપ્ત કરવાનું બંધ કરશે. કૃપા કરીને 64-બિટ Google Chrome પર અપગ્રેડ કરો.</translation> <translation id="4754614261631455953">Google Chrome કૅનેરી (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hi.xtb b/chrome/app/resources/google_chrome_strings_hi.xtb index ce6beb3..d03edae 100644 --- a/chrome/app/resources/google_chrome_strings_hi.xtb +++ b/chrome/app/resources/google_chrome_strings_hi.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Chrome मेनू दिखाएं</translation> <translation id="2429317896000329049">Google Chrome आपका डेटा समन्वयित नहीं कर सका क्योंकि समन्वयन आपके डोमेन के लिए उपलब्ध नहीं है.</translation> <translation id="2485422356828889247">विस्थापित करें</translation> -<translation id="2576431527583832481">Chrome अब बेहतर हो गया है! एक नया वर्शन उपलब्ध है.</translation> <translation id="2580411288591421699">Google Chrome के उस वर्शन के समान वर्शन को इंस्टॉल नहीं कर सकता, जो वर्तमान में चल रहा है. कृपया Google Chrome बंद करें और फिर से प्रयास करें.</translation> <translation id="2582790009689336987">यह कंप्यूटर जल्दी ही Google Chrome के अपडेट प्राप्त करना बंद कर देगा क्योंकि यह Linux सिस्टम अब समर्थित नहीं रहेगा.</translation> <translation id="2588322182880276190">Chrome लोगो</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">Chrome को अधिक सुरक्षित बनाने के लिए, हमने ऐसे कुछ एक्सटेंशन अक्षम कर दिए हैं जो <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> में सूचीबद्ध नहीं हैं और आपकी जानकारी के बिना जोड़े गए हो सकते हैं.</translation> <translation id="4700157086864140907">Google Chrome आपके द्वारा ब्राउज़र में लिखे गए टेक्स्ट को Google सर्वर को भेजकर शानदार वर्तनी-जांच प्रदान करता है, जो आपको Google खोज द्वारा उपयोग की जाने वाली वर्तनी-जांच के समान वर्तनी जांच तकनीक का उपयोग करने की अनुमति देता है.</translation> <translation id="4728575227883772061">अनिर्दिष्ट कारण से स्थापना विफल हुई. यदि Google Chrome अभी खुला हुआ है, तो कृपया उसे बंद करें और फिर से प्रयास करें.</translation> -<translation id="473775607612524610">अपडेट करें</translation> <translation id="4743926867934016338">स्वीकार करें और खोजें</translation> <translation id="4751441238232965030">यह कंप्यूटर जल्दी ही 32-बिट Google Chrome के अपडेट प्राप्त करना बंद करेगा. कृपया 64-बिट Google Chrome में अपग्रेड करें.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hr.xtb b/chrome/app/resources/google_chrome_strings_hr.xtb index 1edc82c..638a244 100644 --- a/chrome/app/resources/google_chrome_strings_hr.xtb +++ b/chrome/app/resources/google_chrome_strings_hr.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Prikaži izbornik Chrome</translation> <translation id="2429317896000329049">Google Chrome nije mogao sinkronizirati vaše podatke jer sinkronizacija nije dostupna za vašu domenu.</translation> <translation id="2485422356828889247">Deinstaliraj</translation> -<translation id="2576431527583832481">Chrome je postao još bolji! Dostupna je nova verzija.</translation> <translation id="2580411288591421699">Nije moguće instalirati istu verziju programa Google Chrome koja je trenutačno pokrenuta. Zatvorite Google Chrome i pokušajte ponovo.</translation> <translation id="2582790009689336987">Ovo će računalo uskoro prestati primati ažuriranja za Google Chrome jer taj sustav Linuxa više neće biti podržan.</translation> <translation id="2588322182880276190">Logotip Chrome</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">Kako bismo Chrome učinili sigurnijim, onemogućili smo neka proširenja koja nisu navedena u trgovini <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> i možda su dodana bez vašeg znanja.</translation> <translation id="4700157086864140907">Google Chrome može pružiti bolju provjeru pravopisa slanjem teksta unesenog u preglednik Googleovim poslužiteljima te vam na taj način omogućuje upotrebu iste tehnologije provjere pravopisa kojom se služi Google pretraživanje.</translation> <translation id="4728575227883772061">Instalacija nije uspjela zbog nepoznate pogreške. Ako je program Google Chrome trenutno otvoren, zatvorite ga i pokušajte ponovno.</translation> -<translation id="473775607612524610">Ažuriraj</translation> <translation id="4743926867934016338">Prihvati i traži</translation> <translation id="4751441238232965030">Ovo računalo uskoro više neće primati ažuriranja za 32-bitni Google Chrome. Nadogradite na 64-bitni Google Chrome.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hu.xtb b/chrome/app/resources/google_chrome_strings_hu.xtb index b1acc9b..7cda817 100644 --- a/chrome/app/resources/google_chrome_strings_hu.xtb +++ b/chrome/app/resources/google_chrome_strings_hu.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">A Chrome-menü megjelenítése</translation> <translation id="2429317896000329049">A Google Chrome nem tudta szinkronizálni az adatait, mert a szinkronizálás nem érhető el az Ön domainjénél.</translation> <translation id="2485422356828889247">Eltávolítás</translation> -<translation id="2576431527583832481">A Chrome most még jobb lett! Új verzió áll rendelkezésre.</translation> <translation id="2580411288591421699">Nem lehet ugyanazt a Google Chrome verziót telepíteni, amely jelenleg is fut. Zárja be a Google Chrome-ot, és próbálja újra.</translation> <translation id="2582790009689336987">Ez a számítógép hamarosan nem fog több Google Chrome-frissítést kapni, mert a böngésző többé nem fogja támogatni ezt a Linux rendszert.</translation> <translation id="2588322182880276190">Chrome embléma</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">A Chrome biztonságosabbá tétele érdekében kikapcsoltunk néhány bővítményt, amelyek nem a(z) <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> szolgáltatásból származnak, és előfordulhat, hogy az Ön tudta nélkül lettek telepítve.</translation> <translation id="4700157086864140907">A Google Chrome pontosabb helyesírás-ellenőrzést tud biztosítani azáltal, hogy a böngészőbe beírt szöveget elküldi a Google szervereinek, ami lehetővé teszi, hogy ugyanazt a helyesírás-ellenőrző technológiát használja, amelyet a Google-keresés is.</translation> <translation id="4728575227883772061">A telepítés váratlan hiba miatt nem sikerült. Ha a Google Chrome jelenleg fut, zárja be, majd próbálkozzon újra.</translation> -<translation id="473775607612524610">Frissítés</translation> <translation id="4743926867934016338">Elfogadás és keresés</translation> <translation id="4751441238232965030">Ez a számítógép hamarosan nem kap további frissítéseket a Google Chrome 32 bites változatához. Kérjük, frissítsen a Google Chrome 64 bites változatára.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_id.xtb b/chrome/app/resources/google_chrome_strings_id.xtb index ee81fd0..432acfe99 100644 --- a/chrome/app/resources/google_chrome_strings_id.xtb +++ b/chrome/app/resources/google_chrome_strings_id.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Tampilkan Menu Chrome</translation> <translation id="2429317896000329049">Google Chrome tidak dapat menyinkronkan data Anda karena Sinkronisasi tidak tersedia untuk domain Anda.</translation> <translation id="2485422356828889247">Copot pemasangan</translation> -<translation id="2576431527583832481">Chrome jadi semakin baik! Versi baru telah tersedia.</translation> <translation id="2580411288591421699">Tak dapat memasang Google Chrome dengan versi yang sama dengan yang sedang aktif. Tutup dulu, baru coba lagi.</translation> <translation id="2582790009689336987">Komputer ini akan segera berhenti menerima pembaruan Google Chrome karena sistem Linux ini sudah tidak didukung.</translation> <translation id="2588322182880276190">Logo Chrome</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">Agar Chrome lebih aman, kami menonaktifkan beberapa ekstensi yang tidak tercantum pada <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> dan mungkin telah ditambahkan tanpa sepengetahuan Anda.</translation> <translation id="4700157086864140907">Google Chrome dapat memberikan periksa-ejaan yang lebih pintar dengan mengirimkan apa yang Anda ketik di browser ke server Google sehingga memungkinkan Anda menggunakan teknologi periksa-ejaan yang sama seperti yang digunakan oleh Google penelusuran.</translation> <translation id="4728575227883772061">Penginstalan gagal karena kesalahan yang tidak diketahui. Jika Google Chrome sedang berjalan; tutup, lalu ulang kembali.</translation> -<translation id="473775607612524610">Mutakhirkan</translation> <translation id="4743926867934016338">Terima & Telusuri</translation> <translation id="4751441238232965030">Komputer ini akan segera berhenti menerima pembaruan Google Chrome 32-bit. Tingkatkan versi ke Google Chrome 64-bit.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_it.xtb b/chrome/app/resources/google_chrome_strings_it.xtb index 21990f6..d3a65e65 100644 --- a/chrome/app/resources/google_chrome_strings_it.xtb +++ b/chrome/app/resources/google_chrome_strings_it.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Mostra il menu Chrome</translation> <translation id="2429317896000329049">Impossibile sincronizzare i dati in Google Chrome perché la sincronizzazione non è disponibile per il tuo dominio.</translation> <translation id="2485422356828889247">Disinstalla</translation> -<translation id="2576431527583832481">Chrome è stato migliorato. È disponibile una nuova versione.</translation> <translation id="2580411288591421699">Impossibile installare la stessa versione di Google Chrome attualmente in esecuzione. Chiudi Google Chrome e riprova.</translation> <translation id="2582790009689336987">A breve questo computer non riceverà più gli aggiornamenti di Google Chrome perché questo sistema Linux non sarà più supportato.</translation> <translation id="2588322182880276190">Logo di Chrome</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">Per rendere Chrome più sicuro, abbiamo disattivato alcune estensioni che non sono elencate nel <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> e potrebbero essere state aggiunte a tua insaputa.</translation> <translation id="4700157086864140907">Google Chrome può offrire una funzione di controllo ortografico migliore inviando il testo digitato nel browser ai server di Google, consentendo così di usufruire della stessa tecnologia di controllo ortografico utilizzata da Ricerca Google.</translation> <translation id="4728575227883772061">Installazione non riuscita a causa di un errore non specificato. Se Google Chrome è attivo, chiudilo e riprova.</translation> -<translation id="473775607612524610">Aggiorna</translation> <translation id="4743926867934016338">Accetta e cerca</translation> <translation id="4751441238232965030">A breve questo computer non riceverà più gli aggiornamenti di Google Chrome a 32 bit. Esegui l'upgrade a Google Chrome a 64 bit.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_iw.xtb b/chrome/app/resources/google_chrome_strings_iw.xtb index 94cb7e92..cb63576 100644 --- a/chrome/app/resources/google_chrome_strings_iw.xtb +++ b/chrome/app/resources/google_chrome_strings_iw.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">הצג את תפריט Chrome</translation> <translation id="2429317896000329049">Google Chrome לא הצליח לסנכרן את הנתונים שלך מפני שהסנכרון אינו זמין עבור הדומיין שלך.</translation> <translation id="2485422356828889247">הסר התקנה</translation> -<translation id="2576431527583832481">Chrome ממשיך להשתפר! קיימת גירסה חדשה.</translation> <translation id="2580411288591421699">אין אפשרות להתקין את אותה גרסת Google Chrome הפועלת כעת. סגור את Google Chrome ונסה שוב.</translation> <translation id="2582790009689336987">בקרוב המחשב הזה יפסיק לקבל עדכונים של Google Chrome בשל הפסקת התמיכה במערכת Linux זו.</translation> <translation id="2588322182880276190">הלוגו של Chrome</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">כדי לשפר את האבטחה של Chrome, השבתנו חלק מהתוספים שלא רשומים ב<ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> וייתכן שנוספו ללא ידיעתך.</translation> <translation id="4700157086864140907">Google Chrome יכול לספק בדיקת איות חכמה יותר על ידי כך שהוא שולח את מה שאתה מקליד בדפדפן לשרתי Google, ומאפשר לך להשתמש באותה טכנולוגיית בדיקת איות ש'חיפוש Google' משתמש בה.</translation> <translation id="4728575227883772061">ההתקנה נכשלה בשל שגיאה לא צפויה. אם Google Chrome פועל כעת, סגור אותו ונסה שוב.</translation> -<translation id="473775607612524610">עדכן</translation> <translation id="4743926867934016338">אשר וחפש</translation> <translation id="4751441238232965030">מחשב זה יפסיק בקרוב לקבל עדכוני Google Chrome ב-32 סיביות. שדרג ל-Google Chrome ב-64 סיביות.</translation> <translation id="4754614261631455953">גרסה ניסיונית של Google Chrome (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ja.xtb b/chrome/app/resources/google_chrome_strings_ja.xtb index f52936c..3f91fbb 100644 --- a/chrome/app/resources/google_chrome_strings_ja.xtb +++ b/chrome/app/resources/google_chrome_strings_ja.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Chrome メニューを表示</translation> <translation id="2429317896000329049">お使いのドメインでは同期を利用できないため、Google Chrome はデータを同期できませんでした。</translation> <translation id="2485422356828889247">アンインストール</translation> -<translation id="2576431527583832481">Chrome のアップデートが見つかりました。新しいバージョンが利用可能です。</translation> <translation id="2580411288591421699">実行中の Google Chrome と同じバージョンをインストールすることはできません。Google Chrome を閉じてからもう一度お試しください。</translation> <translation id="2582790009689336987">この Linux システムはサポートが終了するため、このパソコンでは間もなく Google Chrome のアップデートが受信されなくなります。</translation> <translation id="2588322182880276190">Chrome ロゴ</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">Chrome をより安全にご利用いただくため、<ph name="IDS_EXTENSION_WEB_STORE_TITLE" />で提供していない一部の拡張機能を無効にしました。これらは知らないうちに追加された可能性があります。</translation> <translation id="4700157086864140907">Google Chrome ではブラウザに入力された内容を Google のサーバーに送信することで高度なスペルチェックを実現し、Google 検索で使用されているスペルチェック テクノロジーを活用できます。</translation> <translation id="4728575227883772061">原因不明のエラーによりインストールが失敗しました。実行中の Google Chrome を終了してからやり直してください。</translation> -<translation id="473775607612524610">アップデート</translation> <translation id="4743926867934016338">承諾して検索</translation> <translation id="4751441238232965030">このパソコンはまもなく 32 ビットの Google Chrome アップデートの受信を停止します。64 ビットの Google Chrome にアップグレードしてください。</translation> <translation id="4754614261631455953">Google Chrome Canary(mDNS インバウンド)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_kn.xtb b/chrome/app/resources/google_chrome_strings_kn.xtb index a19239f..7b1ee86 100644 --- a/chrome/app/resources/google_chrome_strings_kn.xtb +++ b/chrome/app/resources/google_chrome_strings_kn.xtb
@@ -53,7 +53,6 @@ <translation id="2397416548179033562">Chrome ಮೆನು ತೋರಿಸು</translation> <translation id="2429317896000329049">ನಿಮ್ಮ ಡೊಮೇನ್ನಲ್ಲಿ ಸಿಂಕ್ ಮಾಡುವ ಸೌಲಭ್ಯವಿಲ್ಲದ ಕಾರಣ Google Chrome ಗೆ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸಿಂಕ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ.</translation> <translation id="2485422356828889247">ಅಸ್ಥಾಪಿಸು</translation> -<translation id="2576431527583832481">Chrome ಈಗ ತಾನೇ ಉತ್ತಮಗೊಂಡಿದೆ! ಹೊಸ ಆವೃತ್ತಿ ಲಭ್ಯವಿದೆ.</translation> <translation id="2580411288591421699">ಪ್ರಸ್ತುತ ಚಾಲನೆಯಲ್ಲಿರುವ ಅದೇ Google Chrome ಆವೃತ್ತಿಯನ್ನು ಸ್ಥಾಪಿಸಲಾಗುವುದಿಲ್ಲ. ದಯವಿಟ್ಟು Google Chrome ಮುಚ್ಚಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="2582790009689336987">ಈ Linux ಸಿಸ್ಟಂ ಇನ್ನೂ ಬೆಂಬಲಿಸಲ್ಪಡದಿರುವುದರಿಂದ ಈ ಕಂಪ್ಯೂಟರ್ ಶೀಘ್ರದಲ್ಲಿಯೇ Google Chrome ಅಪ್ಡೇಟ್ಗಳನ್ನು ಸ್ವೀಕರಿಸುವುದನ್ನು ನಿಲ್ಲಿಸುತ್ತದೆ.</translation> <translation id="2588322182880276190">Chrome ಲೋಗೊ</translation> @@ -113,7 +112,6 @@ <translation id="4633000520311261472">Chrome ಸುರಕ್ಷಿತವಾಗಿರಿಸುವಂತೆ ಮಾಡಲು, <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ನಲ್ಲಿ ಪಟ್ಟಿ ಮಾಡಲಾದ ಕೆಲವು ವಿಸ್ತರಣೆಗಳನ್ನು ನಾವು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದೇವೆ ಮತ್ತು ಅವುಗಳನ್ನು ನಿಮ್ಮ ಅರಿವಿಲ್ಲದೆ ಸೇರಿಸಿರಬಹುದು.</translation> <translation id="4700157086864140907">Google ಹುಡುಕಾಟ ಮೂಲಕ ಬಳಸಲಾದ ಅದೇ ಕಾಗುಣಿತ ಪರೀಕ್ಷೆಯ ತಂತ್ರಜ್ಞಾನವನ್ನು ಬಳಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತಿರುವ, Google ಸೇವೆಗಳಿಗೆ ಬ್ರೌಸರ್ನಲ್ಲಿ ನೀವು ಟೈಪ್ ಮಾಡಿರುವುದನ್ನು ಕಳುಹಿಸುವುದರ ಮೂಲಕ Google Chrome ಉತ್ತಮ ಕಾಗುಣಿತ ಪರೀಕ್ಷೆಯನ್ನು ಒದಗಿಸಬಹುದು.</translation> <translation id="4728575227883772061">ಅನಿರ್ದಿಷ್ಟ ದೋಷದಿಂದಾಗಿ ಸ್ಥಾಪನೆ ವಿಫಲವಾಗಿದೆ. Google Chrome ಪ್ರಸ್ತುತ ಚಲಿಸುತ್ತಿದ್ದರೆ, ದಯವಿಟ್ಟು ಇದನ್ನು ಮುಚ್ಚಿ ಮತ್ತು ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ.</translation> -<translation id="473775607612524610">ಅಪ್ಡೇಟ್</translation> <translation id="4743926867934016338">ಸಮ್ಮತಿಸಿ & ಹುಡುಕಿ</translation> <translation id="4751441238232965030">ಈ ಕಂಪ್ಯೂಟರ್ ಶೀಘ್ರವೇ 32-ಬಿಟ್ Google Chrome ಅಪ್ಡೇಟ್ಗಳನ್ನು ಸ್ವೀಕರಿಸುವುದನ್ನು ನಿಲ್ಲಿಸುತ್ತದೆ. 64-ಬಿಟ್ Google Chrome ಗೆ ಅಪ್ಗ್ರೇಡ್ ಮಾಡಿ.</translation> <translation id="4754614261631455953">Google Chrome ಕ್ಯಾನರಿ (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ko.xtb b/chrome/app/resources/google_chrome_strings_ko.xtb index 156197c..9696b32 100644 --- a/chrome/app/resources/google_chrome_strings_ko.xtb +++ b/chrome/app/resources/google_chrome_strings_ko.xtb
@@ -55,7 +55,6 @@ <translation id="2397416548179033562">Chrome 메뉴 표시</translation> <translation id="2429317896000329049">도메인에서 동기화를 사용할 수 없어 Chrome에서 데이터를 동기화하지 못했습니다.</translation> <translation id="2485422356828889247">제거</translation> -<translation id="2576431527583832481">한층 개선된 Chrome의 최신 버전이 출시되었습니다.</translation> <translation id="2580411288591421699">현재 실행 중인 Chrome과 동일한 버전은 설치할 수 없습니다. Chrome을 닫고 다시 시도하세요.</translation> <translation id="2582790009689336987">이 Linux 시스템이 더 이상 지원되지 않을 예정이므로 곧 이 컴퓨터에서 Chrome 업데이트를 받을 수 없게 됩니다.</translation> <translation id="2588322182880276190">Chrome 로고</translation> @@ -115,7 +114,6 @@ <translation id="4633000520311261472">Google에서는 Chrome의 보안을 강화하기 위해 <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />에 표시되지 않고 사용자 모르게 추가되었을 수 있는 일부 확장 프로그램의 사용을 중지했습니다.</translation> <translation id="4700157086864140907">Chrome은 사용자가 브라우저에 입력한 내용을 Google 서버에 보내어 Google 검색에서 사용하는 기술과 동일한 맞춤법 검사 기술을 사용할 수 있게 함으로써 더욱 뛰어난 맞춤법 검사 기능을 제공할 수 있습니다.</translation> <translation id="4728575227883772061">확인되지 않은 오류로 설치에 실패했습니다. Chrome이 실행 중인 경우 종료한 후 다시 실행하세요.</translation> -<translation id="473775607612524610">업데이트</translation> <translation id="4743926867934016338">동의 및 검색</translation> <translation id="4751441238232965030">이 컴퓨터에서 32비트 Chrome 업데이트가 곧 중단됩니다. 64비트 Chrome으로 업그레이드하세요.</translation> <translation id="4754614261631455953">Chrome Canary(mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lt.xtb b/chrome/app/resources/google_chrome_strings_lt.xtb index 185a279..8846331 100644 --- a/chrome/app/resources/google_chrome_strings_lt.xtb +++ b/chrome/app/resources/google_chrome_strings_lt.xtb
@@ -55,7 +55,6 @@ <translation id="2397416548179033562">Rodyti „Chrome“ meniu</translation> <translation id="2429317896000329049">„Google Chrome“ negali sinchronizuoti duomenų, nes jūsų domene sinchronizavimas nepasiekiamas.</translation> <translation id="2485422356828889247">Pašalinti</translation> -<translation id="2576431527583832481">„Chrome“ patobulėjo! Galima nauja versija.</translation> <translation id="2580411288591421699">Negalima įdiegti tos pačios „Google Chrome“ versijos, kuri dabar paleista. Uždarykite „Google Chrome“ ir bandykite dar kartą.</translation> <translation id="2582790009689336987">Netrukus šis kompiuteris nebegaus „Google Chrome“ naujinių, nes nebebus palaikoma ši „Linux“ sistema.</translation> <translation id="2588322182880276190">„Chrome“ logotipas</translation> @@ -116,7 +115,6 @@ <translation id="4633000520311261472">Kad „Chrome“ padarytume saugesnę, išjungėme kai kuriuos plėtinius, kurių nėra „<ph name="IDS_EXTENSION_WEB_STORE_TITLE" />“ sąraše ir kurie galėjo būti pridėti be jūsų žinios.</translation> <translation id="4700157086864140907">„Google Chrome“ gali teikti išmanesnę rašybos tikrinimo funkciją, siųsdama tai, ką įvedate naršyklėje, „Google“ serveriams ir leisdama naudoti tą pačią rašybos tikrinimo technologiją, kuri naudojama „Google“ paieškoje.</translation> <translation id="4728575227883772061">Diegimas nepavyko dėl nežinomos klaidos. Jei šiuo metu veikia „Google Chrome“, uždarykite ir pabandykite iš naujo.</translation> -<translation id="473775607612524610">Atnaujinti</translation> <translation id="4743926867934016338">Sutikti ir ieškoti</translation> <translation id="4751441238232965030">Šiame kompiuteryje netrukus nebebus gaunami 32 bitų „Google Chrome“ naujiniai. Naujovinkite į 64 bitų „Google Chrome“.</translation> <translation id="4754614261631455953">„Canary“ versijos „Google Chrome“ (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lv.xtb b/chrome/app/resources/google_chrome_strings_lv.xtb index 62f63b9..e7eddda 100644 --- a/chrome/app/resources/google_chrome_strings_lv.xtb +++ b/chrome/app/resources/google_chrome_strings_lv.xtb
@@ -53,7 +53,6 @@ <translation id="2397416548179033562">Rādīt Chrome izvēlni</translation> <translation id="2429317896000329049">Google Chrome nevarēja sinhronizēt jūsu datus, jo jūsu domēnam nav pieejama sinhronizācija.</translation> <translation id="2485422356828889247">Atinstalēt</translation> -<translation id="2576431527583832481">Pārlūkprogramma Chrome ir uzlabota! Ir pieejama jauna versija.</translation> <translation id="2580411288591421699">Nevar instalēt to pašu Google Chrome versiju, kas jau darbojas. Lūdzu, aizveriet Google Chrome un mēģiniet vēlreiz.</translation> <translation id="2582790009689336987">Šajā datorā drīzumā vairs netiks saņemti Google Chrome atjauninājumi, jo šī Linux sistēma vairs netiks atbalstīta.</translation> <translation id="2588322182880276190">Chrome logotips</translation> @@ -113,7 +112,6 @@ <translation id="4633000520311261472">Lai uzlabotu Chrome drošību, mēs atspējojām dažus paplašinājumus, kas nav norādīti vietnē <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> un, iespējams, tika pievienoti, jums nezinot.</translation> <translation id="4700157086864140907">Google Chrome var efektīvāk labot pareizrakstības kļūdas, nosūtot pārlūkā rakstīto uz Google serveriem un tādējādi ļaujot izmantot to pašu pareizrakstības pārbaudes tehnoloģiju, kas tiek izmantota Google meklēšanā.</translation> <translation id="4728575227883772061">Instalācija neizdevās nenoteiktas kļūdas dēļ. Ja Google Chrome pašlaik darbojas, lūdzu, aizveriet to un mēģiniet vēlreiz.</translation> -<translation id="473775607612524610">Atjaunināt</translation> <translation id="4743926867934016338">Pieņemt un meklēt</translation> <translation id="4751441238232965030">Šis dators drīz vairs nesaņems Google Chrome 32 bitu versijas atjauninājumus. Lūdzu, jauniniet uz Google Chrome 64 bitu versiju.</translation> <translation id="4754614261631455953">Google Chrome Canary (ienākošā mDNS datplūsma)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ml.xtb b/chrome/app/resources/google_chrome_strings_ml.xtb index 47d3243..8504ba1 100644 --- a/chrome/app/resources/google_chrome_strings_ml.xtb +++ b/chrome/app/resources/google_chrome_strings_ml.xtb
@@ -55,7 +55,6 @@ <translation id="2397416548179033562">Chrome മെനു കാണിക്കുക</translation> <translation id="2429317896000329049">നിങ്ങളുടെ ഡൊമെയ്നിനായി സമന്വയം ലഭ്യമല്ലാത്തതിനാൽ Google Chrome-ന് നിങ്ങളുടെ ഡാറ്റ സമന്വയിപ്പിക്കാനായില്ല.</translation> <translation id="2485422356828889247">അണ്ഇന്സ്റ്റാള് ചെയ്യുക</translation> -<translation id="2576431527583832481">Chrome ഒന്നുകൂടി മികച്ചതായി! ഒരു പുതിയ പതിപ്പ് ലഭ്യമാണ്.</translation> <translation id="2580411288591421699">നിലവില് പ്രവര്ത്തിക്കുന്ന സമാന Google Chrome പതിപ്പ് ഇന്സ്റ്റാള് ചെയ്യാന് കഴിയില്ല. ദയവായി Google Chrome അടച്ച് വീണ്ടും ശ്രമിക്കുക.</translation> <translation id="2582790009689336987">Linux സിസ്റ്റം ഇനി പിന്തുണയ്ക്കാത്തതിനാൽ ഈ കമ്പ്യൂട്ടർ ഉടനെ Google Chrome അപ്ഡേറ്റുകൾ സ്വീകരിക്കുന്നത് നിർത്തും.</translation> <translation id="2588322182880276190">Chrome ലോഗോ</translation> @@ -115,7 +114,6 @@ <translation id="4633000520311261472">Chrome സുരക്ഷിതമാക്കുന്നതിന്, <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> എന്നതിൽ ലിസ്റ്റുചെയ്യാത്ത ചില വിപുലീകരണങ്ങൾ ഞങ്ങൾ പ്രവർത്തനരഹിതമാക്കി, അവ നിങ്ങളുടെ അറിവില്ലാതെ ചേർത്തിരിക്കാനിടയുണ്ട്.</translation> <translation id="4700157086864140907">Google തിരയൽ ഉപയോഗിക്കുന്ന സമാനമായ അക്ഷരപ്പിശക് പരിശോധനാ സാങ്കേതികവിദ്യ ഉപയോഗിക്കാൻ അനുവദിച്ചുകൊണ്ട്, ബ്രൗസറിൽ ടൈപ്പുചെയ്യുന്നതെന്തും Google സെർവറുകളിലേക്ക് അയച്ച് മികച്ച അക്ഷരപ്പിശക് പരിശോധന നൽകാൻ Google Chrome-ന് കഴിയുന്നു.</translation> <translation id="4728575227883772061">വ്യക്തമല്ലാത്ത പിശക് കാരണം ഇന്സ്റ്റാളേഷന് പരാജയപ്പെട്ടു. Google Chrome നിലവില് പ്രവര്ത്തിക്കുകയാണെങ്കില്, ദയവായി അത് അടച്ചിട്ട് വീണ്ടും ശ്രമിക്കുക.</translation> -<translation id="473775607612524610">അപ്ഡേറ്റുചെയ്യുക</translation> <translation id="4743926867934016338">അംഗീകരിച്ച് തിരയുക</translation> <translation id="4751441238232965030">ഈ കമ്പ്യൂട്ടർ ഉടൻ തന്നെ 32-ബിറ്റ് Google Chrome അപ്ഡേറ്റുകൾ സ്വീകരിക്കുന്നത് നിർത്തും. 64-ബിറ്റ് Google Chrome-ലേക്ക് അപ്ഗ്രേഡുചെയ്യുക.</translation> <translation id="4754614261631455953">Google Chrome കാനറി (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mr.xtb b/chrome/app/resources/google_chrome_strings_mr.xtb index 7756b11..e4812ad 100644 --- a/chrome/app/resources/google_chrome_strings_mr.xtb +++ b/chrome/app/resources/google_chrome_strings_mr.xtb
@@ -54,7 +54,6 @@ <translation id="2397416548179033562">Chrome मेनू दर्शवा</translation> <translation id="2429317896000329049">आपल्या डोमेनसाठी संकालन उपलब्ध नसल्यामुळे Google Chrome आपला डेटा संकालित करू शकले नाही.</translation> <translation id="2485422356828889247">अनइन्स्टॉल करणे</translation> -<translation id="2576431527583832481">Chrome आता आणखी सर्वोत्तम झाले आहे! नवीन आवृत्ती उपलब्ध आहे.</translation> <translation id="2580411288591421699">सध्या चालत असलेली Google Chrome ची समान आवृत्ती स्थापित करू शकत नाही. कृपया Google Chrome बंद करा आणि पुन्हा प्रयत्न करा.</translation> <translation id="2582790009689336987">Linux सिस्टीम यापुढे समर्थित नसल्याने हा संगणक लवकरच Google Chrome अद्यतने प्राप्त करणे थांबवेल.</translation> <translation id="2588322182880276190">Chrome लोगो</translation> @@ -114,7 +113,6 @@ <translation id="4633000520311261472">Chrome ला अधिक सुरक्षित करण्यासाठी, आम्ही <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> मध्ये सूचीबद्ध नसलेले काही विस्तार अक्षम केले आणि ते कदाचित आपल्या माहिती शिवाय जोडले गेले असावेत.</translation> <translation id="4700157086864140907">आपण ब्राउझरमध्ये जे टाइप करता ते Google सर्व्हरला पाठवून Google Chrome चाणाक्ष शब्दलेखन-तपासणी प्रदान करु शकते, जेणेकरुन आपल्याला Google शोधात जे शब्दलेखन-तपासणी तंत्रज्ञान वापरले जाते तेच आपल्याला वापरण्याची अनुमती मिळते.</translation> <translation id="4728575227883772061">अनिर्दिष्ट त्रुटीमुळे स्थापना अयशस्वी. जर Google Chrome सध्या चालू असेल तर, कृपया त्यास बंद करा आणि पुन्हा प्रयत्न करा.</translation> -<translation id="473775607612524610">अद्यतनित करा</translation> <translation id="4743926867934016338">स्वीकार करा आणि शोधा</translation> <translation id="4751441238232965030">हा संगणक लवकरच 32-बिट Google Chrome अद्यतने प्राप्त करणे थांबवेल. कृपया 64-बिट Google Chrome वर अद्यतनित करा.</translation> <translation id="4754614261631455953">Google Chrome कॅनरी (mDNS-मध्ये)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ms.xtb b/chrome/app/resources/google_chrome_strings_ms.xtb index 1717c1d3..2df15b7 100644 --- a/chrome/app/resources/google_chrome_strings_ms.xtb +++ b/chrome/app/resources/google_chrome_strings_ms.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Paparkan menu Chrome</translation> <translation id="2429317896000329049">Google Chrome tidak dapat menyegerakkan data anda kerana Segerak tidak tersedia untuk domain anda.</translation> <translation id="2485422356828889247">Nyahpasang</translation> -<translation id="2576431527583832481">Chrome telah dipertingkatkan! Versi baharu kini boleh didapati.</translation> <translation id="2580411288591421699">Tidak dapat memasang versi Google Chrome yang sama yang kini dijalankan. Sila tutup Google Chrome dan cuba semula.</translation> <translation id="2582790009689336987">Tidak lama lagi, komputer ini akan berhenti menerima kemas kini Google Chrome kerana sistem Linux ini tidak akan disokong lagi.</translation> <translation id="2588322182880276190">Logo Chrome</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">Untuk menjadikan Chrome lebih selamat, kami melumpuhkan beberapa sambungan yang tidak disenaraikan dalam <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> dan mungkin telah ditambahkan tanpa pengetahuan anda.</translation> <translation id="4700157086864140907">Google Chrome dapat menyediakan semakan ejaan yang lebih pintar dengan menghantar apa yang anda taip dalam penyemak imbas kepada pelayan Google, membolehkan anda menggunakan teknologi semakan ejaan yang sama seperti yang digunakan oleh carian Google.</translation> <translation id="4728575227883772061">Pemasangan gagal disebabkan ralat tidak dinyatakan. Jika Google Chrome kini dijalankan, sila tutupnya dan cuba semula.</translation> -<translation id="473775607612524610">Kemas kini</translation> <translation id="4743926867934016338">Terima & Cari</translation> <translation id="4751441238232965030">Komputer ini akan berhenti menerima kemas kini Google Chrome 32 bit tidak lama lagi. Sila tingkatkan kepada Google Chrome 64 bit.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_nl.xtb b/chrome/app/resources/google_chrome_strings_nl.xtb index 2406a318..faa05da9 100644 --- a/chrome/app/resources/google_chrome_strings_nl.xtb +++ b/chrome/app/resources/google_chrome_strings_nl.xtb
@@ -55,7 +55,6 @@ <translation id="2397416548179033562">Chrome-menu weergeven</translation> <translation id="2429317896000329049">Google Chrome kan je gegevens niet synchroniseren, omdat synchronisatie niet beschikbaar is voor je domein.</translation> <translation id="2485422356828889247">Installatie ongedaan maken</translation> -<translation id="2576431527583832481">Chrome is nu nog beter! Er is een nieuwe versie beschikbaar.</translation> <translation id="2580411288591421699">Kan dezelfde Google Chrome-versie die momenteel actief is, niet installeren. Sluit Google Chrome en probeer het opnieuw.</translation> <translation id="2582790009689336987">Deze computer ontvangt binnenkort geen Google Chrome-updates meer omdat dit Linux-systeem niet meer wordt ondersteund.</translation> <translation id="2588322182880276190">Chrome-logo</translation> @@ -115,7 +114,6 @@ <translation id="4633000520311261472">Om Chrome veiliger te maken, hebben we een aantal extensies uitgeschakeld die niet worden vermeld in de <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> en mogelijk zonder je medeweten zijn geïnstalleerd.</translation> <translation id="4700157086864140907">Google Chrome kan een betere spellingcontrole leveren door wat je in de browser typt naar Google-servers te verzenden. Hierdoor kun je profiteren van dezelfde technologie voor spellingcontrole die ook voor Google Zoeken wordt gebruikt.</translation> <translation id="4728575227883772061">De installatie is mislukt wegens een onbekende fout. Als Google Chrome momenteel actief is, sluit je het programma af en probeer je het opnieuw.</translation> -<translation id="473775607612524610">Updaten</translation> <translation id="4743926867934016338">Accepteren en zoeken</translation> <translation id="4751441238232965030">Deze computer ontvangt binnenkort geen updates meer voor de 32-bits versie van Google Chrome. Upgrade naar de 64-bits versie van Google Chrome.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_no.xtb b/chrome/app/resources/google_chrome_strings_no.xtb index 34755a3..2d59244 100644 --- a/chrome/app/resources/google_chrome_strings_no.xtb +++ b/chrome/app/resources/google_chrome_strings_no.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Vis Chrome-menyen</translation> <translation id="2429317896000329049">Google Chrome kunne ikke synkronisere dataene dine fordi synkronisering ikke er tilgjengelig for domenet ditt.</translation> <translation id="2485422356828889247">Avinstaller</translation> -<translation id="2576431527583832481">Chrome har blitt enda bedre. En ny versjon er nå tilgjengelig.</translation> <translation id="2580411288591421699">Google Chrome-versjonen du prøver å installere, kjører allerede. Lukk Google Chrome og forsøk å installere på nytt.</translation> <translation id="2582790009689336987">Denne datamaskinen slutter snart å motta oppdateringer av Google Chrome fordi dette Linux-systemet ikke støttes lenger.</translation> <translation id="2588322182880276190">Chrome-logo</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">For å gjøre Chrome tryggere, har vi deaktivert noen utvidelser som ikke er oppført i <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />, og som kan ha blitt lagt uten at du har vært klar over det.</translation> <translation id="4700157086864140907">Google Chrome kan gi bedre stavekontroll ved å sende det du skriver inn i nettleseren til Googles tjenere, noe som gjør at du kan bruke samme teknologi for stavekontroll som brukes av Google Søk.</translation> <translation id="4728575227883772061">Installeringen mislyktes på grunn av en uspesifisert feil. Lukk Google Chrome hvis det kjører, og prøv på nytt.</translation> -<translation id="473775607612524610">Oppdater</translation> <translation id="4743926867934016338">Godta og søk</translation> <translation id="4751441238232965030">Denne datamaskinen slutter snart å motta oppdateringer for 32-bit-versjonen av Google Chrome. Oppgrader til 64-bit-versjonen av Google Chrome.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-Inn)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pl.xtb b/chrome/app/resources/google_chrome_strings_pl.xtb index d350d76b..4dc50796 100644 --- a/chrome/app/resources/google_chrome_strings_pl.xtb +++ b/chrome/app/resources/google_chrome_strings_pl.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Pokaż menu Chrome</translation> <translation id="2429317896000329049">Google Chrome nie może zsynchronizować danych, ponieważ synchronizacja jest niedostępna w Twojej domenie.</translation> <translation id="2485422356828889247">Odinstaluj</translation> -<translation id="2576431527583832481">Chrome jest teraz jeszcze lepszy! Dostępna jest nowa wersja.</translation> <translation id="2580411288591421699">Nie można zainstalować tej samej wersji przeglądarki Google Chrome co obecnie uruchomiona. Zamknij przeglądarkę Google Chrome i spróbuj ponownie.</translation> <translation id="2582790009689336987">Google Chrome wkrótce przestanie aktualizować się na tym komputerze, bo ten system Linux nie będzie już obsługiwany.</translation> <translation id="2588322182880276190">Logo Chrome</translation> @@ -112,7 +111,6 @@ <translation id="4633000520311261472">Aby poprawić bezpieczeństwo Chrome, wyłączyliśmy niektóre rozszerzenia niedostępne w <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />, które mogły zostać dodane bez Twojej wiedzy.</translation> <translation id="4700157086864140907">Google Chrome może lepiej sprawdzać pisownię, przesyłając do serwerów Google tekst, który wpisujesz w przeglądarce. Dzięki temu możesz korzystać z technologii sprawdzania pisowni używanej przez wyszukiwarkę Google.</translation> <translation id="4728575227883772061">Instalacja nie powiodła się z powodu nieokreślonego błędu. Jeśli Google Chrome jest aktualnie uruchomiony, zamknij aplikację i spróbuj ponownie.</translation> -<translation id="473775607612524610">Aktualizuj</translation> <translation id="4743926867934016338">Zaakceptuj i szukaj</translation> <translation id="4751441238232965030">Ten komputer wkrótce przestanie otrzymywać aktualizacje Google Chrome w wersji 32-bitowej. Uaktualnij Chrome do wersji 64-bitowej.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-BR.xtb b/chrome/app/resources/google_chrome_strings_pt-BR.xtb index 76268b6..bdaa05d 100644 --- a/chrome/app/resources/google_chrome_strings_pt-BR.xtb +++ b/chrome/app/resources/google_chrome_strings_pt-BR.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Exibir o menu do Google Chrome</translation> <translation id="2429317896000329049">O Google Chrome não pôde sincronizar seus dados porque a sincronização não está disponível para seu domínio.</translation> <translation id="2485422356828889247">Desinstalar</translation> -<translation id="2576431527583832481">O Google Chrome ficou ainda melhor! Uma nova versão está disponível.</translation> <translation id="2580411288591421699">Não é possível instalar a mesma versão do Google Chrome que está em execução. Feche o Google Chrome e tente novamente.</translation> <translation id="2582790009689336987">Em breve, este computador parará de receber atualizações do Google Chrome, porque este sistema Linux não será mais compatível.</translation> <translation id="2588322182880276190">Logotipo do Google Chrome</translation> @@ -112,7 +111,6 @@ <translation id="4633000520311261472">Para tornar o Google Chrome mais seguro, desativamos algumas extensões que não estão listadas na <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> e podem ser sido adicionadas sem seu conhecimento.</translation> <translation id="4700157086864140907">O Google Chrome pode oferecer verificação ortográfica mais inteligente, enviando as informações que você digita no navegador para os servidores do Google. Isto permite que você utilize a mesma tecnologia de verificação ortográfica utilizada pela pesquisa do Google.</translation> <translation id="4728575227883772061">Houve uma falha na instalação devido a um erro não-especificado. Se o Google Chrome estiver em execução no momento, feche-o e tente novamente.</translation> -<translation id="473775607612524610">Atualizar</translation> <translation id="4743926867934016338">Aceitar e pesquisar</translation> <translation id="4751441238232965030">Em breve, este computador não receberá mais atualizações do Google Chrome de 32 bits. Faça upgrade para o Google Chrome de 64 bits.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-PT.xtb b/chrome/app/resources/google_chrome_strings_pt-PT.xtb index 6043422..531726a8 100644 --- a/chrome/app/resources/google_chrome_strings_pt-PT.xtb +++ b/chrome/app/resources/google_chrome_strings_pt-PT.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Mostrar menu do Chrome</translation> <translation id="2429317896000329049">O Google Chrome não conseguiu sincronizar os dados porque a Sincronização não está disponível para o seu domínio.</translation> <translation id="2485422356828889247">Desinstalar</translation> -<translation id="2576431527583832481">O Chrome ficou ainda melhor! Está disponível uma nova versão.</translation> <translation id="2580411288591421699">Não é possível instalar a mesma versão do Google Chrome atualmente em execução. Feche o Google Chrome e tente novamente.</translation> <translation id="2582790009689336987">Em breve, este computador deixará de receber atualizações do Google Chrome, uma vez que este sistema Linux já não será suportado.</translation> <translation id="2588322182880276190">Logótipo do Chrome</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">Para tornar o Chrome mais seguro, desativámos algumas extensões que não estão listadas na <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> e é possível que tenham sido adicionadas sem o seu conhecimento.</translation> <translation id="4700157086864140907">O Google Chrome pode disponibilizar uma verificação ortográfica mais inteligente, enviando o que escreve no navegador para os servidores da Google, o que lhe permite utilizar a mesma tecnologia de verificação ortográfica da pesquisa do Google.</translation> <translation id="4728575227883772061">Houve uma falha na instalação devido a um erro não especificado. Se o Google Chrome estiver atualmente em execução, feche-o e tente de novo.</translation> -<translation id="473775607612524610">Actualizar</translation> <translation id="4743926867934016338">Aceitar e pesquisar</translation> <translation id="4751441238232965030">Em breve, este computador deixará de receber atualizações do Google Chrome de 32 bits. Atualize para o Google Chrome de 64 bits.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ro.xtb b/chrome/app/resources/google_chrome_strings_ro.xtb index 61894a96..741a149 100644 --- a/chrome/app/resources/google_chrome_strings_ro.xtb +++ b/chrome/app/resources/google_chrome_strings_ro.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Afișează meniul Chrome</translation> <translation id="2429317896000329049">Google Chrome nu a putut sincroniza datele, deoarece sincronizarea nu este disponibilă pentru domeniul dvs.</translation> <translation id="2485422356828889247">Dezinstalează</translation> -<translation id="2576431527583832481">Chrome a devenit și mai bun! Este disponibilă o nouă versiune.</translation> <translation id="2580411288591421699">Nu se poate instala aceeași versiune Google Chrome care rulează în prezent. Închide Google Chrome și încearcă din nou.</translation> <translation id="2582790009689336987">În curând, acest computer nu va mai primi actualizări pentru Google Chrome, deoarece acest sistem Linux nu va mai fi acceptat.</translation> <translation id="2588322182880276190">Sigla Chrome</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">Pentru ca browserul Chrome să fie mai sigur, am dezactivat câteva extensii care nu sunt incluse în <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> și care este posibil să fi fost adăugate fără știrea dvs.</translation> <translation id="4700157086864140907">Google Chrome poate oferi o verificare a ortografiei mai inteligentă prin trimiterea textului introdus în browser la serverele Google, permițându-vă să utilizați aceeași tehnologie de verificare a ortografiei utilizată de Căutare Google.</translation> <translation id="4728575227883772061">Instalarea nu a reușit din cauza unei erori necunoscute. Dacă Google Chrome rulează în acest moment, închide-l și încearcă din nou.</translation> -<translation id="473775607612524610">Actualizează</translation> <translation id="4743926867934016338">Acceptă și caută</translation> <translation id="4751441238232965030">În curând, acest computer nu va mai primi actualizări pentru Google Chrome pe 32 de biți. Fă upgrade la Google Chrome pe 64 de biți.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ru.xtb b/chrome/app/resources/google_chrome_strings_ru.xtb index f3b1533..8cc2baf 100644 --- a/chrome/app/resources/google_chrome_strings_ru.xtb +++ b/chrome/app/resources/google_chrome_strings_ru.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Отображение меню Chrome</translation> <translation id="2429317896000329049">Google Chrome не удалось синхронизировать данные, поскольку служба Sync недоступна для вашего домена.</translation> <translation id="2485422356828889247">Удалить</translation> -<translation id="2576431527583832481">Chrome становится лучше! Доступна новая версия.</translation> <translation id="2580411288591421699">Не удается установить версию Google Chrome, аналогичную уже выполняемой. Закройте Google Chrome и повторите попытку.</translation> <translation id="2582790009689336987">Google Chrome скоро перестанет обновляться на этом компьютере, поскольку поддержка этой системы Linux будет прекращена.</translation> <translation id="2588322182880276190">Логотип Chrome</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">Чтобы обеспечить безопасность ваших данных, некоторые расширения Chrome были отключены, так как <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> не содержит сведений о них, то есть эти компоненты могли быть установлены без вашего ведома.</translation> <translation id="4700157086864140907">В браузере Chrome для проверки правописания вводимый вами текст передается на серверы Google. Та же технология используется в Google Поиске.</translation> <translation id="4728575227883772061">Установка не удалась из-за неизвестной ошибки. Закройте все окна Google Chrome и повторите попытку снова.</translation> -<translation id="473775607612524610">Обновление</translation> <translation id="4743926867934016338">Принимаю</translation> <translation id="4751441238232965030">Обновление 32-разрядной версии Google Chrome на этом компьютере скоро будет прекращено. Установите 64-разрядную версию браузера.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sk.xtb b/chrome/app/resources/google_chrome_strings_sk.xtb index 94eaa224..6219acdb 100644 --- a/chrome/app/resources/google_chrome_strings_sk.xtb +++ b/chrome/app/resources/google_chrome_strings_sk.xtb
@@ -53,7 +53,6 @@ <translation id="2397416548179033562">Zobraziť Ponuku Chrome</translation> <translation id="2429317896000329049">Prehliadaču Google Chrome sa nepodarilo synchronizovať vaše údaje, pretože možnosť synchronizácie nie je pre vašu doménu k dispozícii.</translation> <translation id="2485422356828889247">Odinštalovať</translation> -<translation id="2576431527583832481">Prehliadač Chrome bol práve vylepšený. K dispozícii je nová verzia.</translation> <translation id="2580411288591421699">Nie je možné nainštalovať rovnakú verziu prehliadača Google Chrome, ako je aktuálne spustená verzia. Zavrite Google Chrome a skúste znova.</translation> <translation id="2582790009689336987">Tento počítač čoskoro prestane dostávať aktualizácie prehliadača Google Chrome, pretože táto verzia systému Linux už nebude ďalej podporovaná.</translation> <translation id="2588322182880276190">Logo Chrome</translation> @@ -113,7 +112,6 @@ <translation id="4633000520311261472">Z dôvodu vyššej bezpečnosti prehliadača Chrome sme zakázali niektoré rozšírenia, ktoré nedodáva <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> a mohli byť pridané bez vášho vedomia.</translation> <translation id="4700157086864140907">Google Chrome vám ponúka inteligentnejšiu kontrolu pravopisu tým, že text zadaný do prehliadača odošle serverom spoločnosti Google. Umožňuje vám tak využiť rovnakú technológiu kontroly pravopisu, aká sa používa vo Vyhľadávaní Google.</translation> <translation id="4728575227883772061">Inštalácia zlyhala kvôli neurčenej chybe. Ak je prehliadač Google Chrome momentálne spustený, zatvorte ho a skúste znova.</translation> -<translation id="473775607612524610">Aktualizovať</translation> <translation id="4743926867934016338">Prijať a vyhľadať</translation> <translation id="4751441238232965030">Tento počítač už nebude dostávať aktualizácie pre 32-bitový prehliadač Google Chrome. Inovujte ho na 64-bitovú verziu.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sl.xtb b/chrome/app/resources/google_chrome_strings_sl.xtb index 778cb97..69116cf 100644 --- a/chrome/app/resources/google_chrome_strings_sl.xtb +++ b/chrome/app/resources/google_chrome_strings_sl.xtb
@@ -55,7 +55,6 @@ <translation id="2397416548179033562">Prikaz Chromovega menija</translation> <translation id="2429317896000329049">Google Chrome ni mogel sinhronizirati podatkov, ker sinhronizacija ni na voljo za vašo domeno.</translation> <translation id="2485422356828889247">Odstranjevanje</translation> -<translation id="2576431527583832481">Chrome je izboljšan! Na voljo je nova različica.</translation> <translation id="2580411288591421699">Ni mogoče namestiti različice Google Chroma, enake tisti, ki se trenutno izvaja. Zaprite Google Chrome in poskusite znova.</translation> <translation id="2582790009689336987">Ta računalnik kmalu ne bo več prejemal posodobitev za Google Chrome, ker ta sistem Linux ne bo več podprt.</translation> <translation id="2588322182880276190">Chromov logotip</translation> @@ -115,7 +114,6 @@ <translation id="4633000520311261472">Zaradi večje varnosti smo v Chromu onemogočili nekatere razširitve, ki niso navedene v storitvi <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> in so bile morda dodane brez vaše vednosti.</translation> <translation id="4700157086864140907">Google Chrome lahko zagotovi pametnejše črkovanje, tako da vaše vnose v brskalnik pošilja v Googlove strežnike in vam omogoči, da uporabljate isto tehnologijo preverjanja črkovanja, kot jo uporablja Googlovo iskanje.</translation> <translation id="4728575227883772061">Namestitev ni bila izvedena zaradi nedoločene napake. Če je Google Chrome trenutno vklopljen, ga zaprite in poskusite znova.</translation> -<translation id="473775607612524610">Posodobi</translation> <translation id="4743926867934016338">Sprejem in iskanje</translation> <translation id="4751441238232965030">Ta računalnik bo kmalu prenehal prejemati posodobitve za 32-bitno različico Google Chroma. Nadgradite Google Chrome na 64-bitno različico.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr.xtb b/chrome/app/resources/google_chrome_strings_sr.xtb index a8f68ec..ab40e2d 100644 --- a/chrome/app/resources/google_chrome_strings_sr.xtb +++ b/chrome/app/resources/google_chrome_strings_sr.xtb
@@ -55,7 +55,6 @@ <translation id="2397416548179033562">Приказ Chrome менија</translation> <translation id="2429317896000329049">Google Chrome не може да синхронизује податке јер Синхронизација није доступна за домен.</translation> <translation id="2485422356828889247">Деинсталирај</translation> -<translation id="2576431527583832481">Chrome је управо постао бољи! Доступна је нова верзија.</translation> <translation id="2580411288591421699">Није могуће инсталирати верзију Google Chrome прегледача која је иста као тренутно покренута верзија. Затворите Google Chrome и покушајте поново.</translation> <translation id="2582790009689336987">Овај рачунар ће ускоро престати да добија ажурирања за Google Chrome јер овај Linux систем више неће бити подржан.</translation> <translation id="2588322182880276190">Chrome логотип</translation> @@ -115,7 +114,6 @@ <translation id="4633000520311261472">Да бисмо учинили Chrome безбеднијим, онемогућили смо неке додатке које не наводи <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> и који су можда додати без вашег знања.</translation> <translation id="4700157086864140907">Google Chrome може да пружи паметнију проверу правописа тако што оно што куцате у прегледач шаље Google серверима, што вам омогућава да користите исту технологију провере правописа коју користи Google претрага.</translation> <translation id="4728575227883772061">Инсталација није успела због неодређене грешке. Ако је Google Chrome тренутно отворен, затворите га и покушајте поново.</translation> -<translation id="473775607612524610">Ажурирај</translation> <translation id="4743926867934016338">Прихватам, претражи</translation> <translation id="4751441238232965030">Овај рачунар ће ускоро престати да добија ажурирања за 32-битни Google Chrome. Надоградите Google Chrome на 64-битну верзију.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sv.xtb b/chrome/app/resources/google_chrome_strings_sv.xtb index 768a300..0f7d866 100644 --- a/chrome/app/resources/google_chrome_strings_sv.xtb +++ b/chrome/app/resources/google_chrome_strings_sv.xtb
@@ -55,7 +55,6 @@ <translation id="2397416548179033562">Visa Chrome-menyn</translation> <translation id="2429317896000329049">Google Chrome kunde inte synkronisera data eftersom synkronisering inte är tillgängligt för din domän.</translation> <translation id="2485422356828889247">Avinstallera</translation> -<translation id="2576431527583832481">Chrome har blivit ännu bättre! En ny version finns tillgänglig.</translation> <translation id="2580411288591421699">Det går inte att installera samma version av Google Chrome som redan körs. Stäng Google Chrome och försök igen.</translation> <translation id="2582790009689336987">Den här datorn slutar snart att få uppdateringar för Google Chrome eftersom dess Linux-system inte längre stöds.</translation> <translation id="2588322182880276190">Logotypen för Chrome</translation> @@ -115,7 +114,6 @@ <translation id="4633000520311261472">Vi har gjort Chrome säkrare genom att inaktivera vissa tillägg som inte finns i <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> och som kan ha lagts till utan att du vet om det.</translation> <translation id="4700157086864140907">Google Chrome kan ge smartare stavningskontroll genom att skicka det som du skriver i webbläsaren till Googles servrar så att du kan använda samma stavningsteknik som används i Googles webbsökning.</translation> <translation id="4728575227883772061">Installationen misslyckades på grund av ett ospecificerat fel. Stäng Google Chrome, om det är igång, och försök sedan igen.</translation> -<translation id="473775607612524610">Uppdatera</translation> <translation id="4743926867934016338">Acceptera och sök</translation> <translation id="4751441238232965030">Den här datorn får snart inte längre uppdateringar för 32-bitarsversionen av Google Chrome. Uppgradera till Google Chrome med 64 bitar.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sw.xtb b/chrome/app/resources/google_chrome_strings_sw.xtb index fcf3013..31c612ad 100644 --- a/chrome/app/resources/google_chrome_strings_sw.xtb +++ b/chrome/app/resources/google_chrome_strings_sw.xtb
@@ -55,7 +55,6 @@ <translation id="2397416548179033562">Onyesha Menyu ya Chrome</translation> <translation id="2429317896000329049">Google Chrome haikuweza kusawazisha data yako kwa sababu Usawazishaji haupatikani kwa kikoa chako.</translation> <translation id="2485422356828889247">Ondoa</translation> -<translation id="2576431527583832481">Chrome imekuwa bora! Toleo jipya linapatikana.</translation> <translation id="2580411288591421699">Huwezi kusakinisha toleo la Google Chrome ambalo tayari linatumika. Tafadhali funga Google Chrome na ujaribu tena.</translation> <translation id="2582790009689336987">Kompyuta itaacha kupokea sasisho za Google Chrome hivi karibuni kwa sababu mfumo huu wa Linux hautatumika tena.</translation> <translation id="2588322182880276190">Nembo ya Chrome</translation> @@ -115,7 +114,6 @@ <translation id="4633000520311261472">Ili kufanya Chrome salama zaidi, tumezima baadhi ya viendelezi ambavyo havijaorodheshwa katika <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> na ambavyo huendwa viliongezwa pasipo ridhaa yako.</translation> <translation id="4700157086864140907">Google Chrome inaweza kutoa ukaguzi bora wa tahajia kwa kutuma unachocharaza katika kivinjari hadi kwenye seva ya Google, ikikuruhusu utumie teknolojia ya kukagua tahajia inayotumiwa na huduma ya Tafuta na Google.</translation> <translation id="4728575227883772061">Usanidi umeshindwa kwa sababu ya hitilafu isiyojulikana. Ikiwa Google Chrome haitumiki kwa sasa, tafadhali ifunge na ujaribu tena.</translation> -<translation id="473775607612524610">Sasisha</translation> <translation id="4743926867934016338">Kubali na Utafute</translation> <translation id="4751441238232965030">Hivi karibuni kompyuta hii itaacha kupokea sasisho za Google Chrome za 32-bit. Tafadhali pata toleo jipya la Google Chrome la 64-bit.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ta.xtb b/chrome/app/resources/google_chrome_strings_ta.xtb index c20990a..3fb0281a 100644 --- a/chrome/app/resources/google_chrome_strings_ta.xtb +++ b/chrome/app/resources/google_chrome_strings_ta.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Chrome மெனுவைக் காட்டு</translation> <translation id="2429317896000329049">உங்கள் களத்திற்கு ஒத்திசைவு இல்லாததால், Google Chrome ஆல் உங்கள் தரவை ஒத்திசைக்க முடியவில்லை.</translation> <translation id="2485422356828889247">நிறுவல் நீக்கு</translation> -<translation id="2576431527583832481">Chrome தற்போதுதான் சிறப்பைப் பெற்றது! புதிய பதிப்பு உள்ளது.</translation> <translation id="2580411288591421699">நடப்பில் இயங்கிக்கொண்டிருக்கும் அதே Google Chrome பதிப்பை நிறுவ முடியாது. Google Chrome ஐ மூடிவிட்டு மீண்டும் முயற்சி செய்க.</translation> <translation id="2582790009689336987">இந்த Linux அமைப்பு இனி ஆதரிக்கப்படாது என்பதால் இந்தக் கணினி Google Chrome புதுப்பிப்புகளைப் பெறுவதை விரைவில் நிறுத்தும்.</translation> <translation id="2588322182880276190">Chrome லோகோ</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">Chrome ஐப் பாதுகாப்பானதாக்க <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> இல் பட்டியலிடப்படாத சில நீட்டிப்புகளை நாங்கள் முடக்கிவிட்டோம் மேலும் அவை உங்களுக்குத் தெரியாமல் சேர்க்கப்பட்டிருக்கலாம்.</translation> <translation id="4700157086864140907">நீங்கள் உலாவியில் தட்டச்சு செய்ததை Google சேவையகங்களுக்கு அனுப்புவதன் மூலம் Google Chrome விரைவான எழுத்துப்பிழை சரிப்பார்த்தலை வழங்குகிறது, Google தேடலில் பயன்படுத்தப்பட்ட ஒரே மாதிரியான எழுத்துப்பிழை சரிபார்த்தல் தொழில்நுட்பத்தைப் பயன்படுத்த அனுமதிக்கிறது.</translation> <translation id="4728575227883772061">குறிப்பிடப்படாத பிழையின் காரணமாக, நிறுவல் தோல்வியடைந்தது. தற்போது Google Chrome இயக்கத்தில் இருந்தால், அதை மூடிவிட்டு மீண்டும் முயற்சி செய்க.</translation> -<translation id="473775607612524610">புதுப்பி</translation> <translation id="4743926867934016338">ஏற்கிறேன் & தேடு</translation> <translation id="4751441238232965030">இந்தக் கணினி 32-பிட் Google Chrome புதுப்பிப்புகளைப் பெறுவதை விரைவில் நிறுத்தும். 64-பிட் Google Chromeக்கு மேம்படுத்தவும்.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_te.xtb b/chrome/app/resources/google_chrome_strings_te.xtb index c5c939e..dd18af6 100644 --- a/chrome/app/resources/google_chrome_strings_te.xtb +++ b/chrome/app/resources/google_chrome_strings_te.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Chrome మెనును చూపు</translation> <translation id="2429317896000329049">మీ డొమైన్ కోసం సమకాలీకరణ అందుబాటులో లేనందున Google Chrome మీ డేటాను సమకాలీకరించలేకపోయింది.</translation> <translation id="2485422356828889247">వ్యవస్థాపనను తీసివెయ్యి</translation> -<translation id="2576431527583832481">Chrome ఇప్పుడే మెరుగుపరచబడింది! క్రొత్త సంస్కరణ అందుబాటులో ఉంది.</translation> <translation id="2580411288591421699">ప్రస్తుతం అమలవుతున్న అదే Google Chrome సంస్కరణను వ్యవస్థాపించలేదు. దయచేసి Google Chromeను మూసివేసి, మళ్ళీ ప్రయత్నించండి.</translation> <translation id="2582790009689336987">ఈ Linux సిస్టమ్కు ఇకపై మద్దతు నిలిపివేయబడుతున్నందున ఈ కంప్యూటర్ త్వరలోనే Google Chrome నవీకరణలను స్వీకరించడం ఆపివేస్తుంది.</translation> <translation id="2588322182880276190">Chrome లోగో</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">Chromeను సురక్షితం చేయడానికి, మేము <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />లో జాబితా చేయబడని మరియు మీకు తెలియకుండానే జోడించబడిన కొన్ని పొడిగింపులను నిలిపివేసాము.</translation> <translation id="4700157086864140907">Google Chrome మీరు బ్రౌజర్లో టైప్ చేసే వాటిని Google సర్వర్లకు పంపించడం ద్వారా, Google శోధనలో ఉపయోగించబడేలాంటి పదనిర్మాణ-తనిఖీ సాంకేతిక పరిజ్ఞానాన్ని మీరు ఉపయోగించడానికి అనుమతించడం ద్వారా మరింత చురుకైన పదనిర్మాణ-తనిఖీని అందిస్తుంది.</translation> <translation id="4728575227883772061">పేర్కొనబడని లోపం కారణంగా ఇన్స్టాలేషన్ విఫలమైంది. ప్రస్తుతం Google Chrome రన్ చేస్తున్నట్లయితే, దయచేసి దాన్ని మూసివేసి, మళ్ళీ ప్రయత్నించండి.</translation> -<translation id="473775607612524610">నవీకరణ</translation> <translation id="4743926867934016338">ఆమోదిస్తున్నాను, శోధించు</translation> <translation id="4751441238232965030">ఈ కంప్యూటర్ 32-బిట్ Google Chrome నవీకరణలను స్వీకరించడం త్వరలో ఆపివేయబడుతుంది. దయచేసి 64-బిట్ Google Chromeకి అప్గ్రేడ్ చేయండి.</translation> <translation id="4754614261631455953">Google Chrome కెనరీ (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_th.xtb b/chrome/app/resources/google_chrome_strings_th.xtb index 7b10c1a..33030235 100644 --- a/chrome/app/resources/google_chrome_strings_th.xtb +++ b/chrome/app/resources/google_chrome_strings_th.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">แสดงเมนู Chrome</translation> <translation id="2429317896000329049">Google Chrome ไม่สามารถซิงค์ข้อมูลของคุณเนื่องจากไม่สามารถใช้การซิงค์กับโดเมนของคุณ</translation> <translation id="2485422356828889247">ถอนการติดตั้ง</translation> -<translation id="2576431527583832481">Chrome พัฒนาใหม่! มีรุ่นใหม่ให้ใช้งานแล้ว</translation> <translation id="2580411288591421699">ไม่สามารถติดตั้ง Google Chrome รุ่นเดียวกับที่กำลังเรียกใช้อยู่ได้ โปรดปิด Google Chrome แล้วลองใหม่อีกครั้ง</translation> <translation id="2582790009689336987">คอมพิวเตอร์เครื่องนี้จะหยุดรับการอัปเดต Google Chrome ในอีกไม่ช้าเนื่องจากไม่มีการสนับสนุนระบบ Linux นี้อีกต่อไป</translation> <translation id="2588322182880276190">โลโก้ Chrome</translation> @@ -112,7 +111,6 @@ <translation id="4633000520311261472">เพื่อให้ Chrome ปลอดภัยขึ้น เราปิดส่วนขยายบางรายการที่ไม่ได้ระบุไว้ใน <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> และอาจถูกเพิ่มเข้ามาโดยที่คุณไม่รู้ตัว</translation> <translation id="4700157086864140907">Google Chrome สามารถให้บริการตรวจสอบการสะกดที่ชาญฉลาดมากขึ้นโดยการส่งสิ่งที่คุณพิมพ์ในเบราว์เซอร์ไปยังเซิร์ฟเวอร์ของ Google ซึ่งจะช่วยให้คุณสามารถใช้เทคโนโลยีตรวจสอบการสะกดแบบเดียวกันกับที่การค้นหาของ Google ใช้</translation> <translation id="4728575227883772061">การติดตั้งล้มเหลวเนื่องจากมีข้อผิดพลาดที่ไม่ได้ระบุ หาก Google Chrome ทำงานอยู่ในขณะนี้ โปรดปิดและลองอีกครั้ง</translation> -<translation id="473775607612524610">การอัปเดต</translation> <translation id="4743926867934016338">ยอมรับและค้นหา</translation> <translation id="4751441238232965030">ในไม่ช้านี้คอมพิวเตอร์เครื่องนี้จะไม่ได้รับการอัปเดตจาก Google Chrome แบบ 32 บิตอีกแล้ว โปรดอัปเกรดเป็น Google Chrome แบบ 64 บิต</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_tr.xtb b/chrome/app/resources/google_chrome_strings_tr.xtb index fef26c0f..d44c288f 100644 --- a/chrome/app/resources/google_chrome_strings_tr.xtb +++ b/chrome/app/resources/google_chrome_strings_tr.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Chrome menüsünü göster</translation> <translation id="2429317896000329049">Senkronizasyon, alan adınızda kullanılamadığından Google Chrome, verilerinizi senkronize edemedi.</translation> <translation id="2485422356828889247">Yüklemeyi Kaldır</translation> -<translation id="2576431527583832481">Chrome daha da iyi hale geldi! Yeni bir sürüm var.</translation> <translation id="2580411288591421699">Şu anda çalışmakta olan Google Chrome ile aynı sürüm yüklenemez. Lütfen Google Chrome'u kapatın ve tekrar deneyin.</translation> <translation id="2582790009689336987">Bu Linux sistemi artık desteklenmeyeceğinden, bu bilgisayar yakında Google Chrome güncellemeleri almayı durduracaktır.</translation> <translation id="2588322182880276190">Chrome logosu</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">Chrome'u daha güvenli bir hale getirmek için <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> altında listelenmeyen ve bilginiz dışında eklenmiş olabilecek bazı uzantıları devre dışı bıraktık.</translation> <translation id="4700157086864140907">Google Chrome, tarayıcıda yazdıklarınızı Google sunucularına gönderip akıllı yazım denetimi olanağı sağlayabilir ve Google arama tarafından kullanılan yazım denetimi teknolojisini kullanmanıza olanak tanır.</translation> <translation id="4728575227883772061">Belirlenemeyen bir hata nedeniyle yükleme başarısız oldu. Google Chrome şu anda çalışır durumdaysa, kapatıp yeniden deneyin.</translation> -<translation id="473775607612524610">Güncelle</translation> <translation id="4743926867934016338">Kabul Et ve Ara</translation> <translation id="4751441238232965030">Bu bilgisayar yakında 32 bit Google Chrome güncellemelerini almayı durduracak. Lütfen Google Chrome'un 64 bit sürümüne geçin.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_uk.xtb b/chrome/app/resources/google_chrome_strings_uk.xtb index b565db8..4fd2731f 100644 --- a/chrome/app/resources/google_chrome_strings_uk.xtb +++ b/chrome/app/resources/google_chrome_strings_uk.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">Показати меню Chrome</translation> <translation id="2429317896000329049">Google Chrome не вдалося синхронізувати ваші дані, оскільки синхронізація для вашого домену недоступна.</translation> <translation id="2485422356828889247">Видалити</translation> -<translation id="2576431527583832481">Chrome став ще кращим! Доступна нова версія.</translation> <translation id="2580411288591421699">Поки Google Chrome працює, неможливо встановити версію, аналогічну поточній. Закрийте Google Chrome і повторіть спробу.</translation> <translation id="2582790009689336987">На цей комп’ютер невдовзі перестануть надходити оновлення Google Chrome, оскільки ця система Linux більше не підтримуватиметься.</translation> <translation id="2588322182880276190">Логотип Chrome</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">Щоб зробити Chrome безпечнішим, ми вимкнули деякі розширення, установлені не із сайту <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> і, можливо, додані без вашого відома.</translation> <translation id="4700157086864140907">Google Chrome може запропонувати кращий спосіб перевірки правопису, надсилаючи введений у веб-переглядачі текст на сервери Google. Це дозволяє використовувати ту саму технологію перевірки правопису, яка використовується в пошуку Google.</translation> <translation id="4728575227883772061">Не вдалося здійснити встановлення через невизначену помилку. Якщо наразі Google Chrome запущено, закрийте його та повторіть спробу.</translation> -<translation id="473775607612524610">Оновити</translation> <translation id="4743926867934016338">Прийняти й шукати</translation> <translation id="4751441238232965030">Цей комп’ютер невдовзі перестане отримувати оновлення для 32-розрядної версії Google Chrome. Установіть 64-розрядну версію.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_vi.xtb b/chrome/app/resources/google_chrome_strings_vi.xtb index b1573830..ac41d3e 100644 --- a/chrome/app/resources/google_chrome_strings_vi.xtb +++ b/chrome/app/resources/google_chrome_strings_vi.xtb
@@ -53,7 +53,6 @@ <translation id="2397416548179033562">Hiển thị menu Chrome</translation> <translation id="2429317896000329049">Google Chrome không thể đồng bộ hóa dữ liệu của bạn vì Đồng bộ hóa không khả dụng cho miền của bạn.</translation> <translation id="2485422356828889247">Gỡ cài đặt</translation> -<translation id="2576431527583832481">Chrome được cải tiến hơn! Đã có phiên bản mới.</translation> <translation id="2580411288591421699">Không thể cài đặt phiên bản Google Chrome giống với phiên bản hiện đang chạy. Vui lòng đóng Google Chrome và thử lại.</translation> <translation id="2582790009689336987">Máy tính này sắp dừng nhận bản cập nhật của Google Chrome do hệ thống Linux này sẽ không được hỗ trợ nữa.</translation> <translation id="2588322182880276190">Biểu trưng Chrome</translation> @@ -114,7 +113,6 @@ <translation id="4633000520311261472">Để làm cho Chrome an toàn hơn, chúng tôi đã vô hiệu hóa một số tiện ích không được liệt kê trong <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> và có thể đã được thêm mà bạn không biết.</translation> <translation id="4700157086864140907">Google Chrome có thể cung cấp tính năng kiểm tra chính tả thông minh hơn bằng cách gửi những gì bạn nhập vào trình duyệt tới máy chủ Google, cho phép bạn sử dụng cùng một công nghệ kiểm tra chính tả mà tìm kiếm của Google sử dụng.</translation> <translation id="4728575227883772061">Không cài đặt được do lỗi chưa xác định. Nếu Google Chrome hiện đang chạy, vui lòng đóng Google Chrome và thử lại.</translation> -<translation id="473775607612524610">Cập nhật</translation> <translation id="4743926867934016338">Chấp nhận và tìm kiếm</translation> <translation id="4751441238232965030">Máy tính này sắp ngừng nhận bản cập nhật Google Chrome 32 bit. Vui lòng nâng cấp lên Google Chrome 64 bit.</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zh-CN.xtb b/chrome/app/resources/google_chrome_strings_zh-CN.xtb index 42e7632..ba33a96c 100644 --- a/chrome/app/resources/google_chrome_strings_zh-CN.xtb +++ b/chrome/app/resources/google_chrome_strings_zh-CN.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">显示 Chrome 菜单</translation> <translation id="2429317896000329049">由于您的网域停用了同步功能,Google Chrome无法同步您的数据。</translation> <translation id="2485422356828889247">卸载</translation> -<translation id="2576431527583832481">Chrome 浏览器刚刚经过了改进!新版本已推出。</translation> <translation id="2580411288591421699">无法安装与当前运行版本相同的 Google Chrome 浏览器。请关闭 Google Chrome 浏览器,然后重试。</translation> <translation id="2582790009689336987">Google Chrome 将不再支持此 Linux 系统,因此这台计算机很快将停止接收 Google Chrome 更新。</translation> <translation id="2588322182880276190">Chrome 徽标</translation> @@ -112,7 +111,6 @@ <translation id="4633000520311261472">为了提高 Chrome 的安全性,系统停用了一些未列在 <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />中、可能是在您不知情的情况下添加的扩展程序。</translation> <translation id="4700157086864140907">Google Chrome会将您在浏览器中输入的内容发送到Google服务器,并使用Google搜索所用的拼写检查技术,因而可为您提供更智能的拼写检查功能。</translation> <translation id="4728575227883772061">未知错误导致安装失败。如果 Google Chrome 浏览器正在运行,请将其关闭,然后重试。</translation> -<translation id="473775607612524610">更新</translation> <translation id="4743926867934016338">接受并搜索</translation> <translation id="4751441238232965030">此计算机很快将停止接收 32 位 Google Chrome 更新。请升级到 64 位 Google Chrome。</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zh-TW.xtb b/chrome/app/resources/google_chrome_strings_zh-TW.xtb index a431f05..d4ce709 100644 --- a/chrome/app/resources/google_chrome_strings_zh-TW.xtb +++ b/chrome/app/resources/google_chrome_strings_zh-TW.xtb
@@ -51,7 +51,6 @@ <translation id="2397416548179033562">顯示 Chrome 選單</translation> <translation id="2429317896000329049">您的網域無法使用「同步功能」,因此 Google Chrome 無法同步處理您的資料。</translation> <translation id="2485422356828889247">解除安裝</translation> -<translation id="2576431527583832481">Chrome 現在變得更進步了!歡迎您升級使用新版本。</translation> <translation id="2580411288591421699">您無法安裝這個版本的 Google Chrome,因為相同的版本目前正在執行中。請關閉 Google Chrome 然後再試一次。</translation> <translation id="2582790009689336987">Google Chrome 將停止支援這種 Linux 系統,因此這部電腦很快就不會再收到 Google Chrome 更新。</translation> <translation id="2588322182880276190">Chrome 標誌</translation> @@ -111,7 +110,6 @@ <translation id="4633000520311261472">為了讓 Chrome 的安全性更有保障,我們已將部分未列在 <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> 中的擴充功能停用,它們可能在您不知情的情況下加入瀏覽器。</translation> <translation id="4700157086864140907">Google Chrome 可將您在瀏覽器中輸入的字詞傳送給 Google 伺服器,並透過 Google 搜尋所使用的拼字檢查技術,為您提供更好用的拼字檢查功能。</translation> <translation id="4728575227883772061">安裝因不明錯誤而失敗。如果 Google Chrome 目前正在執行中,請將其關閉然後再試一次。</translation> -<translation id="473775607612524610">更新</translation> <translation id="4743926867934016338">接受並搜尋</translation> <translation id="4751441238232965030">這台電腦將不會再收到 32 位元的 Google Chrome 更新,請升級至 64 位元的 Google Chrome。</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation>
diff --git a/chrome/app/theme/theme_resources.grd b/chrome/app/theme/theme_resources.grd index 19de056..f6f79ff1 100644 --- a/chrome/app/theme/theme_resources.grd +++ b/chrome/app/theme/theme_resources.grd
@@ -522,9 +522,6 @@ </if> <if expr="use_ash"> <structure type="chrome_scaled_image" name="IDR_OTR_ICON" file="common/ash/otr_icon.png" /> - <if expr="not chromeos"> - <structure type="chrome_scaled_image" name="IDR_OTR_ICON_DESKTOP" file="common/otr_icon.png" /> - </if> </if> </if> <if expr="is_macosx or is_ios"> @@ -854,12 +851,6 @@ <structure type="chrome_scaled_image" name="IDR_THEME_FRAME_INACTIVE" file="common/ash/theme_frame_inactive.png" /> <structure type="chrome_scaled_image" name="IDR_THEME_FRAME_INCOGNITO" file="common/ash/theme_frame_incognito_active.png" /> <structure type="chrome_scaled_image" name="IDR_THEME_FRAME_INCOGNITO_INACTIVE" file="common/ash/theme_frame_incognito_inactive.png" /> - <if expr="not chromeos"> - <structure type="chrome_scaled_image" name="IDR_THEME_FRAME_DESKTOP" file="theme_frame.png" /> - <structure type="chrome_scaled_image" name="IDR_THEME_FRAME_INACTIVE_DESKTOP" file="theme_frame_inactive.png" /> - <structure type="chrome_scaled_image" name="IDR_THEME_FRAME_INCOGNITO_DESKTOP" file="theme_frame_incognito.png" /> - <structure type="chrome_scaled_image" name="IDR_THEME_FRAME_INCOGNITO_INACTIVE_DESKTOP" file="theme_frame_incognito_inactive.png" /> - </if> </if> <structure type="chrome_scaled_image" name="IDR_THEME_FRAME_OVERLAY" file="notused.png" /> <structure type="chrome_scaled_image" name="IDR_THEME_FRAME_OVERLAY_INACTIVE" file="notused.png" /> @@ -873,10 +864,6 @@ <!-- Ash has gray tab backgrounds, Windows uses blue. --> <structure type="chrome_scaled_image" name="IDR_THEME_TAB_BACKGROUND" file="common/ash/theme_default_inactive.png" /> <structure type="chrome_scaled_image" name="IDR_THEME_TAB_BACKGROUND_INCOGNITO" file="common/ash/theme_default_inactive.png" /> - <if expr="not chromeos"> - <structure type="chrome_scaled_image" name="IDR_THEME_TAB_BACKGROUND_DESKTOP" file="theme_tab_background.png" /> - <structure type="chrome_scaled_image" name="IDR_THEME_TAB_BACKGROUND_INCOGNITO_DESKTOP" file="theme_tab_background_incognito.png" /> - </if> </if> <if expr="is_macosx or is_ios"> <structure type="chrome_scaled_image" name="IDR_THEME_TAB_BACKGROUND" file="mac/theme_default_inactive.png" /> @@ -892,9 +879,6 @@ <if expr="use_ash"> <!-- Ash has a dark gray toolbar background, Windows has light gray. --> <structure type="chrome_scaled_image" name="IDR_THEME_TOOLBAR" file="common/ash/theme_default_active.png" /> - <if expr="not chromeos"> - <structure type="chrome_scaled_image" name="IDR_THEME_TOOLBAR_DESKTOP" file="theme_toolbar_default.png" /> - </if> </if> <if expr="is_macosx or is_ios"> <structure type="chrome_scaled_image" name="IDR_THEME_TOOLBAR" file="mac/theme_default_active.png" />
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 3b90742..807bd48 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -205,6 +205,7 @@ "//third_party/zlib:minizip", "//third_party/zlib:zip", "//ui/base", + "//ui/base:ui_data_pack", "//ui/events:events_base", "//ui/gfx", "//ui/gfx/geometry",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 03a8170..09ba941 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -584,132 +584,93 @@ // // When adding a new choice, add it to the end of the list. const FeatureEntry kFeatureEntries[] = { - {"ignore-gpu-blacklist", - IDS_FLAGS_IGNORE_GPU_BLACKLIST_NAME, - IDS_FLAGS_IGNORE_GPU_BLACKLIST_DESCRIPTION, - kOsAll, + {"ignore-gpu-blacklist", IDS_FLAGS_IGNORE_GPU_BLACKLIST_NAME, + IDS_FLAGS_IGNORE_GPU_BLACKLIST_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kIgnoreGpuBlacklist)}, #if defined(OS_WIN) - {"disable-direct-write", - IDS_FLAGS_DIRECT_WRITE_NAME, - IDS_FLAGS_DIRECT_WRITE_DESCRIPTION, - kOsWin, + {"disable-direct-write", IDS_FLAGS_DIRECT_WRITE_NAME, + IDS_FLAGS_DIRECT_WRITE_DESCRIPTION, kOsWin, SINGLE_DISABLE_VALUE_TYPE(switches::kDisableDirectWrite)}, #endif {"enable-experimental-canvas-features", IDS_FLAGS_EXPERIMENTAL_CANVAS_FEATURES_NAME, - IDS_FLAGS_EXPERIMENTAL_CANVAS_FEATURES_DESCRIPTION, - kOsAll, + IDS_FLAGS_EXPERIMENTAL_CANVAS_FEATURES_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kEnableExperimentalCanvasFeatures)}, - {"disable-accelerated-2d-canvas", - IDS_FLAGS_ACCELERATED_2D_CANVAS_NAME, - IDS_FLAGS_ACCELERATED_2D_CANVAS_DESCRIPTION, - kOsAll, + {"disable-accelerated-2d-canvas", IDS_FLAGS_ACCELERATED_2D_CANVAS_NAME, + IDS_FLAGS_ACCELERATED_2D_CANVAS_DESCRIPTION, kOsAll, SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAccelerated2dCanvas)}, - {"enable-display-list-2d-canvas", - IDS_FLAGS_DISPLAY_LIST_2D_CANVAS_NAME, - IDS_FLAGS_DISPLAY_LIST_2D_CANVAS_DESCRIPTION, - kOsAll, + {"enable-display-list-2d-canvas", IDS_FLAGS_DISPLAY_LIST_2D_CANVAS_NAME, + IDS_FLAGS_DISPLAY_LIST_2D_CANVAS_DESCRIPTION, kOsAll, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableDisplayList2dCanvas, switches::kDisableDisplayList2dCanvas)}, - {"composited-layer-borders", - IDS_FLAGS_COMPOSITED_LAYER_BORDERS, - IDS_FLAGS_COMPOSITED_LAYER_BORDERS_DESCRIPTION, - kOsAll, + {"composited-layer-borders", IDS_FLAGS_COMPOSITED_LAYER_BORDERS, + IDS_FLAGS_COMPOSITED_LAYER_BORDERS_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(cc::switches::kShowCompositedLayerBorders)}, #if defined(ENABLE_WEBRTC) - {"disable-webrtc-hw-decoding", - IDS_FLAGS_WEBRTC_HW_DECODING_NAME, - IDS_FLAGS_WEBRTC_HW_DECODING_DESCRIPTION, - kOsAndroid | kOsCrOS, + {"disable-webrtc-hw-decoding", IDS_FLAGS_WEBRTC_HW_DECODING_NAME, + IDS_FLAGS_WEBRTC_HW_DECODING_DESCRIPTION, kOsAndroid | kOsCrOS, SINGLE_DISABLE_VALUE_TYPE(switches::kDisableWebRtcHWDecoding)}, - {"disable-webrtc-hw-encoding", - IDS_FLAGS_WEBRTC_HW_ENCODING_NAME, - IDS_FLAGS_WEBRTC_HW_ENCODING_DESCRIPTION, - kOsAndroid | kOsCrOS, + {"disable-webrtc-hw-encoding", IDS_FLAGS_WEBRTC_HW_ENCODING_NAME, + IDS_FLAGS_WEBRTC_HW_ENCODING_DESCRIPTION, kOsAndroid | kOsCrOS, SINGLE_DISABLE_VALUE_TYPE(switches::kDisableWebRtcHWEncoding)}, - {"enable-webrtc-stun-origin", - IDS_FLAGS_WEBRTC_STUN_ORIGIN_NAME, - IDS_FLAGS_WEBRTC_STUN_ORIGIN_DESCRIPTION, - kOsAll, + {"enable-webrtc-stun-origin", IDS_FLAGS_WEBRTC_STUN_ORIGIN_NAME, + IDS_FLAGS_WEBRTC_STUN_ORIGIN_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kEnableWebRtcStunOrigin)}, #endif #if defined(OS_ANDROID) - {"disable-webaudio", - IDS_FLAGS_WEBAUDIO_NAME, - IDS_FLAGS_WEBAUDIO_DESCRIPTION, - kOsAndroid, + {"disable-webaudio", IDS_FLAGS_WEBAUDIO_NAME, + IDS_FLAGS_WEBAUDIO_DESCRIPTION, kOsAndroid, SINGLE_DISABLE_VALUE_TYPE(switches::kDisableWebAudio)}, #endif // Native client is compiled out when DISABLE_NACL is defined. #if !defined(DISABLE_NACL) {"enable-nacl", // FLAGS:RECORD_UMA - IDS_FLAGS_NACL_NAME, - IDS_FLAGS_NACL_DESCRIPTION, - kOsAll, + IDS_FLAGS_NACL_NAME, IDS_FLAGS_NACL_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kEnableNaCl)}, {"enable-nacl-debug", // FLAGS:RECORD_UMA - IDS_FLAGS_NACL_DEBUG_NAME, - IDS_FLAGS_NACL_DEBUG_DESCRIPTION, - kOsDesktop, + IDS_FLAGS_NACL_DEBUG_NAME, IDS_FLAGS_NACL_DEBUG_DESCRIPTION, kOsDesktop, SINGLE_VALUE_TYPE(switches::kEnableNaClDebug)}, {"nacl-debug-mask", // FLAGS:RECORD_UMA - IDS_FLAGS_NACL_DEBUG_MASK_NAME, - IDS_FLAGS_NACL_DEBUG_MASK_DESCRIPTION, - kOsDesktop, - MULTI_VALUE_TYPE(kNaClDebugMaskChoices)}, + IDS_FLAGS_NACL_DEBUG_MASK_NAME, IDS_FLAGS_NACL_DEBUG_MASK_DESCRIPTION, + kOsDesktop, MULTI_VALUE_TYPE(kNaClDebugMaskChoices)}, #endif #if defined(ENABLE_EXTENSIONS) {"extension-apis", // FLAGS:RECORD_UMA IDS_FLAGS_EXPERIMENTAL_EXTENSION_APIS_NAME, - IDS_FLAGS_EXPERIMENTAL_EXTENSION_APIS_DESCRIPTION, - kOsDesktop, + IDS_FLAGS_EXPERIMENTAL_EXTENSION_APIS_DESCRIPTION, kOsDesktop, SINGLE_VALUE_TYPE(extensions::switches::kEnableExperimentalExtensionApis)}, - {"extensions-on-chrome-urls", - IDS_FLAGS_EXTENSIONS_ON_CHROME_URLS_NAME, - IDS_FLAGS_EXTENSIONS_ON_CHROME_URLS_DESCRIPTION, - kOsAll, + {"extensions-on-chrome-urls", IDS_FLAGS_EXTENSIONS_ON_CHROME_URLS_NAME, + IDS_FLAGS_EXTENSIONS_ON_CHROME_URLS_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(extensions::switches::kExtensionsOnChromeURLs)}, #endif - {"enable-fast-unload", - IDS_FLAGS_FAST_UNLOAD_NAME, - IDS_FLAGS_FAST_UNLOAD_DESCRIPTION, - kOsAll, + {"enable-fast-unload", IDS_FLAGS_FAST_UNLOAD_NAME, + IDS_FLAGS_FAST_UNLOAD_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kEnableFastUnload)}, #if defined(ENABLE_EXTENSIONS) - {"enable-app-window-controls", - IDS_FLAGS_APP_WINDOW_CONTROLS_NAME, - IDS_FLAGS_APP_WINDOW_CONTROLS_DESCRIPTION, - kOsDesktop, + {"enable-app-window-controls", IDS_FLAGS_APP_WINDOW_CONTROLS_NAME, + IDS_FLAGS_APP_WINDOW_CONTROLS_DESCRIPTION, kOsDesktop, SINGLE_VALUE_TYPE(extensions::switches::kEnableAppWindowControls)}, #endif - {"disable-hyperlink-auditing", - IDS_FLAGS_HYPERLINK_AUDITING_NAME, - IDS_FLAGS_HYPERLINK_AUDITING_DESCRIPTION, - kOsAll, + {"disable-hyperlink-auditing", IDS_FLAGS_HYPERLINK_AUDITING_NAME, + IDS_FLAGS_HYPERLINK_AUDITING_DESCRIPTION, kOsAll, SINGLE_DISABLE_VALUE_TYPE(switches::kNoPings)}, #if defined(OS_ANDROID) - {"contextual-search", - IDS_FLAGS_CONTEXTUAL_SEARCH, - IDS_FLAGS_CONTEXTUAL_SEARCH_DESCRIPTION, - kOsAndroid, + {"contextual-search", IDS_FLAGS_CONTEXTUAL_SEARCH, + IDS_FLAGS_CONTEXTUAL_SEARCH_DESCRIPTION, kOsAndroid, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableContextualSearch, switches::kDisableContextualSearch)}, #endif {"show-autofill-type-predictions", IDS_FLAGS_SHOW_AUTOFILL_TYPE_PREDICTIONS_NAME, - IDS_FLAGS_SHOW_AUTOFILL_TYPE_PREDICTIONS_DESCRIPTION, - kOsAll, + IDS_FLAGS_SHOW_AUTOFILL_TYPE_PREDICTIONS_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(autofill::switches::kShowAutofillTypePredictions)}, {"disable-smooth-scrolling", // FLAGS:RECORD_UMA - IDS_FLAGS_SMOOTH_SCROLLING_NAME, - IDS_FLAGS_SMOOTH_SCROLLING_DESCRIPTION, + IDS_FLAGS_SMOOTH_SCROLLING_NAME, IDS_FLAGS_SMOOTH_SCROLLING_DESCRIPTION, // Mac has a separate implementation with its own setting to disable. kOsLinux | kOsCrOS | kOsWin | kOsAndroid, SINGLE_DISABLE_VALUE_TYPE(switches::kDisableSmoothScrolling)}, #if defined(USE_AURA) || defined(OS_LINUX) - {"overlay-scrollbars", - IDS_FLAGS_OVERLAY_SCROLLBARS_NAME, + {"overlay-scrollbars", IDS_FLAGS_OVERLAY_SCROLLBARS_NAME, IDS_FLAGS_OVERLAY_SCROLLBARS_DESCRIPTION, // Uses the system preference on Mac (a different implementation). // On Android, this is always enabled. @@ -717,55 +678,36 @@ ENABLE_DISABLE_VALUE_TYPE(switches::kEnableOverlayScrollbar, switches::kDisableOverlayScrollbar)}, #endif - {"enable-panels", - IDS_FLAGS_PANELS_NAME, - IDS_FLAGS_PANELS_DESCRIPTION, - kOsDesktop, - ENABLE_DISABLE_VALUE_TYPE(switches::kEnablePanels, - switches::kDisablePanels)}, + {"enable-panels", IDS_FLAGS_PANELS_NAME, IDS_FLAGS_PANELS_DESCRIPTION, + kOsDesktop, ENABLE_DISABLE_VALUE_TYPE(switches::kEnablePanels, + switches::kDisablePanels)}, {// See http://crbug.com/120416 for how to remove this flag. "save-page-as-mhtml", // FLAGS:RECORD_UMA IDS_FLAGS_SAVE_PAGE_AS_MHTML_NAME, - IDS_FLAGS_SAVE_PAGE_AS_MHTML_DESCRIPTION, - kOsMac | kOsWin | kOsLinux, + IDS_FLAGS_SAVE_PAGE_AS_MHTML_DESCRIPTION, kOsMac | kOsWin | kOsLinux, SINGLE_VALUE_TYPE(switches::kSavePageAsMHTML)}, - {"enable-quic", - IDS_FLAGS_QUIC_NAME, - IDS_FLAGS_QUIC_DESCRIPTION, - kOsAll, + {"enable-quic", IDS_FLAGS_QUIC_NAME, IDS_FLAGS_QUIC_DESCRIPTION, kOsAll, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableQuic, switches::kDisableQuic)}, - {"enable-alternative-services", - IDS_FLAGS_ALTSVC_NAME, - IDS_FLAGS_ALTSVC_DESCRIPTION, - kOsAll, + {"enable-alternative-services", IDS_FLAGS_ALTSVC_NAME, + IDS_FLAGS_ALTSVC_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kEnableAlternativeServices)}, - {"disable-media-source", - IDS_FLAGS_MEDIA_SOURCE_NAME, - IDS_FLAGS_MEDIA_SOURCE_DESCRIPTION, - kOsAll, + {"disable-media-source", IDS_FLAGS_MEDIA_SOURCE_NAME, + IDS_FLAGS_MEDIA_SOURCE_DESCRIPTION, kOsAll, SINGLE_DISABLE_VALUE_TYPE(switches::kDisableMediaSource)}, - {"disable-encrypted-media", - IDS_FLAGS_ENCRYPTED_MEDIA_NAME, - IDS_FLAGS_ENCRYPTED_MEDIA_DESCRIPTION, - kOsAll, + {"disable-encrypted-media", IDS_FLAGS_ENCRYPTED_MEDIA_NAME, + IDS_FLAGS_ENCRYPTED_MEDIA_DESCRIPTION, kOsAll, SINGLE_DISABLE_VALUE_TYPE(switches::kDisableEncryptedMedia)}, - {"enable-prefixed-encrypted-media", - IDS_FLAGS_PREFIXED_ENCRYPTED_MEDIA_NAME, - IDS_FLAGS_PREFIXED_ENCRYPTED_MEDIA_DESCRIPTION, - kOsAll, + {"enable-prefixed-encrypted-media", IDS_FLAGS_PREFIXED_ENCRYPTED_MEDIA_NAME, + IDS_FLAGS_PREFIXED_ENCRYPTED_MEDIA_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kEnablePrefixedEncryptedMedia)}, {"disable-javascript-harmony-shipping", IDS_FLAGS_JAVASCRIPT_HARMONY_SHIPPING_NAME, - IDS_FLAGS_JAVASCRIPT_HARMONY_SHIPPING_DESCRIPTION, - kOsAll, + IDS_FLAGS_JAVASCRIPT_HARMONY_SHIPPING_DESCRIPTION, kOsAll, SINGLE_DISABLE_VALUE_TYPE(switches::kDisableJavaScriptHarmonyShipping)}, - {"enable-javascript-harmony", - IDS_FLAGS_JAVASCRIPT_HARMONY_NAME, - IDS_FLAGS_JAVASCRIPT_HARMONY_DESCRIPTION, - kOsAll, + {"enable-javascript-harmony", IDS_FLAGS_JAVASCRIPT_HARMONY_NAME, + IDS_FLAGS_JAVASCRIPT_HARMONY_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kJavaScriptHarmony)}, - {"disable-software-rasterizer", - IDS_FLAGS_SOFTWARE_RASTERIZER_NAME, + {"disable-software-rasterizer", IDS_FLAGS_SOFTWARE_RASTERIZER_NAME, IDS_FLAGS_SOFTWARE_RASTERIZER_DESCRIPTION, #if defined(ENABLE_SWIFTSHADER) kOsAll, @@ -773,285 +715,228 @@ 0, #endif SINGLE_DISABLE_VALUE_TYPE(switches::kDisableSoftwareRasterizer)}, - {"enable-gpu-rasterization", - IDS_FLAGS_GPU_RASTERIZATION_NAME, - IDS_FLAGS_GPU_RASTERIZATION_DESCRIPTION, - kOsAll, + {"enable-gpu-rasterization", IDS_FLAGS_GPU_RASTERIZATION_NAME, + IDS_FLAGS_GPU_RASTERIZATION_DESCRIPTION, kOsAll, MULTI_VALUE_TYPE(kEnableGpuRasterizationChoices)}, {"gpu-rasterization-msaa-sample-count", IDS_FLAGS_GPU_RASTERIZATION_MSAA_SAMPLE_COUNT_NAME, - IDS_FLAGS_GPU_RASTERIZATION_MSAA_SAMPLE_COUNT_DESCRIPTION, - kOsAll, + IDS_FLAGS_GPU_RASTERIZATION_MSAA_SAMPLE_COUNT_DESCRIPTION, kOsAll, MULTI_VALUE_TYPE(kGpuRasterizationMSAASampleCountChoices)}, {"enable-experimental-web-platform-features", IDS_FLAGS_EXPERIMENTAL_WEB_PLATFORM_FEATURES_NAME, - IDS_FLAGS_EXPERIMENTAL_WEB_PLATFORM_FEATURES_DESCRIPTION, - kOsAll, + IDS_FLAGS_EXPERIMENTAL_WEB_PLATFORM_FEATURES_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kEnableExperimentalWebPlatformFeatures)}, - {"enable-web-bluetooth", - IDS_FLAGS_WEB_BLUETOOTH_NAME, + {"enable-web-bluetooth", IDS_FLAGS_WEB_BLUETOOTH_NAME, IDS_FLAGS_WEB_BLUETOOTH_DESCRIPTION, kOsCrOS | kOsMac | kOsAndroid | kOsLinux, SINGLE_VALUE_TYPE(switches::kEnableWebBluetooth)}, #if defined(ENABLE_EXTENSIONS) {"enable-ble-advertising-in-apps", IDS_FLAGS_BLE_ADVERTISING_IN_EXTENSIONS_NAME, - IDS_FLAGS_BLE_ADVERTISING_IN_EXTENSIONS_DESCRIPTION, - kOsCrOS, + IDS_FLAGS_BLE_ADVERTISING_IN_EXTENSIONS_DESCRIPTION, kOsCrOS, SINGLE_VALUE_TYPE(extensions::switches::kEnableBLEAdvertising)}, #endif - {"enable-devtools-experiments", - IDS_FLAGS_DEVTOOLS_EXPERIMENTS_NAME, - IDS_FLAGS_DEVTOOLS_EXPERIMENTS_DESCRIPTION, - kOsDesktop, + {"enable-devtools-experiments", IDS_FLAGS_DEVTOOLS_EXPERIMENTS_NAME, + IDS_FLAGS_DEVTOOLS_EXPERIMENTS_DESCRIPTION, kOsDesktop, SINGLE_VALUE_TYPE(switches::kEnableDevToolsExperiments)}, {"silent-debugger-extension-api", IDS_FLAGS_SILENT_DEBUGGER_EXTENSION_API_NAME, - IDS_FLAGS_SILENT_DEBUGGER_EXTENSION_API_DESCRIPTION, - kOsDesktop, + IDS_FLAGS_SILENT_DEBUGGER_EXTENSION_API_DESCRIPTION, kOsDesktop, SINGLE_VALUE_TYPE(switches::kSilentDebuggerExtensionAPI)}, #if defined(ENABLE_SPELLCHECK) && defined(OS_ANDROID) - {"enable-android-spellchecker", - IDS_OPTIONS_ENABLE_SPELLCHECK, - IDS_OPTIONS_ENABLE_ANDROID_SPELLCHECKER_DESCRIPTION, - kOsAndroid, + {"enable-android-spellchecker", IDS_OPTIONS_ENABLE_SPELLCHECK, + IDS_OPTIONS_ENABLE_ANDROID_SPELLCHECKER_DESCRIPTION, kOsAndroid, SINGLE_VALUE_TYPE(switches::kEnableAndroidSpellChecker)}, #endif - {"enable-scroll-prediction", - IDS_FLAGS_SCROLL_PREDICTION_NAME, - IDS_FLAGS_SCROLL_PREDICTION_DESCRIPTION, - kOsDesktop, + {"enable-scroll-prediction", IDS_FLAGS_SCROLL_PREDICTION_NAME, + IDS_FLAGS_SCROLL_PREDICTION_DESCRIPTION, kOsDesktop, SINGLE_VALUE_TYPE(switches::kEnableScrollPrediction)}, #if defined(ENABLE_TOPCHROME_MD) - {"top-chrome-md", - IDS_FLAGS_TOP_CHROME_MD, - IDS_FLAGS_TOP_CHROME_MD_DESCRIPTION, - kOsWin | kOsLinux | kOsCrOS | kOsMac, + {"top-chrome-md", IDS_FLAGS_TOP_CHROME_MD, + IDS_FLAGS_TOP_CHROME_MD_DESCRIPTION, kOsWin | kOsLinux | kOsCrOS | kOsMac, MULTI_VALUE_TYPE(kTopChromeMaterialDesignChoices)}, #endif - {"touch-events", - IDS_FLAGS_TOUCH_EVENTS_NAME, - IDS_FLAGS_TOUCH_EVENTS_DESCRIPTION, - kOsDesktop, + {"touch-events", IDS_FLAGS_TOUCH_EVENTS_NAME, + IDS_FLAGS_TOUCH_EVENTS_DESCRIPTION, kOsDesktop, MULTI_VALUE_TYPE(kTouchEventsChoices)}, - {"disable-touch-adjustment", - IDS_FLAGS_TOUCH_ADJUSTMENT_NAME, + {"disable-touch-adjustment", IDS_FLAGS_TOUCH_ADJUSTMENT_NAME, IDS_FLAGS_TOUCH_ADJUSTMENT_DESCRIPTION, kOsWin | kOsLinux | kOsCrOS | kOsAndroid, SINGLE_DISABLE_VALUE_TYPE(switches::kDisableTouchAdjustment)}, #if defined(OS_CHROMEOS) - {"network-portal-notification", - IDS_FLAGS_NETWORK_PORTAL_NOTIFICATION_NAME, - IDS_FLAGS_NETWORK_PORTAL_NOTIFICATION_DESCRIPTION, - kOsCrOS, + {"network-portal-notification", IDS_FLAGS_NETWORK_PORTAL_NOTIFICATION_NAME, + IDS_FLAGS_NETWORK_PORTAL_NOTIFICATION_DESCRIPTION, kOsCrOS, ENABLE_DISABLE_VALUE_TYPE( chromeos::switches::kEnableNetworkPortalNotification, chromeos::switches::kDisableNetworkPortalNotification)}, #endif - {"enable-download-resumption", - IDS_FLAGS_DOWNLOAD_RESUMPTION_NAME, - IDS_FLAGS_DOWNLOAD_RESUMPTION_DESCRIPTION, - kOsAll, + {"enable-download-resumption", IDS_FLAGS_DOWNLOAD_RESUMPTION_NAME, + IDS_FLAGS_DOWNLOAD_RESUMPTION_DESCRIPTION, kOsAll, FEATURE_VALUE_TYPE(features::kDownloadResumption)}, #if defined(OS_CHROMEOS) - {"download-notification", - IDS_FLAGS_DOWNLOAD_NOTIFICATION_NAME, - IDS_FLAGS_DOWNLOAD_NOTIFICATION_DESCRIPTION, - kOsCrOS, + {"download-notification", IDS_FLAGS_DOWNLOAD_NOTIFICATION_NAME, + IDS_FLAGS_DOWNLOAD_NOTIFICATION_DESCRIPTION, kOsCrOS, SINGLE_DISABLE_VALUE_TYPE(switches::kDisableDownloadNotification)}, #endif #if defined(ENABLE_PLUGINS) - {"allow-nacl-socket-api", - IDS_FLAGS_ALLOW_NACL_SOCKET_API_NAME, - IDS_FLAGS_ALLOW_NACL_SOCKET_API_DESCRIPTION, - kOsDesktop, + {"allow-nacl-socket-api", IDS_FLAGS_ALLOW_NACL_SOCKET_API_NAME, + IDS_FLAGS_ALLOW_NACL_SOCKET_API_DESCRIPTION, kOsDesktop, SINGLE_VALUE_TYPE_AND_VALUE(switches::kAllowNaClSocketAPI, "*")}, #endif #if defined(OS_CHROMEOS) {"allow-touchpad-three-finger-click", IDS_FLAGS_ALLOW_TOUCHPAD_THREE_FINGER_CLICK_NAME, - IDS_FLAGS_ALLOW_TOUCHPAD_THREE_FINGER_CLICK_DESCRIPTION, - kOsCrOS, + IDS_FLAGS_ALLOW_TOUCHPAD_THREE_FINGER_CLICK_DESCRIPTION, kOsCrOS, SINGLE_VALUE_TYPE(chromeos::switches::kEnableTouchpadThreeFingerClick)}, - {"ash-enable-unified-desktop", - IDS_FLAGS_ASH_ENABLE_UNIFIED_DESKTOP_NAME, - IDS_FLAGS_ASH_ENABLE_UNIFIED_DESKTOP_DESCRIPTION, - kOsCrOS, + {"ash-enable-unified-desktop", IDS_FLAGS_ASH_ENABLE_UNIFIED_DESKTOP_NAME, + IDS_FLAGS_ASH_ENABLE_UNIFIED_DESKTOP_DESCRIPTION, kOsCrOS, SINGLE_VALUE_TYPE(ash::switches::kAshEnableUnifiedDesktop)}, {"enable-easy-unlock-proximity-detection", IDS_FLAGS_EASY_UNLOCK_PROXIMITY_DETECTION_NAME, - IDS_FLAGS_EASY_UNLOCK_PROXIMITY_DETECTION_DESCRIPTION, - kOsCrOS, + IDS_FLAGS_EASY_UNLOCK_PROXIMITY_DETECTION_DESCRIPTION, kOsCrOS, SINGLE_VALUE_TYPE(proximity_auth::switches::kEnableProximityDetection)}, {"enable-easy-unlock-bluetooth-low-energy-detection", IDS_FLAGS_EASY_UNLOCK_BLUETOOTH_LOW_ENERGY_DISCOVERY_NAME, - IDS_FLAGS_EASY_UNLOCK_BLUETOOTH_LOW_ENERGY_DISCOVERY_DESCRIPTION, - kOsCrOS, + IDS_FLAGS_EASY_UNLOCK_BLUETOOTH_LOW_ENERGY_DISCOVERY_DESCRIPTION, kOsCrOS, SINGLE_VALUE_TYPE( proximity_auth::switches::kEnableBluetoothLowEnergyDiscovery)}, #endif #if defined(USE_ASH) {"disable-minimize-on-second-launcher-item-click", IDS_FLAGS_MINIMIZE_ON_SECOND_LAUNCHER_ITEM_CLICK_NAME, - IDS_FLAGS_MINIMIZE_ON_SECOND_LAUNCHER_ITEM_CLICK_DESCRIPTION, - kOsAll, + IDS_FLAGS_MINIMIZE_ON_SECOND_LAUNCHER_ITEM_CLICK_DESCRIPTION, kOsAll, SINGLE_DISABLE_VALUE_TYPE( switches::kDisableMinimizeOnSecondLauncherItemClick)}, - {"show-touch-hud", - IDS_FLAGS_SHOW_TOUCH_HUD_NAME, - IDS_FLAGS_SHOW_TOUCH_HUD_DESCRIPTION, - kOsAll, + {"show-touch-hud", IDS_FLAGS_SHOW_TOUCH_HUD_NAME, + IDS_FLAGS_SHOW_TOUCH_HUD_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(ash::switches::kAshTouchHud)}, { - "enable-pinch", - IDS_FLAGS_PINCH_SCALE_NAME, - IDS_FLAGS_PINCH_SCALE_DESCRIPTION, - kOsLinux | kOsWin | kOsCrOS, - ENABLE_DISABLE_VALUE_TYPE(switches::kEnablePinch, switches::kDisablePinch), + "enable-pinch", IDS_FLAGS_PINCH_SCALE_NAME, + IDS_FLAGS_PINCH_SCALE_DESCRIPTION, kOsLinux | kOsWin | kOsCrOS, + ENABLE_DISABLE_VALUE_TYPE(switches::kEnablePinch, + switches::kDisablePinch), }, #endif // defined(USE_ASH) #if defined(OS_CHROMEOS) { - "disable-boot-animation", - IDS_FLAGS_BOOT_ANIMATION, - IDS_FLAGS_BOOT_ANIMATION_DESCRIPTION, - kOsCrOSOwnerOnly, - SINGLE_DISABLE_VALUE_TYPE(chromeos::switches::kDisableBootAnimation), + "disable-boot-animation", IDS_FLAGS_BOOT_ANIMATION, + IDS_FLAGS_BOOT_ANIMATION_DESCRIPTION, kOsCrOSOwnerOnly, + SINGLE_DISABLE_VALUE_TYPE(chromeos::switches::kDisableBootAnimation), }, {"enable-video-player-chromecast-support", IDS_FLAGS_VIDEO_PLAYER_CHROMECAST_SUPPORT_NAME, - IDS_FLAGS_VIDEO_PLAYER_CHROMECAST_SUPPORT_DESCRIPTION, - kOsCrOS, + IDS_FLAGS_VIDEO_PLAYER_CHROMECAST_SUPPORT_DESCRIPTION, kOsCrOS, SINGLE_VALUE_TYPE( chromeos::switches::kEnableVideoPlayerChromecastSupport)}, { - "disable-office-editing-component-app", - IDS_FLAGS_OFFICE_EDITING_COMPONENT_APP_NAME, - IDS_FLAGS_OFFICE_EDITING_COMPONENT_APP_DESCRIPTION, - kOsCrOS, - SINGLE_DISABLE_VALUE_TYPE( - chromeos::switches::kDisableOfficeEditingComponentApp), + "disable-office-editing-component-app", + IDS_FLAGS_OFFICE_EDITING_COMPONENT_APP_NAME, + IDS_FLAGS_OFFICE_EDITING_COMPONENT_APP_DESCRIPTION, kOsCrOS, + SINGLE_DISABLE_VALUE_TYPE( + chromeos::switches::kDisableOfficeEditingComponentApp), }, { - "disable-display-color-calibration", - IDS_FLAGS_DISPLAY_COLOR_CALIBRATION_NAME, - IDS_FLAGS_DISPLAY_COLOR_CALIBRATION_DESCRIPTION, - kOsCrOS, - SINGLE_DISABLE_VALUE_TYPE(ui::switches::kDisableDisplayColorCalibration), + "disable-display-color-calibration", + IDS_FLAGS_DISPLAY_COLOR_CALIBRATION_NAME, + IDS_FLAGS_DISPLAY_COLOR_CALIBRATION_DESCRIPTION, kOsCrOS, + SINGLE_DISABLE_VALUE_TYPE( + ui::switches::kDisableDisplayColorCalibration), }, { - "ash-disable-screen-orientation-lock", - IDS_FLAGS_ASH_SCREEN_ORIENTATION_LOCK_NAME, - IDS_FLAGS_ASH_SCREEN_ORIENTATION_LOCK_DESCRIPTION, - kOsCrOS, - SINGLE_DISABLE_VALUE_TYPE(ash::switches::kAshDisableScreenOrientationLock), + "ash-disable-screen-orientation-lock", + IDS_FLAGS_ASH_SCREEN_ORIENTATION_LOCK_NAME, + IDS_FLAGS_ASH_SCREEN_ORIENTATION_LOCK_DESCRIPTION, kOsCrOS, + SINGLE_DISABLE_VALUE_TYPE( + ash::switches::kAshDisableScreenOrientationLock), }, #endif // defined(OS_CHROMEOS) { - "disable-accelerated-video-decode", - IDS_FLAGS_ACCELERATED_VIDEO_DECODE_NAME, - IDS_FLAGS_ACCELERATED_VIDEO_DECODE_DESCRIPTION, - kOsMac | kOsWin | kOsCrOS, - SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode), + "disable-accelerated-video-decode", + IDS_FLAGS_ACCELERATED_VIDEO_DECODE_NAME, + IDS_FLAGS_ACCELERATED_VIDEO_DECODE_DESCRIPTION, + kOsMac | kOsWin | kOsCrOS, + SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode), }, #if defined(USE_ASH) { - "ash-debug-shortcuts", - IDS_FLAGS_DEBUG_SHORTCUTS_NAME, - IDS_FLAGS_DEBUG_SHORTCUTS_DESCRIPTION, - kOsAll, - SINGLE_VALUE_TYPE(ash::switches::kAshDebugShortcuts), + "ash-debug-shortcuts", IDS_FLAGS_DEBUG_SHORTCUTS_NAME, + IDS_FLAGS_DEBUG_SHORTCUTS_DESCRIPTION, kOsAll, + SINGLE_VALUE_TYPE(ash::switches::kAshDebugShortcuts), }, { - "ash-disable-maximize-mode-window-backdrop", - IDS_FLAGS_ASH_MAXIMIZE_MODE_WINDOW_BACKDROP_NAME, - IDS_FLAGS_ASH_MAXIMIZE_MODE_WINDOW_BACKDROP_DESCRIPTION, - kOsCrOS, - SINGLE_DISABLE_VALUE_TYPE( - ash::switches::kAshDisableMaximizeModeWindowBackdrop), + "ash-disable-maximize-mode-window-backdrop", + IDS_FLAGS_ASH_MAXIMIZE_MODE_WINDOW_BACKDROP_NAME, + IDS_FLAGS_ASH_MAXIMIZE_MODE_WINDOW_BACKDROP_DESCRIPTION, kOsCrOS, + SINGLE_DISABLE_VALUE_TYPE( + ash::switches::kAshDisableMaximizeModeWindowBackdrop), }, { - "ash-enable-touch-view-testing", - IDS_FLAGS_ASH_ENABLE_TOUCH_VIEW_TESTING_NAME, - IDS_FLAGS_ASH_ENABLE_TOUCH_VIEW_TESTING_DESCRIPTION, - kOsCrOS, - SINGLE_VALUE_TYPE(ash::switches::kAshEnableTouchViewTesting), + "ash-enable-touch-view-testing", + IDS_FLAGS_ASH_ENABLE_TOUCH_VIEW_TESTING_NAME, + IDS_FLAGS_ASH_ENABLE_TOUCH_VIEW_TESTING_DESCRIPTION, kOsCrOS, + SINGLE_VALUE_TYPE(ash::switches::kAshEnableTouchViewTesting), }, { - "disable-touch-feedback", - IDS_FLAGS_TOUCH_FEEDBACK_NAME, - IDS_FLAGS_TOUCH_FEEDBACK_DESCRIPTION, - kOsCrOS, - SINGLE_DISABLE_VALUE_TYPE(switches::kDisableTouchFeedback), + "disable-touch-feedback", IDS_FLAGS_TOUCH_FEEDBACK_NAME, + IDS_FLAGS_TOUCH_FEEDBACK_DESCRIPTION, kOsCrOS, + SINGLE_DISABLE_VALUE_TYPE(switches::kDisableTouchFeedback), }, { - "ash-enable-mirrored-screen", - IDS_FLAGS_ASH_ENABLE_MIRRORED_SCREEN_NAME, - IDS_FLAGS_ASH_ENABLE_MIRRORED_SCREEN_DESCRIPTION, - kOsCrOS, - SINGLE_VALUE_TYPE(ash::switches::kAshEnableMirroredScreen), + "ash-enable-mirrored-screen", IDS_FLAGS_ASH_ENABLE_MIRRORED_SCREEN_NAME, + IDS_FLAGS_ASH_ENABLE_MIRRORED_SCREEN_DESCRIPTION, kOsCrOS, + SINGLE_VALUE_TYPE(ash::switches::kAshEnableMirroredScreen), }, { - "ash-stable-overview-order", - IDS_FLAGS_ASH_STABLE_OVERVIEW_ORDER_NAME, - IDS_FLAGS_ASH_STABLE_OVERVIEW_ORDER_DESCRIPTION, - kOsCrOS, - ENABLE_DISABLE_VALUE_TYPE(ash::switches::kAshEnableStableOverviewOrder, - ash::switches::kAshDisableStableOverviewOrder), + "ash-stable-overview-order", IDS_FLAGS_ASH_STABLE_OVERVIEW_ORDER_NAME, + IDS_FLAGS_ASH_STABLE_OVERVIEW_ORDER_DESCRIPTION, kOsCrOS, + ENABLE_DISABLE_VALUE_TYPE( + ash::switches::kAshEnableStableOverviewOrder, + ash::switches::kAshDisableStableOverviewOrder), }, #endif // defined(USE_ASH) #if defined(OS_CHROMEOS) {"material-design-ink-drop-animation-speed", IDS_FLAGS_MATERIAL_DESIGN_INK_DROP_ANIMATION_SPEED_NAME, - IDS_FLAGS_MATERIAL_DESIGN_INK_DROP_ANIMATION_SPEED_DESCRIPTION, - kOsCrOS, + IDS_FLAGS_MATERIAL_DESIGN_INK_DROP_ANIMATION_SPEED_DESCRIPTION, kOsCrOS, MULTI_VALUE_TYPE(kAshMaterialDesignInkDropAnimationSpeed)}, - {"disable-cloud-import", - IDS_FLAGS_CLOUD_IMPORT, - IDS_FLAGS_CLOUD_IMPORT_DESCRIPTION, - kOsCrOS, + {"disable-cloud-import", IDS_FLAGS_CLOUD_IMPORT, + IDS_FLAGS_CLOUD_IMPORT_DESCRIPTION, kOsCrOS, SINGLE_DISABLE_VALUE_TYPE(chromeos::switches::kDisableCloudImport)}, - {"enable-request-tablet-site", - IDS_FLAGS_REQUEST_TABLET_SITE_NAME, - IDS_FLAGS_REQUEST_TABLET_SITE_DESCRIPTION, - kOsCrOS, + {"enable-request-tablet-site", IDS_FLAGS_REQUEST_TABLET_SITE_NAME, + IDS_FLAGS_REQUEST_TABLET_SITE_DESCRIPTION, kOsCrOS, SINGLE_VALUE_TYPE(chromeos::switches::kEnableRequestTabletSite)}, #endif - {"debug-packed-apps", - IDS_FLAGS_DEBUG_PACKED_APP_NAME, - IDS_FLAGS_DEBUG_PACKED_APP_DESCRIPTION, - kOsDesktop, + {"debug-packed-apps", IDS_FLAGS_DEBUG_PACKED_APP_NAME, + IDS_FLAGS_DEBUG_PACKED_APP_DESCRIPTION, kOsDesktop, SINGLE_VALUE_TYPE(switches::kDebugPackedApps)}, - {"enable-password-generation", - IDS_FLAGS_PASSWORD_GENERATION_NAME, + {"enable-password-generation", IDS_FLAGS_PASSWORD_GENERATION_NAME, IDS_FLAGS_PASSWORD_GENERATION_DESCRIPTION, kOsWin | kOsLinux | kOsCrOS | kOsMac | kOsAndroid, ENABLE_DISABLE_VALUE_TYPE(autofill::switches::kEnablePasswordGeneration, autofill::switches::kDisablePasswordGeneration)}, {"enable-automatic-password-saving", IDS_FLAGS_AUTOMATIC_PASSWORD_SAVING_NAME, - IDS_FLAGS_AUTOMATIC_PASSWORD_SAVING_DESCRIPTION, - kOsDesktop, + IDS_FLAGS_AUTOMATIC_PASSWORD_SAVING_DESCRIPTION, kOsDesktop, FEATURE_VALUE_TYPE( password_manager::features::kEnableAutomaticPasswordSaving)}, {"password-manager-reauthentication", IDS_FLAGS_PASSWORD_MANAGER_REAUTHENTICATION_NAME, - IDS_FLAGS_PASSWORD_MANAGER_REAUTHENTICATION_DESCRIPTION, - kOsMac | kOsWin, + IDS_FLAGS_PASSWORD_MANAGER_REAUTHENTICATION_DESCRIPTION, kOsMac | kOsWin, SINGLE_DISABLE_VALUE_TYPE( switches::kDisablePasswordManagerReauthentication)}, - {"enable-password-change-support", - IDS_FLAGS_PASSWORD_CHANGE_SUPPORT_NAME, - IDS_FLAGS_PASSWORD_CHANGE_SUPPORT_DESCRIPTION, - kOsAndroid, + {"enable-password-change-support", IDS_FLAGS_PASSWORD_CHANGE_SUPPORT_NAME, + IDS_FLAGS_PASSWORD_CHANGE_SUPPORT_DESCRIPTION, kOsAndroid, FEATURE_VALUE_TYPE( password_manager::features::kEnablePasswordChangeSupport)}, - {"enable-password-force-saving", - IDS_FLAGS_PASSWORD_FORCE_SAVING_NAME, - IDS_FLAGS_PASSWORD_FORCE_SAVING_DESCRIPTION, - kOsAll, + {"enable-password-force-saving", IDS_FLAGS_PASSWORD_FORCE_SAVING_NAME, + IDS_FLAGS_PASSWORD_FORCE_SAVING_DESCRIPTION, kOsAll, FEATURE_VALUE_TYPE( password_manager::features::kEnablePasswordForceSaving)}, + {"enable-manual-password-generation", + IDS_FLAGS_MANUAL_PASSWORD_GENERATION_NAME, + IDS_FLAGS_MANUAL_PASSWORD_GENERATION_DESCRIPTION, kOsAll, + FEATURE_VALUE_TYPE( + password_manager::features::kEnableManualPasswordGeneration)}, {"enable-affiliation-based-matching", IDS_FLAGS_AFFILIATION_BASED_MATCHING_NAME, IDS_FLAGS_AFFILIATION_BASED_MATCHING_DESCRIPTION, @@ -1059,10 +944,8 @@ ENABLE_DISABLE_VALUE_TYPE( password_manager::switches::kEnableAffiliationBasedMatching, password_manager::switches::kDisableAffiliationBasedMatching)}, - {"wallet-service-use-sandbox", - IDS_FLAGS_WALLET_SERVICE_USE_SANDBOX_NAME, - IDS_FLAGS_WALLET_SERVICE_USE_SANDBOX_DESCRIPTION, - kOsAndroid | kOsDesktop, + {"wallet-service-use-sandbox", IDS_FLAGS_WALLET_SERVICE_USE_SANDBOX_NAME, + IDS_FLAGS_WALLET_SERVICE_USE_SANDBOX_DESCRIPTION, kOsAndroid | kOsDesktop, ENABLE_DISABLE_VALUE_TYPE_AND_VALUE( autofill::switches::kWalletServiceUseSandbox, "1", @@ -1071,39 +954,29 @@ #if defined(USE_AURA) {"overscroll-history-navigation", IDS_FLAGS_OVERSCROLL_HISTORY_NAVIGATION_NAME, - IDS_FLAGS_OVERSCROLL_HISTORY_NAVIGATION_DESCRIPTION, - kOsAll, + IDS_FLAGS_OVERSCROLL_HISTORY_NAVIGATION_DESCRIPTION, kOsAll, MULTI_VALUE_TYPE(kOverscrollHistoryNavigationChoices)}, #endif - {"scroll-end-effect", - IDS_FLAGS_SCROLL_END_EFFECT_NAME, - IDS_FLAGS_SCROLL_END_EFFECT_DESCRIPTION, - kOsCrOS, + {"scroll-end-effect", IDS_FLAGS_SCROLL_END_EFFECT_NAME, + IDS_FLAGS_SCROLL_END_EFFECT_DESCRIPTION, kOsCrOS, ENABLE_DISABLE_VALUE_TYPE_AND_VALUE(switches::kScrollEndEffect, "1", switches::kScrollEndEffect, "0")}, - {"enable-icon-ntp", - IDS_FLAGS_ICON_NTP_NAME, - IDS_FLAGS_ICON_NTP_DESCRIPTION, + {"enable-icon-ntp", IDS_FLAGS_ICON_NTP_NAME, IDS_FLAGS_ICON_NTP_DESCRIPTION, kOsAndroid | kOsMac | kOsWin | kOsLinux | kOsCrOS, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableIconNtp, switches::kDisableIconNtp)}, - {"enable-touch-drag-drop", - IDS_FLAGS_TOUCH_DRAG_DROP_NAME, - IDS_FLAGS_TOUCH_DRAG_DROP_DESCRIPTION, - kOsWin | kOsCrOS, + {"enable-touch-drag-drop", IDS_FLAGS_TOUCH_DRAG_DROP_NAME, + IDS_FLAGS_TOUCH_DRAG_DROP_DESCRIPTION, kOsWin | kOsCrOS, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableTouchDragDrop, switches::kDisableTouchDragDrop)}, - {"touch-selection-strategy", - IDS_FLAGS_TOUCH_SELECTION_STRATEGY_NAME, + {"touch-selection-strategy", IDS_FLAGS_TOUCH_SELECTION_STRATEGY_NAME, IDS_FLAGS_TOUCH_SELECTION_STRATEGY_DESCRIPTION, kOsAndroid, // TODO(mfomitchev): Add CrOS/Win/Linux support soon. MULTI_VALUE_TYPE(kTouchTextSelectionStrategyChoices)}, - {"enable-navigation-tracing", - IDS_FLAGS_ENABLE_NAVIGATION_TRACING, - IDS_FLAGS_ENABLE_NAVIGATION_TRACING_DESCRIPTION, - kOsAll, + {"enable-navigation-tracing", IDS_FLAGS_ENABLE_NAVIGATION_TRACING, + IDS_FLAGS_ENABLE_NAVIGATION_TRACING_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kEnableNavigationTracing)}, #if defined(OS_ANDROID) {"enable-non-validating-reload-on-refresh-content", @@ -1112,22 +985,18 @@ kOsAndroid, SINGLE_VALUE_TYPE(switches::kEnableNonValidatingReloadOnRefreshContent)}, #endif - {"trace-upload-url", - IDS_FLAGS_TRACE_UPLOAD_URL, - IDS_FLAGS_TRACE_UPLOAD_URL_DESCRIPTION, - kOsAll, + {"trace-upload-url", IDS_FLAGS_TRACE_UPLOAD_URL, + IDS_FLAGS_TRACE_UPLOAD_URL_DESCRIPTION, kOsAll, MULTI_VALUE_TYPE(kTraceUploadURL)}, #if !defined(OS_IOS) {"enable-stale-while-revalidate", IDS_FLAGS_ENABLE_STALE_WHILE_REVALIDATE_NAME, - IDS_FLAGS_ENABLE_STALE_WHILE_REVALIDATE_DESCRIPTION, - kOsAll, + IDS_FLAGS_ENABLE_STALE_WHILE_REVALIDATE_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kEnableStaleWhileRevalidate)}, #endif {"enable-suggestions-with-substring-match", IDS_FLAGS_SUGGESTIONS_WITH_SUB_STRING_MATCH_NAME, - IDS_FLAGS_SUGGESTIONS_WITH_SUB_STRING_MATCH_DESCRIPTION, - kOsAll, + IDS_FLAGS_SUGGESTIONS_WITH_SUB_STRING_MATCH_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE( autofill::switches::kEnableSuggestionsWithSubstringMatch)}, {"enable-supervised-user-managed-bookmarks-folder", @@ -1136,181 +1005,128 @@ kOsAndroid | kOsMac | kOsWin | kOsLinux | kOsCrOS, SINGLE_VALUE_TYPE(switches::kEnableSupervisedUserManagedBookmarksFolder)}, #if defined(ENABLE_APP_LIST) - {"enable-sync-app-list", - IDS_FLAGS_SYNC_APP_LIST_NAME, - IDS_FLAGS_SYNC_APP_LIST_DESCRIPTION, - kOsDesktop, + {"enable-sync-app-list", IDS_FLAGS_SYNC_APP_LIST_NAME, + IDS_FLAGS_SYNC_APP_LIST_DESCRIPTION, kOsDesktop, ENABLE_DISABLE_VALUE_TYPE(app_list::switches::kEnableSyncAppList, app_list::switches::kDisableSyncAppList)}, #endif #if defined(OS_MACOSX) - {"enable-avfoundation", - IDS_FLAGS_AVFOUNDATION_NAME, - IDS_FLAGS_AVFOUNDATION_DESCRIPTION, - kOsMac, + {"enable-avfoundation", IDS_FLAGS_AVFOUNDATION_NAME, + IDS_FLAGS_AVFOUNDATION_DESCRIPTION, kOsMac, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableAVFoundation, switches::kForceQTKit)}, #endif - {"lcd-text-aa", - IDS_FLAGS_LCD_TEXT_NAME, - IDS_FLAGS_LCD_TEXT_DESCRIPTION, - kOsDesktop, - ENABLE_DISABLE_VALUE_TYPE(switches::kEnableLCDText, - switches::kDisableLCDText)}, + {"lcd-text-aa", IDS_FLAGS_LCD_TEXT_NAME, IDS_FLAGS_LCD_TEXT_DESCRIPTION, + kOsDesktop, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableLCDText, + switches::kDisableLCDText)}, {"enable-offer-store-unmasked-wallet-cards", IDS_FLAGS_OFFER_STORE_UNMASKED_WALLET_CARDS, - IDS_FLAGS_OFFER_STORE_UNMASKED_WALLET_CARDS_DESCRIPTION, - kOsAll, + IDS_FLAGS_OFFER_STORE_UNMASKED_WALLET_CARDS_DESCRIPTION, kOsAll, ENABLE_DISABLE_VALUE_TYPE( autofill::switches::kEnableOfferStoreUnmaskedWalletCards, autofill::switches::kDisableOfferStoreUnmaskedWalletCards)}, - {"enable-offline-auto-reload", - IDS_FLAGS_OFFLINE_AUTO_RELOAD_NAME, - IDS_FLAGS_OFFLINE_AUTO_RELOAD_DESCRIPTION, - kOsAll, + {"enable-offline-auto-reload", IDS_FLAGS_OFFLINE_AUTO_RELOAD_NAME, + IDS_FLAGS_OFFLINE_AUTO_RELOAD_DESCRIPTION, kOsAll, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableOfflineAutoReload, switches::kDisableOfflineAutoReload)}, {"enable-offline-auto-reload-visible-only", IDS_FLAGS_OFFLINE_AUTO_RELOAD_VISIBLE_ONLY_NAME, - IDS_FLAGS_OFFLINE_AUTO_RELOAD_VISIBLE_ONLY_DESCRIPTION, - kOsAll, + IDS_FLAGS_OFFLINE_AUTO_RELOAD_VISIBLE_ONLY_DESCRIPTION, kOsAll, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableOfflineAutoReloadVisibleOnly, switches::kDisableOfflineAutoReloadVisibleOnly)}, - {"show-saved-copy", - IDS_FLAGS_SHOW_SAVED_COPY_NAME, - IDS_FLAGS_SHOW_SAVED_COPY_DESCRIPTION, - kOsAll, + {"show-saved-copy", IDS_FLAGS_SHOW_SAVED_COPY_NAME, + IDS_FLAGS_SHOW_SAVED_COPY_DESCRIPTION, kOsAll, MULTI_VALUE_TYPE(kShowSavedCopyChoices)}, - {"default-tile-width", - IDS_FLAGS_DEFAULT_TILE_WIDTH_NAME, - IDS_FLAGS_DEFAULT_TILE_WIDTH_DESCRIPTION, - kOsAll, + {"default-tile-width", IDS_FLAGS_DEFAULT_TILE_WIDTH_NAME, + IDS_FLAGS_DEFAULT_TILE_WIDTH_DESCRIPTION, kOsAll, MULTI_VALUE_TYPE(kDefaultTileWidthChoices)}, - {"default-tile-height", - IDS_FLAGS_DEFAULT_TILE_HEIGHT_NAME, - IDS_FLAGS_DEFAULT_TILE_HEIGHT_DESCRIPTION, - kOsAll, + {"default-tile-height", IDS_FLAGS_DEFAULT_TILE_HEIGHT_NAME, + IDS_FLAGS_DEFAULT_TILE_HEIGHT_DESCRIPTION, kOsAll, MULTI_VALUE_TYPE(kDefaultTileHeightChoices)}, {"disable-gesture-requirement-for-media-playback", IDS_FLAGS_GESTURE_REQUIREMENT_FOR_MEDIA_PLAYBACK_NAME, - IDS_FLAGS_GESTURE_REQUIREMENT_FOR_MEDIA_PLAYBACK_DESCRIPTION, - kOsAll, + IDS_FLAGS_GESTURE_REQUIREMENT_FOR_MEDIA_PLAYBACK_DESCRIPTION, kOsAll, SINGLE_DISABLE_VALUE_TYPE( switches::kDisableGestureRequirementForMediaPlayback)}, #if defined(OS_CHROMEOS) - {"enable-virtual-keyboard", - IDS_FLAGS_VIRTUAL_KEYBOARD_NAME, - IDS_FLAGS_VIRTUAL_KEYBOARD_DESCRIPTION, - kOsCrOS, + {"enable-virtual-keyboard", IDS_FLAGS_VIRTUAL_KEYBOARD_NAME, + IDS_FLAGS_VIRTUAL_KEYBOARD_DESCRIPTION, kOsCrOS, SINGLE_VALUE_TYPE(keyboard::switches::kEnableVirtualKeyboard)}, - {"virtual-keyboard-overscroll", - IDS_FLAGS_VIRTUAL_KEYBOARD_OVERSCROLL_NAME, - IDS_FLAGS_VIRTUAL_KEYBOARD_OVERSCROLL_DESCRIPTION, - kOsCrOS, + {"virtual-keyboard-overscroll", IDS_FLAGS_VIRTUAL_KEYBOARD_OVERSCROLL_NAME, + IDS_FLAGS_VIRTUAL_KEYBOARD_OVERSCROLL_DESCRIPTION, kOsCrOS, SINGLE_DISABLE_VALUE_TYPE( keyboard::switches::kDisableVirtualKeyboardOverscroll)}, - {"input-view", - IDS_FLAGS_INPUT_VIEW_NAME, - IDS_FLAGS_INPUT_VIEW_DESCRIPTION, - kOsCrOS, - SINGLE_DISABLE_VALUE_TYPE(keyboard::switches::kDisableInputView)}, - {"disable-new-korean-ime", - IDS_FLAGS_NEW_KOREAN_IME_NAME, - IDS_FLAGS_NEW_KOREAN_IME_DESCRIPTION, - kOsCrOS, + {"input-view", IDS_FLAGS_INPUT_VIEW_NAME, IDS_FLAGS_INPUT_VIEW_DESCRIPTION, + kOsCrOS, SINGLE_DISABLE_VALUE_TYPE(keyboard::switches::kDisableInputView)}, + {"disable-new-korean-ime", IDS_FLAGS_NEW_KOREAN_IME_NAME, + IDS_FLAGS_NEW_KOREAN_IME_DESCRIPTION, kOsCrOS, SINGLE_DISABLE_VALUE_TYPE(chromeos::switches::kDisableNewKoreanIme)}, {"enable-physical-keyboard-autocorrect", IDS_FLAGS_PHYSICAL_KEYBOARD_AUTOCORRECT_NAME, - IDS_FLAGS_PHYSICAL_KEYBOARD_AUTOCORRECT_DESCRIPTION, - kOsCrOS, + IDS_FLAGS_PHYSICAL_KEYBOARD_AUTOCORRECT_DESCRIPTION, kOsCrOS, ENABLE_DISABLE_VALUE_TYPE( chromeos::switches::kEnablePhysicalKeyboardAutocorrect, chromeos::switches::kDisablePhysicalKeyboardAutocorrect)}, - {"disable-voice-input", - IDS_FLAGS_VOICE_INPUT_NAME, - IDS_FLAGS_VOICE_INPUT_DESCRIPTION, - kOsCrOS, + {"disable-voice-input", IDS_FLAGS_VOICE_INPUT_NAME, + IDS_FLAGS_VOICE_INPUT_DESCRIPTION, kOsCrOS, SINGLE_DISABLE_VALUE_TYPE(keyboard::switches::kDisableVoiceInput)}, {"experimental-input-view-features", IDS_FLAGS_EXPERIMENTAL_INPUT_VIEW_FEATURES_NAME, - IDS_FLAGS_EXPERIMENTAL_INPUT_VIEW_FEATURES_DESCRIPTION, - kOsCrOS, + IDS_FLAGS_EXPERIMENTAL_INPUT_VIEW_FEATURES_DESCRIPTION, kOsCrOS, SINGLE_VALUE_TYPE( keyboard::switches::kEnableExperimentalInputViewFeatures)}, - {"floating-virtual-keyboard", - IDS_FLAGS_FLOATING_VIRTUAL_KEYBOARD_NAME, - IDS_FLAGS_FLOATING_VIRTUAL_KEYBOARD_DESCRIPTION, - kOsCrOS, + {"floating-virtual-keyboard", IDS_FLAGS_FLOATING_VIRTUAL_KEYBOARD_NAME, + IDS_FLAGS_FLOATING_VIRTUAL_KEYBOARD_DESCRIPTION, kOsCrOS, SINGLE_VALUE_TYPE(keyboard::switches::kEnableFloatingVirtualKeyboard)}, - {"smart-virtual-keyboard", - IDS_FLAGS_SMART_VIRTUAL_KEYBOARD_NAME, - IDS_FLAGS_SMART_VIRTUAL_KEYBOARD_DESCRIPTION, - kOsCrOS, + {"smart-virtual-keyboard", IDS_FLAGS_SMART_VIRTUAL_KEYBOARD_NAME, + IDS_FLAGS_SMART_VIRTUAL_KEYBOARD_DESCRIPTION, kOsCrOS, SINGLE_DISABLE_VALUE_TYPE( keyboard::switches::kDisableSmartVirtualKeyboard)}, - {"gesture-typing", - IDS_FLAGS_GESTURE_TYPING_NAME, - IDS_FLAGS_GESTURE_TYPING_DESCRIPTION, - kOsCrOS, + {"gesture-typing", IDS_FLAGS_GESTURE_TYPING_NAME, + IDS_FLAGS_GESTURE_TYPING_DESCRIPTION, kOsCrOS, SINGLE_DISABLE_VALUE_TYPE(keyboard::switches::kDisableGestureTyping)}, - {"gesture-editing", - IDS_FLAGS_GESTURE_EDITING_NAME, - IDS_FLAGS_GESTURE_EDITING_DESCRIPTION, - kOsCrOS, + {"gesture-editing", IDS_FLAGS_GESTURE_EDITING_NAME, + IDS_FLAGS_GESTURE_EDITING_DESCRIPTION, kOsCrOS, SINGLE_DISABLE_VALUE_TYPE(keyboard::switches::kDisableGestureEditing)}, - {"enable-fullscreen-app-list", - IDS_FLAGS_FULLSCREEN_APP_LIST_NAME, - IDS_FLAGS_FULLSCREEN_APP_LIST_DESCRIPTION, - kOsCrOS, + {"enable-fullscreen-app-list", IDS_FLAGS_FULLSCREEN_APP_LIST_NAME, + IDS_FLAGS_FULLSCREEN_APP_LIST_DESCRIPTION, kOsCrOS, SINGLE_VALUE_TYPE(ash::switches::kAshEnableFullscreenAppList)}, #endif - {"enable-simple-cache-backend", - IDS_FLAGS_SIMPLE_CACHE_BACKEND_NAME, + {"enable-simple-cache-backend", IDS_FLAGS_SIMPLE_CACHE_BACKEND_NAME, IDS_FLAGS_SIMPLE_CACHE_BACKEND_DESCRIPTION, kOsWin | kOsMac | kOsLinux | kOsCrOS, MULTI_VALUE_TYPE(kSimpleCacheBackendChoices)}, - {"enable-tcp-fast-open", - IDS_FLAGS_TCP_FAST_OPEN_NAME, - IDS_FLAGS_TCP_FAST_OPEN_DESCRIPTION, - kOsLinux | kOsCrOS | kOsAndroid, + {"enable-tcp-fast-open", IDS_FLAGS_TCP_FAST_OPEN_NAME, + IDS_FLAGS_TCP_FAST_OPEN_DESCRIPTION, kOsLinux | kOsCrOS | kOsAndroid, SINGLE_VALUE_TYPE(switches::kEnableTcpFastOpen)}, #if defined(ENABLE_SERVICE_DISCOVERY) {"device-discovery-notifications", IDS_FLAGS_DEVICE_DISCOVERY_NOTIFICATIONS_NAME, - IDS_FLAGS_DEVICE_DISCOVERY_NOTIFICATIONS_DESCRIPTION, - kOsDesktop, + IDS_FLAGS_DEVICE_DISCOVERY_NOTIFICATIONS_DESCRIPTION, kOsDesktop, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableDeviceDiscoveryNotifications, switches::kDisableDeviceDiscoveryNotifications)}, {"enable-print-preview-register-promos", IDS_FLAGS_PRINT_PREVIEW_REGISTER_PROMOS_NAME, - IDS_FLAGS_PRINT_PREVIEW_REGISTER_PROMOS_DESCRIPTION, - kOsDesktop, + IDS_FLAGS_PRINT_PREVIEW_REGISTER_PROMOS_DESCRIPTION, kOsDesktop, SINGLE_VALUE_TYPE(switches::kEnablePrintPreviewRegisterPromos)}, #endif // ENABLE_SERVICE_DISCOVERY #if defined(ENABLE_PRINT_PREVIEW) - {"enable-print-preview-simplify", - IDS_FLAGS_DISTILLER_IN_PRINT_PREVIEW_NAME, - IDS_FLAGS_DISTILLER_IN_PRINT_PREVIEW_DESCRIPTION, - kOsDesktop, + {"enable-print-preview-simplify", IDS_FLAGS_DISTILLER_IN_PRINT_PREVIEW_NAME, + IDS_FLAGS_DISTILLER_IN_PRINT_PREVIEW_DESCRIPTION, kOsDesktop, FEATURE_VALUE_TYPE(PrintPreviewDistiller::kFeature)}, #endif #if defined(OS_WIN) - {"enable-cloud-print-xps", - IDS_FLAGS_CLOUD_PRINT_XPS_NAME, - IDS_FLAGS_CLOUD_PRINT_XPS_DESCRIPTION, - kOsWin, + {"enable-cloud-print-xps", IDS_FLAGS_CLOUD_PRINT_XPS_NAME, + IDS_FLAGS_CLOUD_PRINT_XPS_DESCRIPTION, kOsWin, SINGLE_VALUE_TYPE(switches::kEnableCloudPrintXps)}, #endif #if defined(USE_AURA) - {"tab-capture-upscale-quality", - IDS_FLAGS_TAB_CAPTURE_UPSCALE_QUALITY_NAME, - IDS_FLAGS_TAB_CAPTURE_UPSCALE_QUALITY_DESCRIPTION, - kOsAll, + {"tab-capture-upscale-quality", IDS_FLAGS_TAB_CAPTURE_UPSCALE_QUALITY_NAME, + IDS_FLAGS_TAB_CAPTURE_UPSCALE_QUALITY_DESCRIPTION, kOsAll, MULTI_VALUE_TYPE(kTabCaptureUpscaleQualityChoices)}, {"tab-capture-downscale-quality", IDS_FLAGS_TAB_CAPTURE_DOWNSCALE_QUALITY_NAME, - IDS_FLAGS_TAB_CAPTURE_DOWNSCALE_QUALITY_DESCRIPTION, - kOsAll, + IDS_FLAGS_TAB_CAPTURE_DOWNSCALE_QUALITY_DESCRIPTION, kOsAll, MULTI_VALUE_TYPE(kTabCaptureDownscaleQualityChoices)}, #endif #if defined(TOOLKIT_VIEWS) @@ -1324,23 +1140,18 @@ #if defined(ENABLE_SPELLCHECK) {"enable-spelling-feedback-field-trial", IDS_FLAGS_SPELLING_FEEDBACK_FIELD_TRIAL_NAME, - IDS_FLAGS_SPELLING_FEEDBACK_FIELD_TRIAL_DESCRIPTION, - kOsAll, + IDS_FLAGS_SPELLING_FEEDBACK_FIELD_TRIAL_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kEnableSpellingFeedbackFieldTrial)}, #endif - {"enable-webgl-draft-extensions", - IDS_FLAGS_WEBGL_DRAFT_EXTENSIONS_NAME, - IDS_FLAGS_WEBGL_DRAFT_EXTENSIONS_DESCRIPTION, - kOsAll, + {"enable-webgl-draft-extensions", IDS_FLAGS_WEBGL_DRAFT_EXTENSIONS_NAME, + IDS_FLAGS_WEBGL_DRAFT_EXTENSIONS_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kEnableWebGLDraftExtensions)}, - {"enable-new-profile-management", - IDS_FLAGS_NEW_PROFILE_MANAGEMENT_NAME, + {"enable-new-profile-management", IDS_FLAGS_NEW_PROFILE_MANAGEMENT_NAME, IDS_FLAGS_NEW_PROFILE_MANAGEMENT_DESCRIPTION, kOsAndroid | kOsMac | kOsWin | kOsLinux | kOsCrOS, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableNewProfileManagement, switches::kDisableNewProfileManagement)}, - {"enable-account-consistency", - IDS_FLAGS_ACCOUNT_CONSISTENCY_NAME, + {"enable-account-consistency", IDS_FLAGS_ACCOUNT_CONSISTENCY_NAME, IDS_FLAGS_ACCOUNT_CONSISTENCY_DESCRIPTION, kOsAndroid | kOsMac | kOsWin | kOsLinux | kOsCrOS, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableAccountConsistency, @@ -1351,10 +1162,8 @@ kOsMac | kOsWin | kOsLinux, ENABLE_DISABLE_VALUE_TYPE(switches::kEnablePasswordSeparatedSigninFlow, switches::kDisablePasswordSeparatedSigninFlow)}, - {"enable-google-profile-info", - IDS_FLAGS_GOOGLE_PROFILE_INFO_NAME, - IDS_FLAGS_GOOGLE_PROFILE_INFO_DESCRIPTION, - kOsMac | kOsWin | kOsLinux, + {"enable-google-profile-info", IDS_FLAGS_GOOGLE_PROFILE_INFO_NAME, + IDS_FLAGS_GOOGLE_PROFILE_INFO_DESCRIPTION, kOsMac | kOsWin | kOsLinux, SINGLE_VALUE_TYPE(switches::kGoogleProfileInfo)}, #if defined(ENABLE_APP_LIST) {"reset-app-list-install-state", @@ -1366,72 +1175,54 @@ #if defined(OS_ANDROID) {"enable-accessibility-tab-switcher", IDS_FLAGS_ACCESSIBILITY_TAB_SWITCHER_NAME, - IDS_FLAGS_ACCESSIBILITY_TAB_SWITCHER_DESCRIPTION, - kOsAndroid, + IDS_FLAGS_ACCESSIBILITY_TAB_SWITCHER_DESCRIPTION, kOsAndroid, SINGLE_VALUE_TYPE(switches::kEnableAccessibilityTabSwitcher)}, - {"enable-physical-web", - IDS_FLAGS_ENABLE_PHYSICAL_WEB_NAME, - IDS_FLAGS_ENABLE_PHYSICAL_WEB_DESCRIPTION, - kOsAndroid, + {"enable-physical-web", IDS_FLAGS_ENABLE_PHYSICAL_WEB_NAME, + IDS_FLAGS_ENABLE_PHYSICAL_WEB_DESCRIPTION, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kPhysicalWebFeature)}, #endif - {"enable-zero-copy", - IDS_FLAGS_ZERO_COPY_NAME, - IDS_FLAGS_ZERO_COPY_DESCRIPTION, - kOsAll, + {"enable-zero-copy", IDS_FLAGS_ZERO_COPY_NAME, + IDS_FLAGS_ZERO_COPY_DESCRIPTION, kOsAll, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableZeroCopy, switches::kDisableZeroCopy)}, #if defined(OS_CHROMEOS) - {"enable-first-run-ui-transitions", - IDS_FLAGS_FIRST_RUN_UI_TRANSITIONS_NAME, - IDS_FLAGS_FIRST_RUN_UI_TRANSITIONS_DESCRIPTION, - kOsCrOS, + {"enable-first-run-ui-transitions", IDS_FLAGS_FIRST_RUN_UI_TRANSITIONS_NAME, + IDS_FLAGS_FIRST_RUN_UI_TRANSITIONS_DESCRIPTION, kOsCrOS, SINGLE_VALUE_TYPE(chromeos::switches::kEnableFirstRunUITransitions)}, #endif - {"disable-new-bookmark-apps", - IDS_FLAGS_NEW_BOOKMARK_APPS_NAME, + {"disable-new-bookmark-apps", IDS_FLAGS_NEW_BOOKMARK_APPS_NAME, IDS_FLAGS_NEW_BOOKMARK_APPS_DESCRIPTION, kOsWin | kOsCrOS | kOsLinux | kOsMac, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableNewBookmarkApps, switches::kDisableNewBookmarkApps)}, #if defined(OS_MACOSX) - {"disable-hosted-apps-in-windows", - IDS_FLAGS_HOSTED_APPS_IN_WINDOWS_NAME, - IDS_FLAGS_HOSTED_APPS_IN_WINDOWS_DESCRIPTION, - kOsMac, + {"disable-hosted-apps-in-windows", IDS_FLAGS_HOSTED_APPS_IN_WINDOWS_NAME, + IDS_FLAGS_HOSTED_APPS_IN_WINDOWS_DESCRIPTION, kOsMac, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableHostedAppsInWindows, switches::kDisableHostedAppsInWindows)}, {"disable-hosted-app-shim-creation", IDS_FLAGS_HOSTED_APP_SHIM_CREATION_NAME, - IDS_FLAGS_HOSTED_APP_SHIM_CREATION_DESCRIPTION, - kOsMac, + IDS_FLAGS_HOSTED_APP_SHIM_CREATION_DESCRIPTION, kOsMac, SINGLE_DISABLE_VALUE_TYPE(switches::kDisableHostedAppShimCreation)}, {"enable-hosted-app-quit-notification", IDS_FLAGS_HOSTED_APP_QUIT_NOTIFICATION_NAME, - IDS_FLAGS_HOSTED_APP_QUIT_NOTIFICATION_DESCRIPTION, - kOsMac, + IDS_FLAGS_HOSTED_APP_QUIT_NOTIFICATION_DESCRIPTION, kOsMac, SINGLE_VALUE_TYPE(switches::kHostedAppQuitNotification)}, #endif #if defined(OS_ANDROID) - {"disable-pull-to-refresh-effect", - IDS_FLAGS_PULL_TO_REFRESH_EFFECT_NAME, - IDS_FLAGS_PULL_TO_REFRESH_EFFECT_DESCRIPTION, - kOsAndroid, + {"disable-pull-to-refresh-effect", IDS_FLAGS_PULL_TO_REFRESH_EFFECT_NAME, + IDS_FLAGS_PULL_TO_REFRESH_EFFECT_DESCRIPTION, kOsAndroid, SINGLE_DISABLE_VALUE_TYPE(switches::kDisablePullToRefreshEffect)}, #endif #if defined(OS_MACOSX) - {"enable-translate-new-ux", - IDS_FLAGS_TRANSLATE_NEW_UX_NAME, - IDS_FLAGS_TRANSLATE_NEW_UX_DESCRIPTION, - kOsMac, + {"enable-translate-new-ux", IDS_FLAGS_TRANSLATE_NEW_UX_NAME, + IDS_FLAGS_TRANSLATE_NEW_UX_DESCRIPTION, kOsMac, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableTranslateNewUX, switches::kDisableTranslateNewUX)}, #endif #if defined(OS_MACOSX) - {"enable-native-notifications", - IDS_NOTIFICATIONS_NATIVE_FLAG, - IDS_NOTIFICATIONS_NATIVE_FLAG_DESCRIPTION, - kOsMac, + {"enable-native-notifications", IDS_NOTIFICATIONS_NATIVE_FLAG, + IDS_NOTIFICATIONS_NATIVE_FLAG_DESCRIPTION, kOsMac, SINGLE_VALUE_TYPE(switches::kEnableNativeNotifications)}, #endif #if defined(TOOLKIT_VIEWS) @@ -1443,187 +1234,139 @@ views::switches::kDisableViewsRectBasedTargeting)}, {"enable-link-disambiguation-popup", IDS_FLAGS_LINK_DISAMBIGUATION_POPUP_NAME, - IDS_FLAGS_LINK_DISAMBIGUATION_POPUP_DESCRIPTION, - kOsCrOS | kOsWin, + IDS_FLAGS_LINK_DISAMBIGUATION_POPUP_DESCRIPTION, kOsCrOS | kOsWin, SINGLE_VALUE_TYPE(switches::kEnableLinkDisambiguationPopup)}, #endif #if defined(ENABLE_EXTENSIONS) - {"enable-apps-show-on-first-paint", - IDS_FLAGS_APPS_SHOW_ON_FIRST_PAINT_NAME, - IDS_FLAGS_APPS_SHOW_ON_FIRST_PAINT_DESCRIPTION, - kOsDesktop, + {"enable-apps-show-on-first-paint", IDS_FLAGS_APPS_SHOW_ON_FIRST_PAINT_NAME, + IDS_FLAGS_APPS_SHOW_ON_FIRST_PAINT_DESCRIPTION, kOsDesktop, SINGLE_VALUE_TYPE(extensions::switches::kEnableAppsShowOnFirstPaint)}, #endif #if defined(OS_ANDROID) - {"reader-mode-heuristics", - IDS_FLAGS_READER_MODE_HEURISTICS_NAME, - IDS_FLAGS_READER_MODE_HEURISTICS_DESCRIPTION, - kOsAndroid, + {"reader-mode-heuristics", IDS_FLAGS_READER_MODE_HEURISTICS_NAME, + IDS_FLAGS_READER_MODE_HEURISTICS_DESCRIPTION, kOsAndroid, MULTI_VALUE_TYPE(kReaderModeHeuristicsChoices)}, #endif - {"num-raster-threads", - IDS_FLAGS_NUM_RASTER_THREADS_NAME, - IDS_FLAGS_NUM_RASTER_THREADS_DESCRIPTION, - kOsAll, + {"num-raster-threads", IDS_FLAGS_NUM_RASTER_THREADS_NAME, + IDS_FLAGS_NUM_RASTER_THREADS_DESCRIPTION, kOsAll, MULTI_VALUE_TYPE(kNumRasterThreadsChoices)}, - {"enable-permissions-blacklist", - IDS_FLAGS_PERMISSIONS_BLACKLIST_NAME, - IDS_FLAGS_PERMISSIONS_BLACKLIST_DESCRIPTION, - kOsAll, + {"enable-permissions-blacklist", IDS_FLAGS_PERMISSIONS_BLACKLIST_NAME, + IDS_FLAGS_PERMISSIONS_BLACKLIST_DESCRIPTION, kOsAll, ENABLE_DISABLE_VALUE_TYPE(switches::kEnablePermissionsBlacklist, switches::kDisablePermissionsBlacklist)}, - {"enable-single-click-autofill", - IDS_FLAGS_SINGLE_CLICK_AUTOFILL_NAME, + {"enable-single-click-autofill", IDS_FLAGS_SINGLE_CLICK_AUTOFILL_NAME, IDS_FLAGS_SINGLE_CLICK_AUTOFILL_DESCRIPTION, kOsCrOS | kOsMac | kOsWin | kOsLinux | kOsAndroid, ENABLE_DISABLE_VALUE_TYPE( autofill::switches::kEnableSingleClickAutofill, autofill::switches::kDisableSingleClickAutofill)}, - {"enable-site-engagement-service", - IDS_FLAGS_SITE_ENGAGEMENT_SERVICE_NAME, - IDS_FLAGS_SITE_ENGAGEMENT_SERVICE_DESCRIPTION, - kOsAll, + {"enable-site-engagement-service", IDS_FLAGS_SITE_ENGAGEMENT_SERVICE_NAME, + IDS_FLAGS_SITE_ENGAGEMENT_SERVICE_DESCRIPTION, kOsAll, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableSiteEngagementService, switches::kDisableSiteEngagementService)}, - {"enable-session-crashed-bubble", - IDS_FLAGS_SESSION_CRASHED_BUBBLE_NAME, - IDS_FLAGS_SESSION_CRASHED_BUBBLE_DESCRIPTION, - kOsWin | kOsLinux, + {"enable-session-crashed-bubble", IDS_FLAGS_SESSION_CRASHED_BUBBLE_NAME, + IDS_FLAGS_SESSION_CRASHED_BUBBLE_DESCRIPTION, kOsWin | kOsLinux, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableSessionCrashedBubble, switches::kDisableSessionCrashedBubble)}, {"disable-cast-streaming-hw-encoding", IDS_FLAGS_CAST_STREAMING_HW_ENCODING_NAME, - IDS_FLAGS_CAST_STREAMING_HW_ENCODING_DESCRIPTION, - kOsAll, + IDS_FLAGS_CAST_STREAMING_HW_ENCODING_DESCRIPTION, kOsAll, SINGLE_DISABLE_VALUE_TYPE(switches::kDisableCastStreamingHWEncoding)}, #if defined(OS_ANDROID) - {"prefetch-search-results", - IDS_FLAGS_PREFETCH_SEARCH_RESULTS_NAME, - IDS_FLAGS_PREFETCH_SEARCH_RESULTS_DESCRIPTION, - kOsAndroid, + {"prefetch-search-results", IDS_FLAGS_PREFETCH_SEARCH_RESULTS_NAME, + IDS_FLAGS_PREFETCH_SEARCH_RESULTS_DESCRIPTION, kOsAndroid, SINGLE_VALUE_TYPE(switches::kPrefetchSearchResults)}, #endif #if defined(ENABLE_APP_LIST) - {"enable-experimental-app-list", - IDS_FLAGS_EXPERIMENTAL_APP_LIST_NAME, - IDS_FLAGS_EXPERIMENTAL_APP_LIST_DESCRIPTION, - kOsWin | kOsLinux | kOsCrOS, + {"enable-experimental-app-list", IDS_FLAGS_EXPERIMENTAL_APP_LIST_NAME, + IDS_FLAGS_EXPERIMENTAL_APP_LIST_DESCRIPTION, kOsWin | kOsLinux | kOsCrOS, ENABLE_DISABLE_VALUE_TYPE( app_list::switches::kEnableExperimentalAppList, app_list::switches::kDisableExperimentalAppList)}, - {"enable-centered-app-list", - IDS_FLAGS_CENTERED_APP_LIST_NAME, - IDS_FLAGS_CENTERED_APP_LIST_DESCRIPTION, - kOsWin | kOsLinux | kOsCrOS, + {"enable-centered-app-list", IDS_FLAGS_CENTERED_APP_LIST_NAME, + IDS_FLAGS_CENTERED_APP_LIST_DESCRIPTION, kOsWin | kOsLinux | kOsCrOS, SINGLE_VALUE_TYPE(app_list::switches::kEnableCenteredAppList)}, - {"enable-new-app-list-mixer", - IDS_FLAGS_NEW_APP_LIST_MIXER_NAME, + {"enable-new-app-list-mixer", IDS_FLAGS_NEW_APP_LIST_MIXER_NAME, IDS_FLAGS_NEW_APP_LIST_MIXER_DESCRIPTION, kOsWin | kOsLinux | kOsCrOS | kOsMac, ENABLE_DISABLE_VALUE_TYPE(app_list::switches::kEnableNewAppListMixer, app_list::switches::kDisableNewAppListMixer)}, #endif - {"disable-threaded-scrolling", - IDS_FLAGS_THREADED_SCROLLING_NAME, + {"disable-threaded-scrolling", IDS_FLAGS_THREADED_SCROLLING_NAME, IDS_FLAGS_THREADED_SCROLLING_DESCRIPTION, kOsWin | kOsLinux | kOsCrOS | kOsAndroid | kOsMac, SINGLE_DISABLE_VALUE_TYPE(switches::kDisableThreadedScrolling)}, - {"enable-settings-window", - IDS_FLAGS_SETTINGS_WINDOW_NAME, - IDS_FLAGS_SETTINGS_WINDOW_DESCRIPTION, - kOsDesktop, + {"enable-settings-window", IDS_FLAGS_SETTINGS_WINDOW_NAME, + IDS_FLAGS_SETTINGS_WINDOW_DESCRIPTION, kOsDesktop, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableSettingsWindow, switches::kDisableSettingsWindow)}, #if defined(OS_MACOSX) - {"enable-save-password-bubble", - IDS_FLAGS_SAVE_PASSWORD_BUBBLE_NAME, - IDS_FLAGS_SAVE_PASSWORD_BUBBLE_DESCRIPTION, - kOsMac, + {"enable-save-password-bubble", IDS_FLAGS_SAVE_PASSWORD_BUBBLE_NAME, + IDS_FLAGS_SAVE_PASSWORD_BUBBLE_DESCRIPTION, kOsMac, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableSavePasswordBubble, switches::kDisableSavePasswordBubble)}, #endif - {"enable-apps-file-associations", - IDS_FLAGS_APPS_FILE_ASSOCIATIONS_NAME, - IDS_FLAGS_APPS_FILE_ASSOCIATIONS_DESCRIPTION, - kOsMac, + {"enable-apps-file-associations", IDS_FLAGS_APPS_FILE_ASSOCIATIONS_NAME, + IDS_FLAGS_APPS_FILE_ASSOCIATIONS_DESCRIPTION, kOsMac, SINGLE_VALUE_TYPE(switches::kEnableAppsFileAssociations)}, #if defined(OS_ANDROID) - {"enable-embeddedsearch-api", - IDS_FLAGS_EMBEDDEDSEARCH_API_NAME, - IDS_FLAGS_EMBEDDEDSEARCH_API_DESCRIPTION, - kOsAndroid, + {"enable-embeddedsearch-api", IDS_FLAGS_EMBEDDEDSEARCH_API_NAME, + IDS_FLAGS_EMBEDDEDSEARCH_API_DESCRIPTION, kOsAndroid, SINGLE_VALUE_TYPE(switches::kEnableEmbeddedSearchAPI)}, #endif - {"distance-field-text", - IDS_FLAGS_DISTANCE_FIELD_TEXT_NAME, - IDS_FLAGS_DISTANCE_FIELD_TEXT_DESCRIPTION, - kOsAll, + {"distance-field-text", IDS_FLAGS_DISTANCE_FIELD_TEXT_NAME, + IDS_FLAGS_DISTANCE_FIELD_TEXT_DESCRIPTION, kOsAll, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableDistanceFieldText, switches::kDisableDistanceFieldText)}, {"extension-content-verification", IDS_FLAGS_EXTENSION_CONTENT_VERIFICATION_NAME, - IDS_FLAGS_EXTENSION_CONTENT_VERIFICATION_DESCRIPTION, - kOsDesktop, + IDS_FLAGS_EXTENSION_CONTENT_VERIFICATION_DESCRIPTION, kOsDesktop, MULTI_VALUE_TYPE(kExtensionContentVerificationChoices)}, #if defined(ENABLE_EXTENSIONS) {"extension-active-script-permission", IDS_FLAGS_USER_CONSENT_FOR_EXTENSION_SCRIPTS_NAME, - IDS_FLAGS_USER_CONSENT_FOR_EXTENSION_SCRIPTS_DESCRIPTION, - kOsAll, + IDS_FLAGS_USER_CONSENT_FOR_EXTENSION_SCRIPTS_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(extensions::switches::kEnableScriptsRequireAction)}, #endif #if defined(OS_ANDROID) - {"enable-data-reduction-proxy-dev", - IDS_FLAGS_DATA_REDUCTION_PROXY_DEV_NAME, - IDS_FLAGS_DATA_REDUCTION_PROXY_DEV_DESCRIPTION, - kOsAndroid, + {"enable-data-reduction-proxy-dev", IDS_FLAGS_DATA_REDUCTION_PROXY_DEV_NAME, + IDS_FLAGS_DATA_REDUCTION_PROXY_DEV_DESCRIPTION, kOsAndroid, ENABLE_DISABLE_VALUE_TYPE( data_reduction_proxy::switches::kEnableDataReductionProxyDev, data_reduction_proxy::switches::kDisableDataReductionProxyDev)}, {"enable-data-reduction-proxy-carrier-test", IDS_FLAGS_DATA_REDUCTION_PROXY_CARRIER_TEST_NAME, - IDS_FLAGS_DATA_REDUCTION_PROXY_CARRIER_TEST_DESCRIPTION, - kOsAndroid, + IDS_FLAGS_DATA_REDUCTION_PROXY_CARRIER_TEST_DESCRIPTION, kOsAndroid, SINGLE_VALUE_TYPE( data_reduction_proxy::switches::kEnableDataReductionProxyCarrierTest)}, #endif - {"enable-hotword-hardware", - IDS_FLAGS_EXPERIMENTAL_HOTWORD_HARDWARE_NAME, - IDS_FLAGS_EXPERIMENTAL_HOTWORD_HARDWARE_DESCRIPTION, - kOsCrOS, + {"enable-hotword-hardware", IDS_FLAGS_EXPERIMENTAL_HOTWORD_HARDWARE_NAME, + IDS_FLAGS_EXPERIMENTAL_HOTWORD_HARDWARE_DESCRIPTION, kOsCrOS, SINGLE_VALUE_TYPE(switches::kEnableExperimentalHotwordHardware)}, #if defined(ENABLE_EXTENSIONS) {"enable-embedded-extension-options", IDS_FLAGS_EMBEDDED_EXTENSION_OPTIONS_NAME, - IDS_FLAGS_EMBEDDED_EXTENSION_OPTIONS_DESCRIPTION, - kOsDesktop, + IDS_FLAGS_EMBEDDED_EXTENSION_OPTIONS_DESCRIPTION, kOsDesktop, SINGLE_VALUE_TYPE(extensions::switches::kEnableEmbeddedExtensionOptions)}, #endif #if defined(USE_ASH) - {"enable-web-app-frame", - IDS_FLAGS_WEB_APP_FRAME_NAME, - IDS_FLAGS_WEB_APP_FRAME_DESCRIPTION, - kOsWin | kOsCrOS, + {"enable-web-app-frame", IDS_FLAGS_WEB_APP_FRAME_NAME, + IDS_FLAGS_WEB_APP_FRAME_DESCRIPTION, kOsWin | kOsCrOS, SINGLE_VALUE_TYPE(switches::kEnableWebAppFrame)}, #endif - {"enable-drop-sync-credential", - IDS_FLAGS_DROP_SYNC_CREDENTIAL_NAME, - IDS_FLAGS_DROP_SYNC_CREDENTIAL_DESCRIPTION, - kOsAll, + {"enable-drop-sync-credential", IDS_FLAGS_DROP_SYNC_CREDENTIAL_NAME, + IDS_FLAGS_DROP_SYNC_CREDENTIAL_DESCRIPTION, kOsAll, ENABLE_DISABLE_VALUE_TYPE( password_manager::switches::kEnableDropSyncCredential, password_manager::switches::kDisableDropSyncCredential)}, #if defined(ENABLE_EXTENSIONS) {"enable-extension-action-redesign", IDS_FLAGS_EXTENSION_ACTION_REDESIGN_NAME, - IDS_FLAGS_EXTENSION_ACTION_REDESIGN_DESCRIPTION, - kOsDesktop, + IDS_FLAGS_EXTENSION_ACTION_REDESIGN_DESCRIPTION, kOsDesktop, SINGLE_VALUE_TYPE(extensions::switches::kEnableExtensionActionRedesign)}, #endif - {"autofill-sync-credential", - IDS_FLAGS_AUTOFILL_SYNC_CREDENTIAL_NAME, - IDS_FLAGS_AUTOFILL_SYNC_CREDENTIAL_DESCRIPTION, - kOsAll, + {"autofill-sync-credential", IDS_FLAGS_AUTOFILL_SYNC_CREDENTIAL_NAME, + IDS_FLAGS_AUTOFILL_SYNC_CREDENTIAL_DESCRIPTION, kOsAll, MULTI_VALUE_TYPE(kAutofillSyncCredentialChoices)}, #if !defined(OS_ANDROID) {"enable-message-center-always-scroll-up-upon-notification-removal", @@ -1633,179 +1376,132 @@ SINGLE_VALUE_TYPE( switches::kEnableMessageCenterAlwaysScrollUpUponNotificationRemoval)}, #endif - {"enable-md-policy-page", - IDS_FLAGS_ENABLE_MATERIAL_DESIGN_POLICY_PAGE_NAME, - IDS_FLAGS_ENABLE_MATERIAL_DESIGN_POLICY_PAGE_DESCRIPTION, - kOsDesktop, + {"enable-md-policy-page", IDS_FLAGS_ENABLE_MATERIAL_DESIGN_POLICY_PAGE_NAME, + IDS_FLAGS_ENABLE_MATERIAL_DESIGN_POLICY_PAGE_DESCRIPTION, kOsDesktop, SINGLE_VALUE_TYPE(switches::kEnableMaterialDesignPolicyPage)}, #if defined(OS_CHROMEOS) - {"memory-pressure-thresholds", - IDS_FLAGS_MEMORY_PRESSURE_THRESHOLD_NAME, - IDS_FLAGS_MEMORY_PRESSURE_THRESHOLD_DESCRIPTION, - kOsCrOS, + {"memory-pressure-thresholds", IDS_FLAGS_MEMORY_PRESSURE_THRESHOLD_NAME, + IDS_FLAGS_MEMORY_PRESSURE_THRESHOLD_DESCRIPTION, kOsCrOS, MULTI_VALUE_TYPE(kMemoryPressureThresholdChoices)}, - {"wake-on-wifi-packet", - IDS_FLAGS_WAKE_ON_PACKETS_NAME, - IDS_FLAGS_WAKE_ON_PACKETS_DESCRIPTION, - kOsCrOSOwnerOnly, + {"wake-on-wifi-packet", IDS_FLAGS_WAKE_ON_PACKETS_NAME, + IDS_FLAGS_WAKE_ON_PACKETS_DESCRIPTION, kOsCrOSOwnerOnly, SINGLE_VALUE_TYPE(chromeos::switches::kWakeOnWifiPacket)}, #endif // OS_CHROMEOS - {"enable-tab-audio-muting", - IDS_FLAGS_TAB_AUDIO_MUTING_NAME, - IDS_FLAGS_TAB_AUDIO_MUTING_DESCRIPTION, - kOsDesktop, + {"enable-tab-audio-muting", IDS_FLAGS_TAB_AUDIO_MUTING_NAME, + IDS_FLAGS_TAB_AUDIO_MUTING_DESCRIPTION, kOsDesktop, SINGLE_VALUE_TYPE(switches::kEnableTabAudioMuting)}, - {"enable-credential-manager-api", - IDS_FLAGS_CREDENTIAL_MANAGER_API_NAME, - IDS_FLAGS_CREDENTIAL_MANAGER_API_DESCRIPTION, - kOsAll, + {"enable-credential-manager-api", IDS_FLAGS_CREDENTIAL_MANAGER_API_NAME, + IDS_FLAGS_CREDENTIAL_MANAGER_API_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kEnableCredentialManagerAPI)}, {"reduced-referrer-granularity", IDS_FLAGS_REDUCED_REFERRER_GRANULARITY_NAME, - IDS_FLAGS_REDUCED_REFERRER_GRANULARITY_DESCRIPTION, - kOsAll, + IDS_FLAGS_REDUCED_REFERRER_GRANULARITY_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kReducedReferrerGranularity)}, #if defined(OS_CHROMEOS) - {"disable-new-zip-unpacker", - IDS_FLAGS_NEW_ZIP_UNPACKER_NAME, - IDS_FLAGS_NEW_ZIP_UNPACKER_DESCRIPTION, - kOsCrOS, + {"disable-new-zip-unpacker", IDS_FLAGS_NEW_ZIP_UNPACKER_NAME, + IDS_FLAGS_NEW_ZIP_UNPACKER_DESCRIPTION, kOsCrOS, SINGLE_DISABLE_VALUE_TYPE(chromeos::switches::kDisableNewZIPUnpacker)}, #endif // defined(OS_CHROMEOS) - {"enable-credit-card-scan", - IDS_FLAGS_CREDIT_CARD_SCAN_NAME, - IDS_FLAGS_CREDIT_CARD_SCAN_DESCRIPTION, - kOsAndroid, + {"enable-credit-card-scan", IDS_FLAGS_CREDIT_CARD_SCAN_NAME, + IDS_FLAGS_CREDIT_CARD_SCAN_DESCRIPTION, kOsAndroid, ENABLE_DISABLE_VALUE_TYPE(autofill::switches::kEnableCreditCardScan, autofill::switches::kDisableCreditCardScan)}, #if defined(OS_CHROMEOS) {"disable-captive-portal-bypass-proxy", IDS_FLAGS_CAPTIVE_PORTAL_BYPASS_PROXY_NAME, - IDS_FLAGS_CAPTIVE_PORTAL_BYPASS_PROXY_DESCRIPTION, - kOsCrOS, + IDS_FLAGS_CAPTIVE_PORTAL_BYPASS_PROXY_DESCRIPTION, kOsCrOS, SINGLE_DISABLE_VALUE_TYPE( chromeos::switches::kDisableCaptivePortalBypassProxy)}, #endif // defined(OS_CHROMEOS) #if defined(OS_ANDROID) {"enable-seccomp-sandbox-android", IDS_FLAGS_SECCOMP_FILTER_SANDBOX_ANDROID_NAME, - IDS_FLAGS_SECCOMP_FILTER_SANDBOX_ANDROID_DESCRIPTION, - kOsAndroid, + IDS_FLAGS_SECCOMP_FILTER_SANDBOX_ANDROID_DESCRIPTION, kOsAndroid, FEATURE_VALUE_TYPE(features::kSeccompSandboxAndroid)}, #endif - {"enable-touch-hover", - IDS_FLAGS_TOUCH_HOVER_NAME, - IDS_FLAGS_TOUCH_HOVER_DESCRIPTION, - kOsAndroid, + {"enable-touch-hover", IDS_FLAGS_TOUCH_HOVER_NAME, + IDS_FLAGS_TOUCH_HOVER_DESCRIPTION, kOsAndroid, SINGLE_VALUE_TYPE("enable-touch-hover")}, - {"enable-fill-on-account-select", - IDS_FILL_ON_ACCOUNT_SELECT_NAME, - IDS_FILL_ON_ACCOUNT_SELECT_DESCRIPTION, - kOsAll, + {"enable-fill-on-account-select", IDS_FILL_ON_ACCOUNT_SELECT_NAME, + IDS_FILL_ON_ACCOUNT_SELECT_DESCRIPTION, kOsAll, MULTI_VALUE_TYPE(kFillOnAccountSelectChoices)}, #if defined(OS_CHROMEOS) {"enable-wifi-credential-sync", // FLAGS:RECORD_UMA IDS_FLAGS_WIFI_CREDENTIAL_SYNC_NAME, - IDS_FLAGS_WIFI_CREDENTIAL_SYNC_DESCRIPTION, - kOsCrOS, + IDS_FLAGS_WIFI_CREDENTIAL_SYNC_DESCRIPTION, kOsCrOS, SINGLE_VALUE_TYPE(switches::kEnableWifiCredentialSync)}, {"enable-potentially-annoying-security-features", IDS_FLAGS_EXPERIMENTAL_SECURITY_FEATURES_NAME, - IDS_FLAGS_EXPERIMENTAL_SECURITY_FEATURES_DESCRIPTION, - kOsAll, + IDS_FLAGS_EXPERIMENTAL_SECURITY_FEATURES_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kEnablePotentiallyAnnoyingSecurityFeatures)}, #endif - {"disable-delay-agnostic-aec", - IDS_FLAGS_DISABLE_DELAY_AGNOSTIC_AEC_NAME, + {"disable-delay-agnostic-aec", IDS_FLAGS_DISABLE_DELAY_AGNOSTIC_AEC_NAME, IDS_FLAGS_DISABLE_DELAY_AGNOSTIC_AEC_DESCRIPTION, kOsWin | kOsLinux | kOsCrOS | kOsMac, SINGLE_DISABLE_VALUE_TYPE(switches::kDisableDelayAgnosticAec)}, {"mark-non-secure-as", // FLAGS:RECORD_UMA - IDS_MARK_NON_SECURE_AS_NAME, - IDS_MARK_NON_SECURE_AS_DESCRIPTION, - kOsAll, + IDS_MARK_NON_SECURE_AS_NAME, IDS_MARK_NON_SECURE_AS_DESCRIPTION, kOsAll, MULTI_VALUE_TYPE(kMarkNonSecureAsChoices)}, - {"enable-site-per-process", - IDS_FLAGS_SITE_PER_PROCESS_NAME, - IDS_FLAGS_SITE_PER_PROCESS_DESCRIPTION, - kOsAll, + {"enable-site-per-process", IDS_FLAGS_SITE_PER_PROCESS_NAME, + IDS_FLAGS_SITE_PER_PROCESS_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kSitePerProcess)}, - {"enable-use-zoom-for-dsf", - IDS_FLAGS_ENABLE_USE_ZOOM_FOR_DSF_NAME, - IDS_FLAGS_ENABLE_USE_ZOOM_FOR_DSF_DESCRIPTION, - kOsDesktop, + {"enable-use-zoom-for-dsf", IDS_FLAGS_ENABLE_USE_ZOOM_FOR_DSF_NAME, + IDS_FLAGS_ENABLE_USE_ZOOM_FOR_DSF_DESCRIPTION, kOsDesktop, MULTI_VALUE_TYPE(kEnableUseZoomForDSFChoices)}, #if defined(OS_MACOSX) - {"enable-harfbuzz-rendertext", - IDS_FLAGS_HARFBUZZ_RENDERTEXT_NAME, - IDS_FLAGS_HARFBUZZ_RENDERTEXT_DESCRIPTION, - kOsMac, + {"enable-harfbuzz-rendertext", IDS_FLAGS_HARFBUZZ_RENDERTEXT_NAME, + IDS_FLAGS_HARFBUZZ_RENDERTEXT_DESCRIPTION, kOsMac, SINGLE_VALUE_TYPE(switches::kEnableHarfBuzzRenderText)}, #endif // defined(OS_MACOSX) #if defined(OS_CHROMEOS) {"disable-timezone-tracking", IDS_FLAGS_RESOLVE_TIMEZONE_BY_GEOLOCATION_NAME, - IDS_FLAGS_RESOLVE_TIMEZONE_BY_GEOLOCATION_DESCRIPTION, - kOsCrOS, + IDS_FLAGS_RESOLVE_TIMEZONE_BY_GEOLOCATION_DESCRIPTION, kOsCrOS, SINGLE_DISABLE_VALUE_TYPE( chromeos::switches::kDisableTimeZoneTrackingOption)}, #endif // defined(OS_CHROMEOS) - {"data-reduction-proxy-lo-fi", - IDS_FLAGS_DATA_REDUCTION_PROXY_LO_FI_NAME, - IDS_FLAGS_DATA_REDUCTION_PROXY_LO_FI_DESCRIPTION, - kOsAll, + {"data-reduction-proxy-lo-fi", IDS_FLAGS_DATA_REDUCTION_PROXY_LO_FI_NAME, + IDS_FLAGS_DATA_REDUCTION_PROXY_LO_FI_DESCRIPTION, kOsAll, MULTI_VALUE_TYPE(kDataReductionProxyLoFiChoices)}, {"enable-data-reduction-proxy-lo-fi-preview", IDS_FLAGS_ENABLE_DATA_REDUCTION_PROXY_LO_FI_PREVIEW_NAME, - IDS_FLAGS_ENABLE_DATA_REDUCTION_PROXY_LO_FI_PREVIEW_DESCRIPTION, - kOsAll, + IDS_FLAGS_ENABLE_DATA_REDUCTION_PROXY_LO_FI_PREVIEW_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE( data_reduction_proxy::switches::kEnableDataReductionProxyLoFiPreview)}, {"clear-data-reduction-proxy-data-savings", IDS_FLAGS_DATA_REDUCTION_PROXY_RESET_SAVINGS_NAME, - IDS_FLAGS_DATA_REDUCTION_PROXY_RESET_SAVINGS_DESCRIPTION, - kOsAll, + IDS_FLAGS_DATA_REDUCTION_PROXY_RESET_SAVINGS_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE( data_reduction_proxy::switches::kClearDataReductionProxyDataSavings)}, {"enable-data-reduction-proxy-config-client", IDS_FLAGS_DATA_REDUCTION_PROXY_CONFIG_CLIENT_NAME, - IDS_FLAGS_DATA_REDUCTION_PROXY_CONFIG_CLIENT_DESCRIPTION, - kOsAll, + IDS_FLAGS_DATA_REDUCTION_PROXY_CONFIG_CLIENT_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(data_reduction_proxy::switches:: kEnableDataReductionProxyConfigClient)}, #if defined(ENABLE_DATA_REDUCTION_PROXY_DEBUGGING) {"enable-data-reduction-proxy-bypass-warnings", IDS_FLAGS_DATA_REDUCTION_PROXY_BYPASS_WARNING_NAME, - IDS_FLAGS_DATA_REDUCTION_PROXY_BYPASS_WARNING_DESCRIPTION, - kOsAndroid, + IDS_FLAGS_DATA_REDUCTION_PROXY_BYPASS_WARNING_DESCRIPTION, kOsAndroid, SINGLE_VALUE_TYPE(data_reduction_proxy::switches:: kEnableDataReductionProxyBypassWarning)}, #endif - {"allow-insecure-localhost", - IDS_ALLOW_INSECURE_LOCALHOST, - IDS_ALLOW_INSECURE_LOCALHOST_DESCRIPTION, - kOsAll, + {"allow-insecure-localhost", IDS_ALLOW_INSECURE_LOCALHOST, + IDS_ALLOW_INSECURE_LOCALHOST_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kAllowInsecureLocalhost)}, - {"enable-add-to-shelf", - IDS_FLAGS_ADD_TO_SHELF_NAME, - IDS_FLAGS_ADD_TO_SHELF_DESCRIPTION, - kOsDesktop, + {"enable-add-to-shelf", IDS_FLAGS_ADD_TO_SHELF_NAME, + IDS_FLAGS_ADD_TO_SHELF_DESCRIPTION, kOsDesktop, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableAddToShelf, switches::kDisableAddToShelf)}, {"bypass-app-banner-engagement-checks", IDS_FLAGS_BYPASS_APP_BANNER_ENGAGEMENT_CHECKS_NAME, - IDS_FLAGS_BYPASS_APP_BANNER_ENGAGEMENT_CHECKS_DESCRIPTION, - kOsAll, + IDS_FLAGS_BYPASS_APP_BANNER_ENGAGEMENT_CHECKS_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kBypassAppBannerEngagementChecks)}, - {"use-sync-sandbox", - IDS_FLAGS_SYNC_SANDBOX_NAME, - IDS_FLAGS_SYNC_SANDBOX_DESCRIPTION, - kOsAll, + {"use-sync-sandbox", IDS_FLAGS_SYNC_SANDBOX_NAME, + IDS_FLAGS_SYNC_SANDBOX_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE_AND_VALUE( switches::kSyncServiceURL, "https://chrome-sync.sandbox.google.com/chrome-sync/alpha")}, - {"enable-child-account-detection", - IDS_FLAGS_CHILD_ACCOUNT_DETECTION_NAME, + {"enable-child-account-detection", IDS_FLAGS_CHILD_ACCOUNT_DETECTION_NAME, IDS_FLAGS_CHILD_ACCOUNT_DETECTION_DESCRIPTION, kOsAndroid | kOsMac | kOsWin | kOsLinux | kOsCrOS, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableChildAccountDetection, @@ -1813,59 +1509,49 @@ #if defined(OS_CHROMEOS) && defined(USE_OZONE) {"ozone-test-single-overlay-support", IDS_FLAGS_OZONE_TEST_SINGLE_HARDWARE_OVERLAY, - IDS_FLAGS_OZONE_TEST_SINGLE_HARDWARE_OVERLAY_DESCRIPTION, - kOsCrOS, + IDS_FLAGS_OZONE_TEST_SINGLE_HARDWARE_OVERLAY_DESCRIPTION, kOsCrOS, SINGLE_VALUE_TYPE(switches::kOzoneTestSingleOverlaySupport)}, #endif // defined(OS_CHROMEOS) && defined(USE_OZONE) - {"v8-pac-mojo-out-of-process", - IDS_FLAGS_V8_PAC_MOJO_OUT_OF_PROCESS_NAME, - IDS_FLAGS_V8_PAC_MOJO_OUT_OF_PROCESS_DESCRIPTION, - kOsDesktop, + {"v8-pac-mojo-out-of-process", IDS_FLAGS_V8_PAC_MOJO_OUT_OF_PROCESS_NAME, + IDS_FLAGS_V8_PAC_MOJO_OUT_OF_PROCESS_DESCRIPTION, kOsDesktop, ENABLE_DISABLE_VALUE_TYPE(switches::kV8PacMojoOutOfProcess, switches::kDisableOutOfProcessPac)}, #if defined(ENABLE_MEDIA_ROUTER) && !defined(OS_ANDROID) - {"media-router", - IDS_FLAGS_MEDIA_ROUTER_NAME, - IDS_FLAGS_MEDIA_ROUTER_DESCRIPTION, - kOsDesktop, - ENABLE_DISABLE_VALUE_TYPE_AND_VALUE( - switches::kMediaRouter, "1", switches::kMediaRouter, "0")}, + {"media-router", IDS_FLAGS_MEDIA_ROUTER_NAME, + IDS_FLAGS_MEDIA_ROUTER_DESCRIPTION, kOsDesktop, + ENABLE_DISABLE_VALUE_TYPE_AND_VALUE(switches::kMediaRouter, + "1", + switches::kMediaRouter, + "0")}, #endif // defined(ENABLE_MEDIA_ROUTER) && !defined(OS_ANDROID) // Since Drive Search is not available when app list is disabled, flag guard // enable-drive-search-in-chrome-launcher flag. #if defined(ENABLE_APP_LIST) {"enable-drive-search-in-app-launcher", IDS_FLAGS_DRIVE_SEARCH_IN_CHROME_LAUNCHER, - IDS_FLAGS_DRIVE_SEARCH_IN_CHROME_LAUNCHER_DESCRIPTION, - kOsCrOS, + IDS_FLAGS_DRIVE_SEARCH_IN_CHROME_LAUNCHER_DESCRIPTION, kOsCrOS, ENABLE_DISABLE_VALUE_TYPE( app_list::switches::kEnableDriveSearchInChromeLauncher, app_list::switches::kDisableDriveSearchInChromeLauncher)}, #endif // defined(ENABLE_APP_LIST) #if defined(OS_CHROMEOS) - {"disable-mtp-write-support", - IDS_FLAGS_MTP_WRITE_SUPPORT_NAME, - IDS_FLAGS_MTP_WRITE_SUPPORT_DESCRIPTION, - kOsCrOS, + {"disable-mtp-write-support", IDS_FLAGS_MTP_WRITE_SUPPORT_NAME, + IDS_FLAGS_MTP_WRITE_SUPPORT_DESCRIPTION, kOsCrOS, SINGLE_DISABLE_VALUE_TYPE(chromeos::switches::kDisableMtpWriteSupport)}, #endif // defined(OS_CHROMEOS) #if defined(OS_CHROMEOS) - {"enable-datasaver-prompt", - IDS_FLAGS_DATASAVER_PROMPT_NAME, - IDS_FLAGS_DATASAVER_PROMPT_DESCRIPTION, - kOsCrOS, + {"enable-datasaver-prompt", IDS_FLAGS_DATASAVER_PROMPT_NAME, + IDS_FLAGS_DATASAVER_PROMPT_DESCRIPTION, kOsCrOS, MULTI_VALUE_TYPE(kDataSaverPromptChoices)}, #endif // defined(OS_CHROMEOS) - {"supervised-user-safesites", - IDS_FLAGS_SUPERVISED_USER_SAFESITES_NAME, + {"supervised-user-safesites", IDS_FLAGS_SUPERVISED_USER_SAFESITES_NAME, IDS_FLAGS_SUPERVISED_USER_SAFESITES_DESCRIPTION, kOsAndroid | kOsMac | kOsWin | kOsLinux | kOsCrOS, MULTI_VALUE_TYPE(kSupervisedUserSafeSitesChoices)}, #if defined(OS_ANDROID) {"enable-autofill-keyboard-accessory-view", IDS_FLAGS_AUTOFILL_ACCESSORY_VIEW_NAME, - IDS_FLAGS_AUTOFILL_ACCESSORY_VIEW_DESCRIPTION, - kOsAndroid, + IDS_FLAGS_AUTOFILL_ACCESSORY_VIEW_DESCRIPTION, kOsAndroid, ENABLE_DISABLE_VALUE_TYPE( autofill::switches::kEnableAccessorySuggestionView, autofill::switches::kDisableAccessorySuggestionView)}, @@ -1873,96 +1559,68 @@ #if defined(OS_WIN) {"try-supported-channel-layouts", IDS_FLAGS_TRY_SUPPORTED_CHANNEL_LAYOUTS_NAME, - IDS_FLAGS_TRY_SUPPORTED_CHANNEL_LAYOUTS_DESCRIPTION, - kOsWin, + IDS_FLAGS_TRY_SUPPORTED_CHANNEL_LAYOUTS_DESCRIPTION, kOsWin, SINGLE_VALUE_TYPE(switches::kTrySupportedChannelLayouts)}, #endif #if defined(ENABLE_WEBRTC) - {"enable-webrtc-dtls12", - IDS_FLAGS_WEBRTC_DTLS12_NAME, - IDS_FLAGS_WEBRTC_DTLS12_DESCRIPTION, - kOsAll, + {"enable-webrtc-dtls12", IDS_FLAGS_WEBRTC_DTLS12_NAME, + IDS_FLAGS_WEBRTC_DTLS12_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kEnableWebRtcDtls12)}, #endif #if defined(OS_MACOSX) - {"app-info-dialog", - IDS_FLAGS_APP_INFO_DIALOG_NAME, - IDS_FLAGS_APP_INFO_DIALOG_DESCRIPTION, - kOsMac, + {"app-info-dialog", IDS_FLAGS_APP_INFO_DIALOG_NAME, + IDS_FLAGS_APP_INFO_DIALOG_DESCRIPTION, kOsMac, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableAppInfoDialogMac, switches::kDisableAppInfoDialogMac)}, {"mac-views-native-app-windows", IDS_FLAGS_MAC_VIEWS_NATIVE_APP_WINDOWS_NAME, - IDS_FLAGS_MAC_VIEWS_NATIVE_APP_WINDOWS_DESCRIPTION, - kOsMac, + IDS_FLAGS_MAC_VIEWS_NATIVE_APP_WINDOWS_DESCRIPTION, kOsMac, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableMacViewsNativeAppWindows, switches::kDisableMacViewsNativeAppWindows)}, - {"app-window-cycling", - IDS_FLAGS_APP_WINDOW_CYCLING_NAME, - IDS_FLAGS_APP_WINDOW_CYCLING_DESCRIPTION, - kOsMac, + {"app-window-cycling", IDS_FLAGS_APP_WINDOW_CYCLING_NAME, + IDS_FLAGS_APP_WINDOW_CYCLING_DESCRIPTION, kOsMac, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableAppWindowCycling, switches::kDisableAppWindowCycling)}, - {"mac-views-dialogs", - IDS_FLAGS_MAC_VIEWS_DIALOGS_NAME, - IDS_FLAGS_MAC_VIEWS_DIALOGS_DESCRIPTION, - kOsMac, + {"mac-views-dialogs", IDS_FLAGS_MAC_VIEWS_DIALOGS_NAME, + IDS_FLAGS_MAC_VIEWS_DIALOGS_DESCRIPTION, kOsMac, SINGLE_VALUE_TYPE(switches::kEnableMacViewsDialogs)}, #endif #if defined(ENABLE_WEBVR) - {"enable-webvr", - IDS_FLAGS_WEBVR_NAME, - IDS_FLAGS_WEBVR_DESCRIPTION, - kOsAll, + {"enable-webvr", IDS_FLAGS_WEBVR_NAME, IDS_FLAGS_WEBVR_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kEnableWebVR)}, #endif #if defined(OS_CHROMEOS) {"disable-accelerated-mjpeg-decode", IDS_FLAGS_ACCELERATED_MJPEG_DECODE_NAME, - IDS_FLAGS_ACCELERATED_MJPEG_DECODE_DESCRIPTION, - kOsCrOS, + IDS_FLAGS_ACCELERATED_MJPEG_DECODE_DESCRIPTION, kOsCrOS, SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)}, #endif // OS_CHROMEOS - {"v8-cache-options", - IDS_FLAGS_V8_CACHE_OPTIONS_NAME, - IDS_FLAGS_V8_CACHE_OPTIONS_DESCRIPTION, - kOsAll, + {"v8-cache-options", IDS_FLAGS_V8_CACHE_OPTIONS_NAME, + IDS_FLAGS_V8_CACHE_OPTIONS_DESCRIPTION, kOsAll, MULTI_VALUE_TYPE(kV8CacheOptionsChoices)}, #if !defined(OS_ANDROID) && !defined(OS_IOS) - {"enable-md-downloads", - IDS_FLAGS_ENABLE_MATERIAL_DESIGN_DOWNLOADS_NAME, - IDS_FLAGS_ENABLE_MATERIAL_DESIGN_DOWNLOADS_DESCRIPTION, - kOsDesktop, + {"enable-md-downloads", IDS_FLAGS_ENABLE_MATERIAL_DESIGN_DOWNLOADS_NAME, + IDS_FLAGS_ENABLE_MATERIAL_DESIGN_DOWNLOADS_DESCRIPTION, kOsDesktop, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableMaterialDesignDownloads, switches::kDisableMaterialDesignDownloads)}, #endif {"enable-clear-browsing-data-counters", IDS_FLAGS_ENABLE_CLEAR_BROWSING_DATA_COUNTERS_NAME, - IDS_FLAGS_ENABLE_CLEAR_BROWSING_DATA_COUNTERS_DESCRIPTION, - kOsAll, + IDS_FLAGS_ENABLE_CLEAR_BROWSING_DATA_COUNTERS_DESCRIPTION, kOsAll, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableClearBrowsingDataCounters, - switches::kDisableClearBrowsingDataCounters) - }, + switches::kDisableClearBrowsingDataCounters)}, #if defined(ENABLE_TASK_MANAGER) - {"disable-new-task-manager", - IDS_FLAGS_NEW_TASK_MANAGER_NAME, - IDS_FLAGS_NEW_TASK_MANAGER_DESCRIPTION, - kOsDesktop, - SINGLE_DISABLE_VALUE_TYPE(switches::kDisableNewTaskManager) - }, + {"disable-new-task-manager", IDS_FLAGS_NEW_TASK_MANAGER_NAME, + IDS_FLAGS_NEW_TASK_MANAGER_DESCRIPTION, kOsDesktop, + SINGLE_DISABLE_VALUE_TYPE(switches::kDisableNewTaskManager)}, #endif // defined(ENABLE_TASK_MANAGER) - {"simplified-fullscreen-ui", - IDS_FLAGS_SIMPLIFIED_FULLSCREEN_UI_NAME, - IDS_FLAGS_SIMPLIFIED_FULLSCREEN_UI_DESCRIPTION, - kOsDesktop, + {"simplified-fullscreen-ui", IDS_FLAGS_SIMPLIFIED_FULLSCREEN_UI_NAME, + IDS_FLAGS_SIMPLIFIED_FULLSCREEN_UI_DESCRIPTION, kOsDesktop, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableSimplifiedFullscreenUI, - switches::kDisableSimplifiedFullscreenUI) - }, + switches::kDisableSimplifiedFullscreenUI)}, #if defined(OS_ANDROID) - {"progress-bar-animation", - IDS_FLAGS_PROGRESS_BAR_ANIMATION_NAME, - IDS_FLAGS_PROGRESS_BAR_ANIMATION_DESCRIPTION, - kOsAndroid, + {"progress-bar-animation", IDS_FLAGS_PROGRESS_BAR_ANIMATION_NAME, + IDS_FLAGS_PROGRESS_BAR_ANIMATION_DESCRIPTION, kOsAndroid, MULTI_VALUE_TYPE(kProgressBarAnimationChoices)}, #endif // defined(OS_ANDROID) #if defined(OS_ANDROID) @@ -1970,72 +1628,54 @@ IDS_FLAGS_OFFLINE_PAGES_DESCRIPTION, kOsAndroid, MULTI_VALUE_TYPE(kEnableOfflinePagesChoices)}, #endif // defined(OS_ANDROID) - {"low-priority-iframes", - IDS_FLAGS_LOW_PRIORITY_IFRAMES_UI_NAME, - IDS_FLAGS_LOW_PRIORITY_IFRAMES_UI_DESCRIPTION, - kOsAll, + {"low-priority-iframes", IDS_FLAGS_LOW_PRIORITY_IFRAMES_UI_NAME, + IDS_FLAGS_LOW_PRIORITY_IFRAMES_UI_DESCRIPTION, kOsAll, // NOTE: if we want to add additional experiment entries for other // features controlled by kBlinkSettings, we'll need to add logic to // merge the flag values. - SINGLE_VALUE_TYPE_AND_VALUE( - switches::kBlinkSettings, "lowPriorityIframes=true")}, + SINGLE_VALUE_TYPE_AND_VALUE(switches::kBlinkSettings, + "lowPriorityIframes=true")}, #if defined(OS_ANDROID) - {"enable-ntp-popular-sites", - IDS_FLAGS_NTP_POPULAR_SITES_NAME, - IDS_FLAGS_NTP_POPULAR_SITES_DESCRIPTION, - kOsAndroid, + {"enable-ntp-popular-sites", IDS_FLAGS_NTP_POPULAR_SITES_NAME, + IDS_FLAGS_NTP_POPULAR_SITES_DESCRIPTION, kOsAndroid, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableNTPPopularSites, switches::kDisableNTPPopularSites)}, - {"ntp-switch-to-existing-tab", - IDS_FLAGS_NTP_SWITCH_TO_EXISTING_TAB_NAME, - IDS_FLAGS_NTP_SWITCH_TO_EXISTING_TAB_DESCRIPTION, - kOsAndroid, + {"ntp-switch-to-existing-tab", IDS_FLAGS_NTP_SWITCH_TO_EXISTING_TAB_NAME, + IDS_FLAGS_NTP_SWITCH_TO_EXISTING_TAB_DESCRIPTION, kOsAndroid, MULTI_VALUE_TYPE(kNtpSwitchToExistingTabChoices)}, - {"use-android-midi-api", - IDS_FLAGS_USE_ANDROID_MIDI_API_NAME, - IDS_FLAGS_USE_ANDROID_MIDI_API_DESCRIPTION, - kOsAndroid, + {"use-android-midi-api", IDS_FLAGS_USE_ANDROID_MIDI_API_NAME, + IDS_FLAGS_USE_ANDROID_MIDI_API_DESCRIPTION, kOsAndroid, SINGLE_VALUE_TYPE(switches::kUseAndroidMidiApi)}, #endif // defined(OS_ANDROID) #if defined(OS_WIN) - {"trace-export-events-to-etw", - IDS_FLAGS_TRACE_EXPORT_EVENTS_TO_ETW_NAME, - IDS_FLAGS_TRACE_EXPORT_EVENTS_TO_ETW_DESRIPTION, - kOsWin, - SINGLE_VALUE_TYPE(switches::kTraceExportEventsToETW)}, - {"merge-key-char-events", - IDS_FLAGS_MERGE_KEY_CHAR_EVENTS_NAME, - IDS_FLAGS_MERGE_KEY_CHAR_EVENTS_DESCRIPTION, - kOsWin, + {"trace-export-events-to-etw", IDS_FLAGS_TRACE_EXPORT_EVENTS_TO_ETW_NAME, + IDS_FLAGS_TRACE_EXPORT_EVENTS_TO_ETW_DESRIPTION, kOsWin, + SINGLE_VALUE_TYPE(switches::kTraceExportEventsToETW)}, + {"merge-key-char-events", IDS_FLAGS_MERGE_KEY_CHAR_EVENTS_NAME, + IDS_FLAGS_MERGE_KEY_CHAR_EVENTS_DESCRIPTION, kOsWin, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableMergeKeyCharEvents, switches::kDisableMergeKeyCharEvents)}, #endif // defined(OS_WIN) #if defined(ENABLE_BACKGROUND) - {"enable-push-api-background-mode", - IDS_FLAGS_PUSH_API_BACKGROUND_MODE_NAME, - IDS_FLAGS_PUSH_API_BACKGROUND_MODE_DESCRIPTION, - kOsMac | kOsWin | kOsLinux, + {"enable-push-api-background-mode", IDS_FLAGS_PUSH_API_BACKGROUND_MODE_NAME, + IDS_FLAGS_PUSH_API_BACKGROUND_MODE_DESCRIPTION, kOsMac | kOsWin | kOsLinux, ENABLE_DISABLE_VALUE_TYPE(switches::kEnablePushApiBackgroundMode, switches::kDisablePushApiBackgroundMode)}, #endif // defined(ENABLE_BACKGROUND) #if defined(OS_CHROMEOS) - {"cros-regions-mode", - IDS_FLAGS_CROS_REGIONS_MODE_NAME, - IDS_FLAGS_CROS_REGIONS_MODE_DESCRIPTION, - kOsCrOS, + {"cros-regions-mode", IDS_FLAGS_CROS_REGIONS_MODE_NAME, + IDS_FLAGS_CROS_REGIONS_MODE_DESCRIPTION, kOsCrOS, MULTI_VALUE_TYPE(kCrosRegionsModeChoices)}, #endif // OS_CHROMEOS #if defined(OS_WIN) - {"enable-ppapi-win32k-lockdown", - IDS_FLAGS_PPAPI_WIN32K_LOCKDOWN_NAME, + {"enable-ppapi-win32k-lockdown", IDS_FLAGS_PPAPI_WIN32K_LOCKDOWN_NAME, IDS_FLAGS_PPAPI_WIN32K_LOCKDOWN_DESCRIPTION, kOsWin, MULTI_VALUE_TYPE(kPpapiWin32kLockdown)}, #endif // defined(OS_WIN) #if defined(ENABLE_NOTIFICATIONS) && defined(OS_ANDROID) {"enable-web-notification-custom-layouts", IDS_FLAGS_ENABLE_WEB_NOTIFICATION_CUSTOM_LAYOUTS_NAME, - IDS_FLAGS_ENABLE_WEB_NOTIFICATION_CUSTOM_LAYOUTS_DESCRIPTION, - kOsAndroid, + IDS_FLAGS_ENABLE_WEB_NOTIFICATION_CUSTOM_LAYOUTS_DESCRIPTION, kOsAndroid, ENABLE_DISABLE_VALUE_TYPE(switches::kEnableWebNotificationCustomLayouts, switches::kDisableWebNotificationCustomLayouts)}, #endif // defined(ENABLE_NOTIFICATIONS) && defined(OS_ANDROID) @@ -2048,8 +1688,7 @@ #if defined(OS_ANDROID) {"disable-auto-hiding-toolbar-threshold", IDS_FLAGS_DISABLE_AUTO_HIDING_TOOLBAR_NAME, - IDS_FLAGS_DISABLE_AUTO_HIDING_TOOLBAR_DESCRIPTION, - kOsAndroid, + IDS_FLAGS_DISABLE_AUTO_HIDING_TOOLBAR_DESCRIPTION, kOsAndroid, SINGLE_VALUE_TYPE_AND_VALUE(switches::kDisableAutoHidingToolbarThreshold, "800")}, #endif @@ -2063,8 +1702,7 @@ autofill::switches::kDisableOfferUploadCreditCards)}, #endif // defined(TOOLKIT_VIEWS) || defined(OS_ANDROID) #if defined(OS_ANDROID) - {"tab-management-experiment-type", - IDS_FLAGS_HERB_PROTOTYPE_CHOICES_NAME, + {"tab-management-experiment-type", IDS_FLAGS_HERB_PROTOTYPE_CHOICES_NAME, IDS_FLAGS_HERB_PROTOTYPE_CHOICES_DESCRIPTION, kOsAndroid, MULTI_VALUE_TYPE(kHerbPrototypeChoices)}, {"enable-tab-switcher-in-document-mode", @@ -2072,46 +1710,35 @@ IDS_FLAGS_TAB_SWITCHER_IN_DOCUMENT_MODE_DESCRIPTION, kOsAndroid, SINGLE_VALUE_TYPE(switches::kEnableTabSwitcherInDocumentMode)}, #endif // OS_ANDROID - {"enable-md-history", - IDS_FLAGS_ENABLE_MATERIAL_DESIGN_HISTORY_NAME, - IDS_FLAGS_ENABLE_MATERIAL_DESIGN_HISTORY_DESCRIPTION, - kOsDesktop | kOsAndroid, - SINGLE_VALUE_TYPE(switches::kEnableMaterialDesignHistory)}, + {"enable-md-history", IDS_FLAGS_ENABLE_MATERIAL_DESIGN_HISTORY_NAME, + IDS_FLAGS_ENABLE_MATERIAL_DESIGN_HISTORY_DESCRIPTION, + kOsDesktop | kOsAndroid, + SINGLE_VALUE_TYPE(switches::kEnableMaterialDesignHistory)}, #if defined(OS_WIN) {"enable-windows-desktop-search-redirection", IDS_FLAGS_WINDOWS_DESKTOP_SEARCH_REDIRECTION_NAME, - IDS_FLAGS_WINDOWS_DESKTOP_SEARCH_REDIRECTION_DESCRIPTION, - kOsWin, + IDS_FLAGS_WINDOWS_DESKTOP_SEARCH_REDIRECTION_DESCRIPTION, kOsWin, FEATURE_VALUE_TYPE(kDesktopSearchRedirectionFeature)}, #endif // defined(OS_WIN) - {"force-ui-direction", - IDS_FLAGS_FORCE_UI_DIRECTION_NAME, - IDS_FLAGS_FORCE_UI_DIRECTION_DESCRIPTION, - kOsAll, + {"force-ui-direction", IDS_FLAGS_FORCE_UI_DIRECTION_NAME, + IDS_FLAGS_FORCE_UI_DIRECTION_DESCRIPTION, kOsAll, MULTI_VALUE_TYPE(kForceUIDirectionChoices)}, #if defined(ENABLE_EXTENSIONS) - {"enable-md-extensions", - IDS_FLAGS_ENABLE_MATERIAL_DESIGN_EXTENSIONS_NAME, - IDS_FLAGS_ENABLE_MATERIAL_DESIGN_EXTENSIONS_DESCRIPTION, - kOsDesktop, - SINGLE_VALUE_TYPE(switches::kEnableMaterialDesignExtensions)}, + {"enable-md-extensions", IDS_FLAGS_ENABLE_MATERIAL_DESIGN_EXTENSIONS_NAME, + IDS_FLAGS_ENABLE_MATERIAL_DESIGN_EXTENSIONS_DESCRIPTION, kOsDesktop, + SINGLE_VALUE_TYPE(switches::kEnableMaterialDesignExtensions)}, #endif #if defined(OS_WIN) || defined(OS_LINUX) - {"enable-input-ime-api", IDS_FLAGS_ENABLE_INPUT_IME_API_NAME, - IDS_FLAGS_ENABLE_INPUT_IME_API_DESCRIPTION, - kOsWin | kOsLinux, - ENABLE_DISABLE_VALUE_TYPE(switches::kEnableInputImeAPI, - switches::kDisableInputImeAPI)}, + {"enable-input-ime-api", IDS_FLAGS_ENABLE_INPUT_IME_API_NAME, + IDS_FLAGS_ENABLE_INPUT_IME_API_DESCRIPTION, kOsWin | kOsLinux, + ENABLE_DISABLE_VALUE_TYPE(switches::kEnableInputImeAPI, + switches::kDisableInputImeAPI)}, #endif // defined(OS_WIN) || defined(OS_LINUX) - {"enable-experimental-framework", - IDS_FLAGS_EXPERIMENTAL_FRAMEWORK_NAME, - IDS_FLAGS_EXPERIMENTAL_FRAMEWORK_DESCRIPTION, - kOsAll, + {"enable-experimental-framework", IDS_FLAGS_EXPERIMENTAL_FRAMEWORK_NAME, + IDS_FLAGS_EXPERIMENTAL_FRAMEWORK_DESCRIPTION, kOsAll, FEATURE_VALUE_TYPE(features::kExperimentalFramework)}, - {"enable-brotli", - IDS_FLAGS_ENABLE_BROTLI_NAME, - IDS_FLAGS_ENABLE_BROTLI_DESCRIPTION, - kOsAll, + {"enable-brotli", IDS_FLAGS_ENABLE_BROTLI_NAME, + IDS_FLAGS_ENABLE_BROTLI_DESCRIPTION, kOsAll, FEATURE_VALUE_TYPE(features::kBrotliEncoding)}, #if defined(OS_ANDROID) {"enable-unified-media-pipeline", @@ -2120,25 +1747,17 @@ SINGLE_VALUE_TYPE(switches::kEnableUnifiedMediaPipeline)}, #endif // OS_ANDROID #if defined(OS_ANDROID) - {"force-show-update-menu-item", - IDS_FLAGS_UPDATE_MENU_ITEM_NAME, - IDS_FLAGS_UPDATE_MENU_ITEM_DESCRIPTION, - kOsAndroid, + {"force-show-update-menu-item", IDS_FLAGS_UPDATE_MENU_ITEM_NAME, + IDS_FLAGS_UPDATE_MENU_ITEM_DESCRIPTION, kOsAndroid, SINGLE_VALUE_TYPE(switches::kForceShowUpdateMenuItem)}, - {"update-menu-item-summary", - IDS_FLAGS_UPDATE_MENU_ITEM_SUMMARY_NAME, - IDS_FLAGS_UPDATE_MENU_ITEM_SUMMARY_DESCRIPTION, - kOsAndroid, + {"update-menu-item-summary", IDS_FLAGS_UPDATE_MENU_ITEM_SUMMARY_NAME, + IDS_FLAGS_UPDATE_MENU_ITEM_SUMMARY_DESCRIPTION, kOsAndroid, MULTI_VALUE_TYPE(kUpdateMenuItemSummaryChoices)}, - {"force-show-update-menu-badge", - IDS_FLAGS_UPDATE_MENU_BADGE_NAME, - IDS_FLAGS_UPDATE_MENU_BADGE_DESCRIPTION, - kOsAndroid, + {"force-show-update-menu-badge", IDS_FLAGS_UPDATE_MENU_BADGE_NAME, + IDS_FLAGS_UPDATE_MENU_BADGE_DESCRIPTION, kOsAndroid, SINGLE_VALUE_TYPE(switches::kForceShowUpdateMenuBadge)}, - {"set-market-url-for-testing", - IDS_FLAGS_SET_MARKET_URL_FOR_TESTING_NAME, - IDS_FLAGS_SET_MARKET_URL_FOR_TESTING_DESCRIPTION, - kOsAndroid, + {"set-market-url-for-testing", IDS_FLAGS_SET_MARKET_URL_FOR_TESTING_NAME, + IDS_FLAGS_SET_MARKET_URL_FOR_TESTING_DESCRIPTION, kOsAndroid, SINGLE_VALUE_TYPE_AND_VALUE( switches::kMarketUrlForTesting, "https://play.google.com/store/apps/details?id=com.android.chrome")}, @@ -2148,26 +1767,19 @@ IDS_FLAGS_AUTOMATIC_TAB_DISCARDING_DESCRIPTION, kOsWin | kOsMac, FEATURE_VALUE_TYPE(features::kAutomaticTabDiscarding)}, #endif // OS_WIN || OS_MACOSX - {"enable-unsafe-es3-apis", - IDS_FLAGS_WEBGL2_NAME, - IDS_FLAGS_WEBGL2_DESCRIPTION, - kOsAll, + {"enable-unsafe-es3-apis", IDS_FLAGS_WEBGL2_NAME, + IDS_FLAGS_WEBGL2_DESCRIPTION, kOsAll, SINGLE_VALUE_TYPE(switches::kEnableUnsafeES3APIs)}, {"enable-webfonts-intervention", - IDS_FLAGS_ENABLE_WEBFONTS_INTERVENTION_NAME, - IDS_FLAGS_ENABLE_WEBFONTS_INTERVENTION_DESCRIPTION, - kOsAll, - FEATURE_VALUE_TYPE(features::kWebFontsIntervention)}, - {"enable-grouped-history", - IDS_FLAGS_ENABLE_GROUPED_HISTORY_NAME, - IDS_FLAGS_ENABLE_GROUPED_HISTORY_DESCRIPTION, - kOsDesktop, + IDS_FLAGS_ENABLE_WEBFONTS_INTERVENTION_NAME, + IDS_FLAGS_ENABLE_WEBFONTS_INTERVENTION_DESCRIPTION, kOsAll, + FEATURE_VALUE_TYPE(features::kWebFontsIntervention)}, + {"enable-grouped-history", IDS_FLAGS_ENABLE_GROUPED_HISTORY_NAME, + IDS_FLAGS_ENABLE_GROUPED_HISTORY_DESCRIPTION, kOsDesktop, SINGLE_VALUE_TYPE(switches::kHistoryEnableGroupByDomain)}, - {"enable-token-binding", - IDS_FLAGS_ENABLE_TOKEN_BINDING_NAME, - IDS_FLAGS_ENABLE_TOKEN_BINDING_DESCRIPTION, - kOsAll, - FEATURE_VALUE_TYPE(features::kTokenBinding)}, + {"enable-token-binding", IDS_FLAGS_ENABLE_TOKEN_BINDING_NAME, + IDS_FLAGS_ENABLE_TOKEN_BINDING_DESCRIPTION, kOsAll, + FEATURE_VALUE_TYPE(features::kTokenBinding)}, // NOTE: Adding new command-line switches requires adding corresponding // entries to enum "LoginCustomFlags" in histograms.xml. See note in // histograms.xml and don't forget to run AboutFlagsHistogramTest unit test.
diff --git a/chrome/browser/android/chrome_jni_registrar.cc b/chrome/browser/android/chrome_jni_registrar.cc index b1cefd2..526481f2 100644 --- a/chrome/browser/android/chrome_jni_registrar.cc +++ b/chrome/browser/android/chrome_jni_registrar.cc
@@ -119,6 +119,7 @@ #include "chrome/browser/supervised_user/child_accounts/child_account_service_android.h" #include "chrome/browser/supervised_user/supervised_user_content_provider_android.h" #include "chrome/browser/sync/profile_sync_service_android.h" +#include "chrome/browser/sync/sync_sessions_metrics_android.h" #include "chrome/browser/ui/android/autofill/autofill_dialog_controller_android.h" #include "chrome/browser/ui/android/autofill/autofill_dialog_result.h" #include "chrome/browser/ui/android/autofill/autofill_keyboard_accessory_view.h" @@ -351,6 +352,7 @@ {"StaticTabSceneLayer", chrome::android::RegisterStaticTabSceneLayer}, {"SupervisedUserContentProvider", SupervisedUserContentProvider::Register}, {"Sync", syncer::RegisterSyncJni}, + {"SyncSessionsMetrics", SyncSessionsMetricsAndroid::Register}, {"TabAndroid", TabAndroid::RegisterTabAndroid}, {"TabContentManager", chrome::android::RegisterTabContentManager}, {"TabListSceneLayer", RegisterTabListSceneLayer},
diff --git a/chrome/browser/android/popular_sites.h b/chrome/browser/android/popular_sites.h index 606a7c19..8818d51 100644 --- a/chrome/browser/android/popular_sites.h +++ b/chrome/browser/android/popular_sites.h
@@ -70,6 +70,8 @@ const std::vector<Site>& sites() const { return sites_; } + const base::FilePath& local_path() const { return popular_sites_local_path_; } + // Register preferences used by this class. static void RegisterProfilePrefs( user_prefs::PrefRegistrySyncable* user_prefs);
diff --git a/chrome/browser/android/preferences/website_preference_bridge.cc b/chrome/browser/android/preferences/website_preference_bridge.cc index 4e785c7..7da4840 100644 --- a/chrome/browser/android/preferences/website_preference_bridge.cc +++ b/chrome/browser/android/preferences/website_preference_bridge.cc
@@ -22,6 +22,7 @@ #include "chrome/browser/notifications/desktop_notification_profile_util.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/storage/storage_info_fetcher.h" #include "components/content_settings/core/browser/cookie_settings.h" #include "components/content_settings/core/browser/host_content_settings_map.h" #include "content/public/browser/browser_thread.h" @@ -595,51 +596,19 @@ DISALLOW_COPY_AND_ASSIGN(SiteDataDeleteHelper); }; -class StorageInfoFetcher : - public base::RefCountedThreadSafe<StorageInfoFetcher> { +class StorageInfoReadyCallback { public: - StorageInfoFetcher(storage::QuotaManager* quota_manager, - const JavaRef<jobject>& java_callback) + explicit StorageInfoReadyCallback(const JavaRef<jobject>& java_callback) : env_(base::android::AttachCurrentThread()), - quota_manager_(quota_manager), java_callback_(java_callback) { } - void Run() { - // QuotaManager must be called on IO thread, but java_callback must then be - // called back on UI thread. - BrowserThread::PostTask( - BrowserThread::IO, FROM_HERE, - base::Bind(&StorageInfoFetcher::GetUsageInfo, this)); - } - - protected: - virtual ~StorageInfoFetcher() {} - - private: - friend class base::RefCountedThreadSafe<StorageInfoFetcher>; - - void GetUsageInfo() { - // We will have no explicit owner as soon as we leave this method. - AddRef(); - quota_manager_->GetUsageInfo( - base::Bind(&StorageInfoFetcher::OnGetUsageInfo, this)); - } - - void OnGetUsageInfo(const storage::UsageInfoEntries& entries) { - entries_.insert(entries_.begin(), entries.begin(), entries.end()); - BrowserThread::PostTask( - BrowserThread::UI, FROM_HERE, - base::Bind(&StorageInfoFetcher::InvokeCallback, this)); - Release(); - } - - void InvokeCallback() { + void OnStorageInfoReady(const storage::UsageInfoEntries& entries) { ScopedJavaLocalRef<jobject> list = Java_WebsitePreferenceBridge_createStorageInfoList(env_); storage::UsageInfoEntries::const_iterator i; - for (i = entries_.begin(); i != entries_.end(); ++i) { + for (i = entries.begin(); i != entries.end(); ++i) { if (i->usage <= 0) continue; ScopedJavaLocalRef<jstring> host = ConvertUTF8ToJavaString(env_, i->host); @@ -647,72 +616,36 @@ Java_WebsitePreferenceBridge_insertStorageInfoIntoList( env_, list.obj(), host.obj(), i->type, i->usage); } + Java_StorageInfoReadyCallback_onStorageInfoReady( env_, java_callback_.obj(), list.obj()); + + delete this; } + private: JNIEnv* env_; - storage::QuotaManager* quota_manager_; ScopedJavaGlobalRef<jobject> java_callback_; - storage::UsageInfoEntries entries_; - - DISALLOW_COPY_AND_ASSIGN(StorageInfoFetcher); }; -class StorageDataDeleter : - public base::RefCountedThreadSafe<StorageDataDeleter> { +class StorageInfoClearedCallback { public: - StorageDataDeleter(storage::QuotaManager* quota_manager, - const std::string& host, - storage::StorageType type, - const JavaRef<jobject>& java_callback) + explicit StorageInfoClearedCallback(const JavaRef<jobject>& java_callback) : env_(base::android::AttachCurrentThread()), - quota_manager_(quota_manager), - host_(host), - type_(type), java_callback_(java_callback) { } - void Run() { - // QuotaManager must be called on IO thread, but java_callback must then be - // called back on UI thread. Grant ourself an extra reference to avoid - // being deleted after DeleteHostData will return. - AddRef(); - BrowserThread::PostTask( - BrowserThread::IO, FROM_HERE, - base::Bind(&storage::QuotaManager::DeleteHostData, - quota_manager_, - host_, - type_, - storage::QuotaClient::kAllClientsMask, - base::Bind(&StorageDataDeleter::OnHostDataDeleted, - this))); - } + void OnStorageInfoCleared(storage::QuotaStatusCode code) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); - protected: - virtual ~StorageDataDeleter() {} - - private: - friend class base::RefCountedThreadSafe<StorageDataDeleter>; - - void OnHostDataDeleted(storage::QuotaStatusCode) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); - quota_manager_->ResetUsageTracker(type_); - BrowserThread::PostTask( - BrowserThread::UI, FROM_HERE, - base::Bind(&StorageDataDeleter::InvokeCallback, this)); - Release(); - } - - void InvokeCallback() { Java_StorageInfoClearedCallback_onStorageInfoCleared( env_, java_callback_.obj()); + + delete this; } + private: JNIEnv* env_; - storage::QuotaManager* quota_manager_; - std::string host_; - storage::StorageType type_; ScopedJavaGlobalRef<jobject> java_callback_; }; @@ -785,10 +718,15 @@ const JavaParamRef<jclass>& clazz, const JavaParamRef<jobject>& java_callback) { Profile* profile = ProfileManager::GetActiveUserProfile(); - scoped_refptr<StorageInfoFetcher> storage_info_fetcher(new StorageInfoFetcher( - content::BrowserContext::GetDefaultStoragePartition( - profile)->GetQuotaManager(), java_callback)); - storage_info_fetcher->Run(); + + // storage_info_ready_callback will delete itself when it is run. + StorageInfoReadyCallback* storage_info_ready_callback = + new StorageInfoReadyCallback(java_callback); + scoped_refptr<StorageInfoFetcher> storage_info_fetcher = + new StorageInfoFetcher(profile); + storage_info_fetcher->FetchStorageInfo( + base::Bind(&StorageInfoReadyCallback::OnStorageInfoReady, + base::Unretained(storage_info_ready_callback))); } static void ClearLocalStorageData(JNIEnv* env, @@ -808,12 +746,17 @@ const JavaParamRef<jobject>& java_callback) { Profile* profile = ProfileManager::GetActiveUserProfile(); std::string host = ConvertJavaStringToUTF8(env, jhost); - scoped_refptr<StorageDataDeleter> storage_data_deleter(new StorageDataDeleter( - content::BrowserContext::GetDefaultStoragePartition( - profile)->GetQuotaManager(), + + // storage_info_cleared_callback will delete itself when it is run. + StorageInfoClearedCallback* storage_info_cleared_callback = + new StorageInfoClearedCallback(java_callback); + scoped_refptr<StorageInfoFetcher> storage_info_fetcher = + new StorageInfoFetcher(profile); + storage_info_fetcher->ClearStorage( host, - static_cast<storage::StorageType>(type), java_callback)); - storage_data_deleter->Run(); + static_cast<storage::StorageType>(type), + base::Bind(&StorageInfoClearedCallback::OnStorageInfoCleared, + base::Unretained(storage_info_cleared_callback))); } static void ClearCookieData(JNIEnv* env,
diff --git a/chrome/browser/autofill/android/personal_data_manager_android.cc b/chrome/browser/autofill/android/personal_data_manager_android.cc index 1b79b70..86f424d 100644 --- a/chrome/browser/autofill/android/personal_data_manager_android.cc +++ b/chrome/browser/autofill/android/personal_data_manager_android.cc
@@ -51,23 +51,25 @@ env, ConvertUTF8ToJavaString(env, profile.guid()).obj(), ConvertUTF8ToJavaString(env, profile.origin()).obj(), profile.record_type() == AutofillProfile::LOCAL_PROFILE, - ConvertUTF16ToJavaString(env, profile.GetRawInfo(NAME_FULL)).obj(), + ConvertUTF16ToJavaString(env, profile.GetInfo( + AutofillType(NAME_FULL), + g_browser_process->GetApplicationLocale())).obj(), ConvertUTF16ToJavaString(env, profile.GetRawInfo(COMPANY_NAME)).obj(), ConvertUTF16ToJavaString( env, profile.GetRawInfo(ADDRESS_HOME_STREET_ADDRESS)).obj(), - ConvertUTF16ToJavaString(env, profile.GetRawInfo(ADDRESS_HOME_STATE)) - .obj(), - ConvertUTF16ToJavaString(env, profile.GetRawInfo(ADDRESS_HOME_CITY)) - .obj(), + ConvertUTF16ToJavaString( + env, profile.GetRawInfo(ADDRESS_HOME_STATE)).obj(), + ConvertUTF16ToJavaString( + env, profile.GetRawInfo(ADDRESS_HOME_CITY)).obj(), ConvertUTF16ToJavaString( env, profile.GetRawInfo(ADDRESS_HOME_DEPENDENT_LOCALITY)).obj(), ConvertUTF16ToJavaString(env, profile.GetRawInfo(ADDRESS_HOME_ZIP)).obj(), ConvertUTF16ToJavaString( env, profile.GetRawInfo(ADDRESS_HOME_SORTING_CODE)).obj(), - ConvertUTF16ToJavaString(env, profile.GetRawInfo(ADDRESS_HOME_COUNTRY)) - .obj(), - ConvertUTF16ToJavaString(env, profile.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)) - .obj(), + ConvertUTF16ToJavaString( + env, profile.GetRawInfo(ADDRESS_HOME_COUNTRY)).obj(), + ConvertUTF16ToJavaString( + env, profile.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)).obj(), ConvertUTF16ToJavaString(env, profile.GetRawInfo(EMAIL_ADDRESS)).obj(), ConvertUTF8ToJavaString(env, profile.language_code()).obj()); }
diff --git a/chrome/browser/autofill/form_structure_browsertest.cc b/chrome/browser/autofill/form_structure_browsertest.cc index 8950d0b..18ef3dc 100644 --- a/chrome/browser/autofill/form_structure_browsertest.cc +++ b/chrome/browser/autofill/form_structure_browsertest.cc
@@ -132,6 +132,8 @@ } IN_PROC_BROWSER_TEST_P(FormStructureBrowserTest, DataDrivenHeuristics) { + // Prints the path of the test to be executed. + LOG(INFO) << GetParam().MaybeAsASCII(); RunOneDataDrivenTest(GetParam(), GetOutputDirectory(kTestName)); }
diff --git a/chrome/browser/bookmarks/OWNERS b/chrome/browser/bookmarks/OWNERS index 5d70523..90b3e80 100644 --- a/chrome/browser/bookmarks/OWNERS +++ b/chrome/browser/bookmarks/OWNERS
@@ -1,3 +1 @@ sky@chromium.org - -per-file enhanced_bookmarks_features*=wittman@chromium.org \ No newline at end of file
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index 4bb50bd..6e7a230 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -822,6 +822,13 @@ // SiteInstance URL - "chrome-guest://app_id/persist?partition". if (site.SchemeIs(content::kGuestScheme)) partition_id = site.spec(); +#if defined(ENABLE_EXTENSIONS) + // The partition ID for extensions with isolated storage is treated similarly + // to the above. + else if (site.SchemeIs(extensions::kExtensionScheme) && + extensions::util::SiteHasIsolatedStorage(site, browser_context)) + partition_id = site.spec(); +#endif DCHECK(IsValidStoragePartitionId(browser_context, partition_id)); return partition_id;
diff --git a/chrome/browser/chromeos/app_mode/kiosk_app_data.cc b/chrome/browser/chromeos/app_mode/kiosk_app_data.cc index 1c5a874..85da09c 100644 --- a/chrome/browser/chromeos/app_mode/kiosk_app_data.cc +++ b/chrome/browser/chromeos/app_mode/kiosk_app_data.cc
@@ -33,6 +33,7 @@ #include "extensions/common/manifest.h" #include "extensions/common/manifest_constants.h" #include "extensions/common/manifest_handlers/icons_handler.h" +#include "extensions/common/manifest_handlers/kiosk_mode_info.h" #include "ui/gfx/codec/png_codec.h" #include "ui/gfx/image/image.h" @@ -45,6 +46,7 @@ // Keys for local state data. See sample layout in KioskAppManager. const char kKeyName[] = "name"; const char kKeyIcon[] = "icon"; +const char kKeyRequiredPlatformVersion[] = "required_platform_version"; const char kInvalidWebstoreResponseError[] = "Invalid Chrome Web Store reponse"; @@ -113,6 +115,9 @@ const base::FilePath& crx_file() const { return crx_file_; } const std::string& name() const { return name_; } const SkBitmap& icon() const { return icon_; } + const std::string& required_platform_version() const { + return required_platform_version_; + } private: ~CrxLoader() override {}; @@ -128,6 +133,8 @@ success_ = true; name_ = extension->name(); icon_ = install_icon; + required_platform_version_ = + extensions::KioskModeInfo::Get(extension)->required_platform_version; NotifyFinishedOnBlockingPool(); } void OnUnpackFailure(const extensions::CrxInstallError& error) override { @@ -183,6 +190,7 @@ // Extracted meta data. std::string name_; SkBitmap icon_; + std::string required_platform_version_; DISALLOW_COPY_AND_ASSIGN(CrxLoader); }; @@ -349,8 +357,20 @@ return; } + std::string required_platform_version; + if (manifest.HasPath( + extensions::manifest_keys::kKioskRequiredPlatformVersion) && + (!manifest.GetString( + extensions::manifest_keys::kKioskRequiredPlatformVersion, + &required_platform_version) || + !extensions::KioskModeInfo::IsValidPlatformVersion( + required_platform_version))) { + ReportFailure(); + return; + } + if (client_) - client_->OnWebstoreParseSuccess(icon); + client_->OnWebstoreParseSuccess(icon, required_platform_version); delete this; } void OnWebstoreParseFailure(const std::string& id, @@ -418,6 +438,8 @@ DCHECK_EQ(app_id_, app->id()); name_ = app->name(); + required_platform_version_ = + extensions::KioskModeInfo::Get(app)->required_platform_version; const int kIconSize = extension_misc::EXTENSION_ICON_LARGE; extensions::ExtensionResource image = extensions::IconsInfo::GetIconResource( @@ -444,6 +466,10 @@ extension_urls::IsWebstoreUpdateUrl(update_url_); } +void KioskAppData::SetStatusForTest(Status status) { + SetStatus(status); +} + void KioskAppData::SetStatus(Status status) { if (status_ == status) return; @@ -471,9 +497,12 @@ } bool KioskAppData::LoadFromCache() { - std::string app_key = std::string(KioskAppManager::kKeyApps) + '.' + app_id_; - std::string name_key = app_key + '.' + kKeyName; - std::string icon_path_key = app_key + '.' + kKeyIcon; + const std::string app_key = + std::string(KioskAppManager::kKeyApps) + '.' + app_id_; + const std::string name_key = app_key + '.' + kKeyName; + const std::string icon_path_key = app_key + '.' + kKeyIcon; + const std::string required_platform_version_key = + app_key + '.' + kKeyRequiredPlatformVersion; PrefService* local_state = g_browser_process->local_state(); const base::DictionaryValue* dict = @@ -482,7 +511,9 @@ icon_path_.clear(); std::string icon_path_string; if (!dict->GetString(name_key, &name_) || - !dict->GetString(icon_path_key, &icon_path_string)) { + !dict->GetString(icon_path_key, &icon_path_string) || + !dict->GetString(required_platform_version_key, + &required_platform_version_)) { return false; } icon_path_ = base::FilePath(icon_path_string); @@ -493,22 +524,31 @@ } void KioskAppData::SetCache(const std::string& name, - const base::FilePath& icon_path) { - std::string app_key = std::string(KioskAppManager::kKeyApps) + '.' + app_id_; - std::string name_key = app_key + '.' + kKeyName; - std::string icon_path_key = app_key + '.' + kKeyIcon; + const base::FilePath& icon_path, + const std::string& required_platform_version) { + name_ = name; + icon_path_ = icon_path; + required_platform_version_ = required_platform_version; + + const std::string app_key = + std::string(KioskAppManager::kKeyApps) + '.' + app_id_; + const std::string name_key = app_key + '.' + kKeyName; + const std::string icon_path_key = app_key + '.' + kKeyIcon; + const std::string required_platform_version_key = + app_key + '.' + kKeyRequiredPlatformVersion; PrefService* local_state = g_browser_process->local_state(); DictionaryPrefUpdate dict_update(local_state, KioskAppManager::kKioskDictionaryName); dict_update->SetString(name_key, name); dict_update->SetString(icon_path_key, icon_path.value()); - icon_path_ = icon_path; + dict_update->SetString(required_platform_version_key, + required_platform_version); } -void KioskAppData::SetCache(const std::string& name, const SkBitmap& icon) { - name_ = name; - +void KioskAppData::SetCache(const std::string& name, + const SkBitmap& icon, + const std::string& required_platform_version) { icon_ = gfx::ImageSkia::CreateFrom1xBitmap(icon); icon_.MakeThreadSafe(); @@ -527,16 +567,17 @@ FROM_HERE, base::Bind(&SaveIconToLocalOnBlockingPool, icon_path, raw_icon)); - SetCache(name, icon_path); + SetCache(name, icon_path, required_platform_version); } void KioskAppData::OnExtensionIconLoaded(const gfx::Image& icon) { if (icon.IsEmpty()) { LOG(WARNING) << "Failed to load icon from installed app" << ", id=" << app_id_; - SetCache(name_, *extensions::util::GetDefaultAppIcon().bitmap()); + SetCache(name_, *extensions::util::GetDefaultAppIcon().bitmap(), + required_platform_version_); } else { - SetCache(name_, icon.AsBitmap()); + SetCache(name_, icon.AsBitmap(), required_platform_version_); } SetStatus(STATUS_LOADED); @@ -553,8 +594,10 @@ StartFetch(); } -void KioskAppData::OnWebstoreParseSuccess(const SkBitmap& icon) { - SetCache(name_, icon); +void KioskAppData::OnWebstoreParseSuccess( + const SkBitmap& icon, + const std::string& required_platform_version) { + SetCache(name_, icon, required_platform_version); SetStatus(STATUS_LOADED); } @@ -655,7 +698,7 @@ SkBitmap icon = crx_loader->icon(); if (icon.empty()) icon = *extensions::util::GetDefaultAppIcon().bitmap(); - SetCache(crx_loader->name(), icon); + SetCache(crx_loader->name(), icon, crx_loader->required_platform_version()); SetStatus(STATUS_LOADED); }
diff --git a/chrome/browser/chromeos/app_mode/kiosk_app_data.h b/chrome/browser/chromeos/app_mode/kiosk_app_data.h index 57509e6..c50fec8 100644 --- a/chrome/browser/chromeos/app_mode/kiosk_app_data.h +++ b/chrome/browser/chromeos/app_mode/kiosk_app_data.h
@@ -77,8 +77,13 @@ const std::string& name() const { return name_; } const GURL& update_url() const { return update_url_; } const gfx::ImageSkia& icon() const { return icon_; } + const std::string& required_platform_version() const { + return required_platform_version_; + } Status status() const { return status_; } + void SetStatusForTest(Status status); + private: class CrxLoader; class IconLoader; @@ -93,10 +98,14 @@ bool LoadFromCache(); // Sets the cached data. - void SetCache(const std::string& name, const base::FilePath& icon_path); + void SetCache(const std::string& name, + const base::FilePath& icon_path, + const std::string& required_platform_version); // Helper to set the cached data using a SkBitmap icon. - void SetCache(const std::string& name, const SkBitmap& icon); + void SetCache(const std::string& name, + const SkBitmap& icon, + const std::string& required_platform_version); // Callback for extensions::ImageLoader. void OnExtensionIconLoaded(const gfx::Image& icon); @@ -106,7 +115,8 @@ void OnIconLoadFailure(); // Callbacks for WebstoreDataParser - void OnWebstoreParseSuccess(const SkBitmap& icon); + void OnWebstoreParseSuccess(const SkBitmap& icon, + const std::string& required_platform_version); void OnWebstoreParseFailure(); // Starts to fetch data from web store. @@ -139,6 +149,7 @@ std::string name_; GURL update_url_; gfx::ImageSkia icon_; + std::string required_platform_version_; scoped_ptr<extensions::WebstoreDataFetcher> webstore_fetcher_; base::FilePath icon_path_;
diff --git a/chrome/browser/chromeos/app_mode/kiosk_app_manager.cc b/chrome/browser/chromeos/app_mode/kiosk_app_manager.cc index f20e31c..84b3eb2 100644 --- a/chrome/browser/chromeos/app_mode/kiosk_app_manager.cc +++ b/chrome/browser/chromeos/app_mode/kiosk_app_manager.cc
@@ -72,7 +72,7 @@ void CancelDelayedCryptohomeRemoval(const std::string& user_id) { PrefService* local_state = g_browser_process->local_state(); DictionaryPrefUpdate dict_update(local_state, kKioskUsersToRemove); - dict_update->RemoveWithoutPathExpansion(user_id, NULL); + dict_update->RemoveWithoutPathExpansion(user_id, nullptr); local_state->CommitPendingWrite(); } @@ -147,7 +147,7 @@ // static void KioskAppManager::Shutdown() { - if (instance == NULL) + if (instance == nullptr) return; instance.Pointer()->CleanUp(); @@ -167,17 +167,16 @@ base::Bind(&PerformDelayedCryptohomeRemovals)); } -KioskAppManager::App::App( - const KioskAppData& data, - bool is_extension_pending, - bool auto_launched_with_zero_delay) +KioskAppManager::App::App(const KioskAppData& data, + bool is_extension_pending, + bool auto_launched_with_zero_delay) : app_id(data.app_id()), user_id(data.user_id()), name(data.name()), icon(data.icon()), + required_platform_version(data.required_platform_version()), is_loading(data.IsLoading() || is_extension_pending), - was_auto_launched_with_zero_delay(auto_launched_with_zero_delay) { -} + was_auto_launched_with_zero_delay(auto_launched_with_zero_delay) {} KioskAppManager::App::App() : is_loading(false), was_auto_launched_with_zero_delay(false) {} @@ -345,6 +344,14 @@ return GetAutoLoginState() == AUTOLOGIN_APPROVED; } +std::string KioskAppManager::GetAutoLaunchAppRequiredPlatformVersion() const { + if (!IsAutoLaunchEnabled()) + return std::string(); + + const KioskAppData* data = GetAppData(GetAutoLaunchApp()); + return data == nullptr ? std::string() : data->required_platform_version(); +} + void KioskAppManager::AddApp(const std::string& app_id, OwnerSettingsServiceChromeOS* service) { std::vector<policy::DeviceLocalAccount> device_local_accounts = @@ -500,7 +507,7 @@ } void KioskAppManager::InstallFromCache(const std::string& id) { - const base::DictionaryValue* extension = NULL; + const base::DictionaryValue* extension = nullptr; if (external_cache_->cached_extensions()->GetDictionary(id, &extension)) { scoped_ptr<base::DictionaryValue> prefs(new base::DictionaryValue); base::DictionaryValue* extension_copy = extension->DeepCopy(); @@ -603,7 +610,7 @@ return data; } - return NULL; + return nullptr; } KioskAppData* KioskAppManager::GetAppDataMutable(const std::string& app_id) {
diff --git a/chrome/browser/chromeos/app_mode/kiosk_app_manager.h b/chrome/browser/chromeos/app_mode/kiosk_app_manager.h index ee80b49..85cb345c 100644 --- a/chrome/browser/chromeos/app_mode/kiosk_app_manager.h +++ b/chrome/browser/chromeos/app_mode/kiosk_app_manager.h
@@ -72,6 +72,7 @@ std::string user_id; std::string name; gfx::ImageSkia icon; + std::string required_platform_version; bool is_loading; bool was_auto_launched_with_zero_delay; }; @@ -136,6 +137,9 @@ // Enable auto launch setter. void SetEnableAutoLaunch(bool value); + // Returns the cached required platform version of the auto launch kiosk app. + std::string GetAutoLaunchAppRequiredPlatformVersion() const; + // Adds/removes a kiosk app by id. When removed, all locally cached data // will be removed as well. void AddApp(const std::string& app_id, OwnerSettingsServiceChromeOS* service);
diff --git a/chrome/browser/chromeos/app_mode/kiosk_app_manager_browsertest.cc b/chrome/browser/chromeos/app_mode/kiosk_app_manager_browsertest.cc index 545646b..418b0b75 100644 --- a/chrome/browser/chromeos/app_mode/kiosk_app_manager_browsertest.cc +++ b/chrome/browser/chromeos/app_mode/kiosk_app_manager_browsertest.cc
@@ -5,18 +5,19 @@ #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" #include <stddef.h> +#include <utility> #include "base/command_line.h" #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" #include "base/macros.h" #include "base/memory/scoped_ptr.h" -#include "base/message_loop/message_loop.h" #include "base/path_service.h" #include "base/strings/stringprintf.h" #include "base/values.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/app_mode/fake_cws.h" +#include "chrome/browser/chromeos/app_mode/kiosk_app_data.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_manager_observer.h" #include "chrome/browser/chromeos/ownership/fake_owner_settings_service.h" #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" @@ -85,15 +86,21 @@ runner_quit_task.Run(); } -scoped_refptr<extensions::Extension> MakeApp(const std::string& name, - const std::string& version, - const std::string& url, - const std::string& id) { - std::string err; +scoped_refptr<extensions::Extension> MakeKioskApp( + const std::string& name, + const std::string& version, + const std::string& id, + const std::string& required_platform_version) { base::DictionaryValue value; value.SetString("name", name); value.SetString("version", version); - value.SetString("app.launch.web_url", url); + scoped_ptr<base::ListValue> scripts(new base::ListValue); + scripts->AppendString("main.js"); + value.Set("app.background.scripts", std::move(scripts)); + value.SetBoolean("kiosk_enabled", true); + value.SetString("kiosk.required_platform_version", required_platform_version); + + std::string err; scoped_refptr<extensions::Extension> app = extensions::Extension::Create( base::FilePath(), @@ -108,13 +115,8 @@ class AppDataLoadWaiter : public KioskAppManagerObserver { public: - AppDataLoadWaiter(KioskAppManager* manager, int data_loaded_threshold) - : runner_(NULL), - manager_(manager), - loaded_(false), - quit_(false), - data_change_count_(0), - data_loaded_threshold_(data_loaded_threshold) { + AppDataLoadWaiter(KioskAppManager* manager, int expected_data_change) + : manager_(manager), expected_data_change_(expected_data_change) { manager_->AddObserver(this); } @@ -127,13 +129,20 @@ runner_->Run(); } + void Reset() { + quit_ = false; + data_change_count_ = 0; + data_load_failure_count_ = 0; + } + bool loaded() const { return loaded_; } + int data_load_failure_count() const { return data_load_failure_count_; } private: // KioskAppManagerObserver overrides: void OnKioskAppDataChanged(const std::string& app_id) override { ++data_change_count_; - if (data_change_count_ < data_loaded_threshold_) + if (data_change_count_ < expected_data_change_) return; loaded_ = true; quit_ = true; @@ -142,6 +151,7 @@ } void OnKioskAppDataLoadFailure(const std::string& app_id) override { + ++data_load_failure_count_; loaded_ = false; quit_ = true; if (runner_.get()) @@ -158,14 +168,45 @@ scoped_refptr<content::MessageLoopRunner> runner_; KioskAppManager* manager_; - bool loaded_; - bool quit_; - int data_change_count_; - int data_loaded_threshold_; + bool loaded_ = false; + bool quit_ = false; + int data_change_count_ = 0; + int expected_data_change_; + int data_load_failure_count_ = 0; DISALLOW_COPY_AND_ASSIGN(AppDataLoadWaiter); }; +// A class to wait for ExternalCache to finish putting the extension crx. +class ExternalCachePutWaiter { + public: + ExternalCachePutWaiter() {} + ~ExternalCachePutWaiter() {} + + void Wait() { + if (quit_) + return; + runner_ = new content::MessageLoopRunner; + runner_->Run(); + } + + void OnPutExtension(const std::string& id, bool success) { + success_ = success; + quit_ = true; + if (runner_.get()) + runner_->Quit(); + } + + bool success() const { return success_; } + + private: + scoped_refptr<content::MessageLoopRunner> runner_; + bool quit_ = false; + bool success_ = false; + + DISALLOW_COPY_AND_ASSIGN(ExternalCachePutWaiter); +}; + } // namespace class KioskAppManagerTest : public InProcessBrowserTest { @@ -250,19 +291,22 @@ void SetExistingApp(const std::string& app_id, const std::string& app_name, - const std::string& icon_file_name) { + const std::string& icon_file_name, + const std::string& required_platform_version) { base::FilePath test_dir; ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_dir)); base::FilePath data_dir = test_dir.AppendASCII("chromeos/app_mode/"); // Copy the icon file to temp dir for using because ClearAppData test // deletes it. - base::FilePath icon_path = temp_dir_.path().AppendASCII(icon_file_name); - base::CopyFile(data_dir.AppendASCII(icon_file_name), icon_path); + base::FilePath icon_path = + CopyFileToTempDir(data_dir.AppendASCII(icon_file_name)); scoped_ptr<base::DictionaryValue> apps_dict(new base::DictionaryValue); apps_dict->SetString(app_id + ".name", app_name); apps_dict->SetString(app_id + ".icon", icon_path.MaybeAsASCII()); + apps_dict->SetString(app_id + ".required_platform_version", + required_platform_version); PrefService* local_state = g_browser_process->local_state(); DictionaryPrefUpdate dict_update(local_state, @@ -272,16 +316,18 @@ // Make the app appear in device settings. base::ListValue device_local_accounts; scoped_ptr<base::DictionaryValue> entry(new base::DictionaryValue); - entry->SetStringWithoutPathExpansion( - kAccountsPrefDeviceLocalAccountsKeyId, - app_id + "_id"); + // Fake an account id. Note this needs to match GenerateKioskAppAccountId + // in kiosk_app_manager.cc to make SetAutoLaunchApp work with the + // existing app entry created here. + entry->SetStringWithoutPathExpansion(kAccountsPrefDeviceLocalAccountsKeyId, + app_id + "@kiosk-apps"); entry->SetIntegerWithoutPathExpansion( kAccountsPrefDeviceLocalAccountsKeyType, policy::DeviceLocalAccount::TYPE_KIOSK_APP); entry->SetStringWithoutPathExpansion( kAccountsPrefDeviceLocalAccountsKeyKioskAppId, app_id); - device_local_accounts.Append(entry.release()); + device_local_accounts.Append(std::move(entry)); owner_settings_service_->Set(kAccountsPrefDeviceLocalAccounts, device_local_accounts); } @@ -294,11 +340,62 @@ void UpdateAppData() { manager()->UpdateAppData(); } + void CheckAppData(const std::string& app_id, + const std::string& expected_app_name, + const std::string& expected_required_platform_version) { + // Check manifest data is cached correctly. + KioskAppManager::Apps apps; + manager()->GetApps(&apps); + ASSERT_EQ(1u, apps.size()); + EXPECT_EQ(app_id, apps[0].app_id); + EXPECT_EQ(expected_app_name, apps[0].name); + EXPECT_FALSE(apps[0].icon.size().IsEmpty()); + EXPECT_EQ(expected_required_platform_version, + apps[0].required_platform_version); + } + + void CheckAppDataAndCache( + const std::string& app_id, + const std::string& expected_app_name, + const std::string& expected_required_platform_version) { + CheckAppData(app_id, expected_app_name, expected_required_platform_version); + + // Check data is cached in local state correctly. + PrefService* local_state = g_browser_process->local_state(); + const base::DictionaryValue* dict = + local_state->GetDictionary(KioskAppManager::kKioskDictionaryName); + + std::string name; + const std::string name_key = "apps." + app_id + ".name"; + EXPECT_TRUE(dict->GetString(name_key, &name)); + EXPECT_EQ(expected_app_name, name); + + std::string icon_path_string; + const std::string icon_path_key = "apps." + app_id + ".icon"; + EXPECT_TRUE(dict->GetString(icon_path_key, &icon_path_string)); + + std::string required_platform_version; + const std::string required_platform_version_key = + "apps." + app_id + ".required_platform_version"; + EXPECT_TRUE(dict->GetString(required_platform_version_key, + &required_platform_version)); + EXPECT_EQ(expected_required_platform_version, required_platform_version); + + base::FilePath expected_icon_path; + ASSERT_TRUE(PathService::Get(chrome::DIR_USER_DATA, &expected_icon_path)); + expected_icon_path = + expected_icon_path.AppendASCII(KioskAppManager::kIconCacheDir) + .AppendASCII(app_id) + .AddExtension(".png"); + EXPECT_EQ(expected_icon_path.value(), icon_path_string); + } + void RunAddNewAppTest(const std::string& id, - const std::string& version, - const std::string& app_name) { + const std::string& expected_version, + const std::string& expected_app_name, + const std::string& expected_required_platform_version) { std::string crx_file_name = id + ".crx"; - fake_cws_->SetUpdateCrx(id, crx_file_name, version); + fake_cws_->SetUpdateCrx(id, crx_file_name, expected_version); AppDataLoadWaiter waiter(manager(), 3); manager()->AddApp(id, owner_settings_service_.get()); @@ -310,7 +407,7 @@ std::string crx_version; EXPECT_TRUE(GetCachedCrx(id, &crx_path, &crx_version)); EXPECT_TRUE(base::PathExists(crx_path)); - EXPECT_EQ(version, crx_version); + EXPECT_EQ(expected_version, crx_version); // Verify the original crx file is identical to the cached file. base::FilePath test_data_dir; PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir); @@ -320,35 +417,20 @@ EXPECT_TRUE(base::PathExists(src_file_path)); EXPECT_TRUE(base::ContentsEqual(src_file_path, crx_path)); - // Check manifest data is cached correctly. - KioskAppManager::Apps apps; - manager()->GetApps(&apps); - ASSERT_EQ(1u, apps.size()); - EXPECT_EQ(id, apps[0].app_id); - EXPECT_EQ(app_name, apps[0].name); - EXPECT_EQ(gfx::Size(16, 16), apps[0].icon.size()); + CheckAppDataAndCache(id, expected_app_name, + expected_required_platform_version); + } - // Check data is cached in local state. - PrefService* local_state = g_browser_process->local_state(); - const base::DictionaryValue* dict = - local_state->GetDictionary(KioskAppManager::kKioskDictionaryName); + // Copies the given file into temp dir and returns the full path + // of the copied file. + base::FilePath CopyFileToTempDir(const base::FilePath& file) { + base::FilePath target_file = temp_dir_.path().Append(file.BaseName()); + CHECK(base::CopyFile(file, target_file)); + return target_file; + } - std::string name; - std::string name_key = "apps." + id + ".name"; - EXPECT_TRUE(dict->GetString(name_key, &name)); - EXPECT_EQ(apps[0].name, name); - - std::string icon_path_string; - std::string icon_path_key = "apps." + id + ".icon"; - EXPECT_TRUE(dict->GetString(icon_path_key, &icon_path_string)); - - base::FilePath expected_icon_path; - ASSERT_TRUE(PathService::Get(chrome::DIR_USER_DATA, &expected_icon_path)); - expected_icon_path = - expected_icon_path.AppendASCII(KioskAppManager::kIconCacheDir) - .AppendASCII(apps[0].app_id) - .AddExtension(".png"); - EXPECT_EQ(expected_icon_path.value(), icon_path_string); + KioskAppData* GetAppDataMutable(const std::string& app_id) { + return manager()->GetAppDataMutable(app_id); } KioskAppManager* manager() const { return KioskAppManager::Get(); } @@ -429,23 +511,18 @@ } IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, LoadCached) { - SetExistingApp("app_1", "Cached App1 Name", "red16x16.png"); + SetExistingApp("app_1", "Cached App1 Name", "red16x16.png", "1234"); fake_cws()->SetNoUpdate("app_1"); AppDataLoadWaiter waiter(manager(), 1); waiter.Wait(); EXPECT_TRUE(waiter.loaded()); - KioskAppManager::Apps apps; - manager()->GetApps(&apps); - EXPECT_EQ(1u, apps.size()); - EXPECT_EQ("app_1", apps[0].app_id); - EXPECT_EQ("Cached App1 Name", apps[0].name); - EXPECT_EQ(gfx::Size(16, 16), apps[0].icon.size()); + CheckAppData("app_1", "Cached App1 Name", "1234"); } IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, ClearAppData) { - SetExistingApp("app_1", "Cached App1 Name", "red16x16.png"); + SetExistingApp("app_1", "Cached App1 Name", "red16x16.png", ""); PrefService* local_state = g_browser_process->local_state(); const base::DictionaryValue* dict = @@ -460,31 +537,73 @@ } IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, UpdateAppDataFromProfile) { - SetExistingApp("app_1", "Cached App1 Name", "red16x16.png"); + SetExistingApp("app_1", "Cached App1 Name", "red16x16.png", ""); fake_cws()->SetNoUpdate("app_1"); AppDataLoadWaiter waiter(manager(), 1); waiter.Wait(); EXPECT_TRUE(waiter.loaded()); - KioskAppManager::Apps apps; - manager()->GetApps(&apps); - EXPECT_EQ(1u, apps.size()); - EXPECT_EQ("app_1", apps[0].app_id); - EXPECT_EQ("Cached App1 Name", apps[0].name); + CheckAppData("app_1", "Cached App1 Name", ""); scoped_refptr<extensions::Extension> updated_app = - MakeApp("Updated App1 Name", "2.0", "http://localhost/", "app_1"); + MakeKioskApp("Updated App1 Name", "2.0", "app_1", "1234"); manager()->UpdateAppDataFromProfile( "app_1", browser()->profile(), updated_app.get()); + waiter.Reset(); waiter.Wait(); EXPECT_TRUE(waiter.loaded()); - manager()->GetApps(&apps); - EXPECT_EQ(1u, apps.size()); - EXPECT_EQ("app_1", apps[0].app_id); - EXPECT_EQ("Updated App1 Name", apps[0].name); + CheckAppData("app_1", "Updated App1 Name", "1234"); +} + +IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, UpdateAppDataFromCrx) { + const char kAppId[] = "ajoggoflpgplnnjkjamcmbepjdjdnpdp"; + const char kAppName[] = "Test Kiosk App"; + + SetExistingApp(kAppId, kAppName, "red16x16.png", ""); + fake_cws()->SetNoUpdate(kAppId); + AppDataLoadWaiter waiter(manager(), 1); + waiter.Wait(); + EXPECT_TRUE(waiter.loaded()); + + CheckAppData(kAppId, kAppName, ""); + + // Fake app data load failure so that the manager will attempt to + // load it from crx. + KioskAppData* app_data = GetAppDataMutable(kAppId); + app_data->SetStatusForTest(KioskAppData::STATUS_ERROR); + + // Copy test crx file to temp dir because the cache moves the file. + base::FilePath test_dir; + ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_dir)); + base::FilePath data_dir = + test_dir.AppendASCII("chromeos/app_mode/offline_enabled_kiosk_app"); + base::FilePath crx_file = + data_dir.AppendASCII("v2_required_platform_version_added.crx"); + crx_file = CopyFileToTempDir(crx_file); + + ExternalCachePutWaiter put_waiter; + manager()->PutValidatedExternalExtension( + kAppId, crx_file, "2.0.0", + base::Bind(&ExternalCachePutWaiter::OnPutExtension, + base::Unretained(&put_waiter))); + put_waiter.Wait(); + ASSERT_TRUE(put_waiter.success()); + + // Wait for 3 data loaded events at the most. One for crx putting into cache, + // one for update check and one for app data is updated from crx. + const size_t kMaxDataChange = 3; + for (size_t i = 0; + i < kMaxDataChange && app_data->status() != KioskAppData::STATUS_LOADED; + ++i) { + waiter.Reset(); + waiter.Wait(); + } + ASSERT_EQ(KioskAppData::STATUS_LOADED, app_data->status()); + + CheckAppData(kAppId, kAppName, "1234"); } IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, BadApp) { @@ -498,47 +617,52 @@ IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, GoodApp) { // Webstore data json is in // chrome/test/data/chromeos/app_mode/webstore/inlineinstall/detail/app_1 - fake_cws()->SetNoUpdate("app_1"); + const char kAppId[] = "app_1"; + fake_cws()->SetNoUpdate(kAppId); AppDataLoadWaiter waiter(manager(), 2); - manager()->AddApp("app_1", owner_settings_service_.get()); + manager()->AddApp(kAppId, owner_settings_service_.get()); waiter.Wait(); EXPECT_TRUE(waiter.loaded()); - // Check data is correct. - KioskAppManager::Apps apps; - manager()->GetApps(&apps); - ASSERT_EQ(1u, apps.size()); - EXPECT_EQ("app_1", apps[0].app_id); - EXPECT_EQ("Name of App 1", apps[0].name); - EXPECT_EQ(gfx::Size(16, 16), apps[0].icon.size()); + CheckAppDataAndCache(kAppId, "Name of App 1", ""); +} - // Check data is cached in local state. - PrefService* local_state = g_browser_process->local_state(); - const base::DictionaryValue* dict = - local_state->GetDictionary(KioskAppManager::kKioskDictionaryName); +IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, AppWithRequiredPlatformVersion) { + // Webstore data json is in + // chrome/test/data/chromeos/app_mode/webstore/inlineinstall/detail/ + // app_with_required_platform_version + const char kAppId[] = "app_with_required_platform_version"; + fake_cws()->SetNoUpdate(kAppId); + AppDataLoadWaiter waiter(manager(), 2); + manager()->AddApp(kAppId, owner_settings_service_.get()); + waiter.Wait(); + EXPECT_TRUE(waiter.loaded()); - std::string name; - EXPECT_TRUE(dict->GetString("apps.app_1.name", &name)); - EXPECT_EQ(apps[0].name, name); + CheckAppDataAndCache(kAppId, "App with required platform version", "1234"); +} - std::string icon_path_string; - EXPECT_TRUE(dict->GetString("apps.app_1.icon", &icon_path_string)); +IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, AppWithBadRequiredPlatformVersion) { + // Webstore data json is in + // chrome/test/data/chromeos/app_mode/webstore/inlineinstall/detail/ + // app_with_bad_required_platform_version + const char kAppId[] = "app_with_bad_required_platform_version"; + fake_cws()->SetNoUpdate(kAppId); + AppDataLoadWaiter waiter(manager(), 2); + manager()->AddApp(kAppId, owner_settings_service_.get()); + waiter.Wait(); + EXPECT_FALSE(waiter.loaded()); + EXPECT_EQ(1, waiter.data_load_failure_count()); - base::FilePath expected_icon_path; - ASSERT_TRUE(PathService::Get(chrome::DIR_USER_DATA, &expected_icon_path)); - expected_icon_path = expected_icon_path. - AppendASCII(KioskAppManager::kIconCacheDir). - AppendASCII(apps[0].app_id).AddExtension(".png"); - EXPECT_EQ(expected_icon_path.value(), icon_path_string); + EXPECT_EQ("", GetAppIds()); } IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, DownloadNewApp) { - RunAddNewAppTest(kTestLocalFsKioskApp, "1.0.0", kTestLocalFsKioskAppName); + RunAddNewAppTest(kTestLocalFsKioskApp, "1.0.0", kTestLocalFsKioskAppName, ""); } IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, RemoveApp) { // Add a new app. - RunAddNewAppTest(kTestLocalFsKioskApp, "1.0.0", kTestLocalFsKioskAppName); + RunAddNewAppTest(kTestLocalFsKioskApp, "1.0.0", kTestLocalFsKioskAppName, ""); KioskAppManager::Apps apps; manager()->GetApps(&apps); ASSERT_EQ(1u, apps.size()); @@ -559,7 +683,7 @@ IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, UpdateApp) { // Add a version 1 app first. - RunAddNewAppTest(kTestLocalFsKioskApp, "1.0.0", kTestLocalFsKioskAppName); + RunAddNewAppTest(kTestLocalFsKioskApp, "1.0.0", kTestLocalFsKioskAppName, ""); KioskAppManager::Apps apps; manager()->GetApps(&apps); ASSERT_EQ(1u, apps.size()); @@ -599,7 +723,7 @@ IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, UpdateAndRemoveApp) { // Add a version 1 app first. - RunAddNewAppTest(kTestLocalFsKioskApp, "1.0.0", kTestLocalFsKioskAppName); + RunAddNewAppTest(kTestLocalFsKioskApp, "1.0.0", kTestLocalFsKioskAppName, ""); KioskAppManager::Apps apps; manager()->GetApps(&apps); ASSERT_EQ(1u, apps.size()); @@ -718,4 +842,27 @@ KioskAppManager::CONSUMER_KIOSK_AUTO_LAUNCH_DISABLED); } +IN_PROC_BROWSER_TEST_F(KioskAppManagerTest, + GetAutoLaunchAppRequiredPlatformVersion) { + const char kAppId[] = "app_with_required_platform_version"; + const char kRequiredPlatformVersion[] = "1234"; + SetExistingApp(kAppId, "App Name", "red16x16.png", kRequiredPlatformVersion); + + fake_cws()->SetNoUpdate(kAppId); + AppDataLoadWaiter waiter(manager(), 1); + waiter.Wait(); + EXPECT_TRUE(waiter.loaded()); + + EXPECT_FALSE(manager()->IsAutoLaunchEnabled()); + EXPECT_EQ("", manager()->GetAutoLaunchAppRequiredPlatformVersion()); + + manager()->SetAutoLaunchApp(kAppId, owner_settings_service_.get()); + EXPECT_EQ("", manager()->GetAutoLaunchAppRequiredPlatformVersion()); + + manager()->SetEnableAutoLaunch(true); + EXPECT_TRUE(manager()->IsAutoLaunchEnabled()); + EXPECT_EQ(kRequiredPlatformVersion, + manager()->GetAutoLaunchAppRequiredPlatformVersion()); +} + } // namespace chromeos
diff --git a/chrome/browser/chromeos/external_metrics.cc b/chrome/browser/chromeos/external_metrics.cc index 1a60716..e04a85c 100644 --- a/chrome/browser/chromeos/external_metrics.cc +++ b/chrome/browser/chromeos/external_metrics.cc
@@ -31,7 +31,7 @@ bool CheckValues(const std::string& name, int minimum, int maximum, - size_t bucket_count) { + uint32_t bucket_count) { if (!base::Histogram::InspectConstructionArguments( name, &minimum, &maximum, &bucket_count)) return false;
diff --git a/chrome/browser/chromeos/login/lock/webui_screen_locker.cc b/chrome/browser/chromeos/login/lock/webui_screen_locker.cc index 7d7d60a..7ff73d2c 100644 --- a/chrome/browser/chromeos/login/lock/webui_screen_locker.cc +++ b/chrome/browser/chromeos/login/lock/webui_screen_locker.cc
@@ -244,6 +244,7 @@ } void WebUIScreenLocker::OnSigninScreenReady() { + VLOG(2) << "Lock screen signin screen is ready"; } void WebUIScreenLocker::OnStartEnterpriseEnrollment() { @@ -351,6 +352,27 @@ } } +void WebUIScreenLocker::PluginCrashed(const base::FilePath& plugin_path, + base::ProcessId plugin_pid) { + LOG(ERROR) << "Plugin crash on lock screen (plugin_path: " + << plugin_path.LossyDisplayName() << " plugin_pid: " << plugin_pid + << ")"; +} + +void WebUIScreenLocker::PluginHungStatusChanged( + int plugin_child_id, + const base::FilePath& plugin_path, + bool is_hung) { + LOG(ERROR) << "Plugin hung status change on lock screen;" + << " (plugin_child_id: " << plugin_child_id + << " plugin_path: " << plugin_path.LossyDisplayName() + << " is_hung: " << is_hung << ")"; +} + +void WebUIScreenLocker::WebContentsDestroyed() { + VLOG(2) << "Lock screen WebContents instance destroyed"; +} + //////////////////////////////////////////////////////////////////////////////// // ash::KeyboardStateObserver overrides.
diff --git a/chrome/browser/chromeos/login/lock/webui_screen_locker.h b/chrome/browser/chromeos/login/lock/webui_screen_locker.h index 671b397..a3335e5 100644 --- a/chrome/browser/chromeos/login/lock/webui_screen_locker.h +++ b/chrome/browser/chromeos/login/lock/webui_screen_locker.h
@@ -114,6 +114,14 @@ // content::WebContentsObserver: void RenderProcessGone(base::TerminationStatus status) override; + // TODO(jdufault): Remove PluginCrashed, PluginHungStatusChanged, + // WebContentsDestroyed overrides once crbug.com/452599 is resolved. + void PluginCrashed(const base::FilePath& plugin_path, + base::ProcessId plugin_pid) override; + void PluginHungStatusChanged(int plugin_child_id, + const base::FilePath& plugin_path, + bool is_hung) override; + void WebContentsDestroyed() override; // ash::KeyboardStateObserver: void OnVirtualKeyboardStateChanged(bool activated) override;
diff --git a/chrome/browser/chromeos/login/profile_auth_data.cc b/chrome/browser/chromeos/login/profile_auth_data.cc index d56889d..482988a 100644 --- a/chrome/browser/chromeos/login/profile_auth_data.cc +++ b/chrome/browser/chromeos/login/profile_auth_data.cc
@@ -17,7 +17,6 @@ #include "content/public/browser/browser_context.h" #include "content/public/browser/browser_thread.h" #include "net/cookies/canonical_cookie.h" -#include "net/cookies/cookie_monster.h" #include "net/cookies/cookie_store.h" #include "net/http/http_auth_cache.h" #include "net/http/http_network_session.h" @@ -183,10 +182,8 @@ // Retrieve the contents of |to_context_|'s cookie jar. net::CookieStore* to_store = to_context_->GetURLRequestContext()->cookie_store(); - net::CookieMonster* to_monster = to_store->GetCookieMonster(); - to_monster->GetAllCookiesAsync( - base::Bind( - &ProfileAuthDataTransferer::OnTargetCookieJarContentsRetrieved, + to_store->GetAllCookiesAsync(base::Bind( + &ProfileAuthDataTransferer::OnTargetCookieJarContentsRetrieved, base::Unretained(this))); } else { Finish(); @@ -233,9 +230,7 @@ DCHECK_CURRENTLY_ON(BrowserThread::IO); net::CookieStore* from_store = from_context_->GetURLRequestContext()->cookie_store(); - net::CookieMonster* from_monster = from_store->GetCookieMonster(); - from_monster->SetKeepExpiredCookies(); - from_monster->GetAllCookiesAsync( + from_store->GetAllCookiesAsync( base::Bind(&ProfileAuthDataTransferer::OnCookiesToTransferRetrieved, base::Unretained(this))); }
diff --git a/chrome/browser/chromeos/login/ui/webui_login_view.cc b/chrome/browser/chromeos/login/ui/webui_login_view.cc index 382140e..6afe4a98 100644 --- a/chrome/browser/chromeos/login/ui/webui_login_view.cc +++ b/chrome/browser/chromeos/login/ui/webui_login_view.cc
@@ -456,6 +456,36 @@ event.type == blink::WebGestureEvent::GesturePinchEnd; } +void WebUILoginView::LoadProgressChanged(content::WebContents* source, + double progress) { + // TODO(jdufault): Remove once crbug.com/452599 is resolved. + LOG(ERROR) << "WebUILoginView loading progress updated to " << progress; +} + +void WebUILoginView::SwappedOut(content::WebContents* source) { + LOG(ERROR) << "WebUILoginView got swapped out"; +} + +void WebUILoginView::BeforeUnloadFired(content::WebContents* tab, + bool proceed, + bool* proceed_to_fire_unload) { + LOG(ERROR) << "WebUILoginView is unloading"; + *proceed_to_fire_unload = true; +} + +void WebUILoginView::RendererUnresponsive(content::WebContents* source) { + LOG(ERROR) << "WebUILoginView renderer became unresponsive"; +} + +void WebUILoginView::RendererResponsive(content::WebContents* source) { + LOG(ERROR) << "WebUILoginView renderer became responsive"; +} + +void WebUILoginView::DidNavigateMainFramePostCommit( + content::WebContents* source) { + LOG(ERROR) << "WebUILoginView navigated"; +} + void WebUILoginView::OnLoginPromptVisible() { // If we're hidden than will generate this signal once we're shown. if (is_hidden_ || webui_visible_) {
diff --git a/chrome/browser/chromeos/login/ui/webui_login_view.h b/chrome/browser/chromeos/login/ui/webui_login_view.h index e6a337b..629709d2 100644 --- a/chrome/browser/chromeos/login/ui/webui_login_view.h +++ b/chrome/browser/chromeos/login/ui/webui_login_view.h
@@ -134,6 +134,18 @@ content::MediaStreamType type) override; bool PreHandleGestureEvent(content::WebContents* source, const blink::WebGestureEvent& event) override; + // TODO(jdufault): Remove LoadProgressChanged, SwappedOut, BeforeUnloadFired, + // RendererUnresponsive, RendererResponsive, DidNavigateMainFramePostCommit + // overrides once crbug.com/452599 is resolved. + void LoadProgressChanged(content::WebContents* source, + double progress) override; + void SwappedOut(content::WebContents* source) override; + void BeforeUnloadFired(content::WebContents* tab, + bool proceed, + bool* proceed_to_fire_unload) override; + void RendererUnresponsive(content::WebContents* source) override; + void RendererResponsive(content::WebContents* source) override; + void DidNavigateMainFramePostCommit(content::WebContents* source) override; // Performs series of actions when login prompt is considered // to be ready and visible.
diff --git a/chrome/browser/chromeos/power/session_state_controller_delegate_chromeos.cc b/chrome/browser/chromeos/power/session_state_controller_delegate_chromeos.cc index 299db3f..b154d20 100644 --- a/chrome/browser/chromeos/power/session_state_controller_delegate_chromeos.cc +++ b/chrome/browser/chromeos/power/session_state_controller_delegate_chromeos.cc
@@ -5,12 +5,14 @@ #include "chrome/browser/chromeos/power/session_state_controller_delegate_chromeos.h" #include "base/logging.h" +#include "chrome/browser/chromeos/login/lock/screen_locker.h" #include "chrome/browser/chromeos/settings/cros_settings.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/power_manager_client.h" #include "chromeos/dbus/session_manager_client.h" #include "chromeos/settings/cros_settings_names.h" #include "chromeos/settings/cros_settings_provider.h" +#include "content/public/browser/web_contents.h" namespace chromeos { @@ -22,6 +24,13 @@ ~SessionStateControllerDelegateChromeos() { } +bool SessionStateControllerDelegateChromeos::IsLoading() const { + return ScreenLocker::default_screen_locker() + ->GetAssociatedWebUI() + ->GetWebContents() + ->IsLoading(); +} + void SessionStateControllerDelegateChromeos::RequestLockScreen() { // TODO(antrim) : additional logging for crbug/173178 LOG(WARNING) << "Requesting screen lock from SessionStateControllerDelegate";
diff --git a/chrome/browser/chromeos/power/session_state_controller_delegate_chromeos.h b/chrome/browser/chromeos/power/session_state_controller_delegate_chromeos.h index 1613e6f..cc7527d 100644 --- a/chrome/browser/chromeos/power/session_state_controller_delegate_chromeos.h +++ b/chrome/browser/chromeos/power/session_state_controller_delegate_chromeos.h
@@ -19,7 +19,8 @@ ~SessionStateControllerDelegateChromeos() override; private: - // SessionStateControllerDelegate implementation. + // ash::LockStateControllerDelegate implementation. + bool IsLoading() const override; void RequestLockScreen() override; void RequestShutdown() override;
diff --git a/chrome/browser/component_updater/pepper_flash_component_installer.cc b/chrome/browser/component_updater/pepper_flash_component_installer.cc index 9c46ecf..d2124ed 100644 --- a/chrome/browser/component_updater/pepper_flash_component_installer.cc +++ b/chrome/browser/component_updater/pepper_flash_component_installer.cc
@@ -9,7 +9,6 @@ #include "base/base_paths.h" #include "base/bind.h" #include "base/command_line.h" -#include "base/compiler_specific.h" #include "base/files/file_enumerator.h" #include "base/files/file_path.h" #include "base/files/file_util.h"
diff --git a/chrome/browser/component_updater/pnacl_component_installer.cc b/chrome/browser/component_updater/pnacl_component_installer.cc index 6c47ea1..1eec3895 100644 --- a/chrome/browser/component_updater/pnacl_component_installer.cc +++ b/chrome/browser/component_updater/pnacl_component_installer.cc
@@ -12,7 +12,6 @@ #include "base/base_paths.h" #include "base/bind.h" #include "base/callback.h" -#include "base/compiler_specific.h" #include "base/files/file_enumerator.h" #include "base/files/file_path.h" #include "base/files/file_util.h"
diff --git a/chrome/browser/component_updater/recovery_component_installer.cc b/chrome/browser/component_updater/recovery_component_installer.cc index d25d6022..41c61b3 100644 --- a/chrome/browser/component_updater/recovery_component_installer.cc +++ b/chrome/browser/component_updater/recovery_component_installer.cc
@@ -10,7 +10,6 @@ #include "base/base_paths.h" #include "base/bind.h" #include "base/command_line.h" -#include "base/compiler_specific.h" #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/json/json_file_value_serializer.h"
diff --git a/chrome/browser/component_updater/swiftshader_component_installer.cc b/chrome/browser/component_updater/swiftshader_component_installer.cc index 1e82d3e..0dc0258 100644 --- a/chrome/browser/component_updater/swiftshader_component_installer.cc +++ b/chrome/browser/component_updater/swiftshader_component_installer.cc
@@ -10,7 +10,6 @@ #include "base/base_paths.h" #include "base/bind.h" -#include "base/compiler_specific.h" #include "base/files/file_enumerator.h" #include "base/files/file_path.h" #include "base/files/file_util.h"
diff --git a/chrome/browser/component_updater/widevine_cdm_component_installer.cc b/chrome/browser/component_updater/widevine_cdm_component_installer.cc index 3f5f684..68c6d58 100644 --- a/chrome/browser/component_updater/widevine_cdm_component_installer.cc +++ b/chrome/browser/component_updater/widevine_cdm_component_installer.cc
@@ -13,7 +13,6 @@ #include "base/base_paths.h" #include "base/bind.h" -#include "base/compiler_specific.h" #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/logging.h"
diff --git a/chrome/browser/download/download_danger_prompt.h b/chrome/browser/download/download_danger_prompt.h index 218d388..4301ea6 100644 --- a/chrome/browser/download/download_danger_prompt.h +++ b/chrome/browser/download/download_danger_prompt.h
@@ -25,8 +25,11 @@ public: // Actions resulting from showing the danger prompt. enum Action { + // The user chose to proceed down the dangerous path. ACCEPT, + // The user chose not to proceed down the dangerous path. CANCEL, + // The user dismissed the dialog without making an explicit choice. DISMISS, }; typedef base::Callback<void(Action)> OnDone;
diff --git a/chrome/browser/download/download_resource_throttle.cc b/chrome/browser/download/download_resource_throttle.cc index fae860e..041a44d 100644 --- a/chrome/browser/download/download_resource_throttle.cc +++ b/chrome/browser/download/download_resource_throttle.cc
@@ -54,11 +54,13 @@ DCHECK_CURRENTLY_ON(BrowserThread::UI); #if defined(OS_ANDROID) content::WebContents* contents = info->web_contents_getter.Run(); - if (!contents) + if (contents) { + content::DownloadControllerAndroid::Get()->AcquireFileAccessPermission( + contents, base::Bind(&OnAcquireFileAccessPermissionDone, + base::Passed(std::move(info)))); + } else { OnAcquireFileAccessPermissionDone(std::move(info), false); - content::DownloadControllerAndroid::Get()->AcquireFileAccessPermission( - contents, base::Bind(&OnAcquireFileAccessPermissionDone, - base::Passed(std::move(info)))); + } #else CanDownload(std::move(info)); #endif
diff --git a/chrome/browser/extensions/api/tabs/tabs_event_router.cc b/chrome/browser/extensions/api/tabs/tabs_event_router.cc index 3eadeab..c2558a19 100644 --- a/chrome/browser/extensions/api/tabs/tabs_event_router.cc +++ b/chrome/browser/extensions/api/tabs/tabs_event_router.cc
@@ -36,22 +36,24 @@ bool WillDispatchTabUpdatedEvent( WebContents* contents, - const base::DictionaryValue* changed_properties, + const std::set<std::string> changed_property_names, content::BrowserContext* context, const Extension* extension, Event* event, const base::DictionaryValue* listener_filter) { - // Overwrite the second argument with the appropriate properties dictionary, - // depending on extension permissions. - base::DictionaryValue* properties_value = changed_properties->DeepCopy(); - ExtensionTabUtil::ScrubTabValueForExtension(contents, - extension, - properties_value); - event->event_args->Set(1, properties_value); + base::DictionaryValue* tab_value = + ExtensionTabUtil::CreateTabValue(contents, extension); - // Overwrite the third arg with our tab value as seen by this extension. - event->event_args->Set(2, - ExtensionTabUtil::CreateTabValue(contents, extension)); + scoped_ptr<base::DictionaryValue> changed_properties( + new base::DictionaryValue); + const base::Value* value = nullptr; + for (const auto& property : changed_property_names) { + if (tab_value->Get(property, &value)) + changed_properties->Set(property, make_scoped_ptr(value->DeepCopy())); + } + + event->event_args->Set(1, changed_properties.release()); + event->event_args->Set(2, tab_value); return true; } @@ -65,45 +67,19 @@ was_muted_(contents->IsAudioMuted()), router_(router) {} -scoped_ptr<base::DictionaryValue> TabsEventRouter::TabEntry::UpdateLoadState() { +std::set<std::string> TabsEventRouter::TabEntry::UpdateLoadState() { // The tab may go in & out of loading (for instance if iframes navigate). // We only want to respond to the first change from loading to !loading after // the NavigationEntryCommitted() was fired. - scoped_ptr<base::DictionaryValue> changed_properties( - new base::DictionaryValue()); if (!complete_waiting_on_load_ || web_contents()->IsLoading()) { - return changed_properties; + return std::set<std::string>(); } - // Send "complete" state change. + // Send 'status' of tab change. Expecting 'complete' is fired. complete_waiting_on_load_ = false; - changed_properties->SetString(tabs_constants::kStatusKey, - tabs_constants::kStatusValueComplete); - return changed_properties; -} - -scoped_ptr<base::DictionaryValue> TabsEventRouter::TabEntry::DidNavigate() { - // Send "loading" state change. - complete_waiting_on_load_ = true; - scoped_ptr<base::DictionaryValue> changed_properties( - new base::DictionaryValue()); - changed_properties->SetString(tabs_constants::kStatusKey, - tabs_constants::kStatusValueLoading); - - if (web_contents()->GetURL() != url_) { - url_ = web_contents()->GetURL(); - changed_properties->SetString(tabs_constants::kUrlKey, url_.spec()); - } - - return changed_properties; -} - -scoped_ptr<base::DictionaryValue> TabsEventRouter::TabEntry::TitleChanged() { - scoped_ptr<base::DictionaryValue> changed_properties( - new base::DictionaryValue()); - changed_properties->SetString(tabs_constants::kTitleKey, - web_contents()->GetTitle()); - return changed_properties; + std::set<std::string> changed_property_names; + changed_property_names.insert(tabs_constants::kStatusKey); + return changed_property_names; } bool TabsEventRouter::TabEntry::SetAudible(bool new_val) { @@ -122,12 +98,24 @@ void TabsEventRouter::TabEntry::NavigationEntryCommitted( const content::LoadCommittedDetails& load_details) { - router_->TabUpdated(this, DidNavigate()); + // Send 'status' of tab change. Expecting 'loading' is fired. + complete_waiting_on_load_ = true; + std::set<std::string> changed_property_names; + changed_property_names.insert(tabs_constants::kStatusKey); + + if (web_contents()->GetURL() != url_) { + url_ = web_contents()->GetURL(); + changed_property_names.insert(tabs_constants::kUrlKey); + } + + router_->TabUpdated(this, std::move(changed_property_names)); } void TabsEventRouter::TabEntry::TitleWasSet(content::NavigationEntry* entry, bool explicit_set) { - router_->TabUpdated(this, TitleChanged()); + std::set<std::string> changed_property_names; + changed_property_names.insert(tabs_constants::kTitleKey); + router_->TabUpdated(this, std::move(changed_property_names)); } void TabsEventRouter::TabEntry::WebContentsDestroyed() { @@ -391,40 +379,31 @@ std::move(args), EventRouter::USER_GESTURE_UNKNOWN); } -void TabsEventRouter::TabUpdated( - TabEntry* entry, - scoped_ptr<base::DictionaryValue> changed_properties) { - CHECK(entry->web_contents()); - +void TabsEventRouter::TabUpdated(TabEntry* entry, + std::set<std::string> changed_property_names) { bool audible = entry->web_contents()->WasRecentlyAudible(); if (entry->SetAudible(audible)) { - changed_properties->SetBoolean(tabs_constants::kAudibleKey, audible); + changed_property_names.insert(tabs_constants::kAudibleKey); } bool muted = entry->web_contents()->IsAudioMuted(); if (entry->SetMuted(muted)) { - changed_properties->Set( - tabs_constants::kMutedInfoKey, - ExtensionTabUtil::CreateMutedInfo(entry->web_contents())); + changed_property_names.insert(tabs_constants::kMutedInfoKey); } - if (!changed_properties->empty()) { + if (!changed_property_names.empty()) { DispatchTabUpdatedEvent(entry->web_contents(), - std::move(changed_properties)); + std::move(changed_property_names)); } } void TabsEventRouter::FaviconUrlUpdated(WebContents* contents) { - content::NavigationEntry* entry = - contents->GetController().GetVisibleEntry(); - if (!entry || !entry->GetFavicon().valid) - return; - scoped_ptr<base::DictionaryValue> changed_properties( - new base::DictionaryValue); - changed_properties->SetString( - tabs_constants::kFaviconUrlKey, - entry->GetFavicon().url.possibly_invalid_spec()); - DispatchTabUpdatedEvent(contents, std::move(changed_properties)); + content::NavigationEntry* entry = contents->GetController().GetVisibleEntry(); + if (!entry || !entry->GetFavicon().valid) + return; + std::set<std::string> changed_property_names; + changed_property_names.insert(tabs_constants::kFaviconUrlKey); + DispatchTabUpdatedEvent(contents, std::move(changed_property_names)); } void TabsEventRouter::DispatchEvent( @@ -446,8 +425,8 @@ void TabsEventRouter::DispatchTabUpdatedEvent( WebContents* contents, - scoped_ptr<base::DictionaryValue> changed_properties) { - DCHECK(changed_properties); + const std::set<std::string> changed_property_names) { + DCHECK(!changed_property_names.empty()); DCHECK(contents); // The state of the tab (as seen from the extension point of view) has @@ -471,9 +450,8 @@ event->restrict_to_browser_context = profile; event->user_gesture = EventRouter::USER_GESTURE_NOT_ENABLED; event->will_dispatch_callback = - base::Bind(&WillDispatchTabUpdatedEvent, - contents, - changed_properties.get()); + base::Bind(&WillDispatchTabUpdatedEvent, contents, + std::move(changed_property_names)); EventRouter::Get(profile)->BroadcastEvent(std::move(event)); } @@ -518,11 +496,9 @@ int tab_index; if (ExtensionTabUtil::GetTabStripModel(contents, &tab_strip, &tab_index)) { - scoped_ptr<base::DictionaryValue> changed_properties( - new base::DictionaryValue()); - changed_properties->SetBoolean(tabs_constants::kPinnedKey, - tab_strip->IsTabPinned(tab_index)); - DispatchTabUpdatedEvent(contents, std::move(changed_properties)); + std::set<std::string> changed_property_names; + changed_property_names.insert(tabs_constants::kPinnedKey); + DispatchTabUpdatedEvent(contents, std::move(changed_property_names)); } }
diff --git a/chrome/browser/extensions/api/tabs/tabs_event_router.h b/chrome/browser/extensions/api/tabs/tabs_event_router.h index c78463d7..0c512ae 100644 --- a/chrome/browser/extensions/api/tabs/tabs_event_router.h +++ b/chrome/browser/extensions/api/tabs/tabs_event_router.h
@@ -6,6 +6,7 @@ #define CHROME_BROWSER_EXTENSIONS_API_TABS_TABS_EVENT_ROUTER_H_ #include <map> +#include <set> #include <string> #include "base/macros.h" @@ -95,7 +96,7 @@ // there's any changed property. class TabEntry; void TabUpdated(TabEntry* entry, - scoped_ptr<base::DictionaryValue> changed_properties); + std::set<std::string> changed_property_names); // Triggers a tab updated event if the favicon URL changes. void FaviconUrlUpdated(content::WebContents* contents); @@ -115,11 +116,11 @@ scoped_ptr<base::ListValue> event_args, scoped_ptr<base::ListValue> cross_incognito_args); - // Packages |changed_properties| as a tab updated event for the tab |contents| - // and dispatches the event to the extension. + // Packages |changed_property_names| as a tab updated event for the tab + // |contents| and dispatches the event to the extension. void DispatchTabUpdatedEvent( content::WebContents* contents, - scoped_ptr<base::DictionaryValue> changed_properties); + const std::set<std::string> changed_property_names); // Register ourselves to receive the various notifications we are interested // in for a tab. Also create tab entry to observe web contents notifications. @@ -142,22 +143,13 @@ // |contents|. TabEntry(TabsEventRouter* router, content::WebContents* contents); - // Indicate via a list of key/value pairs if a tab is loading based on its - // WebContents. Whether the state has changed or not is used to determine - // if events needs to be sent to extensions during processing of - // TabChangedAt(). If this method indicates that a tab should "hold" a - // state-change to "loading", the DidNavigate() method should eventually - // send a similar message to undo it. If false, the returned key/value - // pairs list is empty. - scoped_ptr<base::DictionaryValue> UpdateLoadState(); - - // Indicate via a list of key/value pairs that a tab load has resulted in a - // navigation and the destination url is available for inspection. The list - // is empty if no updates should be sent. - scoped_ptr<base::DictionaryValue> DidNavigate(); - - // Indicate via a list of key/value pairs if the title of a tab is changed. - scoped_ptr<base::DictionaryValue> TitleChanged(); + // Indicate via a list of property names if a tab is loading based on its + // WebContents. Whether the state has changed or not is used to determine if + // events need to be sent to extensions during processing of TabChangedAt() + // If this method indicates that a tab should "hold" a state-change to + // "loading", the NavigationEntryCommitted() method should eventually send a + // similar message to undo it. + std::set<std::string> UpdateLoadState(); // Update the audible and muted states and return whether they were changed bool SetAudible(bool new_val);
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc index 9d7292767cb..a68d8f9 100644 --- a/chrome/browser/extensions/extension_service_unittest.cc +++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -2378,7 +2378,7 @@ ExtensionErrorReporter::GetInstance()->ClearErrors(); extensions::UnpackedInstaller::Create(service()) ->Load(extension_no_plugin_path); - base::RunLoop().RunUntilIdle(); + content::RunAllBlockingPoolTasksUntilIdle(); EXPECT_EQ(0u, GetErrors().size()); EXPECT_EQ(1u, loaded_.size()); EXPECT_EQ(1u, registry()->enabled_extensions().size()); @@ -2393,7 +2393,7 @@ ExtensionErrorReporter::GetInstance()->ClearErrors(); extensions::UnpackedInstaller::Create(service()) ->Load(extension_with_plugin_path); - base::RunLoop().RunUntilIdle(); + content::RunAllBlockingPoolTasksUntilIdle(); EXPECT_EQ(0u, GetErrors().size()); EXPECT_EQ(2u, loaded_.size()); EXPECT_EQ(2u, registry()->enabled_extensions().size()); @@ -2404,6 +2404,7 @@ // Make sure the granted permissions have been setup. scoped_ptr<const PermissionSet> permissions = ExtensionPrefs::Get(profile())->GetGrantedPermissions(good1); + ASSERT_TRUE(permissions); EXPECT_FALSE(permissions->IsEmpty()); EXPECT_TRUE(permissions->HasEffectiveFullAccess()); EXPECT_FALSE(permissions->apis().empty());
diff --git a/chrome/browser/extensions/extension_tab_util.cc b/chrome/browser/extensions/extension_tab_util.cc index 109aa93..91066d4 100644 --- a/chrome/browser/extensions/extension_tab_util.cc +++ b/chrome/browser/extensions/extension_tab_util.cc
@@ -409,11 +409,9 @@ // ScrubTabValueForExtension if the extension should not see them. result->SetString(keys::kUrlKey, contents->GetURL().spec()); result->SetString(keys::kTitleKey, contents->GetTitle()); - if (!is_loading) { - NavigationEntry* entry = contents->GetController().GetVisibleEntry(); - if (entry && entry->GetFavicon().valid) - result->SetString(keys::kFaviconUrlKey, entry->GetFavicon().url.spec()); - } + NavigationEntry* entry = contents->GetController().GetVisibleEntry(); + if (entry && entry->GetFavicon().valid) + result->SetString(keys::kFaviconUrlKey, entry->GetFavicon().url.spec()); if (tab_strip) { WebContents* opener = tab_strip->GetOpenerOfWebContentsAt(tab_index);
diff --git a/chrome/browser/extensions/unpacked_installer.cc b/chrome/browser/extensions/unpacked_installer.cc index 035aecff..bc28a4d 100644 --- a/chrome/browser/extensions/unpacked_installer.cc +++ b/chrome/browser/extensions/unpacked_installer.cc
@@ -19,7 +19,6 @@ #include "chrome/common/extensions/api/plugins/plugins_handler.h" #include "components/crx_file/id_util.h" #include "content/public/browser/browser_thread.h" -#include "extensions/browser/extension_dialog_auto_confirm.h" #include "extensions/browser/extension_prefs.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/install/extension_install_ui.h" @@ -82,24 +81,12 @@ } void SimpleExtensionLoadPrompt::ShowPrompt() { - // TODO(devlin): The AutoConfirm values should work from the - // ExtensionInstallPrompt code, so these should be unnecessary. - switch (extensions::ScopedTestDialogAutoConfirm::GetAutoConfirmValue()) { - case extensions::ScopedTestDialogAutoConfirm::NONE: - // Unretained() is safe because this object manages its own lifetime. - install_ui_->ShowDialog( - base::Bind(&SimpleExtensionLoadPrompt::OnInstallPromptDone, - base::Unretained(this)), - extension_.get(), nullptr, - ExtensionInstallPrompt::GetDefaultShowDialogCallback()); - break; - case extensions::ScopedTestDialogAutoConfirm::ACCEPT: - OnInstallPromptDone(ExtensionInstallPrompt::Result::ACCEPTED); - break; - case extensions::ScopedTestDialogAutoConfirm::CANCEL: - OnInstallPromptDone(ExtensionInstallPrompt::Result::ABORTED); - break; - } + // Unretained() is safe because this object manages its own lifetime. + install_ui_->ShowDialog( + base::Bind(&SimpleExtensionLoadPrompt::OnInstallPromptDone, + base::Unretained(this)), + extension_.get(), nullptr, + ExtensionInstallPrompt::GetDefaultShowDialogCallback()); } void SimpleExtensionLoadPrompt::OnInstallPromptDone(
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc index 3aa63ea..179ed66 100644 --- a/chrome/browser/io_thread.cc +++ b/chrome/browser/io_thread.cc
@@ -297,60 +297,6 @@ return it->second; } -// Parse kUseSpdy command line flag options, which may contain the following: -// -// "off" : Disables SPDY support entirely. -// "no-ping" : Disables SPDY ping connection testing. -// "exclude=<host>" : Disables SPDY support for the host <host>. -// "no-compress" : Disables SPDY header compression. -// "init-max-streams=<limit>" : Specifies the maximum number of concurrent -// streams for a SPDY session, unless the -// specifies a different value via SETTINGS. -void ConfigureSpdyGlobalsFromUseSpdyArgument(const std::string& mode, - IOThread::Globals* globals) { - static const char kOff[] = "off"; - static const char kDisablePing[] = "no-ping"; - static const char kExclude[] = "exclude"; // Hosts to exclude - static const char kDisableCompression[] = "no-compress"; - static const char kInitialMaxConcurrentStreams[] = "init-max-streams"; - - for (const base::StringPiece& element : base::SplitStringPiece( - mode, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) { - std::vector<base::StringPiece> name_value = base::SplitStringPiece( - element, "=", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); - const base::StringPiece option = - name_value.size() > 0 ? name_value[0] : base::StringPiece(); - const base::StringPiece value = - name_value.size() > 1 ? name_value[1] : base::StringPiece(); - - if (option == kOff) { - net::HttpStreamFactory::set_spdy_enabled(false); - continue; - } - if (option == kDisablePing) { - globals->enable_spdy_ping_based_connection_checking.set(false); - continue; - } - if (option == kExclude) { - globals->forced_spdy_exclusions.insert( - net::HostPortPair::FromURL(GURL(value.as_string()))); - continue; - } - if (option == kDisableCompression) { - globals->enable_spdy_compression.set(false); - continue; - } - if (option == kInitialMaxConcurrentStreams) { - int streams; - if (base::StringToInt(value, &streams)) { - globals->initial_max_spdy_concurrent_streams.set(streams); - continue; - } - } - LOG(DFATAL) << "Unrecognized spdy option: " << option.as_string(); - } -} - } // namespace class IOThread::LoggingNetworkChangeObserver @@ -935,8 +881,8 @@ } void IOThread::InitializeNetworkOptions(const base::CommandLine& command_line) { - // Only handle use-spdy command line flags if "spdy.disabled" preference is - // not disabled via policy. + // Only handle SPDY field trial parameters and command line flags if + // "spdy.disabled" preference is not forced via policy. if (is_spdy_disabled_by_policy_) { base::FieldTrial* trial = base::FieldTrialList::Find(kSpdyFieldTrialName); if (trial) @@ -986,12 +932,7 @@ if (command_line.HasSwitch(switches::kIgnoreUrlFetcherCertRequests)) net::URLFetcher::SetIgnoreCertificateRequests(true); - if (command_line.HasSwitch(switches::kUseSpdy)) { - std::string spdy_mode = - command_line.GetSwitchValueASCII(switches::kUseSpdy); - ConfigureSpdyGlobalsFromUseSpdyArgument(spdy_mode, globals); - // TODO(bnc): https://crbug.com/547781 - // This command line flag is broken. + if (command_line.HasSwitch(switches::kDisableHttp2)) { globals->enable_spdy31.set(false); globals->enable_http2.set(false); return; @@ -1155,17 +1096,10 @@ globals.enable_tcp_fast_open_for_ssl.CopyToIfSet( ¶ms->enable_tcp_fast_open_for_ssl); - globals.initial_max_spdy_concurrent_streams.CopyToIfSet( - ¶ms->spdy_initial_max_concurrent_streams); - globals.enable_spdy_compression.CopyToIfSet( - ¶ms->enable_spdy_compression); - globals.enable_spdy_ping_based_connection_checking.CopyToIfSet( - ¶ms->enable_spdy_ping_based_connection_checking); globals.spdy_default_protocol.CopyToIfSet( ¶ms->spdy_default_protocol); globals.enable_spdy31.CopyToIfSet(¶ms->enable_spdy31); globals.enable_http2.CopyToIfSet(¶ms->enable_http2); - params->forced_spdy_exclusions = globals.forced_spdy_exclusions; globals.parse_alternative_services.CopyToIfSet( ¶ms->parse_alternative_services); globals.enable_alternative_service_with_different_host.CopyToIfSet(
diff --git a/chrome/browser/io_thread.h b/chrome/browser/io_thread.h index b56f2a1..06c3c1d 100644 --- a/chrome/browser/io_thread.h +++ b/chrome/browser/io_thread.h
@@ -203,9 +203,6 @@ uint16_t testing_fixed_https_port; Optional<bool> enable_tcp_fast_open_for_ssl; - Optional<size_t> initial_max_spdy_concurrent_streams; - Optional<bool> enable_spdy_compression; - Optional<bool> enable_spdy_ping_based_connection_checking; Optional<net::NextProto> spdy_default_protocol; Optional<bool> enable_spdy31; Optional<bool> enable_http2;
diff --git a/chrome/browser/io_thread_unittest.cc b/chrome/browser/io_thread_unittest.cc index 343b1382..0c98a27 100644 --- a/chrome/browser/io_thread_unittest.cc +++ b/chrome/browser/io_thread_unittest.cc
@@ -188,8 +188,8 @@ EXPECT_TRUE(params.enable_http2); } -TEST_F(IOThreadTest, SpdyCommandLineUseSpdyOff) { - command_line_.AppendSwitchASCII("use-spdy", "off"); +TEST_F(IOThreadTest, SpdyCommandLineDisableHttp2) { + command_line_.AppendSwitch("disable-http2"); // Command line should overwrite field trial group. field_trial_group_ = "Spdy4Enabled"; ConfigureSpdyGlobals();
diff --git a/chrome/browser/media/android/remote/remote_media_player_bridge.cc b/chrome/browser/media/android/remote/remote_media_player_bridge.cc index 01e6ffb..b09b150 100644 --- a/chrome/browser/media/android/remote/remote_media_player_bridge.cc +++ b/chrome/browser/media/android/remote/remote_media_player_bridge.cc
@@ -194,12 +194,6 @@ local_player_->SetVideoSurface(std::move(surface)); } -base::android::ScopedJavaLocalRef<jstring> RemoteMediaPlayerBridge::GetFrameUrl( - JNIEnv* env, - const JavaParamRef<jobject>& obj) { - return ConvertUTF8ToJavaString(env, frame_url().spec()); -} - void RemoteMediaPlayerBridge::OnPlaying(JNIEnv* env, const JavaParamRef<jobject>& obj) { static_cast<RemoteMediaPlayerManager *>(manager())->OnPlaying(player_id()); @@ -432,6 +426,15 @@ return base::android::ConvertUTF16ToJavaString(env, title); } +void RemoteMediaPlayerBridge::OnError( + JNIEnv* env, const base::android::JavaParamRef<jobject>& obj) { + // TODO(https://crbug.com/585379) implement some useful codes for remote + // playback. None of the existing MediaPlayerAndroid codes are + // relevant for remote playback. + manager()->OnError(player_id(), MEDIA_ERROR_INVALID_CODE); +} + + void RemoteMediaPlayerBridge::OnCookiesRetrieved(const std::string& cookies) { DCHECK_CURRENTLY_ON(BrowserThread::UI); // TODO(aberent) Do we need to retrieve auth credentials for basic
diff --git a/chrome/browser/media/android/remote/remote_media_player_bridge.h b/chrome/browser/media/android/remote/remote_media_player_bridge.h index adbd1a9..10eb46bc 100644 --- a/chrome/browser/media/android/remote/remote_media_player_bridge.h +++ b/chrome/browser/media/android/remote/remote_media_player_bridge.h
@@ -57,9 +57,6 @@ GURL GetFirstPartyForCookies() override; // JNI functions - base::android::ScopedJavaLocalRef<jstring> GetFrameUrl( - JNIEnv* env, - const base::android::JavaParamRef<jobject>& obj); void OnPlaying(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj); void OnPaused(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj); void OnRouteUnselected(JNIEnv* env, @@ -84,6 +81,8 @@ const base::android::JavaParamRef<jobject>& obj); void OnSeekCompleted(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj); + void OnError(JNIEnv *env, + const base::android::JavaParamRef<jobject>& obj); // Wrappers for calls to Java used by the remote media player manager void RequestRemotePlayback();
diff --git a/chrome/browser/notifications/notification_ui_manager_mac.mm b/chrome/browser/notifications/notification_ui_manager_mac.mm index b8c5eb3..36b36d6 100644 --- a/chrome/browser/notifications/notification_ui_manager_mac.mm +++ b/chrome/browser/notifications/notification_ui_manager_mac.mm
@@ -17,6 +17,8 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/common/chrome_switches.h" +#include "chrome/grit/generated_resources.h" +#include "ui/base/l10n/l10n_util_mac.h" #include "url/gurl.h" @class NSUserNotification; @@ -29,17 +31,13 @@ // notification#context_message in NSUserNotification.informativeText // notification#tag in NSUserNotification.identifier (10.9) // notification#icon in NSUserNotification.contentImage (10.9) +// Site settings button is implemented as NSUserNotification's action button +// notification.requireInteraction cannot be implemented // TODO(miguelg) implement the following features // - Sound names can be implemented by setting soundName in NSUserNotification // NSUserNotificationDefaultSoundName gives you the platform default. -// - notification.requireInteraction can be implemented by removing the -// notification and adding it again in "notification center only mode" in -// the shouldPresentNotification delegate method. -// This also requires refactoring the popup_timer class so it does not require -// a notification center. -// - One Action can be implemented using the actionButton -// - more than one action is only possible in 10.10 and using a private API. +// - Actions are only possible in 10.10. namespace { @@ -116,9 +114,6 @@ : base::SysUTF16ToNSString(notification.context_message()); [toast setInformativeText:informativeText]; - // TODO(miguelg): Implement support for buttons - toast.get().hasActionButton = NO; - // Some functionality is only available in 10.9+ or requires private APIs // Icon if ([toast respondsToSelector:@selector(_identityImage)] && @@ -127,6 +122,18 @@ [toast setValue:@NO forKey:@"_identityImageHasBorder"]; } + // Buttons + if ([toast respondsToSelector:@selector(_showsButtons)]) { + [toast setValue:@YES forKey:@"_showsButtons"]; + [toast setActionButtonTitle:l10n_util::GetNSString( + IDS_NOTIFICATION_BUTTON_SETTINGS)]; + // A default close button label is provided by the platform but we + // explicitly override it in case the user decides to not + // use the OS language in Chrome. + [toast setOtherButtonTitle:l10n_util::GetNSString( + IDS_NOTIFICATION_BUTTON_CLOSE)]; + } + // Tag if ([toast respondsToSelector:@selector(setIdentifier:)] && !notification.tag().empty()) { @@ -261,11 +268,17 @@ GURL origin(notificationOrigin); + PlatformNotificationServiceImpl::NotificationOperation operation = + notification.activationType == + NSUserNotificationActivationTypeActionButtonClicked + ? PlatformNotificationServiceImpl::NOTIFICATION_SETTINGS + : PlatformNotificationServiceImpl::NOTIFICATION_CLICK; + PlatformNotificationServiceImpl::GetInstance() ->ProcessPersistentNotificationOperation( - PlatformNotificationServiceImpl::NOTIFICATION_CLICK, - base::SysNSStringToUTF8(persistentProfileId), [isIncognito boolValue], - origin, persistentNotificationId.longLongValue, + operation, base::SysNSStringToUTF8(persistentProfileId), + [isIncognito boolValue], origin, + persistentNotificationId.longLongValue, -1 /* buttons not yet implemented */); }
diff --git a/chrome/browser/notifications/platform_notification_service_impl.cc b/chrome/browser/notifications/platform_notification_service_impl.cc index 3608404..dfb9d0da 100644 --- a/chrome/browser/notifications/platform_notification_service_impl.cc +++ b/chrome/browser/notifications/platform_notification_service_impl.cc
@@ -127,10 +127,10 @@ origin, true); break; case PlatformNotificationServiceImpl::NOTIFICATION_SETTINGS: - LOG(WARNING) << "NOTIFICATION_SETTINGS action not implemented"; + PlatformNotificationServiceImpl::GetInstance()->OpenNotificationSettings( + profile); break; } - // TODO(miguelg) Implement the site settings operation. } } // namespace
diff --git a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc index 519ae065..de5dbfe 100644 --- a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc +++ b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc
@@ -85,6 +85,8 @@ "PageLoad.Timing2.NavigationToFirstBackground.AfterCommit.BeforePaint"; const char kHistogramBackgroundBeforeCommit[] = "PageLoad.Timing2.NavigationToFirstBackground.BeforeCommit"; +const char kHistogramFailedProvisionalLoad[] = + "PageLoad.Timing2.NavigationToFailedProvisionalLoad"; const char kRapporMetricsNameCoarseTiming[] = "PageLoad.CoarseTiming.NavigationToFirstContentfulPaint"; @@ -102,6 +104,24 @@ RecordRappor(timing, info); } +void CorePageLoadMetricsObserver::OnFailedProvisionalLoad( + content::NavigationHandle* navigation_handle) { + // Only handle actual failures; provisional loads that failed due to another + // committed load or due to user action are recorded in + // AbortsPageLoadMetricsObserver. + net::Error error = navigation_handle->GetNetErrorCode(); + if (error == net::OK || error == net::ERR_ABORTED) { + return; + } + + // Saving the related timing and other data in this Observer instead of + // PageLoadTracker which saves commit and abort times, as it seems + // not every observer implementation would be interested in this metric. + failed_provisional_load_info_.interval = + base::TimeTicks::Now() - navigation_handle->NavigationStart(); + failed_provisional_load_info_.error = error; +} + void CorePageLoadMetricsObserver::RecordTimingHistograms( const page_load_metrics::PageLoadTiming& timing, const page_load_metrics::PageLoadExtraInfo& info) { @@ -116,6 +136,15 @@ } } + if (failed_provisional_load_info_.error != net::OK) { + // Ignores a background failed provisional load. + if (EventOccurredInForeground(failed_provisional_load_info_.interval, + info)) { + PAGE_LOAD_HISTOGRAM(internal::kHistogramFailedProvisionalLoad, + failed_provisional_load_info_.interval); + } + } + // The rest of the histograms require the load to have commit and be relevant. // If |timing.IsEmpty()|, then this load was not tracked by the renderer. if (info.time_to_commit.is_zero() || timing.IsEmpty())
diff --git a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.h index cc7329ab..40224e6 100644 --- a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.h +++ b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.h
@@ -38,6 +38,7 @@ extern const char kHistogramBackgroundBeforePaint[]; extern const char kHistogramBackgroundBeforeCommit[]; +extern const char kHistogramFailedProvisionalLoad[]; extern const char kRapporMetricsNameCoarseTiming[]; @@ -55,13 +56,26 @@ // page_load_metrics::PageLoadMetricsObserver: void OnComplete(const page_load_metrics::PageLoadTiming& timing, const page_load_metrics::PageLoadExtraInfo& info) override; + void OnFailedProvisionalLoad( + content::NavigationHandle* navigation_handle) override; private: + // Information related to failed provisional loads. + // Populated in OnFailedProvisionalLoad and accessed in OnComplete. + struct FailedProvisionalLoadInfo { + base::TimeDelta interval; + net::Error error; + + FailedProvisionalLoadInfo() : error(net::OK) {} + }; + void RecordTimingHistograms(const page_load_metrics::PageLoadTiming& timing, const page_load_metrics::PageLoadExtraInfo& info); void RecordRappor(const page_load_metrics::PageLoadTiming& timing, const page_load_metrics::PageLoadExtraInfo& info); + FailedProvisionalLoadInfo failed_provisional_load_info_; + DISALLOW_COPY_AND_ASSIGN(CorePageLoadMetricsObserver); };
diff --git a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer_unittest.cc index a99b1bc..7ef0dc15 100644 --- a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer_unittest.cc +++ b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer_unittest.cc
@@ -265,6 +265,38 @@ histogram_tester().ExpectTotalCount(internal::kHistogramFirstTextPaint, 0); } +TEST_F(CorePageLoadMetricsObserverTest, FailedProvisionalLoad) { + GURL url(kDefaultTestUrl); + content::RenderFrameHostTester* rfh_tester = + content::RenderFrameHostTester::For(main_rfh()); + rfh_tester->SimulateNavigationStart(url); + rfh_tester->SimulateNavigationError(url, net::ERR_TIMED_OUT); + rfh_tester->SimulateNavigationStop(); + + histogram_tester().ExpectTotalCount(internal::kHistogramCommit, 0); + histogram_tester().ExpectTotalCount(internal::kHistogramDomContentLoaded, 0); + histogram_tester().ExpectTotalCount(internal::kHistogramLoad, 0); + histogram_tester().ExpectTotalCount(internal::kHistogramFirstLayout, 0); + histogram_tester().ExpectTotalCount(internal::kHistogramFirstTextPaint, 0); + histogram_tester().ExpectTotalCount(internal::kHistogramFailedProvisionalLoad, + 1); +} + +TEST_F(CorePageLoadMetricsObserverTest, FailedBackgroundProvisionalLoad) { + // Test that failed provisional event does not get logged in the + // histogram if it happened in the background + GURL url(kDefaultTestUrl); + content::RenderFrameHostTester* rfh_tester = + content::RenderFrameHostTester::For(main_rfh()); + rfh_tester->SimulateNavigationStart(url); + web_contents()->WasHidden(); + rfh_tester->SimulateNavigationError(url, net::ERR_TIMED_OUT); + rfh_tester->SimulateNavigationStop(); + + histogram_tester().ExpectTotalCount(internal::kHistogramFailedProvisionalLoad, + 0); +} + TEST_F(CorePageLoadMetricsObserverTest, BackgroundBeforePaint) { page_load_metrics::PageLoadTiming timing; timing.navigation_start = base::Time::FromDoubleT(1);
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b/chrome/browser/password_manager/chrome_password_manager_client.cc index 1bfb08f..f0dabfa 100644 --- a/chrome/browser/password_manager/chrome_password_manager_client.cc +++ b/chrome/browser/password_manager/chrome_password_manager_client.cc
@@ -286,10 +286,8 @@ const password_manager::CredentialInfo& credential) { callback.Run(credential); if (credential.type != - password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY && - password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( - GetPrefs())) { - PromptUserToEnableAutosignin(); + password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY) { + PromptUserToEnableAutosigninIfNecessary(); } } @@ -299,6 +297,12 @@ driver->ForceSavePassword(); } +void ChromePasswordManagerClient::GeneratePassword() { + password_manager::ContentPasswordManagerDriver* driver = + driver_factory_->GetDriverForFrame(web_contents()->GetFocusedFrame()); + driver->GeneratePassword(); +} + void ChromePasswordManagerClient::NotifyUserAutoSignin( ScopedVector<autofill::PasswordForm> local_forms) { DCHECK(!local_forms.empty()); @@ -321,16 +325,13 @@ void ChromePasswordManagerClient::NotifySuccessfulLoginWithExistingPassword( const autofill::PasswordForm& form) { - if (!password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( - GetPrefs()) || - !form_blocked_on_first_run_) { + if (!form_blocked_on_first_run_) return; - } if (form_blocked_on_first_run_->username_value == form.username_value && form_blocked_on_first_run_->password_value == form.password_value && form_blocked_on_first_run_->origin == form.origin) { - PromptUserToEnableAutosignin(); + PromptUserToEnableAutosigninIfNecessary(); } form_blocked_on_first_run_.reset(); } @@ -522,7 +523,14 @@ popup_controller_->Show(false /* display_password */); } -void ChromePasswordManagerClient::PromptUserToEnableAutosignin() { +void ChromePasswordManagerClient::PromptUserToEnableAutosigninIfNecessary() { + if (!password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( + GetPrefs()) || + !GetPrefs()->GetBoolean( + password_manager::prefs::kCredentialsEnableAutosignin) || + IsOffTheRecord()) + return; + #if BUILDFLAG(ANDROID_JAVA_UI) // TODO(crbug.com/532876): pop up the dialog. #else
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.h b/chrome/browser/password_manager/chrome_password_manager_client.h index 7a9cce4..d64a2d7 100644 --- a/chrome/browser/password_manager/chrome_password_manager_client.h +++ b/chrome/browser/password_manager/chrome_password_manager_client.h
@@ -59,6 +59,7 @@ base::Callback<void(const password_manager::CredentialInfo&)> callback) override; void ForceSavePassword() override; + void GeneratePassword() override; void NotifyUserAutoSignin( ScopedVector<autofill::PasswordForm> local_forms) override; void NotifyUserAutoSigninBlockedOnFirstRun( @@ -138,8 +139,9 @@ const autofill::PasswordForm& form); // Shows the dialog where the user can accept or decline the global autosignin - // setting as a first run experience. - void PromptUserToEnableAutosignin(); + // setting as a first run experience. The dialog won't appear in Incognito or + // when the autosign-in is off. + void PromptUserToEnableAutosigninIfNecessary(); // Notify the PasswordManager that generation is available for |form|. Used // for UMA stats.
diff --git a/chrome/browser/password_manager/native_backend_kwallet_x.cc b/chrome/browser/password_manager/native_backend_kwallet_x.cc index c390696..b94523f6 100644 --- a/chrome/browser/password_manager/native_backend_kwallet_x.cc +++ b/chrome/browser/password_manager/native_backend_kwallet_x.cc
@@ -123,11 +123,13 @@ } count = count_32; } else { - if (!iter.ReadSizeT(&count)) { + uint64_t count_64 = 0; + if (!iter.ReadUInt64(&count_64)) { LOG(ERROR) << "Failed to deserialize KWallet entry " << "(realm: " << signon_realm << ")"; return false; } + count = static_cast<size_t>(count_64); } if (count > 0xFFFF) { @@ -236,7 +238,7 @@ void SerializeValue(const std::vector<autofill::PasswordForm*>& forms, base::Pickle* pickle) { pickle->WriteInt(kPickleVersion); - pickle->WriteSizeT(forms.size()); + pickle->WriteUInt64(forms.size()); for (autofill::PasswordForm* form : forms) { pickle->WriteInt(form->scheme); pickle->WriteString(form->origin.spec());
diff --git a/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc b/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc index babe5ca..9b166e4 100644 --- a/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc +++ b/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc
@@ -1168,7 +1168,7 @@ if (size_32) pickle->WriteUInt32(1); // Size of form list. 32 bits. else - pickle->WriteSizeT(1); // Size of form list. 64 bits. + pickle->WriteUInt64(1); // Size of form list. 64 bits. pickle->WriteInt(form.scheme); pickle->WriteString(form.origin.spec()); pickle->WriteString(form.action.spec());
diff --git a/chrome/browser/password_manager/password_store_factory.cc b/chrome/browser/password_manager/password_store_factory.cc index b96eb81..bbb468c 100644 --- a/chrome/browser/password_manager/password_store_factory.cc +++ b/chrome/browser/password_manager/password_store_factory.cc
@@ -248,8 +248,9 @@ if (!backend.get()) { LOG(WARNING) << "Using basic (unencrypted) store for password storage. " - "See http://code.google.com/p/chromium/wiki/LinuxPasswordStorage for " - "more information about password storage options."; + "See " + "https://chromium.googlesource.com/chromium/src/+/master/docs/linux_password_storage.md" + " for more information about password storage options."; } ps = new PasswordStoreX(main_thread_runner, db_thread_runner,
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.cc b/chrome/browser/renderer_context_menu/render_view_context_menu.cc index 9217707..689fb0b 100644 --- a/chrome/browser/renderer_context_menu/render_view_context_menu.cc +++ b/chrome/browser/renderer_context_menu/render_view_context_menu.cc
@@ -69,6 +69,7 @@ #include "chrome/common/spellcheck_common.h" #include "chrome/common/url_constants.h" #include "chrome/grit/generated_resources.h" +#include "components/autofill/core/common/password_generation_util.h" #include "components/data_reduction_proxy/core/common/data_reduction_proxy_headers.h" #include "components/google/core/browser/google_util.h" #include "components/metrics/proto/omnibox_input_type.pb.h" @@ -270,9 +271,10 @@ {69, -1, IDC_CONTENT_CONTEXT_COPYLINKTEXT}, {70, -1, IDC_CONTENT_CONTEXT_OPENLINKINPROFILE}, {71, -1, IDC_OPEN_LINK_IN_PROFILE_FIRST}, + {72, -1, IDC_CONTENT_CONTEXT_GENERATEPASSWORD}, // Add new items here and use |enum_id| from the next line. // Also, add new items to RenderViewContextMenuItem enum in histograms.xml. - {72, -1, 0}, // Must be the last. Increment |enum_id| when new IDC + {73, -1, 0}, // Must be the last. Increment |enum_id| when new IDC // was added. }; @@ -1258,12 +1260,19 @@ } void RenderViewContextMenu::AppendPasswordItems() { - if (!password_manager::ForceSavingExperimentEnabled()) - return; - - menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); - menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_FORCESAVEPASSWORD, - IDS_CONTENT_CONTEXT_FORCESAVEPASSWORD); + bool separator_added = false; + if (password_manager::ForceSavingExperimentEnabled()) { + menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); + separator_added = true; + menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_FORCESAVEPASSWORD, + IDS_CONTENT_CONTEXT_FORCESAVEPASSWORD); + } + if (password_manager::ManualPasswordGenerationEnabled()) { + if (!separator_added) + menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); + menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_GENERATEPASSWORD, + IDS_CONTENT_CONTEXT_GENERATEPASSWORD); + } } // Menu delegate functions ----------------------------------------------------- @@ -1573,6 +1582,7 @@ case IDC_CONTENT_CONTEXT_OPENLINKWITH: case IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_SETTINGS: case IDC_CONTENT_CONTEXT_FORCESAVEPASSWORD: + case IDC_CONTENT_CONTEXT_GENERATEPASSWORD: return true; case IDC_ROUTE_MEDIA: { @@ -2074,6 +2084,11 @@ ForceSavePassword(); break; + case IDC_CONTENT_CONTEXT_GENERATEPASSWORD: + ChromePasswordManagerClient::FromWebContents(source_web_contents_)-> + GeneratePassword(); + break; + default: NOTREACHED(); break;
diff --git a/chrome/browser/renderer_host/pepper/pepper_flash_clipboard_message_filter.cc b/chrome/browser/renderer_host/pepper/pepper_flash_clipboard_message_filter.cc index 3c1c4c6..072a16f 100644 --- a/chrome/browser/renderer_host/pepper/pepper_flash_clipboard_message_filter.cc +++ b/chrome/browser/renderer_host/pepper/pepper_flash_clipboard_message_filter.cc
@@ -51,10 +51,10 @@ // clipboard interface for custom data. bool JumpToFormatInPickle(const base::string16& format, base::PickleIterator* iter) { - size_t size = 0; - if (!iter->ReadSizeT(&size)) + uint32_t size = 0; + if (!iter->ReadUInt32(&size)) return false; - for (size_t i = 0; i < size; ++i) { + for (uint32_t i = 0; i < size; ++i) { base::string16 stored_format; if (!iter->ReadString16(&stored_format)) return false; @@ -86,7 +86,7 @@ bool WriteDataToPickle(const std::map<base::string16, std::string>& data, base::Pickle* pickle) { - pickle->WriteSizeT(data.size()); + pickle->WriteUInt32(data.size()); for (std::map<base::string16, std::string>::const_iterator it = data.begin(); it != data.end(); ++it) {
diff --git a/chrome/browser/resource_delegate_mac.h b/chrome/browser/resource_delegate_mac.h index 92e647c5..a5d48b46 100644 --- a/chrome/browser/resource_delegate_mac.h +++ b/chrome/browser/resource_delegate_mac.h
@@ -29,7 +29,6 @@ ui::ScaleFactor scale_factor, base::StringPiece* value) override; bool GetLocalizedString(int message_id, base::string16* value) override; - scoped_ptr<gfx::Font> GetFont(ui::ResourceBundle::FontStyle style) override; private: DISALLOW_COPY_AND_ASSIGN(MacResourceDelegate);
diff --git a/chrome/browser/resource_delegate_mac.mm b/chrome/browser/resource_delegate_mac.mm index 01f2be7..8ff937d 100644 --- a/chrome/browser/resource_delegate_mac.mm +++ b/chrome/browser/resource_delegate_mac.mm
@@ -77,8 +77,3 @@ base::string16* value) { return false; } - -scoped_ptr<gfx::Font> MacResourceDelegate::GetFont( - ui::ResourceBundle::FontStyle style) { - return nullptr; -}
diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD.gn index d0af340..1d64972 100644 --- a/chrome/browser/resources/BUILD.gn +++ b/chrome/browser/resources/BUILD.gn
@@ -56,16 +56,6 @@ output_dir = "$root_gen_dir/chrome" } -grit("signin_internals_resources") { - source = "signin_internals_resources.grd" - defines = chrome_grit_defines - outputs = [ - "grit/signin_internals_resources.h", - "signin_internals_resources.pak", - ] - output_dir = "$root_gen_dir/chrome" -} - grit("translate_internals_resources") { source = "translate_internals_resources.grd" defines = chrome_grit_defines
diff --git a/chrome/browser/resources/chromeos/chromevox/chromevox.gni b/chrome/browser/resources/chromeos/chromevox/chromevox.gni index 7ea0495..f3bf9a6 100644 --- a/chrome/browser/resources/chromeos/chromevox/chromevox.gni +++ b/chrome/browser/resources/chromeos/chromevox/chromevox.gni
@@ -18,7 +18,8 @@ ], ".", "$closure_library_dir/../bin/build") -jsbundler_modules += [ "//third_party/WebKit/Source/build/scripts/rjsmin.py" ] +jsbundler_modules += + [ "//third_party/WebKit/Source/devtools/scripts/rjsmin.py" ] # List of all modules that are included in one or more of the production # chromevox scripts.
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_am.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_am.xtb index 54a6039..bc12bf7 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_am.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_am.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">ምርጫው</translation> <translation id="8066678206530322333">ሰንደቅ</translation> <translation id="8110647606445335195">ምንም የARIA ምልክቶች የሉም።</translation> -<translation id="8132379720172247073">የChromeVox ምናሌ</translation> <translation id="8153880621934657047">በሠንጠረዥ ውስጥ አይደሉም።</translation> <translation id="817440585505441544">{COUNT,plural, =1{ሰረዘዘብጥ}one{# ሰረዘዘብጦች}other{# ሰረዘዘብጦች}}</translation> <translation id="8179976553408161302">አስገባ</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ar.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ar.xtb index 1b4979c..1d36f8f 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ar.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ar.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">تم تحديد</translation> <translation id="8066678206530322333">بانر</translation> <translation id="8110647606445335195">ليست هناك معالم ARIA.</translation> -<translation id="8132379720172247073">قائمة ChromeVox</translation> <translation id="8153880621934657047">ليس بداخل الجدول.</translation> <translation id="817440585505441544">{COUNT,plural, =1{شرطة سفلية واحدة}zero{# underscores}two{شرطتان سفليتان (#)}few{# شرطات سفلية}many{# شرطة سفلية}other{# من الشرطات السفلية}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_bg.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_bg.xtb index b9853b4..38310e1 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_bg.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_bg.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Открояването е</translation> <translation id="8066678206530322333">Банер</translation> <translation id="8110647606445335195">Няма отличителни белези на ARIA.</translation> -<translation id="8132379720172247073">Меню на ChromeVox</translation> <translation id="8153880621934657047">Не сте в таблицата.</translation> <translation id="817440585505441544">{COUNT,plural, =1{долна черта}other{# долни черти}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_bn.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_bn.xtb index 9fd49ad..4c19b37 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_bn.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_bn.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">নির্বাচনটি</translation> <translation id="8066678206530322333">ব্যানার</translation> <translation id="8110647606445335195">কোনো ARIA ল্যান্ডমার্ক নেই৷</translation> -<translation id="8132379720172247073">ChromeVox মেনু</translation> <translation id="8153880621934657047">সারণীর ভিতরে নয়৷</translation> <translation id="817440585505441544">{COUNT,plural, =1{আন্ডারস্কোর}one{#টি আন্ডারস্কোর}other{#টি আন্ডারস্কোর}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ca.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ca.xtb index 684c1a5..89a9593 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ca.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ca.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">La selecció és</translation> <translation id="8066678206530322333">Bàner</translation> <translation id="8110647606445335195">No hi ha cap punt de referència ARIA.</translation> -<translation id="8132379720172247073">Menú de ChromeVox</translation> <translation id="8153880621934657047">No sou dins la taula.</translation> <translation id="817440585505441544">{COUNT,plural, =1{ratlla baixa}other{# ratlles baixes}}</translation> <translation id="8179976553408161302">Retorn</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_cs.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_cs.xtb index c5a80c7a..ec188c3 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_cs.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_cs.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Výběr je</translation> <translation id="8066678206530322333">Banner</translation> <translation id="8110647606445335195">Žádné orientační body ARIA.</translation> -<translation id="8132379720172247073">Nabídka ChromeVox</translation> <translation id="8153880621934657047">Mimo tabulku.</translation> <translation id="817440585505441544">{COUNT,plural, =1{podtržítko}few{# podtržítka}many{# underscores}other{# podtržítek}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_da.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_da.xtb index fb597c9..8af25da 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_da.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_da.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Det valgte er</translation> <translation id="8066678206530322333">Banner</translation> <translation id="8110647606445335195">Ingen ARIA-orienteringspunkter.</translation> -<translation id="8132379720172247073">ChromeVox-menu</translation> <translation id="8153880621934657047">Ikke i tabel.</translation> <translation id="817440585505441544">{COUNT,plural, =1{understregning}one{# understregninger}other{# understregninger}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_de.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_de.xtb index c0adb24..0d24f6d 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_de.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_de.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Ausgewählt ist</translation> <translation id="8066678206530322333">Banner</translation> <translation id="8110647606445335195">Keine ARIA-Markierungen</translation> -<translation id="8132379720172247073">ChromeVox-Menü</translation> <translation id="8153880621934657047">Nicht in der Tabelle</translation> <translation id="817440585505441544">{COUNT,plural, =1{Unterstrich}other{# Unterstriche}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_el.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_el.xtb index 1141d40..54c3602 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_el.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_el.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Η επιλογή είναι</translation> <translation id="8066678206530322333">Banner</translation> <translation id="8110647606445335195">Δεν υπάρχουν ορόσημα ARIA.</translation> -<translation id="8132379720172247073">Μενού ChromeVox</translation> <translation id="8153880621934657047">Όχι μέσα στον πίνακα.</translation> <translation id="817440585505441544">{COUNT,plural, =1{σύμβολο υπογράμμισης}other{# σύμβολα υπογράμμισης}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_en-GB.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_en-GB.xtb index db30ae2..901934d4 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_en-GB.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_en-GB.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Selection is</translation> <translation id="8066678206530322333">Banner</translation> <translation id="8110647606445335195">No ARIA landmarks.</translation> -<translation id="8132379720172247073">ChromeVox Menu</translation> <translation id="8153880621934657047">Not inside table.</translation> <translation id="817440585505441544">{COUNT,plural, =1{underscore}other{# underscores}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es-419.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es-419.xtb index 0fa7e68..c5b02e2 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es-419.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es-419.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">La selección es</translation> <translation id="8066678206530322333">Banner</translation> <translation id="8110647606445335195">No hay puntos de referencia de ARIA.</translation> -<translation id="8132379720172247073">Menú de ChromeVox</translation> <translation id="8153880621934657047">No está dentro de la tabla.</translation> <translation id="817440585505441544">{COUNT,plural, =1{guion bajo}other{# guiones bajos}}</translation> <translation id="8179976553408161302">Intro</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es.xtb index e3a51f3..30139aa0 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Has seleccionado</translation> <translation id="8066678206530322333">Banner</translation> <translation id="8110647606445335195">No hay puntos de referencia de ARIA.</translation> -<translation id="8132379720172247073">Menú de ChromeVox</translation> <translation id="8153880621934657047">No está dentro de la tabla.</translation> <translation id="817440585505441544">{COUNT,plural, =1{guión bajo}other{# guiones bajos}}</translation> <translation id="8179976553408161302">Intro</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_et.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_et.xtb index d8f4f7c..82820e3 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_et.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_et.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Valik on</translation> <translation id="8066678206530322333">Bänner</translation> <translation id="8110647606445335195">ARIA maamärke ei ole.</translation> -<translation id="8132379720172247073">ChromeVoxi menüü</translation> <translation id="8153880621934657047">Ei ole tabelis.</translation> <translation id="817440585505441544">{COUNT,plural, =1{alljoon}other{# alljoont}}</translation> <translation id="8179976553408161302">Sisestusklahv</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fa.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fa.xtb index 13e6f23..bebe26ab 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fa.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fa.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">مورد انتخابی عبارتست از</translation> <translation id="8066678206530322333">بنر</translation> <translation id="8110647606445335195">علامت مشخصه ARIA موجود نیست.</translation> -<translation id="8132379720172247073">منوی ChromeVox</translation> <translation id="8153880621934657047">خارج از جدول</translation> <translation id="817440585505441544">{COUNT,plural, =1{زیرخط}one{# زیرخط}other{# زیرخط}}</translation> <translation id="8179976553408161302">ورود</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fi.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fi.xtb index 7e3945d..d43695f 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fi.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fi.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Valinta on</translation> <translation id="8066678206530322333">Banneri</translation> <translation id="8110647606445335195">Ei ARIA-maamerkkejä.</translation> -<translation id="8132379720172247073">ChromeVox-valikko</translation> <translation id="8153880621934657047">Et ole taulukossa.</translation> <translation id="817440585505441544">{COUNT,plural, =1{alaviiva}other{# alaviivaa}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fil.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fil.xtb index 19a0b640..8a4f6bb9 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fil.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fil.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Ang pagpipilian ay</translation> <translation id="8066678206530322333">Banner</translation> <translation id="8110647606445335195">Walang mga landmark ng ARIA.</translation> -<translation id="8132379720172247073">Menu ng ChromeVox</translation> <translation id="8153880621934657047">Wala sa loob ng talahanayan.</translation> <translation id="817440585505441544">{COUNT,plural, =1{underscore}one{# underscore}other{# na underscore}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fr.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fr.xtb index ef8f6cea..0b2ea19 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fr.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fr.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">La sélection est la suivante :</translation> <translation id="8066678206530322333">Bannière</translation> <translation id="8110647606445335195">Aucun repère ARIA</translation> -<translation id="8132379720172247073">Menu ChromeVox</translation> <translation id="8153880621934657047">Hors du tableau</translation> <translation id="817440585505441544">{COUNT,plural, =1{trait de soulignement}one{# trait de soulignement}other{# traits de soulignement}}</translation> <translation id="8179976553408161302">Entrée</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_gu.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_gu.xtb index 7cfed9404..fc8459e 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_gu.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_gu.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">પસંદગી આ છે</translation> <translation id="8066678206530322333">બેનર</translation> <translation id="8110647606445335195">ARIA સ્થળ નિશાનીઓ નથી.</translation> -<translation id="8132379720172247073">ChromeVox મેનૂ</translation> <translation id="8153880621934657047">કોષ્ટકની અંદર નથી</translation> <translation id="817440585505441544">{COUNT,plural, =1{અંડરસ્કોર}one{# અંડરસ્કોર}other{# અંડરસ્કોર}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hi.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hi.xtb index d394b19..0da8f0968 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hi.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hi.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">यह चयनित है:</translation> <translation id="8066678206530322333">बैनर</translation> <translation id="8110647606445335195">कोई ARIA स्थानचिह्न नहीं.</translation> -<translation id="8132379720172247073">ChromeVox मेनू</translation> <translation id="8153880621934657047">तालिका में नहीं है.</translation> <translation id="817440585505441544">{COUNT,plural, =1{अंडरस्कोर}one{# अंडरस्कोर}other{# अंडरस्कोर}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hr.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hr.xtb index 6a6a64c..84006f0 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hr.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hr.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Odabir je</translation> <translation id="8066678206530322333">Natpis</translation> <translation id="8110647606445335195">Nema ARIA orijentira.</translation> -<translation id="8132379720172247073">ChromeVox izbornik</translation> <translation id="8153880621934657047">Niste unutar tablice.</translation> <translation id="817440585505441544">{COUNT,plural, =1{donja crta}one{# donja crta}few{# donje crte}other{# donjih crta}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hu.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hu.xtb index 633c59f..69f23f4 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hu.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hu.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">A kijelölés:</translation> <translation id="8066678206530322333">Szalaghirdetés</translation> <translation id="8110647606445335195">Nincsenek ARIA határjelek.</translation> -<translation id="8132379720172247073">ChromeVox-menü</translation> <translation id="8153880621934657047">Nem táblázatban van.</translation> <translation id="817440585505441544">{COUNT,plural, =1{alulvonás}other{# alulvonás}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_id.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_id.xtb index 9c39e25..1e03352 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_id.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_id.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Pemilihannya adalah</translation> <translation id="8066678206530322333">Spanduk</translation> <translation id="8110647606445335195">Tidak ada bangunan terkenal ARIA.</translation> -<translation id="8132379720172247073">Menu ChromeVox</translation> <translation id="8153880621934657047">Tidak ada di dalam tabel.</translation> <translation id="817440585505441544">{COUNT,plural, =1{garis bawah}other{# garis bawah}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_it.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_it.xtb index 56e9a77..c03b5028 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_it.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_it.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">La selezione è</translation> <translation id="8066678206530322333">Banner</translation> <translation id="8110647606445335195">Nessun landmark ARIA.</translation> -<translation id="8132379720172247073">Menu ChromeVox</translation> <translation id="8153880621934657047">Non sei all'interno della tabella.</translation> <translation id="817440585505441544">{COUNT,plural, =1{carattere di sottolineatura}other{# caratteri di sottolineatura}}</translation> <translation id="8179976553408161302">Invio</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_iw.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_iw.xtb index da81a6c..18c80d12 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_iw.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_iw.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">הבחירה היא</translation> <translation id="8066678206530322333">מודעת באנר</translation> <translation id="8110647606445335195">אין ציוני דרך מסוג ARIA.</translation> -<translation id="8132379720172247073">תפריט ChromeVox</translation> <translation id="8153880621934657047">לא בתוך טבלה.</translation> <translation id="817440585505441544">{COUNT,plural, =1{קו תחתון}two{# סימני קו תחתון}many{# סימני קו תחתון}other{# סימני קו תחתון}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ja.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ja.xtb index 83463a40..77cce46 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ja.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ja.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">現在選択しているのは、</translation> <translation id="8066678206530322333">バナー</translation> <translation id="8110647606445335195">ARIA ランドマークはありません。</translation> -<translation id="8132379720172247073">ChromeVox メニュー</translation> <translation id="8153880621934657047">表の中ではありません。</translation> <translation id="817440585505441544">{COUNT,plural, =1{アンダースコア}other{# 個のアンダースコア}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_kn.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_kn.xtb index 0000745..51e29ac 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_kn.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_kn.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">ಆಯ್ಕೆಯು</translation> <translation id="8066678206530322333">ಬ್ಯಾನರ್</translation> <translation id="8110647606445335195">ಯಾವುದೇ ARIA ಹೆಗ್ಗುರುತುಗಳಿಲ್ಲ.</translation> -<translation id="8132379720172247073">ChromeVox ಮೆನು</translation> <translation id="8153880621934657047">ಕೋಷ್ಟಕದ ಒಳಗೆ ಇಲ್ಲ.</translation> <translation id="817440585505441544">{COUNT,plural, =1{ಅಡಿಗೆರೆ}one{# ಅಡಿಗೆರೆಗಳು}other{# ಅಡಿಗೆರೆಗಳು}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ko.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ko.xtb index 38df6f31..71abef63 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ko.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ko.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">현재 선택</translation> <translation id="8066678206530322333">배너</translation> <translation id="8110647606445335195">ARIA 랜드마크가 없습니다.</translation> -<translation id="8132379720172247073">ChromeVox 메뉴</translation> <translation id="8153880621934657047">표 내부가 아닙니다.</translation> <translation id="817440585505441544">{COUNT,plural, =1{밑줄}other{밑줄 기호 #개}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_lt.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_lt.xtb index 1d492bd0..e010205 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_lt.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_lt.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Pasirinkimas yra</translation> <translation id="8066678206530322333">Reklamjuostė</translation> <translation id="8110647606445335195">Nėra ARIA orientyrų.</translation> -<translation id="8132379720172247073">„ChromeVox“ meniu</translation> <translation id="8153880621934657047">Ne lentelės viduje.</translation> <translation id="817440585505441544">{COUNT,plural, =1{apatinis brūkšnys}one{# apatinis brūkšnys}few{# apatiniai brūkšniai}many{# underscores}other{# apatinių brūkšnių}}</translation> <translation id="8179976553408161302">Įvesti</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_lv.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_lv.xtb index b5aae6b1..a13fd86b 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_lv.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_lv.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Atlase ir</translation> <translation id="8066678206530322333">Reklāmkarogs</translation> <translation id="8110647606445335195">Nav ARIA orientieru.</translation> -<translation id="8132379720172247073">ChromeVox izvēlne</translation> <translation id="8153880621934657047">Nav tabulas iekšpusē.</translation> <translation id="817440585505441544">{COUNT,plural, =1{pasvītra}zero{# pasvītru}one{# pasvītra}other{# pasvītras}}</translation> <translation id="8179976553408161302">Ievadīt</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ml.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ml.xtb index e7ed5cc..87c03c0 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ml.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ml.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">തിരഞ്ഞെടുത്തത് ഇതാണ്</translation> <translation id="8066678206530322333">ബാനര്</translation> <translation id="8110647606445335195">ARIA ലാൻഡ്മാർക്കുകൾ ഒന്നുമില്ല.</translation> -<translation id="8132379720172247073">ChromeVox മെനു</translation> <translation id="8153880621934657047">പട്ടികയ്ക്കുള്ളിലല്ല.</translation> <translation id="817440585505441544">{COUNT,plural, =1{അടിവര}other{# അടിവരകൾ}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_mr.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_mr.xtb index c051e59..fda5596 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_mr.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_mr.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">निवड ही आहे</translation> <translation id="8066678206530322333">बॅनर</translation> <translation id="8110647606445335195">कोणत्याही ARIA च्या महत्त्वाच्या खुणा नाहीत.</translation> -<translation id="8132379720172247073">ChromeVox मेनू</translation> <translation id="8153880621934657047">सारणीमध्ये नाही.</translation> <translation id="817440585505441544">{COUNT,plural, =1{अंडरस्कोअर}one{# अंडरस्कोअर}other{# अंडरस्कोअर}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ms.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ms.xtb index d791a59..37a8d1f 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ms.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ms.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Pilihannya ialah</translation> <translation id="8066678206530322333">Sepanduk</translation> <translation id="8110647606445335195">Tiada mercu tanda ARIA.</translation> -<translation id="8132379720172247073">Menu ChromeVox</translation> <translation id="8153880621934657047">Bukan dalam jadual.</translation> <translation id="817440585505441544">{COUNT,plural, =1{garis bawah}other{# garis bawah}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_nl.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_nl.xtb index 4ba7b00..4abab35 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_nl.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_nl.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Selectie is</translation> <translation id="8066678206530322333">Banner</translation> <translation id="8110647606445335195">Geen ARIA-oriëntatiepunten.</translation> -<translation id="8132379720172247073">ChromeVox-menu</translation> <translation id="8153880621934657047">Niet in tabel.</translation> <translation id="817440585505441544">{COUNT,plural, =1{underscore}other{# underscores}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_no.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_no.xtb index 185cfb8..5ef452e1 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_no.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_no.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Utvalget er</translation> <translation id="8066678206530322333">Banner</translation> <translation id="8110647606445335195">Det finnes ingen ARIA-landmerker.</translation> -<translation id="8132379720172247073">ChromeVox-menyen</translation> <translation id="8153880621934657047">Ikke inne i tabellen.</translation> <translation id="817440585505441544">{COUNT,plural, =1{understrek}other{# understreker}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pl.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pl.xtb index d44dcbc3..aeb8bab3 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pl.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pl.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Bieżący wybór to</translation> <translation id="8066678206530322333">Baner</translation> <translation id="8110647606445335195">Brak punktów orientacyjnych ARIA.</translation> -<translation id="8132379720172247073">Menu ChromeVox</translation> <translation id="8153880621934657047">Poza tabelą.</translation> <translation id="817440585505441544">{COUNT,plural, =1{podkreślenie}few{# znaki podkreślenia}many{# znaków podkreślenia}other{# underscores}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-BR.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-BR.xtb index ae7ebfb..2dd2ef27 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-BR.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-BR.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">A seleção é</translation> <translation id="8066678206530322333">Banner</translation> <translation id="8110647606445335195">Nenhum ponto de referência ARIA.</translation> -<translation id="8132379720172247073">Menu do ChromeVox</translation> <translation id="8153880621934657047">Não está dentro da tabela.</translation> <translation id="817440585505441544">{COUNT,plural, =1{sublinhado}one{# sublinhados}other{# sublinhados}}</translation> <translation id="8179976553408161302">Entrar</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-PT.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-PT.xtb index 5c26812..6b8822ab 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-PT.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_pt-PT.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">A seleção é</translation> <translation id="8066678206530322333">Faixa</translation> <translation id="8110647606445335195">Não existe nenhum ponto de referência ARIA.</translation> -<translation id="8132379720172247073">Menu do ChromeVox</translation> <translation id="8153880621934657047">Não está dentro da tabela.</translation> <translation id="817440585505441544">{COUNT,plural, =1{sublinhado}other{# sublinhados}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ro.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ro.xtb index cc425bea..8a212e7 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ro.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ro.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Selecția este</translation> <translation id="8066678206530322333">Banner</translation> <translation id="8110647606445335195">Nu există repere ARIA.</translation> -<translation id="8132379720172247073">Meniul ChromeVox</translation> <translation id="8153880621934657047">Nu vă aflați în interiorul tabelului.</translation> <translation id="817440585505441544">{COUNT,plural, =1{caracter de subliniere}few{# caractere de subliniere}other{# de caractere de subliniere}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ru.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ru.xtb index 38016f0..b2f66b1 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ru.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ru.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Выбранный фрагмент.</translation> <translation id="8066678206530322333">Баннер</translation> <translation id="8110647606445335195">Ориентиров ARIA нет.</translation> -<translation id="8132379720172247073">Меню ChromeVox</translation> <translation id="8153880621934657047">Ошибка. Перейдите в таблицу.</translation> <translation id="817440585505441544">{COUNT,plural, =1{символ подчеркивания}one{# символ подчеркивания}few{# символа подчеркивания}many{# символов подчеркивания}other{# underscores}}</translation> <translation id="8179976553408161302">ВВОД</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sk.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sk.xtb index ef6ac73..646d551e 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sk.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sk.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Výber je</translation> <translation id="8066678206530322333">Banner</translation> <translation id="8110647606445335195">Žiadne orientačné body ARIA</translation> -<translation id="8132379720172247073">Ponuka ChromeVox</translation> <translation id="8153880621934657047">Mimo tabuľky</translation> <translation id="817440585505441544">{COUNT,plural, =1{podčiarkovník}few{# podčiarkovníky}many{# underscores}other{# podčiarkovníkov}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sl.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sl.xtb index fdce5472..4c98620 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sl.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sl.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Izbrano je</translation> <translation id="8066678206530322333">Pasica</translation> <translation id="8110647606445335195">Ni mejnika v različici ARIA.</translation> -<translation id="8132379720172247073">ChromeVoxov meni</translation> <translation id="8153880621934657047">Zunaj tabele.</translation> <translation id="817440585505441544">{COUNT,plural, =1{podčrtaj}one{# podčrtaj}two{# podčrtaja}few{# podčrtaji}other{# podčrtajev}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sr.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sr.xtb index d7108fd8..609099b 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sr.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sr.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Избор је</translation> <translation id="8066678206530322333">Банер</translation> <translation id="8110647606445335195">Нема ARIA обележја.</translation> -<translation id="8132379720172247073">ChromeVox мени</translation> <translation id="8153880621934657047">Нисте унутар табеле.</translation> <translation id="817440585505441544">{COUNT,plural, =1{доња црта}one{# доња црта}few{# доње црте}other{# доњих црта}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sv.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sv.xtb index 219058e8..fbba0d2 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sv.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sv.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Du har markerat</translation> <translation id="8066678206530322333">Banner</translation> <translation id="8110647606445335195">Det finns inga ARIA-landmärken.</translation> -<translation id="8132379720172247073">Menyn för ChromeVox</translation> <translation id="8153880621934657047">Inte i tabellen.</translation> <translation id="817440585505441544">{COUNT,plural, =1{understreck}other{# understreck}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sw.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sw.xtb index e5881fe..21604ad4 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sw.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_sw.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Uchaguzi ni</translation> <translation id="8066678206530322333">Bango</translation> <translation id="8110647606445335195">Hakuna vivutio vya ARIA.</translation> -<translation id="8132379720172247073">Menyu ya ChromeVox</translation> <translation id="8153880621934657047">Haimo ndani ya jedwali.</translation> <translation id="817440585505441544">{COUNT,plural, =1{kistari cha chini}other{vistari # vya chini}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ta.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ta.xtb index a59b3c5e..9b488249 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ta.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ta.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">நடப்பு தேர்வு</translation> <translation id="8066678206530322333">பேனர்</translation> <translation id="8110647606445335195">ARIA லேண்ட்மார்க்குகள் இல்லை.</translation> -<translation id="8132379720172247073">ChromeVox மெனு</translation> <translation id="8153880621934657047">அட்டவணையின் உள்ளே கிடையாது.</translation> <translation id="817440585505441544">{COUNT,plural, =1{அடிக்கோடு}other{# அடிக்கோடுகள்}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_te.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_te.xtb index cc99e9a9..c2d11ed6 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_te.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_te.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">ఎంచుకున్నది</translation> <translation id="8066678206530322333">బ్యానర్</translation> <translation id="8110647606445335195">ARIA మైలురాళ్లు లేవు.</translation> -<translation id="8132379720172247073">ChromeVox మెను</translation> <translation id="8153880621934657047">లోపల పట్టిక కాదు.</translation> <translation id="817440585505441544">{COUNT,plural, =1{అండర్స్కోర్ గుర్తు}other{# అండర్స్కోర్ గుర్తులు}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_th.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_th.xtb index 1de11195..6e49603214 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_th.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_th.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">รายการที่เลือกคือ</translation> <translation id="8066678206530322333">แบนเนอร์</translation> <translation id="8110647606445335195">ไม่มีจุดสังเกต ARIA</translation> -<translation id="8132379720172247073">เมนู ChromeVox</translation> <translation id="8153880621934657047">ไม่ได้อยู่ในตาราง</translation> <translation id="817440585505441544">{COUNT,plural, =1{เครื่องหมายขีดล่าง}other{# เครื่องหมายขีดล่าง}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_tr.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_tr.xtb index e1233f0..4ba12bf 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_tr.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_tr.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Yapılan seçim:</translation> <translation id="8066678206530322333">Banner</translation> <translation id="8110647606445335195">ARIA önemli noktası yok.</translation> -<translation id="8132379720172247073">ChromeVox Menüsü</translation> <translation id="8153880621934657047">Tablonun içinde değil.</translation> <translation id="817440585505441544">{COUNT,plural, =1{alt çizgi}other{# alt çizgi}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_uk.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_uk.xtb index 03cf76a..2176a6e 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_uk.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_uk.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Вибрано</translation> <translation id="8066678206530322333">Банер</translation> <translation id="8110647606445335195">Немає орієнтирів ARIA.</translation> -<translation id="8132379720172247073">Меню ChromeVox</translation> <translation id="8153880621934657047">Не всередині таблиці.</translation> <translation id="817440585505441544">{COUNT,plural, =1{підкреслення}one{# підкреслення}few{# підкреслення}many{# підкреслень}other{# underscores}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_vi.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_vi.xtb index deb0572..bf46bb9 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_vi.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_vi.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">Lựa chọn hiện tại là</translation> <translation id="8066678206530322333">Biểu ngữ</translation> <translation id="8110647606445335195">Không có mốc ARIA nào.</translation> -<translation id="8132379720172247073">Menu ChromeVox</translation> <translation id="8153880621934657047">Không phải bên trong bảng.</translation> <translation id="817440585505441544">{COUNT,plural, =1{dấu gạch dưới}other{# dấu gạch dưới}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-CN.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-CN.xtb index fb499ae..884d2d3 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-CN.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-CN.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">当前选择为</translation> <translation id="8066678206530322333">横幅</translation> <translation id="8110647606445335195">无ARIA地标。</translation> -<translation id="8132379720172247073">ChromeVox 菜单</translation> <translation id="8153880621934657047">不在表格内。</translation> <translation id="817440585505441544">{COUNT,plural, =1{1个下划线}other{#个下划线}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-TW.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-TW.xtb index eb392d9..c0ed322 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-TW.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-TW.xtb
@@ -662,7 +662,6 @@ <translation id="8065607967589909823">所選項目是</translation> <translation id="8066678206530322333">橫幅</translation> <translation id="8110647606445335195">沒有 ARIA 地標。</translation> -<translation id="8132379720172247073">ChromeVox 選單</translation> <translation id="8153880621934657047">不在表格內。</translation> <translation id="817440585505441544">{COUNT,plural, =1{底線}other{# 個底線}}</translation> <translation id="8179976553408161302">Enter</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py b/chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py index 4b31438..81a80f9 100755 --- a/chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py +++ b/chrome/browser/resources/chromeos/chromevox/tools/jsbundler.py
@@ -40,7 +40,7 @@ _CHROME_SOURCE = os.path.realpath( os.path.join(_SCRIPT_DIR, *[os.path.pardir] * 6)) sys.path.insert(0, os.path.join( - _CHROME_SOURCE, 'third_party/WebKit/Source/build/scripts')) + _CHROME_SOURCE, 'third_party/WebKit/Source/devtools/scripts')) sys.path.insert(0, os.path.join( _CHROME_SOURCE, ('chrome/third_party/chromevox/third_party/' + 'closure-library/closure/bin/build')))
diff --git a/chrome/browser/resources/chromeos/login/login.js b/chrome/browser/resources/chromeos/login/login.js index ef3e6f0..2ecdc86 100644 --- a/chrome/browser/resources/chromeos/login/login.js +++ b/chrome/browser/resources/chromeos/login/login.js
@@ -16,6 +16,9 @@ * be invoked to do final setup. */ initialize: function() { + // TODO(jdufault): Remove this after resolving crbug.com/452599. + console.log('Initializing OOBE'); + cr.ui.login.DisplayManager.initialize(); login.WrongHWIDScreen.register(); login.AccountPickerScreen.register();
diff --git a/chrome/browser/resources/history/externs.js b/chrome/browser/resources/history/externs.js index fe44653..354d0ff 100644 --- a/chrome/browser/resources/history/externs.js +++ b/chrome/browser/resources/history/externs.js
@@ -19,6 +19,7 @@ * deviceName: string, * deviceType: string, * domain: string, + * fallbackFaviconText: string, * hostFilteringBehavior: number, * snippet: string, * starred: boolean,
diff --git a/chrome/browser/resources/history/history.css b/chrome/browser/resources/history/history.css index f3d432b..3cf0bd0 100644 --- a/chrome/browser/resources/history/history.css +++ b/chrome/browser/resources/history/history.css
@@ -334,12 +334,6 @@ margin-top: 1px; } -html[dir='rtl'] .entry .title, -html[dir='rtl'] .site-domain { - /* Put the favicon on the right. */ - background-position-x: right; -} - .entry .time { color: rgb(151, 156, 160); max-width: 90px; @@ -447,38 +441,29 @@ white-space: nowrap; } -.entry .visit-entry, -.site-domain { - /* Make room for the favicon. */ - -webkit-padding-start: 16px; -} - -.entry .visit-entry, -.site-domain, -.blocked-indicator { - /* Control the favicon appearance. */ - background-position-y: center; - background-repeat: no-repeat; - background-size: 16px; -} - -html[dir='rtl'] .entry .visit-entry, -html[dir='rtl'] .site-domain, -html[dir='rtl'] .blocked-indicator { - background-position-x: right; -} - /* TODO(sergiu): If this is the final icon replace it with a separate resource. */ .entry .blocked-indicator { - -webkit-padding-start: 20px; /* 16px for favicon, 4px for <a> padding. */ - background-image: url(../ssl/images/roadblock.png); + -webkit-padding-start: 4px; /* For <a> padding. */ } .blocked-indicator .title { color: rgb(151, 156, 160); } +.blocked-icon { + background-image: url(../ssl/images/roadblock.png) +} + +.favicon { + background-position-y: center; + background-repeat: no-repeat; + background-size: 16px; + flex-shrink: 0; + height: 16px; + width: 16px; +} + .site-domain button:hover { text-decoration: none; }
diff --git a/chrome/browser/resources/history/history.js b/chrome/browser/resources/history/history.js index 6429683..1f1c40b9 100644 --- a/chrome/browser/resources/history/history.js +++ b/chrome/browser/resources/history/history.js
@@ -92,6 +92,7 @@ this.url_ = result.url; this.domain_ = result.domain; this.starred_ = result.starred; + this.fallbackFaviconText_ = result.fallbackFaviconText; // These identify the name and type of the device on which this visit // occurred. They will be empty if the visit occurred on the current device. @@ -219,6 +220,15 @@ entryBox.appendChild(bookmarkSection); + if (addTitleFavicon || this.blockedVisit) { + var faviconSection = createElementWithClassName('div', 'favicon'); + if (this.blockedVisit) + faviconSection.classList.add('blocked-icon'); + else + this.loadFavicon_(faviconSection); + entryBox.appendChild(faviconSection); + } + var visitEntryWrapper = /** @type {HTMLElement} */( entryBox.appendChild(document.createElement('div'))); if (addTitleFavicon || this.blockedVisit) @@ -230,9 +240,6 @@ var title = visitEntryWrapper.appendChild( this.getTitleDOM_(isSearchResult)); - if (addTitleFavicon) - this.addFaviconToElement_(visitEntryWrapper); - if (focusless) title.querySelector('a').tabIndex = -1; @@ -440,15 +447,42 @@ }; /** - * Set the favicon for an element. - * @param {Element} el The DOM element to which to add the icon. + * Load the favicon for an element. + * @param {Element} faviconDiv The DOM element for which to load the icon. * @private */ -Visit.prototype.addFaviconToElement_ = function(el) { - var url = isMobileVersion() ? - getFaviconImageSet(this.url_, 32, 'touch-icon') : - getFaviconImageSet(this.url_); - el.style.backgroundImage = url; +Visit.prototype.loadFavicon_ = function(faviconDiv) { + if (cr.isAndroid) { + // On Android, if a large icon is unavailable, an HTML/CSS fallback favicon + // is generated because Android does not yet support text drawing in native. + + // Check whether a fallback favicon needs to be generated. + var desiredPixelSize = 32 * window.devicePixelRatio; + var img = new Image(); + img.onload = this.onLargeFaviconLoadedAndroid_.bind(this, faviconDiv); + img.src = 'chrome://large-icon/' + desiredPixelSize + '/' + this.url_; + } else { + faviconDiv.style.backgroundImage = getFaviconImageSet(this.url_); + } +}; + +/** + * Called when the chrome://large-icon image has finished loading. + * @param {Element} faviconDiv The DOM element to add the favicon to. + * @param {Event} event The onload event. + * @private + */ +Visit.prototype.onLargeFaviconLoadedAndroid_ = function(faviconDiv, event) { + // The loaded image should either: + // - Have the desired size. + // OR + // - Be 1x1 px with the background color for the fallback icon. + var loadedImg = event.target; + if (loadedImg.width == 1) { + faviconDiv.classList.add('fallback-favicon'); + faviconDiv.textContent = this.fallbackFaviconText_; + } + faviconDiv.style.backgroundImage = url(loadedImg.src); }; /** @@ -1341,6 +1375,8 @@ var siteArrow = siteDomainRow.appendChild( createElementWithClassName('div', 'site-domain-arrow')); + var siteFavicon = siteDomainRow.appendChild( + createElementWithClassName('div', 'favicon')); var siteDomain = siteDomainRow.appendChild( createElementWithClassName('div', 'site-domain')); var siteDomainLink = siteDomain.appendChild(new ActionLink); @@ -1352,7 +1388,7 @@ domainVisits.length); siteDomain.appendChild(numberOfVisits); - domainVisits[0].addFaviconToElement_(siteDomain); + domainVisits[0].loadFavicon_(siteFavicon); siteDomainWrapper.addEventListener( 'click', this.toggleGroupedVisits_.bind(this));
diff --git a/chrome/browser/resources/history/history_mobile.css b/chrome/browser/resources/history/history_mobile.css index 4a4bfbf..9f9ce36 100644 --- a/chrome/browser/resources/history/history_mobile.css +++ b/chrome/browser/resources/history/history_mobile.css
@@ -196,8 +196,7 @@ .entry .visit-entry { -webkit-flex: auto; -webkit-flex-flow: column; - -webkit-padding-start: 48px; - background-size: 32px; + -webkit-padding-start: 16px; line-height: 1.3; } @@ -221,6 +220,19 @@ display: inline; } +.favicon { + background-size: 32px; + height: 32px; + width: 32px; +} + +.fallback-favicon { + border-radius: 2px; + color: white; + font: bold 20px/32px sans-serif; + text-align: center; +} + .entry .domain { font-size: 14px; }
diff --git a/chrome/browser/resources/md_downloads/compiled_resources.gyp b/chrome/browser/resources/md_downloads/compiled_resources.gyp index 89a982f5..6c27098 100644 --- a/chrome/browser/resources/md_downloads/compiled_resources.gyp +++ b/chrome/browser/resources/md_downloads/compiled_resources.gyp
@@ -21,6 +21,7 @@ '../../../../third_party/polymer/v1_0/components-chromium/iron-behaviors/iron-control-state-extracted.js', '../../../../third_party/polymer/v1_0/components-chromium/iron-list/iron-list-extracted.js', '../../../../third_party/polymer/v1_0/components-chromium/iron-resizable-behavior/iron-resizable-behavior-extracted.js', + '../../../../third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/iron-scroll-target-behavior-extracted.js', '../../../../third_party/polymer/v1_0/components-chromium/paper-behaviors/paper-inky-focus-behavior-extracted.js', '../../../../third_party/polymer/v1_0/components-chromium/paper-behaviors/paper-ripple-behavior-extracted.js', '../../../../third_party/polymer/v1_0/components-chromium/paper-ripple/paper-ripple-extracted.js',
diff --git a/chrome/browser/resources/md_downloads/crisper.js b/chrome/browser/resources/md_downloads/crisper.js index cd32493..1c61c9f 100644 --- a/chrome/browser/resources/md_downloads/crisper.js +++ b/chrome/browser/resources/md_downloads/crisper.js
@@ -313,48 +313,47 @@ } /** - * The mapping used by the sendWithCallback mechanism to tie the callback - * supplied to an invocation of sendWithCallback with the WebUI response - * sent by the browser in response to the chrome.send call. The mapping is - * from ID to callback function; the ID is generated by sendWithCallback and - * is unique across all invocations of said method. - * @type {!Object<Function>} + * The mapping used by the sendWithPromise mechanism to tie the Promise + * returned to callers with the corresponding WebUI response. The mapping is + * from ID to the Promise resolver function; the ID is generated by + * sendWithPromise and is unique across all invocations of said method. + * @type {!Object<!Function>} */ - var chromeSendCallbackMap = Object.create(null); + var chromeSendResolverMap = {}; /** * The named method the WebUI handler calls directly in response to a - * chrome.send call that expects a callback. The handler requires no knowledge + * chrome.send call that expects a response. The handler requires no knowledge * of the specific name of this method, as the name is passed to the handler * as the first argument in the arguments list of chrome.send. The handler * must pass the ID, also sent via the chrome.send arguments list, as the * first argument of the JS invocation; additionally, the handler may - * supply any number of other arguments that will be forwarded to the - * callback. - * @param {string} id The unique ID identifying the callback method this - * response is tied to. + * supply any number of other arguments that will be included in the response. + * @param {string} id The unique ID identifying the Promise this response is + * tied to. + * @param {*} response The response as sent from C++. */ - function webUIResponse(id) { - chromeSendCallbackMap[id].apply( - null, Array.prototype.slice.call(arguments, 1)); - delete chromeSendCallbackMap[id]; + function webUIResponse(id, response) { + var resolverFn = chromeSendResolverMap[id]; + delete chromeSendResolverMap[id]; + resolverFn(response); } /** - * A variation of chrome.send which allows the client to receive a direct - * callback without requiring the handler to have specific knowledge of any - * JS internal method names or state. The callback will be removed from the - * mapping once it has fired. + * A variation of chrome.send, suitable for messages that expect a single + * response from C++. * @param {string} methodName The name of the WebUI handler API. - * @param {Array|undefined} args Arguments for the method call sent to the - * WebUI handler. Pass undefined if no args should be sent to the handler. - * @param {Function} callback A callback function which is called (indirectly) - * by the WebUI handler. + * @param {...*} var_args Varibale number of arguments to be forwarded to the + * C++ call. + * @return {!Promise} */ - function sendWithCallback(methodName, args, callback) { - var id = methodName + createUid(); - chromeSendCallbackMap[id] = callback; - chrome.send(methodName, ['cr.webUIResponse', id].concat(args || [])); + function sendWithPromise(methodName, var_args) { + var args = Array.prototype.slice.call(arguments, 1); + return new Promise(function(resolve, reject) { + var id = methodName + '_' + createUid(); + chromeSendResolverMap[id] = resolve; + chrome.send(methodName, [id].concat(args)); + }); } /** @@ -403,7 +402,7 @@ getUid: getUid, makePublic: makePublic, webUIResponse: webUIResponse, - sendWithCallback: sendWithCallback, + sendWithPromise: sendWithPromise, webUIListenerCallback: webUIListenerCallback, addWebUIListener: addWebUIListener, PropertyKind: PropertyKind, @@ -982,12 +981,15 @@ // <include src="../../../../ui/webui/resources/js/assert.js"> /** - * Alias for document.getElementById. + * Alias for document.getElementById. Found elements must be HTMLElements. * @param {string} id The ID of the element to find. * @return {HTMLElement} The found element or null if not found. */ function $(id) { - return document.getElementById(id); + var el = document.getElementById(id); + var message = + 'Element ' + el + ' with id "' + id + '" is not an HTMLElement.'; + return el ? assertInstanceof(el, HTMLElement, message) : null; } /** @@ -5247,7 +5249,7 @@ }, _computeKeyboardClass: function(receivedFocusFromKeyboard) { - this.classList.toggle('keyboard-focus', receivedFocusFromKeyboard); + this.toggleClass('keyboard-focus', receivedFocusFromKeyboard); }, /** @@ -5258,7 +5260,8 @@ */ _spaceKeyDownHandler: function(event) { Polymer.IronButtonStateImpl._spaceKeyDownHandler.call(this, event); - if (this.hasRipple()) { + // Ensure that there is at most one ripple when the space key is held down. + if (this.hasRipple() && this.getRipple().ripples.length < 1) { this._ripple.uiDownAction(); } }, @@ -6012,6 +6015,7 @@ /** * Gets or sets the selected element. The default is to use the index of the item. + * @type {string|number} */ selected: { type: String, @@ -6068,6 +6072,7 @@ items: { type: Array, readOnly: true, + notify: true, value: function() { return []; } @@ -6129,7 +6134,7 @@ * Selects the given value. * * @method select - * @param {string} value the value to select. + * @param {string|number} value the value to select. */ select: function(value) { this.selected = value; @@ -6156,6 +6161,22 @@ this.selected = this._indexToValue(index); }, + /** + * Force a synchronous update of the `items` property. + * + * NOTE: Consider listening for the `iron-items-changed` event to respond to + * updates to the set of selectable items after updates to the DOM list and + * selection state have been made. + * + * WARNING: If you are using this method, you should probably consider an + * alternate approach. Synchronously querying for items is potentially + * slow for many use cases. The `items` property will update asynchronously + * on its own to reflect selectable items in the DOM. + */ + forceSynchronousItemUpdate: function() { + this._updateItems(); + }, + get _shouldUpdateSelection() { return this.selected != null; }, @@ -6219,7 +6240,8 @@ }, _valueForItem: function(item) { - return item[this.attrForSelected] || item.getAttribute(this.attrForSelected); + var propValue = item[this.attrForSelected]; + return propValue != undefined ? propValue : item.getAttribute(this.attrForSelected); }, _applySelection: function(item, isSelected) { @@ -6240,18 +6262,18 @@ // observe items change under the given node. _observeItems: function(node) { return Polymer.dom(node).observeNodes(function(mutations) { + this._updateItems(); + + if (this._shouldUpdateSelection) { + this._updateSelected(); + } + // Let other interested parties know about the change so that // we don't have to recreate mutation observers everywher. this.fire('iron-items-changed', mutations, { bubbles: false, cancelable: false }); - - this._updateItems(); - - if (this._shouldUpdateSelection) { - this._updateSelected(); - } }); }, @@ -6319,7 +6341,7 @@ * `value` will be toggled; otherwise the `value` will be selected. * * @method select - * @param {string} value the value to select. + * @param {string|number} value the value to select. */ select: function(value) { if (this.multi) { @@ -6446,7 +6468,7 @@ * Selects the given value. If the `multi` property is true, then the selected state of the * `value` will be toggled; otherwise the `value` will be selected. * - * @param {string} value the value to select. + * @param {string|number} value the value to select. */ select: function(value) { if (this._defaultFocusAsync) { @@ -6940,105 +6962,149 @@ } }; -Polymer.IronOverlayManager = { - - _overlays: [], - - // iframes have a default z-index of 100, so this default should be at least - // that. - _minimumZ: 101, - - _backdrops: [], - - _applyOverlayZ: function(overlay, aboveZ) { - this._setZ(overlay, aboveZ + 2); - }, - - _setZ: function(element, z) { - element.style.zIndex = z; - }, - - // track overlays for z-index and focus managemant - addOverlay: function(overlay) { - var minimumZ = Math.max(this.currentOverlayZ(), this._minimumZ); - this._overlays.push(overlay); - var newZ = this.currentOverlayZ(); - if (newZ <= minimumZ) { - this._applyOverlayZ(overlay, minimumZ); - } - }, - - removeOverlay: function(overlay) { - var i = this._overlays.indexOf(overlay); - if (i >= 0) { - this._overlays.splice(i, 1); - this._setZ(overlay, ''); - } - }, - - currentOverlay: function() { - var i = this._overlays.length - 1; - while (this._overlays[i] && !this._overlays[i].opened) { - --i; - } - return this._overlays[i]; - }, - - currentOverlayZ: function() { - var z = this._minimumZ; - var current = this.currentOverlay(); - if (current) { - var z1 = window.getComputedStyle(current).zIndex; - if (!isNaN(z1)) { - z = Number(z1); - } - } - return z; - }, - +/** + * @struct + * @constructor + */ + Polymer.IronOverlayManagerClass = function() { + this._overlays = []; /** - * Ensures that the minimum z-index of new overlays is at least `minimumZ`. - * This does not effect the z-index of any existing overlays. - * - * @param {number} minimumZ + * iframes have a default z-index of 100, so this default should be at least + * that. + * @private {number} */ - ensureMinimumZ: function(minimumZ) { - this._minimumZ = Math.max(this._minimumZ, minimumZ); - }, + this._minimumZ = 101; - focusOverlay: function() { - var current = this.currentOverlay(); - // We have to be careful to focus the next overlay _after_ any current - // transitions are complete (due to the state being toggled prior to the - // transition). Otherwise, we risk infinite recursion when a transitioning - // (closed) overlay becomes the current overlay. - // - // NOTE: We make the assumption that any overlay that completes a transition - // will call into focusOverlay to kick the process back off. Currently: - // transitionend -> _applyFocus -> focusOverlay. - if (current && !current.transitioning) { - current._applyFocus(); - } - }, + this._backdrops = []; + } - trackBackdrop: function(element) { - // backdrops contains the overlays with a backdrop that are currently - // visible - if (element.opened) { - this._backdrops.push(element); - } else { - var index = this._backdrops.indexOf(element); - if (index >= 0) { - this._backdrops.splice(index, 1); - } - } - }, - - getBackdrops: function() { - return this._backdrops; - } - + Polymer.IronOverlayManagerClass.prototype._applyOverlayZ = function(overlay, aboveZ) { + this._setZ(overlay, aboveZ + 2); }; + + Polymer.IronOverlayManagerClass.prototype._setZ = function(element, z) { + element.style.zIndex = z; + }; + + /** + * track overlays for z-index and focus managemant + */ + Polymer.IronOverlayManagerClass.prototype.addOverlay = function(overlay) { + var minimumZ = Math.max(this.currentOverlayZ(), this._minimumZ); + this._overlays.push(overlay); + var newZ = this.currentOverlayZ(); + if (newZ <= minimumZ) { + this._applyOverlayZ(overlay, minimumZ); + } + }; + + Polymer.IronOverlayManagerClass.prototype.removeOverlay = function(overlay) { + var i = this._overlays.indexOf(overlay); + if (i >= 0) { + this._overlays.splice(i, 1); + this._setZ(overlay, ''); + } + }; + + Polymer.IronOverlayManagerClass.prototype.currentOverlay = function() { + var i = this._overlays.length - 1; + while (this._overlays[i] && !this._overlays[i].opened) { + --i; + } + return this._overlays[i]; + }; + + Polymer.IronOverlayManagerClass.prototype.currentOverlayZ = function() { + return this._getOverlayZ(this.currentOverlay()); + }; + + /** + * Ensures that the minimum z-index of new overlays is at least `minimumZ`. + * This does not effect the z-index of any existing overlays. + * + * @param {number} minimumZ + */ + Polymer.IronOverlayManagerClass.prototype.ensureMinimumZ = function(minimumZ) { + this._minimumZ = Math.max(this._minimumZ, minimumZ); + }; + + Polymer.IronOverlayManagerClass.prototype.focusOverlay = function() { + var current = this.currentOverlay(); + // We have to be careful to focus the next overlay _after_ any current + // transitions are complete (due to the state being toggled prior to the + // transition). Otherwise, we risk infinite recursion when a transitioning + // (closed) overlay becomes the current overlay. + // + // NOTE: We make the assumption that any overlay that completes a transition + // will call into focusOverlay to kick the process back off. Currently: + // transitionend -> _applyFocus -> focusOverlay. + if (current && !current.transitioning) { + current._applyFocus(); + } + }; + + Polymer.IronOverlayManagerClass.prototype.trackBackdrop = function(element) { + // backdrops contains the overlays with a backdrop that are currently + // visible + var index = this._backdrops.indexOf(element); + if (element.opened && element.withBackdrop) { + // no duplicates + if (index === -1) { + this._backdrops.push(element); + } + } else if (index >= 0) { + this._backdrops.splice(index, 1); + } + }; + + Object.defineProperty(Polymer.IronOverlayManagerClass.prototype, "backdropElement", { + get: function() { + if (!this._backdropElement) { + this._backdropElement = document.createElement('iron-overlay-backdrop'); + } + return this._backdropElement; + } + }); + + Polymer.IronOverlayManagerClass.prototype.getBackdrops = function() { + return this._backdrops; + }; + + /** + * Returns the z-index for the backdrop. + */ + Polymer.IronOverlayManagerClass.prototype.backdropZ = function() { + return this._getOverlayZ(this._overlayWithBackdrop()) - 1; + }; + + /** + * Returns the first opened overlay that has a backdrop. + */ + Polymer.IronOverlayManagerClass.prototype._overlayWithBackdrop = function() { + for (var i = 0; i < this._overlays.length; i++) { + if (this._overlays[i].opened && this._overlays[i].withBackdrop) { + return this._overlays[i]; + } + } + }; + + /** + * Calculates the minimum z-index for the overlay. + */ + Polymer.IronOverlayManagerClass.prototype._getOverlayZ = function(overlay) { + var z = this._minimumZ; + if (overlay) { + var z1 = Number(window.getComputedStyle(overlay).zIndex); + // Check if is a number + // Number.isNaN not supported in IE 10+ + if (z1 === z1) { + z = z1; + } + } + return z; + }; + + Polymer.IronOverlayManager = new Polymer.IronOverlayManagerClass(); (function() { Polymer({ @@ -7064,13 +7130,18 @@ }, + listeners: { + 'transitionend' : '_onTransitionend' + }, + /** * Appends the backdrop to document body and sets its `z-index` to be below the latest overlay. */ prepare: function() { + // Always update z-index + this.style.zIndex = this._manager.backdropZ(); if (!this.parentNode) { Polymer.dom(document.body).appendChild(this); - this.style.zIndex = this._manager.currentOverlayZ() - 1; } }, @@ -7088,9 +7159,18 @@ * Hides the backdrop if needed. */ close: function() { - // only need to make the backdrop invisible if this is called by the last overlay with a backdrop - if (this._manager.getBackdrops().length < 2) { + // Always update z-index + this.style.zIndex = this._manager.backdropZ(); + // close only if no element with backdrop is left + if (this._manager.getBackdrops().length === 0) { + // Read style before setting opened. + var cs = getComputedStyle(this); + var noAnimation = (cs.transitionDuration === '0s' || cs.opacity == 0); this._setOpened(false); + // In case of no animations, complete + if (noAnimation) { + this.complete(); + } } }, @@ -7102,6 +7182,12 @@ if (this._manager.getBackdrops().length === 0 && this.parentNode) { Polymer.dom(this.parentNode).removeChild(this); } + }, + + _onTransitionend: function (event) { + if (event && event.target === this) { + this.complete(); + } } }); @@ -7171,8 +7257,8 @@ * Set to true to display a backdrop behind the overlay. */ withBackdrop: { - type: Boolean, - value: false + observer: '_withBackdropChanged', + type: Boolean }, /** @@ -7226,6 +7312,18 @@ value: function() { return this._onCaptureKeydown.bind(this); } + }, + + _boundOnCaptureFocus: { + type: Function, + value: function() { + return this._onCaptureFocus.bind(this); + } + }, + + /** @type {?Node} */ + _focusedChild: { + type: Object } }, @@ -7239,18 +7337,17 @@ * @type Node */ get backdropElement() { - return this._backdrop; + return this._manager.backdropElement; }, get _focusNode() { - return Polymer.dom(this).querySelector('[autofocus]') || this; - }, - - registered: function() { - this._backdrop = document.createElement('iron-overlay-backdrop'); + return this._focusedChild || Polymer.dom(this).querySelector('[autofocus]') || this; }, ready: function() { + // with-backdrop need tabindex to be set in order to trap the focus. + // If it is not set, IronOverlayBehavior will set it, and remove it if with-backdrop = false. + this.__shouldRemoveTabIndex = false; this._ensureSetup(); }, @@ -7263,7 +7360,7 @@ detached: function() { this.opened = false; - this._completeBackdrop(); + this._manager.trackBackdrop(this); this._manager.removeOverlay(this); }, @@ -7271,6 +7368,7 @@ * Toggle the opened state of the overlay. */ toggle: function() { + this._setCanceled(false); this.opened = !this.opened; }, @@ -7278,16 +7376,16 @@ * Open the overlay. */ open: function() { + this._setCanceled(false); this.opened = true; - this.closingReason = {canceled: false}; }, /** * Close the overlay. */ close: function() { - this.opened = false; this._setCanceled(false); + this.opened = false; }, /** @@ -7299,8 +7397,8 @@ return; } - this.opened = false; this._setCanceled(true); + this.opened = false; }, _ensureSetup: function() { @@ -7317,6 +7415,7 @@ this.removeAttribute('aria-hidden'); } else { this.setAttribute('aria-hidden', 'true'); + Polymer.dom(this).unobserveNodes(this._observer); } // wait to call after ready only if we're initially open @@ -7324,30 +7423,32 @@ this._callOpenedWhenReady = this.opened; return; } - if (this._openChangedAsync) { - this.cancelAsync(this._openChangedAsync); - } - this._toggleListeners(); + this._manager.trackBackdrop(this); if (this.opened) { this._prepareRenderOpened(); } - // async here to allow overlay layer to become visible. + if (this._openChangedAsync) { + this.cancelAsync(this._openChangedAsync); + } + // Async here to allow overlay layer to become visible, and to avoid + // listeners to immediately close via a click. this._openChangedAsync = this.async(function() { // overlay becomes visible here this.style.display = ''; - // force layout to ensure transitions will go - /** @suppress {suspiciousCode} */ this.offsetWidth; + // Force layout to ensure transition will go. Set offsetWidth to itself + // so that compilers won't remove it. + this.offsetWidth = this.offsetWidth; if (this.opened) { this._renderOpened(); } else { this._renderClosed(); } + this._toggleListeners(); this._openChangedAsync = null; - }); - + }, 1); }, _canceledChanged: function() { @@ -7355,6 +7456,29 @@ this.closingReason.canceled = this.canceled; }, + _withBackdropChanged: function() { + // If tabindex is already set, no need to override it. + if (this.withBackdrop && !this.hasAttribute('tabindex')) { + this.setAttribute('tabindex', '-1'); + this.__shouldRemoveTabIndex = true; + } else if (this.__shouldRemoveTabIndex) { + this.removeAttribute('tabindex'); + this.__shouldRemoveTabIndex = false; + } + if (this.opened) { + this._manager.trackBackdrop(this); + if (this.withBackdrop) { + this.backdropElement.prepare(); + // Give time to be added to document. + this.async(function(){ + this.backdropElement.open(); + }, 1); + } else { + this.backdropElement.close(); + } + } + }, + _toggleListener: function(enable, node, event, boundListener, capture) { if (enable) { // enable document-wide tap recognizer @@ -7371,30 +7495,23 @@ } }, - _toggleListeners: function() { - if (this._toggleListenersAsync) { - this.cancelAsync(this._toggleListenersAsync); - } - // async so we don't auto-close immediately via a click. - this._toggleListenersAsync = this.async(function() { - this._toggleListener(this.opened, document, 'tap', this._boundOnCaptureClick, true); - this._toggleListener(this.opened, document, 'keydown', this._boundOnCaptureKeydown, true); - this._toggleListenersAsync = null; - }, 1); + _toggleListeners: function () { + this._toggleListener(this.opened, document, 'tap', this._boundOnCaptureClick, true); + this._toggleListener(this.opened, document, 'keydown', this._boundOnCaptureKeydown, true); + this._toggleListener(this.opened, document, 'focus', this._boundOnCaptureFocus, true); }, // tasks which must occur before opening; e.g. making the element visible _prepareRenderOpened: function() { this._manager.addOverlay(this); - if (this.withBackdrop) { - this.backdropElement.prepare(); - this._manager.trackBackdrop(this); - } - this._preparePositioning(); this.fit(); this._finishPositioning(); + + if (this.withBackdrop) { + this.backdropElement.prepare(); + } }, // tasks which cause the overlay to actually open; typically play an @@ -7413,52 +7530,25 @@ this._finishRenderClosed(); }, - _onTransitionend: function(event) { - // make sure this is our transition event. - if (event && event.target !== this) { - return; - } - if (this.opened) { - this._finishRenderOpened(); - } else { - this._finishRenderClosed(); - } - }, - _finishRenderOpened: function() { // focus the child node with [autofocus] - if (!this.noAutoFocus) { - this._focusNode.focus(); - } + this._applyFocus(); + this._observer = Polymer.dom(this).observeNodes(this.notifyResize); this.fire('iron-overlay-opened'); - - this._squelchNextResize = true; - this.async(this.notifyResize); }, _finishRenderClosed: function() { // hide the overlay and remove the backdrop this.resetFit(); this.style.display = 'none'; - this._completeBackdrop(); this._manager.removeOverlay(this); - this._focusNode.blur(); - // focus the next overlay, if there is one - this._manager.focusOverlay(); + this._focusedChild = null; + this._applyFocus(); + this.notifyResize(); this.fire('iron-overlay-closed', this.closingReason); - - this._squelchNextResize = true; - this.async(this.notifyResize); - }, - - _completeBackdrop: function() { - if (this.withBackdrop) { - this._manager.trackBackdrop(this); - this.backdropElement.complete(); - } }, _preparePositioning: function() { @@ -7487,27 +7577,39 @@ }, _onCaptureClick: function(event) { - if (!this.noCancelOnOutsideClick && - this._manager.currentOverlay() === this && + if (this._manager.currentOverlay() === this && Polymer.dom(event).path.indexOf(this) === -1) { - this.cancel(); + if (this.noCancelOnOutsideClick) { + this._applyFocus(); + } else { + this.cancel(); + } } }, _onCaptureKeydown: function(event) { var ESC = 27; - if (!this.noCancelOnEscKey && (event.keyCode === ESC)) { + if (this._manager.currentOverlay() === this && + !this.noCancelOnEscKey && + event.keyCode === ESC) { this.cancel(); - event.stopPropagation(); - event.stopImmediatePropagation(); + } + }, + + _onCaptureFocus: function (event) { + if (this._manager.currentOverlay() === this && + this.withBackdrop) { + var path = Polymer.dom(event).path; + if (path.indexOf(this) === -1) { + event.stopPropagation(); + this._applyFocus(); + } else { + this._focusedChild = path[0]; + } } }, _onIronResize: function() { - if (this._squelchNextResize) { - this._squelchNextResize = false; - return; - } if (this.opened) { this.refit(); } @@ -7707,6 +7809,11 @@ return; } + if(this.animationConfig.value && typeof this.animationConfig.value === 'function') { + this._warn(this._logf('playAnimation', "Please put 'animationConfig' inside of your components 'properties' object instead of outside of it.")); + return; + } + // type is optional var thisConfig; if (type) { @@ -7935,6 +8042,11 @@ * @param {HTMLElement} element The element that should lock scroll. */ pushScrollLock: function(element) { + // Prevent pushing the same element twice + if (this._lockingElements.indexOf(element) >= 0) { + return; + } + if (this._lockingElements.length === 0) { this._lockScrollInteractions(); } @@ -8028,7 +8140,7 @@ _scrollInteractionHandler: function(event) { if (Polymer .IronDropdownScrollManager - .elementIsScrollLocked(event.target)) { + .elementIsScrollLocked(Polymer.dom(event).rootTarget)) { if (event.type === 'keydown' && !Polymer.IronDropdownScrollManager._isScrollingKeypress(event)) { return; @@ -8055,13 +8167,13 @@ document.body.style.overflowY = 'hidden'; // Modern `wheel` event for mouse wheel scrolling: - window.addEventListener('wheel', this._scrollInteractionHandler, true); + document.addEventListener('wheel', this._scrollInteractionHandler, true); // Older, non-standard `mousewheel` event for some FF: - window.addEventListener('mousewheel', this._scrollInteractionHandler, true); + document.addEventListener('mousewheel', this._scrollInteractionHandler, true); // IE: - window.addEventListener('DOMMouseScroll', this._scrollInteractionHandler, true); + document.addEventListener('DOMMouseScroll', this._scrollInteractionHandler, true); // Mobile devices can scroll on touch move: - window.addEventListener('touchmove', this._scrollInteractionHandler, true); + document.addEventListener('touchmove', this._scrollInteractionHandler, true); // Capture keydown to prevent scrolling keys (pageup, pagedown etc.) document.addEventListener('keydown', this._scrollInteractionHandler, true); }, @@ -8071,10 +8183,10 @@ document.body.style.overflowX = this._originalBodyStyles.overflowX; document.body.style.overflowY = this._originalBodyStyles.overflowY; - window.removeEventListener('wheel', this._scrollInteractionHandler, true); - window.removeEventListener('mousewheel', this._scrollInteractionHandler, true); - window.removeEventListener('DOMMouseScroll', this._scrollInteractionHandler, true); - window.removeEventListener('touchmove', this._scrollInteractionHandler, true); + document.removeEventListener('wheel', this._scrollInteractionHandler, true); + document.removeEventListener('mousewheel', this._scrollInteractionHandler, true); + document.removeEventListener('DOMMouseScroll', this._scrollInteractionHandler, true); + document.removeEventListener('touchmove', this._scrollInteractionHandler, true); document.removeEventListener('keydown', this._scrollInteractionHandler, true); } }; @@ -8239,6 +8351,7 @@ /** * The element that should be focused when the dropdown opens. + * @deprecated */ get _focusTarget() { return this.focusTarget || this.containedElement; @@ -8338,10 +8451,6 @@ this._prepareDropdown(); Polymer.IronOverlayBehaviorImpl._openedChanged.apply(this, arguments); } - - if (this.opened) { - this._focusContent(); - } }, /** @@ -8396,7 +8505,7 @@ var scrollTop; var scrollLeft; - if (containedElement) { + if (this.opened && containedElement) { scrollTop = containedElement.scrollTop; scrollLeft = containedElement.scrollLeft; } @@ -8407,7 +8516,7 @@ Polymer.IronOverlayBehaviorImpl._onIronResize.apply(this, arguments); - if (containedElement) { + if (this.opened && containedElement) { containedElement.scrollTop = scrollTop; containedElement.scrollLeft = scrollLeft; } @@ -8492,16 +8601,15 @@ }, /** - * Focuses the configured focus target. + * Apply focus to focusTarget or containedElement */ - _focusContent: function() { - // NOTE(cdata): This is async so that it can attempt the focus after - // `display: none` is removed from the element. - this.async(function() { - if (this._focusTarget) { - this._focusTarget.focus(); - } - }); + _applyFocus: function () { + var focusTarget = this.focusTarget || this.containedElement; + if (focusTarget && this.opened && !this.noAutoFocus) { + focusTarget.focus(); + } else { + Polymer.IronOverlayBehaviorImpl._applyFocus.apply(this, arguments); + } } }); })(); @@ -9920,7 +10028,8 @@ updateItem_: function(index, data) { this.set('items_.' + index, data); this.updateHideDates_(index, index); - this.$['downloads-list'].updateSizeForItem(index); + var list = /** @type {!IronListElement} */(this.$['downloads-list']); + list.updateSizeForItem(index); }, });
diff --git a/chrome/browser/resources/md_downloads/vulcanized.html b/chrome/browser/resources/md_downloads/vulcanized.html index 0eac03c..85123ff 100644 --- a/chrome/browser/resources/md_downloads/vulcanized.html +++ b/chrome/browser/resources/md_downloads/vulcanized.html
@@ -418,6 +418,12 @@ 0 5px 5px -3px rgba(0, 0, 0, 0.4); }; + --shadow-elevation-12dp: { + box-shadow: 0 12px 16px 1px rgba(0, 0, 0, 0.14), + 0 4px 22px 3px rgba(0, 0, 0, 0.12), + 0 6px 7px -4px rgba(0, 0, 0, 0.4); + }; + --shadow-elevation-16dp: { box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12),
diff --git a/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.js b/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.js index 531df0d..da84a48 100644 --- a/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.js +++ b/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.js
@@ -919,21 +919,30 @@ * * @param {string} sinkId The ID of the sink to which the Media Route was * creating a route. - * @param {string} routeId The ID of the newly created route for the sink if - * succeeded; empty otherwise. + * @param {?media_router.Route} route The newly created route that + * corresponds to the sink if route creation succeeded; null otherwise. + * @param {boolean} isForDisplay Whether or not |route| is for display. */ - onCreateRouteResponseReceived: function(sinkId, routeId) { - // Check that |sinkId| exists and corresponds to |currentLaunchingSinkId_|. - if (!this.sinkMap_[sinkId] || this.currentLaunchingSinkId_ != sinkId) - return; - + onCreateRouteResponseReceived: function(sinkId, route, isForDisplay) { // The provider will handle sending an issue for a failed route request. - if (this.isEmptyOrWhitespace_(routeId)) { + if (!route) { this.resetRouteCreationProperties_(false); return; } - this.pendingCreatedRouteId_ = routeId; + // Check that |sinkId| exists and corresponds to |currentLaunchingSinkId_|. + // TODO(apacible): Add metrics for when |route| is resolved for an invalid + // |sinkId|. See http://crbug.com/584993 + if (!this.sinkMap_[sinkId] || this.currentLaunchingSinkId_ != sinkId) + return; + + if (isForDisplay) { + this.showRouteDetails_(route); + this.startTapTimer_(); + this.resetRouteCreationProperties_(true); + } else { + this.pendingCreatedRouteId_ = route.id; + } }, /**
diff --git a/chrome/browser/resources/media_router/elements/route_details/route_details.css b/chrome/browser/resources/media_router/elements/route_details/route_details.css index 601c1dd..dc26fae 100644 --- a/chrome/browser/resources/media_router/elements/route_details/route_details.css +++ b/chrome/browser/resources/media_router/elements/route_details/route_details.css
@@ -9,10 +9,6 @@ width: 100%; } -#join-route-button { - @apply(--layout-flex); -} - #route-action-buttons { @apply(--layout-horizontal); @apply(--layout-end-justified); @@ -39,3 +35,8 @@ margin-top: 16px; overflow: hidden; } + +#start-casting-to-route-button { + @apply(--layout-flex); +} +
diff --git a/chrome/browser/resources/media_router/elements/route_details/route_details.html b/chrome/browser/resources/media_router/elements/route_details/route_details.html index 041b60a..e7875e6e 100644 --- a/chrome/browser/resources/media_router/elements/route_details/route_details.html +++ b/chrome/browser/resources/media_router/elements/route_details/route_details.html
@@ -12,10 +12,10 @@ </extensionview> <div id="route-action-buttons" class="layout"> <paper-button flat class="route-button button" - id="join-route-button" + id="start-casting-to-route-button" hidden$="[[!route.canJoin]]" - on-click="joinRoute_"> - <span>[[joinButtonText_]]</span> + on-click="startCastingToRoute_"> + <span>[[startCastingButtonText_]]</span> </paper-button> <paper-button flat class="route-button button" id="close-route-button"
diff --git a/chrome/browser/resources/media_router/elements/route_details/route_details.js b/chrome/browser/resources/media_router/elements/route_details/route_details.js index 39a4e86..64a50fb 100644 --- a/chrome/browser/resources/media_router/elements/route_details/route_details.js +++ b/chrome/browser/resources/media_router/elements/route_details/route_details.js
@@ -28,13 +28,13 @@ }, /** - * The text for the join button. + * The text for the start casting button. * @private {string} */ - joinButtonText_: { + startCastingButtonText_: { type: String, readOnly: true, - value: loadTimeData.getString('joinButton'), + value: loadTimeData.getString('startCastingButton'), }, /** @@ -44,9 +44,7 @@ stopCastingButtonText_: { type: String, readOnly: true, - value: function() { - return loadTimeData.getString('stopCastingButton'); - }, + value: function() { return loadTimeData.getString('stopCastingButton'); }, }, /** @@ -72,13 +70,13 @@ }, /** - * Fires a join-route-click event. This is called when the button to join - * the current route is clicked. + * Fires a start-casting-to-route-click event. This is called when the button + * to start casting to the current route is clicked. * * @private */ - joinRoute_: function() { - this.fire('join-route-click', {route: this.route}); + startCastingToRoute_: function() { + this.fire('start-casting-to-route-click', {route: this.route}); }, /**
diff --git a/chrome/browser/resources/media_router/media_router.js b/chrome/browser/resources/media_router/media_router.js index 34c662eb3..026ff364 100644 --- a/chrome/browser/resources/media_router/media_router.js +++ b/chrome/browser/resources/media_router/media_router.js
@@ -39,7 +39,6 @@ container.addEventListener('close-route-click', onCloseRouteClick); container.addEventListener('create-route', onCreateRoute); container.addEventListener('issue-action-click', onIssueActionClick); - container.addEventListener('join-route-click', onJoinRouteClick); container.addEventListener('navigate-sink-list-to-details', onNavigateToDetails); container.addEventListener('navigate-to-cast-mode-list', @@ -53,6 +52,8 @@ container.addEventListener('report-sink-count', onSinkCountReported); container.addEventListener('show-initial-state', onShowInitialState); container.addEventListener('sink-click', onSinkClick); + container.addEventListener('start-casting-to-route-click', + onStartCastingToRouteClick); // Pressing the ESC key closes the dialog. document.addEventListener('keydown', function(e) { @@ -184,14 +185,14 @@ } /** - * Joins a route. - * Called when the user requests to join a media route. + * Starts casting to an existing route. + * Called when the user requests to start casting to a media route. * * @param {!Event} event * Parameters in |event|.detail: - * route - route to join. + * route - The route to connect to if possible. */ - function onJoinRouteClick(event) { + function onStartCastingToRouteClick(event) { /** @type {{route: !media_router.Route}} */ var detail = event.detail; media_router.browserApi.joinRoute(detail.route);
diff --git a/chrome/browser/resources/media_router/media_router_ui_interface.js b/chrome/browser/resources/media_router/media_router_ui_interface.js index 031cf2b0..35e8afb 100644 --- a/chrome/browser/resources/media_router/media_router_ui_interface.js +++ b/chrome/browser/resources/media_router/media_router_ui_interface.js
@@ -15,11 +15,12 @@ * * @param {string} sinkId The ID of the sink to which the Media Route was * creating a route. - * @param {string} routeId The ID of the newly created route that corresponds - * to the sink if route creation succeeded; empty otherwise. + * @param {?media_router.Route} route The newly created route that + * corresponds to the sink if route creation succeeded; null otherwise. + * @param {boolean} isForDisplay Whether or not |route| is for display. */ - function onCreateRouteResponseReceived(sinkId, routeId) { - container.onCreateRouteResponseReceived(sinkId, routeId); + function onCreateRouteResponseReceived(sinkId, route, isForDisplay) { + container.onCreateRouteResponseReceived(sinkId, route, isForDisplay); } /**
diff --git a/chrome/browser/resources/options/manage_profile_overlay.js b/chrome/browser/resources/options/manage_profile_overlay.js index 917b6ef..874021e7 100644 --- a/chrome/browser/resources/options/manage_profile_overlay.js +++ b/chrome/browser/resources/options/manage_profile_overlay.js
@@ -375,7 +375,7 @@ // hidden, this gets called again with a list including // the just-created SU. Ignore, to prevent the "already exists" bubble // from showing up if the overlay is already hidden. - if (!this.visible) + if (PageManager.getTopmostVisiblePage().pageDiv != this.pageDiv) return; $('import-existing-supervised-user-link').hidden = supervisedUsers.length === 0;
diff --git a/chrome/browser/resources/popular_sites_internals.css b/chrome/browser/resources/popular_sites_internals.css index 1e50965..ee4c1d4 100644 --- a/chrome/browser/resources/popular_sites_internals.css +++ b/chrome/browser/resources/popular_sites_internals.css
@@ -43,3 +43,6 @@ background: rgb(239, 243, 255); } +#json-value { + font-size: 75%; +}
diff --git a/chrome/browser/resources/popular_sites_internals.html b/chrome/browser/resources/popular_sites_internals.html index e287b84..65ee20a 100644 --- a/chrome/browser/resources/popular_sites_internals.html +++ b/chrome/browser/resources/popular_sites_internals.html
@@ -55,6 +55,12 @@ <td class="detail" jscontent="title"></td> <td class="value" jscontent="url"></td> </tr> + <tr jsskip = true> + <td class="detail"> + <input id="view-json" type="submit" value="View JSON"> + </td> + <td class="value"><pre id="json-value"></pre></td> + </tr> </table> </div> </div>
diff --git a/chrome/browser/resources/popular_sites_internals.js b/chrome/browser/resources/popular_sites_internals.js index d68e8f9..ce1294d6 100644 --- a/chrome/browser/resources/popular_sites_internals.js +++ b/chrome/browser/resources/popular_sites_internals.js
@@ -16,6 +16,14 @@ $('submit-download').addEventListener('click', submitDownload); + function viewJson(event) { + $('json-value').textContent = ''; + chrome.send('viewJson'); + event.preventDefault(); + } + + $('view-json').addEventListener('click', viewJson); + chrome.send('registerForEvents'); } @@ -25,6 +33,12 @@ function receiveSites(sites) { jstProcess(new JsEvalContext(sites), $('sites')); + // Also clear the json string, since it's likely stale now. + $('json-value').textContent = ''; + } + + function receiveJson(json) { + $('json-value').textContent = json; } // Return an object with all of the exports. @@ -32,6 +46,7 @@ initialize: initialize, receiveDownloadResult: receiveDownloadResult, receiveSites: receiveSites, + receiveJson: receiveJson, }; });
diff --git a/chrome/browser/resources/signin_internals/signin_index.html b/chrome/browser/resources/signin_internals/signin_index.html deleted file mode 100644 index 9ab7197..0000000 --- a/chrome/browser/resources/signin_internals/signin_index.html +++ /dev/null
@@ -1,89 +0,0 @@ -<!doctype html> -<html i18n-values="dir:textdirection;lang:language"> -<head> - <meta charset="utf-8"> - <title>Signin Internals</title> - <script src="chrome://resources/js/cr.js"></script> - <script src="chrome://resources/js/util.js"></script> - <script src="chrome://resources/js/load_time_data.js"></script> - <script src="chrome://signin-internals/strings.js"></script> - <link rel="stylesheet" href="chrome://resources/css/text_defaults.css"> - <link rel="stylesheet" type="text/css" href="signin_index.css"> -</head> -<body> - <div id='signin-info'> - <div class="section" jsselect="signin_info"> - <h2 jscontent="title"></h2> - <table class="signin-details"> - <tr jsselect="data" - jsvalues="class:chrome.signin.setClassFromValue($this.value)" - jseval="chrome.signin.highlightIfChanged(this, - this.children[1].innerText, value)"> - <td jscontent="label"></td> - <td jscontent="status"></td> - <td jscontent="time" jsdisplay="time"></td> - <td jsdisplay="time.length==0"> </td> - </tr> - </table> - </div> - </div> - <div id='token-info'> - <h2>Access Token Details By Account</h2> - <div class="tokenSection" jsselect="token_info"> - <h3 jscontent="title"></h3> - <table class="signin-details"> - <tr class="header"> - <td>Service</td> - <td>Requested Scopes</td> - <td>Request Time</td> - <td>Request Status</td> - </tr> - <tr jsselect="data" - jsvalues="class:chrome.signin.setClassFromValue($this.status)" - jseval="chrome.signin.highlightIfAnyChanged(this, - [[this.children[1].innerText, scopes], - [this.children[2].innerText, request_time], - [this.children[3].innerText, status]])"> - <td jscontent="service"></td> - <td jsvalues=".innerHTML: scopes"></td> - <td jscontent="request_time"></td> - <td jsvalues=".innerHTML: status"></td> - </tr> - </table> - </div> - </div> - <div id='cookie-info'> - <h2>Accounts in Cookie Jar</h2> - <div class="cookieSection"> - <table class="signin-details"> - <tr class="header"> - <td>Email Address</td> - <td>Gaia ID</td> - <td>Validity</td> - </tr> - <tr jsselect="cookie_info"> - <td jscontent="email"></td> - <td jscontent="gaia_id"></td> - <td jscontent="valid"></td> - </tr> - </table> - </div> - </div> - <div id="account-info"> - <h2>Accounts in Token Service</h2> - <div class="account-section"> - <table class="signin-details"> - <tr class="header"> - <td>Accound Id</td> - </tr> - <tr jsselect="accountInfo"> - <td jscontent="accountId"></td> - </tr> - </table> - </div> - </div> - <script src="chrome://resources/js/i18n_template.js"></script> - <script src="chrome://resources/js/jstemplate_compiled.js"></script> - <script src="chrome://signin-internals/signin_internals.js"></script> -</body> -</html>
diff --git a/chrome/browser/resources/signin_internals_resources.grd b/chrome/browser/resources/signin_internals_resources.grd deleted file mode 100644 index 0bffb49..0000000 --- a/chrome/browser/resources/signin_internals_resources.grd +++ /dev/null
@@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<grit latest_public_release="0" current_release="1"> - <outputs> - <output filename="grit/signin_internals_resources.h" type="rc_header"> - <emit emit_type='prepend'></emit> - </output> - <output filename="signin_internals_resources.pak" type="data_package" /> - </outputs> - <release seq="1"> - <includes> - <include name="IDR_SIGNIN_INTERNALS_INDEX_HTML" - file="signin_internals/signin_index.html" - flattenhtml="true" allowexternalscript="true" type="BINDATA" /> - <include name="IDR_SIGNIN_INTERNALS_INDEX_JS" - file="signin_internals/signin_internals.js" type="BINDATA" /> - </includes> - </release> -</grit>
diff --git a/chrome/browser/storage/storage_info_fetcher.cc b/chrome/browser/storage/storage_info_fetcher.cc index 5ff81dc..e7ae2b62 100644 --- a/chrome/browser/storage/storage_info_fetcher.cc +++ b/chrome/browser/storage/storage_info_fetcher.cc
@@ -4,20 +4,28 @@ #include "chrome/browser/storage/storage_info_fetcher.h" +#include "chrome/browser/profiles/profile.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/browser_thread.h" +#include "content/public/browser/storage_partition.h" using content::BrowserContext; using content::BrowserThread; -StorageInfoFetcher::StorageInfoFetcher(storage::QuotaManager* quota_manager) - : quota_manager_(quota_manager) { +StorageInfoFetcher::StorageInfoFetcher(Profile* profile) { + quota_manager_ = content::BrowserContext::GetDefaultStoragePartition( + profile)->GetQuotaManager(); } StorageInfoFetcher::~StorageInfoFetcher() { } -void StorageInfoFetcher::FetchStorageInfo() { +void StorageInfoFetcher::FetchStorageInfo(const FetchCallback& fetch_callback) { + // Balanced in OnFetchCompleted. + AddRef(); + + fetch_callback_ = fetch_callback; + // QuotaManager must be called on IO thread, but the callback must then be // called on the UI thread. BrowserThread::PostTask( @@ -27,7 +35,15 @@ } void StorageInfoFetcher::ClearStorage( - const std::string& host, storage::StorageType type) { + const std::string& host, + storage::StorageType type, + const ClearCallback& clear_callback) { + // Balanced in OnUsageCleared. + AddRef(); + + clear_callback_ = clear_callback; + type_to_delete_ = type; + BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, base::Bind(&storage::QuotaManager::DeleteHostData, @@ -35,15 +51,8 @@ host, type, storage::QuotaClient::kAllClientsMask, - base::Bind(&StorageInfoFetcher::OnUsageCleared, this))); -} - -void StorageInfoFetcher::AddObserver(Observer* observer) { - observers_.AddObserver(observer); -} - -void StorageInfoFetcher::RemoveObserver(Observer* observer) { - observers_.RemoveObserver(observer); + base::Bind(&StorageInfoFetcher::OnUsageClearedInternal, + this))); } void StorageInfoFetcher::GetUsageInfo( @@ -59,17 +68,31 @@ entries_.insert(entries_.begin(), entries.begin(), entries.end()); BrowserThread::PostTask( BrowserThread::UI, FROM_HERE, - base::Bind(&StorageInfoFetcher::InvokeCallback, this)); + base::Bind(&StorageInfoFetcher::OnFetchCompleted, this)); } -void StorageInfoFetcher::OnUsageCleared(storage::QuotaStatusCode code) { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); - - FOR_EACH_OBSERVER(Observer, observers_, OnUsageInfoCleared(code)); -} - -void StorageInfoFetcher::InvokeCallback() { +void StorageInfoFetcher::OnFetchCompleted() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - FOR_EACH_OBSERVER(Observer, observers_, OnGetUsageInfo(entries_)); + fetch_callback_.Run(entries_); + + Release(); +} + +void StorageInfoFetcher::OnUsageClearedInternal(storage::QuotaStatusCode code) { + DCHECK_CURRENTLY_ON(content::BrowserThread::IO); + + quota_manager_->ResetUsageTracker(type_to_delete_); + + BrowserThread::PostTask( + BrowserThread::UI, FROM_HERE, + base::Bind(&StorageInfoFetcher::OnClearCompleted, this, code)); +} + +void StorageInfoFetcher::OnClearCompleted(storage::QuotaStatusCode code) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + + clear_callback_.Run(code); + + Release(); }
diff --git a/chrome/browser/storage/storage_info_fetcher.h b/chrome/browser/storage/storage_info_fetcher.h index fcd62543..2269bea 100644 --- a/chrome/browser/storage/storage_info_fetcher.h +++ b/chrome/browser/storage/storage_info_fetcher.h
@@ -8,36 +8,27 @@ #include "base/memory/ref_counted.h" #include "storage/browser/quota/quota_manager.h" +class Profile; + // Asynchronously fetches the amount of storage used by websites. class StorageInfoFetcher : public base::RefCountedThreadSafe<StorageInfoFetcher> { public: - // Observer interface for monitoring StorageInfoFetcher. - class Observer { - public: - // Called when the storage has been calculated. - virtual void OnGetUsageInfo(const storage::UsageInfoEntries& entries) = 0; + using FetchCallback = + base::Callback<void(const storage::UsageInfoEntries&)>; + using ClearCallback = + base::Callback<void(storage::QuotaStatusCode code)>; - // Called when the storage has been cleared. - virtual void OnUsageInfoCleared(storage::QuotaStatusCode code) = 0; - - protected: - virtual ~Observer() {} - }; - - explicit StorageInfoFetcher(storage::QuotaManager* quota_manager); + explicit StorageInfoFetcher(Profile* profile); // Asynchronously fetches the StorageInfo. - void FetchStorageInfo(); + void FetchStorageInfo(const FetchCallback& fetch_callback); // Asynchronously clears storage for the given host. - void ClearStorage(const std::string& host, storage::StorageType type); - - // Called when usage has been cleared. - void OnUsageCleared(storage::QuotaStatusCode code); - - void AddObserver(Observer* observer); - void RemoveObserver(Observer* observer); + void ClearStorage( + const std::string& host, + storage::StorageType type, + const ClearCallback& clear_callback); private: virtual ~StorageInfoFetcher(); @@ -51,10 +42,13 @@ void OnGetUsageInfoInternal(const storage::UsageInfoEntries& entries); // Reports back to all observers that information is available. - void InvokeCallback(); + void OnFetchCompleted(); - // All clients observing this class. - base::ObserverList<Observer> observers_; + // Called when usage has been cleared. + void OnUsageClearedInternal(storage::QuotaStatusCode code); + + // Reports back to all observers that storage has been deleted. + void OnClearCompleted(storage::QuotaStatusCode code); // The quota manager to use to calculate the storage usage. storage::QuotaManager* quota_manager_; @@ -62,6 +56,15 @@ // Hosts and their usage. storage::UsageInfoEntries entries_; + // The storage type to delete. + storage::StorageType type_to_delete_; + + // The callback to use when fetching is complete. + FetchCallback fetch_callback_; + + // The callback to use when storage has been cleared. + ClearCallback clear_callback_; + DISALLOW_COPY_AND_ASSIGN(StorageInfoFetcher); };
diff --git a/chrome/browser/sync/sync_sessions_metrics_android.cc b/chrome/browser/sync/sync_sessions_metrics_android.cc new file mode 100644 index 0000000..f057722 --- /dev/null +++ b/chrome/browser/sync/sync_sessions_metrics_android.cc
@@ -0,0 +1,51 @@ +// Copyright 2016 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 "chrome/browser/sync/sync_sessions_metrics_android.h" + +#include <string> + +#include "base/metrics/field_trial.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/sync/profile_sync_service_factory.h" +#include "components/browser_sync/browser/profile_sync_service.h" +#include "components/sync_sessions/sessions_sync_manager.h" +#include "components/sync_sessions/sync_sessions_metrics.h" +#include "jni/SyncSessionsMetrics_jni.h" + +// static +bool SyncSessionsMetricsAndroid::Register(JNIEnv* env) { + return RegisterNativesImpl(env); +} + +// static +void RecordYoungestForeignTabAgeOnNTP( + JNIEnv* env, + const base::android::JavaParamRef<jclass>& jcaller) { + // Unlike other platforms, Android typically disables session invalidations to + // conserve battery. This means that the foreign tab data may be quite stale. + // This would drastically distort the metric we want to emit here, however the + // revisit experiement disables said optimization, allowing us to collect + // valid data but at the cost of a much smaller sample size. + const std::string group_name = + base::FieldTrialList::FindFullName("PageRevisitInstrumentation"); + bool shouldInstrument = group_name == "Enabled"; + if (shouldInstrument) { + Profile* profile = ProfileManager::GetActiveUserProfile(); + if (profile) { + ProfileSyncService* sync = + ProfileSyncServiceFactory::GetForProfile(profile); + if (sync) { + browser_sync::SessionsSyncManager* sessions = + static_cast<browser_sync::SessionsSyncManager*>( + sync->GetSessionsSyncableService()); + if (sessions) { + sync_sessions::SyncSessionsMetrics::RecordYoungestForeignTabAgeOnNTP( + sessions); + } + } + } + } +}
diff --git a/chrome/browser/sync/sync_sessions_metrics_android.h b/chrome/browser/sync/sync_sessions_metrics_android.h new file mode 100644 index 0000000..1e168219 --- /dev/null +++ b/chrome/browser/sync/sync_sessions_metrics_android.h
@@ -0,0 +1,16 @@ +// Copyright 2016 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 CHROME_BROWSER_SYNC_SYNC_SESSIONS_METRICS_ANDROID_H_ +#define CHROME_BROWSER_SYNC_SYNC_SESSIONS_METRICS_ANDROID_H_ + +#include <jni.h> + +// Android JNI bridge, java class name is SyncSessionsMetrics. +class SyncSessionsMetricsAndroid { + public: + static bool Register(JNIEnv* env); +}; + +#endif // CHROME_BROWSER_SYNC_SYNC_SESSIONS_METRICS_ANDROID_H_
diff --git a/chrome/browser/themes/browser_theme_pack.cc b/chrome/browser/themes/browser_theme_pack.cc index 3894526d..628b987 100644 --- a/chrome/browser/themes/browser_theme_pack.cc +++ b/chrome/browser/themes/browser_theme_pack.cc
@@ -48,7 +48,7 @@ // Version number of the current theme pack. We just throw out and rebuild // theme packs that aren't int-equal to this. Increment this number if you // change default theme assets. -const int kThemePackVersion = 36; +const int kThemePackVersion = 37; // IDs that are in the DataPack won't clash with the positive integer // uint16_t. kHeaderID should always have the maximum value because we want the @@ -177,39 +177,6 @@ }; const size_t kPersistingImagesLength = arraysize(kPersistingImages); -#if defined(USE_ASH) && !defined(OS_CHROMEOS) -// Persistent theme ids for Windows. -const int PRS_THEME_FRAME_DESKTOP = 100; -const int PRS_THEME_FRAME_INACTIVE_DESKTOP = 101; -const int PRS_THEME_FRAME_INCOGNITO_DESKTOP = 102; -const int PRS_THEME_FRAME_INCOGNITO_INACTIVE_DESKTOP = 103; -const int PRS_THEME_TOOLBAR_DESKTOP = 104; -const int PRS_THEME_TAB_BACKGROUND_DESKTOP = 105; -const int PRS_THEME_TAB_BACKGROUND_INCOGNITO_DESKTOP = 106; - -// Persistent theme to resource id mapping for Windows AURA. -PersistingImagesTable kPersistingImagesDesktopAura[] = { - { PRS_THEME_FRAME_DESKTOP, IDR_THEME_FRAME_DESKTOP, - "theme_frame" }, - { PRS_THEME_FRAME_INACTIVE_DESKTOP, IDR_THEME_FRAME_INACTIVE_DESKTOP, - "theme_frame_inactive" }, - { PRS_THEME_FRAME_INCOGNITO_DESKTOP, IDR_THEME_FRAME_INCOGNITO_DESKTOP, - "theme_frame_incognito" }, - { PRS_THEME_FRAME_INCOGNITO_INACTIVE_DESKTOP, - IDR_THEME_FRAME_INCOGNITO_INACTIVE_DESKTOP, - "theme_frame_incognito_inactive" }, - { PRS_THEME_TOOLBAR_DESKTOP, IDR_THEME_TOOLBAR_DESKTOP, - "theme_toolbar" }, - { PRS_THEME_TAB_BACKGROUND_DESKTOP, IDR_THEME_TAB_BACKGROUND_DESKTOP, - "theme_tab_background" }, - { PRS_THEME_TAB_BACKGROUND_INCOGNITO_DESKTOP, - IDR_THEME_TAB_BACKGROUND_INCOGNITO_DESKTOP, - "theme_tab_background_incognito" }, -}; -const size_t kPersistingImagesDesktopAuraLength = - arraysize(kPersistingImagesDesktopAura); -#endif - int GetPersistentIDByNameHelper(const std::string& key, const PersistingImagesTable* image_table, size_t image_table_size) { @@ -236,13 +203,6 @@ int prs_id = kPersistingImages[i].persistent_id; (*lookup_table)[idr] = prs_id; } -#if defined(USE_ASH) && !defined(OS_CHROMEOS) - for (size_t i = 0; i < kPersistingImagesDesktopAuraLength; ++i) { - int idr = kPersistingImagesDesktopAura[i].idr_id; - int prs_id = kPersistingImagesDesktopAura[i].persistent_id; - (*lookup_table)[idr] = prs_id; - } -#endif } std::map<int,int>::iterator it = lookup_table->find(idr); return (it == lookup_table->end()) ? -1 : it->second; @@ -256,12 +216,6 @@ if (kPersistingImages[i].persistent_id > max_prs_id) max_prs_id = kPersistingImages[i].persistent_id; } -#if defined(USE_ASH) && !defined(OS_CHROMEOS) - for (size_t i = 0; i < kPersistingImagesDesktopAuraLength; ++i) { - if (kPersistingImagesDesktopAura[i].persistent_id > max_prs_id) - max_prs_id = kPersistingImagesDesktopAura[i].persistent_id; - } -#endif } return max_prs_id; } @@ -374,13 +328,6 @@ { PRS_THEME_FRAME_INCOGNITO, ThemeProperties::TINT_FRAME_INCOGNITO }, { PRS_THEME_FRAME_INCOGNITO_INACTIVE, ThemeProperties::TINT_FRAME_INCOGNITO_INACTIVE }, -#if defined(USE_ASH) && !defined(OS_CHROMEOS) - { PRS_THEME_FRAME_DESKTOP, ThemeProperties::TINT_FRAME }, - { PRS_THEME_FRAME_INACTIVE_DESKTOP, ThemeProperties::TINT_FRAME_INACTIVE }, - { PRS_THEME_FRAME_INCOGNITO_DESKTOP, ThemeProperties::TINT_FRAME_INCOGNITO }, - { PRS_THEME_FRAME_INCOGNITO_INACTIVE_DESKTOP, - ThemeProperties::TINT_FRAME_INCOGNITO_INACTIVE }, -#endif }; // Mapping used in GenerateTabBackgroundImages() to associate what frame image @@ -388,11 +335,6 @@ IntToIntTable kTabBackgroundMap[] = { { PRS_THEME_TAB_BACKGROUND, PRS_THEME_FRAME }, { PRS_THEME_TAB_BACKGROUND_INCOGNITO, PRS_THEME_FRAME_INCOGNITO }, -#if defined(USE_ASH) && !defined(OS_CHROMEOS) - { PRS_THEME_TAB_BACKGROUND_DESKTOP, PRS_THEME_FRAME_DESKTOP }, - { PRS_THEME_TAB_BACKGROUND_INCOGNITO_DESKTOP, - PRS_THEME_FRAME_INCOGNITO_DESKTOP }, -#endif }; struct CropEntry { @@ -423,9 +365,6 @@ { PRS_THEME_TOOLBAR, 200, false }, { PRS_THEME_BUTTON_BACKGROUND, 60, false }, { PRS_THEME_WINDOW_CONTROL_BACKGROUND, 50, false }, -#if defined(USE_ASH) && !defined(OS_CHROMEOS) - { PRS_THEME_TOOLBAR_DESKTOP, 200, false } -#endif }; @@ -793,12 +732,6 @@ if (kPersistingImages[i].idr_id == id) return true; -#if defined(USE_ASH) && !defined(OS_CHROMEOS) - for (size_t i = 0; i < kPersistingImagesDesktopAuraLength; ++i) - if (kPersistingImagesDesktopAura[i].idr_id == id) - return true; -#endif - return false; } @@ -1242,13 +1175,6 @@ int id = GetPersistentIDByName(image_name); if (id != -1) (*file_paths)[id][scale_factor] = image_path; -#if defined(USE_ASH) && !defined(OS_CHROMEOS) - id = GetPersistentIDByNameHelper(image_name, - kPersistingImagesDesktopAura, - kPersistingImagesDesktopAuraLength); - if (id != -1) - (*file_paths)[id][scale_factor] = image_path; -#endif } void BrowserThemePack::BuildSourceImagesArray(const FilePathMap& file_paths) { @@ -1370,17 +1296,6 @@ // thing and just use the default images. int prs_base_id = 0; -#if defined(USE_ASH) && !defined(OS_CHROMEOS) - if (prs_id == PRS_THEME_FRAME_INCOGNITO_INACTIVE_DESKTOP) { - prs_base_id = images->count(PRS_THEME_FRAME_INCOGNITO_DESKTOP) ? - PRS_THEME_FRAME_INCOGNITO_DESKTOP : PRS_THEME_FRAME_DESKTOP; - } else if (prs_id == PRS_THEME_FRAME_INACTIVE_DESKTOP) { - prs_base_id = PRS_THEME_FRAME_DESKTOP; - } else if (prs_id == PRS_THEME_FRAME_INCOGNITO_DESKTOP && - !images->count(PRS_THEME_FRAME_INCOGNITO_DESKTOP)) { - prs_base_id = PRS_THEME_FRAME_DESKTOP; - } -#endif if (!prs_base_id) { if (prs_id == PRS_THEME_FRAME_INCOGNITO_INACTIVE) { prs_base_id = images->count(PRS_THEME_FRAME_INCOGNITO) ? @@ -1401,11 +1316,7 @@ } else if (prs_base_id != prs_id && images->count(prs_base_id)) { frame = (*images)[prs_base_id]; } else if (prs_base_id == PRS_THEME_FRAME_OVERLAY) { -#if defined(USE_ASH) && !defined(OS_CHROMEOS) - if (images->count(PRS_THEME_FRAME_DESKTOP)) { -#else if (images->count(PRS_THEME_FRAME)) { -#endif // If there is no theme overlay, don't tint the default frame, // because it will overwrite the custom frame image when we cache and // reload from disk. @@ -1415,12 +1326,6 @@ // If the theme doesn't specify an image, then apply the tint to // the default frame. frame = rb.GetImageNamed(IDR_THEME_FRAME); -#if defined(USE_ASH) && !defined(OS_CHROMEOS) - if (prs_id >= PRS_THEME_FRAME_DESKTOP && - prs_id <= PRS_THEME_FRAME_INCOGNITO_INACTIVE_DESKTOP) { - frame = rb.GetImageNamed(IDR_THEME_FRAME_DESKTOP); - } -#endif } if (!frame.IsEmpty()) { temp_output[prs_id] = CreateHSLShiftedImage(
diff --git a/chrome/browser/ui/bookmarks/bookmark_editor.cc b/chrome/browser/ui/bookmarks/bookmark_editor.cc index fbbf7159..d79fe96 100644 --- a/chrome/browser/ui/bookmarks/bookmark_editor.cc +++ b/chrome/browser/ui/bookmarks/bookmark_editor.cc
@@ -9,6 +9,7 @@ #include "base/logging.h" #include "chrome/grit/generated_resources.h" #include "components/bookmarks/browser/bookmark_model.h" +#include "grit/components_strings.h" using bookmarks::BookmarkModel; using bookmarks::BookmarkNode;
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_all_tabs_controller.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_all_tabs_controller.mm index 61de430..ba89046 100644 --- a/chrome/browser/ui/cocoa/bookmarks/bookmark_all_tabs_controller.mm +++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_all_tabs_controller.mm
@@ -13,6 +13,7 @@ #include "chrome/grit/generated_resources.h" #include "components/bookmarks/browser/bookmark_model.h" #include "content/public/browser/web_contents.h" +#include "grit/components_strings.h" #include "ui/base/l10n/l10n_util_mac.h" using bookmarks::BookmarkModel;
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_editor_base_controller.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_editor_base_controller.mm index a7c78e3..dd75c04 100644 --- a/chrome/browser/ui/cocoa/bookmarks/bookmark_editor_base_controller.mm +++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_editor_base_controller.mm
@@ -23,6 +23,7 @@ #include "chrome/grit/generated_resources.h" #include "components/bookmarks/browser/bookmark_model.h" #include "components/bookmarks/managed/managed_bookmark_service.h" +#include "grit/components_strings.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util_mac.h"
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_editor_base_controller_unittest.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_editor_base_controller_unittest.mm index fd11cf9..e3226c1 100644 --- a/chrome/browser/ui/cocoa/bookmarks/bookmark_editor_base_controller_unittest.mm +++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_editor_base_controller_unittest.mm
@@ -13,6 +13,7 @@ #include "chrome/test/base/test_browser_window.h" #include "chrome/test/base/testing_profile.h" #include "components/bookmarks/browser/bookmark_model.h" +#include "grit/components_strings.h" #include "testing/gtest/include/gtest/gtest.h" #import "testing/gtest_mac.h" #include "testing/platform_test.h"
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_name_folder_controller.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_name_folder_controller.mm index 52f7aae..4d4ca0e 100644 --- a/chrome/browser/ui/cocoa/bookmarks/bookmark_name_folder_controller.mm +++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_name_folder_controller.mm
@@ -10,6 +10,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/cocoa/bookmarks/bookmark_model_observer_for_cocoa.h" #include "chrome/grit/generated_resources.h" +#include "grit/components_strings.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util_mac.h"
diff --git a/chrome/browser/ui/cocoa/browser_window_controller_private.mm b/chrome/browser/ui/cocoa/browser_window_controller_private.mm index 539a9c2..b515194 100644 --- a/chrome/browser/ui/cocoa/browser_window_controller_private.mm +++ b/chrome/browser/ui/cocoa/browser_window_controller_private.mm
@@ -786,6 +786,14 @@ [self resetCustomAppKitFullscreenVariables]; + // Ensures that the permission bubble shows up properly at the front. + PermissionBubbleManager* manager = [self permissionBubbleManager]; + if (manager && manager->IsBubbleVisible()) { + NSWindow* bubbleWindow = manager->GetBubbleWindow(); + DCHECK(bubbleWindow); + [bubbleWindow orderFront:nil]; + } + // Ensure that the window is layout properly. [self layoutSubviews]; }
diff --git a/chrome/browser/ui/cocoa/find_bar/find_bar_text_field_cell.mm b/chrome/browser/ui/cocoa/find_bar/find_bar_text_field_cell.mm index 5942f2f..13c314ff 100644 --- a/chrome/browser/ui/cocoa/find_bar/find_bar_text_field_cell.mm +++ b/chrome/browser/ui/cocoa/find_bar/find_bar_text_field_cell.mm
@@ -8,7 +8,7 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/sys_string_conversions.h" -#include "chrome/grit/generated_resources.h" +#include "components/strings/grit/components_strings.h" #include "ui/base/l10n/l10n_util.h" namespace {
diff --git a/chrome/browser/ui/cocoa/location_bar/star_decoration.mm b/chrome/browser/ui/cocoa/location_bar/star_decoration.mm index 790b7172..48109d3f 100644 --- a/chrome/browser/ui/cocoa/location_bar/star_decoration.mm +++ b/chrome/browser/ui/cocoa/location_bar/star_decoration.mm
@@ -8,6 +8,7 @@ #include "chrome/browser/command_updater.h" #import "chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.h" #include "chrome/grit/generated_resources.h" +#include "grit/components_strings.h" #include "grit/theme_resources.h" #include "ui/base/l10n/l10n_util_mac.h"
diff --git a/chrome/browser/ui/cocoa/passwords/account_chooser_view_controller.h b/chrome/browser/ui/cocoa/passwords/account_chooser_view_controller.h index b120d28..de2000fa 100644 --- a/chrome/browser/ui/cocoa/passwords/account_chooser_view_controller.h +++ b/chrome/browser/ui/cocoa/passwords/account_chooser_view_controller.h
@@ -9,10 +9,12 @@ #include "base/mac/scoped_nsobject.h" #import "chrome/browser/ui/cocoa/passwords/credential_item_view.h" +#import "chrome/browser/ui/cocoa/passwords/password_prompt_bridge_interface.h" @class AccountAvatarFetcherManager; class PasswordDialogController; +class PasswordPromptBridgeInterface; namespace net { class URLRequestContextGetter; @@ -24,32 +26,16 @@ @property(nonatomic, readonly) CredentialItemView* view; @end -// An interface for the bridge between AccountChooserViewController and platform -// independent UI code. -class AccountChooserBridge { - public: - // Closes the dialog. - virtual void PerformClose() = 0; - - // Returns the controller containing the data. - virtual PasswordDialogController* GetDialogController() = 0; - - // Returns the request context for fetching the avatars. - virtual net::URLRequestContextGetter* GetRequestContext() const = 0; - - protected: - virtual ~AccountChooserBridge() = default; -}; - // Manages a view that shows a list of credentials that can be used for // authentication to a site. @interface AccountChooserViewController : NSViewController<CredentialItemDelegate, + PasswordPromptViewInterface, NSTableViewDataSource, NSTableViewDelegate, NSTextViewDelegate> { @private - AccountChooserBridge* bridge_; // Weak. + PasswordPromptBridgeInterface* bridge_; // Weak. NSButton* cancelButton_; // Weak. NSTableView* credentialsView_; // Weak. NSTextView* titleView_; // Weak. @@ -59,13 +45,13 @@ // Initializes a new account chooser and populates it with the credentials // stored in |bridge->controller()|. -- (instancetype)initWithBridge:(AccountChooserBridge*)bridge; +- (instancetype)initWithBridge:(PasswordPromptBridgeInterface*)bridge; -@property(nonatomic) AccountChooserBridge* bridge; +@property(nonatomic) PasswordPromptBridgeInterface* bridge; @end @interface AccountChooserViewController(Testing) -- (instancetype)initWithBridge:(AccountChooserBridge*)bridge +- (instancetype)initWithBridge:(PasswordPromptBridgeInterface*)bridge avatarManager:(AccountAvatarFetcherManager*)avatarManager; @property(nonatomic, readonly) NSButton* cancelButton; @property(nonatomic, readonly) NSTableView* credentialsView;
diff --git a/chrome/browser/ui/cocoa/passwords/account_chooser_view_controller.mm b/chrome/browser/ui/cocoa/passwords/account_chooser_view_controller.mm index 87b7aab..b5a3ee3 100644 --- a/chrome/browser/ui/cocoa/passwords/account_chooser_view_controller.mm +++ b/chrome/browser/ui/cocoa/passwords/account_chooser_view_controller.mm
@@ -37,14 +37,14 @@ @interface AccountChooserViewController() - (void)onCancelClicked:(id)sender; -+ (NSArray*)credentialItemsFromBridge:(AccountChooserBridge*)bridge ++ (NSArray*)credentialItemsFromBridge:(PasswordPromptBridgeInterface*)bridge delegate:(id<CredentialItemDelegate>)delegate; @end @implementation AccountChooserViewController @synthesize bridge = bridge_; -- (instancetype)initWithBridge:(AccountChooserBridge*)bridge { +- (instancetype)initWithBridge:(PasswordPromptBridgeInterface*)bridge { base::scoped_nsobject<AccountAvatarFetcherManager> avatarManager( [[AccountAvatarFetcherManager alloc] initWithRequestContext:bridge->GetRequestContext()]); @@ -149,7 +149,7 @@ [avatarManager_ fetchAvatar:avatarURL forView:view]; } -+ (NSArray*)credentialItemsFromBridge:(AccountChooserBridge*)bridge ++ (NSArray*)credentialItemsFromBridge:(PasswordPromptBridgeInterface*)bridge delegate:(id<CredentialItemDelegate>)delegate { base::scoped_nsobject<NSMutableArray> items([[NSMutableArray alloc] init]); PasswordDialogController* controller = bridge->GetDialogController(); @@ -210,7 +210,7 @@ @implementation AccountChooserViewController(Testing) -- (instancetype)initWithBridge:(AccountChooserBridge*)bridge +- (instancetype)initWithBridge:(PasswordPromptBridgeInterface*)bridge avatarManager:(AccountAvatarFetcherManager*)avatarManager { DCHECK(bridge); if (self = [super initWithNibName:nil bundle:nil]) {
diff --git a/chrome/browser/ui/cocoa/passwords/account_chooser_view_controller_unittest.mm b/chrome/browser/ui/cocoa/passwords/account_chooser_view_controller_unittest.mm index 20335b25..4392535 100644 --- a/chrome/browser/ui/cocoa/passwords/account_chooser_view_controller_unittest.mm +++ b/chrome/browser/ui/cocoa/passwords/account_chooser_view_controller_unittest.mm
@@ -9,7 +9,7 @@ #include "base/mac/foundation_util.h" #include "base/strings/string16.h" #include "base/strings/utf_string_conversions.h" -#include "chrome/browser/ui/cocoa/cocoa_profile_test.h" +#include "chrome/browser/ui/cocoa/cocoa_test_helper.h" #import "chrome/browser/ui/cocoa/passwords/account_avatar_fetcher_manager.h" #import "chrome/browser/ui/cocoa/passwords/account_chooser_view_controller.h" #include "chrome/browser/ui/passwords/password_dialog_controller.h" @@ -71,8 +71,8 @@ }; // Tests for the account chooser dialog view. -class AccountChooserViewControllerTest : public CocoaProfileTest, - public AccountChooserBridge { +class AccountChooserViewControllerTest : public CocoaTest, + public PasswordPromptBridgeInterface { public: void SetUp() override; @@ -94,7 +94,7 @@ MOCK_METHOD0(OnPerformClose, void()); - // AccountChooserBridge: + // PasswordPromptBridgeInterface: void PerformClose() override; PasswordDialogController* GetDialogController() override; net::URLRequestContextGetter* GetRequestContext() const override; @@ -106,7 +106,7 @@ }; void AccountChooserViewControllerTest::SetUp() { - CocoaProfileTest::SetUp(); + CocoaTest::SetUp(); avatar_manager_.reset([[AccountAvatarFetcherTestManager alloc] init]); }
diff --git a/chrome/browser/ui/cocoa/passwords/autosignin_prompt_view_controller.h b/chrome/browser/ui/cocoa/passwords/autosignin_prompt_view_controller.h new file mode 100644 index 0000000..61ecd4f --- /dev/null +++ b/chrome/browser/ui/cocoa/passwords/autosignin_prompt_view_controller.h
@@ -0,0 +1,27 @@ +// Copyright 2016 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 CHROME_BROWSER_UI_COCOA_PASSWORDS_AUTOSIGNIN_PROMPT_VIEW_CONTROLLER_H_ +#define CHROME_BROWSER_UI_COCOA_PASSWORDS_AUTOSIGNIN_PROMPT_VIEW_CONTROLLER_H_ + +#import <Cocoa/Cocoa.h> + +#import "chrome/browser/ui/cocoa/passwords/password_prompt_bridge_interface.h" + +// Manages a view that shows an auto signin dialog content shown as a first run +// experience. +@interface AutoSigninPromptViewController + : NSViewController<PasswordPromptViewInterface, + NSTextViewDelegate> +@property(nonatomic) PasswordPromptBridgeInterface* bridge; +- (instancetype)initWithBridge:(PasswordPromptBridgeInterface*)bridge; +@end + +@interface AutoSigninPromptViewController(Testing) +@property(nonatomic, readonly) NSTextView* contentText; +@property(nonatomic, readonly) NSButton* okButton; +@property(nonatomic, readonly) NSButton* turnOffButton; +@end + +#endif // CHROME_BROWSER_UI_COCOA_PASSWORDS_AUTOSIGNIN_PROMPT_VIEW_CONTROLLER_H_
diff --git a/chrome/browser/ui/cocoa/passwords/autosignin_prompt_view_controller.mm b/chrome/browser/ui/cocoa/passwords/autosignin_prompt_view_controller.mm new file mode 100644 index 0000000..a8181b96 --- /dev/null +++ b/chrome/browser/ui/cocoa/passwords/autosignin_prompt_view_controller.mm
@@ -0,0 +1,142 @@ +// Copyright 2016 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. + +#import "chrome/browser/ui/cocoa/passwords/autosignin_prompt_view_controller.h" + +#include "base/logging.h" +#include "base/mac/scoped_nsobject.h" +#include "base/strings/string16.h" +#import "chrome/browser/ui/cocoa/passwords/passwords_bubble_utils.h" +#include "chrome/browser/ui/passwords/password_dialog_controller.h" +#include "chrome/browser/ui/passwords/password_dialog_prompts.h" +#include "chrome/grit/generated_resources.h" +#include "ui/base/cocoa/controls/hyperlink_text_view.h" +#include "ui/base/l10n/l10n_util.h" + +@interface AutoSigninPromptViewController() +- (void)onOkClicked:(id)sender; +- (void)onTurnOffClicked:(id)sender; +@end + +@implementation AutoSigninPromptViewController +@synthesize bridge = _bridge; +NSButton* _okButton; +NSButton* _turnOffButton; +HyperlinkTextView* _contentText; + +- (instancetype)initWithBridge:(PasswordPromptBridgeInterface*)bridge { + DCHECK(bridge); + if (self = [super initWithNibName:nil bundle:nil]) { + _bridge = bridge; + } + return self; +} + +// ------------------------------------ +// | Title | +// | | +// | Auto Signin is cool. | +// | | +// | [ Turn Off ] [ OK ] | +// ------------------------------------ +- (void)loadView { + base::scoped_nsobject<NSView> view([[NSView alloc] initWithFrame:NSZeroRect]); + + // Title. + base::string16 titleText = + self.bridge->GetDialogController()->GetAutoSigninPromoTitle(); + NSTextView* titleView = TitleLabelWithLink(titleText, gfx::Range(), self); + // The text container by default track the view's width only. Set the width to + // a big number so the container is resized too. + [titleView setFrameSize:NSMakeSize(MAXFLOAT, 0)]; + // Now force the view to track the text's size and resize it. + [titleView setHorizontallyResizable:YES]; + [titleView setVerticallyResizable:YES]; + [titleView sizeToFit]; + + // Content. + std::pair<base::string16, gfx::Range> contentText = + self.bridge->GetDialogController()->GetAutoSigninText(); + _contentText = LabelWithLink(contentText.first, kAutoSigninTextColor, + contentText.second, self); + [_contentText setVerticallyResizable:YES]; + + // Buttons. + _okButton = + DialogButton(l10n_util::GetNSString(IDS_AUTO_SIGNIN_FIRST_RUN_OK)); + [_okButton setTarget:self]; + [_okButton setAction:@selector(onOkClicked:)]; + [_okButton setKeyEquivalent:@"\r"]; + [view addSubview:_okButton]; + + _turnOffButton = + DialogButton(l10n_util::GetNSString(IDS_AUTO_SIGNIN_FIRST_RUN_TURN_OFF)); + [_turnOffButton setTarget:self]; + [_turnOffButton setAction:@selector(onTurnOffClicked:)]; + [view addSubview:_turnOffButton]; + + // Layout. + // Compute the bubble width using the title and the buttons. + const CGFloat contentWidth = 2 * kFramePadding + std::max( + NSWidth([titleView frame]), + NSWidth([_okButton frame]) + kRelatedControlHorizontalPadding + + NSWidth([_turnOffButton frame])); + CGFloat curX = contentWidth - kFramePadding; + CGFloat curY = kFramePadding; + [_okButton setFrameOrigin:NSMakePoint(curX - NSWidth([_okButton frame]), + curY)]; + curX -= (NSWidth([_okButton frame]) + kRelatedControlHorizontalPadding); + [_turnOffButton setFrameOrigin:NSMakePoint( + curX - NSWidth([_turnOffButton frame]), curY)]; + curY = 3 * kRelatedControlVerticalSpacing + NSMaxY([_turnOffButton frame]); + curX = kFramePadding; + + [_contentText setFrameSize:NSMakeSize(contentWidth - 2 * kFramePadding, + MAXFLOAT)]; + [_contentText sizeToFit]; + [view addSubview:_contentText]; + [_contentText setFrameOrigin:NSMakePoint(curX, curY)]; + curY = NSMaxY([_contentText frame]) + 2 * kRelatedControlVerticalSpacing; + + [view addSubview:titleView]; + [titleView setFrameOrigin:NSMakePoint(curX, curY)]; + + const CGFloat frameHeight = NSMaxY([titleView frame]) + kFramePadding; + [view setFrame:NSMakeRect(0, 0, contentWidth, frameHeight)]; + [self setView:view]; +} + +- (BOOL)textView:(NSTextView*)textView + clickedOnLink:(id)link + atIndex:(NSUInteger)charIndex { + if (_bridge && _bridge->GetDialogController()) + _bridge->GetDialogController()->OnSmartLockLinkClicked(); + return YES; +} + +- (void)onOkClicked:(id)sender { + if (_bridge && _bridge->GetDialogController()) + _bridge->GetDialogController()->OnAutoSigninOK(); +} + +- (void)onTurnOffClicked:(id)sender { + if (_bridge && _bridge->GetDialogController()) + _bridge->GetDialogController()->OnAutoSigninTurnOff(); +} + +@end + +@implementation AutoSigninPromptViewController(Testing) +- (NSTextView*)contentText { + return _contentText; +} + +- (NSButton*)okButton { + return _okButton; +} + +- (NSButton*)turnOffButton { + return _turnOffButton; +} +@end
diff --git a/chrome/browser/ui/cocoa/passwords/autosignin_prompt_view_controller_unittest.mm b/chrome/browser/ui/cocoa/passwords/autosignin_prompt_view_controller_unittest.mm new file mode 100644 index 0000000..d865d30 --- /dev/null +++ b/chrome/browser/ui/cocoa/passwords/autosignin_prompt_view_controller_unittest.mm
@@ -0,0 +1,121 @@ +// Copyright 2016 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. + +#import "chrome/browser/ui/cocoa/passwords/account_chooser_view_controller.h" + +#include "base/strings/utf_string_conversions.h" +#import "chrome/browser/ui/cocoa/cocoa_test_helper.h" +#import "chrome/browser/ui/cocoa/passwords/autosignin_prompt_view_controller.h" +#include "chrome/browser/ui/passwords/password_dialog_controller.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + + +namespace { + +const char kDialogTitle[] = "Auto signin"; +const char kDialogText[] = "bla bla"; + +class PasswordDialogControllerMock : public PasswordDialogController { + public: + MOCK_CONST_METHOD0(GetLocalForms, const FormsVector&()); + MOCK_CONST_METHOD0(GetFederationsForms, const FormsVector&()); + MOCK_CONST_METHOD0(GetAccoutChooserTitle, + std::pair<base::string16, gfx::Range>()); + MOCK_CONST_METHOD0(GetAutoSigninPromoTitle, base::string16()); + MOCK_CONST_METHOD0(GetAutoSigninText, + std::pair<base::string16, gfx::Range>()); + MOCK_METHOD0(OnSmartLockLinkClicked, void()); + MOCK_METHOD2(OnChooseCredentials, void( + const autofill::PasswordForm& password_form, + password_manager::CredentialType credential_type)); + MOCK_METHOD0(OnAutoSigninOK, void()); + MOCK_METHOD0(OnAutoSigninTurnOff, void()); + MOCK_METHOD0(OnCloseDialog, void()); +}; + +// Tests for the autosignin dialog view. +class AutoSigninPromptViewControllerTest : public PasswordPromptBridgeInterface, + public CocoaTest { + public: + PasswordDialogControllerMock& dialog_controller() { + return dialog_controller_; + } + + AutoSigninPromptViewController* view_controller() { + return view_controller_.get(); + } + + void SetUpAutosigninFirstRun(); + + MOCK_METHOD0(OnPerformClose, void()); + + // PasswordPromptBridgeInterface: + void PerformClose() override; + PasswordDialogController* GetDialogController() override; + net::URLRequestContextGetter* GetRequestContext() const override; + + private: + PasswordDialogControllerMock dialog_controller_; + base::scoped_nsobject<AutoSigninPromptViewController> view_controller_; +}; + +void AutoSigninPromptViewControllerTest::SetUpAutosigninFirstRun() { + view_controller_.reset([[AutoSigninPromptViewController alloc] + initWithBridge:this]); + EXPECT_CALL(dialog_controller_, GetAutoSigninPromoTitle()) + .WillOnce(testing::Return(base::ASCIIToUTF16(kDialogTitle))); + EXPECT_CALL(dialog_controller_, GetAutoSigninText()) + .WillOnce(testing::Return(std::make_pair(base::ASCIIToUTF16(kDialogText), + gfx::Range(0, 5)))); + [view_controller_ view]; + ASSERT_TRUE(testing::Mock::VerifyAndClearExpectations(&dialog_controller_)); +} + +void AutoSigninPromptViewControllerTest::PerformClose() { + view_controller_.reset(); + OnPerformClose(); +} + +PasswordDialogController* +AutoSigninPromptViewControllerTest::GetDialogController() { + return &dialog_controller_; +} + +net::URLRequestContextGetter* +AutoSigninPromptViewControllerTest::GetRequestContext() const { + NOTREACHED(); + return nullptr; +} + +TEST_F(AutoSigninPromptViewControllerTest, ClickOk) { + SetUpAutosigninFirstRun(); + EXPECT_CALL(dialog_controller(), OnAutoSigninOK()); + [view_controller().okButton performClick:nil]; +} + +TEST_F(AutoSigninPromptViewControllerTest, ClickTurnOff) { + SetUpAutosigninFirstRun(); + EXPECT_CALL(dialog_controller(), OnAutoSigninTurnOff()); + [view_controller().turnOffButton performClick:nil]; +} + +TEST_F(AutoSigninPromptViewControllerTest, ClickContentLink) { + SetUpAutosigninFirstRun(); + EXPECT_CALL(dialog_controller(), OnSmartLockLinkClicked()); + [view_controller().contentText clickedOnLink:@"" + atIndex:0]; +} + +TEST_F(AutoSigninPromptViewControllerTest, ClosePromptAndHandleClick) { + // A user may press mouse down, some navigation closes the dialog, mouse up + // still sends the action. The view should not crash. + SetUpAutosigninFirstRun(); + [view_controller() setBridge:nil]; + [view_controller().contentText clickedOnLink:@"" atIndex:0]; + [view_controller().okButton performClick:nil]; + [view_controller().turnOffButton performClick:nil]; +} + +} // namespace
diff --git a/chrome/browser/ui/cocoa/passwords/password_prompt_bridge_interface.h b/chrome/browser/ui/cocoa/passwords/password_prompt_bridge_interface.h new file mode 100644 index 0000000..579a9e8 --- /dev/null +++ b/chrome/browser/ui/cocoa/passwords/password_prompt_bridge_interface.h
@@ -0,0 +1,36 @@ +// Copyright 2016 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 CHROME_BROWSER_UI_COCOA_PASSWORDS_PASSWORD_PROMPT_BRIDGE_INTERFACE_H_ +#define CHROME_BROWSER_UI_COCOA_PASSWORDS_PASSWORD_PROMPT_BRIDGE_INTERFACE_H_ + +class PasswordDialogController; +namespace net { +class URLRequestContextGetter; +} + +// An interface for the bridge between AccountChooserViewController and platform +// independent UI code. +class PasswordPromptBridgeInterface { + public: + // Closes the dialog. + virtual void PerformClose() = 0; + + // Returns the controller containing the data. + virtual PasswordDialogController* GetDialogController() = 0; + + // Returns the request context for fetching the avatars. + virtual net::URLRequestContextGetter* GetRequestContext() const = 0; + + protected: + virtual ~PasswordPromptBridgeInterface() = default; +}; + +// A protocol implemented by the password dialog content view. +@protocol PasswordPromptViewInterface<NSObject> +// Returns the current bridge object. +@property(nonatomic) PasswordPromptBridgeInterface* bridge; +@end + +#endif // CHROME_BROWSER_UI_COCOA_PASSWORDS_PASSWORD_PROMPT_BRIDGE_INTERFACE_H_
diff --git a/chrome/browser/ui/cocoa/passwords/password_prompt_view_bridge.h b/chrome/browser/ui/cocoa/passwords/password_prompt_view_bridge.h index 0033cb8..6da3fb8f 100644 --- a/chrome/browser/ui/cocoa/passwords/password_prompt_view_bridge.h +++ b/chrome/browser/ui/cocoa/passwords/password_prompt_view_bridge.h
@@ -8,14 +8,15 @@ #include "base/mac/scoped_nsobject.h" #include "base/memory/scoped_ptr.h" #include "chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.h" -#import "chrome/browser/ui/cocoa/passwords/account_chooser_view_controller.h" +#import "chrome/browser/ui/cocoa/passwords/password_prompt_bridge_interface.h" #include "chrome/browser/ui/passwords/password_dialog_prompts.h" @class AccountChooserViewController; class PasswordPromptViewBridge : public AccountChooserPrompt, + public AutoSigninFirstRunPrompt, public ConstrainedWindowMacDelegate, - public AccountChooserBridge { + public PasswordPromptBridgeInterface { public: PasswordPromptViewBridge(PasswordDialogController* controller, content::WebContents* web_contents); @@ -25,20 +26,26 @@ void ShowAccountChooser() override; void ControllerGone() override; + // AutoSigninFirstRunPrompt: + void ShowAutoSigninPrompt() override; + // ConstrainedWindowMacDelegate: void OnConstrainedWindowClosed(ConstrainedWindowMac* window) override; - // AccountChooserBridge: + // PasswordPromptBridgeInterface: void PerformClose() override; PasswordDialogController* GetDialogController() override; net::URLRequestContextGetter* GetRequestContext() const override; private: + void ShowWindow(); + PasswordDialogController* controller_; content::WebContents* web_contents_; scoped_ptr<ConstrainedWindowMac> constrained_window_; - base::scoped_nsobject<AccountChooserViewController> view_controller_; + base::scoped_nsobject<NSViewController<PasswordPromptViewInterface>> + view_controller_; }; #endif // CHROME_BROWSER_UI_COCOA_PASSWORDS_PASSWORD_PROMPT_VIEW_BRIDGE_H_
diff --git a/chrome/browser/ui/cocoa/passwords/password_prompt_view_bridge.mm b/chrome/browser/ui/cocoa/passwords/password_prompt_view_bridge.mm index 21a2809..ff55e44 100644 --- a/chrome/browser/ui/cocoa/passwords/password_prompt_view_bridge.mm +++ b/chrome/browser/ui/cocoa/passwords/password_prompt_view_bridge.mm
@@ -8,6 +8,7 @@ #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_custom_sheet.h" #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_custom_window.h" #import "chrome/browser/ui/cocoa/passwords/account_chooser_view_controller.h" +#import "chrome/browser/ui/cocoa/passwords/autosignin_prompt_view_controller.h" #include "chrome/browser/ui/passwords/password_dialog_controller.h" #include "content/public/browser/web_contents.h" @@ -25,14 +26,7 @@ void PasswordPromptViewBridge::ShowAccountChooser() { view_controller_.reset( [[AccountChooserViewController alloc] initWithBridge:this]); - // Setup the constrained window that will show the view. - base::scoped_nsobject<NSWindow> window([[ConstrainedWindowCustomWindow alloc] - initWithContentRect:[[view_controller_ view] bounds]]); - [window setContentView:[view_controller_ view]]; - base::scoped_nsobject<CustomConstrainedWindowSheet> sheet( - [[CustomConstrainedWindowSheet alloc] initWithCustomWindow:window]); - constrained_window_.reset( - new ConstrainedWindowMac(this, web_contents_, sheet)); + ShowWindow(); } void PasswordPromptViewBridge::ControllerGone() { @@ -40,6 +34,12 @@ PerformClose(); } +void PasswordPromptViewBridge::ShowAutoSigninPrompt() { + view_controller_.reset( + [[AutoSigninPromptViewController alloc] initWithBridge:this]); + ShowWindow(); +} + void PasswordPromptViewBridge::OnConstrainedWindowClosed( ConstrainedWindowMac* window) { if (controller_) @@ -62,6 +62,17 @@ GetRequestContext(); } +void PasswordPromptViewBridge::ShowWindow() { + // Setup the constrained window that will show the view. + base::scoped_nsobject<NSWindow> window([[ConstrainedWindowCustomWindow alloc] + initWithContentRect:[[view_controller_ view] bounds]]); + [window setContentView:[view_controller_ view]]; + base::scoped_nsobject<CustomConstrainedWindowSheet> sheet( + [[CustomConstrainedWindowSheet alloc] initWithCustomWindow:window]); + constrained_window_.reset( + new ConstrainedWindowMac(this, web_contents_, sheet)); +} + AccountChooserPrompt* CreateAccountChooserPromptView( PasswordDialogController* controller, content::WebContents* web_contents) { return new PasswordPromptViewBridge(controller, web_contents); @@ -69,7 +80,6 @@ AutoSigninFirstRunPrompt* CreateAutoSigninPromptView( PasswordDialogController* controller, content::WebContents* web_contents) { - // TODO(vasilii): return PasswordPromptViewBridge. - return nullptr; + return new PasswordPromptViewBridge(controller, web_contents); }
diff --git a/chrome/browser/ui/cocoa/passwords/passwords_bubble_utils.h b/chrome/browser/ui/cocoa/passwords/passwords_bubble_utils.h index 582e572..c2eb4e6 100644 --- a/chrome/browser/ui/cocoa/passwords/passwords_bubble_utils.h +++ b/chrome/browser/ui/cocoa/passwords/passwords_bubble_utils.h
@@ -10,6 +10,7 @@ #import <Cocoa/Cocoa.h> #include "base/strings/string16.h" +#include "third_party/skia/include/core/SkColor.h" #include "ui/gfx/range/range.h" @class HyperlinkTextView; @@ -45,10 +46,16 @@ // Returns a button of the standard style for the bubble. NSButton* DialogButton(NSString* title); -// Returns the title label with |text|. Nonempty |range| may specify a link -// range. +// Returns a title label with |text|. Nonempty |range| may specify a link range. HyperlinkTextView* TitleLabelWithLink(const base::string16& text, gfx::Range range, id<NSTextViewDelegate> delegate); +// Returns a label with |text| and small font. Nonempty |range| may specify a +// link range. +HyperlinkTextView* LabelWithLink(const base::string16& text, + SkColor color, + gfx::Range range, + id<NSTextViewDelegate> delegate); + #endif // CHROME_BROWSER_UI_COCOA_PASSWORDS_PASSWORDS_BUBBLE_UTILS_H_
diff --git a/chrome/browser/ui/cocoa/passwords/passwords_bubble_utils.mm b/chrome/browser/ui/cocoa/passwords/passwords_bubble_utils.mm index 6d05bf1..be951219 100644 --- a/chrome/browser/ui/cocoa/passwords/passwords_bubble_utils.mm +++ b/chrome/browser/ui/cocoa/passwords/passwords_bubble_utils.mm
@@ -13,6 +13,48 @@ #include "ui/base/resource/resource_bundle.h" #include "ui/resources/grit/ui_resources.h" +namespace { + +HyperlinkTextView* LabelWithLink(const base::string16& text, + SkColor color, + ui::ResourceBundle::FontStyle fontSize, + gfx::Range range, + id<NSTextViewDelegate> delegate) { + base::scoped_nsobject<HyperlinkTextView> textView( + [[HyperlinkTextView alloc] initWithFrame:NSZeroRect]); + NSColor* textColor = skia::SkColorToCalibratedNSColor(color); + NSFont* font = ResourceBundle::GetSharedInstance() + .GetFontList(fontSize) + .GetPrimaryFont() + .GetNativeFont(); + [textView setMessage:base::SysUTF16ToNSString(text) + withFont:font + messageColor:textColor]; + NSRange brandRange = range.ToNSRange(); + if (brandRange.length) { + NSColor* linkColor = + skia::SkColorToCalibratedNSColor(chrome_style::GetLinkColor()); + [textView addLinkRange:brandRange + withURL:nil + linkColor:linkColor]; + [textView setDelegate:delegate]; + + // Create the link with no underlining. + [textView setLinkTextAttributes:nil]; + NSTextStorage* text = [textView textStorage]; + [text addAttribute:NSUnderlineStyleAttributeName + value:@(NSUnderlineStyleNone) + range:brandRange]; + } else { + // TODO(vasilii): remove if crbug.com/515189 is fixed. + [textView setRefusesFirstResponder:YES]; + } + + return textView.autorelease(); +} + +} // namespace + NSFont* LabelFont() { return [NSFont systemFontOfSize:[NSFont smallSystemFontSize]]; } @@ -72,35 +114,13 @@ HyperlinkTextView* TitleLabelWithLink(const base::string16& text, gfx::Range range, id<NSTextViewDelegate> delegate) { - base::scoped_nsobject<HyperlinkTextView> titleView( - [[HyperlinkTextView alloc] initWithFrame:NSZeroRect]); - NSColor* textColor = [NSColor blackColor]; - NSFont* font = ResourceBundle::GetSharedInstance() - .GetFontList(ResourceBundle::MediumFont) - .GetPrimaryFont() - .GetNativeFont(); - [titleView setMessage:base::SysUTF16ToNSString(text) - withFont:font - messageColor:textColor]; - NSRange titleBrandLinkRange = range.ToNSRange(); - if (titleBrandLinkRange.length) { - NSColor* linkColor = - skia::SkColorToCalibratedNSColor(chrome_style::GetLinkColor()); - [titleView addLinkRange:titleBrandLinkRange - withURL:nil - linkColor:linkColor]; - [titleView setDelegate:delegate]; + return LabelWithLink(text, SK_ColorBLACK, ResourceBundle::MediumFont, range, + delegate); +} - // Create the link with no underlining. - [titleView setLinkTextAttributes:nil]; - NSTextStorage* text = [titleView textStorage]; - [text addAttribute:NSUnderlineStyleAttributeName - value:@(NSUnderlineStyleNone) - range:titleBrandLinkRange]; - } else { - // TODO(vasilii): remove if crbug.com/515189 is fixed. - [titleView setRefusesFirstResponder:YES]; - } - - return titleView.autorelease(); +HyperlinkTextView* LabelWithLink(const base::string16& text, + SkColor color, + gfx::Range range, + id<NSTextViewDelegate> delegate) { + return LabelWithLink(text, color, ResourceBundle::SmallFont, range, delegate); }
diff --git a/chrome/browser/ui/libgtk2ui/gtk2_ui.cc b/chrome/browser/ui/libgtk2ui/gtk2_ui.cc index ff88b6d..d8e9773 100644 --- a/chrome/browser/ui/libgtk2ui/gtk2_ui.cc +++ b/chrome/browser/ui/libgtk2ui/gtk2_ui.cc
@@ -538,10 +538,17 @@ } bool Gtk2UI::GetTint(int id, color_utils::HSL* tint) const { - // We don't set any tints and the default tints don't work so well so make - // sure this is never called by mistake. All colors that might make use of - // tint should have an entry in |colors_|. - NOTREACHED(); + switch (id) { + case ThemeProperties::TINT_BACKGROUND_TAB: + // Tints for which the cross-platform default is fine. Before adding new + // values here, specifically verify they work well on Linux. + break; + default: + // Assume any tints not specifically verified on Linux aren't usable. + // TODO(pkasting): Try to remove values from |colors_| that could just be + // added to the group above instead. + NOTREACHED(); + } return false; } @@ -1101,15 +1108,9 @@ return bitmap; } - // TODO(erg): We list both the normal and *_DESKTOP versions of these - // images because in some contexts, we don't go through the - // chrome::MapThemeImage interface. That should be fixed, but tracking that - // down is Hard. case IDR_THEME_TAB_BACKGROUND: - case IDR_THEME_TAB_BACKGROUND_DESKTOP: return GenerateTabImage(IDR_THEME_FRAME); case IDR_THEME_TAB_BACKGROUND_INCOGNITO: - case IDR_THEME_TAB_BACKGROUND_INCOGNITO_DESKTOP: return GenerateTabImage(IDR_THEME_FRAME_INCOGNITO); case IDR_FRAME: case IDR_THEME_FRAME:
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc index 7faa89c..a1d1371 100644 --- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc +++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
@@ -288,7 +288,7 @@ } void ManagePasswordsUIController::ChooseCredential( - const autofill::PasswordForm& form, + autofill::PasswordForm form, password_manager::CredentialType credential_type) { DCHECK(dialog_controller_); dialog_controller_.reset();
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.h b/chrome/browser/ui/passwords/manage_passwords_ui_controller.h index fa4b3ad8..180f9d1 100644 --- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.h +++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.h
@@ -88,7 +88,7 @@ void SavePassword() override; void UpdatePassword(const autofill::PasswordForm& password_form) override; void ChooseCredential( - const autofill::PasswordForm& form, + autofill::PasswordForm form, password_manager::CredentialType credential_type) override; void NavigateToExternalPasswordManager() override; void NavigateToSmartLockHelpPage() override;
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h b/chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h index 365ae60..c4457b2 100644 --- a/chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h +++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h
@@ -37,8 +37,7 @@ MOCK_METHOD0(SavePassword, void()); MOCK_METHOD1(UpdatePassword, void(const autofill::PasswordForm&)); MOCK_METHOD2(ChooseCredential, - void(const autofill::PasswordForm&, - password_manager::CredentialType)); + void(autofill::PasswordForm, password_manager::CredentialType)); MOCK_METHOD0(NavigateToExternalPasswordManager, void()); MOCK_METHOD0(NavigateToSmartLockPage, void()); MOCK_METHOD0(NavigateToSmartLockHelpPage, void());
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc index ed2fe66..2aed0db 100644 --- a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc +++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
@@ -480,12 +480,14 @@ EXPECT_EQ(origin, controller()->GetOrigin()); EXPECT_THAT(controller()->GetCurrentForms(), ElementsAre(Pointee(test_local_form()))); - + ASSERT_THAT(dialog_controller->GetLocalForms(), + ElementsAre(Pointee(test_local_form()))); + EXPECT_THAT(dialog_controller->GetFederationsForms(), testing::IsEmpty()); ExpectIconStateIs(password_manager::ui::INACTIVE_STATE); EXPECT_CALL(dialog_prompt(), ControllerGone()); dialog_controller->OnChooseCredentials( - test_local_form(), + *dialog_controller->GetLocalForms()[0], password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); ASSERT_TRUE(credential_info()); @@ -515,12 +517,14 @@ EXPECT_EQ(origin, controller()->GetOrigin()); EXPECT_THAT(controller()->GetCurrentForms(), ElementsAre(Pointee(test_federated_form()))); - + ASSERT_THAT(dialog_controller->GetLocalForms(), + ElementsAre(Pointee(test_federated_form()))); + EXPECT_THAT(dialog_controller->GetFederationsForms(), testing::IsEmpty()); ExpectIconStateIs(password_manager::ui::INACTIVE_STATE); EXPECT_CALL(dialog_prompt(), ControllerGone()); dialog_controller->OnChooseCredentials( - test_federated_form(), + *dialog_controller->GetLocalForms()[0], password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); ASSERT_TRUE(credential_info()); @@ -550,12 +554,14 @@ controller()->GetState()); EXPECT_EQ(0u, controller()->GetCurrentForms().size()); EXPECT_EQ(origin, controller()->GetOrigin()); - + EXPECT_THAT(dialog_controller->GetLocalForms(), testing::IsEmpty()); + ASSERT_THAT(dialog_controller->GetFederationsForms(), + ElementsAre(Pointee(test_local_form()))); ExpectIconStateIs(password_manager::ui::INACTIVE_STATE); EXPECT_CALL(dialog_prompt(), ControllerGone()); dialog_controller->OnChooseCredentials( - test_local_form(), + *dialog_controller->GetFederationsForms()[0], password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED); controller()->OnBubbleHidden(); EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState());
diff --git a/chrome/browser/ui/passwords/password_dialog_prompts.h b/chrome/browser/ui/passwords/password_dialog_prompts.h index eedc6f5..38fa909 100644 --- a/chrome/browser/ui/passwords/password_dialog_prompts.h +++ b/chrome/browser/ui/passwords/password_dialog_prompts.h
@@ -5,6 +5,8 @@ #ifndef CHROME_BROWSER_UI_PASSWORDS_PASSWORD_DIALOG_PROMPTS_H_ #define CHROME_BROWSER_UI_PASSWORDS_PASSWORD_DIALOG_PROMPTS_H_ +#include "third_party/skia/include/core/SkColor.h" + namespace content { class WebContents; } @@ -17,6 +19,9 @@ // The default inset from BubbleFrameView. const int kTitleTopInset = 12; +// The color of the content in the autosign-in first run prompt. +const SkColor kAutoSigninTextColor = SkColorSetRGB(0x64, 0x64, 0x64); + // A platform-independent interface for the account chooser dialog. class AccountChooserPrompt { public:
diff --git a/chrome/browser/ui/passwords/passwords_model_delegate.h b/chrome/browser/ui/passwords/passwords_model_delegate.h index 60c3d7d..123387f7 100644 --- a/chrome/browser/ui/passwords/passwords_model_delegate.h +++ b/chrome/browser/ui/passwords/passwords_model_delegate.h
@@ -75,9 +75,11 @@ // Called from the model when the user chooses to update a password. virtual void UpdatePassword(const autofill::PasswordForm& password_form) = 0; - // Called from the model when the user chooses a credential. + // Called from the dialog controller when the user chooses a credential. + // Everything is passed by value because the controller can be destroyed + // inside the method. virtual void ChooseCredential( - const autofill::PasswordForm& form, + autofill::PasswordForm form, password_manager::CredentialType credential_type) = 0; // Open a new tab pointing to passwords.google.com.
diff --git a/chrome/browser/ui/tabs/tab_strip_model_stats_recorder.cc b/chrome/browser/ui/tabs/tab_strip_model_stats_recorder.cc index 5db6a72..f96f18e 100644 --- a/chrome/browser/ui/tabs/tab_strip_model_stats_recorder.cc +++ b/chrome/browser/ui/tabs/tab_strip_model_stats_recorder.cc
@@ -10,6 +10,7 @@ #include "base/logging.h" #include "base/metrics/histogram_macros.h" #include "base/supports_user_data.h" +#include "base/time/time.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" @@ -41,9 +42,12 @@ return info; } + base::TimeTicks creation_time() const { return creation_time_; } + private: TabState current_state_ = TabState::INITIAL; base::TimeTicks last_state_modified_; + base::TimeTicks creation_time_ = base::TimeTicks::Now(); static const char kKey[]; }; @@ -101,6 +105,13 @@ NOTREACHED(); break; } + + if (new_state == TabState::CLOSED) { + UMA_HISTOGRAM_MEDIUM_TIMES( + "Tabs.FineTiming.TimeBetweenTabCreatedAndSameTabClosed", + now - creation_time_); + } + last_state_modified_ = now; current_state_ = new_state; } @@ -109,6 +120,7 @@ content::WebContents* contents, int index) { TabInfo::Get(contents)->UpdateState(TabState::CLOSED); + last_close_time_ = base::TimeTicks::Now(); // Avoid having stale pointer in active_tab_history_ std::replace(active_tab_history_.begin(), active_tab_history_.end(), contents, @@ -131,6 +143,25 @@ DCHECK(new_contents); TabInfo* tab_info = TabInfo::Get(new_contents); + if (tab_info->state() == TabState::INITIAL) { + // A new tab has been created: log the time since the last one was created. + if (!last_creation_time_.is_null()) { + UMA_HISTOGRAM_MEDIUM_TIMES( + "Tabs.FineTiming.TimeBetweenTabCreatedAndNextTabCreated", + tab_info->creation_time() - last_creation_time_); + } + last_creation_time_ = tab_info->creation_time(); + + // Also log the time since a tab was closed, but only if this is the first + // tab that was opened since the closing. + if (!last_close_time_.is_null()) { + UMA_HISTOGRAM_MEDIUM_TIMES( + "Tabs.FineTiming.TimeBetweenTabClosedAndNextTabCreated", + tab_info->creation_time() - last_close_time_); + last_close_time_ = base::TimeTicks(); + } + } + bool was_inactive = tab_info->state() == TabState::INACTIVE; tab_info->UpdateState(TabState::ACTIVE);
diff --git a/chrome/browser/ui/tabs/tab_strip_model_stats_recorder.h b/chrome/browser/ui/tabs/tab_strip_model_stats_recorder.h index fbb980d..060433e0 100644 --- a/chrome/browser/ui/tabs/tab_strip_model_stats_recorder.h +++ b/chrome/browser/ui/tabs/tab_strip_model_stats_recorder.h
@@ -8,6 +8,7 @@ #include <vector> #include "base/macros.h" +#include "base/time/time.h" #include "chrome/browser/ui/browser_tab_strip_tracker.h" #include "chrome/browser/ui/tabs/tab_strip_model_observer.h" @@ -67,6 +68,12 @@ BrowserTabStripTracker browser_tab_strip_tracker_; + // Record a single create and close timestamp to track the time between tab + // creation. (Tabs actually are not opened in a strict sequence so these + // timestamps are not accurate, but they'll suffice for an estimate.) + base::TimeTicks last_creation_time_; + base::TimeTicks last_close_time_; + DISALLOW_COPY_AND_ASSIGN(TabStripModelStatsRecorder); };
diff --git a/chrome/browser/ui/toolbar/app_menu_model.cc b/chrome/browser/ui/toolbar/app_menu_model.cc index 395265d..2362513 100644 --- a/chrome/browser/ui/toolbar/app_menu_model.cc +++ b/chrome/browser/ui/toolbar/app_menu_model.cc
@@ -361,18 +361,10 @@ } bool AppMenuModel::GetIconForCommandId(int command_id, gfx::Image* icon) const { - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); - switch (command_id) { - case IDC_UPGRADE_DIALOG: { - if (UpgradeDetector::GetInstance()->notify_upgrade()) { - *icon = rb.GetNativeImageNamed( - UpgradeDetector::GetInstance()->GetIconResourceID()); - return true; - } - return false; - } - default: - break; + if (command_id == IDC_UPGRADE_DIALOG && + UpgradeDetector::GetInstance()->notify_upgrade()) { + *icon = UpgradeDetector::GetInstance()->GetIcon(); + return true; } return false; }
diff --git a/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel_unittest.cc b/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel_unittest.cc index 5296fba..418ee51c 100644 --- a/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel_unittest.cc +++ b/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel_unittest.cc
@@ -84,10 +84,10 @@ .Append("desktopCapture") // A valid permission with a // message .Append("bad_perm") // An invalid permission - .Append("notifications") // An valid permission with + .Append("cookies") // An valid permission with // no message - .Append("serial")))) // Another valid permission with - // a message + .Append("serial")))) // A valid permission with a + // message .SetID(kTestExtensionId) .Build(); AppInfoPermissionsPanel panel(&profile_, app.get());
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc index 4eda2f44..701caca4 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc
@@ -23,6 +23,7 @@ #include "components/prefs/pref_service.h" #include "components/url_formatter/url_fixer.h" #include "components/user_prefs/user_prefs.h" +#include "grit/components_strings.h" #include "ui/accessibility/ax_view_state.h" #include "ui/base/l10n/l10n_util.h" #include "ui/events/event.h"
diff --git a/chrome/browser/ui/views/download/download_danger_prompt_views.cc b/chrome/browser/ui/views/download/download_danger_prompt_views.cc index 20ce2a2..467e4fd 100644 --- a/chrome/browser/ui/views/download/download_danger_prompt_views.cc +++ b/chrome/browser/ui/views/download/download_danger_prompt_views.cc
@@ -55,7 +55,6 @@ bool Cancel() override; bool Accept() override; bool Close() override; - views::View* GetInitiallyFocusedView() override; views::View* GetContentsView() override; views::Widget* GetWidget() override; const views::Widget* GetWidget() const override; @@ -139,12 +138,16 @@ void DownloadDangerPromptViews::InvokeActionForTesting(Action action) { switch (action) { case ACCEPT: - Accept(); + // This inversion is intentional. + Cancel(); + break; + + case DISMISS: + Close(); break; case CANCEL: - case DISMISS: - Cancel(); + Accept(); break; default: @@ -184,17 +187,20 @@ return ui::MODAL_TYPE_CHILD; } -bool DownloadDangerPromptViews::Cancel() { +bool DownloadDangerPromptViews::Accept() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - // ExperienceSampling: User canceled the warning. + // ExperienceSampling: User did not proceed down the dangerous path. sampling_event_->CreateUserDecisionEvent(ExperienceSamplingEvent::kDeny); + // Note that the presentational concept of "Accept/Cancel" is inverted from + // the model's concept of ACCEPT/CANCEL. In the UI, the safe path is "Accept" + // and the dangerous path is "Cancel". RunDone(CANCEL); return true; } -bool DownloadDangerPromptViews::Accept() { +bool DownloadDangerPromptViews::Cancel() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - // ExperienceSampling: User proceeded through the warning. + // ExperienceSampling: User proceeded down the dangerous path. sampling_event_->CreateUserDecisionEvent(ExperienceSamplingEvent::kProceed); RunDone(ACCEPT); return true; @@ -202,16 +208,12 @@ bool DownloadDangerPromptViews::Close() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - // ExperienceSampling: User canceled the warning. + // ExperienceSampling: User did not proceed down the dangerous path. sampling_event_->CreateUserDecisionEvent(ExperienceSamplingEvent::kDeny); RunDone(DISMISS); return true; } -views::View* DownloadDangerPromptViews::GetInitiallyFocusedView() { - return GetDialogClientView()->cancel_button(); -} - views::View* DownloadDangerPromptViews::GetContentsView() { return contents_view_; } @@ -237,6 +239,11 @@ } base::string16 DownloadDangerPromptViews::GetAcceptButtonTitle() const { + // "Be safe". + return l10n_util::GetStringUTF16(IDS_CONFIRM_CANCEL_AGAIN_MALICIOUS); +} + +base::string16 DownloadDangerPromptViews::GetCancelButtonTitle() const { if (show_context_) return l10n_util::GetStringUTF16(IDS_CONFIRM_DOWNLOAD); switch (download_->GetDangerType()) { @@ -250,20 +257,6 @@ } } -base::string16 DownloadDangerPromptViews::GetCancelButtonTitle() const { - if (show_context_) - return l10n_util::GetStringUTF16(IDS_CANCEL); - switch (download_->GetDangerType()) { - case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL: - case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT: - case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_HOST: { - return l10n_util::GetStringUTF16(IDS_CONFIRM_CANCEL_AGAIN_MALICIOUS); - } - default: - return l10n_util::GetStringUTF16(IDS_CANCEL); - } -} - base::string16 DownloadDangerPromptViews::GetMessageLead() const { if (!show_context_) { switch (download_->GetDangerType()) {
diff --git a/chrome/browser/ui/views/download/download_item_view.cc b/chrome/browser/ui/views/download/download_item_view.cc index 9c9ce22..c14f2b9 100644 --- a/chrome/browser/ui/views/download/download_item_view.cc +++ b/chrome/browser/ui/views/download/download_item_view.cc
@@ -1164,7 +1164,6 @@ delete dangerous_download_label_; dangerous_download_label_ = NULL; dangerous_download_label_sized_ = false; - cached_button_size_.SetSize(0,0); // We need to load the icon now that the download has the real path. LoadIcon(); @@ -1241,25 +1240,9 @@ gfx::Size DownloadItemView::GetButtonSize() const { DCHECK(discard_button_ && (mode_ == MALICIOUS_MODE || save_button_)); - gfx::Size size; - - // We cache the size when successfully retrieved, not for performance reasons - // but because if this DownloadItemView is being animated while the tab is - // not showing, the native buttons are not parented and their preferred size - // is 0, messing-up the layout. - if (cached_button_size_.width() != 0) - return cached_button_size_; - + gfx::Size size = discard_button_->GetPreferredSize(); if (save_button_) - size = save_button_->GetMinimumSize(); - gfx::Size discard_size = discard_button_->GetMinimumSize(); - - size.SetSize(std::max(size.width(), discard_size.width()), - std::max(size.height(), discard_size.height())); - - if (size.width() != 0) - cached_button_size_ = size; - + size.SetToMax(save_button_->GetPreferredSize()); return size; }
diff --git a/chrome/browser/ui/views/download/download_item_view.h b/chrome/browser/ui/views/download/download_item_view.h index 9e4af8b4..ed6666f 100644 --- a/chrome/browser/ui/views/download/download_item_view.h +++ b/chrome/browser/ui/views/download/download_item_view.h
@@ -326,9 +326,6 @@ // Whether the dangerous mode label has been sized yet. bool dangerous_download_label_sized_; - // The size of the buttons. Cached so animation works when hidden. - mutable gfx::Size cached_button_size_; - // Whether we are currently disabled as part of opening the downloaded file. bool disabled_while_opening_;
diff --git a/chrome/browser/ui/views/download/download_item_view_md.cc b/chrome/browser/ui/views/download/download_item_view_md.cc index 0cb0b6d..359bf407 100644 --- a/chrome/browser/ui/views/download/download_item_view_md.cc +++ b/chrome/browser/ui/views/download/download_item_view_md.cc
@@ -860,7 +860,6 @@ delete dangerous_download_label_; dangerous_download_label_ = NULL; dangerous_download_label_sized_ = false; - cached_button_size_.SetSize(0, 0); // We need to load the icon now that the download has the real path. LoadIcon(); @@ -944,25 +943,9 @@ gfx::Size DownloadItemViewMd::GetButtonSize() const { DCHECK(discard_button_ && (mode_ == MALICIOUS_MODE || save_button_)); - gfx::Size size; - - // We cache the size when successfully retrieved, not for performance reasons - // but because if this DownloadItemViewMd is being animated while the tab is - // not showing, the native buttons are not parented and their preferred size - // is 0, messing-up the layout. - if (cached_button_size_.width() != 0) - return cached_button_size_; - + gfx::Size size = discard_button_->GetPreferredSize(); if (save_button_) - size = save_button_->GetMinimumSize(); - gfx::Size discard_size = discard_button_->GetMinimumSize(); - - size.SetSize(std::max(size.width(), discard_size.width()), - std::max(size.height(), discard_size.height())); - - if (size.width() != 0) - cached_button_size_ = size; - + size.SetToMax(save_button_->GetPreferredSize()); return size; }
diff --git a/chrome/browser/ui/views/download/download_item_view_md.h b/chrome/browser/ui/views/download/download_item_view_md.h index 37d1dd40..e4357ea 100644 --- a/chrome/browser/ui/views/download/download_item_view_md.h +++ b/chrome/browser/ui/views/download/download_item_view_md.h
@@ -292,9 +292,6 @@ // Whether the dangerous mode label has been sized yet. bool dangerous_download_label_sized_; - // The size of the buttons. Cached so animation works when hidden. - mutable gfx::Size cached_button_size_; - // Whether we are currently disabled as part of opening the downloaded file. bool disabled_while_opening_;
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc index bc0e4a16..04ce2a6 100644 --- a/chrome/browser/ui/views/frame/browser_view.cc +++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -1412,7 +1412,7 @@ // the location bar. views::View* popup_anchor = frame_->GetLocationIconView(); if (!popup_anchor) - popup_anchor = GetLocationBarView()->location_icon_view(); + popup_anchor = GetLocationBarView()->location_icon_view()->GetImageView(); WebsiteSettingsPopupView::ShowPopup(popup_anchor, gfx::Rect(), profile, web_contents, url, security_info);
diff --git a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h index ad46081..2d6558c8 100644 --- a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h +++ b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h
@@ -48,6 +48,7 @@ } const views::ImageView* GetImageView() const { return image_; } + views::ImageView* GetImageView() { return image_; } protected: views::ImageView* image() { return image_; }
diff --git a/chrome/browser/ui/views/location_bar/star_view.cc b/chrome/browser/ui/views/location_bar/star_view.cc index d46f69ab..38ee833b 100644 --- a/chrome/browser/ui/views/location_bar/star_view.cc +++ b/chrome/browser/ui/views/location_bar/star_view.cc
@@ -13,6 +13,7 @@ #include "chrome/browser/ui/view_ids.h" #include "chrome/browser/ui/views/bookmarks/bookmark_bubble_view.h" #include "chrome/grit/generated_resources.h" +#include "grit/components_strings.h" #include "grit/theme_resources.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/material_design/material_design_controller.h"
diff --git a/chrome/browser/ui/views/passwords/auto_signin_first_run_dialog_view.cc b/chrome/browser/ui/views/passwords/auto_signin_first_run_dialog_view.cc index c4307b1..4aef871 100644 --- a/chrome/browser/ui/views/passwords/auto_signin_first_run_dialog_view.cc +++ b/chrome/browser/ui/views/passwords/auto_signin_first_run_dialog_view.cc
@@ -152,6 +152,9 @@ content_label->SetBaseFontList( ui::ResourceBundle::GetSharedInstance().GetFontList( ui::ResourceBundle::SmallFont)); + views::StyledLabel::RangeStyleInfo default_style; + default_style.color = kAutoSigninTextColor; + content_label->SetDefaultStyle(default_style); if (!text_content.second.is_empty()) { content_label->AddStyleRange( text_content.second,
diff --git a/chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc b/chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc index b8d5b28..7209458 100644 --- a/chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc +++ b/chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc
@@ -5,7 +5,6 @@ #include "base/strings/utf_string_conversions.h" #include "chrome/browser/password_manager/chrome_password_manager_client.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/autofill/chrome_autofill_client.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" @@ -14,6 +13,8 @@ #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" #include "components/password_manager/core/browser/password_bubble_experiment.h" +#include "components/password_manager/core/common/password_manager_pref_names.h" +#include "components/prefs/pref_service.h" #include "net/url_request/test_url_fetcher_factory.h" #include "testing/gmock/include/gmock/gmock.h" #include "ui/views/widget/widget.h" @@ -111,6 +112,8 @@ ScopedVector<autofill::PasswordForm> federated_credentials, const GURL& origin); + content::WebContents* SetupTabWithTestController(Browser* browser); + TestManagePasswordsUIController* controller() const { return controller_; } ChromePasswordManagerClient* client() const { @@ -126,27 +129,7 @@ }; void PasswordDialogViewTest::SetUpOnMainThread() { - // Open a new tab with modified ManagePasswordsUIController. - content::WebContents* tab = - browser()->tab_strip_model()->GetActiveWebContents(); - content::WebContents* new_tab = content::WebContents::Create( - content::WebContents::CreateParams(tab->GetBrowserContext())); - ASSERT_TRUE(new_tab); - - // ManagePasswordsUIController needs ChromePasswordManagerClient for logging. - // ChromePasswordManagerClient needs ChromeAutofillClient on creation. - autofill::ChromeAutofillClient::CreateForWebContents(new_tab); - ChromePasswordManagerClient::CreateForWebContentsWithAutofillClient( - new_tab, - autofill::ChromeAutofillClient::FromWebContents(new_tab)); - ASSERT_TRUE(ChromePasswordManagerClient::FromWebContents(new_tab)); - controller_ = new TestManagePasswordsUIController(new_tab); - browser()->tab_strip_model()->AppendWebContents(new_tab, true); - - // Navigate to a Web URL. - ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( - browser(), GURL("http://www.google.com"))); - ASSERT_EQ(controller_, ManagePasswordsUIController::FromWebContents(new_tab)); + SetupTabWithTestController(browser()); } void PasswordDialogViewTest::SetupChooseCredentials( @@ -160,6 +143,29 @@ controller()->GetState()); } +content::WebContents* PasswordDialogViewTest::SetupTabWithTestController( + Browser* browser) { + // Open a new tab with modified ManagePasswordsUIController. + content::WebContents* tab = + browser->tab_strip_model()->GetActiveWebContents(); + content::WebContents* new_tab = content::WebContents::Create( + content::WebContents::CreateParams(tab->GetBrowserContext())); + EXPECT_TRUE(new_tab); + + // ManagePasswordsUIController needs ChromePasswordManagerClient for logging. + ChromePasswordManagerClient::CreateForWebContentsWithAutofillClient( + new_tab, nullptr); + EXPECT_TRUE(ChromePasswordManagerClient::FromWebContents(new_tab)); + controller_ = new TestManagePasswordsUIController(new_tab); + browser->tab_strip_model()->AppendWebContents(new_tab, true); + + // Navigate to a Web URL. + EXPECT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( + browser, GURL("http://www.google.com"))); + EXPECT_EQ(controller_, ManagePasswordsUIController::FromWebContents(new_tab)); + return new_tab; +} + IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, PopupAccountChooserWithMultipleCredentialsReturnEmpty) { GURL origin("https://example.com"); @@ -286,9 +292,82 @@ controller()->ChooseCredential( form, password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); + EXPECT_CALL(*controller(), OnDialogClosed()); EXPECT_TRUE(controller()->current_autosignin_prompt()); } +IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, + PopupAccountChooserWithDisabledAutoSignin) { + EXPECT_TRUE( + password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( + browser()->profile()->GetPrefs())); + GURL origin("https://example.com"); + ScopedVector<autofill::PasswordForm> local_credentials; + autofill::PasswordForm form; + form.origin = origin; + form.display_name = base::ASCIIToUTF16("Peter"); + form.username_value = base::ASCIIToUTF16("peter@pan.test"); + local_credentials.push_back(new autofill::PasswordForm(form)); + + SetupChooseCredentials(std::move(local_credentials), + ScopedVector<autofill::PasswordForm>(), origin); + + EXPECT_TRUE(controller()->current_account_chooser()); + + // After picking a credential, we should pass it back to the caller via the + // callback, and pop up the autosignin prompt iff we should show it. + EXPECT_CALL(*this, + OnChooseCredential(Field( + &password_manager::CredentialInfo::type, + password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD))); + browser()->profile()->GetPrefs()->SetBoolean( + password_manager::prefs::kCredentialsEnableAutosignin, false); + controller()->ChooseCredential( + form, password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); + + // The first run experience isn't shown because the setting is off. + EXPECT_FALSE(controller()->current_autosignin_prompt()); +} + +IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, + PopupAccountChooserInIncognito) { + EXPECT_TRUE( + password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( + browser()->profile()->GetPrefs())); + EXPECT_TRUE( + browser()->profile()->GetPrefs()->GetBoolean( + password_manager::prefs::kCredentialsEnableAutosignin)); + GURL origin("https://example.com"); + ScopedVector<autofill::PasswordForm> local_credentials; + autofill::PasswordForm form; + form.origin = origin; + form.display_name = base::ASCIIToUTF16("Peter"); + form.username_value = base::ASCIIToUTF16("peter@pan.test"); + local_credentials.push_back(new autofill::PasswordForm(form)); + + Browser* incognito = CreateIncognitoBrowser(); + content::WebContents* tab = SetupTabWithTestController(incognito); + ChromePasswordManagerClient* client = + ChromePasswordManagerClient::FromWebContents(tab); + client->PromptUserToChooseCredentials( + std::move(local_credentials), ScopedVector<autofill::PasswordForm>(), + origin, + base::Bind(&PasswordDialogViewTest::OnChooseCredential, this)); + EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, + controller()->GetState()); + EXPECT_TRUE(controller()->current_account_chooser()); + + EXPECT_CALL(*this, + OnChooseCredential(Field( + &password_manager::CredentialInfo::type, + password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD))); + controller()->ChooseCredential( + form, password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); + + // The first run experience isn't shown because of Incognito. + EXPECT_FALSE(controller()->current_autosignin_prompt()); +} + IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, PopupAutoSigninPrompt) { EXPECT_TRUE( password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( @@ -335,15 +414,26 @@ // Successful login with a distinct form after block will not prompt: blocked_form.reset(new autofill::PasswordForm(form)); client()->NotifyUserAutoSigninBlockedOnFirstRun(std::move(blocked_form)); - form.username_value = base::ASCIIToUTF16("notpeter@pan.test"); client()->NotifySuccessfulLoginWithExistingPassword(form); ASSERT_FALSE(controller()->current_autosignin_prompt()); + // Successful login with the same form after block will not prompt if auto + // sign-in is off: + browser()->profile()->GetPrefs()->SetBoolean( + password_manager::prefs::kCredentialsEnableAutosignin, false); + blocked_form.reset(new autofill::PasswordForm(form)); + client()->NotifyUserAutoSigninBlockedOnFirstRun(std::move(blocked_form)); + client()->NotifySuccessfulLoginWithExistingPassword(form); + ASSERT_FALSE(controller()->current_autosignin_prompt()); + browser()->profile()->GetPrefs()->SetBoolean( + password_manager::prefs::kCredentialsEnableAutosignin, true); + // Successful login with the same form after block will prompt: blocked_form.reset(new autofill::PasswordForm(form)); client()->NotifyUserAutoSigninBlockedOnFirstRun(std::move(blocked_form)); client()->NotifySuccessfulLoginWithExistingPassword(form); + EXPECT_CALL(*controller(), OnDialogClosed()); ASSERT_TRUE(controller()->current_autosignin_prompt()); }
diff --git a/chrome/browser/ui/views/toolbar/toolbar_action_view.cc b/chrome/browser/ui/views/toolbar/toolbar_action_view.cc index bde5436..5ac1202 100644 --- a/chrome/browser/ui/views/toolbar/toolbar_action_view.cc +++ b/chrome/browser/ui/views/toolbar/toolbar_action_view.cc
@@ -7,6 +7,7 @@ #include <string> #include "base/auto_reset.h" +#include "base/bind.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/sessions/session_tab_helper.h" #include "chrome/browser/ui/toolbar/toolbar_action_view_controller.h" @@ -40,13 +41,9 @@ // handled directly by the Image. const int kBorderInset = 0; -// The ToolbarActionView which is currently showing its context menu, if any. -// Since only one context menu can be shown (even across browser windows), it's -// safe to have this be a global singleton. -ToolbarActionView* context_menu_owner = nullptr; - // The callback to call directly before showing the context menu. -ToolbarActionView::ContextMenuCallback* context_menu_callback = nullptr; +ToolbarActionView::ContextMenuCallback* context_menu_callback_for_test = + nullptr; } // namespace @@ -93,8 +90,6 @@ } ToolbarActionView::~ToolbarActionView() { - if (context_menu_owner == this) - context_menu_owner = nullptr; view_controller_->SetDelegate(nullptr); } @@ -178,13 +173,21 @@ } } +void ToolbarActionView::OnMenuClosed() { + menu_runner_.reset(); + menu_ = nullptr; + view_controller_->OnContextMenuClosed(); + menu_adapter_.reset(); + ink_drop_delegate()->OnAction(views::InkDropState::DEACTIVATED); +} + gfx::ImageSkia ToolbarActionView::GetIconForTest() { return GetImage(views::Button::STATE_NORMAL); } void ToolbarActionView::set_context_menu_callback_for_testing( base::Callback<void(ToolbarActionView*)>* callback) { - context_menu_callback = callback; + context_menu_callback_for_test = callback; } gfx::Size ToolbarActionView::GetPreferredSize() const { @@ -267,21 +270,6 @@ views::View* source, const gfx::Point& point, ui::MenuSourceType source_type) { - // If there's another active menu that won't be dismissed by opening this one, - // then we can't show this one right away, since we can only show one nested - // menu at a time. - // If the other menu is an extension action's context menu, then we'll run - // this one after that one closes. If it's a different type of menu, then we - // close it and give up, for want of a better solution. (Luckily, this is - // rare). - // TODO(devlin): Update this when views code no longer runs menus in a nested - // loop. - if (context_menu_owner) { - context_menu_owner->followup_context_menu_task_ = - base::Bind(&ToolbarActionView::DoShowContextMenu, - weak_factory_.GetWeakPtr(), - source_type); - } if (CloseActiveMenuIfNeeded()) return; @@ -297,13 +285,12 @@ return; DCHECK(visible()); // We should never show a context menu for a hidden item. - DCHECK(!context_menu_owner); gfx::Point screen_loc; ConvertPointToScreen(this, &screen_loc); - int run_types = - views::MenuRunner::HAS_MNEMONICS | views::MenuRunner::CONTEXT_MENU; + int run_types = views::MenuRunner::HAS_MNEMONICS | + views::MenuRunner::CONTEXT_MENU | views::MenuRunner::ASYNC; if (delegate_->ShownInsideMenu()) run_types |= views::MenuRunner::IS_NESTED; @@ -314,31 +301,20 @@ GetWidget(); ink_drop_delegate()->OnAction(views::InkDropState::ACTIVATED); - - views::MenuModelAdapter adapter(context_menu_model); - menu_ = adapter.CreateMenu(); + // Unretained() is safe here as ToolbarActionView will always outlive the + // menu. Any action that would lead to the deletion of |this| first triggers + // the closing of the menu through lost capture. + menu_adapter_.reset(new views::MenuModelAdapter( + context_menu_model, + base::Bind(&ToolbarActionView::OnMenuClosed, base::Unretained(this)))); + menu_ = menu_adapter_->CreateMenu(); menu_runner_.reset(new views::MenuRunner(menu_, run_types)); - if (context_menu_callback) - context_menu_callback->Run(this); - if (menu_runner_->RunMenuAt(parent, this, gfx::Rect(screen_loc, size()), - views::MENU_ANCHOR_TOPLEFT, - source_type) == views::MenuRunner::MENU_DELETED) { - return; - } - ink_drop_delegate()->OnAction(views::InkDropState::DEACTIVATED); - - menu_runner_.reset(); - menu_ = nullptr; - context_menu_owner = nullptr; - view_controller_->OnContextMenuClosed(); - - // If another extension action wants to show its context menu, allow it to. - if (!followup_context_menu_task_.is_null()) { - base::Closure task = followup_context_menu_task_; - followup_context_menu_task_ = base::Closure(); - task.Run(); - } + if (context_menu_callback_for_test) + context_menu_callback_for_test->Run(this); + ignore_result( + menu_runner_->RunMenuAt(parent, this, gfx::Rect(screen_loc, size()), + views::MENU_ANCHOR_TOPLEFT, source_type)); } bool ToolbarActionView::CloseActiveMenuIfNeeded() {
diff --git a/chrome/browser/ui/views/toolbar/toolbar_action_view.h b/chrome/browser/ui/views/toolbar/toolbar_action_view.h index 8d9b9ff4..a875a98 100644 --- a/chrome/browser/ui/views/toolbar/toolbar_action_view.h +++ b/chrome/browser/ui/views/toolbar/toolbar_action_view.h
@@ -11,6 +11,7 @@ #include "ui/views/context_menu_controller.h" #include "ui/views/controls/button/menu_button.h" #include "ui/views/controls/button/menu_button_listener.h" +#include "ui/views/controls/menu/menu_model_adapter.h" #include "ui/views/drag_controller.h" #include "ui/views/view.h" @@ -26,6 +27,7 @@ namespace views { class MenuItemView; +class MenuModelAdapter; class MenuRunner; } @@ -132,6 +134,9 @@ // Returns true if a menu was closed, false otherwise. bool CloseActiveMenuIfNeeded(); + // Callback for MenuModelAdapter. + void OnMenuClosed(); + // A lock to keep the MenuButton pressed when a menu or popup is visible. scoped_ptr<views::MenuButton::PressedLock> pressed_lock_; @@ -148,6 +153,9 @@ // tab. bool wants_to_run_; + // Responsible for converting the context menu model into |menu_|. + scoped_ptr<views::MenuModelAdapter> menu_adapter_; + // Responsible for running the menu. scoped_ptr<views::MenuRunner> menu_runner_; @@ -155,10 +163,6 @@ // shown. views::MenuItemView* menu_; - // If non-null, this is the next toolbar action context menu that wants to run - // once the current owner (this one) is done. - base::Closure followup_context_menu_task_; - // The time the popup was last closed. base::TimeTicks popup_closed_time_;
diff --git a/chrome/browser/ui/views/toolbar/toolbar_action_view_interactive_uitest.cc b/chrome/browser/ui/views/toolbar/toolbar_action_view_interactive_uitest.cc index 2aaf36f3..eced0ba 100644 --- a/chrome/browser/ui/views/toolbar/toolbar_action_view_interactive_uitest.cc +++ b/chrome/browser/ui/views/toolbar/toolbar_action_view_interactive_uitest.cc
@@ -63,6 +63,29 @@ button, ui_controls::DOWN | ui_controls::UP, quit_closure); } +void ActivateOverflowedActionWithKeyboard(Browser* browser, + const base::Closure& closure) { + AppMenuButton* app_menu_button = GetAppButtonFromBrowser(browser); + EXPECT_TRUE(app_menu_button->IsMenuShowing()); + // We need to dispatch key events to the menu's native window, rather than the + // browser's. + gfx::NativeWindow native_window = + views::MenuController::GetActiveInstance()->owner()->GetNativeWindow(); + + // Send two key down events followed by the return key. + // The two key down events target the toolbar action in the app menu. + // TODO(devlin): Shouldn't this be one key down event? + ui_controls::SendKeyPress(native_window, + ui::VKEY_DOWN, + false, false, false, false); + ui_controls::SendKeyPress(native_window, + ui::VKEY_DOWN, + false, false, false, false); + ui_controls::SendKeyPressNotifyWhenDone(native_window, + ui::VKEY_RETURN, + false, false, false, false, closure); +} + // Tests the context menu of an overflowed action. void TestWhileContextMenuOpen(bool* did_test_while_menu_open, Browser* browser, @@ -337,3 +360,44 @@ EXPECT_FALSE(view_controller->is_showing_popup()); EXPECT_EQ(nullptr, toolbar_actions_bar->popup_owner()); } + +#if defined(USE_OZONE) +// ozone bringup - http://crbug.com/401304 +#define MAYBE_ActivateOverflowedToolbarActionWithKeyboard \ + DISABLED_ActivateOverflowedToolbarActionWithKeyboard +#else +#define MAYBE_ActivateOverflowedToolbarActionWithKeyboard \ + ActivateOverflowedToolbarActionWithKeyboard +#endif +IN_PROC_BROWSER_TEST_F(ToolbarActionViewInteractiveUITest, + MAYBE_ActivateOverflowedToolbarActionWithKeyboard) { + views::MenuController::TurnOffMenuSelectionHoldForTest(); + // Load an extension with an action. + ASSERT_TRUE(LoadExtension( + test_data_dir_.AppendASCII("ui").AppendASCII("browser_action_popup"))); + base::RunLoop().RunUntilIdle(); // Ensure the extension is fully loaded. + + // Reduce visible count to 0 so that all actions are overflowed. + ToolbarActionsModel::Get(profile())->SetVisibleIconCount(0); + + // Set up a listener for the extension being triggered. + ExtensionTestMessageListener listener("Popup opened", false); + + // Open the app menu, navigate to the toolbar action, and activate it via the + // keyboard. + AppMenuButton* app_menu_button = GetAppButtonFromBrowser(browser()); + gfx::Point app_button_loc = + test::GetCenterInScreenCoordinates(app_menu_button); + base::RunLoop loop; + ui_controls::SendMouseMove(app_button_loc.x(), app_button_loc.y()); + ui_controls::SendMouseEventsNotifyWhenDone( + ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP, + base::Bind(&ActivateOverflowedActionWithKeyboard, + browser(), loop.QuitClosure())); + loop.Run(); + + // The app menu should no longer be showing. + EXPECT_FALSE(app_menu_button->IsMenuShowing()); + // And the extension should have been activated. + EXPECT_TRUE(listener.WaitUntilSatisfied()); +}
diff --git a/chrome/browser/ui/webui/browsing_history_handler.cc b/chrome/browser/ui/webui/browsing_history_handler.cc index 499099a..520dad74 100644 --- a/chrome/browser/ui/webui/browsing_history_handler.cc +++ b/chrome/browser/ui/webui/browsing_history_handler.cc
@@ -21,6 +21,8 @@ #include "chrome/browser/banners/app_banner_settings_helper.h" #include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/engagement/site_engagement_service.h" +#include "chrome/browser/favicon/fallback_icon_service_factory.h" +#include "chrome/browser/favicon/large_icon_service_factory.h" #include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/history/history_utils.h" #include "chrome/browser/history/web_history_service_factory.h" @@ -29,11 +31,15 @@ #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/chrome_pages.h" #include "chrome/browser/ui/webui/favicon_source.h" +#include "chrome/browser/ui/webui/large_icon_source.h" #include "chrome/common/features.h" #include "chrome/common/pref_names.h" #include "components/bookmarks/browser/bookmark_model.h" #include "components/bookmarks/browser/bookmark_utils.h" #include "components/browser_sync/browser/profile_sync_service.h" +#include "components/favicon/core/fallback_icon_service.h" +#include "components/favicon/core/fallback_url_util.h" +#include "components/favicon/core/large_icon_service.h" #include "components/history/core/browser/history_service.h" #include "components/history/core/browser/history_types.h" #include "components/history/core/browser/web_history_service.h" @@ -220,6 +226,10 @@ // HistoryEntry. Please update it whenever you add or remove // any keys in result. result->SetString("domain", domain); + + result->SetString("fallbackFaviconText", + base::UTF16ToASCII(favicon::GetFallbackIconText(url))); + result->SetDouble("time", time.ToJsTime()); // Pass the timestamps in a list. @@ -308,8 +318,18 @@ void BrowsingHistoryHandler::RegisterMessages() { // Create our favicon data source. Profile* profile = Profile::FromWebUI(web_ui()); + +#if defined(OS_ANDROID) + favicon::FallbackIconService* fallback_icon_service = + FallbackIconServiceFactory::GetForBrowserContext(profile); + favicon::LargeIconService* large_icon_service = + LargeIconServiceFactory::GetForBrowserContext(profile); + content::URLDataSource::Add( + profile, new LargeIconSource(fallback_icon_service, large_icon_service)); +#else content::URLDataSource::Add( profile, new FaviconSource(profile, FaviconSource::ANY)); +#endif // Get notifications when history is cleared. history::HistoryService* hs = HistoryServiceFactory::GetForProfile(
diff --git a/chrome/browser/ui/webui/help/help_handler.cc b/chrome/browser/ui/webui/help/help_handler.cc index 0db8cc3..8df70b58 100644 --- a/chrome/browser/ui/webui/help/help_handler.cc +++ b/chrome/browser/ui/webui/help/help_handler.cc
@@ -527,7 +527,8 @@ if (user_manager::UserManager::Get()->IsCurrentUserOwner()) { // Check for update after switching release channel. version_updater_->CheckForUpdate(base::Bind(&HelpHandler::SetUpdateStatus, - base::Unretained(this))); + base::Unretained(this)), + VersionUpdater::PromoteCallback()); } } @@ -549,12 +550,14 @@ #endif // defined(OS_CHROMEOS) void HelpHandler::RequestUpdate(const base::ListValue* args) { + VersionUpdater::PromoteCallback promote_callback; version_updater_->CheckForUpdate( - base::Bind(&HelpHandler::SetUpdateStatus, base::Unretained(this)) + base::Bind(&HelpHandler::SetUpdateStatus, base::Unretained(this)), #if defined(OS_MACOSX) - , base::Bind(&HelpHandler::SetPromotionState, base::Unretained(this)) -#endif - ); + base::Bind(&HelpHandler::SetPromotionState, base::Unretained(this))); +#else + VersionUpdater::PromoteCallback()); +#endif // OS_MACOSX } void HelpHandler::SetUpdateStatus(VersionUpdater::Status status,
diff --git a/chrome/browser/ui/webui/help/version_updater.h b/chrome/browser/ui/webui/help/version_updater.h index ca978dc3..ce080e2b 100644 --- a/chrome/browser/ui/webui/help/version_updater.h +++ b/chrome/browser/ui/webui/help/version_updater.h
@@ -31,14 +31,12 @@ DISABLED_BY_ADMIN }; -#if defined(OS_MACOSX) - // Promotion state. + // Promotion state (Mac-only). enum PromotionState { PROMOTE_HIDDEN, PROMOTE_ENABLED, PROMOTE_DISABLED }; -#endif // defined(OS_MACOSX) // TODO(jhawkins): Use a delegate interface instead of multiple callback // types. @@ -52,25 +50,23 @@ typedef base::Callback<void(Status, int, const base::string16&)> StatusCallback; -#if defined(OS_MACOSX) - // Used to show or hide the promote UI elements. + // Used to show or hide the promote UI elements. Mac-only. typedef base::Callback<void(PromotionState)> PromoteCallback; -#endif virtual ~VersionUpdater() {} // Sub-classes must implement this method to create the respective - // specialization. + // specialization. |web_contents| may be null, in which case any required UX + // (e.g., UAC to elevate on Windows) may not be associated with any existing + // browser windows. static VersionUpdater* Create(content::WebContents* web_contents); // Begins the update process by checking for update availability. - // |status_callback| is called for each status update. |promote_callback| can - // be used to show or hide the promote UI elements. - virtual void CheckForUpdate(const StatusCallback& status_callback -#if defined(OS_MACOSX) - , const PromoteCallback& promote_callback -#endif - ) = 0; + // |status_callback| is called for each status update. |promote_callback| + // (which is only used on the Mac) can be used to show or hide the promote UI + // elements. + virtual void CheckForUpdate(const StatusCallback& status_callback, + const PromoteCallback& promote_callback) = 0; #if defined(OS_MACOSX) // Make updates available for all users.
diff --git a/chrome/browser/ui/webui/help/version_updater_basic.cc b/chrome/browser/ui/webui/help/version_updater_basic.cc index e8096cf..e742310 100644 --- a/chrome/browser/ui/webui/help/version_updater_basic.cc +++ b/chrome/browser/ui/webui/help/version_updater_basic.cc
@@ -9,7 +9,8 @@ #include "chrome/browser/upgrade_detector.h" void VersionUpdaterBasic::CheckForUpdate( - const StatusCallback& status_callback) { + const StatusCallback& status_callback, + const PromoteCallback&) { if (UpgradeDetector::GetInstance()->notify_upgrade()) status_callback.Run(NEARLY_UPDATED, 0, base::string16()); else
diff --git a/chrome/browser/ui/webui/help/version_updater_basic.h b/chrome/browser/ui/webui/help/version_updater_basic.h index 4ba7d2f0d..89a4717 100644 --- a/chrome/browser/ui/webui/help/version_updater_basic.h +++ b/chrome/browser/ui/webui/help/version_updater_basic.h
@@ -13,7 +13,8 @@ class VersionUpdaterBasic : public VersionUpdater { public: // VersionUpdater implementation. - void CheckForUpdate(const StatusCallback& callback) override; + void CheckForUpdate(const StatusCallback& callback, + const PromoteCallback&) override; void RelaunchBrowser() const override; protected:
diff --git a/chrome/browser/ui/webui/help/version_updater_chromeos.cc b/chrome/browser/ui/webui/help/version_updater_chromeos.cc index 1146ec39..42c507d 100644 --- a/chrome/browser/ui/webui/help/version_updater_chromeos.cc +++ b/chrome/browser/ui/webui/help/version_updater_chromeos.cc
@@ -129,7 +129,8 @@ DBusThreadManager::Get()->GetUpdateEngineClient()->GetLastStatus()); } -void VersionUpdaterCros::CheckForUpdate(const StatusCallback& callback) { +void VersionUpdaterCros::CheckForUpdate(const StatusCallback& callback, + const PromoteCallback&) { callback_ = callback; if (!EnsureCanUpdate(callback)) @@ -248,7 +249,7 @@ if (check_for_update_when_idle_ && status.status == UpdateEngineClient::UPDATE_STATUS_IDLE) { - CheckForUpdate(callback_); + CheckForUpdate(callback_, VersionUpdater::PromoteCallback()); } }
diff --git a/chrome/browser/ui/webui/help/version_updater_chromeos.h b/chrome/browser/ui/webui/help/version_updater_chromeos.h index 426f700e..68683b6 100644 --- a/chrome/browser/ui/webui/help/version_updater_chromeos.h +++ b/chrome/browser/ui/webui/help/version_updater_chromeos.h
@@ -20,7 +20,8 @@ public chromeos::UpdateEngineClient::Observer { public: // VersionUpdater implementation. - void CheckForUpdate(const StatusCallback& callback) override; + void CheckForUpdate(const StatusCallback& callback, + const PromoteCallback&) override; void RelaunchBrowser() const override; void SetChannel(const std::string& channel, bool is_powerwash_allowed) override;
diff --git a/chrome/browser/ui/webui/help/version_updater_chromeos_unittest.cc b/chrome/browser/ui/webui/help/version_updater_chromeos_unittest.cc index 150e9df..3527901 100644 --- a/chrome/browser/ui/webui/help/version_updater_chromeos_unittest.cc +++ b/chrome/browser/ui/webui/help/version_updater_chromeos_unittest.cc
@@ -110,7 +110,8 @@ EXPECT_EQ(0, fake_update_engine_client_->request_update_check_call_count()); // IDLE -> DOWNLOADING transition after update check. - version_updater_->CheckForUpdate(base::Bind(&CheckNotification)); + version_updater_->CheckForUpdate(base::Bind(&CheckNotification), + VersionUpdater::PromoteCallback()); EXPECT_EQ(1, fake_update_engine_client_->request_update_check_call_count()); { @@ -132,7 +133,8 @@ fake_update_engine_client_->NotifyObserversThatStatusChanged(status); } - version_updater_->CheckForUpdate(base::Bind(&CheckNotification)); + version_updater_->CheckForUpdate(base::Bind(&CheckNotification), + VersionUpdater::PromoteCallback()); EXPECT_EQ(1, fake_update_engine_client_->request_update_check_call_count()); // REPORTING_ERROR_EVENT -> IDLE transition, update check should be
diff --git a/chrome/browser/ui/webui/help/version_updater_win.cc b/chrome/browser/ui/webui/help/version_updater_win.cc index 760677c3..1c869667 100644 --- a/chrome/browser/ui/webui/help/version_updater_win.cc +++ b/chrome/browser/ui/webui/help/version_updater_win.cc
@@ -26,7 +26,8 @@ VersionUpdaterWin::~VersionUpdaterWin() { } -void VersionUpdaterWin::CheckForUpdate(const StatusCallback& callback) { +void VersionUpdaterWin::CheckForUpdate(const StatusCallback& callback, + const PromoteCallback&) { // There is no supported integration with Google Update for Chromium. callback_ = callback;
diff --git a/chrome/browser/ui/webui/help/version_updater_win.h b/chrome/browser/ui/webui/help/version_updater_win.h index f45bb98..5822f2c 100644 --- a/chrome/browser/ui/webui/help/version_updater_win.h +++ b/chrome/browser/ui/webui/help/version_updater_win.h
@@ -25,7 +25,8 @@ ~VersionUpdaterWin() override; // VersionUpdater: - void CheckForUpdate(const StatusCallback& callback) override; + void CheckForUpdate(const StatusCallback& callback, + const PromoteCallback&) override; void RelaunchBrowser() const override; // UpdateCheckDelegate:
diff --git a/chrome/browser/ui/webui/large_icon_source.cc b/chrome/browser/ui/webui/large_icon_source.cc index 82ad0c4..47d7c06 100644 --- a/chrome/browser/ui/webui/large_icon_source.cc +++ b/chrome/browser/ui/webui/large_icon_source.cc
@@ -15,6 +15,8 @@ #include "components/favicon_base/favicon_types.h" #include "components/favicon_base/large_icon_url_parser.h" #include "net/url_request/url_request.h" +#include "third_party/skia/include/core/SkBitmap.h" +#include "ui/gfx/codec/png_codec.h" namespace { @@ -106,9 +108,23 @@ SendNotFoundResponse(callback); return; } + +#if defined(OS_ANDROID) + // RenderFallbackIconBitmap() cannot draw fallback icons on Android. See + // crbug.com/580922 for details. Return a 1x1 bitmap so that JavaScript can + // detect that it needs to generate a fallback icon. + SkBitmap bitmap; + bitmap.allocN32Pixels(1, 1); + bitmap.eraseColor(result.fallback_icon_style->background_color); + std::vector<unsigned char> bitmap_data; + if (!gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, false, &bitmap_data)) + bitmap_data.clear(); +#else std::vector<unsigned char> bitmap_data = fallback_icon_service_->RenderFallbackIconBitmap( url, size, *result.fallback_icon_style); +#endif + callback.Run(base::RefCountedBytes::TakeVector(&bitmap_data)); }
diff --git a/chrome/browser/ui/webui/media_router/media_router_localized_strings_provider.cc b/chrome/browser/ui/webui/media_router/media_router_localized_strings_provider.cc index 75eb5fd..a8778b6 100644 --- a/chrome/browser/ui/webui/media_router/media_router_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/media_router/media_router_localized_strings_provider.cc
@@ -22,8 +22,8 @@ IDS_MEDIA_ROUTER_CASTING_ACTIVITY_STATUS); html_source->AddLocalizedString("stopCastingButton", IDS_MEDIA_ROUTER_STOP_CASTING_BUTTON); - html_source->AddLocalizedString("joinButton", - IDS_MEDIA_ROUTER_JOIN_BUTTON); + html_source->AddLocalizedString("startCastingButton", + IDS_MEDIA_ROUTER_START_CASTING_BUTTON); } void AddIssuesStrings(content::WebUIDataSource* html_source) {
diff --git a/chrome/browser/ui/webui/media_router/media_router_ui.cc b/chrome/browser/ui/webui/media_router/media_router_ui.cc index 5036350..2d2d522 100644 --- a/chrome/browser/ui/webui/media_router/media_router_ui.cc +++ b/chrome/browser/ui/webui/media_router/media_router_ui.cc
@@ -485,8 +485,7 @@ DVLOG(1) << "MediaRouteResponse returned error: " << result.error(); } - std::string route_id = route ? route->media_route_id() : std::string(); - handler_->OnCreateRouteResponseReceived(sink_id, route_id); + handler_->OnCreateRouteResponseReceived(sink_id, route); current_route_request_id_ = -1; if (result.result_code() == RouteRequestResult::TIMED_OUT)
diff --git a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc index 13d8028..7be4f33 100644 --- a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc +++ b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc
@@ -231,11 +231,21 @@ void MediaRouterWebUIMessageHandler::OnCreateRouteResponseReceived( const MediaSink::Id& sink_id, - const MediaRoute::Id& route_id) { + const MediaRoute* route) { DVLOG(2) << "OnCreateRouteResponseReceived"; - web_ui()->CallJavascriptFunction(kOnCreateRouteResponseReceived, - base::StringValue(sink_id), - base::StringValue(route_id)); + if (route) { + scoped_ptr<base::DictionaryValue> route_value(RouteToValue(*route, false, + media_router_ui_->GetRouteProviderExtensionId())); + web_ui()->CallJavascriptFunction( + kOnCreateRouteResponseReceived, + base::StringValue(sink_id), *route_value, + base::FundamentalValue(route->for_display())); + } else { + web_ui()->CallJavascriptFunction(kOnCreateRouteResponseReceived, + base::StringValue(sink_id), + *base::Value::CreateNullValue(), + base::FundamentalValue(false)); + } } void MediaRouterWebUIMessageHandler::UpdateIssue(const Issue* issue) {
diff --git a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h index 8c6ea5a7..24c0678 100644 --- a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h +++ b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h
@@ -42,7 +42,7 @@ void UpdateCastModes(const CastModeSet& cast_modes, const std::string& source_host); void OnCreateRouteResponseReceived(const MediaSink::Id& sink_id, - const MediaRoute::Id& route_id); + const MediaRoute* route); // Does not take ownership of |issue|. Note that |issue| can be nullptr, when // there are no more issues.
diff --git a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc index 1521000..85ce69a 100644 --- a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc +++ b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc
@@ -157,10 +157,13 @@ MediaSink sink(sink_id, "The sink", MediaSink::IconType::CAST); std::string description("This is a route"); bool is_local = true; + bool is_for_display = true; MediaRoute route(route_id, MediaSource("mediaSource"), sink_id, description, - is_local, "", true); + is_local, "", is_for_display); - handler_->OnCreateRouteResponseReceived(sink_id, route.media_route_id()); + EXPECT_CALL(*mock_media_router_ui_, GetRouteProviderExtensionId()).WillOnce( + ReturnRef(provider_extension_id())); + handler_->OnCreateRouteResponseReceived(sink_id, &route); EXPECT_EQ(1u, web_ui_->call_data().size()); const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0]; EXPECT_EQ("media_router.ui.onCreateRouteResponseReceived", @@ -171,9 +174,24 @@ EXPECT_EQ(sink_id, sink_id_value->GetString()); const base::Value* arg2 = call_data.arg2(); - const base::StringValue* route_id_value = nullptr; - ASSERT_TRUE(arg2->GetAsString(&route_id_value)); - EXPECT_EQ(route_id, route_id_value->GetString()); + const base::DictionaryValue* route_value = nullptr; + ASSERT_TRUE(arg2->GetAsDictionary(&route_value)); + std::string value; + EXPECT_TRUE(route_value->GetString("id", &value)); + EXPECT_EQ(route_id, value); + EXPECT_TRUE(route_value->GetString("sinkId", &value)); + EXPECT_EQ(sink_id, value); + EXPECT_TRUE(route_value->GetString("description", &value)); + EXPECT_EQ(description, value); + + bool actual_is_local = false; + EXPECT_TRUE(route_value->GetBoolean("isLocal", &actual_is_local)); + EXPECT_EQ(is_local, actual_is_local); + + const base::Value* arg3 = call_data.arg3(); + bool route_for_display = false; + ASSERT_TRUE(arg3->GetAsBoolean(&route_for_display)); + EXPECT_EQ(is_for_display, route_for_display); } TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateIssue) {
diff --git a/chrome/browser/ui/webui/ntp/ntp_user_data_logger.cc b/chrome/browser/ui/webui/ntp/ntp_user_data_logger.cc index 79d9ef03..23a7fda 100644 --- a/chrome/browser/ui/webui/ntp/ntp_user_data_logger.cc +++ b/chrome/browser/ui/webui/ntp/ntp_user_data_logger.cc
@@ -4,14 +4,21 @@ #include "chrome/browser/ui/webui/ntp/ntp_user_data_logger.h" +#include <algorithm> + #include "base/metrics/histogram.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/after_startup_task_utils.h" +#include "chrome/browser/profiles/profile.h" #include "chrome/browser/search/most_visited_iframe_source.h" #include "chrome/browser/search/search.h" +#include "chrome/browser/sync/profile_sync_service_factory.h" #include "chrome/common/search_urls.h" #include "chrome/common/url_constants.h" +#include "components/browser_sync/browser/profile_sync_service.h" +#include "components/sync_sessions/sessions_sync_manager.h" +#include "components/sync_sessions/sync_sessions_metrics.h" #include "content/public/browser/navigation_details.h" #include "content/public/browser/navigation_entry.h" #include "content/public/browser/user_metrics.h" @@ -287,4 +294,22 @@ has_emitted_(false), during_startup_(false) { during_startup_ = !AfterStartupTaskUtils::IsBrowserStartupComplete(); + + // We record metrics about session data here because when this class typically + // emits metrics it is too late. This session data would theoretically have + // been used to populate the page, and we want to learn about its state when + // the NTP is being generated. + if (contents) { + ProfileSyncService* sync = ProfileSyncServiceFactory::GetForProfile( + Profile::FromBrowserContext(contents->GetBrowserContext())); + if (sync) { + browser_sync::SessionsSyncManager* sessions = + static_cast<browser_sync::SessionsSyncManager*>( + sync->GetSessionsSyncableService()); + if (sessions) { + sync_sessions::SyncSessionsMetrics::RecordYoungestForeignTabAgeOnNTP( + sessions); + } + } + } }
diff --git a/chrome/browser/ui/webui/options/browser_options_handler.cc b/chrome/browser/ui/webui/options/browser_options_handler.cc index a9045fff..70df967 100644 --- a/chrome/browser/ui/webui/options/browser_options_handler.cc +++ b/chrome/browser/ui/webui/options/browser_options_handler.cc
@@ -2117,7 +2117,7 @@ InitiateMetricsReportingChange( enable, base::Bind(&BrowserOptionsHandler::NotifyUIOfMetricsReportingChange, - base::Unretained(this))); + weak_ptr_factory_.GetWeakPtr())); } void BrowserOptionsHandler::NotifyUIOfMetricsReportingChange(bool enabled) {
diff --git a/chrome/browser/ui/webui/options/password_manager_handler.cc b/chrome/browser/ui/webui/options/password_manager_handler.cc index 436380b0..1f6caa3 100644 --- a/chrome/browser/ui/webui/options/password_manager_handler.cc +++ b/chrome/browser/ui/webui/options/password_manager_handler.cc
@@ -25,6 +25,7 @@ #include "components/password_manager/core/browser/password_ui_utils.h" #include "components/password_manager/core/common/experiments.h" #include "components/prefs/pref_service.h" +#include "components/strings/grit/components_strings.h" #include "components/url_formatter/url_formatter.h" #include "content/public/browser/notification_details.h" #include "content/public/browser/notification_source.h" @@ -94,8 +95,8 @@ static const OptionsStringResource resources[] = { {"autoSigninTitle", IDS_PASSWORDS_AUTO_SIGNIN_TITLE}, {"autoSigninDescription", IDS_PASSWORDS_AUTO_SIGNIN_DESCRIPTION}, - {"savedPasswordsTitle", IDS_PASSWORDS_SHOW_PASSWORDS_TAB_TITLE}, - {"passwordExceptionsTitle", IDS_PASSWORDS_EXCEPTIONS_TAB_TITLE}, + {"savedPasswordsTitle", IDS_PASSWORD_MANAGER_SHOW_PASSWORDS_TAB_TITLE}, + {"passwordExceptionsTitle", IDS_PASSWORD_MANAGER_EXCEPTIONS_TAB_TITLE}, {"passwordSearchPlaceholder", IDS_PASSWORDS_PAGE_SEARCH_PASSWORDS}, {"passwordShowButton", IDS_PASSWORDS_PAGE_VIEW_SHOW_BUTTON}, {"passwordHideButton", IDS_PASSWORDS_PAGE_VIEW_HIDE_BUTTON},
diff --git a/chrome/browser/ui/webui/popular_sites_internals_message_handler.cc b/chrome/browser/ui/webui/popular_sites_internals_message_handler.cc index 7bcdc1f7..a872863c 100644 --- a/chrome/browser/ui/webui/popular_sites_internals_message_handler.cc +++ b/chrome/browser/ui/webui/popular_sites_internals_message_handler.cc
@@ -4,19 +4,32 @@ #include "chrome/browser/ui/webui/popular_sites_internals_message_handler.h" -#include <string> #include <utility> #include "base/bind.h" +#include "base/files/file_path.h" +#include "base/files/file_util.h" #include "base/memory/ref_counted.h" +#include "base/task_runner_util.h" #include "base/values.h" #include "chrome/browser/android/popular_sites.h" #include "chrome/browser/profiles/profile.h" #include "components/url_formatter/url_fixer.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/web_ui.h" -PopularSitesInternalsMessageHandler::PopularSitesInternalsMessageHandler() { +namespace { + +std::string ReadFileToString(const base::FilePath& path) { + std::string result; + if (!base::ReadFileToString(path, &result)) + result.clear(); + return result; } +} + +PopularSitesInternalsMessageHandler::PopularSitesInternalsMessageHandler() + : weak_ptr_factory_(this) {} PopularSitesInternalsMessageHandler::~PopularSitesInternalsMessageHandler() {} @@ -28,6 +41,11 @@ web_ui()->RegisterMessageCallback("download", base::Bind(&PopularSitesInternalsMessageHandler::HandleDownload, base::Unretained(this))); + + web_ui()->RegisterMessageCallback( + "viewJson", + base::Bind(&PopularSitesInternalsMessageHandler::HandleViewJson, + base::Unretained(this))); } void PopularSitesInternalsMessageHandler::HandleRegisterForEvents( @@ -65,6 +83,21 @@ version, true, callback)); } +void PopularSitesInternalsMessageHandler::HandleViewJson( + const base::ListValue* args) { + DCHECK_EQ(0u, args->GetSize()); + + const base::FilePath& path = popular_sites_->local_path(); + base::PostTaskAndReplyWithResult( + content::BrowserThread::GetBlockingPool() + ->GetTaskRunnerWithShutdownBehavior( + base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN) + .get(), + FROM_HERE, base::Bind(&ReadFileToString, path), + base::Bind(&PopularSitesInternalsMessageHandler::SendJson, + weak_ptr_factory_.GetWeakPtr())); +} + void PopularSitesInternalsMessageHandler::SendDownloadResult(bool success) { base::StringValue result(success ? "Success" : "Fail"); web_ui()->CallJavascriptFunction( @@ -86,6 +119,11 @@ "chrome.popular_sites_internals.receiveSites", result); } +void PopularSitesInternalsMessageHandler::SendJson(const std::string& json) { + web_ui()->CallJavascriptFunction("chrome.popular_sites_internals.receiveJson", + base::StringValue(json)); +} + void PopularSitesInternalsMessageHandler::OnPopularSitesAvailable( bool explicit_request, bool success) { if (explicit_request)
diff --git a/chrome/browser/ui/webui/popular_sites_internals_message_handler.h b/chrome/browser/ui/webui/popular_sites_internals_message_handler.h index 56b53010..1801a927 100644 --- a/chrome/browser/ui/webui/popular_sites_internals_message_handler.h +++ b/chrome/browser/ui/webui/popular_sites_internals_message_handler.h
@@ -5,8 +5,11 @@ #ifndef CHROME_BROWSER_UI_WEBUI_POPULAR_SITES_INTERNALS_MESSAGE_HANDLER_H_ #define CHROME_BROWSER_UI_WEBUI_POPULAR_SITES_INTERNALS_MESSAGE_HANDLER_H_ +#include <string> + #include "base/macros.h" #include "base/memory/scoped_ptr.h" +#include "base/memory/weak_ptr.h" #include "content/public/browser/web_ui_message_handler.h" namespace base { @@ -28,14 +31,18 @@ void HandleRegisterForEvents(const base::ListValue* args); void HandleDownload(const base::ListValue* args); + void HandleViewJson(const base::ListValue* args); void SendDownloadResult(bool success); void SendSites(); + void SendJson(const std::string& json); void OnPopularSitesAvailable(bool explicit_request, bool success); scoped_ptr<PopularSites> popular_sites_; + base::WeakPtrFactory<PopularSitesInternalsMessageHandler> weak_ptr_factory_; + DISALLOW_COPY_AND_ASSIGN(PopularSitesInternalsMessageHandler); };
diff --git a/chrome/browser/ui/webui/settings/site_settings_handler.cc b/chrome/browser/ui/webui/settings/site_settings_handler.cc index e2d31cc..598bede 100644 --- a/chrome/browser/ui/webui/settings/site_settings_handler.cc +++ b/chrome/browser/ui/webui/settings/site_settings_handler.cc
@@ -10,7 +10,6 @@ #include "chrome/browser/profiles/profile.h" #include "components/content_settings/core/common/content_settings_types.h" #include "content/public/browser/browser_thread.h" -#include "content/public/browser/storage_partition.h" #include "content/public/browser/web_ui.h" #include "ui/base/text/bytes_formatting.h" @@ -18,15 +17,9 @@ SiteSettingsHandler::SiteSettingsHandler(Profile* profile) : profile_(profile) { - storage::QuotaManager* quota_manager = - content::BrowserContext::GetDefaultStoragePartition( - profile_)->GetQuotaManager(); - storage_info_fetcher_ = new StorageInfoFetcher(quota_manager); - storage_info_fetcher_->AddObserver(this); } SiteSettingsHandler::~SiteSettingsHandler() { - storage_info_fetcher_->RemoveObserver(this); } void SiteSettingsHandler::RegisterMessages() { @@ -52,6 +45,7 @@ base::StringValue(entry.host), base::StringValue(ui::FormatBytes(entry.usage)), base::FundamentalValue(entry.type)); + return; } } } @@ -70,7 +64,11 @@ std::string host; CHECK(args->GetString(0, &host)); usage_host_ = host; - storage_info_fetcher_->FetchStorageInfo(); + + scoped_refptr<StorageInfoFetcher> storage_info_fetcher + = new StorageInfoFetcher(profile_); + storage_info_fetcher->FetchStorageInfo( + base::Bind(&SiteSettingsHandler::OnGetUsageInfo, base::Unretained(this))); } void SiteSettingsHandler::HandleClearUsage( @@ -86,8 +84,13 @@ clearing_origin_ = origin; // Start by clearing the storage data asynchronously. - storage_info_fetcher_->ClearStorage( - url.host(), static_cast<storage::StorageType>(type)); + scoped_refptr<StorageInfoFetcher> storage_info_fetcher + = new StorageInfoFetcher(profile_); + storage_info_fetcher->ClearStorage( + url.host(), + static_cast<storage::StorageType>(type), + base::Bind(&SiteSettingsHandler::OnUsageInfoCleared, + base::Unretained(this))); // Also clear the *local* storage data. scoped_refptr<BrowsingDataLocalStorageHelper> local_storage_helper =
diff --git a/chrome/browser/ui/webui/settings/site_settings_handler.h b/chrome/browser/ui/webui/settings/site_settings_handler.h index 7288db4..eeedc3e 100644 --- a/chrome/browser/ui/webui/settings/site_settings_handler.h +++ b/chrome/browser/ui/webui/settings/site_settings_handler.h
@@ -19,8 +19,7 @@ namespace settings { // Chrome "ContentSettings" settings page UI handler. -class SiteSettingsHandler - : public SettingsPageUIHandler, StorageInfoFetcher::Observer { +class SiteSettingsHandler : public SettingsPageUIHandler { public: explicit SiteSettingsHandler(Profile* profile); ~SiteSettingsHandler() override; @@ -28,9 +27,8 @@ // SettingsPageUIHandler: void RegisterMessages() override; - // StorageInfoFetcher::Observer: - void OnGetUsageInfo(const storage::UsageInfoEntries& entries) override; - void OnUsageInfoCleared(storage::QuotaStatusCode code) override; + void OnGetUsageInfo(const storage::UsageInfoEntries& entries); + void OnUsageInfoCleared(storage::QuotaStatusCode code); private: // Asynchronously fetches the usage for a given origin. Replies back with @@ -48,9 +46,6 @@ // The origin for which to clear usage. std::string clearing_origin_; - // The helper object asynchronously fetching storage info. - scoped_refptr<StorageInfoFetcher> storage_info_fetcher_; - DISALLOW_COPY_AND_ASSIGN(SiteSettingsHandler); };
diff --git a/chrome/browser/ui/webui/signin_internals_ui.cc b/chrome/browser/ui/webui/signin_internals_ui.cc index a14e6c61..7b5aabe 100644 --- a/chrome/browser/ui/webui/signin_internals_ui.cc +++ b/chrome/browser/ui/webui/signin_internals_ui.cc
@@ -10,11 +10,11 @@ #include "chrome/browser/signin/about_signin_internals_factory.h" #include "chrome/browser/signin/gaia_cookie_manager_service_factory.h" #include "chrome/common/url_constants.h" +#include "components/grit/components_resources.h" #include "components/signin/core/browser/about_signin_internals.h" #include "components/signin/core/browser/gaia_cookie_manager_service.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" -#include "grit/signin_internals_resources.h" namespace {
diff --git a/chrome/browser/upgrade_detector.cc b/chrome/browser/upgrade_detector.cc index ab3a4cf..23db83d 100644 --- a/chrome/browser/upgrade_detector.cc +++ b/chrome/browser/upgrade_detector.cc
@@ -14,6 +14,9 @@ #include "components/prefs/pref_registry_simple.h" #include "content/public/browser/notification_service.h" #include "grit/theme_resources.h" +#include "ui/gfx/color_palette.h" +#include "ui/gfx/paint_vector_icon.h" +#include "ui/gfx/vector_icons_public.h" // How long to wait between checks for whether the user has been idle. static const int kIdleRepeatingTimerWait = 10; // Minutes (seconds if testing). @@ -36,23 +39,27 @@ registry->RegisterBooleanPref(prefs::kAttemptedToEnableAutoupdate, false); } -int UpgradeDetector::GetIconResourceID() { +gfx::Image UpgradeDetector::GetIcon() { + SkColor color = gfx::kPlaceholderColor; switch (upgrade_notification_stage_) { case UPGRADE_ANNOYANCE_NONE: - return 0; + return gfx::Image(); case UPGRADE_ANNOYANCE_LOW: - return IDR_UPDATE_MENU_SEVERITY_LOW; + color = gfx::kGoogleGreen700; + break; case UPGRADE_ANNOYANCE_ELEVATED: - return IDR_UPDATE_MENU_SEVERITY_MEDIUM; + color = gfx::kGoogleYellow700; + break; case UPGRADE_ANNOYANCE_HIGH: - return IDR_UPDATE_MENU_SEVERITY_HIGH; case UPGRADE_ANNOYANCE_SEVERE: - return IDR_UPDATE_MENU_SEVERITY_HIGH; case UPGRADE_ANNOYANCE_CRITICAL: - return IDR_UPDATE_MENU_SEVERITY_HIGH; + color = gfx::kGoogleRed700; + break; } - NOTREACHED(); - return 0; + DCHECK_NE(gfx::kPlaceholderColor, color); + + return gfx::Image( + gfx::CreateVectorIcon(gfx::VectorIconId::UPGRADE_MENU_ITEM, 16, color)); } UpgradeDetector::UpgradeDetector()
diff --git a/chrome/browser/upgrade_detector.h b/chrome/browser/upgrade_detector.h index 7dcbf365..58a8c0e9 100644 --- a/chrome/browser/upgrade_detector.h +++ b/chrome/browser/upgrade_detector.h
@@ -70,10 +70,10 @@ bool is_factory_reset_required() const { return is_factory_reset_required_; } - // Retrieves the right icon ID based on the degree of severity (see + // Retrieves the right icon based on the degree of severity (see // UpgradeNotificationAnnoyanceLevel, each level has an an accompanying icon // to go with it) to display within the app menu. - int GetIconResourceID(); + gfx::Image GetIcon(); UpgradeNotificationAnnoyanceLevel upgrade_notification_stage() const { return upgrade_notification_stage_;
diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp index 6795b601..80001caf 100644 --- a/chrome/chrome.gyp +++ b/chrome/chrome.gyp
@@ -325,7 +325,7 @@ 'dependencies': [ 'chrome_resources.gyp:chrome_strings', '../base/base.gyp:base', - '../ui/base/ui_base.gyp:ui_base', + '../ui/base/ui_base.gyp:ui_data_pack', '../ui/gfx/gfx.gyp:gfx', '../ui/gfx/gfx.gyp:gfx_geometry', ], @@ -556,7 +556,6 @@ '../components/components.gyp:autocomplete_match_type_java', '../components/components.gyp:bookmarks_java', '../components/components.gyp:dom_distiller_core_java', - '../components/components.gyp:enhanced_bookmarks_java_enums_srcjar', '../components/components.gyp:gcm_driver_java', '../components/components.gyp:infobar_delegate_java', '../components/components.gyp:invalidation_java',
diff --git a/chrome/chrome_app_unittests.isolate b/chrome/chrome_app_unittests.isolate new file mode 100644 index 0000000..8070f22 --- /dev/null +++ b/chrome/chrome_app_unittests.isolate
@@ -0,0 +1,40 @@ +# Copyright 2016 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. +{ + 'conditions': [ + ['OS=="linux" or OS=="mac" or OS=="win"', { + 'variables': { + 'command': [ + '../testing/test_env.py', + '<(PRODUCT_DIR)/chrome_app_unittests<(EXECUTABLE_SUFFIX)', + '--brave-new-test-launcher', + '--test-launcher-bot-mode', + '--asan=<(asan)', + '--msan=<(msan)', + '--tsan=<(tsan)', + ], + 'files': [ + '../testing/test_env.py', + ], + }, + }], + ['OS=="win" and (fastbuild==0 or fastbuild==1)', { + 'variables': { + 'files': [ + '<(PRODUCT_DIR)/chrome_app_unittests.exe.pdb', + ], + }, + }], + ['OS=="win" and kasko==1', { + 'variables': { + 'files': [ + '<(PRODUCT_DIR)/kasko.dll', + ], + }, + }], + ], + 'includes': [ + '../base/base.isolate', + ], +}
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index 05ca4cbc..5f32c6c 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi
@@ -1910,6 +1910,7 @@ 'android/java/src/org/chromium/chrome/browser/spellchecker/SpellCheckerSessionBridge.java', 'android/java/src/org/chromium/chrome/browser/superviseduser/SupervisedUserContentProvider.java', 'android/java/src/org/chromium/chrome/browser/sync/ProfileSyncService.java', + 'android/java/src/org/chromium/chrome/browser/sync/SyncSessionsMetrics.java', 'android/java/src/org/chromium/chrome/browser/tab/Tab.java', 'android/java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroid.java', 'android/java/src/org/chromium/chrome/browser/tabmodel/SingleTabModel.java', @@ -2956,10 +2957,12 @@ 'browser/sync/glue/synced_tab_delegate_android.h', 'browser/sync/glue/synced_window_delegate_android.cc', 'browser/sync/glue/synced_window_delegate_android.h', - 'browser/sync/profile_sync_service_android.cc', - 'browser/sync/profile_sync_service_android.h', 'browser/sync/glue/synced_window_delegates_getter_android.cc', 'browser/sync/glue/synced_window_delegates_getter_android.h', + 'browser/sync/profile_sync_service_android.cc', + 'browser/sync/profile_sync_service_android.h', + 'browser/sync/sync_sessions_metrics_android.cc', + 'browser/sync/sync_sessions_metrics_android.h', ], 'chrome_browser_task_manager_sources': [ # Stats collection for CAPS (uses old task manager): @@ -3222,6 +3225,7 @@ '../third_party/zlib/zlib.gyp:minizip', '../third_party/zlib/zlib.gyp:zlib', '../ui/base/ui_base.gyp:ui_base', + '../ui/base/ui_base.gyp:ui_data_pack', '../ui/events/events.gyp:events_base', '../ui/gfx/gfx.gyp:gfx', '../ui/gfx/gfx.gyp:gfx_geometry',
diff --git a/chrome/chrome_browser_ui.gypi b/chrome/chrome_browser_ui.gypi index eb32403..9afbb25 100644 --- a/chrome/chrome_browser_ui.gypi +++ b/chrome/chrome_browser_ui.gypi
@@ -1148,6 +1148,8 @@ 'browser/ui/cocoa/passwords/account_avatar_fetcher_manager.mm', 'browser/ui/cocoa/passwords/account_chooser_view_controller.h', 'browser/ui/cocoa/passwords/account_chooser_view_controller.mm', + 'browser/ui/cocoa/passwords/autosignin_prompt_view_controller.h', + 'browser/ui/cocoa/passwords/autosignin_prompt_view_controller.mm', 'browser/ui/cocoa/passwords/auto_signin_view_controller.h', 'browser/ui/cocoa/passwords/auto_signin_view_controller.mm', 'browser/ui/cocoa/passwords/base_passwords_content_view_controller.h',
diff --git a/chrome/chrome_repack_resources.gypi b/chrome/chrome_repack_resources.gypi index 94cad45..c6f8180 100644 --- a/chrome/chrome_repack_resources.gypi +++ b/chrome/chrome_repack_resources.gypi
@@ -17,7 +17,6 @@ '<(grit_out_dir)/password_manager_internals_resources.pak', '<(grit_out_dir)/policy_resources.pak', '<(grit_out_dir)/settings_strings.pak', - '<(grit_out_dir)/signin_internals_resources.pak', '<(grit_out_dir)/translate_internals_resources.pak', ], 'pak_output': '<(SHARED_INTERMEDIATE_DIR)/repack/resources.pak',
diff --git a/chrome/chrome_resources.gyp b/chrome/chrome_resources.gyp index d78b04f..8b4ecc5 100644 --- a/chrome/chrome_resources.gyp +++ b/chrome/chrome_resources.gyp
@@ -62,14 +62,6 @@ 'includes': [ 'chrome_grit_action.gypi' ], }, { - # GN version: //chrome/browser/resources:signin_internals_resources - 'action_name': 'generate_signin_internals_resources', - 'variables': { - 'grit_grd_file': 'browser/resources/signin_internals_resources.grd', - }, - 'includes': ['chrome_grit_action.gypi' ], - }, - { # GN version: //chrome/browser/resources:translate_internals_resources 'action_name': 'generate_translate_internals_resources', 'variables': {
diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi index b9352dc..b8ca9f2 100644 --- a/chrome/chrome_tests_unit.gypi +++ b/chrome/chrome_tests_unit.gypi
@@ -1284,6 +1284,7 @@ 'browser/ui/cocoa/one_click_signin_bubble_controller_unittest.mm', 'browser/ui/cocoa/panels/panel_cocoa_unittest.mm', 'browser/ui/cocoa/passwords/account_chooser_view_controller_unittest.mm', + 'browser/ui/cocoa/passwords/autosignin_prompt_view_controller_unittest.mm', 'browser/ui/cocoa/passwords/base_passwords_controller_test.h', 'browser/ui/cocoa/passwords/base_passwords_controller_test.mm', 'browser/ui/cocoa/passwords/confirmation_password_saved_view_controller_unittest.mm', @@ -3006,6 +3007,19 @@ ['test_isolation_mode != "noop"', { 'targets': [ { + 'target_name': 'chrome_app_unittests_run', + 'type': 'none', + 'dependencies': [ + 'chrome_app_unittests', + ], + 'includes': [ + '../build/isolate.gypi', + ], + 'sources': [ + 'chrome_app_unittests.isolate', + ], + }, + { 'target_name': 'unit_tests_run', 'type': 'none', 'dependencies': [
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc index eb7c6bee..abeece3 100644 --- a/chrome/common/chrome_switches.cc +++ b/chrome/common/chrome_switches.cc
@@ -271,6 +271,9 @@ // Disable field trial tests configured in fieldtrial_testing_config.json. const char kDisableFieldTrialTestingConfig[] = "disable-field-trial-config"; +// Disable HTTP/2 and SPDY/3.1 protocols. +const char kDisableHttp2[] = "disable-http2"; + // Disables the Material Design version of chrome://downloads. const char kDisableMaterialDesignDownloads[] = "disable-md-downloads"; @@ -1054,10 +1057,6 @@ const char kUnsafelyTreatInsecureOriginAsSecure[] = "unsafely-treat-insecure-origin-as-secure"; -// Uses Spdy for the transport protocol instead of HTTP. This is a temporary -// testing flag. -const char kUseSpdy[] = "use-spdy"; - // A string used to override the default user agent with a custom one. const char kUserAgent[] = "user-agent";
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h index 44ea1e5..9507ae883 100644 --- a/chrome/common/chrome_switches.h +++ b/chrome/common/chrome_switches.h
@@ -78,6 +78,7 @@ extern const char kDisableExtensionsHttpThrottling[]; extern const char kDisableExtensions[]; extern const char kDisableFieldTrialTestingConfig[]; +extern const char kDisableHttp2[]; extern const char kDisableJavaScriptHarmonyShipping[]; extern const char kDisableMaterialDesignDownloads[]; extern const char kDisableMinimizeOnSecondLauncherItemClick[]; @@ -192,8 +193,6 @@ extern const char kLocalNtpReload[]; #endif extern const char kMakeDefaultBrowser[]; -extern const char kManualEnhancedBookmarks[]; -extern const char kManualEnhancedBookmarksOptout[]; extern const char kMediaCacheSize[]; extern const char kMediaRouter[]; extern const char kMessageLoopHistogrammer[]; @@ -281,7 +280,6 @@ extern const char kUnlimitedStorage[]; extern const char kUnsafelyTreatInsecureOriginAsSecure[]; extern const char kUseSimpleCacheBackend[]; -extern const char kUseSpdy[]; extern const char kUserAgent[]; extern const char kUserDataDir[]; extern const char kV8PacMojoInProcess[];
diff --git a/chrome/common/extensions/api/automation.idl b/chrome/common/extensions/api/automation.idl index 65e3adc..96b1d37 100644 --- a/chrome/common/extensions/api/automation.idl +++ b/chrome/common/extensions/api/automation.idl
@@ -20,6 +20,7 @@ blur, checkedStateChanged, childrenChanged, + clicked, documentSelectionChanged, focus, hide,
diff --git a/chrome/common/extensions/api/declarative_content.json b/chrome/common/extensions/api/declarative_content.json index bb9488d3..c84a29a 100644 --- a/chrome/common/extensions/api/declarative_content.json +++ b/chrome/common/extensions/api/declarative_content.json
@@ -37,7 +37,7 @@ // TODO: "text": { // "type": "array", // "optional": true, -// "description": "Matches if all of the regular expressions in the array match text in the page. The regular expressions use the <a href=\"http://code.google.com/p/re2/wiki/Syntax\">RE2 syntax</a>.", +// "description": "Matches if all of the regular expressions in the array match text in the page. The regular expressions use the <a href=\"https://github.com/google/re2/blob/master/doc/syntax.txt\">RE2 syntax</a>.", // "items": { "type": "string" } }, "isBookmarked": {
diff --git a/chrome/common/extensions/docs/templates/articles/themes.html b/chrome/common/extensions/docs/templates/articles/themes.html index 9c1ab653..9b80754 100644 --- a/chrome/common/extensions/docs/templates/articles/themes.html +++ b/chrome/common/extensions/docs/templates/articles/themes.html
@@ -132,14 +132,3 @@ You can alternatively use <code>-1.0</code> for any of the HSL values to specify <em>no change</em>. </p> - - -<h2 id="moredoc"> Additional documentation </h2> - -<p> -Community-written documentation to help you write themes is here: -</p> - -<blockquote> -<a href="http://code.google.com/p/chromium/wiki/ThemeCreationGuide">http://code.google.com/p/chromium/wiki/ThemeCreationGuide</a> -</blockquote>
diff --git a/chrome/common/extensions/permissions/chrome_permission_message_rules.cc b/chrome/common/extensions/permissions/chrome_permission_message_rules.cc index dffd650..63104e0 100644 --- a/chrome/common/extensions/permissions/chrome_permission_message_rules.cc +++ b/chrome/common/extensions/permissions/chrome_permission_message_rules.cc
@@ -478,6 +478,10 @@ {IDS_EXTENSION_PROMPT_WARNING_U2F_DEVICES, {APIPermission::kU2fDevices}, {}}, + // Notifications. + {IDS_EXTENSION_PROMPT_WARNING_NOTIFICATIONS, + {APIPermission::kNotifications}, + {}}, // Accessibility features. {IDS_EXTENSION_PROMPT_WARNING_ACCESSIBILITY_FEATURES_READ_MODIFY,
diff --git a/chrome/common/extensions/permissions/permission_set_unittest.cc b/chrome/common/extensions/permissions/permission_set_unittest.cc index f939f1eb..8617b5d8 100644 --- a/chrome/common/extensions/permissions/permission_set_unittest.cc +++ b/chrome/common/extensions/permissions/permission_set_unittest.cc
@@ -685,7 +685,7 @@ { "plugin3", true }, // none -> plugin #endif { "storage", false }, // none -> storage - { "notifications", false }, // none -> notifications + { "notifications", true }, // none -> notifications { "platformapp1", false }, // host permissions for platform apps { "platformapp2", true }, // API permissions for platform apps { "media_galleries1", true }, // all -> read|all @@ -758,7 +758,6 @@ skip.insert(APIPermission::kInlineInstallPrivate); skip.insert(APIPermission::kIdltest); skip.insert(APIPermission::kLogPrivate); - skip.insert(APIPermission::kNotifications); skip.insert(APIPermission::kNotificationProvider); skip.insert(APIPermission::kOverrideEscFullscreen); skip.insert(APIPermission::kPointerLock);
diff --git a/chrome/common/render_messages.cc b/chrome/common/render_messages.cc index d108f42e..efdfcc5 100644 --- a/chrome/common/render_messages.cc +++ b/chrome/common/render_messages.cc
@@ -28,4 +28,40 @@ l->append(">"); } +void ParamTraits<blink::WebCache::UsageStats>::Write( + base::Pickle* m, const blink::WebCache::UsageStats& u) { + m->WriteUInt32(base::checked_cast<int>(u.minDeadCapacity)); + m->WriteUInt32(base::checked_cast<int>(u.maxDeadCapacity)); + m->WriteUInt32(base::checked_cast<int>(u.capacity)); + m->WriteUInt32(base::checked_cast<int>(u.liveSize)); + m->WriteUInt32(base::checked_cast<int>(u.deadSize)); +} + +bool ParamTraits<blink::WebCache::UsageStats>::Read( + const base::Pickle* m, + base::PickleIterator* iter, + blink::WebCache::UsageStats* u) { + uint32_t min_capacity, max_capacity, capacity, live_size, dead_size; + if (!iter->ReadUInt32(&min_capacity) || + !iter->ReadUInt32(&max_capacity) || + !iter->ReadUInt32(&capacity) || + !iter->ReadUInt32(&live_size) || + !iter->ReadUInt32(&dead_size)) { + return false; + } + + u->minDeadCapacity = min_capacity; + u->maxDeadCapacity = max_capacity; + u->capacity = capacity; + u->liveSize = live_size; + u->deadSize = dead_size; + + return true; +} + +void ParamTraits<blink::WebCache::UsageStats>::Log( + const blink::WebCache::UsageStats& p, std::string* l) { + l->append("<blink::WebCache::UsageStats>"); +} + } // namespace IPC
diff --git a/chrome/common/render_messages.h b/chrome/common/render_messages.h index 5551665..61526f0 100644 --- a/chrome/common/render_messages.h +++ b/chrome/common/render_messages.h
@@ -56,6 +56,18 @@ static void Log(const param_type& p, std::string* l); }; +// Manual traits since this struct uses size_t and it's in Blink, so avoid +// changing Blink due to IPC differences. +template <> +struct ParamTraits<blink::WebCache::UsageStats> { + typedef blink::WebCache::UsageStats param_type; + static void Write(base::Pickle* m, const param_type& u); + static bool Read(const base::Pickle* m, + base::PickleIterator* iter, + param_type* u); + static void Log(const param_type& p, std::string* l); +}; + } // namespace IPC #endif // CHROME_COMMON_RENDER_MESSAGES_H_ @@ -162,14 +174,6 @@ IPC_STRUCT_TRAITS_MEMBER(logo_alternate) IPC_STRUCT_TRAITS_END() -IPC_STRUCT_TRAITS_BEGIN(blink::WebCache::UsageStats) - IPC_STRUCT_TRAITS_MEMBER(minDeadCapacity) - IPC_STRUCT_TRAITS_MEMBER(maxDeadCapacity) - IPC_STRUCT_TRAITS_MEMBER(capacity) - IPC_STRUCT_TRAITS_MEMBER(liveSize) - IPC_STRUCT_TRAITS_MEMBER(deadSize) -IPC_STRUCT_TRAITS_END() - IPC_ENUM_TRAITS_MAX_VALUE(NTPLoggingEventType, NTP_EVENT_TYPE_LAST)
diff --git a/chrome/common/spellcheck_marker.h b/chrome/common/spellcheck_marker.h index cb2de3f7..4305c22 100644 --- a/chrome/common/spellcheck_marker.h +++ b/chrome/common/spellcheck_marker.h
@@ -23,12 +23,13 @@ }; // IPC requires a default constructor. - SpellCheckMarker() : hash(0xFFFFFFFF), offset(static_cast<size_t>(-1)) {} + SpellCheckMarker() : hash(0xFFFFFFFF), offset(UINT32_MAX) {} - SpellCheckMarker(uint32_t hash, size_t offset) : hash(hash), offset(offset) {} + SpellCheckMarker(uint32_t hash, uint32_t offset) + : hash(hash), offset(offset) {} uint32_t hash; - size_t offset; + uint32_t offset; }; #endif // CHROME_COMMON_SPELLCHECK_MARKER_H_
diff --git a/chrome/renderer/autofill/form_autofill_browsertest.cc b/chrome/renderer/autofill/form_autofill_browsertest.cc index f7b50f1..90238e6 100644 --- a/chrome/renderer/autofill/form_autofill_browsertest.cc +++ b/chrome/renderer/autofill/form_autofill_browsertest.cc
@@ -2750,7 +2750,8 @@ // Data that looks like an unowned form should NOT be matched unless an // additional indicator is present, such as title tag or url, to prevent false -// positives. +// positives. The fields that have an autocomplete attribute should match since +// there is no chance of making a prediction error. TEST_F(FormAutofillTest, UnmatchedFormNoURL) { TestUnmatchedUnownedForm(kUnownedUntitledFormHtml, nullptr); @@ -4437,24 +4438,26 @@ TEST_F(FormAutofillTest, FormCache_ExtractNewForms) { struct { const char* html; - const size_t expected_forms; + const bool has_extracted_form; + const bool is_form_tag; + const bool is_formless_checkout; } test_cases[] = { // An empty form should not be extracted {"<FORM name='TestForm' action='http://buh.com' method='post'>" "</FORM>", - 0}, + false, true, false}, // A form with less than three fields with no autocomplete type(s) should // not be extracted. {"<FORM name='TestForm' action='http://buh.com' method='post'>" " <INPUT type='name' id='firstname'/>" "</FORM>", - 0}, + false, true, false}, // A form with less than three fields with at least one autocomplete type // should be extracted. {"<FORM name='TestForm' action='http://buh.com' method='post'>" " <INPUT type='name' id='firstname' autocomplete='given-name'/>" "</FORM>", - 1}, + true, true, false}, // A form with three or more fields should be extracted. {"<FORM name='TestForm' action='http://buh.com' method='post'>" " <INPUT type='text' id='firstname'/>" @@ -4462,7 +4465,18 @@ " <INPUT type='text' id='email'/>" " <INPUT type='submit' value='Send'/>" "</FORM>", - 1}, + true, true, false}, + // An input field with an autocomplete attribute outside of a form should + // be extracted. The is_formless_checkout attribute should + // then be true. + {"<INPUT type='text' id='firstname' autocomplete='given-name'/>" + "<INPUT type='submit' value='Send'/>", + true, false, false}, + // An input field without an autocomplete attribute outside of a form + // should not be extracted. + {"<INPUT type='text' id='firstname'/>" + "<INPUT type='submit' value='Send'/>", + false, false, false}, }; for (auto test_case : test_cases) { @@ -4473,7 +4487,12 @@ FormCache form_cache(*web_frame); std::vector<FormData> forms = form_cache.ExtractNewForms(); - EXPECT_EQ(test_case.expected_forms, forms.size()); + EXPECT_EQ(test_case.has_extracted_form, forms.size() == 1); + + if (test_case.has_extracted_form) { + EXPECT_EQ(test_case.is_form_tag, forms[0].is_form_tag); + EXPECT_EQ(test_case.is_formless_checkout, forms[0].is_formless_checkout); + } } }
diff --git a/chrome/renderer/autofill/password_generation_agent_browsertest.cc b/chrome/renderer/autofill/password_generation_agent_browsertest.cc index 7c08393..34c9bd6e 100644 --- a/chrome/renderer/autofill/password_generation_agent_browsertest.cc +++ b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
@@ -71,6 +71,12 @@ render_thread_->sink().ClearMessages(); } + void ShowGenerationPopUpManually(const char* element_id) { + FocusField(element_id); + AutofillMsg_GeneratePassword msg(0); + password_generation_->OnMessageReceived(msg); + } + private: DISALLOW_COPY_AND_ASSIGN(PasswordGenerationAgentTest); }; @@ -569,4 +575,11 @@ ExpectGenerationAvailable("newpassword", true); } +TEST_F(PasswordGenerationAgentTest, ManualGenerationTest) { + LoadHTMLWithUserGesture(kAccountCreationFormHTML); + ShowGenerationPopUpManually("first_password"); + ExpectGenerationAvailable("first_password", true); + ExpectGenerationAvailable("second_password", false); +} + } // namespace autofill
diff --git a/chrome/renderer/chrome_render_frame_observer.cc b/chrome/renderer/chrome_render_frame_observer.cc index 9fd1989..9085354 100644 --- a/chrome/renderer/chrome_render_frame_observer.cc +++ b/chrome/renderer/chrome_render_frame_observer.cc
@@ -32,6 +32,7 @@ #include "third_party/WebKit/public/web/WebDataSource.h" #include "third_party/WebKit/public/web/WebDocument.h" #include "third_party/WebKit/public/web/WebElement.h" +#include "third_party/WebKit/public/web/WebFrameContentDumper.h" #include "third_party/WebKit/public/web/WebLocalFrame.h" #include "third_party/WebKit/public/web/WebNode.h" #include "third_party/WebKit/public/web/WebSecurityPolicy.h" @@ -47,6 +48,7 @@ using blink::WebDataSource; using blink::WebElement; +using blink::WebFrameContentDumper; using blink::WebLocalFrame; using blink::WebNode; using blink::WebString; @@ -354,7 +356,10 @@ // Retrieve the frame's full text (up to kMaxIndexChars), and pass it to the // translate helper for language detection and possible translation. - base::string16 contents = frame->contentAsText(kMaxIndexChars); + // TODO(dglazkov): WebFrameContentDumper should only be used for + // testing purposes. See http://crbug.com/585164. + base::string16 contents = + WebFrameContentDumper::dumpFrameTreeAsText(frame, kMaxIndexChars); UMA_HISTOGRAM_TIMES(kTranslateCaptureText, base::TimeTicks::Now() - capture_begin_time);
diff --git a/chrome/renderer/extensions/extension_localization_peer.cc b/chrome/renderer/extensions/extension_localization_peer.cc index cafbf58..779fcba6e 100644 --- a/chrome/renderer/extensions/extension_localization_peer.cc +++ b/chrome/renderer/extensions/extension_localization_peer.cc
@@ -95,34 +95,21 @@ // Give sub-classes a chance at altering the data. if (error_code != net::OK) { // We failed to load the resource. - original_peer_->OnReceivedCompletedResponse( - response_info_, nullptr, net::ERR_ABORTED, false, stale_copy_in_cache, - security_info, completion_time, total_transfer_size); + original_peer_->OnReceivedResponse(response_info_); + original_peer_->OnCompletedRequest(net::ERR_ABORTED, false, + stale_copy_in_cache, security_info, + completion_time, total_transfer_size); return; } ReplaceMessages(); - scoped_ptr<StringData> data_to_pass(data_.empty() ? nullptr - : new StringData(data_)); - original_peer_->OnReceivedCompletedResponse( - response_info_, std::move(data_to_pass), error_code, - was_ignored_by_handler, stale_copy_in_cache, security_info, - completion_time, total_transfer_size); -} - -void ExtensionLocalizationPeer::OnReceivedCompletedResponse( - const content::ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) { - original_peer_->OnReceivedCompletedResponse( - info, std::move(data), error_code, was_ignored_by_handler, - stale_copy_in_cache, security_info, completion_time, total_transfer_size); + original_peer_->OnReceivedResponse(response_info_); + if (!data_.empty()) + original_peer_->OnReceivedData(make_scoped_ptr(new StringData(data_))); + original_peer_->OnCompletedRequest(error_code, was_ignored_by_handler, + stale_copy_in_cache, security_info, + completion_time, total_transfer_size); } void ExtensionLocalizationPeer::ReplaceMessages() {
diff --git a/chrome/renderer/extensions/extension_localization_peer.h b/chrome/renderer/extensions/extension_localization_peer.h index e45413e..5ac7f7e 100644 --- a/chrome/renderer/extensions/extension_localization_peer.h +++ b/chrome/renderer/extensions/extension_localization_peer.h
@@ -47,14 +47,6 @@ const std::string& security_info, const base::TimeTicks& completion_time, int64_t total_transfer_size) override; - void OnReceivedCompletedResponse(const content::ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) override; private: friend class ExtensionLocalizationPeerTest;
diff --git a/chrome/renderer/extensions/extension_localization_peer_unittest.cc b/chrome/renderer/extensions/extension_localization_peer_unittest.cc index 67b11048..f0587a0 100644 --- a/chrome/renderer/extensions/extension_localization_peer_unittest.cc +++ b/chrome/renderer/extensions/extension_localization_peer_unittest.cc
@@ -83,37 +83,6 @@ const std::string& security_info, const base::TimeTicks& completion_time, int64_t total_transfer_size)); - void OnReceivedCompletedResponse(const content::ResourceResponseInfo& info, - scoped_ptr<RequestPeer::ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) override { - if (data) { - OnReceivedCompletedResponseInternal( - info, data->payload(), data->length(), data->encoded_length(), - error_code, was_ignored_by_handler, stale_copy_in_cache, - security_info, completion_time, total_transfer_size); - } else { - OnReceivedCompletedResponseInternal(info, nullptr, 0, 0, error_code, - was_ignored_by_handler, - stale_copy_in_cache, security_info, - completion_time, total_transfer_size); - } - } - MOCK_METHOD10(OnReceivedCompletedResponseInternal, - void(const content::ResourceResponseInfo& info, - const char* data, - int data_length, - int encoded_data_length, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size)); private: DISALLOW_COPY_AND_ASSIGN(MockRequestPeer); @@ -181,9 +150,10 @@ TEST_F(ExtensionLocalizationPeerTest, OnCompletedRequestBadURLRequestStatus) { SetUpExtensionLocalizationPeer("text/css", GURL(kExtensionUrl_1)); - EXPECT_CALL(*original_peer_, OnReceivedCompletedResponseInternal( - _, nullptr, 0, 0, net::ERR_ABORTED, false, - false, "", base::TimeTicks(), -1)); + EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); + EXPECT_CALL(*original_peer_, + OnCompletedRequest(net::ERR_ABORTED, false, false, "", + base::TimeTicks(), -1)); filter_peer_->OnCompletedRequest(net::ERR_FAILED, false, false, std::string(), base::TimeTicks(), -1); @@ -195,9 +165,9 @@ EXPECT_CALL(*original_peer_, OnReceivedDataInternal(_, _, _)).Times(0); EXPECT_CALL(*sender_, Send(_)).Times(0); - EXPECT_CALL(*original_peer_, OnReceivedCompletedResponseInternal( - _, nullptr, 0, 0, net::OK, false, false, "", - base::TimeTicks(), -1)); + EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); + EXPECT_CALL(*original_peer_, OnCompletedRequest(net::OK, false, false, "", + base::TimeTicks(), -1)); filter_peer_->OnCompletedRequest(net::OK, false, false, std::string(), base::TimeTicks(), -1); @@ -211,10 +181,12 @@ EXPECT_CALL(*sender_, Send(_)); std::string data = GetData(); + EXPECT_CALL(*original_peer_, OnReceivedResponse(_)).Times(1); EXPECT_CALL(*original_peer_, - OnReceivedCompletedResponseInternal( - _, StrEq(data.c_str()), data.size(), -1, net::OK, false, - false, "", base::TimeTicks(), -1)) + OnReceivedDataInternal(StrEq(data.c_str()), data.length(), -1)) + .Times(1); + EXPECT_CALL(*original_peer_, OnCompletedRequest(net::OK, false, false, "", + base::TimeTicks(), -1)) .Times(1); filter_peer_->OnCompletedRequest(net::OK, false, false, std::string(), @@ -223,10 +195,12 @@ // Test if Send gets called again (it shouldn't be) when first call returned // an empty dictionary. SetUpExtensionLocalizationPeer("text/css", GURL(kExtensionUrl_1)); + EXPECT_CALL(*original_peer_, OnReceivedResponse(_)).Times(1); EXPECT_CALL(*original_peer_, - OnReceivedCompletedResponseInternal( - _, StrEq(data.c_str()), data.size(), -1, net::OK, false, - false, "", base::TimeTicks(), -1)) + OnReceivedDataInternal(StrEq(data.c_str()), data.length(), -1)) + .Times(1); + EXPECT_CALL(*original_peer_, OnCompletedRequest(net::OK, false, false, "", + base::TimeTicks(), -1)) .Times(1); SetData("some text"); filter_peer_->OnCompletedRequest(net::OK, false, false, std::string(), @@ -249,10 +223,12 @@ // __MSG_text__ gets replaced with "new text". std::string data("some new text"); + EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); EXPECT_CALL(*original_peer_, - OnReceivedCompletedResponseInternal( - _, StrEq(data.c_str()), data.size(), -1, net::OK, false, - false, std::string(), base::TimeTicks(), -1)); + OnReceivedDataInternal(StrEq(data.c_str()), data.length(), -1)); + + EXPECT_CALL(*original_peer_, OnCompletedRequest(net::OK, false, false, "", + base::TimeTicks(), -1)); filter_peer_->OnCompletedRequest(net::OK, false, false, std::string(), base::TimeTicks(), -1); @@ -273,10 +249,13 @@ // We already have messages in memory, Send will be skipped. EXPECT_CALL(*sender_, Send(_)).Times(0); - EXPECT_CALL(*original_peer_, - OnReceivedCompletedResponseInternal( - _, StrEq(message.c_str()), message.size(), -1, net::OK, false, - false, "", base::TimeTicks(), -1)); + // __MSG_missing_message__ is missing, so message stays the same. + EXPECT_CALL(*original_peer_, OnReceivedResponse(_)); + EXPECT_CALL(*original_peer_, OnReceivedDataInternal(StrEq(message.c_str()), + message.length(), -1)); + + EXPECT_CALL(*original_peer_, OnCompletedRequest(net::OK, false, false, "", + base::TimeTicks(), -1)); filter_peer_->OnCompletedRequest(net::OK, false, false, std::string(), base::TimeTicks(), -1);
diff --git a/chrome/renderer/security_filter_peer.cc b/chrome/renderer/security_filter_peer.cc index 8a5b3d8..a161dcb 100644 --- a/chrome/renderer/security_filter_peer.cc +++ b/chrome/renderer/security_filter_peer.cc
@@ -137,33 +137,21 @@ // Give sub-classes a chance at altering the data. if (error_code != net::OK || !DataReady()) { // Pretend we failed to load the resource. - original_peer_->OnReceivedCompletedResponse( - response_info_, nullptr, net::ERR_ABORTED, false, stale_copy_in_cache, - security_info, completion_time, total_transfer_size); + original_peer_->OnReceivedResponse(response_info_); + original_peer_->OnCompletedRequest(net::ERR_ABORTED, false, + stale_copy_in_cache, security_info, + completion_time, total_transfer_size); return; } - scoped_ptr<content::FixedReceivedData> data_to_pass( - data_.empty() ? nullptr : new content::FixedReceivedData( - data_.data(), data_.size(), -1)); - original_peer_->OnReceivedCompletedResponse( - response_info_, std::move(data_to_pass), error_code, - was_ignored_by_handler, stale_copy_in_cache, security_info, - completion_time, total_transfer_size); -} - -void BufferedPeer::OnReceivedCompletedResponse( - const content::ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) { - original_peer_->OnReceivedCompletedResponse( - info, std::move(data), error_code, was_ignored_by_handler, - stale_copy_in_cache, security_info, completion_time, total_transfer_size); + original_peer_->OnReceivedResponse(response_info_); + if (!data_.empty()) { + original_peer_->OnReceivedData(make_scoped_ptr( + new content::FixedReceivedData(data_.data(), data_.size(), -1))); + } + original_peer_->OnCompletedRequest(error_code, was_ignored_by_handler, + stale_copy_in_cache, security_info, + completion_time, total_transfer_size); } //////////////////////////////////////////////////////////////////////////////// @@ -197,25 +185,12 @@ ProcessResponseInfo(info, &info, mime_type_); info.security_info = security_info; info.content_length = static_cast<int>(data_.size()); - - scoped_ptr<content::FixedReceivedData> data_to_pass( - data_.empty() ? nullptr : new content::FixedReceivedData( - data_.data(), data_.size(), -1)); - original_peer_->OnReceivedCompletedResponse( - response_info_, std::move(data_to_pass), net::OK, false, - stale_copy_in_cache, security_info, completion_time, total_transfer_size); -} - -void ReplaceContentPeer::OnReceivedCompletedResponse( - const content::ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) { - original_peer_->OnReceivedCompletedResponse( - info, std::move(data), error_code, was_ignored_by_handler, - stale_copy_in_cache, security_info, completion_time, total_transfer_size); + original_peer_->OnReceivedResponse(info); + if (!data_.empty()) { + original_peer_->OnReceivedData(make_scoped_ptr( + new content::FixedReceivedData(data_.data(), data_.size(), -1))); + } + original_peer_->OnCompletedRequest(net::OK, false, stale_copy_in_cache, + security_info, completion_time, + total_transfer_size); }
diff --git a/chrome/renderer/security_filter_peer.h b/chrome/renderer/security_filter_peer.h index e566b94..5eaacaf9 100644 --- a/chrome/renderer/security_filter_peer.h +++ b/chrome/renderer/security_filter_peer.h
@@ -39,6 +39,7 @@ bool OnReceivedRedirect(const net::RedirectInfo& redirect_info, const content::ResourceResponseInfo& info) override; void OnDownloadedData(int len, int encoded_data_length) override {} + protected: explicit SecurityFilterPeer(scoped_ptr<content::RequestPeer> peer); @@ -65,14 +66,6 @@ const std::string& security_info, const base::TimeTicks& completion_time, int64_t total_transfer_size) override; - void OnReceivedCompletedResponse(const content::ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) override; protected: // Invoked when the entire request has been processed before the data is sent @@ -112,14 +105,6 @@ const std::string& security_info, const base::TimeTicks& completion_time, int64_t total_transfer_size) override; - void OnReceivedCompletedResponse(const content::ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) override; private: content::ResourceResponseInfo response_info_;
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index c89c679..ae1e09d5f 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -2089,7 +2089,7 @@ } } -if (is_win || (is_linux && !is_chromeos)) { +if (is_win || is_mac || (is_linux && !is_chromeos)) { # TODO(GYP): Figure out which of these work and are needed on other # platforms. test("chrome_app_unittests") { @@ -2122,7 +2122,9 @@ deps += [ "//third_party/cld_2:cld2_platform_impl" ] } } +} +if (is_win || (is_linux && !is_chromeos)) { test("performance_browser_tests") { sources = rebase_path(chrome_tests_gypi_values.performance_browser_tests_sources,
diff --git a/chrome/test/base/web_ui_browser_test_browsertest.cc b/chrome/test/base/web_ui_browser_test_browsertest.cc index 1e13265..165b4d03 100644 --- a/chrome/test/base/web_ui_browser_test_browsertest.cc +++ b/chrome/test/base/web_ui_browser_test_browsertest.cc
@@ -21,7 +21,7 @@ using content::WebUIMessageHandler; // According to the interface for EXPECT_FATAL_FAILURE -// (http://code.google.com/p/googletest/wiki/AdvancedGuide#Catching_Failures) +// (https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md#catching-failures) // the statement must be statically available. Therefore, we make a static // global s_test_ which should point to |this| for the duration of the test run // and be cleared afterward.
diff --git a/chrome/test/chromedriver/test/unittest_util.py b/chrome/test/chromedriver/test/unittest_util.py index 7c07312..52363c2 100644 --- a/chrome/test/chromedriver/test/unittest_util.py +++ b/chrome/test/chromedriver/test/unittest_util.py
@@ -94,7 +94,7 @@ def FilterTestSuite(suite, gtest_filter): """Returns a new filtered tests suite based on the given gtest filter. - See http://code.google.com/p/googletest/wiki/AdvancedGuide + See https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md for gtest_filter specification. """ return unittest.TestSuite(FilterTests(GetTestsFromSuite(suite), gtest_filter)) @@ -103,7 +103,7 @@ def FilterTests(all_tests, gtest_filter): """Returns a filtered list of tests based on the given gtest filter. - See http://code.google.com/p/googletest/wiki/AdvancedGuide + See https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md for gtest_filter specification. """ pattern_groups = gtest_filter.split('-')
diff --git a/chrome/test/data/autofill/heuristics/input/21_checkout_address2lines.html b/chrome/test/data/autofill/heuristics/input/21_checkout_address2lines.html new file mode 100644 index 0000000..cccc6a1 --- /dev/null +++ b/chrome/test/data/autofill/heuristics/input/21_checkout_address2lines.html
@@ -0,0 +1,22 @@ +<h3>Profile Autofill</h3> +<form name="addr1.1" id="form1" action="https://example.com" method="post"> + Name: <input type="text" name="name"><br> + Line 1: <input type="text" name="addressLineOne"><br> + Line 2: <input type="text" name="addressLineTwo"><br> + City: <input type="text" name="city"><br> + State: <select name="state" + <option value="CA">CA</option> + <option value="MA">MA</option> + <option value="NY">NY</option> + <option value="MD">MD</option> + <option value="OR">OR</option> + <option value="OH">OH</option> + <option value="IL">IL</option> + <option value="DC">DC</option> + <option value="QC">QC</option> + </select> <br> + Zip: <input name="zip" id="form_zip"> <br> + Email: <input name="email" id="form_email"> <br> + <input type="reset" value="Reset"> + <input type="submit" value="Submit"> +</form>
diff --git a/chrome/test/data/autofill/heuristics/input/21_checkout_costco.com.html b/chrome/test/data/autofill/heuristics/input/21_checkout_costco.com.html new file mode 100644 index 0000000..e3bdaeb9 --- /dev/null +++ b/chrome/test/data/autofill/heuristics/input/21_checkout_costco.com.html
@@ -0,0 +1,137 @@ +<form id="AddressFormInline-Form" name="AddressFormInline-Form" autocomplete="on" method="post"> + <div class="addressFormInline-wrap"> + <input type="hidden" name="addressType" value="S"> + + <p style="margin-bottom: 6px;" id="addressFormInlineRequired" tabindex="-1"><span class="asterisk">*</span> Required fields</p> + + <div id="personName" style="overflow: auto;"> + <div style="float: left; margin-right: 13px; width: 150px"> + <label for="addressFormInlineFirstName">FIRST NAME<span class="asterisk">*</span></label> + <div style="margin-top: 6px;"> + <input id="addressFormInlineFirstName" name="addressFormInlineFirstName" type="text" maxlength="40" style="width: 140px;"> + </div> + </div> + <div style="float: left; margin-right: 15px"> + <label for="addressFormInlineMiddleInitial">M.I.</label> + <div style="margin-top: 6px;"> + <input id="addressFormInlineMiddleInitial" name="addressFormInlineMiddleInitial"type="text" class="miField" maxlength="1" style="width: 26px;"> + </div> + </div> + <div style="float: left; width: 150px"> + <label for="addressFormInlineLastName">LAST NAME<span class="asterisk">*</span></label> + <div style="margin-top: 6px;"> + <input id="addressFormInlineLastName" name="addressFormInlineLastName" type="text" maxlength="40" style="width: 150px;"> + </div> + </div> + </div> + + <div id="city" style="margin-top: 15px;"> + <label for="addressFormInlineCompany">COMPANY NAME</label> + <div style="margin-top: 6px;"> + <input id="addressFormInlineCompany" name="addressFormInlineCompany" type="text" maxlength="40" style="width: 265px"> + </div> + </div> + + <div style="display: inline-block; margin-top: 15px;"> + <label for="addressFormInlineCountry">COUNTRY<span class="asterisk">*</span></label> + <div style="margin-top: 6px;"> + <select id="addressFormInlineCountry" class="country_select" name="addressFormInlineCountry" style="width: 277px;"><option value="US">United States</option></select> + </div> + </div> + + <div id="streetAddress" style="margin-top: 15px;"> + <legend><label for="addressFormInlineAddressLine1">STREET ADDRESS<span class="asterisk">*</span></label></legend> + <div style="margin: 6px 0 6px"> + <input id="addressFormInlineAddressLine1" name="addressFormInlineAddressLine1" placeholder="Address Line 1" type="text" maxlength="30" style="width: 265px;"> + </div> + <input id="addressFormInlineAddressLine2" name="addressFormInlineAddressLine2" placeholder="Address Line 2" type="text" maxlength="30" style="width: 265px;"> + </div> + + <div id="city" style="margin-top: 15px;"> + <label for="addressFormInlineCity">CITY<span class="asterisk">*</span></label> + <div style="margin-top: 6px;"> + <input id="addressFormInlineCity" name="addressFormInlineCity" type="text" maxlength="40" style="width: 265px"> + </div> + </div> + + <div id="state" style="overflow: auto; margin-top: 15px;"> + <div style="float: left; margin-right: 15px;"> + <label for="addressFormInlineState">STATE / PROVINCE<span class="asterisk">*</span></label> + <div style="margin-top: 6px; width: 150px;"> + <select addresstype="S" id="addressFormInlineState" name="addressFormInlineState" class="state_select"><option value="NO_STATE_TYPE_SELECTED" selected="selected" class="form-dropDownSelectionForceBlack">* Select</option><option value="Aa" class="form-dropDownSelectionForceBlack">AA - Armed Forces America</option><option value="Ae" class="form-dropDownSelectionForceBlack">AE - Armed Forces Europe</option><option value="AL" class="form-dropDownSelectionForceBlack">Alabama</option><option value="AK" class="form-dropDownSelectionForceBlack">Alaska</option><option value="Ap" class="form-dropDownSelectionForceBlack">AP - Armed Forces Pacific</option><option value="AZ" class="form-dropDownSelectionForceBlack">Arizona</option><option value="AR" class="form-dropDownSelectionForceBlack">Arkansas</option><option value="CA" class="form-dropDownSelectionForceBlack">California</option><option value="CO" class="form-dropDownSelectionForceBlack">Colorado</option><option value="CT" class="form-dropDownSelectionForceBlack">Connecticut</option><option value="DE" class="form-dropDownSelectionForceBlack">Delaware</option><option value="DC" class="form-dropDownSelectionForceBlack">District of Columbia</option><option value="FL" class="form-dropDownSelectionForceBlack">Florida</option><option value="GA" class="form-dropDownSelectionForceBlack">Georgia</option><option value="HI" class="form-dropDownSelectionForceBlack">Hawaii</option><option value="ID" class="form-dropDownSelectionForceBlack">Idaho</option><option value="IL" class="form-dropDownSelectionForceBlack">Illinois</option><option value="IN" class="form-dropDownSelectionForceBlack">Indiana</option><option value="IA" class="form-dropDownSelectionForceBlack">Iowa</option><option value="KS" class="form-dropDownSelectionForceBlack">Kansas</option><option value="KY" class="form-dropDownSelectionForceBlack">Kentucky</option><option value="LA" class="form-dropDownSelectionForceBlack">Louisiana</option><option value="ME" class="form-dropDownSelectionForceBlack">Maine</option><option value="MD" class="form-dropDownSelectionForceBlack">Maryland</option><option value="MA" class="form-dropDownSelectionForceBlack">Massachusetts</option><option value="MI" class="form-dropDownSelectionForceBlack">Michigan</option><option value="MN" class="form-dropDownSelectionForceBlack">Minnesota</option><option value="MS" class="form-dropDownSelectionForceBlack">Mississippi</option><option value="MO" class="form-dropDownSelectionForceBlack">Missouri</option><option value="MT" class="form-dropDownSelectionForceBlack">Montana</option><option value="NE" class="form-dropDownSelectionForceBlack">Nebraska</option><option value="NV" class="form-dropDownSelectionForceBlack">Nevada</option><option value="NH" class="form-dropDownSelectionForceBlack">New Hampshire</option><option value="NJ" class="form-dropDownSelectionForceBlack">New Jersey</option><option value="NM" class="form-dropDownSelectionForceBlack">New Mexico</option><option value="NY" class="form-dropDownSelectionForceBlack">New York</option><option value="NC" class="form-dropDownSelectionForceBlack">North Carolina</option><option value="ND" class="form-dropDownSelectionForceBlack">North Dakota</option><option value="OH" class="form-dropDownSelectionForceBlack">Ohio</option><option value="OK" class="form-dropDownSelectionForceBlack">Oklahoma</option><option value="OR" class="form-dropDownSelectionForceBlack">Oregon</option><option value="PA" class="form-dropDownSelectionForceBlack">Pennsylvania</option><option value="PR" class="form-dropDownSelectionForceBlack">Puerto Rico</option><option value="RI" class="form-dropDownSelectionForceBlack">Rhode Island</option><option value="SC" class="form-dropDownSelectionForceBlack">South Carolina</option><option value="SD" class="form-dropDownSelectionForceBlack">South Dakota</option><option value="TN" class="form-dropDownSelectionForceBlack">Tennessee</option><option value="TX" class="form-dropDownSelectionForceBlack">Texas</option><option value="UT" class="form-dropDownSelectionForceBlack">Utah</option><option value="VT" class="form-dropDownSelectionForceBlack">Vermont</option><option value="VA" class="form-dropDownSelectionForceBlack">Virginia</option><option value="WA" class="form-dropDownSelectionForceBlack">Washington</option><option value="WV" class="form-dropDownSelectionForceBlack">West Virginia</option><option value="WI" class="form-dropDownSelectionForceBlack">Wisconsin</option><option value="WY" class="form-dropDownSelectionForceBlack">Wyoming</option></select> + </div> + </div> + <div style="float: left;"> + <label for="addressFormInlineZip">ZIP / POSTAL CODE<span class="asterisk">*</span></label> + <div style="margin-top: 6px; width: 140px"> + <input id="addressFormInlineZip" name="addressFormInlineZip" class="zipField" type="text" maxlength="10" style="width: 100px"> + </div> + </div> + </div> + + <div id="phoneNumber" style="margin-top: 15px;"> + <label for="addressFormInlinePhoneNumber">PHONE NUMBER<span class="asterisk">*</span></label> + <div style="margin-top: 6px;"> + <input id="addressFormInlinePhoneNumber" name="addressFormInlinePhoneNumber" type="text" maxlength="32" style="width: 200px;"> + </div> + </div> + + <div id="email" style="margin-top: 15px;"> + <label for="addressFormInlineEmail" id="addressFormInlineEmailLabel">EMAIL</label> + <div style="margin-top: 6px;"> + <input id="addressFormInlineEmail" name="addressFormInlineEmail" type="text" maxlength="40" style="width: 200px;"> + </div> + </div> + + <div id="addressNickname" style="margin-top: 15px;"> + <label for="addressFormInlineAddressNickName">ADDRESS NICKNAME<span class="asterisk">*</span><span class="has-tooltip html-tooltip nickname-tooltip"> <span class="tooltip">?</span></span><span class="tooltip">The Address Nickname is a short name you create to help you easily identify this address within your address book.</span></label> + <div style="margin-top: 6px;"> + <input id="addressFormInlineAddressNickName" name="addressFormInlineAddressNickName" type="text" maxlength="35" placeholder="Holly at school, Mom, etc." style="width: 265px;"> + </div> + </div> + + <div style="margin-top: 25px;"> + <input name="saveAddressCheckboxInline" id="saveAddressCheckboxInline" type="checkbox" onclick="javascript:AddressForm.enableSetDefaultInline()" checked="checked"> + <label for="saveAddressCheckboxInline">Add to address book. </label> + </div> + + <div style="margin-top: 6px;"> + <input name="setDefaultCheckboxInline" id="setDefaultCheckboxInline" type="checkbox"> + <label for="setDefaultCheckboxInline" id="setDefaultCheckboxInlineLabel">Save as default shipping address in Address Book</label> + </div> + + <div id="defaultAddressChangeInline" style="display:none; padding-top:10px !important"> + <!-- BEGIN ContentAreaESpot.jsp --> + + + + +<div class="genericESpot" id="WC_ContentAreaESpot_div_1_rx-DefaultAddrConfirm"> + <div class="caption" style="display:none" id="WC_ContentAreaESpot_div_2_rx-DefaultAddrConfirm">[rx-DefaultAddrConfirm]</div> + + <div class="featureAllItems"> + <ul class="featureItemsTable"> + + + <li value="1"> + <!-- Stores\WebContent\CostcoGLOBALSAS\Snippets\Marketing\ESpot\RenderESpotContent.jspf -->You are changing your Costco Default Shipping Address. All future orders from Costco.com, including Pharmacy Prescription Orders, will be sent to this Address. + </li> + + + </ul> + </div> + +</div> + +<!-- END ContentAreaESpot.jsp --> + </div> + + <div id="button-container" style="margin-top: 25px; height: 51px;"> + <div style="text-align: left; /* margin: 13px 16px */"> + <div style="display: inline-block;"> + <button id="addressFormInlineButton" type="button" class="submit costco-button" style="display: inline" onclick="javascript:AddressForm.interfaces.add(false,submitNewSingleShipping)"><span class="s1"><span class="s2">Ship to this Address</span></span></button> + </div> + </div> + </div> + </div> + </form>
diff --git a/chrome/test/data/autofill/heuristics/input/29_cc_checkout_walgreens.com.html b/chrome/test/data/autofill/heuristics/input/29_cc_checkout_walgreens.com.html new file mode 100644 index 0000000..083ebde --- /dev/null +++ b/chrome/test/data/autofill/heuristics/input/29_cc_checkout_walgreens.com.html
@@ -0,0 +1,913 @@ +<html lang="en" xmlns:wag=""><head><style type="text/css">@charset "UTF-8";[ng\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\:form{display:block;}</style> +<title>Checkout | Payment Method | Walgreens</title> +<meta charset="utf-8"> +<meta name="viewport" content="width=device-width, minimum-scale=1"> +<meta http-equiv="X-UA-Compatible" content="IE=10;IE=9;IE=8;IE=Edge,chrome=1"> +<meta name="format-detection" content="telephone=no"><meta name="description" content=""> +<meta name="keywords" content=""> +<link rel="dns-prefetch" href="https://d.monetate.net"><link rel="dns-prefetch" href="https://sb.monetate.net"><script type="text/javascript" src="https://se.monetate.net/js/3/a-ca4ba9c7/p/walgreens.com/t1443036406/98788f64137a3488/custom.js" charset="utf-8" async=""></script><script type="text/javascript"> +var IsNativeApp = 'false'; +var baseURL = "https://www.walgreens.com:443"; +var currentPaymentMethod = ""; +var formError; +var paymentMethodError = ""; +</script> +<script type="text/javascript" src="https://www.wag-static.com/share/jslib/jquery/jquery.min-bb297ca4879b9531d4c5c281d8e06074.js"></script> + <script> +if(window.dtmObject===undefined) +window.dtmObject={}; +if(window.dtmObject.BAS===undefined) +window.dtmObject.BAS={}; +if(window.dtmObject.BAS.Common===undefined) +window.dtmObject.BAS.Common={}; +window.dtmObject.BAS.Common.ImageCollection=""; +</script> + +<script src="https://assets.adobedtm.com/7deb8111c940df73792ccb9937476cc412e87575/satelliteLib-24aa610962c8396e11fe6027b69f92e457d9e4fd.js" type="text/javascript"></script><!-- Begin Monetate ExpressTag Sync v8. Place at start of document head. DO NOT ALTER. --> + <script type="text/javascript"> + //if (window.location.hostname !== "www.walgreens.com") { + var monetateT = new Date().getTime(); + (function() { + var p = document.location.protocol; + if (p == "http:" || p == "https:") { + var m = document.createElement("script"); m.type = "text/javascript"; m.src = (p == "https:" ? "https://s" : "http://") + "e.monetate.net/js/2/a-ca4ba9c7/p/walgreens.com/entry.js"; + var e = document.createElement("div"); e.appendChild(m); document.write(e.innerHTML); + } + })(); + //} + </script><script type="text/javascript" src="https://se.monetate.net/js/2/a-ca4ba9c7/p/walgreens.com/entry.js"></script> + <!-- End Monetate tag. --> +<!--Delay Monetate native tracking till onload fires element tracking with footer --> +<script> +window.monetateQ = window.monetateQ || []; + window.monetateQ.push(["addPollForElement", + "#footerReceiveSpecialOffersForm,.wag-footer-copyrightsdetails"]); +</script> +<!--Delay Ends--><script type="text/javascript"> + /*if(window.dtmObject!=undefined && + window.dtmObject.BAS!=undefined && + window.dtmObject.BAS.ThirdPartyTags!=undefined && + window.dtmObject.BAS.ThirdPartyTags.EstaraRules!=undefined + ) + { + if(window.dtmObject.BAS.ThirdPartyTags.ForeseeTags.isEnabled) + {*/ + + + function addEvent(element, eventName, fn) { + if (element.addEventListener) + element.addEventListener(eventName, fn, false); + else if (element.attachEvent) + element.attachEvent('on' + eventName, fn); + } + + addEvent(window, 'load', function() { + loadForeseeScript(); + }); + + + function loadForeseeScript() { + if (typeof MinForeseeRef != 'undefined') { + var fscriptMin1 = document.createElement('script'); + fscriptMin1.type = 'text/javascript'; + fscriptMin1.src = MinForeseeRef; + if (document.head === undefined) { + document.getElementsByTagName('head')[0].appendChild(fscriptMin1); + } else { + document.head.appendChild(fscriptMin1); + } + } else { + var fscript11 = document.createElement('script'); + fscript11.type = 'text/javascript'; + fscript11.src = '/foresee/foresee-alive.js'; + if (document.head === undefined) { + document.getElementsByTagName('head')[0].appendChild(fscript11); + } else { + document.head.appendChild(fscript11); + } + var fscript12 = document.createElement('script'); + fscript12.type = 'text/javascript'; + fscript12.src = '/foresee/foresee-trigger.js'; + + if (document.head === undefined) { + document.getElementsByTagName('head')[0].appendChild(fscript12); + } else { + document.head.appendChild(fscript12); + } + var fscript13 = document.createElement('script'); + fscript13.type = 'text/javascript'; + fscript13.src = '/share/jslib/foresee/foresee-support.js'; + + if (document.head === undefined) { + document.getElementsByTagName('head')[0].appendChild(fscript13); + } else { + document.head.appendChild(fscript13); + } + } + }; + + /* } + }*/ +</script><script> + +if(window.dtmObject===undefined) + window.dtmObject={}; +if(window.dtmObject.BAS===undefined) + window.dtmObject.BAS={}; + +var dtmdomain= window.location.protocol+"//"+window.location.host; + window.dtmObject.BAS.ThirdPartyTags={}; + +window.dtmObject.BAS.ThirdPartyTags.EstaraRules={}; +window.dtmObject.BAS.ThirdPartyTags.EstaraLinkImage={}; +window.dtmObject.BAS.ThirdPartyTags.ATGsvcs={}; +window.dtmObject.BAS.ThirdPartyTags.Xd={}; +window.dtmObject.BAS.ThirdPartyTags.EstaraLr={}; +window.dtmObject.BAS.ThirdPartyTags.BrightEdge={}; +window.dtmObject.BAS.ThirdPartyTags.ChannelIntelligence={}; +window.dtmObject.BAS.ThirdPartyTags.ForeseeSurvey={}; +window.dtmObject.BAS.ThirdPartyTags.Gomez={}; + + +window.dtmObject.BAS.ThirdPartyTags.EstaraRules.isEnabled=false; +window.dtmObject.BAS.ThirdPartyTags.EstaraLinkImage.isEnabled=false; +window.dtmObject.BAS.ThirdPartyTags.ATGsvcs.isEnabled=false; +window.dtmObject.BAS.ThirdPartyTags.Xd.isEnabled=false; +window.dtmObject.BAS.ThirdPartyTags.EstaraLr.isEnabled=false; +window.dtmObject.BAS.ThirdPartyTags.BrightEdge.isEnabled=true; +window.dtmObject.BAS.ThirdPartyTags.ChannelIntelligence.isEnabled=true; +window.dtmObject.BAS.ThirdPartyTags.ForeseeSurvey.isEnabled=false; +window.dtmObject.BAS.ThirdPartyTags.Gomez.isEnabled=true; + +window.dtmObject.BAS.ThirdPartyTags.isInternetExplorer = + (navigator.appName == 'Microsoft Internet Explorer') + || ((navigator.appName == 'Netscape') + && (new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})").exec( + navigator.userAgent) != null)); + + if (navigator.userAgent.indexOf('MSIE') != -1) + var detectIEregexp = /MSIE (\d+\.\d+);/ + else + var detectIEregexp = /Trident.*rv[ :]*(\d+\.\d+)/ + + var isIEGreaterThen10 = false; + if (detectIEregexp.test(navigator.userAgent)){ + var ieversion = new Number(RegExp.$1); + if (ieversion >= 10) { + isIEGreaterThen10 = true; + } + } + + if (window.dtmObject.BAS.ThirdPartyTags.isInternetExplorer) { + window.dtmObject.BAS.ThirdPartyTags.Gomez.isEnabled = isIEGreaterThen10; + } + window.dtmObject.BAS.ThirdPartyTags.Gomez.Url=dtmdomain+"/dtagent621_gxjnpr23t_1027.js"; + + +window.dtmObject.BAS.ThirdPartyTags.ATGsvcs.Url="http://static.atgsvcs.com/js/atgsvcs.js"; +window.dtmObject.BAS.ThirdPartyTags.BrightEdge.Url="http://edge.analytics.brightedge.com/brightedge_analytics.js"; +window.dtmObject.BAS.ThirdPartyTags.ChannelIntelligence.Url="http://cts.channelintelligence.com/13016956_landing.js"; +window.dtmObject.BAS.ThirdPartyTags.ForeseeSurvey.Url="http://img.walgreens.com/foresee/foresee-surveydef.js?build=3"; + +//window.dtmObject.BAS.ThirdPartyTags.Gomez.Url=dtmdomain+"/share/jslib/gomezuem/dtagent60_pgjarbx3etn_6887.js"; +//window.dtmObject.BAS.ThirdPartyTags.Gomez.Url=dtmdomain+"/share/jslib/gomezuem/dtagent60_pgar3tn_6887.js"; + + + +window.dtmObject.BAS.ThirdPartyTags.Gomez.DtConfig="tp=500,50,5,1|cors=1|doNotDetect=kyu,kyd|instr=clk|reportUrl="+window.location.protocol+"//ecomuem.walgreens.com/dynaTraceMonitor"; + + +window.dtmObject.BAS.ThirdPartyTags.Xd.accountid="200106295943"; +window.dtmObject.BAS.ThirdPartyTags.Xd.Url="http://rules.atgsvcs.com/ServerEngine/xd/3.0/json/" + +window.dtmObject.BAS.ThirdPartyTags.Xd.accountid + +"/xd.js"; + +window.dtmObject.BAS.ThirdPartyTags.EstaraLr.accountid="200106295943"; +window.dtmObject.BAS.ThirdPartyTags.EstaraLr.Url="http://as00.estara.com/fs/lr.php?onload=1&accountid=" + +window.dtmObject.BAS.ThirdPartyTags.EstaraLr.accountid + +"&api_version=1.0"; + + +window.dtmObject.BAS.ThirdPartyTags.EstaraRules.accountid="200106295943"; +window.dtmObject.BAS.ThirdPartyTags.EstaraRules.cs="ISO-8859-1"; +window.dtmObject.BAS.ThirdPartyTags.EstaraRules.estara_fsguid="BB551C6E7F68B101490CA5D0C7A606D5"; +window.dtmObject.BAS.ThirdPartyTags.EstaraRules.estara_firsttime="1397630323"; +window.dtmObject.BAS.ThirdPartyTags.EstaraRules.dnc="1397639939114218295"; + +window.dtmObject.BAS.ThirdPartyTags.EstaraRules.Url="http://as00.estara.com/fs/rules.php?accountid="+window.dtmObject.BAS.ThirdPartyTags.EstaraRules.accountid+"&title="+document.title+ + "&referrer="+document.referrer+ + "&w="+window.innerWidth+ + "&h="+window.innerHeight+ + "&d=24&platform="+navigator.platform+ + "&ua="+navigator.userAgent+ + "&cs="+window.dtmObject.BAS.ThirdPartyTags.EstaraRules.cs+"&estara_fsguid="+window.dtmObject.BAS.ThirdPartyTags.EstaraRules.estara_fsguid+ + "&estara_firsttime="+window.dtmObject.BAS.ThirdPartyTags.EstaraRules.estara_firsttime+ + "&location="+location.href+ + "&dnc="+window.dtmObject.BAS.ThirdPartyTags.EstaraRules.dnc; + + window.dtmObject.BAS.ThirdPartyTags.EstaraLinkImage.dnc="1308080248.23587704593921"; + window.dtmObject.BAS.ThirdPartyTags.EstaraLinkImage.ulbid="942785"; + window.dtmObject.BAS.ThirdPartyTags.EstaraLinkImage.Url="https://as00.estara.com/webcare/public/linkimage.php?ulbid="+window.dtmObject.BAS.ThirdPartyTags.EstaraLinkImage.ulbid+ + "&dnc="+window.dtmObject.BAS.ThirdPartyTags.EstaraLinkImage.dnc; + + +</script><script> + + var hostname=window.location.hostname; + + if(hostname!="om-perf.walgreens.com") + { +if(window.dtmObject!=undefined && + window.dtmObject.BAS!=undefined && + window.dtmObject.BAS.ThirdPartyTags!=undefined && + window.dtmObject.BAS.ThirdPartyTags.EstaraRules!=undefined + ) + { + if(window.dtmObject.BAS.ThirdPartyTags.Gomez.isEnabled) + { + var scriptTag= document.createElement("script"); + scriptTag.setAttribute("src",window.dtmObject.BAS.ThirdPartyTags.Gomez.Url); + scriptTag.setAttribute("data-dtconfig",window.dtmObject.BAS.ThirdPartyTags.Gomez.DtConfig); + document.head.appendChild(scriptTag); + } + + } + } +</script><script src="https://www.walgreens.com/dtagent621_gxjnpr23t_1027.js" data-dtconfig="tp=500,50,5,1|cors=1|doNotDetect=kyu,kyd|instr=clk|reportUrl=https://ecomuem.walgreens.com/dynaTraceMonitor"></script> +<link href="https://www.wag-static.com/share/adaptive/walgreens/css/desktop/Walgreens-69231bfb162e44b0216dcbf346d918ea.css" rel="stylesheet"> + <link href="https://www.wag-static.com/share/adaptive/walgreens/css/desktop/Header-Footer-6ffba4a6f974438018f3fced31e47c15.css" rel="stylesheet"> + <!--[if lt IE 9]> + <script type="text/javascript" src="https://www.wag-static.com/share/jslib/plugin/html5shiv-08add538cdde7034fe3db0564cc24d41.js"></script> + <script type="text/javascript" src="https://www.wag-static.com/share/jslib/bootstrap/respond.min-efe778006167e9382fc5b08a142eb553.js"></script> + <![endif]--> <link href="https://www.wag-static.com/share/adaptive/walgreens/css/desktop/OptimizedCheckout-638e02c6ad8f21b1ba8459491dfa02bf.css" rel="stylesheet"> + <script src="https://assets.adobedtm.com/7deb8111c940df73792ccb9937476cc412e87575/s-code-contents-ebc1e337e43c3b070eb8a6833435df71ec709f05.js"></script><script src="https://assets.adobedtm.com/7deb8111c940df73792ccb9937476cc412e87575/scripts/satellite-561618523664620014000b43.js"></script><script src="https://assets.adobedtm.com/7deb8111c940df73792ccb9937476cc412e87575/scripts/satellite-560b03466638390082001010.js"></script><script type="text/javascript" src="https://www.wag-static.com/share/adaptive/walgreens/js/ForeseeScript.min-46732ae0b688a52e81f71825b63cefdc.js"></script><script src="https://as00.estara.com/as/InitiateCall2.php?accountid=200106295943"></script><script charset="UTF-8" src="https://as00.estara.com/webcare/public/linkjs.php?ulbid=992494"></script><script charset="UTF-8" src="//static.atgsvcs.com/js/atgsvcs.js"></script><script type="text/javascript" src="https://www.walgreens.com/foresee/foresee-surveydef.js?build=5"></script></head> +<body style=""> + +<!-- "(c) Walgreen Co. All rights reserved" --> +<script> + var IsNativeApp = 'false'; + </script> + <script type="text/javascript" src="https://www.wag-static.com/share/jslib/jquery/jquery.min-bb297ca4879b9531d4c5c281d8e06074.js"></script> + <!--[if lt IE 9]> + <script type="text/javascript" src="https://www.wag-static.com/share/jslib/bootstrap/respond.min-efe778006167e9382fc5b08a142eb553.js"></script> + <![endif]--> + <section class="wag-top-header wag-bg-tint-blue wag-cac-head-bg"></section> + <section class="container"> + <!-- "(c) Walgreen Co. All rights reserved" --> +<!-- +<script type="text/javascript" src="https://as00.estara.com/as/InitiateCall2.php?accountid=200106295943"></script> +<script type="text/javascript" charset="UTF-8" src="https://as00.estara.com/webcare/public/linkjs.php?ulbid=992494"></script> +<script type="text/javascript" charset="utf-8" src="//static.atgsvcs.com/js/atgsvcs.js"></script> + --> +<section class="wag-pos-rel"> + <section class="wag-header-main-container" style="padding:0!important"> + <section class="wag-cac-new-head-con"> + <a class="wag-back-to-cart-link" href="/store/checkout/cart.jsp" title="Back to Cart">‹ Back to Cart</a> + </section> + <section class="wag-cac-nhead-img"> + <figure class="wag-header-logo-desktop-cac"> + <img class="hidden-xs" src="/images/adaptive/share/images/logos/walgreens-logo-desktop.png" alt="Logo"> + <img class="hidden-lg hidden-sm hidden-md" src="/images/adaptive/share/images/walgreens_s_logo.png" alt="Logo"> + <figcaption></figcaption> + </figure> + <section class="wag-cac-nhead-btn" id="wag-cac-estara"><a id="wag-helpwid-livechat" href="javascript:webISChatPop('Template=992494');" title="Need help? Live Chat"><img src="https://as00.estara.com/webcare/public/linkimage.php?ulbid=992494" border="0" alt="Click to Chat"></a><p><span class="wag-cac-nhead-hide">Or call</span><span class="wag-cac-nhead-show wag-cac-nhead-dis">Call</span> us toll free, 24/7: <span class="wag-cac-nhead-hide"><strong>(877)250-5823</strong>.</span><a class="wag-cac-nhead-show" href="tel:1-877-250-5823" title="1-877-250-5823"><strong>1-877-250-5823</strong></a></p></section> + </section> + </section> + </section> + + <section class="wag-body-container-wrapper"> + <section class="row"> + <section class="col-lg-12 col-md-12 col-sm-12 col-xs-12 wag-cac-main-container"> + <section class="wag-cko ng-scope" ng-init="init()" ng-controller="paymentmethodappController"> +<wag:payment-method-app><!-- "(c) Walgreen Co. All rights reserved" --> +<h1 class="cac-common-hd1 mb0">Checkout information</h1> +<p class="cac-common-sub-desc1"><strong>You will be able to review all your information before submitting your order.</strong></p> + <section tool-tip=""> + <section class="wag-cko-alert-sapce-mob"> + <!-- ngRepeat: eachGroup in totalArr --> + </section> + <div class="wag-checkout-content" id="accordion"> + <!-- uiView: --><section ui-view="" class="ng-scope"><!-- "(c) Walgreen Co. All rights reserved"--> +<section ng-model="paymentMethod" ng-controller="checkoutpaymentmethodeditController" ng-init="init()" class="ng-scope ng-pristine ng-valid"> + <!-- ngIf: errorResponse.errorArr.length >= 1 --> + <!-- ngIf: errorResponse.warnArr.length >= 1 --> + <!-- ngIf: errorResponse.infoArr.length >= 1 --> + <!-- ngIf: visaCheckOutError --> + <section class="row"> + <section class="wag-wcko-et-block col-lg-4 col-md-5 col-sm-6 col-xs-12 pull-right"><wag:checkout-wpuestimated><!-- "(c) Walgreen Co. All rights reserved"--> +<section class="wag-wcko-et"> + <!-- ngIf: priceInfo.orderTotal !== null && priceInfo.orderTotal !== undefined --><span ng-if="priceInfo.orderTotal !== null && priceInfo.orderTotal !== undefined" class="ng-scope">Order Total:</span><!-- end ngIf: priceInfo.orderTotal !== null && priceInfo.orderTotal !== undefined --> + <!-- ngIf: priceInfo.orderTotal !== null && priceInfo.orderTotal !== undefined --><span class="pull-right ng-scope" ng-if="priceInfo.orderTotal !== null && priceInfo.orderTotal !== undefined"><strong class="ng-binding">$19.87</strong></span><!-- end ngIf: priceInfo.orderTotal !== null && priceInfo.orderTotal !== undefined --> + <!-- ngIf: priceInfo.estimatedTotal !== null && priceInfo.estimatedTotal !== undefined --> + <!-- ngIf: priceInfo.estimatedTotal !== null && priceInfo.estimatedTotal !== undefined --> +</section> +</wag:checkout-wpuestimated></section> + </section> + <h2 class="wag-checkout-hd2">Payment method</h2> + <hr class="mt0 mb20 hidden-xs"> + <aside id="Payment-method"> + <section class="row m0 mt20 checkout-payment-method-options"> + <!-- ngIf: paymentMethod.availableOptions.indexOf('CC') !== -1 --><section class="col-lg-3 col-md-3 col-sm-3 col-xs-6 radio radio-primary ng-scope" ng-if="paymentMethod.availableOptions.indexOf('CC') !== -1"> + <input type="radio" ng-disabled="paymentMethod.activeOptions.indexOf('CC') === -1" id="wag-cko-pm-cc-rb" value="CC" name="paymentMethodType" ng-model="paymentMethodType" ng-click="choosePaymentMethod('CC');" class="ng-pristine ng-valid"> + <label for="wag-cko-pm-cc-rb" class="wag-checkout-credit-card wag-payment-inp-cko"> + <img ng-src="/images/adaptive/share/images/visa.png" class="img-responsive" alt="visa" src="/images/adaptive/share/images/visa.png"> + <img ng-src="/images/adaptive/share/images/master.png" class="img-responsive" alt="Master" src="/images/adaptive/share/images/master.png"><br> + <img ng-src="/images/adaptive/share/images/amex.png" class="img-responsive mt3" alt="Amex" src="/images/adaptive/share/images/amex.png"> + <img ng-src="/images/adaptive/share/images/discover.png" class="img-responsive mt3" alt="Discover" src="/images/adaptive/share/images/discover.png"> + </label> + <!-- ngIf: paymentMethodType == 'CC' --><span ng-if="paymentMethodType == 'CC'" class="po-arrow creditcard hidden-xs ng-scope"></span><!-- end ngIf: paymentMethodType == 'CC' --> + </section><!-- end ngIf: paymentMethod.availableOptions.indexOf('CC') !== -1 --> + <section class="col-lg-3 col-md-3 col-sm-3 col-xs-6 radio radio-primary" ng-show="paymentMethod.availableOptions.indexOf('visaCheckout') > -1"> + <input type="radio" ng-disabled="paymentMethod.activeOptions.indexOf('visaCheckout') === -1" value="VisaCheckout" id="wag-cko-pm-visacheckout" ng-model="paymentMethodType" ng-click="choosePaymentMethod('VisaCheckout');" class="ng-pristine ng-valid" name="007"> + <label for="wag-cko-pm-visacheckout" class="wag-payment-inp-cko"> + <img alt="Visa Checkout" class="wag-cac-visacheckoutradiobtn" src="https://assets.secure.checkout.visa.com/VmeCardArts/partner/POS_horizontal_99x34.png"> + </label> + <!-- ngIf: paymentMethodType == 'VisaCheckout' --> + </section> + <!-- ngIf: paymentMethod.availableOptions.indexOf('Paypal') > -1 --><section class="col-lg-3 col-md-3 col-sm-3 col-xs-6 radio radio-primary wag-cko-pm-paypal-rb ng-scope" ng-if="paymentMethod.availableOptions.indexOf('Paypal') > -1"> + <input ng-disabled="paymentMethod.activeOptions.indexOf('Paypal') === -1" type="radio" id="wag-cko-pm-paypal-rb" value="Paypal" name="paymentMethodType" ng-model="paymentMethodType" ng-click="choosePaymentMethod('paypal');" class="ng-pristine ng-valid"> + <label for="wag-cko-pm-paypal-rb" class="wag-payment-inp-cko"> + <img ng-src="/images/adaptive/share/images/paypalnew.png" class="img-responsive" alt="Paypal" src="/images/adaptive/share/images/paypalnew.png"> + </label> + <!-- ngIf: paymentMethodType == 'PAYPAL' --> + <p class="wag-cko-pm-terms pl15"><a id="shipping_details" href="javascript:;" data-toggle="modal" data-target="#paypaySeeTermsPopUp" title="Learn more about Paypal See Terms - Opens a simulated dialog">See Terms <span class="sr-only">- Opens a simulated dialog</span></a></p> + </section><!-- end ngIf: paymentMethod.availableOptions.indexOf('Paypal') > -1 --> + <!-- ngIf: paymentMethod.availableOptions.indexOf('BML') > -1 --><section class="col-lg-3 col-md-3 col-sm-3 col-xs-6 radio radio-primary wag-cko-pm-paypal-credit-rb ng-scope" ng-if="paymentMethod.availableOptions.indexOf('BML') > -1"> + <input ng-disabled="paymentMethod.activeOptions.indexOf('BML') === -1" type="radio" id="wag-cko-pm-paypal-credit-rb" value="BML" name="paymentMethodType" ng-model="paymentMethodType" ng-click="choosePaymentMethod('BML');" class="ng-pristine ng-valid"> + <label for="wag-cko-pm-paypal-credit-rb" class="wag-payment-inp-cko"> + <img ng-src="/images/adaptive/share/images/billme.png" class="img-responsive" alt="Bill Me Later" src="/images/adaptive/share/images/billme.png"> + </label> + <!-- ngIf: paymentMethodType == 'BML' --> + <p class="wag-cko-pm-terms pl15"><a id="shipping_details" href="javascript:;" title="Learn more about Bill Me Later See Terms - Opens a simulated dialog" ng-click="loadBmlIframe()" data-toggle="modal" data-target="#bmlOverlay">See Terms <span class="sr-only">- Opens a simulated dialog</span></a></p> + </section><!-- end ngIf: paymentMethod.availableOptions.indexOf('BML') > -1 --> + <span class="po-arrow creditcard visible-xs" ng-class="{'wag-cac-payment-arrow':paymentMethod.availableOptions.length==1 && paymentMethod.availableOptions.indexOf('CC') > -1}"></span> + </section> + + <!-- ngIf: paymentMethod.availableOptions.indexOf('CC') !== -1 && paymentMethodType === 'CC' --><section class="row ng-scope ng-invalid ng-invalid-required ng-dirty" ng-form="paymentMethodFrom" ng-controller="paymentAddFormController" ng-if="paymentMethod.availableOptions.indexOf('CC') !== -1 && paymentMethodType === 'CC'"> + <section class="col-lg-4 col-md-5 col-sm-5 col-xs-10 mt20 wag-form-vertical ng-pristine ng-valid" ng-model="ccMDiv"> + <section class="form-group wag-form-group wag-form-group-vertical" ng-class="ccDiv.flag1==1 && errorArray.addcardtypeError && paymentMethodFrom.addtype.$error.required ? labelError:''"> + <label id="wag-cko-pm-lb-cc" class="col-lg-12 col-md-12 col-sm-12 col-xs-12 p0 control-label wag-label-top"><strong>Type:</strong></label> + <section class="col-lg-12 col-md-12 col-sm-12 col-xs-12 p0 wag-field-vertical "> + <section class="wag-pos-rel wag-pos-rel-text"> + <select aria-labelledby="wag-cko-id-err-state" title="Type" id="wag-cko-pm-sel-cc-type" class="form-control wag-form-control ng-dirty ng-valid ng-valid-required" name="addtype" ng-class="ccDiv.flag1 == 1 && errorArray.addcardtypeError && paymentMethodFrom.addtype.$error.required ? textError:''" ng-model="ccDiv.showvalue_ccType" ng-options="cards.type for cards in formatObj" ng-blur="errorArray.addcardtypeError=true;ccDiv.flag1=1" required=""><option value="" class="">Type</option><option value="0">Visa</option><option value="1">MasterCard</option><option value="2">Amex</option><option value="3">Discover</option></select> + <span class="sr-only" id="wag-cko-id-err-state"></span> + </section> + <section role="alert"> + <section class="wag-form-feedback-icons"> + <span class="icon-Alert text-danger ng-hide" ng-show="ccDiv.flag1==1 && errorArray.addcardtypeError && paymentMethodFrom.addtype.$error.required" test-event="valid-delete"></span> + </section> + <!-- ngIf: ccDiv.flag1==1 && errorArray.addcardtypeError && paymentMethodFrom.addtype.$error.required --> + </section> + </section> + </section> + <section class="form-group wag-form-group wag-form-group-vertical has-error" ng-class="ccDiv.flag2==1 && errorArray.addcardnumberError && (paymentMethodFrom.addcardnumber.$error.required || paymentMethodFrom.addcardnumber.$error.minlength)? labelError:''"> + <label id="wag-cko-pm-lb-cc-num" class="col-lg-12 col-md-12 col-sm-12 col-xs-12 p0 control-label wag-label-top" for="wag-cko-pm-in-cc-num"><strong>Card Number:</strong></label> + <section class="col-lg-12 col-md-12 col-sm-12 col-xs-12 p0 wag-field-vertical "> + <section class="wag-pos-rel wag-pos-rel-text"> + <input aria-labelledby="wag-cko-id-err-fname" id="wag-cko-pm-in-cc-num" test-input="User address" class="form-control wag-form-control ng-pristine ng-invalid ng-invalid-required wag-alert-border" type="tel" name="addcardnumber" ng-class=" ccDiv.flag2==1 && errorArray.addcardnumberError && (paymentMethodFrom.addcardnumber.$error.required)? textError:''" ng-model="ccDiv.showvalue_ccNumber" title="Card Number" required="" watch-change="" watch-changen="" ng-blur="errorArray.addcardnumberError=true;ccDiv.flag2=1" ng-keypress="checkWhiteSpace($event)"> + <span class="sr-only" id="wag-cko-id-err-fname"></span> + </section> + <section role="alert"> + <section class="wag-form-feedback-icons"> + <span class="icon-Alert text-danger" ng-show="ccDiv.flag2==1 && errorArray.addcardnumberError && (paymentMethodFrom.addcardnumber.$error.required)" test-event="valid-delete"></span> + </section> + <!-- ngIf: ccDiv.flag2==1 && errorArray.addcardnumberError && paymentMethodFrom.addcardnumber.$error.required --><span id="wag-cko-id-err-fname" class="help-block ng-scope" ng-if="ccDiv.flag2==1 && errorArray.addcardnumberError && paymentMethodFrom.addcardnumber.$error.required"><span class="sr-only">Error:</span>Please enter the Credit Card Number</span><!-- end ngIf: ccDiv.flag2==1 && errorArray.addcardnumberError && paymentMethodFrom.addcardnumber.$error.required --> + </section> + </section> + </section> + <section class="form-group wag-form-group wag-form-group-vertical wag-cko-zip"> + <label id="wag-cko-pm-lb-cc-exp" class="col-lg-12 col-md-12 col-sm-12 col-xs-12 p0 control-label wag-label-top" ng-class="((ccDiv.flag3==1 && errorArray.addcardmonthError && paymentMethodFrom.addmonth.$error.required) || (ccDiv.flag4==1 && errorArray.addcardyearError && (paymentMethodFrom.addyear.$error.required || paymentMethodFrom.addmonth.$error.required)))? 'text-danger':''"><strong>Expiration:</strong></label> + <section class="col-lg-12 col-md-12 col-sm-12 col-xs-12 p0 wag-field-vertical "> + <section class="wag-checkout-payment-input-twocol"> + <section ng-class="(((ccDiv.flag3 === 1 && errorArray.addcardmonthError) || (ccDiv.flag4 === 1 && errorArray.addcardyearError)) && paymentMethodFrom.addmonth.$error.required)? labelError:''"> + <select aria-labelledby="wag-cko-id-err-vazipcod" title="Month" id="wag-cko-pm-sel-cc-exp-mon" class="form-control wag-form-control wag-checkout-payment-firstcol ng-pristine ng-invalid ng-invalid-required" name="addmonth" ng-model="ccDiv.showvalue_ccExMonth" ng-options="m.value as (m.month) for m in months" ng-blur="errorArray.addcardmonthError=true;ccDiv.flag3=1" required=""><option value="" class="">Month</option><option value="0">January</option><option value="1">February</option><option value="2">March</option><option value="3">April</option><option value="4">May</option><option value="5">June</option><option value="6">July</option><option value="7">August</option><option value="8">September</option><option value="9">October</option><option value="10">November</option><option value="11">December</option></select> + <span class="sr-only" id="wag-cko-id-err-vazipcod"></span> + </section> + <span id="wag-cko-id-sa-lb-zip-op" class="wag-checkout-payment-sep text-center mt5"> </span> + <section ng-class="(ccDiv.flag4==1) && (errorArray.addcardyearError) && (paymentMethodFrom.addyear.$error.required)? labelError:''"> + <select aria-labelledby="wag-cko-id-err-vazipcod" title="Year" id="wag-cko-pm-sel-cc-exp-year" class="form-control wag-form-control wag-checkout-payment-secondcol ng-pristine ng-invalid ng-invalid-required" name="addyear" ng-model="ccDiv.showvalue_ccExYear" ng-options="y.value as (y.year) for y in years" ng-blur="errorArray.addcardyearError=true;ccDiv.flag4=1" required=""><option value="" class="">Year</option><option value="0">2016</option><option value="1">2017</option><option value="2">2018</option><option value="3">2019</option><option value="4">2020</option><option value="5">2021</option><option value="6">2022</option><option value="7">2023</option><option value="8">2024</option><option value="9">2025</option><option value="10">2026</option><option value="11">2027</option><option value="12">2028</option><option value="13">2029</option><option value="14">2030</option><option value="15">2031</option><option value="16">2032</option><option value="17">2033</option><option value="18">2034</option><option value="19">2035</option><option value="20">2036</option><option value="21">2037</option><option value="22">2038</option><option value="23">2039</option><option value="24">2040</option><option value="25">2041</option><option value="26">2042</option><option value="27">2043</option><option value="28">2044</option><option value="29">2045</option><option value="30">2046</option><option value="31">2047</option><option value="32">2048</option><option value="33">2049</option><option value="34">2050</option><option value="35">2051</option></select> + </section> + <span class="sr-only" id="wag-cko-id-err-vazipcod"></span> + </section> + <section role="alert"> + <section class="wag-form-feedback-icons"> + <span class="icon-Alert text-danger ng-hide" ng-show="((ccDiv.flag3==1 && errorArray.addcardmonthError && paymentMethodFrom.addmonth.$error.required) || (ccDiv.flag4==1 && errorArray.addcardyearError && (paymentMethodFrom.addyear.$error.required || paymentMethodFrom.addmonth.$error.required)))" test-event="valid-delete"></span> + </section> + <!-- ngIf: ((ccDiv.flag3==1 && errorArray.addcardmonthError && paymentMethodFrom.addmonth.$error.required) || (ccDiv.flag4==1 && errorArray.addcardyearError && (paymentMethodFrom.addyear.$error.required || paymentMethodFrom.addmonth.$error.required))) --> + </section> + </section> + </section> + </section> + <section class="col-lg-12 col-md-12 col-sm-12 col-xs-12 wag-checkout-payment-same mb10"> + <h1 class="pull-left m0 wag-cac-billaddress">Billing address</h1> + <section class="ml20 form-group pull-left wag-form-group wag-same-shipping-block"> + <section class="p0"> + <section class="checkbox checkbox-primary"> + <input class="mr5 wag-radio-align ng-pristine ng-valid" id="wag-chok-id-pm-ckh1" type="checkbox" name="preferred" ng-model="testS.value1" ng-click="ccDeskShowForm()"> + <label id="wag-cko-pm-lb-sasadd" for="wag-chok-id-pm-ckh1">Same as shipping address</label> + </section> + </section> + </section> + </section> + <!-- ngIf: paymentMethod.availableOptions.indexOf('CC') !== -1 && paymentMethodType === 'CC' --><section ng-form="paymentMethodFrom" ng-controller="paymentAddFormController" ng-if="paymentMethod.availableOptions.indexOf('CC') !== -1 && paymentMethodType === 'CC'" class="ng-scope ng-pristine ng-invalid ng-invalid-required"> + <aside class="col-lg-4 col-md-5 col-sm-5 col-xs-11 wag-form-vertical"> + <section class="form-group wag-form-group wag-form-group-vertical" ng-class="errorArray.addfirstNameError && paymentMethodFrom.addfirstName.$error.required ? labelError:''"> + <label id="wag-cko-pm-lb-fn" class="col-lg-12 col-md-12 col-sm-12 col-xs-12 p0 control-label wag-label-top" for="wag-cko-id-sa-inp-fn"><strong>First Name:</strong></label> + <section class="col-lg-12 col-md-12 col-sm-12 col-xs-12 p0 wag-field-vertical "> + <section class="wag-pos-rel wag-pos-rel-text"> + <input aria-labelledby="wag-cko-id-err-fnames" id="wag-cko-id-sa-inp-fn" test-input="User address" class="form-control wag-form-control ng-pristine ng-invalid ng-invalid-required" ng-class="errorArray.addfirstNameError && paymentMethodFrom.addfirstName.$error.required ? textError:''" type="text" title="Firstname" ng-model="mobilecheck.showvalue_ccFName" name="addfirstName" required="" watch-change="" watch-changen="" ng-blur="errorArray.addfirstNameError=true"> + <span class="sr-only" id="wag-cko-id-err-fnames"></span> + </section> + <section role="alert"> + <section class="wag-form-feedback-icons"> + <span class="icon-Alert text-danger ng-hide" ng-show="errorArray.addfirstNameError && paymentMethodFrom.addfirstName.$error.required"></span> + </section> + <!-- ngIf: errorArray.addfirstNameError && paymentMethodFrom.addfirstName.$error.required --> + </section> + </section> + </section> + <section class="form-group wag-form-group wag-form-group-vertical" ng-class="errorArray.addlastNameError && paymentMethodFrom.addlastName.$error.required ? labelError:''"> + <label id="wag-cko-id-sa-lb-ln" class="col-lg-12 col-md-12 col-sm-12 col-xs-12 p0 control-label wag-label-top" for="wag-cko-id-sa-inp-ln"><strong>Last Name:</strong></label> + <section class="col-lg-12 col-md-12 col-sm-12 col-xs-12 p0 wag-field-vertical "> + <section class="wag-pos-rel wag-pos-rel-text"> + <input aria-labelledby="wag-cko-id-err-lname" id="wag-cko-id-sa-inp-ln" test-input="User address" class="form-control wag-form-control ng-pristine ng-invalid ng-invalid-required" ng-class="errorArray.addlastNameError && paymentMethodFrom.addlastName.$error.required ? textError:''" type="text" title="Lastname" ng-model="mobilecheck.showvalue_ccLName" name="addlastName" required="" watch-change="" watch-changen="" ng-blur="errorArray.addlastNameError=true"> + <span class="sr-only" id="wag-cko-id-err-lname"></span> + </section> + <section role="alert"> + <section class="wag-form-feedback-icons"> + <span class="icon-Alert text-danger ng-hide" ng-show="errorArray.addlastNameError && paymentMethodFrom.addlastName.$error.required" test-event="valid-delete"></span> + </section> + <!-- ngIf: errorArray.addlastNameError && paymentMethodFrom.addlastName.$error.required --> + </section> + </section> + </section> + <section class="form-group wag-form-group wag-form-group-vertical" ng-class="errorArray.addstreet1Error && paymentMethodFrom.addstreet1.$error.required ? labelError:''"> + <label id="wag-cko-id-sa-lb-add" class="col-lg-12 col-md-12 col-sm-12 col-xs-12 p0 control-label wag-label-top" for="wag-cko-id-sa-inp-add"><strong>Address:</strong></label> + <section class="col-lg-12 col-md-12 col-sm-12 col-xs-12 p0 wag-field-vertical "> + <section class="wag-pos-rel wag-pos-rel-text"> + <input aria-labelledby="wag-cko-id-err-add" id="wag-cko-id-sa-inp-add" test-input="User address" class="form-control wag-form-control ng-pristine ng-invalid ng-invalid-required" ng-class="errorArray.addstreet1Error && paymentMethodFrom.addstreet1.$error.required ? textError:''" type="text" title="Address" ng-model="mobilecheck.showvalue_ccBillAdd" name="addstreet1" required="" ng-blur="errorArray.addstreet1Error=true" watch-change="" watch-changen=""> + <span class="sr-only" id="wag-cko-id-err-add"></span> + </section> + <section role="alert"> + <section class="wag-form-feedback-icons"> + <span class="icon-Alert text-danger ng-hide" ng-show="errorArray.addstreet1Error && paymentMethodFrom.addstreet1.$error.required"></span> + </section> + <!-- ngIf: errorArray.addstreet1Error && paymentMethodFrom.addstreet1.$error.required --> + </section> + </section> + </section> + <section class="form-group wag-form-group wag-form-group-vertical" ng-class="errorArray.addcityError && paymentMethodFrom.addcity.$error.required ? labelError:''"> + <label id="wag-cko-id-sa-lb-city" class="col-lg-12 col-md-12 col-sm-12 col-xs-12 p0 control-label wag-label-top" for="wag-cko-id-sa-inp-city"><strong>City:</strong></label> + <section class="col-lg-12 col-md-12 col-sm-12 col-xs-12 p0 wag-field-vertical "> + <section class="wag-pos-rel wag-pos-rel-text"> + <input aria-labelledby="wag-cko-id-err-city" id="wag-cko-id-sa-inp-city" test-input="User address" class="form-control wag-form-control ng-pristine ng-invalid ng-invalid-required" ng-class="errorArray.addcityError && paymentMethodFrom.addcity.$error.required ? textError:''" type="text" title="City" ng-model="mobilecheck.showvalue_ccCity" name="addcity" required="" watch-change="" watch-changen="" ng-blur="errorArray.addcityError=true"> + <span class="sr-only" id="wag-cko-id-err-city"></span> + </section> + <section role="alert"> + <section class="wag-form-feedback-icons"> + <span class="icon-Alert text-danger ng-hide" ng-show="errorArray.addcityError && paymentMethodFrom.addcity.$error.required" test-event="valid-delete"></span> + </section> + <!-- ngIf: errorArray.addcityError && paymentMethodFrom.addcity.$error.required --> + </section> + </section> + </section> + <section class="form-group wag-form-group wag-form-group-vertical" ng-class="errorArray.addstateError && (paymentMethodFrom.addstate.$error.required || mobilecheck.showvalue_ccState === 'State') ? labelError:''"> + <label id="wag-cko-id-sa-lb-state" class="col-lg-12 col-md-12 col-sm-12 col-xs-12 p0 control-label wag-label-top" for="wag-cko-id-sa-sel-state"><strong>State:</strong></label> + <section class="col-lg-12 col-md-12 col-sm-12 col-xs-12 p0 wag-field-vertical "> + <section class="wag-pos-rel wag-pos-rel-text"> + <select aria-labelledby="wag-cko-id-err-statee" title="State" id="wag-cko-id-sa-sel-state" class="form-control wag-form-control ng-pristine ng-invalid ng-invalid-required" name="addstate" ng-class="errorArray.addstateError && (paymentMethodFrom.addstate.$error.required || mobilecheck.showvalue_ccState === 'State') ? textError:''" ng-model="mobilecheck.showvalue_ccState" ng-options="s.abbr as (s.abbr+' - '+s.name) for s in state" ng-blur="errorArray.addstateError=true" required=""><option value="" class="">Select State</option><option value="0">AL - Alabama</option><option value="1">AK - Alaska</option><option value="2">AS - American Samoa</option><option value="3">AZ - Arizona</option><option value="4">AR - Arkansas</option><option value="5">CA - California</option><option value="6">CO - Colorado</option><option value="7">CT - Connecticut</option><option value="8">DE - Delaware</option><option value="9">DC - District of Columbia</option><option value="10">FL - Florida</option><option value="11">GA - Georgia</option><option value="12">GU - Guam</option><option value="13">HI - Hawaii</option><option value="14">ID - Idaho</option><option value="15">IL - Illinois</option><option value="16">IN - Indiana</option><option value="17">IA - Iowa</option><option value="18">KS - Kansas</option><option value="19">KY - Kentucky</option><option value="20">LA - Louisiana</option><option value="21">ME - Maine</option><option value="22">MD - Maryland</option><option value="23">MA - Massachusetts</option><option value="24">MI - Michigan</option><option value="25">MN - Minnesota</option><option value="26">MS - Mississippi</option><option value="27">MO - Missouri</option><option value="28">MT - Montana</option><option value="29">NE - Nebraska</option><option value="30">MP - Northern Marianas Islands</option><option value="31">NV - Nevada</option><option value="32">NH - New Hampshire</option><option value="33">NJ - New Jersey</option><option value="34">NM - New Mexico</option><option value="35">NY - New York</option><option value="36">NC - North Carolina</option><option value="37">ND - North Dakota</option><option value="38">OH - Ohio</option><option value="39">OK - Oklahoma</option><option value="40">OR - Oregon</option><option value="41">PA - Pennsylvania</option><option value="42">PR - Puerto Rico</option><option value="43">RI - Rhode Island</option><option value="44">SC - South Carolina</option><option value="45">SD - South Dakota</option><option value="46">TN - Tennessee</option><option value="47">TX - Texas</option><option value="48">UT - Utah</option><option value="49">VT - Vermont</option><option value="50">VA - Virginia</option><option value="51">VI - Virgin Islands</option><option value="52">WA - Washington</option><option value="53">WV - West Virginia</option><option value="54">WI - Wisconsin</option><option value="55">WY - Wyoming</option><option value="56">AA - Armed Forces (Americas)</option><option value="57">AE - Armed Forces (Europe)</option><option value="58">AP - Armed Forces (Pacific)</option></select> + <span class="sr-only" id="wag-cko-id-err-statee"></span> + </section> + <section role="alert"> + <section class="wag-form-feedback-icons"> + <span class="icon-Alert text-danger ng-hide" ng-show="errorArray.addstateError && (paymentMethodFrom.addstate.$error.required || mobilecheck.showvalue_ccState === 'State')" test-event="valid-delete"></span> + </section> + <!-- ngIf: errorArray.addstateError && (paymentMethodFrom.addstate.$error.required || mobilecheck.showvalue_ccState === 'State') --> + </section> + </section> + </section> + <section class="form-group wag-form-group wag-form-group-vertical wag-cko-zip" ng-class="errorArray.addzipcodeError && (paymentMethodFrom.addzipcode.$error.required ||(mobilecheck.showvalue_ccZipcode.length<5))? labelError:''"> + <label id="wag-cko-id-sa-lb-zip" class="col-lg-12 col-md-12 col-sm-12 col-xs-12 p0 control-label wag-label-top" for="wag-cko-id-sa-inp-zip"><strong>ZIP Code:</strong></label> + <section class="col-lg-12 col-md-12 col-sm-12 col-xs-12 p0 wag-field-vertical "> + <section class="wag-pos-rel wag-pos-rel-text wag-checkout-payment-input-twocol"> + <input aria-labelledby="wag-cko-id-err-code" id="wag-cko-id-sa-inp-zip" test-input="User address" class="form-control wag-form-control wag-checkout-payment-firstcol ng-pristine ng-invalid ng-invalid-required" ng-class="errorArray.addzipcodeError && (paymentMethodFrom.addzipcode.$error.required || (mobilecheck.showvalue_ccZipcode.length<5)) ? textError:''" type="tel" title="Zip" ng-model="mobilecheck.showvalue_ccZipcode" name="addzipcode" ng-blur="errorArray.addzipcodeError=true" required="" watch-change="" watch-changen="" ng-keypress="checkWhiteSpace($event)"><!--5--> + <label id="wag-cko-id-sa-lb-zip-op" class="wag-checkout-payment-sep text-center mt5">–</label> + <input id="wag-cko-id-sa-lb-zip-op" test-input="User address" class="form-control wag-form-control wag-checkout-payment-secondcol ng-pristine ng-valid" type="tel" placeholder="Optional" title="ZipExt" ng-model="mobilecheck.showvalue_ccZipCodeExt" name="addzipcodeExt" watch-change="" watch-changen="" ng-keypress="checkWhiteSpace($event)"> + <span class="sr-only" id="wag-cko-id-err-code"></span> + </section> + <section role="alert"> + <section class="wag-form-feedback-icons"> + <span class="icon-Alert text-danger ng-hide" ng-show="errorArray.addzipcodeError && (paymentMethodFrom.addzipcode.$error.required || (mobilecheck.showvalue_ccZipcode.length<5))" test-event="valid-delete"></span> + </section> + <!-- ngIf: errorArray.addzipcodeError && paymentMethodFrom.addzipcode.$error.required --> + <!-- ngIf: errorArray.addzipcodeError && (mobilecheck.showvalue_ccZipcode.length<5 && mobilecheck.showvalue_ccZipcode.length!=0) --> + </section> + </section> + </section> + </aside> + <!-- ngIf: loggedIn --> + </section><!-- end ngIf: paymentMethod.availableOptions.indexOf('CC') !== -1 && paymentMethodType === 'CC' --> + </section><!-- end ngIf: paymentMethod.availableOptions.indexOf('CC') !== -1 && paymentMethodType === 'CC' --> + <!-- ngIf: paymentMethod.availableOptions.indexOf('Paypal') !== -1 && paymentMethodType === 'Paypal' --> + <!-- ngIf: paymentMethod.availableOptions.indexOf('BML') !== -1 && paymentMethodType === 'BML' --> + <section class="row ng-hide" ng-show="paymentMethodType === 'VisaCheckout'"> + <!-- ngIf: vcInfo.apiKey !== undefined && vcInfo.callId!==undefined && creditCardInfo!==undefined --> + <figure class="wag-cac-paymentvisabtn mt25 mb15" ng-show="!(vcInfo.apiKey !== undefined && vcInfo.callId!==undefined)"> + <img id="wag_cac_visa_checkout_btn" alt="Visa Checkout" class="v-button wag-cac-visacheckoutlarge img-responsive wag-btn-paypal wag-cac-visamobilebtn center-block" src="https://secure.checkout.visa.com/wallet-services-web/xo/button.png?height=47&width=288"> + <figcaption></figcaption> + <a class="v-learn v-learn-default wag-cac-tellme" href="javascript:;" data-locale="en_US">Tell Me More</a> + </figure> + </section> + <!-- ngIf: !(paymentMethod.availableOptions.indexOf('BML') !== -1 && paymentMethodType === 'BML') --><hr class="nav-justified pull-left mb0 ng-scope" ng-if="!(paymentMethod.availableOptions.indexOf('BML') !== -1 && paymentMethodType === 'BML')"><!-- end ngIf: !(paymentMethod.availableOptions.indexOf('BML') !== -1 && paymentMethodType === 'BML') --> + <wag:checkout-checkinfbut><!-- "(c) Walgreen Co. All rights reserved"--> +<!-- continue shipp address --> +<section class="row wag-cko-pad pb20"> + <section class="col-lg-12 col-md-12 col-sm-12 col-xs-12"> + <section class="row"> + <section class="col-sm-5 col-sm-push-7"> + <!-- ngIf: btnAddMode === 'add' --><section class="wag-pair-button-group mt20 pull-right ng-scope" ng-if="btnAddMode === 'add'" ng-show="paymentMethodType !== 'VisaCheckout'"> + <button id="wag-cko-sa-id-btn-sel-g" data-user-action="add" class="btn btn-primary wag-btn-primary wag-act-links wag-county-ckt-btn" ng-click="checkoutContinue()" title="Continue checkout"> Continue checkout</button> + </section><!-- end ngIf: btnAddMode === 'add' --> + <!-- ngIf: btnAddMode === 'BML' --> + <!-- ngIf: btnAddMode === 'book' --> + <!-- ngIf: btnAddMode === 'edit' --> + </section> + <!-- ngIf: paymentMethodType == 'BML' --> + </section> + </section> + <section class="col-lg-12 col-md-12 col-sm-12 col-xs-12 text-center mt40 visible-xs"> + <a href="/store/checkout/cart.jsp" title="Back to Cart"><strong>‹ Back to Cart</strong></a> + </section> +</section></wag:checkout-checkinfbut> + </aside> +</section> + +<section id="bmlOverlay" class="modal fade ng-scope" tabindex="-1" role="dialog" aria-labelledby="bmlOverlayLabel" aria-hidden="true"> + <section class="modal-dialog wag-modal-dialog"> + <section class="wag-modal-outer"> + <section class="modal-content wag-modal-content"> + <section class="modal-header wag-modal-header"> + <a href="javascript:;" title="close" class="close wag-close" data-dismiss="modal"><span aria-hidden="true"><span class="img-circle wag-close-circle"><span class="icon-XCircle wag-icon-XCircle-close"></span></span></span><span class="sr-only">Close</span></a> + + </section> + <span class="wag-cac-paypalfaq-hidden"> Beginning of dialog content </span> + <section class="modal-body" style="overflow-y:hidden" id="bmlOverlayLabel"> + <iframe id="wag-cac-bml-terms-iframe" title="billmelater" class="wag-bml-iframe"></iframe> + </section> + <span class="wag-cac-paypalfaq-hidden"> End of dialog content</span> + <section class="modal-footer wag-modal-footer"> + <button type="button" class="btn wag-btn-default" data-dismiss="modal">Close</button> + </section> + </section> + </section> + </section> +</section> +<section class="modal fade ng-scope" id="paypaySeeTermsPopUp" tabindex="-1" role="dialog" aria-labelledby="paypaySeeTermsPopUpLabel" aria-hidden="true"> + <section class="modal-dialog wag-modal-dialog"> + <section class="wag-modal-outer"> + <section class="modal-content wag-modal-content"> + <section class="modal-header wag-modal-header"> + <a href="javascript:;" title="close" class="close wag-close" data-dismiss="modal"><span aria-hidden="true"><span class="img-circle wag-close-circle"><span class="icon-XCircle wag-icon-XCircle-close"></span></span></span><span class="sr-only">Close</span></a> + + </section> + <section class="modal-body" style="overflow-y:scroll" id="paypaySeeTermsPopUpLabel"> + <ul id="myTab" class="nav nav-tabs"> + <li id="tab1" class="active"> <a href="#Paypal_FAQ" data-toggle="tab">Paypal FAQ</a> </li> + </ul> + <section id="myTabContent" class="tab-content wag-paypal-tab-con"> + <section class="row pt20"> + <section class="col-lg-12 col-md-12 col-sm-12 col-xs-12"> + <span class="wag-cac-paypalfaq-hidden"> Beginning of dialog content </span> + <p>Walgreens.com accepts PayPal for online store and W Photo mail-only orders. At this time, you cannot use PayPal for prescriptions or contact lens orders.</p> + <ul class="list-group wag-bullets ml15"> + <li>What is PayPal?</li> + <li>Why should I use PayPal?</li> + <li>Is PayPal secure?</li> + <li>What information is exchanged between Walgreens and PayPal?</li> + <li> Does it cost money to sign up for PayPal?</li> + <li>If I already have a PayPal account, do I have to sign up again to use it at Walgreens.com?</li> + <li>How do I sign up for a PayPal account?</li> + <li>What information is required to open a personal PayPal account?</li> + <li>If I choose to pay for this order through PayPal, will I have to pay for all future transactions that way?</li> + <li>Can I use PayPal for all orders on Walgreens.com?</li> + <li>Can I use PayPal at my local Walgreens store?</li> + <li>If I sign up for PayPal through Walgreens.com, can I use it for purchases on other web sites?</li> + <li>Who do I contact if I have a question about a product I purchased on Walgreens.com and paid for using PayPal?</li> + <li>If I have paid for a Walgreens purchase online with PayPal and need to return the item, can I get a refund at my local Walgreens?</li> + <li>If I already have a PayPal account, will my Walgreens.com order be shipped to the address stored on PayPal, or can I choose to have it shipped to a different address during checkout?</li> + </ul> + <p class="m0"><strong>What is PayPal?</strong></p> + <p>PayPal is a global online payment system. PayPal is a secure way to send and receive money online with or without entering a credit card number.</p> + <p class="m0"><strong>Why should I use PayPal?</strong></p> + <p>PayPal lets anyone with an e-mail address securely send online payments without a credit card. Personal accounts are free.</p> + <p class="m0"><strong>Is PayPal secure?</strong></p> + <p>Yes. PayPal uses SSL technology to keep your information safe. The recipient does not see your credit card or bank account number.</p> + <p class="m0"><strong>What information is exchanged between Walgreens and PayPal?</strong></p> + <p>Your privacy is very important to us. We only share with PayPal the minimum information necessary to process and ship your order. We will continue to protect and secure your information as we always have.</p> + <p class="m0"><strong>Does it cost money to sign up for PayPal?</strong></p> + <p>No. Opening a PayPal account is free. Personal accounts can send and receive money for free.</p> + <p class="m0"><strong>If I already have a PayPal account, do I have to sign up again to use it at Walgreens.com?</strong></p> + <p>No, there's no need to register again. When you check out, choose Pay with your PayPal account on the Payment Options page. You'll be taken to the PayPal login page. Log in as usual, then you'll be returned to Walgreens.com to finish checking out.</p> + <p>For online photo orders, PayPal can only be used with the mail delivery option. Select the shipping option (instead of in-store pickup) and click on the Check out with PayPal button on the Order Info page.</p> + <p class="m0"><strong>How do I sign up for a PayPal account?</strong></p> + <p>Once you select PayPal as the payment option for your order, you will be taken to the PayPal site to complete their account registration form. After completing the form, you will automatically be returned to Walgreens.com.</p> + <p class="m0"><strong>What information is required to open a personal PayPal account?</strong></p> + <p>To open a personal PayPal account, you must provide your name, address, phone number and e-mail address. To make payments using PayPal, you must provide a credit card or debit card number or bank account information. PayPal accepts VISA, MasterCard, Discover and American Express and Diners Club cards with the MasterCard logo for this purpose.</p> + <p class="m0"><strong>If I choose to pay for this order through PayPal, will I have to pay for all future transactions that way?</strong></p> + <p>No, you have the option of choosing PayPal or another payment method for each order.</p> + <p class="m0"><strong>Can I use PayPal for all orders on Walgreens.com?</strong></p> + <p>No, we cannot accept PayPal payments for prescriptions or contact lens orders. If you wish to pay for general merchandise with PayPal, you must put prescription, and/or contact lens purchases in a separate order.</p> + <p>For W Photo purchases, PayPal can only be used for orders that you choose to have mailed to you. It cannot be used toward photo orders that you schedule for in-store pickup.</p> + <p class="m0"><strong>Can I use PayPal at my local Walgreens store?</strong></p> + <p>Sorry, no. PayPal is only available for online purchases.</p> + <p class="m0"><strong>If I sign up for PayPal through Walgreens.com, can I use it for purchases on other web sites?</strong></p> + <p>Yes. PayPal is accepted by many online merchants and online auction sites.</p> + <p class="m0"><strong>Who do I contact if I have a question about a product I purchased on Walgreens.com and paid for using PayPal?</strong></p> + <p>Please call Walgreens customer service at (877) 250-5823 with any questions regarding items you have purchased on Walgreens.com, regardless of the payment method you used.</p> + <p>For questions about billing for your PayPal purchases on Walgreens.com, please contact PayPal.</p> + <p class="m0"><strong>If I have paid for a Walgreens purchase online with PayPal and need to return the item, can I get a refund at my local Walgreens?</strong></p> + <p>It depends. For online store orders, you may choose to have your refund applied to the credit card associated with your PayPal account, in cash or as a Walgreens Gift Card. See our refund policies for more information.</p> + <p>For online photo orders, please send an email to our customer service team at service@photo.walgreens.com or call us toll-free at 866-264-2910, 24 hours a day 7 days a week.</p> + <p class="m0"><strong>If I already have a PayPal account, will my Walgreens.com order be shipped to the address stored on PayPal, or can I choose to have it shipped to a different address during checkout?</strong></p> + <p>You may have your order shipped to any U.S. address. (See general Shipping Information for exceptions.) PayPal is simply a payment option you may choose instead of credit or debit cards.</p> + <span class="wag-cac-paypalfaq-hidden"> End of dialog content </span> + </section> + </section> + </section> + </section> + <section class="modal-footer wag-modal-footer"> + <button type="button" class="btn wag-btn-default" data-dismiss="modal">Close</button> + </section> + </section> + </section> + </section> +</section></section> + </div> + </section> + <!-- BR pop up --> + <section id="learn-more1" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="learn-more1" aria-hidden="true"> + <section class="modal-dialog wag-modal-dialog wag-cac-whynot"> + <section class="wag-modal-outer"> + <!-- <button type="button" >×</button> --> + <section class="modal-content wag-modal-content"> + <section class="modal-header wag-modal-header"> + <a href="javascript:;" title="close" class="close wag-close" data-dismiss="modal"><span aria-hidden="true"><span class="img-circle wag-close-circle"><span class="icon-XCircle wag-icon-XCircle-close"></span></span></span><span class="sr-only">Close</span></a> + + </section> + <section class="modal-body"> + <!-- <p class="wag-cart-br-ovl-p"><strong>Save, Earn, Redeem, in store and online!</strong></p> + <section class="row"> + <section class="col-lg-3 col-md-3 col-sm-3 col-xs-4"> + <figure> + <img ng-src="/images/adaptive/share/images/broverlay.png" alt="overlay" class="img-responsive" /><figcaption></figcaption> + </figure> + </section> + <section class="col-lg-9 col-md-9 col-sm-9 col-xs-8"> + <p>Once you're a member, you can:</p> + <ul class="list-group wag-bullets ml15"> + <li><strong>Save</strong> on sale items with card</li> + <li><strong>Earn</strong> points on thousands of items each week</li> + <li><strong>Redeem</strong> instantly with as few as 5,000 points</li> + </ul> + </section> + </section> + <p class="m0">See terms and conditions for full details.</p>--> + <h4 class="text-primary"><strong>Redemption Details</strong></h4> + <section class="row"> + <section class="col-lg-12 col-md-12 col-sm-12 col-xs-12 pl30"> + <ul class="list-group wag-bullets ml15"> + <li>Points are converted into a dollar amount and deducted from your order total.</li> + <!--earnAndBurnGoLive FALSE--> + <!-- ngIf: brInfo.earnAndBurnGoLive === false --> + <!--earnAndBurnGoLive FALSE--> + <!--earnAndBurnGoLive TRUE--> + <!-- ngIf: brInfo.earnAndBurnGoLive === true --> + <!--earnAndBurnGoLive TRUE--> + <li>A payment method is still required to process your order, even if you apply points and your order total is $0.00.</li> + <li>Due to state and federal laws, points cannot be earned or redeemed on some items, including alcohol; dairy; tobacco; stamps; phone/prepaid cards/gift cards and more. See terms & conditions for full list of exclusions.</li> + </ul> + </section> + </section> + </section> + <section class="modal-footer wag-modal-footer"> + <button type="button" class="btn btn-primary wag-btn-primary close-page-turn" data-dismiss="modal">Close</button> + </section> + </section> + </section> + </section> + </section> + <section id="learn-more2" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="learn-more2" aria-hidden="true"> + <section class="modal-dialog wag-modal-dialog modal-lg wag-cac-whynot"> + <section class="wag-modal-outer"> + <!-- <button type="button" >×</button> --> + <section class="modal-content wag-modal-content"> + <section class="modal-header wag-modal-header"> + <a href="javascript:;" title="close" class="close wag-close" data-dismiss="modal"><span aria-hidden="true"><span class="img-circle wag-close-circle"><span class="icon-XCircle wag-icon-XCircle-close"></span></span></span><span class="sr-only">Close</span></a> + + <span class="sr-only">Why not - open stimulated dialog </span> + </section> + <section class="modal-body"> + <section class="row"> + <section class="col-lg-12 col-md-12 col-sm-12 col-xs-12 p0"> + <section class="col-lg-3 col-md-3 col-sm-3 col-xs-4 p0"> + <figure><img ng-src="/images/adaptive/share/images/reward_br.png" class="img-responsive" alt="Reward" src="/images/adaptive/share/images/reward_br.png"><figcaption></figcaption></figure> + </section> + <section class="col-lg-9 col-md-9 col-sm-9 col-xs-8"> + <h4 class="text-primary"><strong>Why can't I redeem points?</strong></h4> + </section> + </section> + <ul class="list-group wag-bullets pull-left wag-cac-whycant"> + <li>You may not have enough points to redeem at this time.</li> + <li>Points cannot be redeemed on some items.</li> + <li>There may be an issue with your membership.</li> + + </ul> + </section> + <p>Need help? Call Customer Service at (855) 225-9225.</p> + </section> + <section class="modal-footer wag-modal-footer"> + <button type="button" class="btn btn-primary wag-btn-primary close-page-turn" data-dismiss="modal">Close</button> + </section> + <span class="sr-only"> End of dialog content </span> + </section> + </section> + </section> + </section> + <!-- BR pop up --></wag:payment-method-app> +</section></section> + </section> + <wag:footer> + <section id="footer"><wag:footer> +<footer> +<section class="col-lg-12 col-md-12 col-sm-12 col-xs-12 wag-footer-copyrightsdetails text-center wag-cac-foo-bor"> +<section class="wag-cac-foo-sec"> +<article class="wag-footer-copyrightdetailsleft"> +<span class="wag-cac-foo-show wag-cac-foo-hide center-block wag-cac-foo-link"> +<a href="/topic/help/general/noticeprivacypractices.jsp?foot=privacy" test-event="ftr_Notice of Privacy Policy" title="Notice of Privacy Practices"> Notice of Privacy Policy |</a> +<a href="/topic/help/generalhelp/termsofuse.jsp?foot=terms" test-event="ftr_Terms of Use" title="Terms of Use">Terms of Use </a><br> +<a href="/topic/help/customerservicehelp/customer_service_help_main.jsp?foot=customer_service" test-event="ftr_Customer Service" title="Customer Service">Customer Service |</a> +<a href="/topic/help/generalhelp/privacyandsecurity.jsp?foot=security" test-event="ftr_Online Privacy & Security" title="Online Privacy & Security">Online Privacy & Security</a> +</span> + +<ul class="wag-cac-foo-show"> +<li><a href="/topic/help/general/noticeprivacypractices.jsp?foot=privacy" test-event="ftr_Notice of Privacy Practices" title="Notice of Privacy Practices">Notice of Privacy +Practices</a>|</li> +<li><a href="/topic/help/generalhelp/termsofuse.jsp?foot=terms" test-event="ftr_Terms of Use" title="Terms of Use">Terms of Use</a>|</li> +<li><a href="/topic/help/customerservicehelp/customer_service_help_main.jsp?foot=customer_service" test-event="ftr_Customer Service" title="Customer Service">Customer Service</a>|</li> +<li><a href="/topic/help/generalhelp/privacyandsecurity.jsp?foot=security" test-event="ftr_Online Privacy & Security" title="Online Privacy & Security">Online Privacy & +Security</a></li> + +</ul> +<p class="col-lg-12 col-sm-12 col-md-12 p0">© <span class="hidden-xs">Copyright</span> 2016 Walgreen Co. 200 Wilmot Rd. Deerfield IL All rights reserved.</p> + + + + +</article> + +</section> +<article class="wag-footer-norton"> +<figure><img src="/images/adaptive/share/images/norton_logo.png" alt="logo"><figcaption></figcaption></figure> +</article> + +</section> +<script type="text/javascript"> +function createCJCookie(name,days,pid) { +var expires = ""; +if (days) { +var date = new Date(); +date.setTime( date.getTime()+( days*24*60*60*1000 ) ); +var expires = "; expires="+date.toGMTString(); +} +document.cookie = name+"="+pid+expires+"; path=/"; +} +function gup(name) { + var regexS = "[\\?&]"+name+"=([^&#]*)"; + var regex = new RegExp( regexS ); + var tmpURL = window.location.href; + var results = regex.exec( tmpURL ); + if( results == null ) + return ""; + else + return results[1]; +} +// load the below lines on window.onload if this jsp file is getting loaded before the window.onload +var pid = gup('PID'); +if(pid!='undefined' && pid!=''){ +createCJCookie('cj',7,pid); +} +</script> +<script type="text/javascript"> +<!-- +var sicookiename = 'siTracker'; +var cookieAge = 30*24*60*60*1000; +var siEnabled = false; +var cicookienameCpn = 'ciTrackerCpn'; +var cicookienameSrc = 'ciTrackerSrc'; +var cookieAge = 30*24*60*60*1000; +var ciEnabled = true; +//--> +</script> + +<!-- <script type="text/javascript" src="/common/navigation/tracking_si_ci.js"></script>--> + +<!-- no si --> +<script type="text/javascript"> +function doPageOnLoad() { +if (typeof jsIndicator != 'undefined') { +if (document.getElementById("jsInd")) { +document.getElementById("jsInd").value = jsIndicator; +} +} + +} + +doPageOnLoad(); +</script><script type="text/javascript"> +/*<![CDATA[*/ +var fsLoc=document.location.href; +if (fsLoc.indexOf('http://www.walgreens.com')>-1){ +fsBaseUrl='http://img.walgreens.com'; +} else if (fsLoc.indexOf('https://www.walgreens.com')>-1){ +fsBaseUrl='https://www.walgreens.com'; +} else { +fsBaseUrl=''; +} +</script> +<script src="/foresee/foresee-trigger.js"></script> +<script src="/share/jslib/foresee/foresee-support.js"></script> +</footer> +</wag:footer> +</section> +</wag:footer> +<!-- The below code added for BAS-24281 --> +<script> + +var MinForeseeRef = "https://www.wag-static.com/share/adaptive/walgreens/js/ForeseeScript.min-46732ae0b688a52e81f71825b63cefdc.js"; + +_satellite.pageBottom(); +</script> +<div style="display:none"><a href="#" id="omnitureLink" title="omnitureLink"><span style="display:none">omnitureLink1</span></a></div> +<script type="text/javascript" src="https://www.wag-static.com/share/jslib/omn_track/device-f2531f426e83ef8a9380ee7f0e46c6d4.js"></script> + </section> + </section> + <script> + var sessionOverlay = false; + </script> + <script> + sessionOverlay = true; + </script> + <section class="modal fade" id="wag-ssn-tout-overlay" tabindex="-1" role="dialog" aria-labelledby="modal-time-out-Session" aria-hidden="true"> +<section class="modal-dialog wag-modal-dialog" id="modal-time-out-Session"> +<section class="wag-modal-outer"> +<span class="sr-only"> Beginning of dialog content </span> +<section class="modal-content wag-modal-content"> +<a href="" title="close" class="close wag-close" data-dismiss="modal"><span aria-hidden="true"><span class="img-circle wag-close-circle"><span class="icon-XCircle wag-icon-XCircle-close"></span></span></span><span class="sr-only">Close</span></a> +<section class="modal-body"> +<section class="row"> +<section class="col-lg-12 col-md-12 col-sm-12 col-xs-12 text-center"> +<section class="wag-timeout-popup-logo"><figcaption></figcaption></section> +<section id="modal-time-out-Session"> +<strong>Are You Still There?</strong> +<p>Due to inactivity, you will be signed out of Walgreens.com soon.<br>Please choose to continue your session or sign out now.</p> +</section> +</section> +</section> +</section> +<section class="modal-footer wag-modal-footer row m0 wag-pair-buttons-center"> +<section class="wag-pair-buttons"> +<button type="button" class="btn btn-primary wag-btn-primary" data-dismiss="modal" title="Continue session">Continue session</button> +<button type="button" class="btn btn-default wag-btn-default" title="Sign out" id="wag-ssn-tout-overlay-logout">Sign out</button> +</section> +</section> +</section> +<span class="sr-only"> End of dialog content </span> +</section> +</section> +</section><script> + function estarElementData(){ + $('#wag-cac-estara').html('<a id="wag-helpwid-livechat" href="javascript:webISChatPop(\'Template=992494\');" title="Need help? Live Chat"><img src="https://as00.estara.com/webcare/public/linkimage.php?ulbid=992494" border="0" alt="Click to Chat"/></a><p><span class="wag-cac-nhead-hide">Or call</span><span class="wag-cac-nhead-show wag-cac-nhead-dis">Call</span> us toll free, 24/7: <span class="wag-cac-nhead-hide"><strong>(877)250-5823</strong>.</span><a class="wag-cac-nhead-show" href="tel:1-877-250-5823" title="1-877-250-5823"><strong>1-877-250-5823</strong></a></p>'); } + function lazyLoadFooter(){ + estarElementData(); + var footerPath = "/assets/footer_cac/template/Footer.jsp"; + $("#footer").load(footerPath,{"currentPath":"--store--checkout--optimizedcheckout--payment_method.jsp"}); + + /****** Loading Live chat *******/ + var estaraInitiateCallLiveChat = document.createElement("script"); + estaraInitiatmentById("antiClickjack"); + antiClickjack.parentNode.removeChild(antiClickjack); +} else { +top.location = self.location; +} +var isOnloadCompleted = false; +function toCheckOnload(){ +isOnloadCompleted = true; +} +if (window.attachEvent){ +window.attachEvent('onload', toCheckOnload); +}else{ +window.addEventListener('load', toCheckOnload, false); +} +</script> + +<script src="/share/jslib/custom/advertise.js" type="text/javascript"></script><div class="midReplacerCard"><div class="midReplacerCard-profile"><div class="midReplacerCard-thumb"></div><div class="midReplacerCard-info"><div class="midReplacerCard-name"></div><div class="midReplacerCard-id"></div><div class="midReplacerCard-desc"></div></div><div class="midReplacerCard-notable"></div></div></div><input type="hidden" id="wag-ad-blocker"></body></html>
diff --git a/chrome/test/data/autofill/heuristics/input/30_cc_checkout_macys.com.html b/chrome/test/data/autofill/heuristics/input/30_cc_checkout_macys.com.html new file mode 100644 index 0000000..8dfa9b9 --- /dev/null +++ b/chrome/test/data/autofill/heuristics/input/30_cc_checkout_macys.com.html
@@ -0,0 +1,1315 @@ +<html class=" js no-touch svg no-firefox" lang="en"><head> +<title>Macy's Checkout</title> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<meta http-equiv="generator" content="JACPKMALPHTCSJDTCR"> +<meta http-equiv="X-UA-Compatible" content="IE=edge"> +<link href="/favicon.ico" rel="SHORTCUT ICON"> +<meta name="format-detection" content="telephone=no"> +<link rel="dns-prefetch" href="https://f.monetate.net"><link rel="dns-prefetch" href="https://sb.monetate.net"><script type="text/javascript" src="//s.thebrighttag.com/tag?site=YQClrLy&mode=sync&mode=v1&H=-1en8op7&cf=2848134%2C3417820"></script><script type="text/javascript" src="https://mpsnare.iesnare.com/snare.js"></script><script type="text/javascript" src="//s.thebrighttag.com/tag?site=YQClrLy&mode=sync&mode=v1&H=-1en8op7&cf=2564503"></script><script type="text/javascript" async="" src="https://www.google-analytics.com/plugins/ua/ec.js"></script><script type="text/javascript" src="//www.google-analytics.com/analytics.js"></script><script type="text/javascript" async="" src="https://magpie-static.ugc.bazaarvoice.com/magpiejs/2/magpie.js"></script><script type="text/javascript" async="" src="https://sb.monetate.net/js/1/a-de9c980b/p/macys.com/404156/g"></script><script type="text/javascript" src="https://www.macys.com/sns/web20/assets/combo/global.tiles.bootstrap_script-min.js?timenow=2.49.424-201601130730"></script> +<script type="text/javascript"> +Modernizr.addTest('firefox', function () { +return !!navigator.userAgent.match(/firefox/i); +}); +</script> +<script type="text/javascript" src="https://www.macys.com/js/min/mcom/base/McomBase.js?timenow=MonJan11230419EST2016&timenow=2.49.424-201601130730"></script> + +<script type="text/javascript"> +( function () { +if ( window.require ) { +var Globals = require( "globals" ); +if ( Globals ) { +Globals.setValue( "props", { +accessibleHeaderFlyoutEnabled: true, +addToAnyWishlistEnabled: true, +assetsHost: "https://www.macys.com", +baseHost: "http://www.macys.com", +bazaarVoiceURLQuickview: "//macys.ugc.bazaarvoice.com", +bvApiGamificationOrderReviewSubmitUrl: "https://api.bazaarvoice.com/data/submitreview.json?apiversion=5.4&passkey=6kqqk8mgo50i27p52wreirifj", +checkoutLoyaltyDecoupleEnabled : true, +colorwayPricingEnabled: true, +cookieDomain: ".macys.com", +currentReleaseProsPanelEnabled: true, +dycesCMIOServiceUrl: "sdp/rto/request/recommendations", +digitalCSREnabled: "true", +digitalCSR15kEnabled: "true", +gamificationReviewRefreshEnabled: "true", +gamificationShortReviewFlowEnabled: "true", +gamificationStatsTrayEnabled: "true", +gamificationTopReviewerEnabled: "true", +giftReturnsEnabled: "true", +guestWishListEnabled: true, +imageHost: "/img/ts/is/image/MCY", +ishipEnabled: true, +loyaltyFullEnrollmentUrl: "https://www.plenti.com/macys/sign-up", +loyaltyPreEnrollmentUrl: "https://www.plenti.com/macys/verify-card", +myAccountUrl: "https://www.macys.com/account/myaccount", +macysHome: "/index.ognc", +optimizedThumbnailEnabled:"true", +paypalEnabled: "true", +partnerFusionBaseURL: "https://citiretailservices.citibankonline.com", +production: true, +prosFallbackEnabled: "true", +prosInformantsEnabled: true, +prosPanelEnabled: true, +prosReturnsPanelEnabled: "true", +prosTrackingPixelEnabled: "true", +rcExperimentCookie: "265", +rcReactiveChatEnabled: "true", +rcControlCookie: "264", +rcNoHurryQnEnabled: "false", +rcPlentiEnabled: "true", +rcPlentiRedeemEnabled: "true", +rcPayPalEnabled:"true", +rcSignedInExperimentCookie: "1065", +rcSignedInControlCookie: "1064", +recommendationsEngineTimeout: "15000", +refactoredQuickBag: "true", +responsiveCssEnabled: false, +responsiveGlobalLayoutEnabled: true, +returnsNoPrinterEnabled: "false", +returnsPickupEnabled: "true", +returnsQuickviewEnabled: "true", +returnsVirtualReturnsEnabled: "true", +responsiveRegistryEnabled: "true", +rm2CoremetricsEnabled: "true", +rightNowURL:"https://www.customerservice-macys.com", +rnChatEnabled:"true", +sdpGrid: "cellB", +secureHost: "https://www.macys.com", +segmentationHost: "//segments.macys.com/?client=JS", +serPasswordStrengthEnabled: true, +serverCloneName: "macys-shopapp_prod_cellB_ma100mlvshp011_m01", +serverPhysicalName: "MA100MLVSHP011", +shoppingBagPath: "/bag/index.ognc", +SLCookie: false, +mMoneyEnabled: true, +mbMoneyEnhancementsEnabled: true, +snsArtifactsUrl: "https://www.macys.com/sns/web20", +spoQVZoomerEnabled: true, +tabletUIPixelWidthBreakpoint: 1024, +uslEnabled: true, +uslEnrollEnabled: true, +uslRedeemEnabled: true, +wishlistDisplayProductEnabled: false, +wishlistPurchaseTrackingEnabled: true, +wishlistPromoFilterPriorityEnabled: true, +wishlistProsEnabled: true, +wishlistShareEmailEnabled: true, +wishlistPrintUIEnabled: true, +authWebEnabled: false, +deliveryRepControlCookieValue : 1117, +deliveryRepTreatmentCookieValue : 1118, +deliveryRepGuestEnabled : true, +deliveryRepSignedinEnabled : true, +authwebUrl: "https://auth.macys.com/v3/oauth2/token", +authwebKey: "cGpqNjhwY2FtYmJ1cWIyODh5NmFuN3Y1Om1lVVlGRlJDYWhyOUtXRkRHdDZoUjR3Mg%3D%3D", +clientName: "ShopApp", +quickviewTreatmentPersistenceEnabled: "", +ocWalletAutoProvisionOffersEnabled:"false" +} ); +} +} +} )(); +</script> +<!-- Configuration and Segmentation logic here --> +<script type="text/javascript"> +(function() { +var Globals = require("globals"), +segmentation = require("segmentation"); +Globals.setValue('killswitchFlyout', true); +Globals.setValue('isRegistry', false); +Globals.setValue('internationalMode', false); +Globals.setValue('isChanel', false); +Globals.setValue('baseUrlLegacyAssets', 'https://www.macys.com'); +Globals.setValue('baseUrlLegacyAssetsJsMin', 'https://www.macys.com/js/min'); +Globals.setValue('baseUrlLegacyAssetsStylesMin', 'https://www.macys.com/styles/min'); +require.config({baseUrl: 'https://www.macys.com'}); +segmentation.detect([1,2], function(segment) { }); +})(); +</script> +<!-- TODO: change -rc after 15E breakpoint fix --> +<link href="https://www.macys.com/styles/min/mcom/base/macys-base.css?timenow=2.49.424-201601130730" type="text/css" rel="stylesheet"> +<!--[if lt IE 9]><link href="https://www.macys.com/styles/min/mcom/base/ie8-16col-grid-foundation-4.css" type="text/css" rel="stylesheet"><![endif]--> +<!--[if lt IE 10]><link href="https://www.macys.com/styles/min/mcom/base/macys-base-ie.css" type="text/css" rel="stylesheet"><![endif]--> +<link href="https://www.macys.com/styles/min/mcom/pages/rcCheckout/guest.css?timenow=MonJan11230419EST2016&timenow=2.49.424-201601130730" rel="stylesheet" type="text/css" charset="utf-8"> +<script type="text/javascript" src="//libs.coremetrics.com/v4.18.106/eluminate.js?timenow=2.49.424-201601130730"></script> +<script type="text/javascript" src="https://www.macys.com/sns/web20/assets/combo/global.tiles.minimal_base_analytics-min.js?timenow=2.49.424-201601130730"></script> +<script type="text/javascript"> +var pageTagNames = ["cmCreateManualImpressionTag", "cmCreateManualLinkClickTag", "cmCreateManualPageviewTag", "cmCreateElementTag", "cmCreatePageElementTag", "cmCreateProductElementTag", "cmCreateConversionEventTag", "cmCreateTechPropsTag", "cmCreatePageviewTag", "cmCreateDefaultPageviewTag", "cmCreateProductviewTag", "cmCreateOrderTag", "cmCreateRegistrationTag", "cmCreateSessionPropertyTag", "cmCreateErrorTag", "cmCreateCustomTag", "cmCreateShopAction5Tag", "cmCreateShopAction9Tag", "cmCreateBazaarViewTag", "cmCreateMasterMemberTag", "cmCreateUserErrorTag", "cmCreateDelayedShopTag", "cmCreateDivisionTag", +"cmSetClientID"]; +// for each cmCreate function we check if it actually exists and if not create an empty function +for ( var i = 0; i < pageTagNames.length; i++ ) { +if ( typeof window[pageTagNames[i]] === 'undefined' ) { +window[pageTagNames[i]] = function () {}; +} +} +cmSetClientID("90067660",false,"www3.macys.com","macys.com"); +</script><script src="https://tmscdn.coremetrics.com/tms/90067660/head.js?__t=1454963590882"></script><script language="javascript" type="text/javascript" src="https://libs.coremetrics.com/configs/90067660.js"></script><script language="javascript" type="text/javascript" src="https://www3.macys.com/cookie-id.js?fn=eluminate8659"></script> +<meta charset="utf-8"> +<meta name="viewport" content="width=device-width"> +<title>Macy's Checkout</title> +<script type="text/javascript" src="//s.btstatic.com/tag.js"> +{ site: "YQClrLy", mode: "sync" } +</script><script type="text/javascript" src="//s.thebrighttag.com/tag?site=YQClrLy&mode=sync&H=-1en8op7"></script><script> +var monetateT = new Date().getTime(); +(function() { + var p = document.location.protocol; + if (p == "http:" || p == "https:") { + var m = document.createElement('script'); m.type = 'text/javascript'; m.async = true; m.src = (p == "https:" ? "https://s" : "http://") + "b.monetate.net/js/1/a-de9c980b/p/macys.com/" + Math.floor((monetateT + 1604491) / 3600000) + "/g"; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(m, s); + } +})(); +</script><script type="text/javascript" src="https://macys.ugc.bazaarvoice.com/static/7129aa/bvapi.js"></script><script type="text/javascript" charset="utf-8" async="async" data-requirecontext="_" data-requiremodule="https://apps.nexus.bazaarvoice.com/Macys/7129aa/bv.js" src="https://apps.nexus.bazaarvoice.com/Macys/7129aa/bv.js"></script><script> +function targetPageParams() { + function getCookie(c_name) { var i,x,y,ARRcookies=document.cookie.split(";"); for (i=0;i<ARRcookies.length;i++) { x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("=")); y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1); x=x.replace(/^\s+|\s+$/g,""); if (x==c_name) { return unescape(y); } } }; + function allowedId() { var url = new String(window.location); if (getCookie("SignedIn") == "1") { return true; } else { return false; } }; + + var args = []; + + if (getCookie("macys_online_uid") && allowedId()) { args.push("mbox3rdPartyId=" + getCookie("macys_online_uid")) } + + if (getCookie("macys_online_uid") && allowedId()) { args.push("profile.uid=" + getCookie("macys_online_uid")) } + + if (allowedId()) { args.push("profile.visitorType=registered"); } else { args.push("profile.visitorType=guest"); } + + if (getCookie("shippingCountry")) { args.push("shippingCountry=" + getCookie("shippingCountry")) } + + if (typeof _$cV1 !== "undefined" && _$cV1) { args.push("profile.coreid6=" + _$cV1); } + + if (getCookie("SignedIn") && getCookie("SignedIn") == "1") { args.push("signedIn=true") } else { args.push("signedIn=false"); } + + var url = new String(document.location); + var match = ( (url || "").match('[?&]id=([^&]+)') ); + if (match && match.length) { + + id = match[1]; + args.push("user.categoryId=" + id); + + } else { + + match = ( (url || "").match('[?&]CategoryID=([^&]+)') ); + if (match && match.length) { + id = match[1]; + args.push("user.categoryId=" + id); + } + + } + + return args.join("&"); +} +</script> +<script src="https://www.macys.com/javascript/mbox.js"></script><style>.mboxDefault { visibility:hidden; }</style> +<script src="//cdn.tt.omtrdc.net/cdn/target.js"></script> +<script type="text/javascript">TNT.createGlobalMbox();</script><script src="https://macys.tt.omtrdc.net/m2/macys/mbox/standard?mboxHost=www.macys.com&mboxSession=1454963279737-764710&mboxPC=1454963279737-764710.24_2&mboxPage=1454963591817-967275&screenHeight=1200&screenWidth=1920&browserWidth=1920&browserHeight=1139&browserTimeOffset=-300&colorDepth=24&mboxXDomain=enabled&shippingCountry=US&mboxCount=1&profile.visitorType=guest&profile.coreid6=30141454963282213944533&signedIn=false&mbox=target-global-mbox&mboxId=0&mboxTime=1454945591895&mboxURL=https%3A%2F%2Fwww.macys.com%2Fchkout%2Frc%3FperfectProxy%3Dtrue&mboxReferrer=&mboxVersion=53" language="JavaScript"></script><script type="text/javascript" src="https://f.monetate.net/trk/4/s/a-de9c980b/p/macys.com/1591673808-0?mr=t1453829526&mi='2.763981267.1454963280492'&mt=!n&cs=!t&e=!(gr,viewPage,gt)&pt=unknown&cv=(disjointGroup:'17',macys_online_uid:'10719531315')&r=''&sw=1920&sh=1200&sc=24&j=!f&tg=!(!(6501,'30141454963282213944533'),!(3241,'10719531315'),!(5183,'()'))&u='https://www.macys.com/chkout/rc%3FperfectProxy%3Dtrue'&fl=!f&hvc=!t&eoq=!t" charset="utf-8" async=""></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="mcomRcBase/guest/CheckoutStart" src="/js/min/mcom/features/rcCheckout/guest/CheckoutStart.js?timenow=2.18.0-SNAPSHOT"></script><script src="//gateway.answerscloud.com/macys/production/gateway.min.js" type="text/javascript" async="true" data-vendor="acs" data-role="gateway"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="//gateway.answerscloud.com/macys/production/foresee/foresee_trigger.js?v=R035F75269C" src="//gateway.answerscloud.com/macys/production/foresee/foresee_trigger.js?v=R035F75269C"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="https://scontent.webcollage.net/macys/smart-button?v=R035F75269C" src="https://scontent.webcollage.net/macys/smart-button?v=R035F75269C"></script><script type="text/javascript" src="//macys.widget.custhelp.com/euf/rightnow/RightNow.Client.js"></script><script type="text/javascript" src="//gateway.answerscloud.com/macys/production/foresee/foresee_surveydef.js?v=R035F75269C"></script><script charset="utf-8" src="https://www.customerservice-macys.com/euf/assets/js/ee/coremetrics.oracleEE.js"></script><script charset="utf-8" src="https://www.customerservice-macys.com/euf/assets/js/ee/chat_rules_init.js"></script><link id="yui__dyn_1" type="text/css" charset="utf-8" rel="stylesheet" href="https://macys.widget.custhelp.com/euf/assets/css/syndicated_widgets/standard/ConditionalChatLink.css"></head><body class="?"><div class="mboxDefault" id="mbox-target-global-mbox-1454963591866-574877" style="visibility: visible; display: block;"></div><div style="visibility: hidden; display: none" id="mboxImported-default-target-global-mbox-0"><!-- Offer Id: 226987 --><script type="text/javascript"> +/*mboxHighlight+ (1of2) v1 ==> Response Plugin*/ +window.ttMETA=(typeof(window.ttMETA)!='undefined')?window.ttMETA:[];window.ttMETA.push({'mbox':'target-global-mbox','campaign':'','experience':'','offer':''});window.ttMBX=function(x){var mbxList=[];for(i=0;i<ttMETA.length;i++){if(ttMETA[i].mbox==x.getName()){mbxList.push(ttMETA[i])}}return mbxList[x.getId()]} +</script><!-- Offer Id: 322711 --><script type="text/javascript"> +(function(){ + + var timeout=3000000; + var timer=500; + var pageProductId=0; + var pageCartId=0; + var orderConfirmId=0; + var productList=[]; + + //Initialise the productList:[],elements + function init(){ + productCatalogue(); + mboxDefineFunc(); + + //console.log("hellooooo"); + + if(location.href.indexOf('/shop/product/') != -1){ + var regex=/\?ID=([a-z0-9\-]+)\&?/i; + pageProductId = location.href.match(regex)[1]; + domMnaipulation(); + } + else if(location.href.indexOf('/chkout/confirm') != -1){ + confirmPage() + } + }; + + function productCatalogue(){ + productList = [155705,213852,213864,213954,216079,230394,230395,231947,231948,232170,234592,237396,239948,239952,239955,239956,244867,246909,249714,252151,252546,252548,254688,259280,259979,271394,271395,271399,271405,271407,271409,271411,271414,271427,271428,271429,271430,271432,271434,271435,271437,271440,271442,271443,271444,271445,275828,282375,282584,284506,286260,288386,290782,292614,293165,293230,296186,296719,297639,298047,299218,301438,303995,304071,304073,304086,304094,304101,304123,304125,304126,304127,304147,304166,304214,304218,304223,304229,304242,307071,308197,316164,316228,317218,317318,317913,317914,317915,318167,318171,318347,318348,318352,318883,320861,321357,321358,321400,321408,321410,321639,321640,322061,322697,322702,322983,322984,323008,323010,323014,323016,323018,323019,323028,323030,323035,323039,323043,323073,323076,323078,323079,323087,323102,323134,323140,323141,323153,323155,323157,323158,323163,323165,323166,323185,325215,325317,325318,328914,333321,333322,334799,335263,335270,335518,335597,335600,337783,337803,339000,339004,339721,339733,339996,340000,340564,340565,340573,341037,341045,341182,341186,341187,341240,341241,341242,341244,341245,341246,341670,341688,341693,341887,341889,341921,342728,342734,342860,343010,343585,343595,343598,343686,343838,343972,344216,344222,344223,344496,345275,345301,345310,345314,345318,345383,345418,345609,345643,345872,346034,346510,346529,346541,346546,346558,347118,347120,348458,348651,348700,348729,348806,348807,348808,348809,348810,348894,348898,349009,349026,349592,350517,350519,350526,350533,350574,350584,350586,350588,350594,350608,350648,350668,351664,351665,352249,352251,352395,352397,352631,352836,352866,352874,352876,352892,352902,352948,352962,353959,353960,353961,353963,353964,353966,354679,354680,354684,354924,355419,355421,355509,355549,355843,355844,358200,358201,358208,358210,358230,358254,358256,358258,358303,358304,358306,358308,358392,359169,359824,359963,359964,360083,360084,360130,360141,361132,361542,362947,362979,363225,363226,363361,363362,363363,363364,363365,363366,363368,363369,363371,363372,366289,367792,367793,367794,367795,369011,369283,369284,369570,369758,369759,370235,370405,370408,370412,370464,370499,370512,370546,370550,371026,371231,372022,372023,372024,372025,373194,373195,373202,375751,378849,378850,379775,379776,380011,381388,381404,381405,381866,383084,383085,383108,383109,383110,383111,383371,383372,383375,383482,383483,383484,383485,384089,384101,384102,384393,385011,385571,385572,385980,386002,386003,386021,386065,386553,387658,387690,390007,390009,390011,390013,390778,390780,390782,395183,395236,395238,395240,395252,395254,395258,395260,396638,398622,399034,399036,399038,399913,399929,399979,399983,399984,399985,400020,400059,400061,400062,400063,403000,403278,403279,403280,403281,403283,403286,403287,403288,403289,403296,403307,403314,403315,403316,403317,403318,403331,403332,403341,403342,403343,403344,403345,403349,403350,403351,403352,403383,403386,403389,403405,403407,403549,403551,403553,403555,403557,403608,403614,403616,405688,405700,406931,406992,407072,407088,407277,407283,407285,409872,409873,409958,410033,410035,410037,410930,411104,411106,412135,413919,413920,413921,413922,413928,413929,414231,414233,414479,415220,415500,415502,415503,416019,416663,416665,416688,416732,416736,416957,416958,416960,416961,416962,416963,416964,417333,417833,417835,417849,417851,418664,418669,418792,418849,418850,418851,419836,419837,419838,419840,419951,419956,419968,419970,420467,421529,422132,422134,422136,422357,422358,422359,422361,422362,422363,422466,422468,422812,423002,423004,423087,424481,424483,424484,426869,427033,427068,427070,428854,428857,428858,428859,430917,431664,433001,433319,434942,435488,435491,435526,435538,436021,436044,436546,436547,436548,436570,437192,437388,439653,439654,439655,439666,439932,439933,440063,440064,440104,440204,440836,440949,440950,440979,441216,441442,441935,441936,441937,441938,442845,442876,443444,443455,444324,444547,444548,444550,444551,444553,444554,444555,444556,444557,444558,444559,444560,444561,444562,444563,444564,444565,444862,444951,444954,445081,445194,445195,445604,445605,445606,445607,445608,445609,445610,446281,446284,447176,447177,447178,447179,447184,447185,447186,447187,447188,447854,448013,448036,448037,448236,448788,449113,449114,449425,449426,449432,450324,450325,450958,450959,450960,451258,453473,454210,454211,454212,454213,456341,456342,456343,459802,459821,459827,464513,465832,465837,465839,467828,469671,470493,470494,470495,471652,471654,471655,471656,471657,471871,471872,471874,471883,471884,473056,473305,473471,473530,473608,473609,473672,473673,473750,473751,473758,474807,475749,476121,477159,477330,477351,477352,477780,477783,477788,477985,477986,477987,478015,478653,479646,479651,480067,480068,480069,480070,480074,480883,481697,481698,481894,482381,482382,482423,482424,483490,483491,484212,484427,484428,484495,484973,485281,485294,486150,487314,487462,488003,488012,488043,488047,488050,488067,488488,488503,488883,488887,490546,490949,491011,491014,491015,491016,491017,491024,491026,491027,491028,491029,491030,491033,491050,491052,491054,491377,491381,491382,492140,493035,493044,493152,493644,493645,493648,494123,494571,494575,494605,494829,494830,494835,494839,494840,494851,494914,494925,494927,494946,495086,495088,495754,495761,495917,495918,496771,496772,497581,497585,497618,497999,498000,498001,498002,499453,499457,499463,500486,500488,501717,501718,501976,502471,502936,502937,502944,502993,503088,503089,503126,503846,503875,504217,504275,504305,504353,504409,504415,504416,504507,504508,504515,504568,504569,504577,504962,504963,506032,506862,506863,507850,508097,508144,508145,508148,508149,508184,508494,508518,508550,508551,508606,508608,510054,510055,510056,510068,510135,510136,510137,510138,510199,510836,511057,511419,511420,511421,513062,513828,513831,514696,518190,518191,519271,519329,519400,519402,519434,519444,519613,519915,519954,519997,520000,520001,520005,520022,520357,520858,521148,521149,521153,521154,521165,521166,521419,521421,521617,521707,521708,524735,524736,524741,524742,524743,524744,524745,525013,525708,525730,525731,525732,525733,527847,528281,528283,528284,528285,528286,528287,528288,528289,528291,529035,531706,531923,531924,531926,531930,531948,531951,531952,531955,531956,531957,531958,531959,531960,531961,531963,531970,531971,531972,531973,531974,531975,531976,531977,531978,531979,531983,531984,531985,531986,531987,531988,531989,531990,531991,531992,532035,532110,532111,532150,535081,540322,542377,542378,543426,543427,543912,543913,543914,543915,544577,544578,544579,544580,545222,545255,545778,545782,545844,545845,545846,545847,545850,545851,546723,546725,546726,546756,546881,547179,547180,547181,548180,548181,548183,548184,549706,549916,549917,549920,549925,550389,550390,550391,550392,550393,550400,550405,550570,550571,550581,550623,550624,550625,550626,550627,551711,551712,551714,551716,551720,551729,551733,552644,554840,554841,554842,554843,554844,554845,554846,554847,555065,555145,555146,555318,555319,555350,555351,555352,555353,555355,556091,556092,556093,556584,556585,556681,556683,556851,556859,556860,557301,557302,558100,558101,558277,559050,559051,559052,559053,559054,559055,559056,560514,560515,560822,561881,561885,561886,562160,562165,562946,565219,565220,565221,565222,565223,565226,566190,566192,566699,566700,566701,566704,566710,566721,567146,567154,567965,568593,568624,568625,568979,568980,570384,570385,570386,570387,570411,570412,570413,570414,570415,570416,570417,570456,570458,570459,570460,570461,570527,570533,570650,570651,570736,570737,570739,570756,570774,570775,570776,570777,572030,572033,572036,572038,572039,572045,572046,572047,572048,572068,572069,572070,572072,572073,572074,572075,572076,572077,572078,572092,572094,572095,572239,572246,574134,574174,574697,574818,574976,574982,574983,574985,575434,575435,575436,575591,575593,575594,575595,575596,575597,575598,575599,575600,575601,575832,575833,575841,575842,575965,576027,576028,576029,577816,577882,577883,578368,578534,578555,578717,578721,578722,578726,578727,578728,578729,578730,578739,578740,578741,578742,578743,578744,578745,578869,578870,578871,578993,578994,578995,579612,579613,579614,579622,579629,579709,579710,579711,579712,579713,580225,580253,582411,582414,582419,582423,582433,582435,582552,582580,582631,582742,582743,582744,582745,582746,582747,582748,582796,582797,582798,582799,582821,582822,583127,583200,583419,583420,583421,583422,583423,583499,583500,583501,583502,583555,583556,583557,583558,583559,583560,583561,583662,583916,585601,585602,585987,586244,586394,586395,586450,586451,586704,586705,586706,586707,586896,587329,587331,587332,587333,589390,589578,589606,589638,589761,591585,591586,591587,591600,591601,591612,592177,592178,592179,592496,592497,592696,592697,592698,592779,592780,593233,593268,593269,593708,593709,594449,595021,595054,595720,595785,595972,595973,595975,595976,595977,596174,596175,597695,597696,597846,599295,599296,599298,599782,599843,599844,599995,599996,600013,600017,600018,600773,600774,600792,601946,602607,602608,602694,602695,602696,602906,602960,603111,603335,603336,603654,603655,603657,604829,604830,604831,604909,604910,604911,604912,604932,604946,605136,605186,605187,605214,605215,605228,605256,605264,605267,605272,605274,605284,605290,605295,605299,605307,605317,605323,605324,605325,605326,605436,605487,606207,606208,606246,606248,606249,606603,606604,606663,606664,606670,606679,606680,606681,606718,606871,607036,607037,607038,607039,607359,607360,607413,607414,607415,607640,607641,607814,607817,607818,607819,607908,607971,608006,608007,608110,608111,608112,608146,608271,608272,608274,608278,609253,609254,609255,610115,610121,610135,610136,610665,611453,611454,611566,611936,611937,611938,611939,611940,611941,611942,611943,612043,612080,612087,612312,612506,612507,612515,612516,612524,612800,612801,614017,614018,614019,614020,614022,614024,614027,614028,614029,614030,614031,614032,614033,614034,614035,614036,614037,614038,614039,614040,614041,614042,614043,614044,614045,614136,614137,614138,614139,614140,614167,614235,614270,614509,614510,614978,614979,615313,617467,618340,618493,620874,620875,621278,621302,621401,621404,621641,621642,623964,624107,624108,624109,624110,624928,625150,625728,625729,625730,625964,626385,626386,626976,626987,627004,627154,627155,627156,627157,627158,627159,627160,627161,627162,627163,627913,629350,629351,629633,629931,629963,630147,630381,631555,632201,632212,632214,632216,632217,632218,633180,633508,633509,633867,634129,634154,634155,634156,634157,634158,634159,634160,634217,634436,634437,634438,634439,635069,635071,635072,635174,635175,635176,635177,635178,635179,635180,635181,635182,635183,635184,635185,635273,635274,635275,635451,635532,635533,635534,636681,636682,636683,636684,636685,636686,636687,636688,636689,636690,636691,637526,637544,637718,637719,637720,637721,638184,638328,638636,638637,638638,638639,638640,638641,638642,638643,638644,638645,639546,640083,641271,641322,641423,641574,641673,642295,642681,643042,644088,644089,644090,644091,644092,644098,644099,644100,644106,644131,644136,644158,644371,644571,644784,644785,644885,644887,645164,645165,645166,645167,646250,646252,646253,646397,646398,648635,649171,649614,649619,650125,650126,650127,650654,650655,651008,651010,651011,651012,651013,651014,651015,651016,651017,651867,651868,651869,651870,651871,651872,651885,652104,652105,652106,652107,652112,652113,652116,652117,652118,652119,652120,652121,652122,652123,652126,652127,652538,652539,652559,652560,652561,652562,652570,652580,652581,652583,652602,652603,652604,652605,652606,652607,652610,652611,652612,652617,652618,652619,652620,652621,652622,652626,652627,652628,652715,652716,652717,652724,652741,652742,652743,652774,652775,652784,652785,652933,653662,653663,653664,653665,653666,653667,653992,653993,653994,653995,653996,653997,653998,654754,655039,655519,655529,656493,656494,656495,657060,657118,657161,658802,658803,658804,658805,658806,658807,658808,658809,658810,658811,658812,658813,658814,658815,658816,658817,658818,658819,658869,659012,659013,659014,659015,659023,659024,660507,660519,660525,660775,660776,660777,660778,660779,660831,660832,660833,660951,661075,661094,661095,661109,661110,662426,662427,662428,662429,662430,662431,662432,662433,662434,662439,663104,663105,663106,663109,663111,663112,663113,663115,663116,663117,663179,664067,664068,664069,664070,664071,664608,664609,666306,666343,669116,670016,670696,670792,670839,670840,670841,670842,670843,670844,671126,671133,671353,671354,673218,674219,674220,674221,674222,674223,674224,674227,674228,674799,674803,676593,676594,677252,678305,678306,678490,678491,678492,678695,678785,678794,678799,679203,679204,679205,679792,680343,680388,680561,680562,680563,680564,680565,680566,680567,680568,680763,680766,680767,681595,681596,681597,681598,682485,682590,682591,682593,682595,682596,682597,682598,682599,682600,682601,682651,682779,682780,682781,683605,683606,683607,683608,683609,683610,683611,683612,683613,683630,683631,683632,683633,683634,683635,683636,683637,683638,683639,683658,683659,683660,683661,683662,683664,683666,683667,683668,683738,683739,683740,683741,683850,683873,683874,683875,683876,683916,683917,683918,683919,684001,684009,684047,684146,684899,684900,684901,684902,685775,687207,687219,687432,687433,687434,687435,687436,687437,687438,687439,687440,687441,687442,687773,687774,687776,687777,688111,688552,688575,688962,689241,689243,689248,689343,689377,689378,689379,689380,689381,689395,689418,690086,690087,690088,690089,690090,690091,690092,690095,690097,690098,690099,690387,690388,690501,690598,690625,690627,690649,690650,690780,691262,691263,691401,691416,691417,691423,691424,691425,691426,691427,691428,691429,691430,691431,691573,691574,691688,691689,692331,692332,692333,692432,692433,692440,692454,692458,692463,692469,692472,692493,692632,692633,692634,692635,692636,692637,692638,692639,692948,692949,693006,693007,693008,693009,693010,693011,693012,693013,693014,693015,693016,693017,693114,693115,693116,693117,693118,693119,693120,693122,694774,694779,694780,694781,694782,694784,694787,694788,694789,694790,694791,694792,694793,694794,694795,694796,694797,694798,694799,694800,694801,694802,694803,694804,694805,694806,694807,694808,694809,694810,694811,694812,694813,694814,694815,694816,694817,694818,694819,694820,694821,694822,694823,694824,694825,694826,694827,694828,694829,694830,694831,694832,694833,694834,694835,694836,694837,694838,694839,694840,694841,694842,694843,694844,694845,694846,694847,694848,694849,694850,694851,694852,694853,694854,694855,694856,694857,694858,694905,694951,694956,694958,695337,695338,695339,695340,695341,695342,695343,695344,695345,695500,695501,695502,695503,695778,695814,695815,695816,695817,695818,695819,695820,695821,695822,695823,695824,695825,695826,695827,695828,695829,695830,695831,695832,696325,696327,696340,696713,697188,697194,697195,697196,697197,698434,698435,698436,698437,698438,698439,698440,698441,698442,698456,698457,698458,698460,698461,698462,698463,698464,698465,699340,699341,699342,699343,699344,699345,699346,699347,699348,699349,699481,699482,699483,699484,699995,699996,700131,700132,700133,700312,700337,700338,700339,700340,700686,700700,700701,700978,701006,701703,701704,701705,701706,702001,703201,703202,703203,703204,703205,703461,703463,703465,703466,703477,703480,703482,703483,703710,704027,704028,704030,705813,705814,705815,705816,705817,705818,705819,705820,705821,705822,705823,705824,705825,705826,705856,705972,705973,705975,705976,705978,705982,706145,706148,706149,706150,706151,706152,706153,706154,706155,706156,706201,706244,706674,706675,706676,706677,706678,706679,706680,706681,708017,708027,708028,708029,708127,708129,708130,708131,708132,708310,708311,708312,708313,708314,708529,708532,708959,708960,708961,708962,708963,708964,708965,708966,708967,708968,708969,710331,711279,711280,711281,711282,711283,711284,711285,711286,711550,711670,711671,711672,711673,711674,711676,711677,711678,711679,711680,711681,711682,711683,712181,713143,713504,713965,713967,715608,715681,715796,715819,715820,717988,717989,717990,717992,717993,717994,718634,718713,718714,718715,718716,718717,718719,718720,718721,718722,718723,718733,718999,719002,719004,719007,719010,719012,719014,719017,719019,719697,719698,719699,719700,719701,720925,720926,720928,720929,720947,720949,721896,723992,723993,724002,724046,724047,724053,724054,725118,725125,725130,725701,725702,725703,725704,725705,725706,725708,725709,725710,725711,725712,725713,725714,725715,725717,725718,725719,725720,725721,725722,725828,725874,725882,726039,726042,726055,726057,726159,727293,729142,729143,729145,729146,729147,729148,729149,729152,729156,729157,729158,729159,729160,729161,729163,729375,729376,730006,730007,730008,730011,730012,730014,730016,730017,730018,730019,730020,730021,730022,730023,730024,730025,730026,730122,730485,730488,730509,730723,731432,731440,731522,732063,732064,732065,732066,732067,732068,732069,732070,732071,732134,732560,732561,732562,732563,732564,732565,732566,732567,732568,732569,732570,732571,732572,732573,732574,732575,732576,732577,732578,732579,732580,732581,732582,732583,732584,732585,732586,732587,732812,732813,732814,732815,732816,732817,732819,732822,732824,732825,732919,732920,733196,733562,733563,733564,734901,735994,735995,735996,735997,735998,735999,736000,736002,736003,736004,736005,736006,736007,736008,736068,736069,736073,736075,736090,736105,738100,738101,738102,738103,738104,738105,738106,738107,738108,738109,738110,738392,738393,738394,738395,738396,738397,738398,738399,738400,738435,738438,738655,738657,738658,738659,738660,738661,738662,738663,738664,738665,738666,738816,738817,738818,738819,738820,740698,740699,740700,740701,740702,740703,740704,740705,740706,740707,740708,740709,740710,740754,740880,740881,740882,740883,740884,742281,742540,742541,742558,742566,742582,742737,742975,743197,743687,743688,743719,743720,743721,743722,743723,743724,744056,744443,744444,744445,744799,744801,744802,744804,744807,744808,746239,746796,749018,749019,749020,750054,750452,750453,750454,750455,750456,750457,750620,750771,750772,750773,750774,750775,750776,750777,750778,750779,750780,750781,750782,750783,750784,750789,750833,750834,750835,750893,751057,751058,751059,751426,751427,752107,752108,752303,752304,752305,752306,752307,752308,752309,752310,752312,752315,752316,752317,752323,752324,752325,752373,752375,753755,753756,753759,754075,754088,754112,754132,754563,754615,754905,755895,756743,756744,756745,756746,757056,757057,757120,757196,757197,757198,758776,758777,758778,758779,758780,758899,758900,758901,758902,758903,758904,759151,759152,759153,759154,759155,759156,759157,759158,760321,760322,760323,760565,760566,760567,760568,760569,760570,760571,760572,760573,760574,760713,760715,760913,761120,761121,761122,761123,761139,761140,761141,761142,761143,761269,761956,763051,763779,763782,764049,764050,764051,764052,764090,764091,764120,764121,764122,764123,764124,764125,764126,764127,764128,764129,764130,764187,764188,764189,764190,764848,764849,764891,765884,765885,765886,765990,767018,767384,768200,769093,769095,769261,769262,769613,769893,770259,770261,770277,770331,770422,770426,770429,770521,770884,770885,770889,770890,770896,770983,770985,770986,770987,770988,770989,771351,771352,772116,772974,772978,773064,773065,773066,773067,773068,773069,773070,773072,773073,773074,773075,773076,773077,773082,773085,773088,773089,773090,773091,774894,774935,774936,774937,775033,775093,775094,775095,775096,775097,775098,775187,775188,775654,776009,776010,776459,776460,776461,776467,776469,776470,776471,777270,777271,777272,777273,777274,777275,777287,777291,777489,777490,777751,778064,778065,778066,778067,778068,778069,778070,778071,778078,778079,778080,778081,778082,778384,778955,779041,779204,779205,779231,779232,779233,779234,779235,779236,779238,779239,779240,779241,779242,779243,779245,779246,779362,779552,779556,779754,779758,779759,780054,780055,780056,780147,780148,780149,780150,780151,780152,780190,780191,780192,780570,780808,781264,781267,781845,781846,781847,781848,781849,781850,781966,781967,781968,781969,781970,781971,781972,781973,781974,781975,781976,781977,781978,781979,782002,782639,782640,782648,782649,782718,782719,782720,782721,782722,782723,782738,782739,782824,782902,782903,782904,782905,782906,782908,782964,782965,782971,782973,782974,782975,782976,782985,782987,782990,782991,782995,782996,783001,783003,783006,783007,783009,783019,783022,783023,783024,783025,783026,783028,783033,783226,783362,783385,783386,783394,783396,783397,783398,783403,783410,783440,783443,783444,783445,783446,783450,783451,783453,783456,783458,783477,783479,783487,783489,783591,783615,783616,783950,783952,783959,783960,783961,783962,783963,783964,784207,784210,784308,784309,784310,784311,784312,784313,784315,784316,784317,784318,784319,784746,784747,784944,784977,785011,785012,785013,785023,785127,785128,785129,785130,785131,785132,785133,785134,785135,785238,785239,785240,785241,785242,785243,785244,785245,785246,785873,786405,786407,787252,788691,789347,790595,790600,790601,790602,790603,790604,790605,790607,791115,791116,791117,791118,791119,791122,791123,791124,791125,791126,791177,791178,791180,791181,791183,791669,791693,791830,792799,792800,792801,792813,792815,793485,793486,793487,793488,793489,793494,793495,795410,795411,795686,795687,795688,795689,795690,795691,795692,796242,796519,796520,796521,796523,796613,796614,796615,796721,796722,796723,796724,796725,796726,796727,796728,796729,796730,797260,797261,797462,797463,798052,798078,798079,798082,798199,798200,799003,799004,799005,799006,799007,799657,800471,800472,800475,800476,800477,800478,800479,800480,800481,800482,800576,800577,800697,800698,800699,800700,800702,800703,800704,800705,800706,800708,800709,800710,800719,800720,800721,800722,800723,800724,800813,800814,800815,800816,800817,800818,800862,800863,800864,800865,800867,800868,800869,800870,800871,800872,800873,800874,800875,800876,800877,800878,800879,800880,800882,800887,800888,800889,800926,800927,800928,800929,800930,800931,800956,800957,800958,800960,800961,800962,800963,800964,800966,800967,800968,800969,800970,801020,801181,801182,801183,801184,801185,801186,801187,801188,801189,801190,801191,801192,801193,801538,801539,801968,801970,801971,801972,802004,802235,802236,802378,802380,802382,802386,802387,802388,802389,802390,802391,802393,802417,802418,802419,802420,802421,802422,802423,802424,802425,802427,802428,802429,802430,802431,802432,802433,802434,802435,802563,802564,802565,802566,802580,802581,802582,802651,802714,802717,802719,802720,802725,802726,802727,802728,802784,802785,802786,802787,802817,802818,802819,802820,803910,803911,803912,803913,803937,803938,803939,803940,803941,803942,803943,803944,803945,803946,804210,804211,804220,804224,804225,804228,804229,804230,804231,804232,804233,804234,805083,805084,805085,805086,805087,805088,805089,805090,805091,805092,805093,805094,805295,805296,805297,805298,805299,805300,805654,805655,805656,805657,805699,805735,805736,805737,805738,805739,805740,805858,805860,806569,806570,806572,806573,806574,806575,806643,806644,806646,806647,806648,806649,806651,806652,806654,806690,806844,806849,806850,806851,806853,806854,806873,806874,806875,806894,806902,806906,806907,806908,806909,806910,806911,806912,806913,806914,806915,806916,806917,806918,806919,806922,806923,806924,806932,806933,807651,807652,807701,807702,807817,807818,807819,807820,807821,807822,807823,807872,807877,808042,808297,808301,808312,808338,808373,808374,808375,808376,809820,810194,810198,811860,811914,812178,814945,814946,814947,815105,815107,815108,815110,815302,815303,815304,815305,816830,818126,818127,818128,818507,818508,818509,818510,818512,819814,820410,820411,820903,821841,822104,822144,822148,822149,823339,823340,824147,824148,824893,824894,824895,824896,824897,824898,824899,824900,824901,826002,826003,826004,826005,826006,826007,826008,826009,826010,826012,826013,826014,827701,827705,827706,827707,827708,827709,827716,827717,827718,827911,830815,830817,832316,832317,833721,833792,834006,834007,834526,834609,836861,836863,836865,836985,836987,837021,837022,837049,837050,837051,837906,837907,837908,837909,837910,837911,837912,837913,838063,838144,838308,838315,838316,838317,838443,838877,839310,839312,840026,840027,840028,840032,840033,840034,840185,840186,840187,840193,840481,840624,840625,840626,840627,840628,840629,840630,840631,840632,841212,841218,843823,844750,844790,847132,847133,847140,847141,847142,847143,847168,848617,849319,849400,849448,849468,850013,850018,850019,851040,851236,851241,851242,852433,852434,852435,852436,852437,852438,852439,852440,852441,853146,853147,853149,853151,853443,853446,861099,861100,861101,861102,870406,870516,870524,870526,870622,871168,871170,871173,871177,871178,871294,871307,871523,871524,871541,871542,871545,871551,871572,871574,871825,871827,871871,871878,871883,872041,872052,872053,872060,872065,872069,872080,872083,872088,872102,872106,872109,872627,872657,872658,872663,872669,872672,872673,872867,872870,872872,872875,873014,873015,873027,873028,873029,873031,873032,873033,873038,873040,873700,873701,875779,875780,875781,877014,881155,881156,881157,881158,881160,881161,881162,881163,881164,881166,881167,881168,881169,881170,881171,881172,881444,881842,881843,881844,881845,881846,883546,883797,883798,884872,884873,884874,884875,884876,884877,884878,885880,886157,886158,888015,890221,890225,890227,890228,890231,890233,890325,890326,890356,890357,890358,890359,890360,890361,892912,892914,892915,892916,892917,892918,892919,892960,892963,892964,892965,893064,893065,893066,893068,893071,893077,893079,893080,893087,902962,904568,905891,906015,906019,907227,907642,907651,908331,908336,908599,908705,908706,908707,908708,908872,908873,908874,908875,909291,910901,910902,910903,910904,910905,910906,910907,910908,910909,910910,910911,910912,910913,910921,910925,912856,912857,912900,912901,912902,912903,912904,912905,913148,913369,915202,920813,920814,920815,920816,920817,920818,920819,920820,920821,920823,920824,920825,920826,921243,921307,921317,921522,921703,921721,924111,925977,925978,925995,925996,925997,926044,926045,926046,926047,926048,926049,926050,926136,926137,926138,926139,926140,926141,926142,926143,926144,926145,926147,926148,926149,926150,926151,926152,926153,926154,926155,926179,926180,926191,926248,926629,928801,928802,928803,929110,929111,929115,929117,930317,930481,930482,930483,930484,930485,930486,930487,935455,937065,937091,937298,937552,937553,937554,937555,937556,937557,937559,938442,938443,938810,938813,938816,938820,939655,939661,939662,939663,939664,939665,942459,942460,942461,942468,942469,944322,944323,944338,944339,946572,946573,946575,946576,946577,947038,947039,947040,947041,947043,947044,947045,947046,947047,947048,947049,947050,947051,947052,947053,947054,947055,947064,947065,947066,947071,947072,947077,947079,947081,947082,947084,947085,947086,947087,947091,947095,947096,947098,947099,947100,947101,947102,947103,947104,947515,947725,947728,947735,947736,948334,948426,948428,948430,948431,948432,948433,948435,948702,948703,948704,948705,948706,948707,948708,948709,948715,948717,948718,948719,948720,948721,948722,948723,948724,948725,948726,948752,948753,948755,948756,948757,948758,948759,948760,948765,948782,949377,949379,949384,949385,950061,950062,950195,951136,951137,951138,951139,951140,951141,951142,951143,951144,951145,951146,951147,951148,951149,951151,952104,952458,952459,952480,952481,952482,952507,952508,952509,952510,952533,952537,952538,952539,952540,953143,953254,953572,953574,953575,953576,953577,953578,953579,953580,953581,953582,953583,953584,953633,954697,954698,954699,954700,954701,954702,954703,954704,954705,954914,954915,954927,954928,954929,956780,957248,959725,959728,959729,959730,959731,959734,959735,960538,960539,960540,960541,960542,960569,960570,960571,960572,960573,960574,960633,961520,961569,961588,961640,961692,961732,961855,961856,961857,961861,961863,965408,965411,965413,965416,968456,968714,968715,968766,968777,971386,974950,974951,974952,974953,976029,976418,977698,977704,978248,978291,980187,980194,980221,980405,980406,980407,980408,980409,980410,980411,980412,980413,980414,981537,981538,981549,981550,981551,981552,981553,981554,981556,981557,981558,981559,981560,981575,981576,981577,981578,981579,981580,981581,981582,981583,981584,981585,981586,981587,981588,981589,981590,981591,981592,981593,981622,981623,981624,984197,984200,984659,984660,984661,984662,984663,984664,984718,984719,984723,984725,984775,984779,984949,986193,986264,986410,986413,986416,986420,986484,986607,988181,988976,988981,993229,995238,995861,998900,998902,998907,998910,998921,998924,998925,998926,998927,998928,998929,999031,999254,999255,999256,999257,999259,999260,1000109,1000172,1000176,1000177,1000178,1000183,1000184,1000185,1001234,1001236,1001239,1001240,1003253,1003359,1003423,1003738,1003739,1004842,1004843,1005151,1005153,1005154,1005155,1005156,1005157,1005158,1005159,1005160,1005161,1005162,1005163,1005164,1005165,1005167,1005170,1005171,1005174,1005181,1005182,1005319,1009321,1009322,1011559,1011560,1011561,1011579,1013686,1013687,1013688,1013689,1013690,1013691,1013692,1013693,1013694,1013811,1013812,1013813,1014168,1014170,1014209,1014210,1014211,1014212,1014213,1014214,1014216,1014237,1014238,1014387,1014388,1014502,1014984,1014985,1014986,1014987,1014988,1015285,1015286,1015288,1015289,1015290,1015291,1015294,1015295,1015296,1015326,1015327,1015336,1015337,1015338,1016147,1016203,1016261,1016276,1016295,1016694,1016695,1016696,1016711,1016712,1016714,1016715,1016716,1016717,1016719,1016720,1016721,1016722,1016723,1016724,1016784,1016785,1016786,1016787,1016788,1016789,1016790,1016793,1016794,1016795,1016796,1016797,1020836,1020838,1020863,1020865,1020866,1020868,1020870,1020871,1020872,1020873,1020875,1020876,1020877,1020880,1020939,1020942,1020948,1020951,1020952,1021035,1021582,1021583,1024156,1024158,1024788,1024792,1024879,1025568,1025569,1025570,1025571,1025572,1025573,1025574,1025575,1025576,1025577,1025578,1025579,1025580,1025581,1025582,1025583,1025584,1026725,1026726,1026727,1026728,1026729,1026730,1026731,1026732,1026733,1026734,1026735,1026736,1026737,1026738,1026739,1026740,1026945,1026946,1026947,1026948,1026949,1027512,1027513,1027514,1027515,1027516,1027517,1027934,1027935,1027936,1027937,1027938,1027940,1027941,1027942,1027943,1027944,1027945,1027946,1029001,1029002,1029003,1029004,1029005,1029006,1029007,1029629,1029630,1029632,1029665,1029666,1029924,1029925,1029946,1029965,1029966,1030026,1030027,1030028,1030029,1030030,1030031,1030032,1030033,1033935,1033936,1033937,1033938,1033939,1033940,1033941,1033942,1033945,1035851,1035927,1037681,1037682,1038508,1038664,1038665,1039337,1039339,1039498,1039526,1042238,1042240,1042241,1042242,1042243,1042244,1042245,1042246,1042247,1042248,1042249,1042250,1042251,1042252,1042253,1045005,1045007,1045173,1045191,1045192,1045239,1045240,1045281,1045283,1045284,1045769,1045991,1045992,1048678,1048682,1048683,1048714,1048731,1048741,1048745,1049892,1049894,1049895,1049898,1050336,1050337,1050339,1051014,1051015,1051016,1051018,1051020,1051021,1051022,1051024,1051025,1051039,1051041,1051043,1052353,1052684,1052685,1052686,1052687,1052688,1052689,1052690,1052691,1052693,1052694,1052695,1052696,1052697,1052698,1052847,1052880,1052881,1053042,1053043,1053044,1053280,1053759,1053761,1053762,1053810,1053811,1053812,1054542,1054543,1055617,1055618,1055619,1055620,1055621,1055699,1055724,1055728,1055729,1055730,1055731,1055735,1055739,1055740,1055741,1055759,1055760,1055761,1055762,1055763,1055764,1055765,1055766,1055776,1055777,1055778,1055779,1055780,1055793,1055799,1055800,1055801,1055802,1055804,1055805,1057421,1057423,1057425,1057728,1057730,1057731,1057732,1057733,1057734,1057969,1057973,1057997,1058478,1058481,1058483,1058484,1058485,1059409,1059539,1059540,1059541,1059838,1059840,1059843,1059844,1059845,1059847,1059848,1059849,1059850,1059851,1059852,1059853,1059854,1059855,1060116,1060117,1060380,1060382,1060383,1060389,1060391,1060396,1060398,1060399,1060405,1060417,1060422,1060430,1060452,1060456,1060457,1060459,1060460,1060462,1060465,1060467,1060470,1060471,1060472,1060473,1062032,1062034,1062036,1062037,1062038,1065342,1072728,1073157,1073158,1073527,1073555,1073882,1074388,1074622,1074738,1074739,1074740,1074743,1074744,1074745,1074828,1074829,1074830,1074831,1074832,1074838,1074844,1074847,1074848,1074849,1074932,1075812,1075813,1075815,1075816,1075819,1075820,1075821,1075874,1076584,1076606,1079481,1079482,1079483,1079484,1079865,1079867,1079911,1079913,1079915,1079917,1079920,1079922,1080532,1080533,1080534,1080535,1080536,1080537,1080538,1080539,1080540,1081336,1083102,1083140,1083586,1083678,1083679,1083680,1083681,1083682,1083683,1083685,1083686,1083687,1083688,1083689,1083690,1083691,1083692,1083693,1083694,1083696,1083700,1083701,1083702,1083703,1083704,1083705,1083707,1083709,1083718,1084154,1084155,1084158,1087223,1087224,1087225,1087226,1088961,1088998,1089185,1091330,1091336,1091339,1091340,1091394,1091395,1091396,1091397,1091398,1091399,1091400,1091401,1091411,1091412,1093232,1093287,1095235,1096345,1098815,1098816,1098817,1098818,1098819,1098820,1098822,1098823,1098824,1098825,1098826,1099063,1099175,1099177,1099178,1099215,1099217,1099218,1099219,1099220,1099221,1099222,1099836,1099837,1099838,1099839,1099840,1099841,1099842,1099843,1099844,1101080,1101081,1101082,1101083,1101084,1101086,1101087,1101088,1101089,1101090,1101091,1101092,1101093,1101094,1101095,1101096,1101097,1101098,1101099,1101100,1101101,1101102,1101265,1101266,1102862,1104799,1105987,1105989,1105990,1105991,1105993,1105995,1106031,1106056,1106069,1107104,1107105,1107106,1107107,1107113,1107118,1108151,1108153,1108167,1111546,1112613,1112614,1112616,1112618,1112620,1112622,1112623,1112624,1112625,1113510,1117676,1119023,1119024,1119025,1119027,1119029,1119030,1121848,1121849,1122760,1122761,1122868,1122869,1123136,1123602,1123604,1123973,1123974,1123975,1123976,1123977,1123978,1124149,1124151,1124152,1124153,1124154,1124164,1124166,1124167,1124168,1124169,1124170,1124247,1124355,1124357,1124358,1124359,1124360,1124363,1124364,1124365,1124366,1124367,1124368,1124422,1124423,1124438,1125313,1125314,1125315,1125316,1125317,1126532,1127124,1127125,1127126,1127127,1127128,1127497,1127498,1127499,1127500,1127501,1127502,1127503,1127507,1127508,1127509,1127510,1127511,1127525,1127526,1127527,1127528,1127529,1127530,1127531,1127532,1127533,1127535,1128467,1128480,1130250,1131839,1131840,1131841,1131842,1131843,1131844,1131845,1131846,1131847,1131848,1132361,1132507,1132508,1133321,1136344,1136345,1136346,1136347,1136351,1139965,1139966,1139967,1139970,1139974,1140408,1140409,1140410,1140411,1140413,1140414,1140415,1140416,1140417,1140418,1140419,1140420,1140421,1140422,1140423,1140501,1140797,1140798,1140799,1140800,1141225,1145109,1145110,1145111,1145744,1145746,1145753,1145876,1145877,1145878,1145895,1145896,1145897,1145898,1145900,1145901,1146080,1146081,1146825,1146826,1146827,1146828,1146832,1146860,1146861,1146862,1146898,1146900,1146902,1146907,1147021,1147022,1147023,1147024,1147025,1147026,1148486,1149144,1149145,1149146,1149147,1149148,1149149,1149150,1149151,1149152,1151139,1151140,1151141,1151142,1151143,1158613,1160805,1160808,1160814,1160815,1160817,1160904,1160911,1160912,1160916,1160918,1160923,1160924,1164376,1164377,1164378,1164379,1164380,1164381,1164382,1165225,1165226,1165234,1165386,1165387,1165388,1165389,1165390,1166455,1166456,1166457,1166496,1166497,1167658,1167659,1167660,1167661,1167662,1169282,1169283,1169284,1172854,1172855,1172856,1174011,1174039,1174040,1174041,1174042,1174802,1174808,1174810,1175784,1175785,1175827,1178996,1178997,1179904,1179905,1179981,1180160,1182343,1182348,1182420,1182422,1182473,1182485,1182511,1182512,1182513,1182514,1182515,1182516,1182584,1182585,1182586,1182681,1182708,1182709,1182720,1183138,1183666,1183667,1183668,1183713,1183714,1191672,1191681,1191682,1191685,1191693,1191694,1191695,1191702,1195813,1195814,1197165,1201594,1201708,1201709,1201710,1201711,1201712,1201713,1201714,1201715,1201716,1201717,1201926,1201930,1201932,1201933,1201973,1201974,1201975,1201976,1201978,1201979,1201980,1201981,1201982,1201983,1201984,1201985,1201986,1201987,1202074,1202076,1202405,1203498,1203499,1203500,1203502,1203693,1203694,1203695,1205202,1205203,1205204,1205213,1205214,1205232,1205234,1205237,1205507,1205508,1205509,1205605,1205627,1205628,1205629,1205630,1205631,1205693,1205694,1205695,1205696,1205697,1205698,1206159,1208122,1208138,1208234,1208235,1208236,1208237,1208238,1208239,1208240,1208241,1208242,1208612,1208613,1208614,1208615,1208616,1209701,1209702,1210297,1210298,1213625,1213638,1213689,1214051,1214088,1214097,1214978,1215693,1215694,1215695,1215696,1215697,1215698,1215723,1215729,1218866,1218867,1218913,1218914,1218915,1219700,1219701,1219704,1219716,1219720,1219722,1219723,1219724,1219725,1219726,1219727,1219729,1219730,1219731,1219732,1219733,1219734,1219739,1219747,1220001,1220004,1220006,1220008,1220009,1220010,1220569,1221563,1224856,1224857,1224858,1225282,1225283,1225369,1226031,1227490,1227498,1227502,1227630,1227632,1227633,1227744,1227745,1227746,1227747,1227750,1227751,1229770,1229771,1229809,1229829,1230365,1230366,1230367,1230644,1230787,1230789,1230793,1230794,1230808,1230813,1230814,1230815,1230816,1230817,1230820,1230821,1230823,1230824,1230826,1230827,1230829,1230840,1230858,1230860,1230861,1230862,1230863,1230864,1230865,1230866,1230868,1230869,1230870,1230871,1230873,1230876,1230902,1232335,1232337,1232338,1232340,1232690,1232691,1232692,1232693,1232694,1232695,1232696,1232697,1232698,1232700,1232701,1232862,1233530,1233532,1233533,1233534,1233535,1233536,1233917,1233918,1234199,1234200,1234201,1234202,1234203,1235298,1237832,1238519,1238520,1238521,1238522,1238776,1238780,1238805,1238806,1238952,1238953,1238954,1238955,1238956,1238957,1238958,1238959,1239052,1239053,1239054,1239055,1239056,1239060,1239131,1239140,1240177,1241831,1241832,1241834,1241837,1241840,1241841,1241846,1241847,1241849,1241851,1241864,1243951,1244052,1244053,1244633,1244663,1245656,1250443,1250447,1250475,1250495,1250496,1250497,1250498,1250499,1250500,1250501,1250502,1250503,1250504,1250507,1250509,1250516,1251027,1251038,1251062,1251072,1251086,1251091,1251101,1251341,1254612,1254941,1254944,1255459,1256132,1257427,1257716,1259856,1259976,1262525,1262526,1262527,1262528,1262529,1262530,1262531,1262533,1262534,1262538,1266155,1267042,1267045,1267046,1267047,1267048,1267752,1267753,1268315,1269688,1269689,1269690,1269691,1269834,1269966,1269967,1269968,1269969,1269970,1269971,1269972,1269973,1270258,1270300,1270301,1270754,1270756,1270865,1270866,1271023,1271024,1271025,1271026,1271027,1271028,1271359,1271842,1271843,1271844,1273749,1273750,1273751,1274327,1274330,1274756,1274757,1274988,1274989,1274990,1274991,1275534,1275540,1275640,1278769,1278776,1280509,1280510,1280511,1280513,1280514,1280515,1280516,1280517,1280518,1280520,1280544,1283129,1283130,1283131,1283132,1283609,1283665,1283934,1284282,1284373,1284711,1284713,1284716,1284717,1284718,1284720,1284903,1284914,1285044,1285052,1285053,1285054,1285055,1285063,1285066,1285226,1285227,1285228,1285233,1285235,1285237,1285238,1285240,1285379,1285397,1285409,1285417,1285426,1285452,1286221,1287095,1287096,1287124,1287139,1287140,1289671,1289725,1289770,1289773,1289799,1292003,1292007,1292121,1293423,1293427,1297081,1298545,1300174,1300331,1303860,1303862,1303863,1304236,1304237,1304238,1304239,1304240,1304241,1304348,1304708,1304709,1304710,1304711,1304713,1305063,1305089,1305353,1305361,1305362,1305365,1305366,1305372,1309857,1313368,1313369,1313370,1313371,1313373,1313374,1313380,1313391,1313392,1313540,1313541,1313550,1313551,1313553,1313577,1313586,1319370,1319637,1320196,1320257,1320458,1320460,1320461,1320462,1320463,1320464,1320465,1320468,1320469,1320470,1320471,1320472,1320473,1322503,1322504,1322505,1322506,1322507,1322676,1322721,1322764,1322778,1323304,1323305,1323306,1323307,1323308,1323309,1323310,1324495,1324497,1324498,1324499,1324500,1324501,1324502,1324503,1324504,1324546,1325457,1325458,1325459,1325460,1325461,1325462,1325463,1325464,1325465,1325466,1325467,1325468,1325469,1325470,1325777,1325778,1325779,1325780,1325781,1325783,1326677,1326679,1326680,1326681,1326682,1326683,1326684,1326685,1326686,1326687,1326688,1326689,1326690,1326691,1326692,1326693,1326694,1326696,1327475,1327477,1327482,1327483,1327494,1327497,1327498,1327504,1327506,1328354,1328355,1328356,1328357,1328358,1328359,1328360,1328361,1328762,1328763,1328764,1328765,1328766,1328767,1329523,1329524,1329525,1329527,1329528,1329529,1329530,1329531,1329532,1329533,1329538,1329539,1329541,1331945,1331946,1339680,1345401,1345724,1345725,1345762,1345772,1345857,1345885,1345893,1347136,1348321,1349547,1349548,1349549,1349894,1349895,1349898,1349899,1349900,1349902,1349904,1349905,1349914,1352090,1352264,1352265,1352266,1352267,1353710,1354870,1354871,1356700,1356938,1356960,1357865,1357866,1357867,1357868,1357869,1357870,1358930,1358934,1358940,1359415,1359448,1359894,1359902,1360439,1360524,1360525,1360864,1363453,1363463,1363464,1363465,1363469,1363474,1363485,1367787,1370858,1372104,1372105,1372106,1372107,1372108,1372109,1372110,1372369,1372370,1372371,1372372,1372739,1372750,1372770,1372781,1372809,1372847,1372905,1372922,1372948,1373185,1373194,1373195,1373196,1377369,1377371,1377373,1377374,1377376,1377377,1377407,1377410,1377412,1377419,1377421,1377423,1377425,1378084,1378446,1378447,1378448,1378449,1378450,1378451,1378452,1378453,1378454,1378455,1378456,1378458,1378770,1378771,1378772,1378773,1378774,1379724,1385817,1385818,1385819,1385820,1385821,1385822,1385823,1385824,1386254,1386257,1386258,1386261,1386373,1386374,1386375,1386376,1386377,1386378,1386379,1386380,1386381,1386382,1388136,1388137,1388138,1388577,1389440,1389442,1389451,1389454,1389456,1389470,1389472,1389473,1389479,1390569,1390570,1390938,1390939,1391814,1391815,1391816,1391817,1391818,1391819,1391820,1391821,1391822,1391823,1391824,1391825,1391826,1391827,1391828,1391829,1391830,1392847,1392848,1392849,1392850,1392851,1392894,1392895,1392896,1392897,1392898,1392899,1392900,1392901,1392902,1392903,1392905,1392906,1392907,1392908,1392909,1392910,1392911,1393011,1393049,1393050,1393051,1393052,1393053,1393054,1393055,1393516,1394523,1395436,1395700,1395704,1396768,1396773,1396999,1397109,1397121,1397221,1397299,1397374,1397418,1397419,1397806,1397976,1397977,1397978,1398865,1399143,1399144,1399145,1399146,1399147,1399148,1399149,1399150,1399175,1399439,1399563,1399564,1399565,1399566,1399567,1400017,1400018,1400019,1400414,1400415,1400416,1400418,1400422,1400617,1400618,1400619,1400620,1400621,1400622,1400623,1400624,1400625,1400626,1400627,1403388,1403449,1403450,1403451,1403452,1403644,1403645,1403646,1405357,1405358,1405359,1405360,1405403,1405470,1406953,1406954,1406955,1406956,1408291,1410090,1410091,1411325,1411326,1411327,1411580,1411582,1414089,1414090,1414091,1414092,1414093,1414094,1414095,1416511,1417510,1419115,1419176,1419177,1419178,1419181,1419183,1419318,1419320,1419321,1419322,1419325,1419326,1419327,1419328,1419330,1419969,1419970,1419971,1419972,1419973,1419977,1419978,1419980,1419981,1419982,1419984,1419986,1419988,1419989,1419990,1421485,1421486,1421961,1421973,1421988,1425583,1425587,1426059,1426063,1426072,1426078,1426085,1426087,1426088,1426091,1426093,1427032,1427033,1427034,1427035,1427036,1427038,1427039,1427238,1427253,1427492,1428315,1429655,1429656,1429657,1429658,1429659,1429660,1430125,1430126,1430127,1430128,1430322,1430757,1430758,1430759,1431039,1431237,1431247,1431520,1431521,1431522,1431523,1431524,1431526,1431527,1432313,1432314,1432315,1432316,1432317,1432318,1432319,1432323,1432324,1432325,1432419,1432427,1432454,1433153,1434104,1434105,1436858,1436861,1436866,1436867,1436868,1436871,1436875,1436877,1436881,1436882,1436886,1436894,1437822,1437823,1437824,1437825,1437826,1437827,1437828,1437829,1438325,1438326,1438327,1438328,1438329,1438404,1438406,1445742,1445743,1445887,1445888,1445889,1445890,1445891,1445892,1445893,1446765,1446766,1447752,1449223,1449224,1449262,1449263,1449264,1449811,1449838,1449839,1449840,1449842,1449843,1449854,1449855,1449857,1449858,1451763,1451764,1451779,1451838,1451839,1451896,1451897,1451898,1451899,1451927,1451928,1451957,1461997,1461999,1462000,1462005,1462009,1462014,1462015,1462031,1462034,1462036,1463081,1463084,1463085,1463086,1463087,1463088,1463092,1463093,1466156,1466157,1467179,1468707,1468708,1468709,1468710,1468711,1468712,1468713,1468714,1468715,1473177,1473178,1473179,1473180,1473181,1473305,1473306,1473307,1473308,1473309,1473679,1473774,1473778,1473800,1473806,1473811,1473831,1473832,1473962,1473971,1473973,1473974,1473975,1473982,1473988,1473993,1473995,1473996,1473997,1473998,1473999,1474003,1474004,1474005,1474007,1474008,1474009,1474010,1474062,1474067,1474091,1474097,1474102,1474658,1474659,1476266,1476267,1477158,1477289,1478811,1478813,1478814,1478817,1479279,1479454,1479556,1479558,1479560,1479562,1479568,1479569,1479570,1479647,1482075,1482208,1482367,1482442,1482565,1482586,1482587,1482588,1482589,1482590,1482591,1482592,1482593,1482594,1482595,1482596,1482597,1482598,1482599,1482600,1482601,1482602,1482687,1482688,1482689,1482690,1483078,1483263,1483269,1483354,1483355,1483360,1483363,1483365,1483372,1483373,1483640,1484380,1484381,1484426,1484429,1484430,1484432,1484435,1484437,1484438,1484440,1484441,1484443,1484462,1484463,1484464,1484465,1484466,1484467,1484468,1484469,1484470,1484518,1484519,1484520,1484521,1484522,1484523,1484524,1484525,1484526,1484527,1484647,1484648,1484649,1484650,1484652,1484653,1484654,1484711,1484750,1484751,1484752,1484753,1484754,1484841,1484968,1485947,1485948,1486138,1486569,1487413,1487414,1487415,1487416,1487417,1487418,1487419,1487420,1487421,1487422,1487423,1487424,1487425,1487426,1487771,1487772,1487775,1487808,1487875,1487891,1487892,1488055,1488057,1488241,1488242,1488243,1488244,1488245,1488246,1488247,1488248,1488249,1488250,1488251,1488252,1488253,1488254,1488281,1488282,1488283,1488285,1488290,1488411,1488412,1488437,1488479,1488516,1488517,1488518,1489564,1489565,1489696,1489697,1489698,1489699,1489700,1489854,1489858,1489871,1489985,1489986,1490539,1490540,1491086,1491165,1491166,1491167,1491168,1491169,1491175,1491177,1491565,1491566,1491567,1491568,1491701,1491702,1491703,1491705,1491724,1491725,1491726,1491729,1491730,1492197,1492198,1492209,1492210,1492211,1492212,1492213,1492214,1492215,1492216,1492217,1492258,1492259,1492260,1492261,1492767,1492769,1493526,1493528,1493529,1493530,1493665,1493666,1494195,1494196,1494638,1495173,1495301,1495302,1495303,1495304,1495305,1495306,1495307,1495308,1495309,1495310,1495311,1495312,1495313,1495344,1495345,1495413,1495414,1495585,1495672,1495673,1495674,1495675,1495676,1495677,1495678,1495784,1495817,1495818,1495819,1495820,1495821,1495822,1495824,1495906,1495907,1495997,1495999,1496000,1496002,1496003,1496035,1497776,1497777,1497778,1497779,1497895,1497896,1497897,1497898,1497899,1497900,1497901,1497981,1497982,1497983,1497985,1498835,1498836,1499351,1500019,1500311,1500312,1500524,1500525,1500840,1500841,1500842,1500843,1500844,1500885,1500886,1500887,1500888,1500889,1500890,1500891,1500911,1501284,1501285,1501321,1501322,1501725,1503111,1503112,1503827,1503830,1504754,1504881,1504882,1504883,1504884,1505505,1505506,1505829,1505830,1505966,1506265,1506493,1506494,1506495,1506496,1506497,1506504,1506508,1506515,1506516,1508605,1508606,1508607,1509962,1509982,1510262,1517908,1517933,1517978,1517979,1518168,1518366,1518500,1518501,1518502,1518503,1518516,1518522,1518530,1518531,1518533,1518534,1518544,1518545,1518546,1518547,1518548,1518549,1518550,1518936,1523459,1523474,1524825,1524826,1524828,1524829,1524830,1524831,1524832,1524833,1524834,1524835,1524836,1524837,1524838,1524839,1524840,1524841,1524881,1524882,1524883,1524888,1524896,1525024,1525046,1525048,1525049,1525192,1525327,1525328,1525329,1525330,1526076,1527414,1527415,1527416,1527497,1527498,1527510,1527703,1527705,1527706,1527707,1527770,1527771,1527772,1527777,1527778,1527779,1527837,1527838,1527866,1527867,1528101,1528183,1528184,1528197,1528198,1528316,1528317,1528318,1528326,1528327,1528329,1528331,1528334,1528335,1528337,1528338,1528340,1528344,1528347,1528348,1528352,1528379,1528380,1528381,1528382,1528383,1528384,1529755,1530229,1530231,1531835,1531836,1532300,1532328,1532360,1532361,1532362,1533168,1533169,1533170,1533171,1533172,1533173,1533174,1533175,1533176,1533281,1533282,1533843,1536674,1536675,1536731,1536732,1537033,1537035,1537037,1537275,1537303,1537315,1537316,1537317,1538302,1539192,1539217,1539224,1539227,1539229,1539230,1539231,1539240,1539242,1539243,1539245,1539247,1539499,1539501,1539505,1539844,1539845,1540020,1540023,1540024,1540027,1540039,1540040,1540041,1540042,1540043,1540044,1540045,1540047,1540049,1540339,1540340,1540341,1540342,1557328,1557329,1557330,1557331,1557332,1557333,1557334,1557335,1557336,1557699,1557873,1557874,1558254,1558255,1558256,1558270,1558271,1558272,1558274,1558275,1558276,1558277,1558278,1558326,1559791,1559798,1559807,1559812,1559816,1559820,1559823,1559827,1559833,1559840,1559846,1559853,1559859,1559865,1559871,1559874,1559915,1559976,1560041,1560127,1560130,1560886,1560887,1560888,1560889,1560978,1560979,1569839,1569840,1569872,1569873,1569874,1569875,1569876,1569877,1569878,1569879,1573353,1573354,1573355,1573356,1573358,1573359,1573361,1573362,1573363,1573364,1573365,1573366,1573367,1573369,1573371,1573372,1573373,1573374,1573375,1573376,1573377,1573378,1573379,1573380,1573434,1574215,1574221,1574223,1574226,1574381,1583905,1583906,1583907,1583908,1583909,1583910,1583911,1584489,1585388,1585536,1585537,1585538,1585539,1585540,1585541,1585542,1585543,1585545,1585546,1585547,1585548,1585549,1585551,1585552,1585553,1585564,1585571,1585584,1585825,1585826,1585827,1585828,1585829,1592583,1592950,1592951,1592952,1592953,1592991,1592992,1592993,1592994,1592995,1592996,1592997,1592998,1592999,1593000,1593001,1593697,1593723,1599046,1599047,1599423,1599424,1599425,1599426,1599435,1604997,1604998,1605492,1605493,1605494,1605561,1605562,1605563,1605564,1605567,1605568,1605569,1605570,1605571,1605572,1605574,1605575,1605576,1605577,1605578,1605580,1606026,1606027,1606028,1606029,1606306,1606307,1606389,1606390,1606391,1606403,1606404,1606405,1606406,1607528,1607530,1607531,1607536,1610541,1611061,1611062,1611063,1611064,1611065,1611066,1611067,1611068,1611069,1611070,1611071,1613192,1613193,1613194,1618986,1618987,1618988,1618989,1618990,1618991,1618992,1618993,1618994,1618995,1618996,1618997,1618998,1618999,1619000,1619001,1619005,1619014,1619444,1619654,1619821,1619824,1620647,1620648,1620649,1621712,1621749,1621750,1621751,1621752,1621753,1621754,1621925,1622555,1622577,1622580,1622585,1622586,1622587,1622588,1622683,1622684,1622685,1622686,1622930,1622939,1623009,1623980,1623990,1629709,1629712,1631139,1631140,1631141,1631143,1631545,1631547,1632930,1632932,1632933,1633009,1633010,1633011,1633012,1633014,1633015,1633016,1633017,1633018,1633019,1633020,1633022,1633023,1633024,1633025,1636468,1636512,1636513,1636514,1636596,1636598,1636600,1636621,1636624,1636625,1636626,1636628,1636962,1638208,1638209,1638210,1638211,1638212,1638213,1638214,1638215,1638222,1638234,1638236,1640753,1640754,1640786,1640812,1640817,1640823,1640854,1640855,1640863,1640864,1640865,1641422,1641613,1641635,1641886,1641891,1641892,1641904,1641906,1641907,1641908,1641909,1641910,1641912,1641913,1641941,1641942,1641943,1641944,1641945,1641992,1642927,1643008,1643012,1643013,1643014,1643015,1643022,1643323,1643324,1643376,1643377,1643378,1643379,1643848,1643849,1643850,1643851,1643852,1643853,1643854,1643855,1643856,1643857,1643861,1643865,1643867,1643875,1643880,1644057,1644376,1644393,1644394,1644395,1644659,1648172,1648173,1648178,1648179,1648998,1649282,1649283,1649293,1649294,1649295,1649296,1649297,1649299,1649300,1649301,1649302,1649545,1649611,1650178,1650540,1650541,1650542,1650543,1650567,1650568,1650569,1650570,1650969,1650986,1651603,1651604,1651606,1651607,1652122,1652123,1652275,1655794,1655795,1655796,1655797,1655798,1655957,1655958,1655959,1655960,1655961,1655962,1656080,1656081,1656082,1656083,1656098,1656099,1656102,1656107,1656108,1656109,1656111,1656112,1656113,1656125,1656126,1656127,1656128,1656129,1656130,1656131,1656132,1656133,1656134,1656135,1656136,1656137,1656139,1656187,1656240,1656241,1656265,1656266,1658046,1658047,1658048,1658049,1658050,1658051,1664010,1664011,1664012,1664013,1664014,1664015,1664016,1664017,1664018,1664048,1664049,1664050,1664051,1664081,1664108,1664538,1664539,1664540,1664541,1664542,1664543,1664544,1664545,1664546,1664547,1664548,1664549,1664550,1664551,1664552,1664553,1664554,1664555,1664556,1664557,1664558,1664559,1664560,1664561,1664562,1664571,1664572,1664573,1664574,1664575,1664576,1664577,1664583,1664585,1664586,1664588,1664589,1664590,1664591,1664594,1664595,1664596,1664598,1664599,1664602,1664605,1664923,1664931,1664932,1664933,1664935,1664936,1664937,1665894,1666552,1666554,1666558,1668917,1669290,1669291,1669814,1669815,1669840,1670320,1670321,1670322,1670323,1670324,1670325,1670326,1670327,1670328,1670329,1670330,1670334,1670335,1670336,1670340,1670341,1670342,1670343,1670346,1670347,1670348,1670351,1670353,1670355,1670356,1670416,1670417,1670418,1670419,1670420,1670421,1670422,1670423,1670781,1670782,1670783,1679409,1679411,1679426,1679439,1708278,1708279,1708281,1708286,1708291,1708292,1708293,1708294,1708295,1708296,1708297,1708298,1708299,1708300,1708301,1708302,1708303,1708304,1708305,1708306,1708307,1708610,1708611,1708612,1708613,1708614,1708615,1708862,1708863,1708864,1708865,1708866,1708976,1708999,1709000,1709001,1709002,1709003,1709004,1709005,1709006,1709007,1709008,1709009,1709173,1709611,1709616,1709678,1709679,1709681,1709682,1709686,1709687,1709688,1709689,1709693,1709694,1710015,1710016,1710017,1710018,1710019,1710020,1710035,1710036,1710037,1710038,1710041,1710292,1710300,1710301,1710302,1710303,1710545,1711130,1714317,1714318,1714473,1714474,1714505,1714506,1714507,1714509,1714516,1714519,1714520,1714527,1714612,1714613,1714614,1714615,1714616,1714617,1714618,1714619,1714620,1714638,1714639,1714640,1714641,1714758,1714766,1714845,1714846,1716301,1716452,1716453,1717124,1717125,1717126,1717127,1717269,1717273,1717278,1717716,1718171,1718558,1718559,1718560,1718561,1718902,1718926,1718933,1718985,1718986,1718987,1718988,1718989,1718990,1718991,1719465,1720944,1720946,1720947,1721701,1721702,1721703,1721704,1721705,1721706,1721707,1721708,1721717,1721718,1721719,1721720,1721723,1721724,1722451,1722455,1722458,1722518,1723271,1723282,1723285,1723375,1723785,1723909,1724021,1724045,1724395,1724396,1724397,1724398,1724399,1724400,1724401,1724403,1724404,1724537,1724543,1724545,1724551,1725002,1725003,1725004,1725005,1725006,1725007,1725008,1725009,1725010,1725011,1725012,1725013,1725014,1725016,1725017,1725030,1725036,1725039,1725041,1725042,1725043,1725044,1725186,1725221,1725222,1725299,1725300,1725302,1725451,1725459,1725462,1726225,1726889,1726986,1726989,1726996,1727002,1727126,1727127,1727479,1727480,1727481,1727483,1727577,1727580,1727594,1727600,1727607,1727608,1727609,1727611,1727612,1727623,1727648,1727673,1728089,1728090,1729574,1729576,1729594,1729596,1731046,1731098,1731108,1731111,1731118,1731215,1731220,1731258,1731260,1731263,1731272,1732374,1732375,1732376,1732377,1732465,1732470,1732533,1732534,1732535,1732536,1732537,1732538,1732601,1732689,1732690,1732691,1732696,1732697,1732699,1732702,1732704,1732706,1732708,1732713,1732718,1732719,1732723,1732724,1732727,1732731,1733040,1733041,1733042,1733070,1733071,1733075,1733163,1733168,1733175,1733177,1734341,1734765,1734767,1735813,1736590,1736591,1736592,1736593,1736594,1736595,1736596,1736597,1736598,1736599,1736600,1736601,1736602,1736603,1736604,1736874,1736875,1738065,1738066,1738067,1738068,1738069,1738070,1738071,1738486,1738488,1738531,1739131,1739132,1739147,1739165,1739166,1739188,1739209,1739210,1739211,1739212,1739396,1739400,1739402,1739403,1739404,1739405,1739411,1739628,1740026,1740027,1740030,1740031,1740032,1740033,1740034,1740035,1740036,1740037,1740038,1740039,1740536,1740537,1741128,1741129,1741132,1741133,1741134,1741135,1741136,1741137,1741138,1741139,1741148,1741149,1741150,1741151,1741152,1741153,1741154,1741207,1741208,1741214,1741215,1741216,1741217,1741422,1741423,1741424,1741425,1741448,1741449,1741453,1741500,1741502,1741503,1741504,1744650,1744651,1744652,1744653,1744654,1744655,1744656,1744657,1744860,1744862,1744865,1744866,1744870,1744871,1744873,1744876,1744919,1744920,1744921,1744922,1744923,1744924,1744925,1744926,1744927,1744928,1744929,1744930,1744931,1744932,1744933,1744934,1745447,1745461,1745463,1746265,1746521,1746529,1746547,1746554,1746557,1746851,1746852,1746854,1747651,1748521,1748522,1748523,1748524,1748526,1748527,1748528,1748529,1748530,1748558,1748559,1748560,1748561,1748562,1748563,1748564,1748565,1748972,1748973,1749003,1749010,1749012,1749013,1749280,1749281,1749282,1749283,1749284,1749285,1749286,1749287,1749288,1749289,1749290,1749291,1749292,1749501,1749556,1749558,1749588,1749589,1749590,1749591,1749592,1749593,1749599,1749600,1749601,1749602,1749607,1749960,1750286,1750289,1750291,1750301,1751682,1752771,1752776,1752781,1752782,1752783,1752786,1754207,1755623,1756041,1756042,1756043,1757477,1757478,1757479,1757480,1757481,1757483,1757484,1757485,1757486,1757488,1757490,1757491,1757492,1758059,1758061,1758243,1758261,1758265,1758266,1758267,1758268,1758269,1758270,1758271,1758272,1758273,1758274,1758275,1758276,1758277,1759955,1760241,1760328,1760585,1760586,1761479,1761480,1761481,1761482,1761483,1761484,1761485,1761486,1761487,1761488,1761489,1762154,1763376,1763378,1764025,1764033,1764042,1764047,1764052,1764055,1764057,1764058,1764106,1764776,1764777,1764779,1764781,1765138,1765139,1765146,1765152,1765157,1765608,1765609,1765610,1765612,1771142,1771877,1771878,1771879,1771880,1771881,1771882,1771883,1771884,1771885,1771886,1771887,1771888,1771889,1771890,1771902,1771903,1772445,1772446,1772447,1772448,1772449,1772450,1772451,1772452,1772453,1772454,1772455,1772457,1772584,1773153,1773154,1773155,1773156,1773157,1773158,1778989,1780810,1781327,1781331,1781333,1782583,1782727,1782749,1783600,1783648,1784075,1784086,1784089,1784100,1784104,1784150,1784204,1784306,1784310,1784311,1784312,1784313,1784314,1785081,1785111,1785136,1785148,1785209,1785212,1785216,1785224,1785352,1785356,1785364,1785398,1785431,1785437,1786573,1786679,1788891,1788997,1789168,1789169,1789171,1789172,1789173,1789174,1789175,1789176,1790294,1791557,1791566,1792478,1792539,1793426,1794484,1794565,1795277,1795301,1795304,1795403,1796469,1797352,1798410,1798411,1798412,1798415,1798436,1798439,1798451,1798494,1798899,1798914,1799007,1799009,1799012,1799016,1802452,1807108,1807109,1807110,1807797,1807835,1809976,1810433,1811957,1813220,1814014,1814027,1814028,1814029,1814031,1814042,1814043,1814045,1814046,1814059,1814063,1814064,1814067,1816172,1816174,1816175,1816176,1816199,1816200,1816586,1816587,1819952,1819953,1821636,1821640,1821747,1821748,1821835,1821875,1821950,1821951,1821952,1821953,1821954,1821955,1821956,1821994,1822193,1822194,1822195,1822196,1822237,1822239,1827398,1827400,1827405,1827829,1827831,1827832,1827834,1827842,1828384,1828385,1828386,1828387,1828388,1828389,1828393,1828394,1828395,1828396,1828397,1828398,1828399,1828400,1828402,1828403,1828404,1828405,1828415,1828416,1828417,1828421,1828425,1828432,1828433,1828437,1828441,1829928,1829934,1833508,1833509,1833511,1833512,1833513,1833514,1833515,1833516,1833517,1833518,1833521,1833523,1833527,1833760,1833768,1833773,1833787,1833898,1833943,1833944,1833945,1833946,1833947,1833948,1833949,1833950,1833951,1833952,1833953,1833954,1833955,1833956,1833957,1833959,1833961,1833964,1833965,1833967,1833969,1833971,1833973,1833975,1833977,1834109,1834133,1839895,1840128,1840592,1840594,1840599,1840606,1840607,1842261,1842400,1842402,1842403,1842404,1842413,1842414,1842415,1842419,1842438,1842443,1842452,1842470,1845491,1845492,1845493,1845668,1845692,1850922,1850923,1856738,1856892,1858504,1858527,1858611,1859402,1859403,1859405,1859417,1859418,1859422,1859423,1859424,1859428,1859430,1859431,1859432,1859433,1859434,1859448,1859452,1859462,1859470,1859472,1862114,1862115,1862116,1862117,1862118,1862119,1862123,1862124,1862125,1862132,1862142,1862143,1863699,1863701,1863931,1863966,1863967,1863968,1863969,1863970,1863971,1864162,1864163,1864164,1865772,1865892,1865894,1865895,1865896,1865898,1865899,1865900,1865901,1865902,1865903,1865904,1865906,1865912,1865937,1865961,1869607,1869949,1869950,1869951,1870306,1870316,1870317,1871040,1871049,1871050,1871598,1871637,1871638,1871640,1871643,1871645,1871648,1871649,1871650,1871651,1871652,1871655,1871656,1871657,1871658,1871666,1871670,1871671,1871675,1873701,1873702,1873703,1873705,1873709,1873710,1873712,1873713,1873715,1873716,1873720,1873721,1873722,1873723,1873726,1873729,1873731,1873738,1873741,1873750,1873752,1873764,1873775,1873777,1873778,1873790,1873791,1873793,1873796,1873799,1873801,1873803,1873805,1873807,1873838,1873844,1873853,1873860,1873906,1873914,1873921,1873929,1873934,1873940,1873946,1873957,1873988,1873997,1874003,1874011,1874025,1874032,1874037,1874043,1877597,1878154,1878180,1878183,1878185,1878195,1878205,1878222,1878249,1878270,1878467,1878832,1878970,1878976,1878992,1878993,1878994,1879409,1879768,1882051,1882117,1884115,1884422,1884739,1884741,1884742,1884743,1884744,1885376,1885386,1885391,1886485,1886488,1886490,1886494,1886508,1886511,1886514,1887249,1887265,1887266,1887928,1887929,1887934,1887935,1887936,1887956,1887973,1889239,1889253,1889263,1889400,1894091,1894344,1894355,1894424,1894891,1896258,1896294,1896298,1896300,1896301,1896723,1897363,1897366,1897373,1897446,1897464,1898106,1898108,1898112,1898131,1898145,1898147,1898154,1898155,1898170,1898217,1898248,1898411,1898494,1900127,1900139,1900227,1900237,1900669,1900707,1900761,1900767,1904066,1904068,1904070,1904462,1904465,1904583,1904585,1904891,1906662,1906671,1906672,1906676,1906678,1906680,1906682,1906689,1907632,1907644,1907646,1907648,1907655,1907657,1907661,1907663,1907675,1907750,1907751,1907753,1907755,1907756,1907783,1907784,1910224,1910228,1910235,1910238,1911959,1911960,1911962,1911963,1911964,1911965,1911966,1911967,1911968,1911969,1911970,1911971,1911972,1911973,1911974,1911975,1911977,1912163,1912195,1912207,1912212,1912216,1914510,1914511,1914512,1914513,1914514,1914515,1914516,1914517,1914816,1917637,1917663,1920432,1920433,1920438,1920439,1920448,1920462,1920463,1920470,1920489,1921237,1922394,1922618,1922754,1922763,1922929,1922950,1922975,1922998,1923003,1923015,1923045,1923069,1923233,1923245,1923249,1923255,1923264,1923281,1923288,1923604,1923607,1925414,1926009,1926010,1927913,1928124,1929322,1930924,1930942,1930980,1931021,1931055,1931069,1931075,1931627,1932139,1932141,1932147,1932356,1934731,1934759,1935419,1935420,1935421,1935422,1935473,1935477,1935480,1935481,1935483,1935484,1935485,1935486,1935488,1935491,1935492,1935493,1937904,1941214,1941934,1941960,1944712,1944713,1944714,1944760,1944763,1944768,1944814,1944834,1944879,1944880,1944969,1944973,1945001,1945052,1945056,1945057,1945332,1945334,1945337,1945339,1945340,1945342,1945344,1945345,1945349,1946481,1946494,1946534,1946539,1946564,1946567,1946568,1947528,1947669,1947670,1948365,1948366,1948367,1948368,1948369,1949643,1950269,1951573,1954065,1954099,1954218,1963645,1963701,1964066,1964175,1964185,1964187,1964189,1965565,1965670,1965672,1965675,1965753,1965757,1965769,1965868,1966031,1966034,1966068,1966078,1966083,1966088,1966098,1966128,1966170,1966171,1966173,1966174,1966175,1966176,1966177,1966178,1966181,1966182,1966183,1966184,1966185,1967252,1967290,1967305,1967329,1967436,1967437,1968017,1968027,1968034,1968041,1968051,1968336,1968341,1968362,1968422,1968741,1968754,1968769,1968800,1968835,1968862,1968880,1969146,1969286,1969298,1969309,1969321,1969612,1969725,1969787,1969799,1969804,1970289,1970292,1970293,1970294,1970295,1970299,1970300,1970301,1970302,1970303,1970304,1970305,1970306,1970313,1970410,1970419,1970423,1970426,1970462,1970465,1970507,1970511,1970529,1970540,1970566,1970573,1970575,1970576,1970591,1970936,1970938,1970947,1970952,1971003,1971115,1971571,1971579,1971596,1971674,1971716,1971756,1971893,1972027,1972140,1972175,1972185,1972223,1972297,1972305,1972335,1972376,1972389,1972397,1972405,1972410,1972639,1972836,1972856,1972873,1972882,1972896,1972906,1972917,1972923,1972942,1972944,1972949,1973031,1973034,1973036,1977105,1977140,1977188,1977296,1977305,1978614,1978627,1978628,1978632,1978635,1978639,1978640,1978641,1978643,1978644,1978645,1978646,1978647,1978648,1978653,1978654,1978655,1978656,1978659,1978660,1978668,1978678,1978682,1978688,1978689,1978690,1978692,1978693,1978695,1978697,1978701,1978702,1978708,1978712,1978713,1978715,1978724,1978728,1978734,1978736,1978749,1978764,1978810,1978811,1978887,1978898,1980223,1980330,1981554,1986458,1986459,1986460,1986468,1986469,1986470,1986474,1986475,1988103,1988106,1988108,1988109,1988113,1988115,1988116,1988117,1988119,1988120,1988121,1988122,1988127,1988143,1988545,1988546,1988547,1988548,1988768,1988774,1988780,1988781,1988782,1988962,1988967,1988996,1989007,1989160,1989161,1989162,1989163,1989164,1989165,1989166,1989167,1989169,1989406,1989409,1989411,1989513,1989877,1989878,1989879,1989880,1989881,1990542,1990543,1990544,1990548,1990595,1990850,1990950,1991045,1994381,1994423,1994427,1994429,1994431,1994436,1994437,1994441,1994470,1994504,1994508,1994536,1994537,1994539,1994563,1994655,1996936,1996983,1997561,1997824,2014075,2014076,2014079,2014081,2014082,2014083,2014084,2014085,2014100,2014101,2014104,2014105,2014109,2014114,2014128,2014134,2014135,2014137,2014154,2014346,2014366,2014526,2014535,2014859,2015179,2015182,2015184,2015185,2015208,2015229,2015281,2015287,2015631,2015810,2017896,2027403,2027420,2027429,2027432,2027453,2027460,2027462,2028245,2028530,2028740,2029088,2029131,2029376,2029655,2031054,2031059,2031066,2031235,2031947,2033219,2035365,2035393,2035434,2035439,2035443,2035458,2035475,2035483,2035521,2035593,2035601,2036034,2040158,2041348,2043212,2043222,2045931,2045985,2045993,2046003,2046007,2046012,2046032,2046121,2046122,2046123,2046124,2046125,2046126,2046128,2046129,2046133,2046134,2046135,2046138,2046141,2046147,2046161,2046164,2046172,2046182,2046183,2046185,2046300,2046308,2046423,2046779,2046859,2046866,2046874,2048512,2048521,2052315,2052434,2052550,2053091,2053215,2053454,2053456,2053564,2053638,2053686,2053897,2054939,2054957,2055366,2055368,2055372,2055375,2055446,2055458,2055531,2055532,2055537,2055861,2055867,2055902,2055909,2055929,2055945,2055951,2056796,2057250,2057251,2057252,2057253,2057255,2057256,2057257,2058279,2058281,2058298,2058304,2058383,2058804,2058811,2059371,2067309,2067311,2067313,2067322,2067327,2067332,2067359,2070221,2070222,2073058,2074961,2075030,2075610,2075650,2076839,2076841,2077555,2077674,2077678,2077750,2077759,2077825,2077827,2078990,2079620,2079629,2079663,2079675,2079678,2079679,2079693,2080069,2080074,2080090,2083532,2085832,2085835,2085836,2085837,2085838,2085840,2085841,2085842,2085844,2085845,2085846,2085848,2085849,2085850,2085851,2085872,2089899,2089905,2089913,2089915,2094343,2095004,2095005,2095006,2095008,2095009,2095011,2095013,2095015,2095021,2095023,2095024,2095041,2095042,2095043,2095044,2095045,2095046,2095047,2095050,2095051,2095052,2095053,2095055,2095059,2095060,2095061,2095063,2095064,2095065,2095066,2095067,2095068,2095069,2095070,2095071,2095072,2095077,2095079,2095081,2095083,2095084,2095085,2095086,2095930,2095933,2095935,2096054,2096070,2096071,2096395,2096630,2096631,2096632,2096635,2096640,2097665,2097823,2098460,2098917,2100509,2102138,2102140,2102149,2102835,2104928,2104931,2109959,2109960,2109961,2109964,2109978,2110019,2110022,2112240,2112773,2112783,2112789,2113145,2114306,2114328,2114336,2114343,2114344,2114351,2114355,2114432,2114465,2114492,2114498,2114768,2114979,2115802,2118319,2118336,2118340,2119035,2119045,2119049,2119057,2119923,2119931,2119941,2119945,2119962,2119977,2121108,2121109,2121110,2121112,2121113,2121115,2121116,2121117,2121120,2121121,2121122,2121123,2121124,2121125,2121126,2121136,2121139,2121142,2121152,2121154,2121156,2121895,2121915,2122541,2122585,2126069,2127031,2127042,2127048,2127405,2129612,2129616,2129619,2129640,2129649,2130988,2130995,2131019,2131022,2131060,2131115,2131552,2134123,2138094,2138139,2138141,2138142,2138143,2138144,2138146,2138147,2138148,2138149,2138150,2138151,2138152,2138153,2138155,2138162,2138165,2138167,2138168,2138169,2138171,2138172,2138173,2138174,2138176,2138177,2138179,2138180,2138181,2138182,2138183,2138184,2138186,2138216,2138218,2138220,2138221,2138222,2138226,2138228,2138242,2138244,2138246,2138248,2138253,2138256,2138265,2138271,2138277,2138278,2138286,2138288,2138314,2138338,2138343,2138346,2138354,2138356,2138357,2138361,2138362,2138364,2138365,2138367,2138369,2138370,2138371,2138380,2138381,2138383,2138384,2138387,2138389,2138390,2138392,2138398,2138413,2138434,2138461,2138462,2138497,2138507,2138601,2138612,2138613,2138631,2138634,2138635,2138636,2138637,2138639,2138640,2138641,2138642,2138643,2138644,2138645,2138648,2138651,2138654,2138655,2138662,2142129,2142135,2142143,2142417,2142421,2143766,2145710,2145823,2146414,2146415,2146416,2147213,2147244,2147271,2147362,2148472,2152417,2152440,2152919,2152921,2152923,2152932,2152934,2152936,2152943,2152973,2153118,2153794,2153805,2153807,2153808,2153913,2154648,2155353,2155358,2156414,2156750,2157264,2157480,2157537,2157627,2162360,2162765,2163532,2163535,2163541,2163546,2163549,2163551,2163554,2163556,2163562,2163564,2163565,2163568,2163570,2163587,2163602,2163603,2163604,2163606,2163607,2163608,2163609,2163610,2163611,2163621,2163626,2163633,2163635,2170455,2170699,2170706,2170715,2172728,2172731,2172733,2177260,2177273,2177275,2177278,2177279,2181996,2181999,2182004,2182008,2182012,2183301,2183707,2183957,2183959,2187906,2187913,2187977,2189655,2189676,2189677,2189679,2189680,2189681,2189688,2189692,2189693,2189694,2189695,2189698,2189701,2189704,2189705,2189707,2189709,2189710,2189711,2189812,2189814,2189816,2189821,2189824,2190161,2190165,2190764,2190766,2190790,2190792,2190810,2190912,2190941,2192095,2192110,2192112,2192113,2192120,2192123,2192127,2192128,2192343,2192351,2192354,2192358,2193011,2193012,2193948,2193955,2193957,2195214,2195257,2200575,2200576,2200580,2200581,2200685,2200698,2200734,2200735,2200737,2200763,2200766,2200767,2200863,2201012,2201054,2201510,2201521,2202082,2202083,2202096,2202097,2202744,2202745,2202746,2202747,2202750,2202751,2202754,2202755,2202757,2202759,2202763,2202764,2202770,2202775,2202776,2202777,2202778,2202782,2202783,2202786,2202791,2202792,2202797,2202821,2202824,2202919,2205252,2205255,2205277,2205281,2205282,2205284,2205285,2205287,2205294,2205765,2205769,2205789,2205800,2205809,2205825,2206193,2206206,2206451,2206476,2206748,2206764,2206788,2207194,2209268,2209294,2209325,2209395,2212023,2212046,2212048,2212049,2212051,2212065,2212068,2212075,2212106,2212113,2212542,2212547,2212555,2212597,2212672,2212673,2212674,2212675,2212676,2212677,2212678,2212692,2212698,2212699,2212706,2212707,2212709,2212719,2212720,2212759,2212760,2212761,2212763,2213214,2213334,2215091,2215176,2215209,2215381,2215383,2216618,2217062,2217169,2217923,2220650,2220651,2224823,2224824,2224849,2224852,2225208,2225209,2225211,2225218,2225221,2225222,2225234,2225236,2225950,2227783,2228370,2230781,2230786,2230788,2231126,2231133,2231140,2231150,2231156,2231157,2231172,2231174,2231287,2231291,2231801,2231818,2231819,2231820,2231830,2231831,2232397,2232403,2232407,2241090,2241098,2241100,2241102,2241118,2241137,2241169,2241171,2241183,2241187,2241231,2253911,2253930,2255649,2255656,2255658,2255702,2255703,2255802,2256279,2256283,2256287,2256292,2258297,2260750,2261402,2263013,2263821,2263822,2263824,2265271,2268343,2268416,2268491,2268498,2268786,2269008,2269015,2269203,2269204,2269217,2269221,2269222,2269223,2269225,2269226,2269227,2269228,2269231,2269234,2269235,2269236,2269237,2269240,2269242,2269244,2269281,2269305,2269322,2269327,2269329,2269331,2269336,2269338,2269343,2269346,2269355,2269366,2269368,2269378,2269382,2269390,2269393,2270546,2270547,2270549,2270552,2270589,2270595,2270626,2271419,2271464,2272069,2272079,2272087,2272093,2272094,2272096,2273972,2274102,2274175,2274177,2274225,2274233,2274258,2274703,2274709,2274710,2274711,2275122,2275123,2275125,2275126,2276438,2276440,2276591,2276592,2276614,2276887,2276937,2278690,2279501,2279506,2280173,2281283,2281297,2281298,2281954,2281955,2281957,2281959,2281960,2281961,2281964,2281970,2281972,2281973,2284449,2285280,2285284,2285285,2285288,2285291,2285763,2285764,2285765,2289192,2289195,2289931,2291292,2291330,2293909,2293912,2294044,2294063,2294069,2294075,2294448,2294454,2294469,2294535,2297457,2297458,2300289,2300290,2300293,2300296,2300518,2303649,2304018,2304478,2304489,2304494,2304523,2306892,2307394,2307416,2307418,2310591,2310684,2311475,2311479,2311481,2311483,2311484,2311486,2311487,2311534,2315150,2315151,2315152,2315153,2315154,2315155,2315156,2315157,2315159,2315160,2315161,2315162,2315163,2315164,2315165,2315166,2315167,2315168,2315170,2315171,2315172,2315867,2315870,2316071,2316072,2316073,2316074,2316075,2316076,2316077,2316078,2316079,2316080,2316081,2316082,2316083,2316084,2316085,2316086,2316087,2316088,2316089,2316090,2316091,2316093,2316095,2316096,2316097,2316098,2316099,2316100,2316101,2316103,2316107,2316108,2316109,2316110,2316112,2316113,2316114,2316115,2316116,2316117,2316118,2316119,2316121,2316262,2316278,2320337,2320339,2320340,2320342,2320343,2320452,2320457,2320460,2320461,2320463,2322072,2322079,2322083,2322085,2322101,2322114,2322116,2322468,2322502,2323287,2323288,2323289,2323290,2323291,2323292,2323293,2323331,2323332,2323333,2323334,2323337,2323366,2323369,2324443,2325149,2325165,2325183,2325314,2325315,2325837,2325844,2326757,2326758,2326760,2326762,2326903,2327283,2327284,2327285,2327290,2328011,2328013,2328014,2328016,2328017,2328018,2328019,2328020,2328024,2328029,2328269,2328455,2329084,2329121,2329220,2329228,2329539,2329684,2329685,2329686,2329687,2329721,2329725,2330264,2330269,2330271,2330277,2330602,2330624,2330813,2330819,2330829,2331499,2332825,2332995,2334158,2334290,2334324,2334342,2335280,2337035,2337347,2337349,2337354,2337368,2338276,2338288,2339037,2339284,2339366,2339449,2339614,2339615,2339830,2340838,2340844,2340881,2340917,2340937,2340942,2340944,2341109,2341208,2341455,2342771,2342772,2342774,2342775,2342776,2342777,2342778,2342781,2342786,2342787,2342788,2342789,2342794,2342809,2342810,2342811,2342814,2342826,2342830,2342832,2342840,2342843,2342847,2342856,2342907,2342909,2342915,2342945,2342950,2342951,2345549,2345826,2345859,2347093,2347095,2349207,2349208,2349209,2349210,2349211,2349474,2349476,2349477,2349478,2349479,2350454,2350495,2351763,2351764,2351765,2351766,2351767,2351768,2351769,2351770,2351778,2351909,2351911,2351913,2351914,2351915,2351916,2351917,2351918,2351919,2351920,2352383,2353915,2353917,2353925,2353975,2355043,2355046,2355047,2355048,2355051,2355054,2355055,2355056,2355898,2355910,2356027,2356038,2356047,2356058,2356063,2356070,2356623,2356694,2356741,2356808,2356841,2358592,2358599,2358662,2358678,2358689,2358697,2358703,2358705,2358762,2358795,2358818,2361998,2363728,2363729,2363991,2363993,2364178,2364781,2366212,2366294,2368137,2368150,2368162,2368184,2369257,2369288,2369520,2369612,2369621,2369703,2369957,2369965,2369980,2370027,2370098,2370107,2370187,2370209,2370312,2370342,2370382,2370442,2370471,2371299,2371342,2371367,2371382,2371396,2371679,2371683,2371712,2371746,2371747,2371760,2371763,2371797,2371798,2371799,2371809,2371811,2371812,2371814,2375150,2375382,2375383,2376532,2376534,2377283,2378706,2378711,2378948,2378956,2378960,2379320,2379327,2379334,2379335,2379344,2379350,2379353,2379354,2379615,2379619,2379637,2379640,2379644,2379645,2379647,2379648,2379649,2379650,2379651,2379652,2379653,2379654,2379655,2379656,2379657,2379658,2379659,2379660,2379661,2379662,2379663,2379664,2379666,2379668,2379670,2379672,2379673,2381132,2381778,2381785,2381813,2384034,2384040,2384041,2384054,2384056,2384059,2384071,2384121,2384122,2384123,2384124,2384143,2384210,2384212,2384304,2384311,2384312,2384320,2384321,2384322,2386279,2386289,2386295,2386296,2387351,2387354,2387356,2387358,2387365,2387885,2387907,2387917,2387925,2387932,2387933,2387934,2387935,2387936,2387937,2387938,2387939,2387940,2387941,2387942,2387944,2387945,2387946,2387947,2387948,2387949,2387950,2387955,2387956,2388086,2388087,2388931,2389012,2390878,2391972,2392257,2392260,2392262,2392266,2392268,2392272,2392274,2392275,2392276,2392277,2392279,2392280,2392281,2392282,2392283,2392284,2392285,2392286,2392288,2392289,2392290,2392291,2392292,2392364,2392372,2392374,2392376,2392378,2392540,2392979,2392980,2393166,2393715,2393719,2393721,2393722,2393724,2393746,2393822,2394256,2394264,2394270,2394273,2395143,2395150,2395156,2395991,2396193,2396220,2396461,2396468,2396480,2396494,2396519,2396534,2396538,2396540,2396576,2396580,2396614,2396615,2396617,2396620,2396621,2396624,2396629,2396655,2396657,2396659,2396664,2396678,2396679,2396721,2396786,2396797,2396820,2396852,2396893,2396930,2396955,2396958,2396961,2396964,2396967,2396987,2397004,2397008,2397037,2398725,2398859,2401324,2401325,2401326,2402778,2402780,2406283,2406300,2406306,2406500,2406512,2406517,2406643,2406647,2406679,2406689,2406690,2406691,2406692,2406693,2406694,2406695,2406696,2406697,2406705,2406709,2406710,2409347,2409402,2409558,2409566,2409568,2409586,2409626,2409671,2409688,2409870,2410037,2410101,2410110,2416515,2416562,2417019,2417030,2421077,2421266,2421278,2421412,2421437,2426235,2426272,2426273,2426318,2426403,2426406,2427549,2427562,2427565,2427566,2427567,2427569,2427570,2427571,2427578,2427579,2427581,2427582,2427583,2429343,2429400,2429633,2430108,2430353,2430429,2430691,2430877,2431593,2431597,2431601,2431640,2431641,2431820,2433164,2433896,2433907,2434030,2434032,2434034,2434036,2434278,2434430,2434456,2434490,2434491,2434493,2434529,2434596,2434606,2434610,2434613,2435425,2435428,2435431,2435433,2435485,2435516,2435724,2436528,2439092,2439093,2439095,2439572,2439593,2439596,2440315,2440333,2440362,2440605,2440615,2440667,2440700,2440736,2440759,2440769,2440791,2440794,2440815,2440817,2440818,2440820,2440821,2440822,2440823,2440829,2440834,2440835,2440836,2440837,2440839,2440840,2440843,2441054,2441516,2441572,2441798,2441800,2441806,2441809,2442040,2442058,2442062,2442114,2442428,2442431,2442433,2442434,2443069,2443070,2443072,2443074,2443075,2443078,2443079,2443080,2443081,2443082,2443088,2443089,2443090,2443091,2443288,2443340,2443352,2443380,2443382,2443511,2443514,2443559,2443562,2443565,2443569,2443582,2443607,2443713,2445410,2445411,2445412,2445589,2445590,2445592,2445857,2445858,2446098,2446101,2446105,2446502,2446558,2446566,2446567,2446570,2446571,2446572,2446573,2446574,2446575,2446577,2446579,2446581,2446582,2446584,2446586,2446682,2446694,2446730,2446760,2446876,2446918,2446922,2446926,2446988,2446997,2447015,2447038,2447042,2447050,2447053,2447063,2447071,2447074,2447124,2447130,2447145,2447194,2447202,2447204,2447322,2447327,2447331,2447334,2448098,2448099,2448102,2448130,2448136,2448150,2448154,2450432,2450509,2450664,2450665,2450698,2450936,2450939,2450941,2450963,2450992,2450998,2451001,2451003,2451032,2451034,2451036,2451043,2451111,2451132,2451137,2451236,2451251,2451259,2451279,2451280,2451288,2451332,2451436,2451466,2451473,2451484,2451486,2451487,2451495,2451515,2451729,2451730,2451732,2451733,2451734,2451735,2451736,2451737,2451738,2451740,2451741,2451742,2451745,2451746,2451747,2451748,2451749,2451783,2451784,2451832,2451910,2452022,2452108,2452115,2452116,2452123,2452129,2452134,2452142,2452345,2452384,2452390,2452394,2452425,2452473,2452475,2452476,2452477,2452478,2452480,2452823,2452825,2452828,2453345,2453359,2453360,2453427,2453462,2453463,2453471,2453517,2453540,2453588,2453630,2454072,2455843,2455858,2456045,2456051,2456057,2456062,2456065,2456071,2456079,2456084,2456138,2457401,2457420,2457422,2457423,2457432,2457436,2457532,2458555,2458726,2458732,2459475,2460513,2460524,2462356,2462720,2462973,2462987,2463735,2464095,2464099,2464102,2464105,2464106,2464108,2464109,2464110,2464111,2464114,2464258,2464276,2464277,2464279,2464280,2464284,2464289,2464297,2464298,2464299,2464325,2464326,2464327,2464328,2464329,2464331,2464336,2464337,2464338,2464339,2464341,2464357,2464358,2464361,2464363,2464365,2464366,2464368,2464369,2464370,2464371,2464372,2464374,2464375,2464376,2464377,2464378,2464379,2464380,2464383,2464386,2464387,2464391,2464394,2464395,2464396,2464397,2464398,2464399,2464402,2465051,2465235,2465240,2465241,2465389,2465393,2465399,2465407,2465495,2465585,2465798,2466180,2466495,2466499,2471053,2471060,2471064,2473838,2473866,2473870,2473913,2473919,2474718,2475595,2476170,2476267,2476313,2476314,2476521,2476522,2476523,2476524,2476525,2476526,2476527,2476528,2476531,2476532,2476535,2476537,2476542,2476551,2476552,2476555,2476556,2476558,2476559,2476560,2476561,2476563,2476564,2476566,2476567,2476568,2476569,2476570,2476571,2476572,2476573,2476574,2476575,2476576,2476579,2476580,2476581,2476582,2476583,2477582,2477598,2477602,2477653,2477816,2478462,2478615,2481920,2482105,2482357,2482719,2482784,2484824,2484826,2484827,2484829,2484832,2484837,2484842,2486595,2486851,2487489,2487490,2487491,2487493,2487497,2487498,2487500,2487501,2487504,2487505,2487508,2487516,2487525,2487941,2488338,2488410,2488427,2488828,2488839,2488843,2488856,2488951,2488957,2489131,2489183,2489184,2489194,2489198,2489713,2490320,2490336,2490344,2490365,2491640,2492348,2492351,2492363,2497191,2497197,2497198,2497199,2498054,2498060,2498061,2498160,2498164,2498188,2500911,2501211,2501712,2501835,2502058,2502078,2506511,2507955,2507981,2509048,2509179,2513169,2513991,2517108,2517118,2519818,2519823,2520108,2520109,2520116,2520124,2520135,2520136,2520138,2520144,2520145,2520417,2522254,2522278,2522292,2526102,2526371,2529977,2531366,2531370,2531373,2531376,2532030,2532032,2532034,2532057,2533677,2533685,2533757,2533774,2533808,2533810,2534120,2534193,2534197,2534198,2534207,2534210,2534218,2534220,2534248,2534273,2534280,2534285,2534303,2534368,2535459,2536792,2536857,2536872,2536875,2536878,2536887,2536911,2536914,2536915,2536916,2536918,2536921,2539202,2539293,2539302,2539304,2539313,2539320,2539335,2539386,2539387,2539484,2539485,2539513,2539519,2539921,2539951,2543113,2543660,2544228,2544236,2544254,2544806,2545872,2545965,2546010,2546012,2546015,2546016,2546017,2547634,2547638,2547872,2547877,2547885,2547957,2547986,2547999,2548015,2548024,2548032,2548034,2548092,2552441,2552443,2552448,2552451,2552466,2554340,2557286,2557287,2557291,2557292,2561412,2561419,2561451,2561453,2561458,2573702,2573710,2573711,2573730,2573731,2573732,2573733,2573734,2573735,2573736,2573737,2573739,2573740,2573741,2573742,2573743,2573744,2573745,2573746,2573747,2573748,2573750,2573751,2573754,2573755,2573756,2573757,2573758,2573759,2573760,2573761,2573764,2573765,2573766,2573767,2573768,2573769,2573770,2573771,2573773,2573775,2573776,2573777,2573778,2573780,2573781,2573782,2573783,2573784,2573785,2573786,2573787,2573788,2573789,2573791,2573792,2573793,2573794,2573796,2573797,2573798,2573799,2573800,2573801,2573803,2573805,2573806,2573807,2573808,2573809,2573811,2573812,2573813,2573814,2573815,2573816,2573817,2573818,2573819,2573820,2573821,2573822,2573823,2573824,2573825,2573826,2573827,2573828,2573829,2573830,2573831,2573832,2573833,2573834,2573835,2573836,2573839,2573840,2573841,2573842,2573843,2573844,2573846,2573847,2573848,2573849,2573850,2573851,2573852,2573853,2573854,2573855,2573856,2573857,2583281,2583313,2587829,2587835,2587852,2588079,2593844,2593846,2593851,2593855,2593856,2593857,2604191,2604211,2604310,2604311,2604312,2604316,2606426,2607389,2607448,2617559,2623627,2623779,2623808,2624020,2625803,2625811,2625819,2625820,2625898,2625902,2631730,2603113,2584246,2552032,2473123,2443746,2443745,2443744,2443743,2443742,2443740,2443739,2440097,2440096,2440095,2403324,2402898,2402893,2380814,2371802,2371801,2339416,2316929,2316857,2316855,2316853,2316832,2316831,2316829,2316827,2316825,2316823,2316820,2316817,2312259,2311812,2310925,2310850,2288442,2281095,2281093,2281091,2280803,2270291,2232200,2230293,2230292,2230290,2226605,2226604,2218145,2218122,2149656,2065433,2065432,2062011,2061014,2057428,2054207,2049101,2049096,2049093,2049089,2043108,1966428,1966427,1966426,1966425,1963699,1954250,1954249,1945849,1945834,1945833,1936205,1927802,1927801,1927800,1927799,1927798,1927797,1927796,1927775,1927774,1927773,1927772,1927771,1927770,1927769,1927768,1927767,1927765,1927764,1927763,1927762,1927761,1927760,1927759,1927758,1927757,1927756,1927755,1927754,1927753,1927752,1927751,1927750,1903562,1903558,1889757,1889756,1889755,1885993,1885992,1885990,1885989,1885988,1885987,1885986,1877953,1876585,1876580,1876577,1876576,1876574,1876571,1876569,1876568,1876567,1867393,1849570,1828936,1828935,1828188,1828162,1828138,1828107,1828101,1828099,1828093,1818867,1818827,1818722,1798606,1798605,1798604,1780873,1771863,1771862,1771861,1771304,1770152,1738019,1738018,1738017,1738016,1738015,1738014,1738013,1738012,1737549,1732261,1732260,1732256,1723878,1723069,1723068,1723067,1723066,1723065,1723064,1723063,1723062,1723061,1723060,1723059,1723056,1722114,1718237,1718232,1711014,1669508,1669492,1666125,1664629,1652636,1652418,1652417,1652416,1652415,1652414,1652413,1651514,1650662,1650601,1650600,1650599,1642862,1642861,1642860,1636808,1636807,1636805,1636804,1636803,1636802,1630486,1630485,1630484,1630483,1630482,1619531,1619530,1619529,1619528,1605005,1605004,1605003,1591737,1590307,1589115,1539116,1539115,1539114,1539113,1539112,1539111,1538961,1538959,1534944,1534889,1534887,1531862,1531861,1531860,1524865,1510705,1499172,1494666,1494664,1494663,1494661,1494660,1490739,1490738,1490737,1490736,1488644,1488642,1488631,1483587,1481939,1440900,1440899,1440898,1440896,1440895,1440894,1440893,1440892,1440891,1440890,1440889,1440888,1440887,1428845,1428824,1417890,1381668,1379993,1379992,1379991,1379990,1379989,1379988,1379987,1373312,1373311,1373310,1373309,1373308,1373307,1373306,1335737,1335736,1311501,1311500,1311499,1311498,1311497,1311496,1299322,1299301,1269195,1269194,1267070,1267035,1267034,1249087,1249086,1249085,1249084,1249083,1249045,1246549,1241946,1241944,1241938,1240127,1227347,1227346,1208133,1208132,1208131,1201225,1201064,1201035,1201030,1201016,1201010,1201007,1157003,1156848,1132347,1121156,1121155,1121154,1121153,1121152,1121151,1121150,1121149,1121148,1121147,1121146,1107406,1090846,1090787,1090784,1090534,1090533,1090532,1074940,1074939,1074937,1074936,1074917,1074352,1074351,1074349,1074348,1074347,1074333,1052128,1037436,1009447,1009446,984607,952571,952570,952569,952568,952567,952558,952557,952556,952555,952554,952552,952551,952549,952548,952547,952546,952545,928407,928388,928364,928284,922284,922283,922282,914806,914805,875348,875347,875346,861721,861720,861719,861718,857073,857072,857071,857070,857069,857068,857067,857066,857065,857064,857063,857062,857061,857060,857059,840289,840288,840287,840286,840285,840284,839994,839993,839423,838208,837631,837564,837563,830620,830619,830618,830617,830616,830615,830596,830595,830594,830593,830592,830546,830545,824478,822999,822998,815122,815121,815120,815119,815114,813000,810343,809183,808760,808759,808758,808757,804582,804581,804571,804570,804569,804568,804567,803569,803568,803567,803566,803565,803564,803563,798478,798088,798087,798086,798085,798084,794893,792431,787409,787353,787352,785867,782982,781226,781225,780933,777984,777983,777982,777981,776906,776903,776887,775747,775682,775650,775648,774249,774248,774247,774246,774245,774244,774235,773800,762626,762212,762070,762069,762068,761003,758637,758636,754221,754220,754219,754218,753209,748910,747396,747395,747394,747393,747392,747391,747390,747389,747388,747387,747386,747385,747384,747383,747382,747381,747380,745381,745289,745288,745287,745286,745268,745261,745260,745258,744887,744776,744775,744774,744773,744760,744520,744519,744518,737510,735768,735766,735765,735764,735762,735759,731507,731161,727046,727036,727034,725594,725582,724624,724623,724622,724621,724620,720988,720987,720986,720985,720984,719209,718896,718895,718894,718893,715840,708830,708604,706113,706112,706110,706108,706107,706106,706105,704804,704803,704802,701835,701045,700505,700501,698602,698601,698600,698599,698598,696063,695876,695871,695867,695733,695732,695726,695619,695611,695533,695530,691273,690576,690068,683208,677102,677101,677100,677096,677095,677094,677093,677092,677091,677090,677089,677088,677087,673987,673612,673224,673223,672380,672379,672320,670423,669097,669096,669095,669094,668577,666632,666631,666630,666629,666628,666612,666594,666572,664620,664619,664618,664601,664600,664599,664598,663423,663393,661951,661950,661713,661712,661711,661710,661709,661301,654180,654143,654142,653674,653387,653386,653385,653380,653379,653378,653377,653376,652479,652478,650771,650715,644750,642160,641058,640944,640865,640468,639327,638156,638155,638089,634932,633125,633124,632393,632392,632390,632389,631628,630877,626226,626223,626203,625453,622990,622988,622370,619551,619546,618699,617357,617286,617271,614937,614936,614932,614931,613966,611474,611472,611451,611447,611446,611442,611441,611438,611433,609279,604971,603798,603428,599173,599159,599144,595809,595780,595779,595778,595777,595744,595743,595742,594915,593851,593850,593849,593835,593834,593833,593832,593824,593823,593822,593821,593818,593817,593800,593799,593793,593787,593780,593779,593778,593777,592052,590956,590672,590236,590226,590016,588648,586233,586232,586231,586226,586224,586223,583225,583224,583223,580538,577537,577528,576085,576084,576023,575128,574348,574242,574239,568797,567666,567665,567142,567140,566670,566334,566333,563528,563519,562393,562340,561575,561574,556221,556218,555798,555792,555791,555790,555787,555784,555783,555771,555770,555769,555768,554455,554454,554433,554424,554341,554340,554333,554332,554331,554330,554329,554328,554327,552933,552554,552552,552253,552252,552251,552127,552126,552124,550715,550714,546133,540057,539554,539294,539293,539292,539221,538835,538833,536528,536527,536526,536317,535258,535257,535256,535249,534353,534352,534350,532456,532454,532448,530991,530959,530941,530940,530939,530934,530704,530001,528089,528086,528085,528082,528081,528071,528067,528056,528055,528054,528053,528052,527805,527802,527708,527706,527698,527697,527693,527692,527691,527690,526032,526031,526029,526028,526026,526025,525960,525957,525559,525548,525486,525481,525480,523788,523784,523032,523031,523030,521886,521885,521880,521879,516520,512415,512414,512108,509467,509466,508803,508533,508078,507049,507047,507040,506828,506342,506327,505897,505881,505463,505453,505055,505054,505053,505052,503273,502211,502207,501081,501077,500371,500369,500236,500208,498450,498443,497915,497901,497899,497886,497877,495924,494616,494615,494133,493312,492694,492348,492346,492344,492343,492342,492340,492339,488332,487451,487338,487029,487027,487025,487023,487022,487021,486986,483701,483699,483698,483697,483696,483695,483694,483692,483691,483201,482650,482283,482254,482247,482246,481796,481352,478893,478881,478880,478878,478877,478448,478447,478345,478344,478341,478330,478325,478241,478239,476020,476017,475041,473580,473472,473006,472835,470886,470885,470884,470883,470699,470685,470684,470574,470542,470541,470523,470520,470027,467230,465414,465412,465411,465306,465217,465215,465213,464676,464675,464673,464672,464671,464670,464669,464668,462046,461301,461300,461219,459675,459674,458247,457790,457788,457787,457355,457205,456036,454718,454471,454316,454315,454313,450903,450057,450050,450047,450046,450045,450044,450041,450037,450036,450033,450032,449109,449108,448298,447412,446876,445768,444770,444769,444767,444766,443509,443508,443507,442955,442544,441628,440183,439570,438222,438220,438116,438115,437518,437143,437142,435831,435544,435543,435542,435356,435301,435242,433167,432128,430716,426873,426731,426729,426547,426545,426541,426539,426537,426535,426533,423432,423429,419075,418646,418048,418046,418042,418038,418036,418034,418030,418028,418026,418024,418022,418020,418018,418013,415001,412225,412223,408908,408907,408760,406914,404361,401805,401804,401803,401801,401243,401017,401015,401014,401013,401012,401010,401001,401000,399891,397065,388661,388659,388600,388598,388586,387692,386397,386392,384552,384542,384540,384533,382400,382152,382146,382134,382132,382130,382128,378345,378344,378343,377445,377362,377356,377196,372739,372702,370552,370046,370045,370044,370042,370038,370013,370012,370011,370010,366769,366767,366766,366765,366762,366591,366531,366530,366361,366091,366089,366087,366079,366077,366064,366063,366061,366056,366054,366052,364580,364578,364577,364576,364575,364573,364570,364568,364567,364565,364563,364561,364559,364555,364552,364550,364549,364548,364547,364546,364544,364543,364542,364519,364518,364517,364514,364018,363655,362936,362935,362842,361911,361091,357862,357861,357850,355711,355667,355666,355664,355662,355660,355659,355642,355641,355636,353836,353833,353702,353501,353500,353499,353498,353497,353471,353469,353450,353449,353447,353443,353421,353418,353335,353309,353306,352084,350897,350151,345647,345606,345605,345604,345603,345535,345534,345533,345532,344691,344642,344640,344476,344474,344473,343065,343064,343063,343041,343040,342714,341886,341884,341883,341725,340836,340406,340405,340404,340403,340402,340401,340400,340399,340398,340397,340372,340291,338357,337852,335753,335678,335676,335674,335672,335670,335667,335659,335655,335617,335614,335612,335326,335324,335321,335320,335318,335316,335313,335310,335308,335079,334412,326160,326159,326158,326157,325051,325048,325047,323181,323180,323179,323177,322587,320441,318318,318317,318283,318282,318030,315417,314761,312971,309186,309185,308911,307412,306475,303088,303084,303083,303082,301660,301557,295134,288354,288334,288332,288331,288326,288323,288313,288305,288302,283812,282571,282015,282014,282013,282012,282006,281935,281755,279752,277604,272189,271283,271280,271277,259730,259506,259503,258929,258928,257125,256141,256137,252833,252824,251980,251976,251975,251972,251776,241571,240170,238544,238541,238332,238330,238329,238270,232718,228550,228506,228503,228383,223182,200953,180420,111077,106918,2632024,2632000,2631973,2603510,2603509,2603505,2603502,2603500,2603478,2603474,2603470,2603467,2603465,2603450,2603449,2603446,2603441,2603439,2603413,2603407,2603399,2603378,2603371,2603365,2603362,2603240,2603235,2603233,2603218,2603185,2603182,2603178,2603158,2603153,2603150,2603149,2603147,2603144,2603141,2603137,2603133,2603129,2603124,2603114,2603084,2603076,2603065,2603060,2603050,2603039,2602995,2601779,2601771,2601769,2601759,2601750,2601745,2601712,2585390,2574637,2569345,2569325,2565557,2565555,2565554,2565550,2565548,2565547,2565545,2565528,2565523,2565520,2565516,2565139,2565137,2565135,2565134,2565132,2565131,2565130,2565129,2565128,2565126,2565123,2565121,2565118,2565116,2556740,2522648,2522647,2522644,2522641,2522637,2522636,2522635,2522619,2522593,2514599,2514594,2514591,2510875,2510873,2510872,2510871,2510868,2510867,2510863,2510849,2510751,2510745,2510744,2510176,2510173,2510165,2510162,2510158,2510152,2509892,2508063,2508059,2508052,2508048,2508043,2508039,2508023,2508021,2508001,2507994,2507990,2507985,2507983,2507980,2507977,2507976,2507968,2507967,2507966,2507941,2507940,2507937,2507934,2507933,2507931,2507930,2507929,2507925,2507924,2507923,2507922,2507921,2507920,2507919,2507917,2507912,2507899,2507897,2504401,2492341,2490944,2490717,2490630,2490404,2490304,2486125,2486124,2486060,2486058,2486055,2486049,2485785,2482271,2482266,2482263,2481662,2462794,2462792,2462780,2462762,2462761,2462754,2462750,2462747,2462745,2462735,2462732,2462729,2462719,2462715,2462711,2462709,2462708,2462706,2462705,2462704,2462702,2462700,2462695,2462694,2462692,2462688,2462684,2462666,2462658,2462654,2462649,2462645,2462637,2462618,2462615,2462600,2462596,2462594,2462591,2462589,2462584,2462580,2462577,2462572,2462570,2462567,2462559,2462554,2462548,2462547,2462538,2462535,2462531,2462527,2462523,2462521,2462517,2462515,2462503,2462494,2462493,2462488,2462483,2462482,2462480,2462478,2462476,2462468,2462465,2462461,2462444,2462440,2462433,2462430,2462425,2462424,2462423,2462421,2462420,2462419,2462418,2462415,2462414,2462407,2462405,2462403,2462401,2462398,2462397,2462396,2462395,2462393,2462392,2462391,2462390,2461289,2459292,2459276,2458003,2457916,2457911,2457844,2452067,2440963,2440682,2437802,2433394,2431190,2431182,2430485,2430476,2430470,2428009,2427981,2427966,2427957,2427952,2427940,2427396,2427379,2426780,2426762,2426760,2426758,2426753,2426750,2426746,2426744,2426741,2426455,2425440,2423490,2421235,2421230,2421225,2421222,2421212,2421168,2421112,2421094,2421072,2421070,2421064,2421060,2421025,2421023,2421022,2421020,2420998,2420985,2420976,2420973,2420806,2420801,2420799,2420796,2420789,2420775,2420760,2420723,2420703,2420700,2420695,2416490,2416444,2416442,2414547,2414542,2414516,2414512,2414509,2412066,2410219,2410211,2410206,2410199,2409742,2401321,2401318,2401263,2401260,2401252,2401073,2395450,2393658,2393654,2393143,2393124,2389824,2386829,2386818,2386428,2384609,2381353,2381337,2381328,2380864,2379194,2379183,2379178,2379177,2379175,2378973,2378969,2378967,2378949,2378942,2378937,2378934,2378929,2378928,2378925,2378840,2378826,2377356,2377355,2377354,2377318,2377310,2377304,2377300,2377297,2377296,2377292,2377290,2377288,2377287,2377286,2377285,2377263,2377242,2377238,2377229,2377200,2377198,2377194,2375310,2372741,2372708,2372393,2371670,2371641,2371502,2371493,2371463,2371455,2371434,2371416,2371254,2371190,2369899,2366605,2363210,2363186,2360120,2360117,2360028,2360018,2359984,2359983,2359979,2359977,2359974,2359964,2359957,2358756,2358333,2355190,2353430,2353389,2349104,2349076,2345103,2345097,2344884,2337455,2329320,2328384,2328341,2328332,2326294,2326196,2326179,2325918,2325880,2324609,2324603,2324568,2324567,2324559,2324556,2324553,2324552,2324549,2324546,2324539,2324533,2324525,2324319,2324221,2324141,2324134,2324128,2324124,2324118,2319957,2319027,2317008,2316710,2315734,2315716,2315712,2315710,2315703,2315701,2315698,2299781,2291363,2291155,2289840,2289333,2289325,2289324,2289322,2289321,2289320,2289319,2284655,2284271,2284270,2281287,2281286,2280294,2280117,2280100,2280089,2280071,2280063,2280042,2280041,2280037,2280034,2280031,2280027,2280025,2280020,2280019,2280016,2280012,2280011,2280008,2280006,2279995,2279993,2279991,2279976,2279968,2279937,2278633,2277768,2277746,2277666,2277644,2277628,2277407,2277141,2275298,2275168,2274204,2273683,2273675,2273297,2269715,2268877,2261205,2258019,2257864,2257762,2256836,2235567,2234619,2234328,2228581,2228477,2228461,2227311,2225771,2225770,2221281,2213859,2213858,2213856,2212526,2209564,2209556,2209444,2209443,2209442,2209397,2209345,2209344,2209343,2209340,2209338,2209337,2209336,2209334,2209333,2209293,2209292,2209291,2209290,2209289,2209288,2209287,2209286,2209285,2209284,2209283,2209282,2209281,2209280,2209279,2209201,2209156,2209152,2209018,2205811,2197720,2197660,2197541,2195455,2195454,2195453,2195452,2195451,2195450,2195449,2195448,2195447,2195446,2194821,2192842,2192760,2192755,2192751,2192660,2190940,2190937,2190904,2190878,2190870,2190800,2190651,2189934,2189925,2189843,2189841,2189839,2189833,2189626,2189616,2189613,2189608,2189345,2189340,2189333,2189261,2189189,2188952,2188897,2188840,2188766,2188705,2188636,2188577,2188498,2188464,2188429,2188037,2183773,2183772,2181980,2173756,2173751,2173736,2173666,2173654,2173646,2173592,2173494,2173419,2173333,2173332,2171562,2171561,2171560,2171559,2171558,2171557,2171556,2171555,2170596,2160525,2159089,2158932,2158828,2158304,2157369,2157289,2157280,2152204,2146318,2146308,2146307,2146306,2146305,2146304,2146303,2146302,2146299,2146298,2146297,2146296,2146295,2146294,2146293,2146291,2146290,2146289,2146288,2146287,2146286,2146285,2146284,2146283,2146282,2146281,2146280,2146279,2146277,2146276,2146275,2146274,2131565,2131538,2131536,2131242,2131164,2131137,2131004,2128798,2128790,2128781,2128255,2128214,2127828,2127138,2127127,2120665,2118173,2118062,2118057,2118056,2118053,2117207,2117203,2117198,2117194,2117186,2116632,2115935,2114914,2114872,2114765,2114745,2114740,2114134,2113665,2113567,2113351,2113347,2112866,2110991,2110783,2110781,2110779,2110778,2110776,2110771,2110310,2110307,2107098,2106269,2106268,2106266,2106265,2106263,2106262,2106259,2106258,2106256,2106255,2106254,2106253,2106252,2106251,2106247,2106245,2106243,2106242,2106241,2106239,2106238,2106236,2106235,2106234,2106233,2106232,2106231,2106230,2106228,2106227,2106226,2106225,2106224,2106222,2106220,2106219,2106218,2106217,2106216,2106205,2106204,2106202,2106201,2106192,2106171,2106162,2106154,2106127,2106076,2105964,2105730,2105608,2105551,2105214,2105203,2105184,2105037,2105036,2105021,2104230,2103434,2103298,2103284,2102910,2102909,2102900,2102073,2102070,2096582,2093261,2093254,2093249,2093241,2090559,2090556,2090555,2090490,2090480,2089138,2088774,2088766,2088747,2088505,2088504,2088475,2085687,2083709,2079325,2079324,2079322,2079316,2079315,2072966,2061484,2061481,2061473,2061467,2061431,2061426,2061414,2061406,2061303,2061280,2061272,2061227,2061209,2061204,2061199,2061190,2061178,2061098,2061094,2061086,2061071,2061054,2061048,2061032,2059830,2059828,2059827,2059787,2059776,2059750,2059746,2059737,2059733,2059732,2055762,2055760,2055757,2055213,2048044,2047982,2047203,2045427,2045402,2045391,2045388,2045386,2045306,2044826,2043050,2041186,2041182,2041166,2041133,2041123,2040708,2040581,2040580,2040578,2040442,2040441,2040440,2040439,2040437,2040436,2040435,2040434,2040433,2040403,2040395,2040385,2040365,2040212,2040196,2040180,2040171,2040154,2040123,2039808,2038938,2036102,2036099,2036087,2036050,2036035,2036015,2036004,2035970,2035921,2035486,2035463,2034493,2034490,2034486,2034482,2033806,2032744,2032093,2032033,2032012,2031401,2031025,2030879,2030877,2030867,2030863,2030851,2030843,2030829,2030820,2030815,2030470,2030455,2030439,2030429,2030422,2030409,2029050,2028704,2028307,2023135,2023134,2023059,2023058,2022847,2022846,2022845,2022843,2022548,2022424,2022396,2021361,2021357,2021355,2020505,2020484,2020483,2020445,2020365,2020364,2020362,2020126,2020124,2020123,2020120,2020119,2020100,2020099,2020089,2020084,2020082,2020078,2020076,2020075,2020063,2020060,2020059,2020058,2015443,2015348,2015346,2015323,2015322,2015307,2015301,2015279,2015278,2015277,2015275,2015274,2015265,2015247,2015245,2015244,2015228,2015222,2015220,2015105,2015103,2014553,2014501,2014496,2014495,2014436,2014434,2014431,2014426,2013366,2013211,2012649,2012639,2012635,2012617,2012613,2012600,1994927,1994799,1994709,1993594,1993097,1993084,1992943,1992941,1992940,1992654,1992653,1992636,1989939,1989156,1988696,1988343,1988335,1988281,1988256,1988197,1988182,1986876,1986320,1986295,1986183,1986153,1986134,1986055,1986054,1986053,1986052,1986045,1985579,1985574,1985303,1984388,1984387,1984386,1984376,1984363,1984359,1984357,1984351,1984185,1984176,1984155,1984099,1984095,1984088,1984073,1982120,1982111,1982052,1981902,1981900,1981897,1981894,1981892,1981882,1981871,1981866,1981862,1981860,1981641,1981638,1981232,1981140,1981009,1980930,1980591,1980329,1980236,1976582,1974834,1974817,1974809,1974171,1974167,1974163,1973904,1955403,1955401,1955395,1955393,1955387,1955323,1955266,1955226,1955161,1955157,1955155,1955151,1955148,1955130,1955128,1955124,1955111,1955103,1954598,1954597,1954596,1954567,1954536,1954531,1948664,1948633,1948594,1948587,1948586,1948578,1948557,1948551,1947764,1946562,1946558,1946555,1946545,1946535,1946518,1946512,1946508,1946506,1946503,1946490,1945705,1945683,1945676,1945461,1945423,1945420,1945236,1945227,1945002,1944898,1944871,1941201,1941197,1941035,1941001,1940975,1940897,1940713,1940666,1940524,1940394,1940372,1939715,1938880,1938867,1938779,1938750,1938728,1938702,1938638,1938356,1937721,1937697,1937678,1937666,1937658,1937636,1937603,1937552,1937441,1937431,1937429,1937425,1937421,1937411,1937410,1937408,1937401,1937391,1937366,1937352,1937345,1937322,1937304,1937291,1937274,1937265,1937255,1937250,1937247,1937155,1937108,1937063,1937058,1936326,1935833,1935797,1935788,1935774,1935772,1935630,1935618,1935545,1935500,1935458,1935223,1935222,1935220,1935215,1935213,1935210,1934216,1934183,1934177,1934162,1934109,1933634,1932578,1932573,1932572,1932570,1932569,1932561,1932560,1932559,1932558,1932550,1932549,1932548,1932547,1931653,1931652,1931651,1930996,1930967,1930881,1930872,1930777,1929436,1925259,1925249,1925243,1925234,1925227,1925201,1925192,1925140,1925133,1925116,1925111,1924567,1923695,1923683,1923672,1923037,1917177,1917175,1917173,1917165,1917163,1917162,1917158,1917154,1917145,1917141,1917139,1917137,1917134,1917132,1917130,1917100,1917085,1917071,1917068,1917003,1916623,1916604,1916571,1916564,1916534,1916528,1916516,1916510,1913046,1912506,1912488,1908503,1907809,1904216,1903978,1902200,1901939,1901938,1901703,1901665,1901661,1901651,1901639,1901619,1901607,1901606,1901368,1901243,1897312,1897305,1897275,1893671,1892466,1892446,1889464,1887510,1887509,1887508,1887507,1887506,1887505,1887504,1887503,1887502,1887501,1887500,1887499,1887498,1887497,1887496,1887495,1887494,1887493,1887491,1887490,1887489,1887488,1887220,1887212,1887208,1887206,1887202,1886690,1886682,1886667,1884889,1884888,1884879,1884878,1884847,1884846,1884844,1883743,1881941,1873420,1872653,1866729,1864340,1864228,1864217,1862670,1862346,1860235,1860234,1860233,1860232,1860231,1860230,1860229,1860228,1860227,1860226,1860225,1860224,1860223,1860222,1856721,1856418,1856405,1856402,1856393,1856384,1855729,1855603,1855601,1855540,1855108,1855101,1855092,1855070,1855058,1855057,1855055,1855047,1855045,1855042,1855037,1855034,1855007,1855000,1854992,1854989,1854985,1854979,1854978,1854975,1854966,1854956,1854940,1854939,1854936,1854928,1854921,1854914,1854911,1854898,1854892,1854887,1854539,1853926,1853922,1853910,1853894,1853854,1853805,1853799,1853791,1853787,1853748,1853742,1853721,1853717,1853688,1853676,1853671,1853664,1853653,1853180,1852986,1852970,1852949,1852945,1852756,1852468,1852465,1851389,1851269,1851151,1850187,1850022,1847142,1847117,1847115,1847110,1845652,1845261,1844225,1844207,1844175,1844066,1843845,1840724,1840723,1840722,1840721,1840718,1837694,1836768,1836746,1823677,1822498,1822495,1822488,1822480,1822478,1822314,1822313,1822312,1822310,1822309,1822308,1822291,1822283,1822282,1819615,1819605,1819579,1817121,1816590,1816572,1816568,1816564,1816557,1816546,1816436,1816414,1816328,1816318,1816225,1816219,1816194,1816190,1816077,1815935,1815921,1815918,1815883,1815864,1815775,1815600,1815387,1815386,1815385,1815375,1815373,1815372,1815331,1815330,1815280,1815273,1815262,1813344,1810049,1810038,1810034,1810033,1810024,1810019,1810014,1810004,1810000,1809996,1809936,1809274,1809272,1809271,1809270,1809269,1809268,1809267,1809266,1809203,1804552,1802733,1802612,1802611,1797397,1797394,1797387,1797379,1797378,1797376,1797368,1797366,1797362,1797361,1797360,1797355,1797353,1797348,1797339,1797331,1796671,1796484,1795167,1795147,1794528,1794053,1794042,1794038,1792592,1792562,1791240,1791197,1791196,1791190,1791171,1791140,1791089,1791024,1790886,1790885,1790595,1789685,1789664,1789264,1789249,1789224,1789223,1789222,1789215,1789212,1789209,1789083,1789029,1789017,1789011,1788992,1788980,1788967,1788937,1788928,1788922,1788918,1788913,1788901,1788890,1788880,1788873,1788872,1788869,1788868,1788866,1788859,1788846,1788691,1788635,1788612,1787626,1787624,1787601,1787547,1787044,1786501,1786229,1786101,1786063,1785450,1785445,1785441,1785438,1785433,1785414,1785357,1785354,1785298,1785282,1784923,1784913,1784896,1784893,1784889,1784887,1784884,1784883,1784871,1784146,1784142,1784124,1784102,1784099,1784091,1784087,1784081,1784076,1784073,1784061,1784031,1783991,1783910,1783900,1783890,1783820,1783699,1783686,1783670,1783658,1783440,1783428,1783427,1783423,1783399,1783396,1783383,1783347,1783328,1782762,1782746,1782737,1782709,1782670,1782597,1782581,1782535,1782512,1780423,1780422,1780421,1780420,1780419,1780287,1778603,1778602,1778601,1778600,1778591,1778590,1778584,1778580,1766152,1762510,1762509,1762508,1762507,1762506,1762505,1762504,1762503,1760999,1760998,1760997,1760996,1760995,1760994,1760993,1760992,1760885,1760823,1760822,1760751,1758831,1754008,1751374,1749535,1749534,1749533,1749532,1749531,1749530,1749529,1749528,1749527,1749526,1749096,1749095,1749092,1749091,1749084,1749083,1749082,1749081,1749080,1745099,1745073,1742318,1742316,1742314,1742312,1742311,1742310,1742307,1742306,1742304,1742303,1742301,1742200,1742199,1742065,1741483,1739353,1739304,1739303,1739302,1739300,1739245,1738720,1737974,1737973,1737972,1737971,1737970,1737719,1737718,1737717,1736404,1736403,1736397,1736396,1736339,1736337,1736336,1736335,1736334,1736278,1736265,1736151,1736150,1733162,1731551,1731550,1731549,1731548,1725092,1724918,1724634,1724351,1723873,1723783,1723782,1723781,1723780,1722522,1721686,1721685,1721684,1719748,1719345,1719317,1718965,1718932,1718931,1718930,1718929,1718928,1717857,1717845,1717841,1711861,1711860,1711845,1711844,1711843,1711842,1711841,1711836,1711834,1711833,1711832,1711831,1711822,1711819,1711816,1711814,1711812,1711810,1711809,1711806,1711775,1711773,1711771,1711741,1711734,1711728,1711727,1711726,1711725,1711723,1711722,1711721,1711720,1711716,1711715,1711714,1711713,1711712,1711711,1711690,1711688,1711683,1711682,1711680,1711679,1711678,1711677,1711676,1711667,1711666,1711665,1711664,1711663,1711661,1711660,1711659,1711658,1711657,1711655,1711654,1711653,1711652,1711651,1711650,1711648,1711647,1711645,1711644,1711643,1711642,1711641,1711640,1711639,1711637,1711636,1711635,1711634,1711633,1711624,1711623,1711622,1711621,1711620,1711619,1711618,1711617,1711615,1711614,1711613,1711585,1711583,1711581,1711577,1711574,1711573,1711572,1711571,1711570,1711569,1711568,1711567,1711566,1711565,1711281,1711280,1711279,1711278,1711277,1711276,1711275,1711220,1711219,1711218,1711216,1711215,1711214,1711213,1711212,1669284,1669283,1669278,1669269,1669268,1669267,1669266,1669265,1669264,1669263,1669262,1669261,1669260,1669259,1669258,1669257,1669068,1669067,1669061,1669060,1669059,1668926,1668922,1668910,1668909,1668908,1668907,1668906,1668905,1668904,1668377,1668376,1668375,1668374,1668373,1668372,1668371,1668369,1668368,1668367,1668366,1668365,1661676,1661656,1660106,1660083,1660082,1660081,1660062,1660061,1660060,1660059,1660058,1660057,1660049,1660048,1660047,1660046,1660045,1660044,1660029,1660028,1660027,1660026,1660025,1660024,1655709,1655708,1655704,1655690,1655682,1655672,1655663,1655662,1655660,1655659,1655658,1655630,1655619,1655617,1655615,1655597,1655583,1655579,1655537,1652788,1652782,1652780,1652163,1652162,1652161,1652160,1652159,1652158,1652146,1652145,1652144,1652142,1652141,1652130,1652129,1652126,1652125,1652124,1652121,1652120,1652119,1652118,1652117,1652116,1652115,1650639,1650638,1650637,1650636,1650635,1650634,1650633,1650632,1650631,1650630,1650629,1650628,1650627,1650626,1650625,1650624,1650611,1650610,1650609,1650608,1650607,1650606,1650605,1650604,1650603,1649223,1643745,1643624,1643064,1643063,1643062,1643061,1643060,1643059,1643058,1643057,1643056,1643036,1643035,1643034,1643033,1643032,1643031,1643030,1643029,1643028,1643027,1643026,1643025,1643024,1641881,1641880,1637496,1631508,1631507,1631478,1631477,1631476,1631475,1631474,1631473,1631472,1631465,1631464,1631463,1631462,1631461,1631460,1631459,1631458,1621748,1621492,1621491,1621466,1621465,1621464,1621463,1621462,1621442,1621441,1621440,1621439,1621438,1621437,1621436,1621435,1621434,1621433,1621432,1621431,1621398,1621397,1621396,1621395,1621394,1621393,1621392,1621391,1621390,1621389,1621388,1621387,1591661,1591660,1591659,1591658,1591657,1591656,1591655,1591654,1591653,1591652,1591651,1591650,1591629,1591627,1591624,1591623,1591619,1591614,1591604,1591602,1591143,1591136,1591134,1591122,1591120,1591119,1590389,1590311,1590310,1574272,1574271,1574270,1574269,1574268,1574267,1574266,1574265,1574264,1574263,1574262,1574259,1574258,1574256,1574255,1574254,1574253,1574252,1574251,1574250,1574249,1574248,1574244,1574243,1569570,1557399,1557398,1557397,1540203,1540202,1540201,1540200,1540198,1540195,1540194,1540167,1540165,1540164,1540163,1540162,1540160,1540159,1540157,1540155,1540154,1540152,1540151,1540150,1540149,1540147,1540146,1540145,1540144,1540143,1540142,1540141,1540140,1540139,1540138,1540137,1540136,1540135,1540134,1540133,1540121,1540120,1540119,1540118,1540115,1540094,1540081,1540079,1540077,1540076,1540074,1540073,1540022,1540007,1539998,1539997,1539996,1539995,1539380,1539379,1539378,1539377,1539376,1539375,1539374,1539373,1539372,1539371,1539370,1539369,1539368,1539367,1539366,1532233,1532232,1532231,1532230,1532229,1530078,1530076,1530075,1530074,1525224,1525223,1525222,1525221,1525220,1525219,1525218,1525121,1525120,1525119,1525118,1525117,1518962,1517725,1517723,1517722,1517721,1517720,1517719,1517712,1517711,1517710,1517709,1517708,1517707,1517706,1517705,1517704,1517703,1517702,1517701,1517700,1510349,1510348,1510347,1510346,1510345,1510344,1510343,1510342,1510341,1510340,1510339,1510338,1505133,1505132,1505131,1505130,1505129,1505128,1505127,1505126,1505125,1505124,1505123,1505122,1505121,1505120,1505108,1504099,1504076,1500921,1500920,1500919,1500918,1500917,1500916,1500915,1500914,1500913,1500892,1500863,1500862,1500294,1500293,1500292,1499418,1499417,1498929,1496693,1496692,1496691,1494297,1494296,1494295,1494294,1494293,1494292,1494291,1494290,1492150,1491970,1491969,1491968,1491967,1491966,1491965,1491964,1491963,1491826,1491825,1491824,1490868,1490867,1490866,1490865,1490864,1490863,1490862,1490861,1490858,1490856,1490855,1488452,1488442,1488441,1487106,1487105,1487104,1487103,1487102,1487101,1487100,1483006,1483005,1483004,1483003,1483002,1483001,1483000,1482999,1482998,1482997,1482996,1482995,1482994,1482346,1482345,1482344,1482343,1482342,1482341,1482340,1482339,1482338,1482337,1482336,1482335,1482334,1482104,1481888,1481882,1481881,1481880,1481879,1481878,1481877,1481760,1481759,1481758,1481757,1481756,1481755,1481754,1481753,1481752,1481751,1481750,1481749,1481748,1481747,1481746,1481745,1480416,1480415,1480414,1480413,1480412,1480411,1480410,1480409,1480408,1480407,1480406,1479964,1479550,1479399,1479398,1479397,1479396,1479395,1479394,1479393,1479392,1479391,1479390,1479389,1477308,1473911,1472815,1472814,1472813,1472812,1472811,1472807,1472806,1472805,1472804,1472803,1472796,1472795,1472794,1467158,1467065,1467042,1467041,1467040,1467037,1466961,1466960,1466959,1466246,1466245,1451919,1451918,1451917,1451916,1451915,1451914,1451913,1450876,1450706,1450705,1450703,1450702,1450701,1450699,1450698,1450697,1450696,1450694,1450693,1450692,1450691,1450690,1450688,1450687,1449377,1449376,1449375,1446899,1445606,1445596,1445592,1445572,1445569,1445556,1445549,1445457,1445454,1445451,1443969,1443273,1443220,1443172,1439183,1436498,1436490,1436488,1436485,1436479,1436472,1436468,1436461,1436457,1436451,1436349,1436342,1436320,1436315,1436233,1436225,1436208,1436207,1436197,1436182,1436175,1436174,1434446,1434445,1434444,1434443,1434442,1434441,1433544,1433543,1433542,1433541,1433540,1433538,1433515,1433514,1433513,1433512,1433511,1433510,1433508,1431733,1431732,1431731,1431730,1431729,1431728,1431294,1431293,1431292,1431291,1430194,1425414,1421119,1421029,1420562,1420561,1420560,1420559,1420470,1420469,1420467,1420466,1420465,1420464,1420463,1420462,1420461,1420460,1420459,1420458,1420456,1420455,1420454,1420453,1420452,1420451,1420450,1420449,1420448,1420447,1420446,1420445,1420443,1414793,1407205,1407204,1407203,1407202,1407201,1407200,1407199,1407198,1407197,1407196,1407195,1407093,1407092,1407091,1407090,1407089,1407088,1407087,1407086,1407085,1407084,1407083,1407082,1405075,1404334,1404333,1402748,1402747,1402746,1402745,1402744,1402743,1402739,1402733,1402727,1398861,1397080,1396982,1389717,1389688,1389665,1389662,1389605,1389596,1389587,1389572,1389412,1389403,1389399,1389397,1389389,1388232,1388219,1388213,1388175,1388161,1388153,1388151,1388147,1388115,1386724,1386723,1386722,1386721,1384464,1384463,1384462,1384461,1384460,1384459,1384458,1384455,1383693,1383687,1383675,1383665,1383656,1383572,1383529,1383489,1383406,1383361,1383343,1383336,1383265,1382794,1382732,1382521,1382520,1382519,1382518,1382517,1382515,1382514,1382513,1382511,1382510,1382509,1382507,1382506,1382505,1382504,1382502,1382501,1382500,1382499,1382498,1382497,1382495,1382494,1382492,1382490,1382489,1382488,1382486,1382485,1382484,1382483,1382482,1382481,1382480,1382479,1382477,1382476,1382475,1382473,1382471,1382470,1382469,1382468,1382467,1382466,1382465,1382463,1382462,1382457,1382455,1382454,1382453,1382452,1382451,1382450,1382449,1382448,1382447,1382446,1382445,1382444,1382442,1382441,1382440,1382439,1380584,1380583,1380582,1380581,1380579,1380578,1380577,1380576,1380343,1380341,1380277,1380253,1380216,1379967,1379928,1379913,1379900,1379895,1379816,1379075,1379074,1379062,1379050,1379033,1378978,1378922,1378893,1378791,1378765,1378748,1378681,1378665,1378661,1378646,1378598,1376605,1376604,1376603,1376503,1376478,1373198,1373043,1373035,1372839,1372838,1372837,1372836,1372835,1372833,1372832,1372831,1372830,1372829,1372828,1372827,1372826,1372825,1372824,1372823,1372822,1372821,1372820,1372819,1372818,1369579,1369565,1365453,1364586,1359800,1359799,1359798,1359797,1354333,1350910,1350909,1350908,1350907,1350906,1350905,1350904,1350903,1350902,1350901,1350900,1350899,1350898,1350897,1350896,1350895,1350894,1350893,1350892,1350890,1350889,1350888,1350887,1350886,1350841,1333266,1333262,1326758,1326757,1326756,1326755,1326754,1326753,1326752,1326751,1326750,1323942,1323938,1323937,1323925,1320083,1320075,1320050,1320049,1320048,1319913,1317487,1317032,1316897,1316496,1316446,1316429,1316410,1316404,1316401,1316395,1316347,1316346,1316282,1316274,1316243,1316240,1316197,1316172,1316120,1316065,1316050,1315916,1315817,1315729,1313673,1313621,1313607,1313521,1313501,1313484,1313473,1313472,1313470,1313350,1313349,1313309,1313307,1313302,1313298,1313296,1313295,1313291,1313288,1313286,1313283,1313280,1313246,1313240,1313238,1313235,1313227,1313226,1313195,1313185,1313184,1313179,1313133,1313130,1313118,1313106,1313100,1313099,1313097,1313096,1313090,1313089,1313084,1312135,1312038,1312037,1311996,1311951,1311947,1311906,1309163,1306524,1305018,1300967,1298329,1298326,1298323,1298317,1298314,1298311,1298299,1298291,1298278,1298267,1297900,1297787,1297786,1297766,1297760,1297690,1297681,1297493,1297434,1297212,1297202,1297200,1297192,1297188,1297186,1297152,1297148,1297146,1289722,1288270,1285495,1285395,1285394,1285393,1285392,1285391,1285390,1285389,1285388,1285387,1285386,1277923,1273935,1273923,1273918,1273893,1273885,1273873,1273812,1272776,1272768,1272748,1270451,1270448,1270447,1270445,1270441,1267607,1267568,1267551,1267548,1251416,1251415,1251069,1251068,1251067,1251066,1251065,1241490,1241489,1241488,1241487,1241486,1241485,1241484,1238512,1238208,1238043,1229703,1227142,1227141,1227140,1227139,1227138,1227137,1227136,1227135,1223615,1214202,1214201,1214200,1214199,1214198,1214197,1214196,1214195,1214193,1214191,1214190,1214189,1214188,1214186,1214185,1214184,1214183,1214182,1214181,1214179,1214171,1214170,1214169,1214168,1214167,1214166,1214134,1214129,1214128,1214126,1214115,1214111,1214107,1214105,1214103,1213878,1213877,1213876,1213875,1213874,1213873,1213872,1213871,1206434,1206433,1206432,1206431,1206430,1206429,1206428,1206427,1206426,1206425,1206424,1206423,1206422,1206421,1206420,1206419,1206418,1206417,1206415,1206414,1206413,1206412,1206411,1206410,1206409,1206408,1206407,1206406,1206405,1206404,1206403,1206402,1206401,1206400,1206399,1206398,1206394,1206393,1206392,1206391,1206390,1206389,1206388,1206387,1206386,1206385,1206384,1206383,1206382,1206381,1206380,1206379,1206378,1206377,1206376,1206375,1206374,1206373,1206372,1206371,1206370,1206369,1206368,1206367,1206366,1206365,1206364,1206363,1206362,1206361,1206360,1206359,1206358,1206357,1206354,1206353,1206352,1206351,1206350,1206349,1206348,1206347,1206346,1206345,1206344,1206343,1206342,1206341,1206340,1206339,1206338,1206337,1206336,1206335,1206334,1206333,1206332,1206331,1206330,1206329,1206328,1206327,1206326,1206325,1206324,1206323,1206322,1206321,1206320,1206319,1206318,1206317,1206316,1206315,1206314,1206313,1206312,1206311,1206310,1206309,1206308,1206306,1206305,1206304,1206303,1206302,1206301,1206300,1206299,1206298,1206297,1206296,1206295,1206294,1206293,1206292,1206291,1206290,1206289,1206288,1206286,1206285,1206284,1206283,1206282,1206281,1206280,1206279,1206278,1206277,1206276,1206275,1206274,1206273,1206272,1206271,1206270,1206269,1206268,1206267,1206266,1206265,1206264,1206263,1206262,1206261,1206260,1206259,1206258,1206257,1206256,1206255,1206254,1206253,1206252,1206251,1206250,1206249,1206248,1206247,1206246,1206245,1206244,1206243,1206242,1206241,1206240,1206239,1206238,1206237,1206236,1206235,1206234,1206233,1206232,1206231,1206230,1206229,1206228,1206227,1206226,1206225,1206224,1206223,1206222,1206221,1206220,1206219,1206218,1206217,1206216,1206215,1206214,1206213,1206212,1206211,1206210,1206209,1206208,1206207,1206206,1206205,1206204,1206203,1206202,1206201,1206200,1206199,1206198,1206197,1206196,1206195,1206194,1206193,1206192,1206191,1206190,1206189,1206188,1206187,1206186,1206185,1206184,1206183,1206182,1206181,1206180,1206179,1206178,1206177,1206176,1206175,1206174,1206173,1206172,1206171,1206170,1206169,1206168,1206167,1206166,1206165,1206164,1205058,1199774,1198373,1195496,1194902,1192740,1192739,1192738,1192737,1192736,1186632,1182712,1182438,1182437,1182404,1182403,1180749,1180748,1180747,1180745,1180742,1180740,1180739,1180738,1180737,1180736,1180735,1180732,1180731,1180730,1180729,1180728,1180727,1180726,1180725,1180724,1180723,1180722,1180721,1180720,1180719,1180718,1180716,1180715,1180714,1180713,1180712,1180711,1180710,1180709,1180708,1180707,1180706,1180705,1180704,1180703,1180702,1180701,1180694,1180693,1180692,1180691,1180690,1180689,1180688,1180687,1180686,1180685,1180684,1180683,1180682,1180681,1180680,1180679,1180678,1180677,1180676,1180675,1180674,1180673,1180672,1180671,1180670,1180669,1180668,1180667,1180666,1180665,1180664,1180663,1180662,1180661,1180660,1180659,1179012,1179003,1174231,1170510,1170251,1170243,1170220,1170219,1170218,1170217,1170216,1170169,1164796,1163762,1156868,1155424,1155423,1155422,1155421,1155420,1155378,1155377,1155376,1155373,1155372,1155371,1155370,1155369,1155368,1155158,1155157,1155156,1155155,1155154,1155153,1155152,1152185,1152184,1152183,1152172,1151102,1151100,1151095,1151085,1151080,1151070,1150878,1150746,1150740,1150725,1150711,1150369,1150301,1150273,1149538,1149499,1149463,1149455,1149395,1149377,1149361,1149336,1148457,1143171,1143164,1143163,1143162,1143161,1143160,1143159,1143158,1140427,1140001,1133064,1132903,1132800,1131232,1126354,1126348,1126294,1126291,1126286,1126273,1126264,1126121,1125563,1125557,1125524,1125495,1125482,1125476,1125470,1125466,1125462,1125461,1125223,1125222,1121820,1121819,1121814,1121808,1121801,1121798,1121739,1121716,1121707,1121701,1121666,1121660,1121021,1121020,1121019,1121018,1121017,1121016,1120744,1120627,1120626,1120625,1120507,1120506,1120505,1120504,1120345,1120344,1120343,1120342,1120341,1120340,1120339,1120338,1120337,1120336,1120335,1120334,1120333,1120332,1120330,1120329,1120328,1120327,1120326,1120041,1120040,1120039,1120038,1119735,1119734,1119678,1119677,1119074,1116600,1116305,1115141,1115091,1114425,1114419,1112621,1112619,1112617,1112615,1111499,1107916,1107915,1107834,1107833,1107832,1107831,1106947,1106945,1106944,1106943,1106942,1106941,1106940,1106939,1098583,1094189,1094188,1094187,1094186,1094185,1094184,1093880,1092772,1092767,1092766,1086240,1083168,1083116,1083115,1083114,1083113,1083112,1083111,1083110,1083109,1081980,1081979,1081978,1081977,1081976,1081975,1081973,1081972,1081971,1081970,1081969,1081968,1081967,1080675,1080670,1080666,1080648,1080633,1080628,1080615,1080608,1080590,1080567,1080550,1080546,1080542,1080530,1080523,1080513,1080506,1080499,1080495,1080493,1080488,1080483,1080480,1080472,1080469,1080458,1080442,1080441,1080439,1080431,1080430,1080420,1080419,1080417,1080415,1080412,1080409,1080407,1080394,1080390,1080386,1080376,1080357,1080352,1080337,1080312,1080283,1080278,1079291,1079290,1073606,1073598,1073595,1073593,1073589,1073585,1073582,1073571,1073567,1073563,1073562,1073557,1073556,1073552,1073550,1073544,1073532,1073531,1073522,1073470,1073450,1073446,1073441,1073417,1073413,1073410,1073407,1073290,1072791,1072790,1066870,1066869,1066868,1066867,1066855,1066854,1066853,1066852,1066851,1066850,1066849,1066848,1066847,1066846,1066845,1066844,1066843,1066842,1066841,1066731,1066716,1066714,1066713,1066657,1059279,1059278,1059051,1059050,1059049,1059048,1059047,1059046,1059045,1059044,1059043,1059042,1059041,1059040,1059039,1059038,1059037,1059036,1059035,1055811,1055332,1055331,1055264,1055263,1055262,1055261,1055260,1055259,1055258,1055257,1055256,1055255,1055115,1055111,1055110,1054999,1054998,1054997,1052715,1052712,1052711,1052704,1052701,1052675,1052664,1052660,1052653,1052619,1052603,1052599,1045265,1045234,1043021,1043020,1043019,1043018,1043016,1043015,1043014,1043012,1043011,1043010,1043009,1043008,1043007,1043006,1043004,1043003,1043002,1043001,1043000,1042999,1042998,1042997,1042996,1042994,1042983,1042982,1042980,1042979,1042978,1042976,1042974,1042973,1042971,1042968,1042936,1042934,1042931,1042930,1042928,1042927,1042926,1042925,1042924,1042923,1042922,1042921,1042920,1042919,1042912,1042868,1042817,1042789,1042787,1042783,1042782,1041896,1041851,1041850,1041849,1041800,1041799,1041782,1041781,1041780,1041779,1041778,1040916,1040915,1039782,1038688,1038238,1038237,1038236,1038234,1038233,1038232,1038231,1038230,1038229,1037168,1037092,1037091,1037090,1037089,1037088,1037087,1037086,1037085,1037084,1037083,1037081,1037080,1037079,1037078,1037077,1037076,1037075,1037074,1037073,1034427,1033514,1033513,1033476,1033474,1033471,1033469,1033467,1033333,1033332,1028085,1028084,1028083,1028082,1028081,1028080,1028079,1028052,1028051,1028050,1028049,1027361,1027360,1027243,1027242,1027241,1027240,1027239,1027238,1027237,1027236,1027235,1027234,1027233,1027232,1027161,1027160,1027159,1027158,1027157,1027156,1027155,1027154,1026793,1026792,1026791,1026790,1026789,1026788,1026787,1026786,1026785,1019958,1019949,1018108,1016412,1016394,1016392,1016391,1016390,1016389,1016388,1016387,1016386,1016385,1016384,1016383,1016382,1016381,1016380,1016379,1016378,1016376,1016244,1016139,1013461,1008279,1007855,1007854,1007853,1007437,1007425,1007418,1007416,1007414,1007412,1007399,1007394,1007385,1007383,1007376,1007373,1007371,1007369,1007360,1007356,1007351,1007339,1007323,1007321,1007296,1007292,1005223,1005222,1003530,1003529,1003528,1003527,1003526,1003525,1003524,1003523,1003522,1003521,1003520,1003519,1003518,1003517,1003516,1003515,1003514,1003513,1003512,1003511,1003510,1003282,1003281,1003280,1003279,1003278,1003277,1003276,1003275,1003274,1003273,1003272,1003271,1003270,1003269,1003268,1003267,1003266,1003265,1003264,1003263,1003262,1003261,1003260,1003259,1003258,1003257,1003256,1003255,991214,991213,991035,991034,991033,990986,990985,990984,990983,990982,990981,990980,990979,990978,990977,990976,990975,990974,990973,990972,988047,988007,985158,985122,985078,985059,985047,985033,984976,984957,984950,984769,984762,984745,984697,984694,984688,984683,984681,984678,984671,984668,984647,984641,984211,984210,981014,981013,981012,981011,981010,979618,979598,979597,979596,979595,979594,979593,979592,979591,979590,979589,979588,979587,979586,979585,979490,979482,979476,979469,979467,979461,979460,979459,979457,979456,979453,979451,979435,979411,979400,979282,979280,979268,979262,979255,979243,979237,979228,979226,979221,979214,979212,979188,979145,979134,979131,979126,979116,979111,979108,979106,979101,979099,979096,979093,979088,978460,977145,977144,977143,977142,977141,977140,977139,977138,977137,977136,976995,973189,973056,973055,973054,973052,973051,973050,973049,973048,973047,973045,973044,973043,973041,973040,973039,973038,973037,973036,973035,973034,973033,973032,973031,973030,973029,973028,973027,973026,973025,973024,973023,973022,973021,973020,973019,973018,973016,973015,973013,973012,973011,973010,973009,973008,973007,973006,973005,973004,973003,972539,972531,972529,972528,972527,962974,961602,960670,960669,960668,960667,960666,960665,960664,960663,960662,960661,960660,960659,960658,960657,960656,960655,960654,960653,960652,960651,960650,960649,960648,960647,960646,960645,960644,955626,955625,955623,955622,955621,955620,955619,955618,955617,955616,955615,955614,955613,955612,954442,954030,954029,954028,954027,954026,954025,954024,954023,954022,954021,954020,954019,954018,954017,954016,954015,944202,943317,943316,943315,943241,943240,943239,941646,938345,935857,935856,935855,935854,935853,935852,935851,935850,935849,935848,935847,934656,934655,932719,932440,932439,932438,932437,932124,932123,932091,932090,932084,932083,932082,932081,932080,932079,932078,932077,932076,932075,932074,932073,932072,932071,932070,932069,932068,932067,932066,932065,932064,932063,932062,932061,929082,928860,928840,928835,928827,924288,923591,923590,923585,923584,922692,922691,921320,921316,921310,921306,921303,921299,921296,921292,921286,921249,921230,921219,921172,921129,921093,918557,918556,918555,918546,918537,918519,918489,918488,918477,918470,918442,913282,912756,912694,912687,912674,912673,912672,912671,912670,912669,910424,910423,909357,908970,908969,908968,905651,905650,905649,905648,905647,898859,898791,895395,895394,895393,895392,887272,887271,887270,887267,887266,886587,886586,886585,885456,885455,885454,885453,885452,885451,885450,885449,885448,885447,885446,885445,885444,885443,885442,885441,885440,885439,885438,885437,885436,885435,885434,885433,885432,885431,885430,885429,885428,885427,885426,885425,875633,875615,875613,875593,875587,875586,875580,875575,875573,875569,875558,875540,875526,875525,875517,875509,875493,875453,875430,875428,875416,873605,873528,873527,873484,871409,871408,871407,871406,871405,871404,871403,871402,871401,871400,871399,871398,871397,871383,871382,871381,871380,871379,871378,871377,871376,871375,871374,871373,871372,871371,866550,866549,866548,866547,866546,866545,865357,864857,862620,844765,844757,844740,842634,841250,841248,841203,841154,840579,840070,837555,837426,837425,837424,837423,837422,837421,835685,835684,835683,835682,835681,835680,835679,835678,835677,835676,835675,835674,835673,835672,835671,835670,835669,835668,835667,835666,835665,835664,835663,835662,835661,835660,835659,835634,835420,834104,834103,834102,831242,830838,830837,830836,830835,830834,830790,830758,830757,830756,830754,830753,830751,830745,830741,830736,830732,830731,830729,830721,830712,830710,830705,830702,830693,830692,830691,830690,830683,830682,830681,830680,830679,830678,830677,830676,830675,830674,830673,830672,830671,830670,830669,830668,830667,830666,830665,830664,830663,830662,830661,830660,830659,830658,830657,830656,830655,830654,830653,830652,830651,830650,830649,830648,830647,830646,830645,830644,830643,830642,830641,830640,830639,830638,830637,830636,830635,830634,830633,830632,830631,830630,830629,830628,826649,825149,825137,824735,824667,824657,824556,824555,824554,824553,824552,824551,824550,824549,824548,824547,824546,824545,824544,824543,824542,824529,824528,824527,824526,824525,824524,824523,824522,824521,824520,824519,824518,824517,824516,824511,824510,824509,824508,824507,824506,824505,824504,824503,824502,824501,824500,824499,824498,824497,824496,824495,824494,824493,824492,824491,824490,824489,824488,824487,824486,824485,824484,824483,824482,824481,824480,824479,823539,823538,823536,823535,823534,823533,823532,823531,823530,823529,823527,823526,823525,823524,823523,822543,822500,822499,821785,821784,820055,818873,818872,818871,818870,818869,818868,818473,818453,818132,818039,817951,817950,817949,817948,817947,817946,817945,817944,817936,817935,817934,817933,817932,817931,817930,817929,817928,817927,817926,817925,817924,817923,817922,817921,816845,813081,813080,813079,813078,813077,813076,813075,813074,813073,813072,813071,813070,812457,812456,812455,812454,812149,811381,810472,810188,810186,810157,810072,810070,810068,810043,810040,810023,810022,810021,810020,810019,810018,810017,810016,810015,810014,810013,810012,810011,810010,810009,810008,810007,810006,810005,810004,810003,810002,810001,810000,809999,809998,809997,809996,809995,809994,809993,809992,809991,809990,809989,809988,809987,809986,809985,809984,809983,809982,809981,809980,809979,809978,809977,809976,809975,809974,809973,809972,809971,809970,809969,809968,809967,809966,809965,809964,809951,809950,809949,809948,809947,809946,809945,809944,809943,809942,809941,809940,809917,809916,809915,809914,809913,809912,809911,809910,809901,809900,809899,809898,809897,809896,808911,808910,807866,807684,807668,807667,807666,807656,807655,807654,807015,807014,807013,807012,807011,806730,805721,805720,805711,805710,805709,805708,805707,805706,805705,805704,805703,805702,805701,805695,805694,805693,805692,805691,805689,805685,805684,805054,805052,805050,805048,805046,805044,804637,804625,803662,803661,803660,803659,803658,803657,803656,803655,803654,803602,803595,803594,803593,803592,803591,803590,803584,803577,803576,803575,803574,803573,803572,803571,803570,803204,803203,803202,803201,803200,803199,803198,803197,803196,803195,803194,803193,803192,803191,803190,803189,803188,803187,803186,803185,803184,803183,803182,803181,803180,803179,803178,803177,803176,803175,803174,803173,803172,803171,803170,803169,803168,803167,803166,803165,803164,803163,803162,803161,803160,803159,803158,803157,803156,803155,803154,803153,803152,803151,803150,803149,803148,803147,803146,803145,798993,798989,798988,798987,798986,798967,798826,798825,798824,798823,798822,798821,798820,798819,798818,798817,798025,797732,797727,797716,797713,797712,797711,797506,797351,797350,797349,797348,797347,797346,797345,797344,797343,797342,797341,797340,797339,797236,797235,797234,797233,797232,797231,797230,797229,797228,797227,797226,797225,797224,797223,797222,797221,797220,797219,797218,797217,797216,797215,797214,797213,797212,797211,797210,797209,797208,797207,797206,797205,797204,797203,797202,797201,797200,797199,797198,797197,797196,797195,797194,797193,797192,797191,797190,797189,797188,797187,797186,797185,797184,797183,797182,797181,797180,797179,797178,797177,797176,797175,797174,797173,797172,797171,797170,797169,797168,797167,797166,797165,797164,797163,797162,797161,797160,797159,797158,797157,797156,795665,795664,793224,793203,793197,787865,787533,787532,787531,787530,787529,787528,787527,787526,787525,786613,786612,786611,786610,786609,786510,785647,785623,785581,785580,785579,785578,785577,785576,785575,785574,785573,785572,785571,785570,785569,785568,785567,785566,785565,785564,785563,785562,785561,785560,785559,785558,785557,785556,785555,785554,785553,785552,785551,785550,785549,785548,785547,785546,785545,785544,785543,785542,785541,785540,785539,785538,785537,785536,785535,785534,785533,785532,785531,785530,785529,785528,785057,784716,784668,784667,783524,783521,783520,781447,781446,781445,781444,781443,781441,781157,781153,781152,781151,781150,781149,781148,781147,781146,781145,781144,781143,781142,781141,781140,781139,781138,781137,781136,781135,781134,781133,781132,781131,781130,781129,781128,781127,781126,781125,781124,781123,781122,781121,781120,781119,780879,780878,780877,778063,777450,777449,777448,777447,777446,777445,777444,777443,777442,777441,777440,777439,777438,777437,777068,777067,776377,775032,775016,774895,774885,774884,774883,774882,774881,774583,774483,774479,774472,774453,774443,773286,773284,773283,773281,773278,773276,773275,773239,773238,769222,769195,768512,768511,768510,768509,768508,768507,768506,768505,768504,768503,768502,768501,768500,767395,767394,767393,767392,767391,767390,766685,766684,766683,766682,766681,766680,766668,766667,766656,766643,766640,766638,766637,766636,766635,766634,766606,766366,766210,766209,766208,766035,766023,762235,761921,761920,760742,760736,760728,760721,760720,760717,760703,760692,760690,760689,760688,760687,760686,760685,757503,757502,757456,757455,757454,757453,757447,757362,756221,756220,756076,755375,755374,755232,755219,755215,755192,754648,754647,754646,754645,754644,754643,753902,753577,753576,753560,753559,753558,753557,753556,753527,753526,750162,750042,748956,748825,747845,747844,747843,747842,746772,746611,746610,746609,746608,746607,745151,745149,745141,745138,745137,745136,745135,745133,745068,744954,744896,744895,744894,744893,744031,744030,744029,744028,743358,743357,743335,743334,741946,741938,741936,741930,741929,741928,741927,741916,741904,741891,741889,741884,741802,741796,741795,741794,741793,741792,741791,741790,741789,741788,741787,741786,741785,741784,741783,741782,741781,741780,741779,741778,741777,741776,741775,741774,741773,741772,741771,741770,741769,741768,741767,741766,741765,741764,741763,741762,741761,741760,741759,741758,741757,741756,741755,741754,741753,741752,741751,741750,741749,741748,741747,741746,741745,741744,741743,741742,741741,741740,741739,741738,741737,741736,741735,741734,741733,741732,741731,741730,741729,741728,741727,741726,741725,741724,741723,741722,741721,741720,741719,741718,741717,741716,741715,741714,741713,741712,741711,741710,741709,741708,741707,741706,741705,741704,741703,741702,741701,741700,741699,741698,741697,741696,741695,741694,741693,741692,741691,741690,741689,741688,741687,741686,741685,741684,741683,741682,741681,741680,741679,741678,741677,741676,741675,741674,741673,741672,741671,741670,741669,741668,741667,741666,741665,741664,741663,741662,741661,741660,741659,741658,741657,741656,741655,741654,741653,741652,741651,741650,741649,741648,741647,741646,741645,741644,741643,741642,741641,741640,741639,741638,741637,741636,741635,741634,741633,741632,741631,741630,741629,741628,741627,741626,741625,741624,741623,741622,741621,741620,741619,741618,741617,741616,741615,741614,741613,741612,741611,741610,741609,741608,741607,741606,741605,741604,741603,741602,741601,741600,741599,741598,741597,741596,741595,741594,741593,741592,741591,741590,741589,741588,741587,741586,741585,741584,741583,741582,741581,741580,741579,741578,741577,741576,741575,741574,741573,741572,741571,741570,741569,741568,741567,741566,741565,741564,741563,741562,741561,741560,741559,741558,741557,741556,741555,741554,741553,741552,741548,741538,741527,741524,741523,741522,741338,741337,741336,741335,741334,741333,741332,741331,741330,741329,741303,741302,741301,741300,741299,741298,741091,739987,739986,739985,739984,739983,739982,739981,739980,739979,739971,739968,739831,739582,736160,736142,736082,736081,736080,736019,735989,735984,735980,735862,735612,735611,735610,735538,735537,735536,735535,735534,735533,735532,735531,735530,735529,735528,735527,735526,735525,735056,734851,731211,731207,731200,731199,731197,731184,731178,730470,730469,730468,730467,730466,730132,728315,727823,727721,727662,727648,727633,727621,727609,727449,727448,727447,727446,727444,727443,727441,727440,727438,727437,727435,727434,727432,727430,727429,727427,727426,727424,727423,727421,727420,727419,727417,727416,727414,727413,725984,724460,724091,722270,722171,722170,722169,722168,722167,722166,722164,722116,722115,722114,722113,722112,722111,722110,722109,722108,722107,722105,721921,721920,721919,720830,720829,720828,720470,720467,720461,720446,720418,720415,720409,720375,720374,720373,720367,720345,720344,720338,720337,719633,719623,719617,719607,719606,719605,719604,719596,719582,719581,719578,719577,719059,719058,719057,719056,719055,719054,719053,719052,719051,719050,719049,719048,719047,719046,719045,718767,718766,718762,718412,718402,718397,718370,718051,718022,717913,717858,717416,717415,717414,717413,717410,717409,717408,717406,717405,717403,717342,717341,717340,717339,717338,717224,717199,717198,717197,717190,717186,717185,717184,717183,717110,717109,717108,717107,717106,717105,717104,717103,717058,717040,717039,717038,717037,717036,717035,717034,717033,717032,717031,717030,717029,717028,717027,717026,717025,717024,717023,717022,717020,717019,717018,717017,717016,717015,717014,717013,717012,717011,717010,717009,717008,717007,717006,717005,717004,717003,717002,717001,717000,716999,716998,716997,716996,716995,716994,716993,716992,716991,716990,716989,716988,716987,716986,716985,716984,716983,716982,716981,716980,716873,716872,716871,716870,716869,716868,716867,716866,716865,716864,716863,716862,716861,716482,715386,715142,713544,713542,712157,712088,712087,712086,712085,712084,712083,712082,711969,711160,709832,709831,709830,709829,709825,709823,709785,709651,709650,709649,709648,709647,709646,709645,709644,709643,709455,709454,709453,709444,709443,709442,709441,709434,709433,709429,709427,709418,709413,709402,709397,709385,709326,709220,708674,708673,708672,708671,708670,708669,708668,708667,708666,708665,708664,708663,708662,708661,708660,708659,708658,708656,708655,708654,708653,708652,708603,708593,708592,708591,708590,708589,708588,708587,708586,708585,708584,708583,708582,708581,708580,708579,708578,708577,708576,708575,708574,708573,708572,708571,708325,707201,707200,705770,705769,705768,705767,705766,705765,705764,705763,705762,705761,705760,705759,705758,705757,705756,705755,705754,705753,705752,705751,705750,705749,705748,705747,705746,705745,705735,705699,705698,705697,705696,705695,705694,705693,705692,705691,705690,705689,705688,705687,703718,703625,703624,703623,703622,701643,701024,701023,701022,701021,701020,701016,700925,700922,699353,699352,699310,699307,699305,699304,699303,699302,699301,699300,699299,699298,699297,699220,699201,699200,699141,699140,699139,699138,699137,699136,699135,699134,699133,699119,699118,699117,699110,699105,699033,699032,699031,699030,699029,699028,699027,699026,699025,699024,694364,694357,694356,693340,693339,693320,693316,693307,693304,692064,692063,692062,692043,692042,692029,692028,692003,691938,691919,691878,685582,685419,685418,685195,685194,685142,684507,682435,682433,682432,681586,681316,681314,681276,681275,681274,681273,681272,676565,675621,675620,675619,673672,673588,673587,673586,673585,673584,673563,673562,673561,673560,673516,673515,673514,673513,673512,673511,673510,673509,673504,673488,673487,673486,673485,673484,673483,673482,673481,673480,673479,673478,673477,673476,673475,673474,673473,673472,673471,673470,673469,673468,673467,673463,673448,673447,673446,673445,673443,673442,673441,673440,673439,673417,673416,673415,673414,673413,673412,673411,673381,673380,673379,673378,673377,673376,673056,673055,673054,673053,673052,673051,673050,670430,670429,669456,669276,669275,669274,669273,669272,667682,667679,667101,667100,667099,666777,666776,666774,666773,666761,666760,666750,665878,665877,665840,665819,665475,665436,665435,665434,665433,665361,665360,665359,665358,665357,665356,665355,665353,665351,664993,664992,664991,664990,664989,664988,664987,664072,663945,663778,663127,663126,661901,661899,661898,661897,661896,661895,661872,661860,661859,661858,661857,661811,661810,661793,661787,661786,661785,661783,661782,661781,661780,661779,661778,661777,661565,661202,660657,660653,657108,657107,657106,657105,657073,657072,657071,657070,653661,653660,653659,653658,653534,653533,653529,653528,651648,651646,651645,651644,651480,651479,651434,651433,651429,651416,649274,649269,649268,649267,649212,649211,649209,649184,649180,649179,649177,649174,649173,649172,649107,649105,649101,647206,644236,643635,643634,643594,643593,643592,643591,643590,643589,643588,643587,643586,643585,643584,643583,642149,641777,641776,641716,641715,641086,641073,641053,641039,641009,641004,640972,640831,640804,640803,640802,640791,640780,640738,640737,640736,640735,640734,640733,640732,640731,640730,640729,640728,640727,640726,640725,640724,640723,640722,640721,640720,640719,640718,640717,640716,640715,640714,640713,640712,640711,640710,640709,640708,640707,640706,640705,640704,640703,640702,640622,640621,640620,640619,640618,640617,640616,640615,639377,638455,637370,637369,634921,634456,634455,634454,634453,634452,632656,632655,632654,632653,632652,632651,630444,630443,627532,627531,627530,625024,625023,625022,625021,625011,625010,625009,625008,625007,625006,624995,624994,624993,624992,624991,624990,623982,623981,623980,623979,623978,623977,623953,623448,623447,623445,623444,623443,623442,623441,623440,623439,623438,623437,623436,623435,622881,619721,619720,619719,619718,619717,619716,619715,619714,619683,619680,619676,619675,619667,619666,619660,619658,617381,617232,617231,616671,615822,615820,615819,615818,615817,615816,615815,615814,615813,615812,615811,615810,615809,615044,615043,615042,615041,615040,615039,611435,611342,611341,611340,611339,611338,611337,611336,611335,611334,611333,611332,611331,611330,611329,611328,611327,609676,609636,609633,609626,609620,609616,609613,609586,609582,609580,609579,609578,609577,609576,605755,605754,605753,604902,604901,604900,604896,604861,604860,604859,604858,604857,604856,604855,604852,604851,604847,604846,604820,604819,604817,604816,604810,604799,604798,604797,604796,604795,604781,604407,604406,604269,604268,604267,604266,604265,604264,604263,604262,604261,604260,604259,604258,604257,604256,604255,604254,604253,604252,604251,604250,604249,604190,604189,604188,604187,604186,604185,604184,604183,604182,604181,604180,604149,604148,604147,604146,604145,604144,604143,604142,604141,604140,604139,604138,604137,604136,604135,604056,604055,604054,604053,604052,603894,603311,603310,601706,601191,597832,597753,597752,597751,597750,597749,595351,595349,595344,595342,595341,595338,595336,595035,595033,595026,595025,595020,595017,595016,595006,594999,594991,594989,594969,594967,594954,594952,594951,594949,594947,594945,594941,594921,594920,594914,594913,594912,594910,594897,594895,594864,594845,594844,594376,594374,594368,594367,594366,594354,594327,594325,594320,594319,594312,594311,594306,594035,593936,593804,593803,593802,593801,593701,593699,591084,590981,590977,589558,589557,589556,589555,589554,588688,588687,588667,588562,588561,588559,588558,588364,588363,588362,588238,588237,588236,588235,588234,588233,588232,588231,588230,588229,588228,588227,588141,588088,588087,588086,588085,587653,587652,587651,587650,587649,587648,587647,587646,587547,587546,587545,587544,587543,587542,587541,587540,587530,587529,587388,587382,587379,587377,587355,587353,587352,587351,587350,587349,587348,587347,587346,587345,587344,587343,587342,587341,587340,587339,587338,587337,587336,587335,587314,587313,587312,587311,587310,587309,587308,587274,587268,587267,587265,587264,587253,587239,587238,587237,587219,587218,587216,587215,587214,587213,587212,587211,587210,587191,587190,587189,587188,587129,587128,587127,587126,587125,587123,587122,587121,587120,587119,587118,587117,587116,587074,587073,587070,587069,587064,587052,587050,586486,586485,586476,586472,586467,586462,586461,586453,586365,586364,583449,583448,583447,583446,583445,583443,583442,583441,583440,583371,583370,583367,583366,583361,583360,583359,583358,583357,583356,583355,583354,583222,583221,582436,582431,582280,582275,581986,581985,581984,581983,581981,581980,581977,581976,581975,581974,581972,581400,580847,580842,580841,580840,580839,580838,580835,580195,580194,580193,580192,580191,579869,579867,579443,579442,578319,578318,578317,578315,578314,578313,578312,578311,578310,577729,577726,577718,577717,577716,577715,577714,577342,577327,577306,577304,577303,577302,577301,577285,577280,577250,575592,575590,575589,575588,575587,574795,574794,574793,574792,574791,574790,574786,574785,572689,572071,571358,567649,567545,567544,567542,567512,566676,566673,565709,565660,565659,565658,565657,564209,563867,561713,561712,561711,561710,561709,561708,561707,561675,561674,561673,561671,561659,561658,561657,561656,561655,561654,561653,561652,561651,561650,561649,561648,561647,561645,556259,556258,556254,556253,556252,556251,556250,556249,556248,556247,556246,556245,556244,556243,556242,556228,555809,555595,555594,555212,555211,554900,554755,554746,554745,554743,554742,554741,554740,554737,554733,554706,554699,554698,554697,554696,554695,554694,554676,554660,554650,554641,554638,554632,554629,554627,554616,554615,554614,554613,554611,554608,554605,554603,554602,554601,554600,554598,554597,552938,552309,552255,549727,549726,549725,549724,549723,549712,549710,549705,549704,549703,549702,549701,549700,549699,549697,549694,549690,548848,548847,548845,548843,548839,548834,548833,548832,548831,548830,546307,546305,546304,546303,546301,546298,546297,546294,546292,546291,546290,546288,546287,546286,546285,546284,546283,546282,546281,546280,546279,546277,546275,546274,546273,546272,546271,546269,546268,546267,546266,546265,546264,546263,546262,546261,546259,546257,546245,546238,546225,546213,546207,546206,546204,546201,546200,546196,546195,546194,546193,546192,546190,546189,546167,546166,545929,544272,544271,544266,544265,544259,544258,544257,544247,544246,544245,544244,544243,544242,544241,544240,544239,544238,544237,544236,544235,544234,544233,544232,544231,544230,544229,544228,544227,544226,544225,539432,539431,539430,539429,539428,539427,539426,539425,539424,539423,539422,539421,539420,539419,539418,539417,539416,539415,539414,539413,539412,539411,539410,539409,539408,539407,539406,539405,539404,539403,539402,539399,539395,539392,539391,539390,539383,539382,539381,539380,539379,539378,539377,539376,539375,539374,539373,539372,539371,539370,539369,539368,539367,539366,539365,539364,539363,539362,539361,539360,539359,539358,539357,539356,539355,539354,539353,539352,539351,539350,539349,539348,539347,539346,539345,539344,539343,539342,539341,539340,539339,539337,539336,539335,539334,539333,539332,539331,539330,539329,539328,539327,539326,539325,539324,539323,539322,539321,539320,539319,539318,539317,539316,539314,539313,539312,539310,539309,539308,539297,539296,539250,539249,539248,539245,539235,538877,538874,538873,538872,538870,538869,538868,538867,538864,538854,538853,538852,538851,538850,538849,538840,538839,538838,538837,538836,538070,538069,538068,538067,538066,538065,537506,537504,529985,529980,523721,523719,523718,523717,522451,522449,522448,522447,522446,522445,522444,519914,519913,519179,515013,515012,515011,513087,512125,512124,512123,512122,512121,509394,509393,509196,508739,504180,504179,504178,504177,504176,504156,504155,504154,504153,504152,504151,504150,504129,504128,504126,503929,503926,503924,503923,503826,501078,499098,497888,496317,496195,496186,496185,496184,496183,495648,495644,495643,495638,495634,495633,495630,495627,495615,495603,495601,495600,495598,495596,495595,495593,495591,495589,495587,495585,495584,495576,495050,495049,495048,495046,495044,495043,495042,495041,495040,495039,495038,495037,495036,495035,495034,495033,495030,495029,495028,495025,495024,495022,495021,495019,495018,495017,495016,495015,495014,495013,495011,495010,495009,495004,495003,495002,495001,495000,494999,494998,494996,494994,494993,493221,490647,490646,490644,490641,490640,490639,490638,490635,490633,490632,490631,490629,490628,485442,485441,485440,485439,485438,485437,485436,485435,485434,485433,485432,485431,485430,485429,485428,485427,485426,485425,485424,485423,485422,485421,485420,483557,483556,483551,482680,481737,481736,481735,481038,481037,480054,480053,480052,480050,480049,480048,480047,480046,480045,480044,480043,480042,480041,480040,480039,480038,480037,480036,478244,477586,477581,475909,475908,475169,475168,475167,475166,475165,475164,475163,475162,475161,475160,475158,475156,475155,475154,475097,475096,475095,475094,475093,474963,474962,474960,474959,474921,474920,474320,474317,474311,474309,474308,474306,474304,474299,474298,474297,474296,474294,474293,474292,474291,474289,474288,474287,474286,474285,474284,474282,474214,474212,474209,474208,474195,474188,474175,474151,474145,474139,474118,474114,474113,474107,474100,474099,474096,474095,474094,474066,474065,473279,473278,473277,473276,470534,470522,470402,470401,470308,470307,470306,470305,470304,470227,470226,470225,470155,470154,469427,468508,467774,467771,467769,467768,467767,467766,467765,467764,466581,466044,466043,466042,466008,466007,466002,464028,464021,464019,464016,463768,463765,459055,454769,454766,454761,454760,454759,454752,454749,454748,454747,454741,454732,454728,450048,449872,449871,449870,449869,449868,449867,449866,449865,449864,449863,449375,448168,448155,448144,448100,448099,448096,448063,447707,447706,447703,447698,447697,447696,447695,447692,447691,438296,438294,438293,438292,438291,438290,438286,438285,438284,438282,438281,438277,438273,438272,438135,438134,437746,437745,437744,437705,437704,437703,437702,437701,437700,437699,437698,437697,437696,437694,437693,437681,437548,437323,437320,437319,437318,437317,437316,437315,437314,437313,437312,437311,437310,437309,437308,437307,437306,437305,437304,437303,437302,437301,434488,434483,434481,434392,434391,434390,434389,434387,434379,434378,434373,434372,434371,434366,434351,434343,434342,434335,434285,434284,434283,434282,434281,434280,434274,434272,434261,434260,434257,434252,434247,434246,434245,434237,434236,434211,434204,434180,434176,434171,434167,434165,434160,434154,434150,434145,434142,434141,434129,434118,434110,434106,432541,432535,432533,432531,432529,432527,432525,432521,432517,432515,432513,432511,432509,432507,430672,428734,428732,428730,428728,428726,428724,428722,428720,424207,423930,423926,423924,423918,423912,423904,423870,423866,423864,423860,423858,422375,421439,421437,421435,421433,421379,421377,421373,421365,421333,421325,421323,421319,421317,421299,421122,421104,420778,420776,420774,420772,420770,420766,420764,420762,420174,420106,420094,420063,420060,420039,420037,420035,420031,419988,419980,419978,419974,419941,419939,419493,419388,419387,419386,414133,413676,413675,413674,413673,413672,413671,412271,412269,412247,412245,412243,412241,412239,412237,412235,408577,408555,404614,404613,404315,404314,400262,396156,396155,392713,392694,384011,384009,384008,384006,384004,384003,384001,384000,383999,383998,383993,383990,383988,383986,383983,383980,383978,383977,383976,383973,383972,383965,381611,381609,380891,374104,374103,372114,372113,372112,372109,370022,370016,363895,363894,363893,363892,363889,363887,363886,363884,363883,363882,363880,363879,363878,363877,363876,363875,363873,363871,363869,363868,363866,363865,363864,363863,363861,363860,363859,363858,363857,363856,363855,363854,363853,363852,363851,363850,363849,363848,363847,363846,363845,363844,363843,363842,363841,361991,361988,361460,361459,361148,361140,361138,361136,361129,360895,360894,360873,360872,360870,360866,360862,360858,360853,360069,355544,355541,355540,355539,355527,355519,355148,354685,350751,350742,350732,350730,350727,350726,350724,350723,350716,350713,350711,346591,346584,342422,341236,341227,341003,340418,340417,340416,340415,340414,340413,340412,340411,340410,340409,340408,340407,339997,339957,339222,339221,339220,339219,339218,339217,339216,339215,339214,339213,339211,339210,339209,339208,339207,339206,339203,339202,339200,339199,339198,339197,339196,337859,337858,337857,337856,337854,337853,329838,329830,329813,329800,329756,329748,329744,329741,329719,329714,329701,329692,329684,329683,329682,329680,329678,329677,329407,329404,329401,329397,329395,329394,329392,329390,329383,329377,329376,329369,329368,329238,329235,329233,329232,329231,329230,322289,322287,322286,322285,318342,318341,318340,318339,318338,318337,318336,318335,318334,318333,318332,318331,318330,318329,318328,318326,315063,312517,312473,312427,312418,312408,310607,308877,308702,301467,298810,298767,297960,297958,296133,296126,293402,293149,293148,293146,293144,291594,291587,291585,291584,291583,291581,291580,291575,291574,291570,291567,286923,286917,281618,271788,271787,271450,259823,259822,259821,259820,258240,248493,248425,247846,247591,247585,244081,244079,239877,238497,232745,232557,232505,232503,232502,230349,225154,225152,225149,225144,224240,224239,222759,222271,196406,196402,185695,179858,179647,163625,155066,154993,151425,151423,151422,149411,149386,149385,145631,122363,118952,115227,109076,109075,1029783,1059448,1033423,1033424,1033425,1033426,1033427,1033428,1033429,1033430,1033431,1074372,1074373,1074374,1059399,1011830,1011831,1011832,1011833,1011834,1011835,1011836,1011838,1011839,1011840,1011841,1011842,1011843,1011844,1011845,1011846,1011847,1011848,1011849,1011850,1011851,1076796,1076797,666250,795677,795678,696305,669006,666244,666245,666246,666247,666248,666249,666252,639161,722979,770395,770394,810125,810126,644097,678915,678917,676261,676263,676265,770389,770391,770393,770396,770397,678916,814134,737367,770398,949092,949093,949094,837629,857031,906781,836544,836541,836542,836543,586056,760741,760740,906789,920788,935954,963287,963288,963289,958954,873559,873560,873561,880364,873563,880363,749420,586055,586053,855807,855808,855809,855810,855811,855812,948385,948388,948389,948390,948391,948392,948393,948394,839074,838470,838471,906778,958960,958963,935955,826732,837627,812388,657109,657110,686323,686324,635444,635445,696302,696303,696304,694908,694909,694910,694911,812396,808448,795834,795835,795836,795837,795838,795841,795842,795843,737368,737369,737370,811635,811636,819100,819102,819104,778818,826731,814135,737366,770399,619982,619983,795840,966727,966728,966729,805797,805798,778815,778816,778817,778819,778820,802578,833086,833088,833089,833090,833091,833092,833093,833094,906770,966723,966724,966725,966726,819103,833087,814132,860616,828272,833083,833084,833085,795839,666254,992464,998430,998432,977212,977213,977214,998666,980895,980896,998442,749421,749422,749423,723047,1244733,1153985,1125772,1244735,1153948,1125706,1166342,1166343,1166344,1233909,1153962,1153940,1148396,1166492,1196093,1196094,1196095,1196096,1181640,1233904,1246474,1246516,1244734,1174987,1160607,1246508,1233892,1254201,1189465,1237859,1125717,1233899,1246458,1246520,1244736,1375118,1282848,1282987,1282978,1305312,1305313,1392680,1282202,1282203,1282204,1282205,1282206,1282207,1282208,1282209,1282210,1282211,1282212,1282214,1282215,1282216,1282217,1282218,1282219,1282220,1282221,1282222,1282223,1282224,1400503,1313108,1400513,1335609,1369115,1375291,1374013,1375119,1375206,1405847,1375311,1392694,1282840,1282843,1335598,1335601,1335611,1404665,1404669,1404730,1404733,1404773,1369113,1392929,1392933,1392939,1392941,1335602,1335623,1335633,1404784,1404741,1389770,1405848,1282918,1282854,1374270,1282998,1305288,1305289,1335628,1282845,1400515,1274791,1360899,1274734,1282841,1335624,1335603,1335610,1335630,1335637,1282846,1313098,1226794,1481765,1494153,1476874,1476876,1481695,1481637,1481634,1494147,1476877,1476879,1494154,1481635,1481761,1481763,1481764,1428723,1455043,1498355,1498360,1498367,1498372,1491620,1491998,1463068,1462691,1491619,1476869,1494190,1494191,1481636,1494146,1491306,1481694,1476868,1481584,1481762,1476870,1476878,1480395,1494139,1623943,1504750,1536508,1506004,1537269,1629301,1629302,1537263,1353314,1607160,1524728,1524729,1537230,1537271,1606804,1537270,1630373,1710583,1710614,1718235,1718297,1630625,1630627,1642404,1298209,1298225,1724198,1724199,1666758,1666073,1718221,1649585,1649586,1630101,1642845,1642846,1666755,1666757,1642878,1642456,1630647,1642455,1727140,1710651,1642416,1642418,1642419,1649597,1662329,1662330,1662331,1662332,1662333,1662334,1662335,1662336,1662337,1724700,1724701,1723503,1717587,1630628,1649590,1649593,1642394,1642459,1717537,1718223,1642844,1629928,1642879,1718140,1297276,1723451,1724205,1630645,1649588,1630371,1642391,1642875,1723834,1718281,1724204,1724699,1732166,1642880,1642392,1710455,1731487,1731488,1731971,1731973,1724981,1642877,1723505,1353271,1718224,1642420,1642858,1642869,1723640,1731708,1731709,1731710,1731606,1731607,1731628,1731629,1731630,1731699,1731700,1731701,1731702,1731703,1731704,1731705,1731706,1731707,1731966,1731967,1731972,1710654,1649591,1731779,1731780,1731781,1731782,1731783,1731784,1731785,1731786,1731787,1731788,1710657,1719217,1669123,1630372,1630374,1731969,1731970,1723502,1731968,1649587,1649602,1666753,1731730,1642393,1710580,1642389,1642390,1723485,1723504,1723508,1724200,1630644,1666748,1353301,1718135,1724698,1719216,1719219,1724201,1666749,1666756,1630626,1719218,1719220,1731974,1718143,1718228,1718310,1630095,1737955,1808565,1808529,1377797,1776776,1630641,1808783,1808791,1808845,1805293,1749123,1749125,1749133,1749134,1297418,1737953,1739189,1776602,1776614,1298333,1744678,1737956,1775813,1776807,1298541,1755558,1749126,1808575,1776765,1749022,1808797,1297277,1776768,1736284,1736285,1736286,1736287,1736288,1736289,1791619,1827262,1827263,1827264,1827265,1808713,1776787,1776810,1741597,1298570,1749130,1819540,1749036,1819541,1819542,1819543,1819544,1819545,1819546,1749127,1749129,1749131,1808691,1822330,1822331,1822332,1822333,1822334,1822336,1822337,1822338,1822339,1630646,1767749,1767750,1767751,1767752,1808782,1741598,1823661,1823663,1821980,1823676,1776775,1808562,1296458,1776824,1741581,1808537,1808850,1353290,1827433,1749122,1808568,1808571,1224424,1741560,1776607,1741600,1749037,1296456,1737954,1738976,1296448,1296451,1828772,1819025,1819026,1819775,1819776,1819777,1819778,1865413,1865416,1865408,1836210,1836212,1851984,1851992,1851993,1851996,1852001,1852003,1852004,1823662,1833738,1833739,1833740,1833741,1878655,1878672,1870564,1865415,1865420,1865421,1865422,1836211,1833927,1833929,1833931,1833932,1836214,1851978,1851979,1851982,1851999,1852000,1852002,1887840,1865411,1865412,1865417,1865409,1842782,1836217,1836218,1834128,1834129,1834130,1851975,1851983,1851985,1851987,1851988,1851990,1852005,1939897,1851986,1124926,1836220,1843064,1851976,1851980,1851981,1851989,1851991,1851998,1849744,1870565,1851977,1804871,1870573,1929545,1971373,2038201,2038219,1971338,1929635,1929574,1929598,1929554,1929553,1929548,2058853,2058855,2058858,2058871,1820442,2114252,2048859,2055096,2055130,2048849,2058856,1820413,1820456,2058889,2055095,2140118,1971156,2038190,2038195,2038239,2116465,1871092,1820401,1929639,1929492,2038198,1929552,1820457,1820466,1820443,1929513,1929490,1929563,1929557,1802876,1948109,1929588,2038231,1389314,1871088,1871000,1871073,2038270,1929494,1929646,1971151,1802842,1820462,2094238,2154709,2139908,2157672,2157722,2195203,2208108,2208111,2208128,2137864,2140608,2159852,2144321,2143590,2169824,2140568,2155120,1804935,2221366,2221367,2221368,2221369,2221370,1965796,2061224,2150330,2221371,2221372,2221373,2221374,2221375,2221376,2221377,2221378,2221379,2221380,2140743,2207442,2207444,2207445,2061536,2061214,2221442,2221443,2221444,2221445,2221446,2221460,2221461,2221462,2055363,2147149,2141418,2144406,2193452,1804907,2147172,2147919,2150299,2150334,2140080,2169617,1820389,2198618,2146321,2146344,2161984,2154409,2150332,2150333,2195172,1008400,2195136,1929546,2144405,2200312,2154395,2140105,2139817,2060802,2169630,2169767,2159733,2169660,2145648,2157057,2157069,2160025,1870844,2144351,2154783,2144350,2168766,2169834,2144349,2144404,2144382,2144393,2144402,2221014,2221015,2221016,2221030,2140099,1973266,2139837,2193477,2221039,2221040,2221041,2221042,2221043,2221044,2221046,1855559,2056402,2150328,2060952,2061220,2150329,2226451,2145694,2230080,2193202,2193469,2056399,2198619,1820386,2235238,2235240,2235241,2235243,2235244,2195179,2195193,2169675,2139847,2139904,2143559,2061493,2061542,2146343,2144320,2144332,2144344,2144380,2144394,1820344,2146314,1971154,2139820,2139822,2139826,2208135,2144400,2168767,2169613,2169622,2193449,2092098,2092130,2092267,2157071,2060970,2061230,2235250,2232032,2232033,2232034,2232035,2232036,2232037,2232038,2232039,2232040,2232041,2232042,2232043,2232044,1947814,2146317,2160024,2195204,1040261,2169833,2161971,2161978,2161987,2224480,2208107,2154407,2235162,2157056,2060899,2060968,2193195,2193277,2193414,2162150,2145633,2145652,1929591,2159878,2161969,2161982,2143521,2159863,1820354,2144343,2145638,2169658,1871091,2160663,2140815,2143561,2144403,2146330,2146336,2150331,2157703,2161743,2161989,2140147,2145706,2160669,2140151,2154402,2193475,2150300,2154427,2193587,2061235,2144333,2193437,2252475,2252756,2334563,2306166,2253481,2309591,2299761,2334575,2368491,2368492,2368493,2368494,2368496,2368497,2368498,2203495,2252613,2193592,2306060,2262591,2252408,2334564,2279055,2281766,2288522,2288523,2203384,2313332,2334565,1973347,2268053,2281767,1296547,2334569,2261647,2334572,2118140,2118209,2368415,2252758,2252763,2284981,2118175,2325945,2261662,1853929,2250318,2250319,2250320,2012506,2250322,2250323,2334558,2334562,2334567,2319002,2118145,2118165,2262589,2253375,2253376,2253389,2253390,2272039,2334573,2254990,2254991,2254992,2254993,2254994,2254995,2254996,2254997,2254998,2254999,2255013,2255014,2255015,2255016,2255017,2255018,2255035,2255036,2255037,2255038,2255039,2306064,2306082,1882108,2255040,2255041,2255042,2255043,2255049,2255058,2255060,2255061,2252544,2118132,2252480,2275297,2247228,2247235,2203373,2252595,2284274,2261664,2193598,2224729,2118139,2118168,2309524,2118176,2252624,2252522,2306090,2252633,2253477,2253482,2311797,1809982,1809987,1827994,2371282,2252577,2203472,2318998,2371284,2252465,2252498,2252499,2252500,2198034,2284383,2284239,2334571,2308337,2252525,2300208,2306089,2253392,2253393,2261642,2306073,2253394,2252704,2252767,2284145,2118180,2118170,2118211,2284242,2118217,2118222,2268030,2261657,2261661,2213385,2252507,2255488,2255489,2255490,2255491,2296536,2296537,2296538,2296539,2296540,2296541,2296542,2296543,2296544,2296545,2296546,2296547,2296572,2296573,2296574,2118163,2334566,2334574,2252761,2318995,2313324,2334560,2252769,2334561,2298990,2298996,2299035,2203482,2253377,2253378,2253379,2253380,2253381,2253382,2253383,2253384,2253385,1947998,2299082,2289735,2253478,2253480,2253490,2261650,2284253,2284223,2252491,2319069,2306085,2319067,2261646,2268034,2261671,2253483,2318977,2253425,2253426,2253427,2253428,2253429,2253430,2253431,2253432,2253433,2253434,2253435,2253436,2253437,2253438,2253439,2253440,2253441,2334559,2334570,2261667,2338130,2253471,2253472,2253474,2306062,2252703,2252712,2268046,2319021,2253485,2284356,2172934,2306093,2118288,2317419,2384433,2100172,1947721,2100177,2403895,2100175,2464948,2100218,2387675,2403974,2403985,2118292,2317357,2464354,2403981,2316713,2387650,2118543,1947676,2217882,2403912,2403951,2403968,2131896,2118549,2100169,2217857,2100160,2317408,2100671,2118312,2464389,2464418,2465910,2465925,2438895,2387635,2372705,2372736,2372771,1947645,1947608,2113560,1948132,1947632,1948030,1948113,1947994,2118204,2118526,2439005,2100736,2384420,2387621,2439003,2387637,2387633,2449818,2464408,2384425,2384426,2381685,2381716,2381764,2384416,2381720,2381741,2384417,2384418,2384435,2245581,2390093,2465904,2466010,2466120,2118194,2118298,2449814,2316486,2387596,2464427,2466085,2439006,2439007,2439008,2258480,2317384,2451500,2451822,2451828,2451827,2452113,2452377,2452380,2451838,2452382,2451517,2452519,2451518,2451519,2451470,2451516,2451513,2451509,2100166,2387671,2462873,2118190,2118184,2118186,2118144,2118193,1947664,2118226,2387674,2118164,2118208,2397091,2397062,2399014,2356062,2397036,2397095,2397042,2397079,2397084,2397125,2118294,2118301,2099216,2100321,1947688,2464423,2100182,2118169,2100162,2406058,2318879,2338060,2449376,2446597,2339338,2470856,2452850,2449382,2113561,2449342,2440544,2234505,2506033,2470931,1951724,2235490,2505810,2113563,2522368,2470877,2447906,2516503,2490178,2229120,1954956,2505787,2490198,2118207,2449353,2449386,1952134,2541104,2522444,2441967,2229653,2447911,2505811,2494437,2495399,2545422,2470955,2481022,2522261,2442029,2522438,2446503,2492345,2545362,2118215,2446478,2446453,2229317,2453027,2494577,2494562,2229665,2384419,2338072,2180952,2446598,2229356,2453012,2235486,2447914,2545413,2564509,2485099,2229652,2485026,2506074,2446473,2229291,2229676,2505817,2568698,2113562,2490193,2489396,2471386,2447909,2229680,2229657,2229650,2229692,2446510,2446402,2471022,1948019,2235512,2516491,2338063,1951068,2522300,2442023,2489406,2489851,2489928,2489929,2490160,2505812,2381613,2180948,2229414,2470937,2373091,1951793,2485118,2229686,2545369,2568593,1952053,2545401,2446396,2471220,1954967,1936083,2181433,2485184,2503662,2055998,2245186,2245199,2485015,2522339,2229309,2485018,1947673,2118296,1951402,2505785,2516489,2446588,2470978,2453022,2501526,1951965,2470780,2505819,2617021,2623551,2400460,2401654,2401668,2400368,2400371,2403183,2545261,2545231,2545259,2545256,2545258,2245205,2245202,2596694,2363641,2363647,2363665,2363675,2363649,2363663,1820429,1820446,2245207,2245227,2622898,2400366,2401598,2245197,2229755,2545246,2398621,2403172,2229949,2602183,1948130,2229754,2596706,2403241,2403230,2403245,2403152,2403226,2403139,2229729,2229730,2403220,2545270,2401601,2245240,2623546,2623524,2623536,2623554,1948009,2381755,2596697,2596698,2596701,2545263,2602189,2533859,2245147,2245152,2245172,2401604,2555967,2555914,2400481,2596746,2602234,2596695,2400457,2401673,2400361,2245365,2245266,2245229,2555929,2596696,2596700,2596704,2596705,2545269,2545265,2601717,2596730,2596737,2596743,1031219,1031220,1031221,1093803,1093808,1039316,1094617,1094618,1074534,1074535,1074536,1074537,1012955,1093798,1066895,1012868,1012869,1012870,1012871,1012872,1012873,1012874,1012875,1012876,1012877,1012878,1093792,1094589,1094590,1094591,1094592,1094593,1094594,1016835,686134,360388,360389,362618,767386,767385,767387,767388,767389,782861,1854265,641100,641108,645801,645802,645804,720433,720435,720437,720439,720442,720444,720448,720452,720454,720456,720457,720459,641105,641115,347130,437178,364635,364644,364945,366849,699462,699463,699464,699465,677483,672183,672184,672185,672186,672187,672188,672189,672190,672192,672194,672195,720530,672191,347136,347137,350635,349341,349342,349619,349050,661698,645806,645807,645808,645809,645810,645811,645812,645813,645814,645815,645816,645817,645818,645819,645820,645822,645823,645824,645825,645826,645827,645828,686092,686084,686080,369394,645803,641114,641087,641089,641090,641092,641093,641094,641095,641096,641097,641098,641099,641103,641110,641113,641116,641088,641091,698198,698199,698200,699306,699308,699309,699311,699313,699314,699315,727307,727308,686078,686079,686081,686082,686086,686088,686089,686090,686091,686093,686094,686095,686096,659537,659538,659539,659540,371781,374923,373735,373765,377098,377734,377735,377737,377738,377740,377741,377742,377745,377746,377752,377753,377754,377757,744955,744956,644105,661696,661697,645782,645785,645786,645787,645788,645790,645791,645792,645793,645794,686364,686366,686367,686368,686369,686370,686371,376550,378594,735440,720450,744961,744989,645784,472973,723147,723148,723149,723150,723151,723152,723153,723154,723155,723156,744962,812761,813623,738020,738021,738022,738023,764378,790415,790416,790417,790418,790419,790420,805286,805287,805288,805289,805290,805291,791420,1883837,832763,956057,956058,813622,832726,411772,412030,744971,744972,923931,883421,883422,883423,883424,883425,883426,883427,1181588,875442,875443,875444,875445,875446,875447,875448,840505,810106,958891,832824,837449,837450,837451,837452,837453,837454,837455,883565,915399,877165,877168,877170,877316,877317,877318,877319,877033,880354,917358,917359,771797,771798,788845,788846,782027,788844,811497,811498,761877,761878,1872046,894406,832748,832749,832750,832751,832752,832753,832754,832755,832756,956045,956046,956047,956048,956049,956050,956051,956052,956053,956054,883330,883535,883536,883537,883538,832674,424057,883430,812749,760722,760723,760724,760725,760726,760727,773336,773337,773338,773339,773340,773341,773342,832672,832673,832675,832676,832677,645309,645310,672657,672658,672660,392413,702850,641128,718420,678079,678080,678081,678082,672659,641309,641310,697388,697389,697390,697391,697392,697393,697394,697396,697397,697398,697399,697400,697401,681727,763577,744963,804214,759161,737237,737238,737239,737240,744981,737227,810124,744976,810636,816461,816462,816463,816464,737401,737402,753885,753890,753891,759990,759991,759992,759993,759994,753892,753893,805210,782853,782854,782855,735487,737252,737253,781987,426766,737280,812695,832683,806467,812760,744960,906354,873685,796425,781988,781989,781990,759743,744970,729991,645789,781996,806979,735441,812693,812694,812696,812697,812698,812699,812700,812701,806462,806463,806464,806465,806466,956059,956060,956061,958883,963531,963532,963533,804215,917080,917081,890334,833368,645783,698197,699312,686365,641311,645777,727306,697395,672656,645821,720441,723157,759989,833366,833367,833369,833370,988694,988654,332471,332591,804218,781997,789123,397126,672182,645765,645766,645767,645768,645769,645770,645771,645772,645773,645774,645775,645776,645778,645779,645780,645781,677482,677476,677477,677478,677479,677480,677481,677484,677485,677486,677487,677488,677489,672193,335279,454632,342504,344689,344073,407547,405708,1140312,1181585,1151690,1151692,1205315,1205269,1233954,1244333,1219541,1233911,1140313,1140316,1185806,1225867,1163769,1163785,1166470,1196101,1196102,1196103,1196104,1196105,1196106,1196107,1151694,1151695,1140314,1181186,1140294,1225880,1254257,1181198,1151696,1151700,1233876,1129973,1129998,1140290,1242807,1140292,1140311,1181622,1181191,1129997,1191306,1181571,1181173,1163765,1246593,1225842,1246560,1246563,1151699,1254258,1254260,1254261,1254262,1130001,1233939,1233929,1225877,1225885,1163760,1151698,1181196,1246525,1246552,1163780,1254259,1181181,1196228,1173670,1246547,1163757,1163773,1181194,1362579,1309853,1265495,1305265,1305285,1305286,1305287,1274553,1282229,1282230,1305260,1265532,1376047,1405776,1271669,1282788,1357443,1282797,1309825,1309829,1357963,1357943,1405774,1405781,1405783,1405447,1265545,1274049,1282826,1282831,1267067,1357381,1357932,1357936,1282298,1282835,1265513,1262464,1326243,1282823,1282829,1424442,1447045,1424448,1473932,1447040,1447059,1447073,1481700,1488015,1490084,1481698,1481766,1446998,1447027,1494569,1424477,1424482,1481697,1424446,1428838,1494103,1490105,1488014,1494135,1494137,1424465,1428744,1428804,1428806,1494097,1428799,1428863,1488004,1447053,1424488,1424492,1491556,1481699,1481701,1424436,1479963,1424480,1428800,1491982,1424439,1429284,1488542,1490117,1424464,1488005,1488013,1481696,1491981,1490019,1490093,1428847,1429294,1424485,1446514,1428826,1424462,1491980,1481767,1494133,1620380,1529766,1620102,1620106,1620124,1620125,1620298,1448490,1471945,1471946,1558154,1471943,1465798,1371783,1524592,1454651,1524567,1453991,1524589,1524591,1398520,1620324,1398522,1557378,1401853,1620104,1620139,1620140,1620141,1620296,1620313,1620444,1620242,1622829,1574298,1622830,1623000,1524598,1617796,1620133,1620134,1620142,1620297,1620321,1620336,1620441,1620446,1620300,1524927,1620138,1629308,1392073,1398278,1518836,1401831,1398521,1392071,1398511,1518834,1453989,1557381,1398519,1465796,1557380,1398518,1434785,1392070,1524939,1465797,1524587,1465795,1540008,1524727,1454649,1454313,1453990,1642467,1656219,1642848,1642851,1656216,1656230,1656242,1656247,1642847,1642464,1642465,1649561,1656210,1666734,1710683,1642501,1642502,1649554,1729195,1718087,1666731,1729164,1729977,1656245,1666561,1454650,1729177,1729150,1642850,1719201,1719202,1719204,1719206,1729976,1729978,1666559,1719205,1710679,1710680,1630179,1630188,1656238,1649559,1718418,1666664,1666602,1731964,1718085,1630174,1731961,1731963,1731957,1731959,1666563,1656209,1630185,1666732,1731958,1642849,1642852,1718093,1718409,1719203,1731965,1666560,1731955,1731956,1741609,1748835,1747641,1747643,1774249,1774256,1774672,1774905,1775369,1775612,1808881,1808891,1741832,1741973,1808856,1741602,1741623,1741631,1747650,1781947,1781953,1747652,1798017,1741607,1771980,1820368,1820369,1820370,1820371,1820372,1820373,1820374,1820375,1820376,1820377,1820378,1820379,1820380,1820381,1820382,1820383,1829156,1741626,1774250,1774253,1747642,1775023,1808853,1829180,1775714,1741622,1741890,1781957,1813638,1813639,1813640,1813641,1813642,1741608,1829236,1774245,1741601,1741606,1747639,1747640,1808862,1829146,1829151,1829168,1829239,1747628,1774618,1741610,1806583,1808912,1879386,1821088,1936544,1851417,1805707,1936693,1805710,1834873,1834874,1834871,1849746,1834852,1849749,1849747,1849748,1805713,1899989,1899990,1899991,1899992,1899993,1899994,1899995,1839299,1779955,1855494,1836209,1834865,1842775,1805684,1805683,1779956,1870676,1849745,1779954,1851937,1851938,1805681,1821092,1883824,1805740,1860429,1916133,1975890,1975891,1975892,1975893,1975894,1975895,1821089,1834717,1851926,1851949,1851951,1834862,1834869,1834850,1834851,1834710,1834707,1834858,1851931,1851944,1851368,1851940,1821087,1851929,1851945,1851947,1842774,1834872,1779952,1916142,1834849,1835405,1851927,1821086,1805712,1821096,1851422,1930741,2078646,1986416,2055725,1991478,1883825,1872045,1854260,1854261,1883822,2055768,1872033,1930738,1946939,2116444,2107777,2113931,1960602,2113939,1946941,1946942,1903230,2114026,1872029,1883897,1942189,2116423,2116432,2116449,1854263,2036135,1854268,2108893,1854264,1872048,2115265,2115267,2115277,2116431,2113957,1930739,1903229,1883836,1854262,2085622,1872057,1883895,1942191,1872047,1883838,1854266,1860428,1805739,1883892,1883893,1883894,1942190,2221992,2221993,2221994,2221995,2221996,2221997,2221998,1872049,1805741,2169906,1983737,2048969,2141965,2141972,2141990,2026660,2026657,2142006,2130925,2221397,2221398,2221399,2221400,2221401,2221403,2221404,2221405,2221406,2221407,2221408,2221409,2221410,2221411,2221412,2221413,2221414,2221415,2221416,2221417,2221418,2221419,2221420,2221421,2221422,2221423,2221424,2221425,2221426,2221427,2221428,2221429,2221430,2221431,2221433,2221434,2221435,2221436,2221437,2221999,2222000,2222001,2222002,1983739,2222007,2154540,2200341,2200322,2200330,2144342,1854267,2160465,2048961,2200319,2198625,2144397,1860430,1982214,2048963,2144387,2026659,2144352,2147003,2170011,1930740,2144370,2144442,2141956,2221026,2221027,2221028,2054222,2139806,2240802,2240803,2146428,2243049,2150491,2144348,1883896,2210899,2130887,2144392,1930737,1930743,2141992,2026658,2048968,2169854,2048966,2169880,2200325,2144371,2198627,2198629,2048962,2141958,1982212,1979733,2048964,1930742,2169909,2169977,2306110,2371295,2270311,2371296,2371325,2351159,2261673,2261679,2274623,2265584,2274629,2371287,2352040,2296724,2255027,2255028,2255029,2255030,2255031,2255032,2255033,2255034,2306105,2255072,2255073,2255074,2255075,2255076,2255077,2255078,2255079,2255080,2255081,2255082,2255083,2354077,2266310,2255084,2255085,2262598,2352041,2265616,2265617,2270314,2334578,2253442,2274628,2274632,2306100,2306109,2334579,2371297,2371300,2284397,2294597,2371289,2371302,2371328,2274631,2278285,2261689,2352023,2274633,2262595,2270312,2266311,2246762,2284172,2263313,2306112,2296594,2296595,2296596,2296597,2296598,2296599,2296600,2296601,2296602,2296603,2296604,2296605,2296606,2296607,2296608,2296609,2296610,2296611,2296612,2296613,2296614,2296615,2352024,2274991,2282032,2282033,2282034,2261672,2261674,2311798,2311799,2311800,2258769,2261675,2253386,2253387,2219902,2306107,2274620,2334577,2265620,2265621,2265622,2265623,2265624,2265625,2291630,2389631,2390860,2278329,2278330,2325704,2320158,2314997,2325703,2325702,2330073,2314998,2253293,2315030,2325705,2320177,2320178,2320159,2315031,2325706,2325707,2323767,2320187,2320183,2320184,2320179,2320180,2320185,2320186,2315032,2466690,2270129,2436760,2436791,2266306,2447356,2436786,2436773,2398827,2270315,2291631,2403702,2403703,2403704,2403705,2403706,2403708,2476218,2388676,2390881,2475985,2476116,2475987,2270320,2398802,2266308,2270317,2389633,2266309,2398798,2270130,2266307,2274990,2270313,2398824,2403678,2291629,2390879,2270131,2275013,2274975,2436608,2403403,2436698,2398728,2436688,2398823,2291632,2270309,2253292,2476153,2476221,2388677,2522966,2523001,2533890,2534264,2534270,2534279,2529401,2531482,2522994,2278331,2533892,2522992,2533835,2522964,2534275,2481001,2505569,2529400,2533864,2552521,2521418,2540988,2531820,2531821,2532875,2533881,2545047,2533839,2533844,2533874,2505566,2523034,2533846,2485607,2533887,2533867,2505556,2480988,2480994,2534281,2533888,2533891,2522996,2533832,2533878,2505525,2505529,2505530,2505531,2522967,2505532,2533866,2505573,2522825,2523054,2522862,2596757,2596754,2596752,2585089,2585099,2585059,2585131,2585143,2585117,2585127,2585130,2585124,2585113,2585198,2585132,2585179,2585206,2585216,2585077,2585103,2609684,2587696,2587677,2587683,2602480,2585135,2585201,1090987,1018742,1011880,1039370,1039371,1039372,1039373,1039374,1039375,1091133,1011233,1039863,1037281,1091029,1011982,1042258,1111725,1011887,1113879,1113880,1113881,1113882,1113883,613336,592003,625195,358205,358329,677682,677683,677684,677685,677686,646379,654420,654421,654422,654423,359654,360382,360486,360487,362884,362888,760402,458206,459093,551567,551568,551569,551570,551571,551572,551573,551574,545674,430030,432641,432650,479401,701645,701646,701647,701649,715658,362381,362382,365059,365060,365061,364956,368365,368377,368378,670095,670096,698862,719458,719459,719460,719461,719462,719463,719464,719465,719466,459611,460470,460471,461565,461566,346334,350652,349358,349064,349065,349067,447936,447937,447938,439495,441014,371436,482228,482229,482234,482237,660484,660485,679496,679497,679498,715660,665930,369392,369393,537734,529202,529204,529205,529206,529207,504363,649627,649628,649629,649630,649631,649632,654426,671530,688314,688315,688316,688318,688319,688320,688321,688322,724478,371777,371786,373834,373836,374125,374815,488431,488432,488433,488434,488435,488436,488437,488438,488439,488440,488441,488442,488443,488444,488445,488446,488447,488448,488449,488450,488451,488452,489242,487293,731973,2098801,513096,513097,694641,694643,694644,694645,694646,694647,694648,694649,694650,694651,708453,675509,665931,321299,522555,522571,522572,274835,469072,469073,469074,469075,322332,323199,323235,638572,715504,673595,618718,616448,731974,731975,731976,775074,775075,775077,775078,635537,638088,679537,642311,642312,642313,642314,642315,325319,325320,325322,325062,411630,412939,409092,412523,451264,451265,451266,451328,451329,627605,627606,611273,605227,773464,729997,795832,899652,847810,927886,789302,806722,935384,935385,875424,960475,632938,632939,632940,632941,632942,632943,595254,381855,389882,968329,968330,968421,968423,968424,899656,927887,961556,847809,899686,826139,951415,951416,951417,860182,860183,937006,662803,1872121,827964,936989,582389,582394,1899666,434855,434856,1899665,899672,578105,389018,566127,496855,496856,496857,508582,508583,506839,506847,520716,520963,519824,519825,519826,519827,519828,700861,700862,566480,566486,1860554,500822,566683,571050,568818,566117,574483,626299,716013,716014,716015,716016,662800,662801,662802,662804,662805,662806,698878,679509,646691,601052,592000,613329,611275,614005,509584,509585,509586,509587,509588,509589,509590,601094,605348,607730,607763,625191,625196,558922,558935,811357,811358,811359,811360,793108,767364,562261,403859,442237,443350,553869,553870,555945,555946,555947,555948,555949,792079,792080,493499,493100,907301,907302,783577,847812,847813,775076,899726,748138,868874,476982,476983,476984,476985,611274,826939,826934,826935,826936,826937,826938,826940,826941,826942,968291,626864,625189,585220,585221,591999,592006,616819,592004,899733,694642,968466,847811,827934,905177,905186,858343,602593,632933,592001,592002,592005,592007,604016,599983,611276,858344,858345,907228,907229,907230,625186,760495,783574,783575,783576,783578,784142,759256,759257,759258,759259,759260,759261,748139,785347,785348,785349,789367,759209,900026,899634,700924,800355,582391,811361,688317,987807,981410,987833,988348,987816,987842,988257,987840,988249,987836,329785,329790,329795,800351,800352,800353,800354,800356,800357,800358,773465,296654,544460,549350,549351,549355,542350,542351,552147,544033,544034,544035,417217,701661,701662,701663,691571,691572,646692,658885,650821,337070,355179,355182,355361,355373,355383,456026,342927,340904,342581,342582,342583,343788,343863,343389,446099,446100,446101,446102,446103,446104,1229574,1229568,1137406,1137418,1156335,1154932,1129565,1129566,1129567,1129569,1129570,1129571,1129572,1129573,1129574,1129575,1129576,1129577,1129578,1129579,1129580,1229577,1257084,1137423,1137425,1160824,1137421,1154935,1137422,1180124,1125824,1154914,1257080,1203118,1203119,1203120,1229558,1204979,1216463,1137414,1154919,1400532,1400533,1400534,1280455,1275256,1311423,1311424,1311425,1311426,1311427,1311428,1311429,1311430,1311431,1311432,1311433,1311434,1311435,1311436,1311437,1294173,1294174,1294175,1294176,1294177,1294178,1294179,1294181,1294182,1294183,1311349,1311350,1311351,1311352,1311353,1311354,1311355,1311356,1311357,1311358,1311359,1311360,1311361,1311362,1311363,1311364,1311365,1311366,1311367,1311368,1311369,1311370,1311371,1311372,1311373,1311374,1311375,1311376,1311377,1311378,1311379,1311380,1311381,1311382,1311383,1311384,1311385,1311386,1311387,1311388,1311389,1311390,1311391,1311392,1311393,1311394,1311395,1311396,1311397,1311398,1311399,1311400,1311401,1311402,1311403,1311404,1311405,1311406,1311407,1311408,1311409,1311410,1311411,1311412,1311413,1311414,1311415,1311416,1311417,1311418,1311419,1311420,1311421,1311422,1280462,1363394,1280464,1328537,1476910,1474249,1437023,1492843,1436931,1492841,1492845,1492846,1482463,1492847,1492851,1437051,1492834,1492839,1492844,1492848,1436937,1492850,1492853,1436950,1413878,1413879,1413880,1492837,1492840,1492835,1492836,1437008,1436977,1492025,1492026,1492027,1492028,1436966,1492849,1492838,1492852,1492854,1437019,1491686,1491687,1491688,1491689,1491690,1492842,1506071,1505719,1622049,1505717,1576024,1528021,1709950,1655999,1716654,1716655,1716656,1716657,1660744,1656032,1656048,1656052,1656054,1709621,1660727,1660729,1732497,1656049,1656051,1660742,1732496,1732498,1732500,1709597,1660735,1732495,1656050,1656053,1732501,1709610,1709596,1655998,1709622,1656044,1782191,1796027,1796028,1796029,1796030,1796033,1796034,1796035,1748235,1749747,1749748,1749749,1749750,1749751,1749752,1749753,1814778,1808134,1927411,1865571,1805732,1872205,1855564,1894531,1894532,1805735,1808137,1894195,1814777,1794965,1927376,1865573,1893688,1805724,1805731,1808135,1808138,1961650,1927335,1927431,2087880,1808148,1808149,2041178,1988073,2110365,2110366,2110367,2110368,2110369,2110370,2110371,2110372,2110373,2110374,2110375,2110376,2110377,1872124,1988021,1872126,1988008,2078107,2078109,2087942,1988027,1872202,2193190,2160859,2161654,2160551,2160586,2222549,2222545,2160598,2370574,2309201,2291676,2278401,2370550,2291668,2370552,2370575,2370576,2371588,2371589,2371590,2371592,2258744,2371585,2371586,2371587,2282139,2297206,2370542,2370543,2258701,2341298,2258758,2258716,2258846,2308485,2368660,2282153,2258792,2345873,2297204,2345877,2280773,2291666,2282157,2282158,2280775,2291670,2291675,2355371,2291673,2355373,2280770,2309117,2309133,2258771,2260789,2258815,2258853,2393475,2393476,2393477,2393478,2393480,2393481,2393482,2393484,2393485,2393486,2393487,2393489,2393491,2393492,2422064,2405112,2454168,2421820,2394696,2422177,2421962,2454130,2306323,2422381,2454152,2476223,2476234,2422155,2518019,2536835,2525786,2517983,2536822,2517826,2518472,2517956,2517962,2517968,2569060,2517824,2594864,2594465,2596125,2594383,2594419,2586195,2596149,2596183,2594441,2596162,2586218,2586230,2596027,608898,594880,594878,608889,594884,588954,608900,594889,588950,588951,588952,588953,588955,588956,588957,588960,588961,588962,588963,588964,588965,588966,588968,588969,588970,594869,594870,594871,594872,594873,594874,594875,594876,594877,594879,588967,608890,608885,608886,608887,608888,608891,608893,608894,608895,608896,608897,608899,594885,594886,594887,594888,594890,594891,594892,594893,594894,615510,615511,615512,615513,615514,615515,615516,615517,615518,615519,615521,615523,615524,615525,615526,615527,615528,615529,615530,625970,625971,625972,625973,588958,591191,625982,625983,625985,625974,625975,625976,625977,625978,625979,625980,625984,625963,625981,608892,588959,615520,615531,625969,2478534,2478536,2478531,2478532,2478539,2478522,2478530,2478529,2478533,2478523,2478563,2478553,2478554,2478555,2478557,2478558,2478559,2478560,2478561,2537781,2510555,2510606,2509192,2508173,2508176,2508177,2509193,2508174,2508178,2510364,2508180,2508182,2508183,2509195,2508175,2509196,2510388,2509199,2509200,2509201,2510418,2510452,2508185,2525666,2525671,2525672,2525674,2529717,2525677,1019632,1019633,1074562,1031214,1048900,1098408,1098584,1031215,1098505,1098503,1098474,1098504,1098561,1016540,1074565,663560,746335,750036,746337,666251,666253,696308,463739,480441,639159,639160,783414,686353,686354,686355,705686,676262,676264,710922,319798,746334,746336,811560,811561,811563,814133,737371,737380,737381,737382,737383,749828,749829,749830,775420,667973,667974,636621,805636,833481,833482,833483,833485,833486,833487,833488,833489,833490,833491,833492,910582,910583,910584,806137,773349,773350,773351,773352,773353,737195,819117,819118,735492,819119,951294,951295,951296,951297,951298,951299,951300,951301,951302,951303,951304,951305,764942,790376,790378,790379,790380,790382,790383,790384,790386,790387,790388,790389,805665,867126,963286,873562,867127,867128,867129,867130,867131,867132,833493,963520,963521,963522,963523,963524,963525,833480,586054,586057,819089,948387,966288,966289,966290,966291,881586,946229,946230,906765,963149,963150,963151,963153,963155,963157,963158,760052,760053,760054,760055,760057,760059,760060,760061,773344,773345,773346,773347,737171,737172,737173,737174,760056,805666,963074,963075,963076,963077,963078,963079,963080,963081,840506,836972,837628,915217,904851,910987,910988,910989,910990,910991,835364,966282,966283,966284,966285,966286,966287,790385,790381,836970,836971,836973,836974,836975,836976,825959,859759,824653,657111,657112,657113,639163,696301,710923,710924,638051,819113,819114,811565,811566,746332,746333,442569,819088,819090,775411,789061,737372,737373,737374,737377,737378,737379,819101,819136,819137,819138,819139,737191,777175,819091,819092,819093,819094,819095,819096,819097,741041,428076,737375,736977,736978,873688,764935,846110,833950,833951,833952,833953,833954,833955,833956,833957,746338,811562,799963,736955,805628,619980,619981,822234,871862,894992,894993,737194,586060,619987,619989,619988,795673,795674,795675,795676,736969,799958,799959,799960,799961,799962,799988,799989,799990,799991,808909,815152,1181645,760743,775441,749855,749856,775444,770358,770359,770360,770361,770362,770363,770364,770365,770366,770367,746339,778886,778887,778888,778889,799964,799965,830225,890725,966730,966731,830233,830223,830224,830226,830227,830228,830229,830230,830231,830232,830234,830235,916304,916305,760058,737170,805626,749418,819115,826745,790377,805635,737376,638052,999870,999871,999872,999873,999874,975705,975706,975707,975708,981337,999881,805627,805629,805630,805631,805632,805633,805634,749419,805637,805638,397517,678107,678108,658556,658557,1181713,1140783,1197308,1197314,1181658,1208513,1149188,1140821,1140828,1196092,1196108,1196109,1196110,1197320,1222869,1222873,1140789,1181653,1208505,1208508,1181685,1140774,1181711,1140785,1181651,1208517,1149191,1157176,1282693,1282231,1357915,1333560,1357902,1282709,1304992,1282629,1282737,1282685,1333559,1282675,1282682,1347022,1357928,1333561,1282702,1305184,1392717,1282712,1282713,1305257,1282299,1282300,1282783,1333558,1326232,1282680,1282672,1282691,1357924,1282717,1282618,1282497,1329634,1391050,1329633,1498394,1468853,1484705,1383982,1383988,1494213,1474240,1494237,1468771,1468772,1468773,1468774,1468775,1468776,1468777,1468778,1468779,1468780,1468782,1468783,1468784,1468785,1498386,1498380,1498389,1498392,1494217,1472167,1490885,1484710,1428890,1417405,1494214,1494238,1484685,1484514,1484515,1484516,1484517,1428887,1491558,1484508,1484509,1484510,1484511,1484512,1484513,1480401,1480402,1573204,1573207,1557390,1509864,1536516,1536517,1557393,1574290,1431785,1383883,1574294,1509843,1574295,1557391,1574297,1509340,1573210,1574293,1524756,1574291,1531804,1327165,1573206,1557389,1531803,1518460,1573208,1573209,1531805,1574292,1666776,1630096,1718350,1718391,1718346,1718366,1724208,1666790,1666806,1666786,1666788,1649531,1666774,1728117,1666803,1666783,1630097,1729923,1666787,1666791,1666804,1666775,1666780,1724209,1666781,1666782,1666784,1666807,1666779,1630175,1649547,1630176,1630177,1649534,1649537,1649540,1718363,1666785,1666778,1630091,1718335,1718348,1718384,1666805,1630290,1729920,1729922,1729924,1729925,1666773,1656201,1718353,1718386,1718406,1718408,1729921,1718358,1666789,1718337,1718361,1718385,1742500,1742424,1742435,1776870,1776872,1776874,1776849,1742538,1776868,1742546,1776851,1386442,1742520,1808718,1776850,1822010,1822011,1822012,1822013,1822014,1822015,1822016,1736300,1736301,1736302,1736303,1736304,1813626,1813627,1813628,1813629,1813630,1813631,1813633,1813634,1742567,1776852,1776867,1776871,1742465,1833335,1833336,1783337,1832763,1832765,1833337,1833338,1833339,1833441,1808721,1808723,1742554,1742480,1782096,1835071,1849750,1807691,1795483,1903969,1851359,1944875,1806331,1944867,1806397,1975896,1851314,1851348,1903963,1851318,1944873,1806413,1851315,1851353,1851322,1903971,1806362,1851307,1851309,1851312,1851323,1909967,1910011,2053402,1909892,1909909,2038366,2058973,2116457,1929189,1929153,1909812,1910097,2038406,1929160,1909957,2053405,1818363,1929164,1929417,1909771,1909786,2053394,2141936,2139853,2169736,1795494,2140110,2169757,2184008,2221447,2221448,2221450,2221451,2221452,2221453,2221454,2221455,2221456,2221457,2221458,2144399,2198639,2146693,2198645,2198633,2198644,2200350,2092259,2144323,2198638,1910062,2131859,2198636,2155023,2169711,2200331,2235822,2154610,2144398,2171961,2221033,2221034,2221035,2221036,2221038,2146699,2146694,2127087,2198640,2198642,2141938,1929173,2169933,2144331,2235821,2175122,2154595,2146687,2146689,2155156,2038947,2141302,2130979,2144345,1818361,2155024,2144389,2144396,2144401,2235469,2235470,2235471,2235472,2235474,1818383,2198641,2169691,2198635,2225758,2144324,2169694,2193540,2140781,2139785,1795488,2198632,2198634,2144346,2155119,2170426,2144327,2146697,2146700,2150327,2146696,2144388,2144395,2140658,2139776,2262605,2334583,2262534,2262581,2306121,2262577,2284403,2371332,2287218,2287221,2280532,2280533,2280534,2280535,2253388,2306115,2274635,2262584,2262537,2255062,2255063,2255064,2255065,2255066,2255068,2255070,2255071,2284400,2306120,2371337,2282024,2282025,2282026,2282027,2282028,2282029,2282030,2334580,2334581,2262536,2273282,2262539,2296588,2296589,2296590,2296591,2296592,2261692,2112306,2337752,2284402,2306114,2333800,2375859,2337165,2333756,2337267,2336902,2432908,2038987,2389617,1910088,2336627,2333842,2387604,2337268,2337104,2432557,2333797,2387618,2333835,2432933,2336883,2336620,2432562,2336885,2336624,2392793,2392817,2397464,2392066,2392068,2337062,2392069,2392663,2392708,2338005,2392530,2392536,2392538,2392605,2104163,2336645,2337261,2336786,2494357,2480979,2544853,2494355,2437782,2429596,2496778,2481023,2485067,2439945,2439968,2449432,2494514,2494356,2496741,2544847,2437174,2437783,2437780,2496728,2494358,2406372,2544855,2494534,2496781,2494527,2496762,2502369,2447907,2437785,2496765,2406379,2547221,2547438,2547313,2547274,2512533,2601224,2601269,2601300,2547231,2547400,2547207,2547311,2512555,1818399,2547301,2547458,2547215,2603696,2547805,2547295,2547297,2433047,2547266,2079552,2547177,2547401,2598473,2601280]; + }; + + function domMnaipulation(){ + for(var i=0; i< productList.length; i++){ + //cosnole.log(injMbox.productList[i]); + if(pageProductId == productList[i]){ + mboxUpdate("mboxClickTrack","profile.browsedProduct=yes"); + cartPage(); + return; + } + } + }; + + function cartPage(){ + console.log('enter') + if(jQuery('.addToBagButton').length > 0){ + jQuery('.addToBagButton').on('mousedown',function(){ + mboxUpdate("mboxClickTrack","profile.productInCart=yes"); + }); + } + else{ + timeout-= timer; + if(timeout>timer){ + setTimeout(cartPage,timer); + } + } + }; + + function confirmPage(){ + if(MACYS.brightTag.products.length > 0){ + for(var i=0; i< productList.length; i++){ + for(var j=0; j<MACYS.brightTag.products.length; j++){ + orderConfirmId = MACYS.brightTag.products[j].productID + if(orderConfirmId == productList[i]){ + mboxUpdate("mboxClickTrack","profile.productPurchased=yes"); + return; + } + } + } + } + else{ + timeout-=timer; + if(timeout>timer){ + setTimeout(confirmPage,timer); + } + } + + }; + + function mboxDefineFunc(){ + mboxFactoryDefault.addOnLoad(function(){ + var mbox = mboxFactoryDefault.getMboxes().get("mboxClickTrack"); + if (mbox.length()==0) { + var d = document.createElement("div"); + d.id = "mboxClickTrack_div"; + document.body.appendChild(d); + mboxDefine("mboxClickTrack_div","mboxClickTrack"); + } + }) + }; + + function check(){ + // console.log("hellooooo22222222"); + // console.log(location.href.indexOf('/shop/product/') != -1 || location.href.indexOf('/bag/') != -1 || location.href.indexOf('/chkout/confirm') != -1); + if(location.href.indexOf('/shop/product/') != -1 || location.href.indexOf('/bag/') != -1 || location.href.indexOf('/chkout/confirm') != -1){ + //console.log('enter'); + init(); + } + else{ + timeout-=timer; + if(timeout>timer){ + setTimeout(check,timer); + } + } + }; + + + + //Call the check function + //Can also check for jQuery or dom Ready events + var checkJQuery = function(){ + if ('undefined' === typeof window.jQuery) { + if(timeout > timer) { + setTimeout(checkJQuery, timer); + } + timeout -= timer; + return; + } + // console.log("hellooooo1111111"); + check(); + }; + checkJQuery(); +})(); +</script><!-- Offer Id: 479975 --><script type="text/javascript"> +if(location.href.indexOf('m.macys.com')== -1){ + window.test_name= ''; + window.tntRecipeName= ''; +} +</script><!-- Offer Id: 322742 --><script type="text/javascript"> +(function(){ + + var timeout=3000000; + var timer=500; + var pageProductId=0; + var pageCartId=0; + var orderConfirmId=0; + var productList=[]; + + //Initialise the productList:[],elements + function init(){ + productCatalogue(); + mboxDefineFunc(); + + //console.log("hellooooo"); + + if(location.href.indexOf('/shop/product/') != -1){ + var regex=/\?ID=([a-z0-9\-]+)\&?/i; + pageProductId = location.href.match(regex)[1]; + domMnaipulation(); + } + else if(location.href.indexOf('/chkout/confirm') != -1){ + confirmPage() + } + }; + + function productCatalogue(){ + productList = [1194902,1052599,1016791,1016792,1016185,1099836,1099837,1099838,1099839,1099840,1057997,1059035,1059036,1059037,1059038,1059039,1059040,1059041,1059042,1059043,1059044,1059045,1059046,1059047,1059048,1059049,1059050,1059051,1099841,1099842,1099843,1099844,1163735,1005181,1005182,1005183,1005184,1005185,1005328,1042999,1105441,1073369,1073555,1074902,1005146,1080376,1074903,1074904,1074906,1042976,1042978,1073379,1027464,1087199,1042968,1033471,1005329,1052359,1057969,1042996,1087223,1087224,1087225,1087226,1005076,1055617,1055618,1055619,1038016,1108166,1108153,1108154,1108167,1055620,1055621,1055622,1055623,1055624,1055625,1055626,1065869,1065870,1065871,1065872,1065873,1065874,1065875,1065876,1065877,1065878,1065879,1065880,1065881,1065882,1065883,1065884,1065885,1065886,1065887,1065888,1065889,1065890,1065891,1065892,1065893,1065894,1065895,1065896,1065897,1065898,1008279,1042980,1033469,1111499,1080412,1073593,1020938,1020943,1020947,1020951,1020952,1020957,1033935,1029962,1029963,1029964,1029965,1029966,1029967,1080312,1087304,1065924,1073598,1005367,1095963,1020829,1020831,1020834,1020844,1086491,1042983,1029970,1119734,1119735,1120744,1074727,1074729,1074730,1074731,1074732,1074733,1074734,1074736,1074737,1074738,1031216,1031217,1031218,1034427,1087186,1016261,1020860,1020861,1020863,1020865,1020868,1020875,1020876,1020877,1020880,1016332,1042982,1042997,1087137,1029923,1029924,1029925,1029926,1029927,1029928,1080394,1005225,1047839,1005212,1022384,1022385,1022386,1022387,1047840,1047841,1047842,1047843,1047844,1047845,1047846,1047847,1047848,1047849,1047850,1047852,1047853,1047854,1047855,1047856,1051014,1051015,1051016,1051017,1086550,1087177,1024879,1051018,1051019,1051020,1051021,1051022,1051023,1051024,1051025,1005327,1072791,1031225,1043000,1093880,1045005,1045007,1055811,1098610,1038664,1038665,1117235,1005315,1080283,1031222,1098508,1005149,1040973,1040974,1040975,1040976,1040977,1040978,1042934,1080278,1086494,1086557,1073595,1052619,1005229,1005230,1005231,1005232,1005233,1005234,1005235,1005236,1005237,1005238,1028049,1028050,1028051,1028052,1029922,1087250,1116305,1033945,1028086,1028087,1028088,1028089,1028090,1028091,1028092,1028093,1028094,1028095,1028096,1028097,1028098,1028099,1028100,1028101,1028102,1028103,1028104,1028105,1028106,1024156,1024157,1024158,1005219,1039498,1087236,1091327,1091328,1091329,1091330,1074527,1074529,1074530,1074531,1074532,1074533,1121707,1080337,1040851,1040852,1040853,1040854,1040855,1040856,1040857,1040858,1040859,1040860,1040861,1040862,1040863,1040864,1040865,1040866,1040867,1040868,1040869,1040870,1040871,1040872,1040873,1041778,1041779,1041780,1041781,1041782,1080420,1042971,1042979,1029629,1039419,1003283,1003284,1003285,1003286,1003287,1003288,1003289,1003290,1003291,1003292,1003293,1003294,1003295,1003296,1003297,1003298,1003299,1003300,1003301,1045768,1029630,1029631,1029632,1086400,1086421,1108151,1003302,1003303,1003304,1003305,1003306,1003307,1003308,1003309,1003310,1003311,1003312,1003313,1003314,1003315,1003317,1003318,1003319,1003320,1003321,1003322,1003323,1003324,1003325,1003326,1003327,1003328,1003329,1003330,1003331,1003332,1031226,1098506,1086511,1104212,1053280,1003425,1003426,1003427,1003428,1003429,1003430,1003431,1003432,1003433,1003434,1003435,1003436,1003437,1003438,1003439,1003440,1003441,1003442,1003443,1003444,1003445,1003446,1003447,1003448,1003449,1003450,1003451,1003452,1003453,1003454,1003455,1003456,1003457,1003458,1003459,1003460,1003461,1003462,1003463,1003464,1003465,1003466,1003467,1003468,1052603,1053454,1042238,1042239,1042240,1042241,1042242,1042243,1042244,1042245,1042246,1042247,1042248,1042249,1042250,1042251,1042252,1042253,1042973,1042994,1042998,1016314,1003469,1003470,1003471,1003472,1003473,1003474,1003475,1003476,1003477,1003478,1003479,1003480,1003481,1003482,1003483,1003484,1003485,1003486,1003487,1003488,1003489,1003490,1003491,1003492,1003493,1003494,1003495,1003496,1003497,1003498,1003499,1003500,1003501,1003502,1003503,1003504,1003505,1003506,1003507,1003508,1003509,1003510,1003511,1003512,1105519,1003513,1003514,1003515,1003516,1003517,1003518,1003519,1003520,1003521,1003522,1003523,1003524,1003525,1003526,1003527,1003528,1003529,1003530,1033332,1033333,1080430,1026945,1026946,1026947,1060419,1060420,1060423,1060426,1060429,1060116,1060117,1026948,1026949,1060430,1060432,1060435,1060437,1060440,1060443,1060446,1033936,1033937,1033938,1033939,1033940,1033941,1033942,1080386,1080407,1073606,1005355,1079911,1079913,1079915,1079917,1079920,1005004,1086240,1064786,1064787,1064788,1064789,1064790,1064791,1064792,1064793,1064794,1064795,1064796,1045239,1045240,1058477,1058478,1058479,1058480,1058481,1058483,1058484,1119074,1021033,1021035,1021037,1021038,1039410,1016577,1016578,1016579,1016580,1016581,1016582,1016583,1016584,1016585,1016586,1016587,1016588,1016589,1016590,1016591,1016592,1016593,1016594,1016595,1016596,1016597,1016598,1016599,1016600,1016601,1016602,1016603,1016604,1016605,1016606,1016607,1016608,1016609,1016610,1016611,1016612,1016613,1016614,1089618,1016615,1016616,1121701,1058485,1123973,1123974,1123975,1123976,1123977,1123978,1005151,1005152,1005153,1005154,1005155,1005156,1005157,1005158,1005159,1005160,1005161,1005162,1005163,1005164,1005165,1005166,1005167,1005168,1005169,1005170,1005171,1005172,1005174,1005175,1005176,1064693,1064694,1064695,1052711,1048730,1048731,1048732,1048733,1048734,1048735,1048736,1048737,1030026,1030027,1030028,1030029,1030030,1030031,1030032,1030033,1064696,1064697,1064699,1064701,1064702,1064703,1064704,1064705,1064706,1064707,1064708,1064709,1064711,1064712,1064713,1064714,1064715,1064716,1053810,1053811,1053812,1087180,1087425,1080352,1057993,1064717,1064718,1064719,1064720,1064721,1064722,1064723,1064724,1064725,1064726,1064727,1064728,1064729,1064730,1005349,1087216,1033474,1042974,1005331,1005288,1057973,1116182,1057421,1057423,1057424,1057425,1055717,1055718,1055719,1055720,1055721,1055722,1055723,1055724,1055725,1055726,1055727,1055728,1055729,1055730,1055731,1055732,1055733,1055734,1055735,1055736,1055737,1055738,1055739,1055740,1055741,1055742,1099063,1099064,1099065,1099066,1080357,1080417,1080419,1045283,1073589,1080390,1080409,1080415,1005317,1005318,1005319,1005320,1005321,1005322,1005323,1039348,1087292,1113510,1113511,1052847,1052848,1052880,1052881,1086537,1039342,1045727,445604,445605,445606,445607,445608,445609,445610,444951,444954,372015,372022,372023,372024,372025,619905,619906,619907,619908,619909,596601,596602,595336,630147,602723,595796,620790,617231,620633,620671,620679,630795,589390,605900,605953,617271,588233,611235,604909,604910,604911,604912,589948,589949,589950,429992,213851,213852,358250,358252,358208,358210,358225,358230,641776,700548,640947,620794,648635,661694,668303,668304,668305,668306,668307,668309,683599,683600,683601,683602,683603,696134,717966,717969,717970,717971,717972,705721,650674,650675,650676,684425,684426,684428,684430,684431,651416,646250,646251,646252,646253,646254,646255,360855,360859,360863,360065,360067,360068,360069,360070,360082,360083,360084,360332,360334,360336,360338,362001,362002,362004,362013,362016,362022,753556,753557,753559,753560,756076,746772,805654,805655,805656,805657,2041348,767390,767391,767392,767393,767395,800813,800814,800815,800816,800817,800818,779239,779240,779241,779242,779243,779244,779245,779246,806138,806139,806140,806141,806142,806143,806144,806145,759192,2099414,805232,805233,805234,739582,735989,800960,800961,800962,732343,783959,783960,783961,783962,783963,695868,693122,745381,312365,312374,311626,457786,457787,457788,457789,457790,640489,641950,641044,705641,647230,684111,675280,705637,705638,705639,705640,705642,705643,673038,673039,673040,673041,673514,673584,673585,651429,719624,663104,663105,663106,663108,663109,663110,663111,663112,663113,663114,663115,663116,663117,647781,647782,647783,647784,647786,647788,647790,647791,647792,647794,647795,647796,647797,647799,647800,647801,647798,347117,347118,347120,347122,346464,346466,346467,544822,552255,541831,549702,550945,550955,550389,550390,550391,550392,550393,545759,545760,545761,545762,552552,552553,552554,552555,552556,547179,547180,547181,430671,430672,431785,431787,431789,438114,438115,438116,438293,438294,438296,438536,438537,706164,720573,720574,720575,720576,659884,659886,672330,672374,672663,672664,672665,672666,703622,703623,703624,703625,651002,673510,673511,717225,717246,606603,620682,598302,696162,719064,698639,672378,673515,723134,362935,362936,361693,363852,363853,363854,363855,363856,363857,363858,363859,363860,363861,363862,363863,363864,363865,363866,363867,363868,363892,363893,364018,364729,364730,364731,364732,364733,363654,363655,502410,502411,502412,502413,502414,502415,502458,502459,501077,501078,501080,501081,534000,534001,534002,534003,534004,534005,534006,512686,512687,512688,512689,512690,518190,518191,366789,640437,653061,717247,634350,708570,717280,674157,672326,671413,671414,671415,671416,671417,671418,722140,640402,640405,640490,700539,700546,700594,719062,461589,461220,461534,463765,463768,464513,464004,464005,464006,464015,346661,350713,350716,350724,350726,351521,351522,447412,448063,448096,448236,449866,449867,449868,447691,447692,449109,449113,449114,440833,440183,440834,440979,439847,479319,479320,479336,483488,483489,483490,483491,483492,483691,483692,483693,483694,483695,483696,483697,483698,483699,483701,483702,481752,481753,481754,481755,481756,481757,481758,481759,481760,481822,482680,486359,678084,673477,678085,678086,678087,678088,678089,649607,663397,641059,641060,649558,649559,649560,649561,649563,649564,649565,649566,717249,634393,641673,715582,684049,718412,370013,370016,370022,369432,369440,369446,370210,370211,370212,538240,538241,529934,529254,529255,504275,505894,505897,505899,506032,504150,504151,504152,504153,504154,504155,504156,540004,249714,247846,254264,252833,250258,250259,250261,250262,250263,250435,255124,250436,250437,250438,250439,250440,250441,250443,250444,259823,464217,464218,464219,464220,465411,465412,465413,465414,466808,465601,315045,315113,317159,315114,315115,315116,315119,315120,315121,315122,315123,315247,316532,668510,701020,689546,700544,680268,680269,680270,680271,680272,680273,680274,720606,641036,641038,641040,641041,641042,641043,641045,691423,691424,691426,691427,691428,691429,691430,691431,668516,668517,668518,668519,717266,693006,693007,693008,693009,693010,693011,693012,693013,693015,693016,693017,641035,641037,689587,689588,689589,689590,689591,700598,658474,684042,695500,695501,695502,695503,684882,684883,720601,720608,685029,695854,695856,695857,695858,695859,695860,695861,695862,695863,727662,673411,673412,673413,673414,673415,673416,685030,685031,685032,691749,695866,695867,695869,695870,695871,695872,695874,695875,695876,695877,695878,719622,719661,673467,673468,673469,673470,673471,673472,673473,673474,673475,673478,673479,673480,673481,673482,673483,673484,673485,673486,673487,673488,673512,699996,727426,727430,727434,727435,727437,373899,373905,373906,373907,373908,374791,374792,374793,375474,375475,377012,377013,378538,378540,378541,484973,485137,485138,485139,487805,487806,487884,487885,487886,487887,487935,488003,488012,488013,488043,488047,401801,401803,401804,401805,401010,401011,401012,401013,401014,401015,538836,538837,538838,538839,538840,538849,538850,538851,538852,538853,538854,538864,538867,538868,538869,538870,538872,538873,538874,538877,538988,529994,529995,539312,539313,539314,539315,539316,539317,759191,694608,783979,784011,698638,785548,785549,767189,735545,735571,743719,743720,743721,743722,743723,743724,735565,743828,743834,745269,746607,746608,746610,746611,794556,794571,794577,802784,802787,738439,738440,515256,515257,515258,515260,515261,514804,514805,514806,514807,514808,653533,653534,700852,700853,700854,701016,646472,646473,646474,646475,646476,646477,680562,680563,680565,680566,680567,680568,638636,638637,638638,638639,638640,638641,638642,638644,673504,713233,659344,659345,694192,694193,694194,694195,719697,719698,719699,719700,719701,647820,673636,673637,673638,673639,663393,673640,673641,673642,673643,673644,673645,673646,673647,723118,639389,640496,676593,676594,651433,691877,686345,699995,693114,686344,693116,693117,693118,693119,693120,650771,649401,649402,649403,649404,649405,320441,320442,320443,321639,321640,467828,470027,470225,470226,470227,380884,380886,380887,380889,380891,379122,379125,379352,521419,521421,521877,521878,521879,521880,521884,521885,521886,521284,521285,736080,736082,735526,735527,735528,735529,735530,735531,735532,781444,735551,745268,777067,777068,735533,735534,735535,735539,735540,735541,735542,735543,735544,735546,735547,735548,735549,735550,735552,735553,735554,735555,735556,735557,735558,735559,735560,735561,735562,735563,735564,735566,735567,735568,735569,735570,735572,735573,735575,735576,735577,735578,735579,735580,735581,735582,735583,735584,735585,673417,778899,778900,693014,735586,735587,735588,735589,735590,735591,735592,735593,735594,735595,735596,735597,735598,735600,735601,735602,735603,735604,735610,735611,735612,752755,258240,271450,258928,258929,258959,256988,256989,277589,640620,673376,673377,673378,673379,673380,673381,639545,639547,639548,649567,649568,649569,649570,649571,638643,470520,470521,470522,470523,470534,470541,470542,471871,471872,471874,471883,471884,471997,471998,471999,323142,323143,323144,323145,322289,683916,683917,683918,683919,695337,695338,695339,695340,695341,695342,695344,695345,651434,691823,703718,672459,639319,639320,639321,639322,639323,639324,639325,639326,639327,639328,650769,673516,685138,685139,685140,685141,685142,685143,685144,635273,635274,635275,641314,661678,661679,661680,661681,661682,661683,661684,686343,686346,661685,694607,694609,694610,708017,708018,653662,653663,653664,653665,653666,653667,634326,606604,794574,814308,691425,805874,805875,805876,805878,805879,805880,805881,805882,807862,800575,770224,805883,732627,757166,786345,763779,763781,763783,763784,769123,769124,769125,769126,801538,801539,756209,756210,756211,756212,756214,756215,756216,756217,756219,789730,789731,806730,791710,791711,791712,638682,638683,649572,649573,649574,649575,649576,649577,640619,640621,640622,670429,689550,698569,605264,684429,669456,281754,281755,282005,282006,282012,282013,282014,282015,325047,325048,325049,325050,325051,891694,891695,891696,824457,832355,832356,832357,832358,832359,1241485,910365,789700,756218,872868,872869,872872,872875,872878,872879,872883,870398,870400,870401,870402,870403,870407,870411,921310,410330,410331,410332,410333,452101,452102,452103,450044,450045,450046,450047,450048,450049,450050,450051,452145,452146,452147,452148,452149,452150,452151,2097992,452096,452097,452098,452099,452100,628745,628746,611435,611433,620666,608384,629682,601946,601947,601948,601949,601950,606092,624990,624991,624992,624993,624994,631555,606064,611449,625452,625454,625455,625456,625457,625458,625459,626203,807654,807655,807656,807657,807658,807659,807660,807662,807663,807664,807665,807666,807667,807668,807669,807670,807672,807673,807674,807675,760729,760730,760731,760732,760733,760734,760735,776882,776883,776884,776886,776887,776889,776890,776892,776893,776894,776895,807676,807678,807679,807680,807681,807682,807683,807684,803160,803161,803162,755374,755375,776897,776898,776899,776900,776901,776902,776903,776904,776905,776906,2098033,2098051,803211,803213,803214,803215,776982,776983,2098010,775051,2098034,2098035,776907,776909,776910,803216,803217,2098011,776888,814945,814946,814947,804651,804652,804653,804654,804655,804656,804657,804658,804659,804660,804661,804662,804663,2097996,2098012,782971,782972,820055,771968,745258,745259,745260,745261,1652126,782974,782976,794560,794578,794591,794592,2098091,2098050,798818,798819,798820,741948,743829,2098036,798821,798824,798825,798826,760717,780794,741091,2098008,776891,797158,797160,797162,797163,797164,797166,797167,797168,797169,797171,797172,797173,797174,797176,730610,730624,2098001,2098002,2098009,784012,797178,797179,797180,797182,797184,797185,797187,797189,797190,797191,797192,797193,797194,797197,797198,797199,797201,797202,797203,797204,797205,762528,730614,830639,953321,962832,963476,963477,963478,963479,963480,963481,818055,830750,696141,834480,834481,808376,830722,870224,870225,870228,870233,898791,830629,830631,830632,830633,830634,830635,830636,830637,830638,830640,830641,830642,830643,830644,830645,830647,830648,830649,830650,830651,830652,830653,830654,830656,830657,830658,830659,830660,830661,830662,830664,830666,830667,830668,830669,830670,830672,921129,921296,921303,793922,899153,899154,899155,899156,899157,899158,899159,899160,830673,830674,830690,830691,830692,830693,830695,830697,830698,830699,830700,830701,830702,830706,830707,830708,830709,830710,830711,830712,830715,830716,830718,830719,830720,695343,954927,954928,830630,797313,830705,886585,886586,886587,858508,858509,830737,830723,830724,830725,830726,830728,830729,821652,960533,960538,960539,960540,960541,948701,948703,948706,948708,948709,948715,948720,830727,830665,821649,821650,821651,821653,821654,821655,821656,830731,830732,830733,830734,830735,830736,830742,830646,830655,830663,830671,830696,830704,830714,830739,960661,821680,912900,912901,912902,912903,912904,912905,906813,830740,830741,830744,830745,830746,830747,830748,830749,830751,830752,830753,830754,830755,830756,830757,830758,830759,921172,283542,291574,291575,291598,291602,291603,293146,293148,293149,293230,289531,291232,2098144,2098146,2098149,2098152,2098153,2098156,2098142,2098143,793912,793913,793914,793915,793916,793917,793918,793920,793921,2098147,2098148,2098155,755983,794570,794581,806886,870416,870417,872089,872090,872091,872096,872098,872100,872101,872103,913369,913370,922350,926324,954590,954591,954592,954593,954594,954595,954596,954597,954598,921721,797200,953287,822543,954015,954016,953292,953303,954017,954020,954021,954028,954029,954030,871564,871567,871569,871570,871571,871572,871574,871575,871576,577594,872106,872108,872109,872110,872112,961735,844757,929082,935952,818043,844765,956032,956033,956034,956035,956036,956037,608377,608378,608379,608380,608381,608382,608383,606871,617232,611432,611434,611436,611437,611438,611439,611440,611441,611442,611443,611444,611445,611446,611447,611448,611450,611451,611452,612880,620670,606014,606026,606052,628807,611079,619984,619985,625151,590328,632201,632216,612418,614950,614951,578871,620738,620750,620763,615044,577596,579867,579869,383482,383483,383484,383485,382412,382413,382414,835609,1652141,1652144,838976,928860,871870,871872,871874,871882,871883,921098,824675,825958,907459,907460,907464,907465,907466,907469,907470,907472,907473,830717,830730,830721,958948,849281,849282,830738,859690,859691,859692,873527,873528,894879,920843,920844,920845,920846,844741,844742,844743,844744,844745,844746,844748,844751,844752,921306,818071,830743,830703,871817,871818,871821,871827,830713,953318,893137,893150,871831,822499,939655,939656,835677,885017,928840,807012,946572,946573,946574,946575,946576,946577,946578,2098356,873026,873027,873029,873030,873031,873032,839969,873038,873039,873040,873041,921789,894015,961725,921286,828670,794213,952458,952459,871797,871800,871807,871808,871810,948753,818070,797183,872074,872076,872078,872079,872080,823279,948758,948760,948764,918537,835668,908968,908969,908970,872083,872084,872086,892864,892865,892867,892868,892869,892870,892872,892873,892874,892875,892876,892878,892879,892880,828671,754702,807011,807013,807014,754672,754709,2098265,754666,743815,744760,754683,754742,727429,754646,777705,789060,2098353,2098355,782735,768500,768501,768503,768504,768505,768506,768507,768508,768509,768510,768512,810188,760703,794585,743357,743358,754685,768511,754712,750452,750453,750455,750456,750457,763837,754647,748909,907535,907536,907537,881155,881156,881157,881158,881159,881160,881161,881162,881163,881164,881165,881166,881167,881168,881169,881170,881171,881172,852433,852434,852435,852436,852437,852438,852439,852440,852441,907539,907541,907542,907545,893140,907546,907548,907549,907550,907551,907553,907555,727438,872668,841250,914885,919312,919313,919314,919315,919316,919317,919318,919319,919321,963518,963519,839310,932074,932085,932086,932087,932088,932089,932090,932091,800969,844890,844891,844892,844893,844894,844895,844896,844897,932092,932093,932094,932095,885290,893145,818046,818132,870515,870516,870517,870519,870523,870526,870527,870530,870531,870532,870533,870534,870535,872671,907477,907479,907482,907484,907485,907488,907489,907490,907491,907492,873001,873003,873005,873007,873009,873014,873015,823523,823524,823525,823526,823527,823529,823530,823531,823532,823533,823534,823535,823536,823538,823539,797177,915202,918488,918489,918470,875453,905891,963485,963486,963487,963488,963489,579299,578717,578722,578726,578727,578728,578729,578730,583499,583500,583502,424171,424173,424174,425529,425530,425531,425532,422375,422376,425527,425528,423904,423912,423918,423924,423926,423930,435831,435832,436044,837050,837051,926337,835659,835660,835661,835662,835663,835664,835665,835666,835667,835669,835670,835671,835672,835673,835674,835675,835676,835678,835679,835680,835681,835682,835683,835684,835685,908705,908706,908707,908708,961724,833477,833478,759741,759742,764545,764577,784944,732822,750454,752789,754693,754643,754644,754645,754652,754653,754654,754656,754657,754664,754665,754667,754668,754669,754671,754673,754674,754675,754676,754677,754678,754679,754680,754681,754682,754686,754687,754723,754688,754689,754690,754691,754692,754694,754695,754697,754698,754699,754700,754701,754703,754704,754705,754706,754707,754710,754711,754714,754715,754716,754718,754719,754720,754721,754722,754724,754725,754727,754728,754729,754730,754731,754733,754734,754735,754736,754737,754739,754740,754708,727427,812754,812755,812756,812758,812759,754741,754743,754745,732812,732813,732814,732816,732817,732818,732819,732820,732821,732823,732824,732825,774472,774479,754732,956031,842628,842629,842630,842631,842632,842633,842634,842635,825137,953312,910423,910424,818037,907630,907637,907638,907639,907641,907645,907647,907648,907649,907652,907653,875575,866545,866546,866547,866548,866549,866550,871380,871381,871382,871383,871384,871385,871386,871387,871388,871389,871390,871391,871392,871393,871394,871395,871396,871397,871398,871399,871400,871401,871402,871403,871404,961856,961857,961858,871405,871406,871407,871408,871409,871410,871411,871412,871413,871414,871415,871416,871417,871418,871419,871420,871422,871423,871424,871425,872627,875573,845000,872657,872660,872662,872663,496955,495463,497999,498000,498001,498002,495615,495627,495630,495633,495634,495638,497886,497888,497896,497899,497901,497905,497858,496456,496457,581958,581959,581962,578869,578870,578872,578873,578874,578875,580410,579709,579710,579711,579712,579713,577586,577587,577588,577589,577590,577591,577592,577593,577595,663395,641068,641069,680098,388657,388659,388661,386242,388998,395279,395281,395283,392694,392713,567531,567532,564666,564667,564668,564669,564670,564671,566190,566192,566193,568986,568987,568989,571358,507769,507770,509196,509197,509198,509199,509200,509201,509202,509203,507850,507865,507995,508077,508078,507453,507454,507455,507456,507457,508968,508969,508970,519277,519278,519279,520737,520357,519093,519094,519095,641049,641408,641410,673445,645939,690578,684041,690566,690567,690568,690569,690570,690571,690572,690573,690574,690575,690577,717204,692003,673031,597750,684898,689377,689378,689379,689380,689381,689394,689395,705729,634436,634437,634438,634439,652791,653529,686311,686312,686313,686314,687432,687433,687434,687435,687436,687438,687440,687441,687442,664071,681586,566326,566327,566328,566329,566330,566331,566332,566333,566334,566335,574697,573102,573103,573104,573106,573108,573109,573110,573111,573113,564238,564239,564240,564241,564242,564243,564244,565787,573115,573116,573117,568593,525923,525953,525954,525955,525956,525957,525958,525959,525960,525961,525962,524735,524736,524741,524742,524743,524744,524745,521172,521173,521174,521175,499996,673439,673440,673441,673442,673443,673446,673447,673448,720605,684621,684622,684623,684624,684625,634217,1241488,720828,720829,720830,656956,656960,656963,656968,656973,656974,656975,662033,662034,662036,662037,662038,662039,662040,634389,705665,662041,662042,662043,661340,661341,661342,661343,661344,676420,676421,676422,676423,676424,723103,644574,672320,700545,640879,611950,726140,574235,574236,574237,574238,574239,574240,574241,574242,574243,574246,574248,574250,565219,565220,565221,565222,565223,565226,574348,568791,568797,566770,567528,567529,567530,629676,605969,531265,531266,531267,531416,531417,532150,532151,530063,517114,517159,517160,516918,516919,676136,676137,676138,676139,676140,676141,676142,676144,676145,676146,676147,691855,719063,655529,694886,694887,694888,694889,641881,668487,717209,724091,671126,668483,668484,668485,668488,668489,668490,705722,668491,668492,668493,668494,668495,668496,696300,691843,699297,699298,699299,699300,699301,699302,699303,699304,699305,699310,713235,634327,634328,720607,695725,695726,695727,695728,695729,695730,695731,695732,695733,695734,695735,695736,695737,695738,695739,695740,695741,695742,695743,695744,695745,695746,695747,695748,695749,664067,664068,664069,664070,670430,703201,703202,703203,703204,703205,663398,700547,611936,611937,611938,611939,611940,611941,611943,611951,597749,597751,597752,605136,604036,615039,618099,600224,600225,600226,597753,624995,620797,620817,611104,609313,609314,609315,609316,611236,612309,612310,612311,626202,615040,512413,512414,512415,510054,510055,510056,510059,510068,511577,668486,672372,691573,691574,700131,700132,700133,635174,635175,635176,635177,635178,635179,635180,635182,635183,635184,635185,612312,673513,649171,634390,709785,735862,699307,786374,687439,777270,777271,777272,777273,777274,615043,600460,620709,598303,554608,554611,554613,554614,554615,554616,554627,561862,557618,777275,777854,777855,777856,777858,777860,777861,777862,813446,756220,803910,803911,803912,803913,736019,2099907,769195,791704,800576,812138,747844,800926,800927,800928,800929,800930,800931,736142,760692,780463,780464,780465,780466,794582,2099411,2099413,2099388,2099389,2099391,2099393,730436,2099400,2099401,2099402,2099403,2099406,2099407,2099408,2099409,2099412,2099390,2099392,2099394,2099395,2099396,2099397,717973,554026,554141,554156,2099410,2099387,562160,562161,562162,562163,562164,562165,563602,552938,562235,2099404,2099405,401231,401232,401233,401234,401385,401387,2099399,403608,2099398,442542,442543,442544,443316,443317,443318,443319,443320,443321,2099416,818030,818032,818033,818034,818035,2099442,781845,781846,781847,781848,781849,781850,781851,804625,1652130,2099417,2099418,808773,808774,818036,818038,818039,818040,818041,818042,818044,818045,818047,818048,818049,818050,818051,818052,818053,818054,818056,818057,818059,818060,818061,818062,818063,818065,818066,818067,818069,818073,818074,818075,818076,818077,818080,818081,818082,818083,818084,818086,818088,818089,818090,814334,2099419,794584,2099428,784491,800350,800577,2099415,2099439,2099440,784668,2099427,2099441,790424,790425,790426,790427,790428,790429,790431,790432,555065,560208,560209,560210,561647,561648,561649,561650,561651,555870,555872,555874,562392,562393,562394,562395,562396,562397,562398,563867,732535,811676,811677,811678,811679,770370,770371,770372,770373,770374,770375,770376,770377,770378,770379,770381,748825,797188,2099503,1652117,755895,752794,752796,789698,789699,789701,789703,789705,789706,789708,814221,814222,814223,814224,814225,814226,814227,814229,814230,777725,814232,815275,1652118,781119,781120,781121,781122,781124,794590,808374,808375,768655,791714,820410,820411,768359,768360,768361,782599,2099501,2099508,756221,782600,782601,492140,490546,491214,492723,494925,494927,493035,493044,794558,807867,798822,797175,770422,770426,770429,1652124,1652145,695864,797159,744954,821140,732345,732346,732348,732349,732350,786373,813070,813071,813072,813074,813076,813077,813078,813079,813080,813081,797181,739831,789704,797206,761921,736081,763778,873688,1652119,1652179,823463,756213,797165,841203,824535,824532,741301,426539,426541,428854,428855,428856,428857,428858,428859,428860,420762,420764,420766,420768,420770,420772,420774,420776,420778,418646,418672,418673,418674,418675,418013,418018,418020,418022,418024,418026,418028,418030,418032,418034,418036,418038,421369,421371,421373,421375,421377,421379,418442,418443,419493,475250,474067,833530,1652146,797186,797196,1652115,813073,797170,791713,807661,797207,907508,907509,907560,907563,907564,907565,907566,907567,760570,741326,741338,741349,741364,741501,760091,735574,807671,862620,871170,871171,871172,871175,871178,871180,871182,871183,892952,892953,892956,892957,892958,892961,768423,741391,741404,741418,778898,735599,776885,807677,907496,907498,907502,907503,907506,814228,741437,741451,741464,776896,777857,744004,803212,1652121,808373,805043,805055,741496,741511,741525,805877,776908,738950,797161,1652116,782973,794214,473471,473521,473523,474920,474921,473608,473609,474502,477985,477986,477987,476015,476016,476017,476020,477069,477071,477073,478444,478445,478446,478447,478448,478449,477777,477778,477780,477783,477785,477787,477788,477151,605946,605963,619910,595437,595438,595439,595440,595441,595442,595443,595446,595447,595448,594448,594449,594450,746609,729150,741533,798817,871538,871540,871541,871543,871544,771970,798823,871545,871549,871551,871553,1652129,741362,780360,872039,872044,872045,872047,872055,872057,872059,872061,872068,853443,853446,835563,870609,870612,870614,870615,839312,870620,870624,942460,942461,942465,942468,942469,797732,835564,921394,956038,956039,825944,825954,825955,595831,595832,595833,588227,588228,588229,588230,588231,588232,588234,588235,588236,588237,588364,620809,611105,595445,2099786,605284,594790,588363,2099787,921132,802785,1652158,928801,928802,928803,928804,2099784,797157,921418,2099785,824488,824521,831242,890709,907605,907606,907608,907610,907628,922691,922692,825960,955625,955626,954914,954915,928805,928806,928808,928809,928810,855557,855558,855559,855560,855561,855562,855563,855564,855565,928842,928843,928844,928845,928846,928847,928848,928849,837021,837022,837049,892712,892714,892716,892717,892720,892722,892724,892725,892727,892728,892730,892731,892733,892735,859797,871292,871293,871295,871297,871299,871303,871304,871306,868904,871863,955612,955613,955614,955615,955616,955617,955618,955619,955620,955621,955622,955623,763782,871521,871527,871529,871531,871533,885797,929102,929103,929106,929108,929112,929115,929116,929117,958927,922428,899257,899258,899259,899260,899261,899262,899263,899264,899265,899266,899267,921299,841248,597695,597697,605256,605274,605281,605290,605295,632214,615041,588362,2099799,612675,2099800,607359,607360,597696,595785,620818,611065,628961,628962,628963,630095,888048,888049,915069,915076,834696,907578,907580,907582,907583,907584,907585,907591,921096,921703,589953,581960,632212,632217,632218,626201,605272,622116,605945,606051,620634,611942,621401,2099806,2099807,1651610,807866,791702,791703,805040,805041,805042,805044,805045,805046,805047,805048,805049,805050,805051,805052,805053,805054,731207,743831,741554,741555,741556,794212,794215,794216,794217,794576,794583,794593,810186,741567,741568,741569,741570,741571,741572,741573,741574,741575,741576,741577,741578,741579,741580,741581,741582,741583,741584,741585,741586,741587,741588,741589,741590,741591,741592,741593,741594,741595,741596,741597,741598,741599,741600,741601,741602,741603,741604,741605,741606,741607,741608,741609,741610,741611,741612,741613,741614,741615,735980,741616,741617,741618,741619,741620,741621,741622,741623,741624,741625,741626,741627,741628,741629,741630,741631,741632,741633,741634,741635,741636,741637,741638,741639,741640,741641,741642,741643,741644,741645,741646,741647,741648,741649,741650,741651,741652,741653,741654,741655,741656,741657,741658,741659,741660,741661,741662,741663,741664,741665,741666,741667,741668,741669,741670,741671,741672,741673,741674,741675,741676,741677,741678,741679,741680,741681,741682,741683,741684,741685,741686,741687,741688,741689,741690,741691,741692,741693,741694,741695,741696,741697,741698,741699,741700,741701,741702,741703,741704,741705,741706,741707,741708,741709,741710,741711,741712,741713,741714,741715,741716,744005,1651608,1651611,741717,741718,741719,741720,741721,741722,741723,741724,741725,741726,741727,741728,741729,741730,741731,741732,741733,741734,741735,741736,741737,741738,741739,741740,741741,741742,741743,741744,741745,741746,741747,741748,741749,741750,741751,741752,741753,741754,741755,741756,741757,741758,741759,741760,741761,741762,741763,741764,741765,741766,741767,741768,740306,740307,740308,740310,744003,741769,741770,741771,741772,741773,741774,741775,741776,741777,741778,741779,741780,741781,741782,741783,741784,741785,741786,741787,741788,741790,741791,741792,741793,741794,741795,741796,695865,760565,760566,760567,760568,760569,760571,760572,760573,760574,743991,743989,743990,780508,1651609,743992,743993,743994,743995,743996,743997,743998,743999,744001,744002,744006,733291,744000,1651605,743988,2099840,743987,730623,741300,741302,741313,741314,741541,729146,741477,741444,741315,741316,741317,741318,741319,741320,741321,741322,741323,741324,741325,741327,741328,741329,741330,741331,741332,741333,741334,741335,741336,741337,741339,741340,741341,741342,741343,741344,741345,741346,741347,741348,741350,741352,741353,741354,741355,741356,741358,741359,741360,741361,741426,741373,741399,791177,791178,791179,791180,741499,741366,741368,741369,741371,741372,741374,741375,741376,741377,741378,741380,741381,741382,741383,741384,741385,741386,741387,741389,741392,741393,741394,741395,741396,741397,741398,741400,741401,741402,741403,741405,741406,741407,741408,741409,741410,741411,741414,741415,741416,741417,741367,791181,791183,741467,741479,738441,741365,741379,741412,741523,741357,741419,741420,741421,741423,741424,741425,741427,741428,741430,741431,741432,741433,741434,741435,741436,741438,741439,741440,741441,741442,741443,741445,741446,741447,741449,741450,741452,741453,741454,741455,741457,741458,741459,741460,741461,741462,741465,741468,741469,741470,741471,741472,622881,741456,741473,741474,741476,741478,741480,741481,741483,741484,741485,741486,741487,741488,741489,741490,741491,741492,741493,741495,741497,741498,741500,741502,741503,741504,741505,741506,741507,741508,741509,741510,741512,741513,741514,741515,741516,741517,741518,741519,741520,741522,741524,641949,741494,800210,729142,729143,729145,729147,729148,729149,729152,729154,729156,729157,729158,729159,729160,729161,729162,729163,741526,741527,741528,741529,741530,741531,741532,741534,741536,741537,741538,741539,741540,741542,741351,741413,741390,1241486,760321,760322,760323,741388,741363,741422,794559,794561,794575,786310,786311,786313,786314,786315,786316,786317,781441,774483,741475,744893,744894,744895,744896,735984,741370,720572,760087,760088,760089,760090,760092,760093,760094,760095,760096,760097,760098,784716,673463,811722,797260,797261,730437,720602,741448,741466,806119,673476,741463,662035,741482,741429,781900,781901,741535,741521,939661,939662,939663,939664,939665,830834,830835,830836,830837,830838,872020,872024,872028,872030,872035,834207,818078,875493,922340,949254,939918,948419,948420,948421,948422,948423,948426,948427,948429,948432,827718,818085,913250,913251,913252,913253,831675,831676,831677,831678,831679,831680,818072,880356,885453,859758,958943,827717,837555,844740,956028,956029,963490,963491,833081,855646,855647,921111,875509,875525,875540,813075,961588,963492,963493,963494,963495,821839,1652120,881590,885425,885426,885427,885428,885429,885430,885431,885432,885433,885434,885435,885436,885437,885438,885439,885440,885441,885442,885443,885444,885445,885446,885447,885448,885449,885450,885451,885452,885454,885455,885456,939379,906809,823424,823425,740309,818031,827716,875517,875526,875558,875569,818064,844783,844787,844788,844789,844791,844792,954442,768502,777859,781123,605228,615042,661695,668308,720603,744481,634400,684427,783964,789697,639546,687437,672662,695855,695873,800964,793919,578721,824487,824489,824514,824515,824516,824517,824518,824519,824520,824522,824523,824524,824525,583501,797195,797311,824526,824527,824528,824529,824530,824531,824533,824534,824536,824537,824538,824539,824540,824541,824542,824543,824544,824545,824546,824547,824548,824549,824550,824551,824552,824553,824554,824555,824556,693115,727432,753558,807015,754655,754670,754684,754696,754713,754726,754738,790430,635181,767394,588238,722141,641315,690576,754717,781443,812757,754744,732815,663107,647793,653528,818029,770380,821657,680564,649562,818058,818068,818079,818087,638645,673509,814333,802786,1001231,1001232,1001233,984190,984191,984193,984197,984200,984202,984207,972528,974696,1001234,1001235,1001236,1001237,1001238,1001239,1001240,1001241,981651,997826,997827,997828,997829,997830,997831,997832,997833,997834,997835,997836,997837,988976,997838,973584,972531,1652125,974915,979590,981653,981597,977814,1652142,981607,981595,985047,985122,985078,985033,981015,981016,981017,981018,981019,981020,981021,981022,981023,981024,981025,981026,981027,981028,981029,981030,981031,981032,981033,981034,981035,981036,981037,981038,981039,981040,981041,981042,981043,981044,981045,981046,981047,984779,981048,981050,981051,981052,981053,981054,981055,981056,981057,981058,981059,981060,981061,981062,981063,981064,981065,981066,981067,981068,981069,981070,981071,981072,981073,981074,981075,981076,981077,981078,981079,981080,981081,981082,981083,981084,981085,981086,998921,998922,998923,998924,998928,998929,995861,981087,981088,981089,981090,984950,981615,998906,998907,998909,998910,986410,986413,986416,986420,998899,998900,998901,998902,985158,974916,985059,972527,972539,988981,977828,977136,977137,977138,977139,977140,977141,977142,977143,977144,977145,981652,978460,984957,973003,973004,973005,973006,973007,973008,973009,973010,973011,973012,973013,973015,973016,973018,973019,973020,973021,973022,973023,973024,973025,973026,973027,973028,973029,973030,973031,973032,973033,973034,973035,973036,973037,973038,973039,973040,973041,973043,973044,973045,973047,973048,973049,973050,973051,973052,973054,973055,973056,984976,972529,976995,106643,119560,328956,328957,329744,329748,329756,334346,334349,334412,791422,771819,730466,730467,730468,730469,730470,744482,791423,727424,711549,804210,804211,800963,800965,800966,800967,800968,800970,789519,732063,732064,732065,732066,732067,732068,732069,732070,732071,797312,797314,797315,797316,797317,797318,769222,689541,145631,150384,149385,149386,296126,301467,303080,303082,303083,303084,303088,303325,303326,303328,552557,552558,552559,552560,552561,552562,552563,552565,552567,552568,545844,545845,545846,545847,545850,545851,545854,552632,2096635,545222,545903,545904,543912,543913,543914,543915,546089,399034,399036,399038,400262,396155,396156,2052550,416957,416958,416959,416960,416961,416962,416963,416964,2053638,181718,174065,174080,179647,179858,185695,192621,192626,690794,661318,691835,663410,690729,690731,690733,690734,690735,625453,719625,651479,651480,661319,661320,661321,661322,661323,661324,680561,711548,711550,719061,712295,222271,335753,335535,335536,340291,340360,340361,340493,340497,340499,340500,339211,339212,339213,339214,339215,339216,339217,339218,339219,339220,339221,339222,337853,337854,337855,337856,337857,340836,354850,354853,354856,355519,355527,353469,353470,353471,353472,353497,353498,353499,353500,353501,353502,355659,355660,355661,355662,355663,355664,355665,355666,355667,355711,355668,355669,355692,355693,353833,354594,2053215,2052434,222759,2053091,230112,230259,238497,238541,238544,238551,2053456,238659,238945,238946,238947,2096630,2052315,239877,239948,239952,239955,239956,240868,237396,232502,232503,232505,232557,232745,234592,2096631,650772,454791,454792,2096632,454741,454747,308372,308652,308702,306528,308877,307543,307547,340975,340976,340977,341003,341004,341005,341035,341036,341715,341725,342422,341883,341884,341886,345861,345301,345310,345314,345318,345470,706422,408555,408035,408037,408039,445406,445407,445408,1246143,1246144,1246145,1246146,1246147,1246148,1246150,1246151,1246152,1246153,1246154,1246155,1246156,1246157,1246159,1246160,1246161,1246162,1246163,1246165,1246166,1246167,1246168,1246169,1246170,1246171,1246172,1246173,1246174,1246175,1246176,1246177,1246178,1246179,1246180,1246181,1246182,1246183,1246184,1246185,1185273,1185274,1185276,1185278,1185279,1185280,1185281,1185282,1185284,1185285,1185286,1185288,1185289,1185290,1185291,1185292,1185293,1185295,1185297,1185298,1185299,1185300,1185301,1185302,1185303,1185304,1185305,1185306,1185308,1185309,1185310,1185311,1246186,1246187,1246188,1246191,1246192,1246193,1246194,1246195,1246196,1246197,1246198,1246199,1246200,1246201,1246202,1246203,1246204,1246205,1246206,1246207,1246208,1246209,1246210,1246211,1246212,1246213,1246214,1246215,1246216,1246217,1246218,1246219,1246220,1246221,1246222,1246223,1246224,1246225,1246226,1246227,1246228,1246229,1185312,1185313,1185314,1185315,1185317,1185318,1185319,1185320,1185321,1185322,1185323,1185324,1145651,1244052,1244053,1160132,1167657,1167658,1167659,1167660,1167661,1167662,1167663,1146078,1146079,1146080,1146081,1246230,1246231,1246232,1246233,1246234,1246235,1246236,1246237,1246238,1246300,1246302,1246303,1246304,1247527,1247528,1247530,1247531,1244633,1246463,1163748,1219487,1246239,1246241,1246242,1163742,1185325,1185326,1185327,1185328,1185330,1185331,1185332,1185333,1185334,1185335,1246366,1246367,1246370,1126037,1182563,1184395,1185337,1185338,1185339,1185340,1246373,1246375,1246377,1246379,1246380,1246381,1246382,1246383,1246384,1246385,1246386,1246387,1246388,1246389,1246390,1246391,1246392,1246396,1246398,1246400,1169438,1169452,1181609,1219693,1219697,1219698,1219699,1219701,1219704,1219705,1219708,1219709,1219710,1219713,1219716,1219719,1219720,1145667,1146781,1146782,1146783,1146784,1146785,1146786,1146787,1146788,1146789,1146790,1146791,1146792,1146793,1146794,1146795,1151674,1219722,1219723,1219724,1219732,1219736,1219737,1219738,1219739,1219740,1219741,1219742,1219743,1219744,1219746,1184918,1184919,1184920,1184921,1184922,1184923,1184924,1184925,1184926,1184927,1184928,1184929,1184930,1184931,1184932,1184933,1184934,1184935,1184936,1184937,1184938,1184939,1184940,1184941,1184942,1184943,1246437,1246438,1151102,1225757,1151139,1151140,1151141,1151142,1151143,1182557,1184222,1184223,1184224,1184225,1216622,1216623,1216624,1216625,1206164,1206165,1206166,1206167,1206168,1206169,1206170,1206171,1206172,1206173,1206174,1206175,1206176,1206177,1206178,1206179,1206180,1206181,1206182,1206183,1206184,1206185,1206186,1206187,1206188,1206189,1206190,1206191,1206192,1206193,1206194,1206195,1206196,1206197,1206198,1206199,1206200,1206201,1206202,1206203,1206204,1206205,1206206,1206207,1206208,1206209,1184944,1184945,1184946,1184948,1184949,1184950,1184951,1184952,1184953,1184954,1184955,1184956,1184957,1184958,1184959,1184960,1184961,1184962,1184964,1184965,1184966,1184967,1184968,1184969,1184970,1184971,1184972,1184974,1184976,1184977,1184978,1184979,1184980,1184981,1184982,1184983,1184984,1184985,1184986,1246476,1246494,1246495,1246496,1246500,1246502,1205507,1182590,1182591,1184226,1184228,1184229,1184230,1184231,1184232,1184233,1184234,1184235,1184236,1184237,1184238,1184239,1184240,1184241,1184242,1184243,1184244,1184245,1184246,1184247,1184248,1184249,1184250,1184251,1184252,1184253,1184254,1184255,1184256,1184257,1184258,1184259,1184260,1206210,1206211,1206212,1206213,1206214,1206215,1206216,1206217,1206218,1206219,1206220,1206221,1206222,1206223,1206224,1206225,1206226,1206227,1206228,1206229,1206230,1206231,1206232,1206233,1206234,1206235,1206236,1206237,1206238,1206239,1206240,1206241,1206242,1206243,1184987,1184988,1184989,1184990,1184991,1184992,1184993,1184994,1184995,1184996,1184997,1184998,1184999,1185000,1185001,1185002,1185003,1185004,1185005,1185006,1185007,1185008,1185009,1185011,1185012,1185013,1185014,1185015,1185016,1185018,1185019,1185020,1185021,1225054,1225055,1225057,1225059,1225063,1225065,1225066,1225067,1225068,1225069,1225070,1225071,1225282,1225283,1251550,1208485,1184261,1184262,1184263,1206357,1206358,1206359,1206360,1206361,1206362,1206363,1206364,1206365,1206366,1206367,1206368,1206369,1206370,1206371,1206372,1206373,1206374,1206375,1206376,1206377,1206378,1206379,1206380,1206381,1206382,1206383,1206384,1185023,1185024,1185025,1185026,1185027,1185028,1185029,1185030,1185031,1185032,1185033,1185035,1185036,1185037,1185038,1185039,1185040,1185041,1185042,1185043,1185044,1185046,1185047,1185048,1185049,1185050,1185051,1185053,1185054,1185055,1185056,1185057,1185059,1185060,1185061,1185062,1185063,1185064,1185065,1185068,1225107,1225108,1225109,1225111,1225112,1225113,1225114,1225115,1146860,1146861,1146862,1182615,1184264,1184265,1184266,1184269,1184270,1184271,1184272,1184273,1184274,1184275,1184276,1184277,1184279,1206244,1206245,1206246,1206247,1206248,1206249,1206250,1206251,1206252,1206253,1206254,1206255,1206256,1206257,1206258,1206259,1206260,1206261,1206262,1206263,1206385,1206386,1206387,1206388,1206389,1206390,1206391,1206392,1206393,1206394,1206398,1206399,1206400,1206401,1206402,1206403,1206404,1206405,1206406,1206407,1206408,1206409,1206410,1206411,1206412,1206413,1206414,1206415,1206417,1206418,1206419,1206420,1206421,1206422,1206423,1206424,1206425,1206426,1206427,1206428,1206429,1206430,1206431,1206432,1206433,1206434,1245938,1245940,1245941,1245942,1245943,1245944,1245948,1245950,1245951,1245952,1245953,1245954,1245955,1245956,1245957,1245958,1245959,1245960,1245961,1245962,1245963,1245964,1245965,1245966,1245967,1245968,1245969,1245970,1245971,1245972,1245974,1245976,1245977,1245978,1185069,1185070,1185071,1185072,1185073,1185074,1185075,1185077,1185078,1185079,1185080,1185081,1185082,1185083,1185084,1185085,1185086,1185087,1185088,1185089,1185090,1185091,1185092,1185093,1185095,1185096,1185098,1185100,1185101,1185102,1185103,1185104,1185105,1185106,1185108,1185109,1185110,1185111,1185112,1211275,1211276,1211277,1211278,1225116,1225117,1225118,1225119,1225120,1225122,1225123,1225124,1225126,1225127,1225128,1225129,1225130,1225131,1225133,1225134,1225135,1225136,1225137,1225138,1225139,1225140,1225141,1225142,1225143,1225144,1225145,1225146,1225147,1184280,1184281,1184282,1184283,1184284,1184285,1184286,1184287,1184288,1184289,1184290,1184291,1184292,1184293,1184294,1184295,1184296,1184297,1184298,1184300,1184301,1184302,1184303,1184304,1184305,1184306,1184307,1184308,1184309,1206264,1206265,1206266,1206267,1206268,1206269,1206270,1206271,1206272,1206273,1206274,1206275,1206276,1206277,1206278,1206279,1206280,1206281,1206282,1206283,1206284,1206285,1206286,1206288,1206289,1206290,1206291,1206292,1206293,1206294,1206295,1206296,1206297,1206298,1206299,1206300,1206301,1206302,1206303,1245979,1245980,1245981,1245982,1245983,1245984,1245985,1245986,1245987,1245988,1245989,1245990,1245991,1245992,1245993,1245994,1245995,1245996,1245997,1245998,1245999,1246000,1246001,1246002,1246003,1246004,1246006,1246007,1246008,1246009,1246010,1185113,1185114,1185115,1185116,1185117,1185119,1185120,1185121,1185123,1185125,1185128,1185132,1185134,1185138,1185139,1185141,1185143,1185146,1185148,1185152,1185153,1185155,1185156,1185157,1185158,1185159,1185160,1185161,1185162,1185163,1185165,1185166,1185167,1185168,1185170,1185171,1185172,1185173,1185174,2100486,1225176,1225177,1225178,1225179,1225180,1184310,1184311,1184312,1184313,1184314,1184315,1184316,1184317,1184318,1184319,1184320,1184321,1184322,1206304,1206305,1206306,1206308,1206309,1206310,1206311,1206312,1206313,1206314,1206315,1206316,1206317,1206318,1206319,1206320,1206321,1206322,1206323,1206324,1206325,1206326,1206327,1206328,1206329,1206330,1206331,1206332,1206333,1206334,1206335,1206336,1206337,1206338,1206339,1206340,1206341,1206342,1206343,1206344,1206345,1206346,1206347,1206348,1206349,1206350,1206351,1206352,1206353,1206354,1130103,1132276,1132277,1132278,1132279,1132281,1132282,1132283,1132284,1246011,1246012,1246013,1246014,1246015,1246016,1246017,1185175,1185176,1185177,1185178,1185180,1185181,1185183,1185184,1185185,1185186,1185187,1185188,1185189,1185190,1185191,1185193,1185195,1246020,1246021,1246022,1246023,1246024,1246025,1246026,1246027,1246028,1246029,1246030,1246031,1246032,1246033,1246034,1246035,1246037,1246038,1246039,1246040,1246041,1246043,1185196,1185197,1185198,1185199,1185201,1185202,1185203,1185204,1185205,1185206,1185207,1185208,1185209,1185210,1185211,1203712,1205627,1205628,1205629,1205630,1205631,1205632,1246066,1246067,1246093,1246094,1246095,1246096,1246097,1246101,1246102,1246103,1246104,1246105,1246106,1185212,1185213,1185215,1185216,1185217,1185218,1185219,1185220,1185221,1185222,1185223,1185224,1185225,1185226,1185227,1185228,1185229,1185230,1185231,1185233,1185234,1185235,1185237,1185238,1185239,1185240,1185241,1185242,1185243,1185244,1185245,1185246,1185247,1185248,1241484,1241487,1241489,1246107,1246108,1246109,1246110,1246111,1246112,1246113,1246114,1246115,1246116,1246119,1246120,1246121,1246122,1246123,1246124,1246125,1246126,1246127,1246128,1246129,1246130,1246131,1246132,1246133,1246134,1246135,1246136,1246137,1246138,1246139,1246141,1246142,1185249,1185250,1185251,1185252,1185253,1185254,1185256,1185257,1185260,1185261,1185262,1185263,1185264,1185265,1185266,1185267,1185268,1185269,1185270,1185271,1185272,1171069,1171070,1171071,1171072,1171073,1171074,1171075,1171076,1171077,1171078,1171079,1171080,1171081,1171082,1171083,1171084,1171085,1171086,1171087,1171088,1171089,1171090,1171091,1171092,1171093,1171094,1171095,1171096,1171097,1171098,1171099,1171101,1171102,1171103,1171104,1171105,1171106,1171107,1171108,1171109,1171110,1171111,1239140,1145685,1239132,1150301,1137285,1137286,1137287,1137288,1137289,1137290,1137291,1137292,1137293,1137294,1150369,1171113,1171114,1171115,1171116,1171117,1171118,1171119,1171120,1171121,1171122,1171123,1171124,1171125,1171126,1171127,1171128,1171129,1171130,1171131,1171132,1171133,1171135,1171136,1171137,1171138,1171139,1171140,1171141,1171142,1171143,1171144,1171145,1171146,1171147,1243951,1137407,1196097,1196098,1196099,1196100,1137981,1137982,1137983,1137984,1137985,1137986,1137987,1137988,1137989,1137990,1137991,1149377,1150273,1147702,1160908,1160911,1160913,1160914,1160916,1160920,1160921,1160922,1160923,1160924,1160925,1160926,1125557,1216453,1216454,1216455,1216456,1216457,1216458,1216459,1216461,1216462,1216464,1216466,1216467,1216468,1216469,1216470,1216471,1216472,1216474,1216479,1216481,1216483,1216484,1216485,1216486,1216487,1216488,1216489,1216491,1216492,1136823,1136824,1136825,1136826,1136827,1136828,1136829,1136830,1136831,1136832,1136833,1136834,1136835,1216493,1216494,1216495,1216496,1216497,1216498,1132800,1160030,1125462,1125470,1160188,1225369,1208467,1246426,1246439,1246454,1230751,1230752,1230753,1230754,1230758,1230759,1230765,1230766,1230767,1230770,1230771,1230772,1169277,1246515,1182598,1254264,1254267,1145736,1205164,1205167,1205185,1230775,1230780,1230781,1230782,1230783,1230785,1230787,1230789,1230792,1230793,1230795,1230799,1230802,1230803,1230806,1230808,1230809,1230810,1230814,1180701,1180702,1180703,1180704,1180705,1180706,1180707,1180708,1180709,1180710,1180711,1180712,1180713,1180714,1145744,1178996,1178997,1205195,1205204,1205208,1205216,1205227,1205230,1205231,1205239,1205240,1230823,1230828,1230840,1230856,1230867,1180715,1180716,1180718,1180719,1180720,1180721,1180722,1180723,1180724,1180725,1180726,1180727,1180728,1180729,1180730,1180731,1180732,1180735,1180736,1180737,1180738,1180739,1180740,1180742,1180745,1180747,1180748,1180749,1229703,1151679,1152712,1182613,1182630,1139952,1139953,1139954,1139955,1230874,1230876,1230877,1230880,1141522,1141523,1182632,1254925,1254926,1254930,1254933,1254934,1254936,1183195,1183781,1145633,1131839,1131840,1131841,1131842,1131843,1131844,1131845,1131846,1131847,1131848,1140427,1182614,1149361,1149395,1241802,1241803,1241807,1241808,1241813,1241821,1170981,1170983,1170984,1170985,1170986,1170987,1170988,1170989,1170990,1170991,1170992,1170993,1170994,1170995,1170996,1170997,1170998,1170999,1171000,1171001,1171002,1171003,1171004,1171005,1171006,1171007,1171008,1171009,1171010,1171011,1171012,1171014,1171015,1171016,1171017,1171018,1171019,1171020,1171021,1171022,1171023,1241822,1241823,1241828,1241831,1241832,1241850,1241853,1241854,1241856,1241858,1241859,1241860,1241861,1241862,1254937,1254945,1254946,1254949,1254950,1254951,1254952,1254953,1254954,1254955,1254956,1254957,1254958,1254959,1130098,1171024,1171025,1171026,1171027,1171028,1171030,1171031,1171032,1171033,1171034,1171035,1171036,1171037,1171038,1171039,1171040,1171041,1171042,1171043,1171044,1171045,1171046,1171047,1171048,1171049,1171050,1171051,1171053,1171054,1171055,1171056,1171057,1171058,1171059,1171060,1171061,1171063,1171064,1171065,1171066,1171067,1171068,1239131,1246501,1241863,1241866,1241869,1241871,1241872,1241874,1241880,1241885,1241886,1241888,1241892,1241895,1241897,1170869,1170870,1170871,1170872,1170873,1170874,1170875,1170876,1170877,1170878,1170879,1170880,1170881,1170882,1170883,1170884,1170885,1170886,1170887,1170888,1170889,1170890,1170891,1170892,1170893,1170894,1170895,1170896,1170897,1170898,1170899,1170900,1170901,1170902,1170903,1170904,1170905,1170906,1170907,1170908,1170910,1170911,1170912,1146631,1146632,1146633,1146634,1146635,1146636,1146637,1146638,1146639,1146640,1146641,1146642,1146643,1125461,1125476,1125495,1199932,1199933,1199934,1199935,1199936,1199937,1199938,1199939,1199940,1170913,1191319,1148486,1199941,1199942,1199943,1199944,1199945,1199946,1199947,1199948,1199949,1199950,1199951,1199952,1199953,1199954,1199955,1199956,1199957,1199958,1199959,1199960,1199961,1199962,1199963,1199964,1199965,1199966,1199967,1199968,1199970,1199972,1199973,1199974,1199975,1199976,1199977,1199978,1199979,1199980,1199981,1199982,1147011,1147012,1147013,1147014,1160198,1169271,1217326,1217327,1217328,1217329,1217330,1217331,1217332,1217333,1217334,1217335,1217336,1217337,1217338,1217339,1217340,1217341,1217342,1217343,1163833,1192298,1199983,1199984,1199985,1199986,1199987,1199988,1199989,1199990,1199991,1199992,1199993,1199994,1199995,1199996,1199997,1199998,1199999,1200000,1200001,1200002,1200003,1200004,1200005,1200006,1200007,1200008,1200018,1200019,1200020,1200021,1200022,1147015,1147016,1147017,1147018,1203691,1161276,1200023,1200024,1200025,1200026,1200027,1200028,1200029,1200030,1200033,1200034,1200035,1200036,1200037,1200038,1200039,1200040,1200041,1200042,1200043,1200044,1200045,1147019,1147020,1147021,1149208,1214167,1181622,1216880,1216881,1216882,1131955,1131956,1131957,1131958,1131959,1131960,1131961,1131962,1131963,1131964,1131965,1131966,1131967,1131968,1131969,1131970,1131971,1131972,1131973,1131974,1131975,1131976,1131977,1131978,1131979,1131980,1131981,1131982,1131983,1131984,1131985,1131986,1131987,1163753,1214170,1126532,1126533,1182571,1125466,1131988,1131989,1131990,1131991,1131992,1131993,1131994,1131995,1131996,1131997,1131998,1131999,1132000,1132001,1132002,1132003,1132004,1132005,1132006,1132007,1132008,1132009,1132010,1132011,1132012,1132013,1132014,1132015,1132016,1137419,1182618,1182620,1160794,1160795,1160796,1160797,1160798,1160799,1160800,1160801,1160803,1160805,1160806,1160808,1132017,1132018,1132019,1132020,1132021,1132022,1132023,1132024,1132025,1132026,1132027,1132028,1132029,1132030,1132031,1132032,1132033,1132034,1132035,1132036,1132037,1132038,1132039,1132040,1132041,1132042,1126104,1132043,1132044,1132045,1132046,1132047,1132048,1132049,1132050,1132051,1132052,1132053,1132054,1132055,1132056,1132057,1132058,1132059,1132060,1132061,1132062,1205508,1205509,1182607,1182619,1151670,1151672,1137413,1217344,1217345,1217346,1137410,1151100,1174011,1126074,1217096,1217097,1217098,1217099,1217100,1217101,1217102,1217103,1217104,1217105,1217106,1217107,1217109,1217110,1217111,1217112,1217113,1217114,1217347,1217348,1217349,1217350,1217351,1217352,1217353,1217354,1217355,1217356,1217357,1217358,1217359,1217360,1217361,1217362,1217363,1217364,1217365,1217366,1217367,1132362,1132363,1132364,1132365,1132366,1132367,1132368,1132369,1132370,1132371,1132372,1132373,1132374,1132375,1132376,1132377,1132378,1132379,1132380,1132381,1132382,1132383,1132384,1132385,1132386,1132387,1132388,1132389,1132390,1152172,1139958,1218212,1218213,1218214,1218215,1218216,1218217,1218218,1218219,1218220,1218221,1218222,1218223,1218224,1218225,1218226,1218227,1218228,1218229,1218230,1218231,1218232,1218233,1218234,1218235,1218236,1218237,1218238,1218239,1218240,1218241,1218242,1218243,1218244,1218245,1218866,1218867,1199726,1199727,1199728,1125222,1125223,1126005,1218246,1218247,1218248,1218249,1218250,1218251,1218252,1218253,1218254,1218255,1218256,1218257,1218258,1218259,1218260,1218261,1218262,1218263,1218270,1218271,1218272,1218273,1218274,1218275,1218276,1218277,1218278,1218279,1218280,1218281,1218282,1151677,1199729,1199730,1199731,1199732,1199733,1170703,1170704,1170705,1170706,1170707,1170708,1170709,1170710,1170711,1170712,1170713,1170714,1170715,1170716,1170717,1170718,1170719,1170720,1170721,1170722,1170723,1170724,1170725,1170726,1170727,1170728,1170729,1170730,1170731,1170732,1170733,1170734,1170735,1170736,1170737,1170738,1170739,1170740,1170741,1170742,1170743,1182592,1170914,1170915,1170916,1170917,1170918,1170920,1170921,1170922,1170923,1170924,1170925,1170926,1170927,1170928,1170929,1170930,1170931,1170940,1170941,1170942,1170943,1170944,1170945,1170946,1170947,1170948,1170949,1170950,1170951,1170952,1170953,1170954,1170955,1170956,1170957,1170958,1170959,1170960,1170961,1170962,1170964,1170965,1125482,1146629,1146630,1182594,1218292,1218293,1218294,1218295,1218296,1218297,1218298,1218299,1218300,1218301,1218302,1218303,1218304,1218305,1218306,1218307,1218308,1218309,1218310,1218311,1218312,1218313,1218314,1218315,1218316,1218317,1218318,1218319,1218320,1218321,1199734,1199735,1199736,1199737,1199738,1199739,1199740,1199741,1199742,1199744,1170744,1170745,1170746,1170747,1170748,1170749,1170750,1170751,1170752,1170753,1170754,1170755,1170756,1170757,1170758,1170759,1170760,1170761,1170762,1170763,1170764,1170765,1170766,1170767,1170768,1170769,1170770,1170771,1170772,1170773,1170774,1170775,1170776,1170777,1170778,1170779,1170780,1170781,1170782,1170783,1170784,1170785,1170786,1170966,1170967,1170968,1170969,1170971,1170972,1170973,1170974,1170975,1170976,1170977,1170979,1145740,1147787,1198844,1191662,1191665,1191670,1191671,1191672,1191673,1191675,1191681,1191682,1191683,1191684,1191685,1191700,1191701,1191702,1217274,1217275,1217276,1217278,1217279,1217281,1217282,1217283,1217284,1217285,1218332,1218333,1218334,1218335,1218336,1218337,1218338,1125524,1170787,1170788,1170789,1170790,1170791,1170792,1170793,1170794,1170795,1170796,1170797,1170798,1170799,1170800,1170801,1170802,1170803,1170804,1170805,1170806,1170807,1170808,1170809,1170810,1170811,1170812,1170813,1170814,1170815,1170816,1170817,1170818,1170819,1170820,1170821,1170822,1170823,1170824,1170825,1170826,1170827,1216841,1216842,1216843,1216844,1216845,1216846,1216847,1216848,1216849,1217286,1217287,1217288,1217289,1217290,1217291,1217292,1217293,1217294,1217295,1217296,1217297,1217298,1217299,1217300,1217301,1217302,1217316,1217317,1217318,1217319,1217320,1217321,1217322,1217323,1217324,1217325,1218339,1218340,1218341,1218342,1218343,1218344,1145895,1145896,1145897,1145898,1145899,1145900,1145901,1147742,1170828,1170829,1170830,1170831,1170832,1170833,1170834,1170835,1170836,1170837,1170838,1170839,1170840,1170841,1170842,1170843,1170844,1170845,1170846,1170847,1170848,1170849,1170850,1170851,1170852,1170853,1170854,1170855,1170856,1170857,1170858,1170859,1170860,1170861,1170862,1170863,1170864,1170865,1170866,1170867,1170868,1151676,1168334,1168335,1168336,1168337,1168338,1168339,1168340,1168341,1168342,1168343,1168344,1168345,1168346,1168347,1168348,1168349,1168350,1168351,1168352,1168353,1168354,1168355,1238512,1199774,1160011,1183181,1205326,1182576,1182597,1182633,1181618,1183667,1156868,1145649,1181876,1181877,1181878,1181879,1181880,1181881,1181882,1181883,1181884,1181885,1181886,1181887,1181888,1181889,1181890,1181891,1181892,1181893,1181894,1246519,1160019,1145671,1181895,1181896,1181897,1181898,1181899,1181900,1181901,1181902,1181903,1181904,1181905,1181906,1181907,1181908,1181909,1181910,1181911,1181912,1181913,1147703,1137405,1136517,1181914,1181915,1181916,1181917,1181918,1181919,1181920,1181921,1181922,1181923,1181924,1181925,1181926,1181927,1181928,1181929,1181930,1181931,1181932,1181933,1181934,1181935,1181936,1181937,1181938,1181940,1181941,1181942,1181943,1181944,1181946,1181947,1181948,1181949,1181950,1181951,1145632,1174793,1174795,1174796,1174797,1174798,1174799,1174802,1174803,1174804,1174811,1174813,1174814,1174816,1125563,1253687,1254263,1254268,1254269,1181952,1181953,1181954,1181955,1181956,1181957,1181958,1181959,1181960,1181962,1181963,1181964,1181965,1181966,1181967,1181968,1181969,1181970,1181971,1181973,1181974,1181975,1181976,1181977,1181978,1181979,1181980,1181981,1181982,1181983,1181984,1181985,1181986,1181987,1181988,1181989,1181990,1181991,1181992,1181993,1214169,1181994,1181995,1181996,1181997,1181998,1181999,1182000,1182001,1182002,1182003,1182004,1182005,1182006,1182007,1182008,1182010,1182011,1182013,1182014,1182016,1182017,1182019,1182020,1182022,1182023,1182025,1182026,1182028,1182029,1182031,1182032,1182034,1182035,1182036,1182037,1182038,1182039,1182040,1218913,1218914,1218915,1139174,1139175,1139176,1139177,1139178,1139179,1139180,1139181,1139182,1139183,1139184,1139185,1139186,1139187,1139188,1139189,1139190,1139191,1139192,1139193,1139194,1139195,1139196,1139197,1139198,1139199,1139200,1139201,1139202,1139203,1139204,1139205,1139207,1139208,1139209,1139210,1139211,1139212,1139213,1139214,1182593,1182041,1182042,1182043,1182044,1182045,1182047,1182048,1182049,1182050,1182051,1182052,1182053,1182054,1182055,1182056,1182057,1182058,1182059,1182060,1182061,1182062,1182063,1182066,1182067,1182068,1182069,1182070,1182071,1182072,1182074,1182075,1182076,1182078,1182079,1182080,1182081,1182082,1182083,1182085,1182086,1182087,1182088,1139240,1139242,1139243,1139244,1139245,1139246,1139247,1139248,1139249,1139250,1139251,1139252,1139253,1139254,1139255,1139256,1139215,1139216,1139217,1139218,1139219,1139220,1182089,1182091,1182092,1182093,1182094,1182095,1182096,1182097,1182098,1182099,1182100,1182101,1182103,1182104,1182105,1182106,1182107,1182109,1182110,1182111,1182113,1182116,1182117,1182118,1182119,1182120,1182122,1182123,1182124,1182125,1182126,1182128,1182130,1182131,1182132,1182133,1182134,1182135,1182136,1182137,1182138,1145876,1145877,1145878,1145879,1214097,1182588,1182589,1240177,1182595,1182139,1182142,1182144,1182145,1182146,1182147,1182149,1182150,1182151,1182153,1182154,1182155,1182156,1182158,1182159,1182162,1182163,1182164,1182165,1182166,1182168,1182169,1182170,1182171,1182172,1182173,1182174,1182175,1182176,1182177,1182178,1182179,1182180,1182181,1182182,1182183,1182184,1182185,1205693,1205694,1205695,1205696,1205697,1205698,1145674,1146881,1146882,1146883,1146884,1146885,1146886,1146887,1146889,1146890,1146895,1146896,1146898,1146900,1146901,1146902,1146904,1146905,1146907,1146908,1251065,1251066,1251067,1251068,1251069,1186612,1182186,1182187,1182189,1182213,1182214,1182215,1182216,1182217,1182219,1182220,1182221,1182223,1182225,1182226,1182230,1182231,1182232,1182234,1182235,1182236,1182237,1182238,1246524,1214168,1182240,1182242,1182243,1182244,1182245,1182247,1182248,1182249,1182250,1182251,1182252,1182255,1182256,1182257,1182258,1182260,1182261,1182262,1182263,1182264,1182265,1182266,1198741,1198744,1198746,1254265,1228921,1254266,1241490,1255449,1168313,1168314,1168315,1168316,1168317,1168318,1168319,1168320,1168321,1168322,1168323,1168324,1168325,1168326,1168327,1168328,1168329,1168330,1168331,1168332,1168333,1174783,1174784,1265668,1369838,1369839,1369841,1369842,1274327,1283129,1283130,1283131,1283132,1316559,1316562,1316566,1272137,1316583,1316584,1316586,1359812,1265563,1285495,1369903,1369904,1369906,1369907,1369908,1369909,1369910,1369911,1369912,1369913,1369914,1369915,1369916,1369917,1369927,1369928,1369929,1369930,1369931,1369933,1369934,1369935,1369936,1369937,1369938,1369939,1369940,1369943,1369945,1369946,1369947,1369948,1369949,1377360,1377362,1377363,1377364,1377365,1377366,1377367,1377371,1377372,1377375,1377378,1377379,1377380,1377381,1377382,1377392,1377393,1377394,1377401,1392823,1282225,1282226,1282227,1282228,1326677,1326678,1326679,1326680,1326681,1326682,1326683,1369951,1369952,1369953,1369954,1369955,1369956,1369959,1369960,1369962,1369963,1369964,1369965,1369967,1369968,1369969,1369970,1369972,1369974,1369975,1369976,1369977,1369978,1369979,1369981,1369983,1369984,1369985,1369986,1377410,1377411,1377412,1377415,1377417,1377420,1377421,1377425,1377427,1377428,1377429,1377430,1377431,1377432,1326684,1326685,1326686,1326687,1326688,1326689,1326690,1326691,1326692,1326693,1326694,1326695,1326696,1369991,1369992,1369994,1369995,1369996,1369997,1369999,1370000,1370002,1370003,1370004,1370005,1377433,1377439,1359415,1359809,1300145,1345885,1349896,1349897,1349898,1349899,1349900,1349913,1349914,1329636,1370006,1370007,1370008,1370009,1370010,1370011,1370012,1370013,1370014,1370015,1370016,1370017,1370018,1370019,1370020,1370021,1370022,1370023,1370024,1370025,1370026,1370027,1370028,1370030,1370032,1370033,1370034,1370036,1370037,1370038,1370041,1370044,1370048,1268315,1370053,1370057,1370061,1370065,1370068,1370070,1370073,1370077,1370080,1370082,1370084,1370085,1370087,1370088,1370089,1370091,1370092,1370094,1370095,1370096,1370110,1370117,1370119,1370122,1370131,1370132,1370135,1370137,1370138,1370139,1370141,1370142,1370143,1370144,1370146,1362978,1362979,1362980,1362981,1362982,1322036,1322037,1322038,1357967,1370232,1370236,1370238,1370239,1265880,1358016,1358033,1359894,1370830,1296606,1262517,1262520,1262523,1262524,1262525,1262526,1262535,1262536,1262537,1313571,1313572,1313574,1313575,1313579,1313581,1313584,1313585,1313586,1375321,1376716,1274980,1309404,1319913,1265856,1400617,1400618,1400619,1400620,1400621,1400622,1400623,1400624,1400625,1400626,1400627,1375326,1381979,1381980,1381981,1381982,1381983,1321810,1321811,1321819,1321820,1321821,1321822,1318205,1321799,1321800,1265518,1392213,1392214,1392215,1392216,1392217,1392218,1392219,1392220,1392221,1392222,1392223,1392224,1392225,1392226,1392227,1392228,1392229,1392230,1392231,1392232,1392233,1392234,1392236,1392237,1392238,1392240,1392241,1392242,1392244,1267040,1267041,1267042,1267043,1267044,1267045,1267046,1267047,1267048,1270865,1270866,1392245,1392246,1392247,1392248,1392249,1392250,1392253,1392254,1392255,1392260,1392262,1392263,1392767,1392816,1274986,1404333,1404334,1391814,1391815,1391816,1391817,1391818,1391819,1391820,1391821,1391822,1391823,1391824,1391825,1391826,1391827,1391828,1391829,1391830,1392778,1326757,1326758,1396768,1282798,1358058,1309857,1359938,1275528,1275534,1275541,1275542,1396773,1269584,1313530,1313532,1313533,1313534,1313535,1313537,1313539,1313540,1313541,1313542,1313545,1313547,1313548,1313549,1313550,1313551,1313552,1313553,1313554,1313555,1313557,1369246,1274956,1327465,1327467,1327468,1327469,1327470,1327471,1327472,1327474,1327477,1327478,1327479,1327480,1327482,1327483,1358086,1392127,1327498,1327499,1327500,1327502,1327503,1327504,1327505,1327506,1327507,1358040,1332820,1332821,1332822,1332834,1372618,1345852,1332835,1332836,1332837,1332838,1332839,1311046,1311047,1311050,1372619,1372620,1372621,1372622,1372623,1372624,1372625,1372626,1372628,1372629,1372630,1372631,1372632,1372633,1372634,1372635,1372636,1372637,1372638,1372639,1372640,1372641,1351499,1351500,1351501,1351502,1351503,1351504,1351505,1351506,1351507,1351508,1351509,1351510,1351511,1351512,1351513,1351514,1351515,1351516,1351518,1351519,1351520,1351521,1351522,1351523,1351524,1351525,1351526,1351527,1351528,1351529,1351530,1351531,1351532,1351533,1351534,1351535,1351536,1351537,1351538,1351539,1351540,1351541,1286221,1351542,1351544,1351545,1351546,1351547,1351548,1351549,1351550,1351551,1351552,1351553,1351554,1351555,1351557,1351558,1351559,1351560,1351561,1351562,1351563,1351564,1351565,1351566,1351567,1351568,1351569,1351570,1351571,1351572,1363446,1363447,1363448,1363449,1363450,1363452,1363453,1363456,1318213,1351573,1351574,1351576,1351577,1351578,1351579,1351580,1351581,1351582,1351583,1351584,1351586,1351588,1351589,1351593,1351594,1351595,1351596,1351597,1351598,1351599,1351601,1351602,1351604,1351607,1351609,1351610,1351611,1351612,1351613,1351614,1351615,1363479,1363480,1363485,1363489,1363493,1392756,1351616,1351617,1300204,1400412,1400413,1400414,1400416,1400417,1400421,1400422,1400423,1400424,1400426,1400427,1400430,1400432,1400434,1400435,1400436,1400437,1400438,1400439,1400440,1400441,1400442,1300217,1283137,1280067,1280068,1280081,1280082,1323304,1323305,1323306,1323307,1323308,1323309,1323310,1326211,1274330,1280114,1280115,1280116,1280117,1280118,1280119,1280120,1280121,1280144,1280145,1280146,1280147,1280148,1280149,1282850,1280192,1282292,1282293,1282294,1282295,1282296,1282297,1282847,1359448,1398778,1345893,1382439,1382440,1382441,1382442,1382444,1382445,1382446,1382447,1382448,1382449,1382450,1382451,1382452,1382453,1382454,1382455,1382457,1382462,1382463,1382465,1382466,1382467,1382468,1382469,1382470,1382471,1382473,1382475,1382476,1382477,1382479,1382480,1382481,1382482,1382483,1382484,1382485,1382486,1382488,1392819,1353198,1321816,1321817,1382489,1382490,1382492,1382494,1382495,1382497,1382498,1382499,1382500,1382501,1382502,1382504,1382505,1382506,1382507,1384460,1384461,1389434,1389435,1389436,1389437,1389438,1389441,1389442,1389443,1389447,1389451,1389452,1265509,1265536,1293419,1293420,1293421,1293426,1293428,1382509,1382510,1382511,1382513,1382514,1382515,1382517,1382518,1382519,1382520,1382521,1331945,1331946,1389469,1389471,1389474,1389475,1389476,1389478,1389479,1394523,1353075,1353077,1353079,1353084,1282853,1378446,1378447,1378448,1378449,1378450,1378451,1378452,1378453,1378454,1378455,1378456,1378458,1396982,1323937,1323938,1352558,1352559,1352560,1352561,1352564,1352565,1352566,1352567,1352568,1352569,1258636,1359902,1352570,1352571,1326199,1297081,1283146,1364586,1268719,1268721,1268723,1268725,1268726,1268727,1268728,1268729,1268730,1329637,1310518,1310519,1310520,1310521,1310524,1310526,1310527,1310528,1310529,1310530,1310531,1310536,1310537,1310538,1310539,1310541,1310542,1310543,1310544,1310545,1310547,1310548,1310549,1310551,1310552,1310553,1310554,1310555,1310556,1310558,1330909,1310559,1310560,1310562,1310563,1310564,1310565,1310568,1310570,1310572,1310573,1310574,1310576,1310577,1310578,1345857,1297740,1297741,1297742,1297743,1297744,1297745,1297746,1297747,1297748,1297749,1297750,1297751,1297752,1304236,1304237,1304238,1304239,1304240,1304241,1266155,1445793,1436457,1436468,1436858,1436859,1436860,1436863,1436864,1436865,1436867,1436868,1436872,1436874,1436877,1436878,1436879,1436880,1436881,1436883,1436885,1436886,1436887,1436888,1436890,1455203,1455229,1455236,1455248,1493435,1493436,1493437,1493478,1493480,1493481,1493482,1493483,1493484,1493485,1493486,1493487,1493488,1493489,1493490,1493491,1493492,1493493,1493494,1493495,1493496,1493497,1493498,1486095,1436208,1445813,1446100,1446114,1446117,1446119,1436892,1493499,1493500,1493501,1493502,1493503,1493504,1493505,1493506,1493507,1493508,1493515,1493519,1493522,1493524,1446162,1446166,1446176,1446184,1436182,1445485,1445487,1446124,1446129,1455108,1455120,1445446,1445574,1445594,1445599,1445601,1445603,1445936,1493590,1493979,1455173,1455029,1446108,1493684,1493685,1493686,1493687,1493688,1493689,1493690,1489985,1489986,1488310,1415137,1446054,1412717,1493698,1493699,1493707,1493708,1493709,1493710,1493711,1493712,1493713,1493715,1455037,1455189,1455200,1455245,1437822,1437823,1437824,1437825,1437826,1437827,1445497,1445536,1445544,1445546,1445698,1491557,1488241,1488242,1488243,1488244,1488245,1488248,1488249,1488250,1488251,1488252,1488253,1488255,1488257,1488261,1488262,1488265,1488266,1488267,1488270,1488272,1488273,1488274,1437828,1437829,1446132,1446134,1488276,1488277,1488278,1488279,1488280,1474181,1484647,1484648,1484649,1484650,1484651,1484652,1484653,1484654,1406788,1406789,1406790,1406791,1406792,1406793,1406794,1406795,1406796,1406797,1406798,1406799,1406800,1406801,1406802,1406803,1406804,1406805,1406806,1406807,1455040,1474199,1474213,1455086,1455191,1455205,1455218,1483078,1483868,1483869,1483870,1455194,1455063,1406808,1406809,1406810,1406811,1406812,1406813,1406814,1406815,1406816,1406817,1406818,1406819,1406820,1406821,1406822,1406823,1406824,1406825,1406826,1406827,1406828,1406829,1406830,1406837,1406838,1406839,1406840,1406841,1406842,1406843,1406844,1406845,1406846,1406847,1406848,1406849,1406850,1493059,1493060,1493061,1493062,1493063,1493064,1493065,1493066,1493067,1493068,1493069,1493070,1493071,1493072,1493073,1493074,1493075,1493076,1493077,1493078,1493080,1493081,1493082,1493085,1493086,1493087,1493088,1493089,1493090,1493091,1493092,1493093,1493094,1493095,1493096,1493097,1455042,1455044,1483871,1483872,1483873,1483875,1483876,1483877,1483878,1483879,1483880,1483881,1483882,1483883,1483884,1483885,1483886,1483887,1483888,1483889,1483890,1483891,1483892,1483893,1483894,1486099,1406851,1406852,1406853,1493098,1493099,1493100,1493101,1493102,1493103,1493104,1493105,1493106,1493107,1493108,1493109,1493110,1493111,1493112,1493113,1493114,1493115,1493116,1493117,1493119,1493120,1493121,1493122,1493123,1493124,1493126,1493127,1493128,1493129,1493130,1493131,1493132,1493133,1493135,1493136,1493137,1493138,1493139,1436315,1482586,1482587,1482588,1482589,1482590,1482591,1482592,1482593,1482594,1482595,1482596,1482597,1482598,1482599,1482600,1482601,1482602,1406913,1493140,1493141,1493142,1455038,1484707,1484711,1411570,1411571,1411575,1411578,1411579,1411580,1411581,1411582,1411584,1493190,1494082,1446160,1446170,1446179,1494131,1494132,1494292,1494293,1494294,1494295,1494296,1473885,1474214,1136571,1436207,1489123,1489124,1489125,1489126,1489127,1489128,1489129,1489130,1489131,1489132,1489133,1489134,1489135,1489136,1489137,1489138,1489139,1489140,1489141,1489142,1489143,1489144,1489145,1489146,1489147,1489148,1489149,1489150,1489151,1489152,1489153,1489154,1489155,1436490,1446153,1445524,1455027,1447957,1447958,1447959,1447960,1447971,1447982,1447986,1447987,1447988,1447989,1447990,1447991,1447993,1447994,1447995,1447996,1447997,1447998,1447999,1448000,1436461,1492150,1455087,1455088,1463081,1463082,1463083,1463084,1463085,1463086,1463087,1463088,1463089,1463090,1489156,1445538,1446043,1446141,1446144,1482104,1448001,1448002,1448003,1448004,1448005,1448006,1448007,1448008,1448009,1448010,1448011,1448012,1448013,1448014,1448016,1448017,1448018,1448019,1463092,1463093,1463094,1455080,1455127,1421599,1421600,1493788,1494026,1494068,1446171,1446175,1499894,1499895,1428863,1428876,1446016,1486705,1445495,1473886,1451896,1451897,1451898,1451899,1455024,1455031,1455048,1455085,1455090,1498013,1498014,1498015,1498016,1498017,1498018,1498020,1498021,1498031,1498032,1498033,1488651,1488652,1498077,1498078,1498079,1498080,1498081,1498082,1498083,1498085,1498086,1445501,1445682,1446030,1488656,1488657,1488658,1488659,1488660,1488661,1488662,1488663,1488664,1488665,1488666,1488667,1488668,1488669,1488670,1488671,1488672,1488673,1488674,1488675,1488676,1488677,1488678,1488679,1488680,1494059,1414904,1489157,1489158,1489159,1489160,1489161,1489162,1489163,1489164,1489165,1489166,1489167,1489168,1489169,1489170,1466959,1466960,1466961,1498087,1498088,1498089,1498090,1498091,1498117,1498118,1498119,1498120,1498121,1498123,1498124,1498125,1498126,1498127,1498128,1427705,1499417,1499418,1474200,1489171,1489172,1489173,1489174,1489175,1489176,1489180,1489182,1489183,1489184,1489185,1489186,1489187,1489188,1489189,1489190,1489191,1489192,1489193,1489194,1489195,1489196,1489197,1489198,1489199,1489200,1489201,1489202,1489203,1489204,1489205,1489206,1489207,1489208,1489209,1489210,1489211,1489212,1489213,1489214,1489215,1489216,1498157,1498158,1498163,1498165,1498167,1498168,1498169,1498170,1455147,1500019,1436451,1489217,1489218,1489219,1489220,1489221,1489222,1489223,1489224,1489225,1489226,1489227,1489228,1489229,1489230,1489231,1489232,1489233,1489234,1489235,1489236,1489237,1489238,1489239,1489240,1489241,1489242,1489243,1489244,1489245,1489246,1489247,1489248,1489249,1489253,1489254,1489255,1489256,1489257,1498209,1498210,1498211,1498212,1498213,1498214,1498215,1498216,1498217,1498218,1498219,1498220,1498221,1498222,1498223,1498224,1498225,1498226,1445519,1488809,1488810,1488811,1488812,1488813,1488814,1488815,1488816,1497895,1497898,1497899,1455232,1455239,1488817,1488818,1488819,1488820,1488821,1488822,1488823,1488824,1488825,1488826,1488827,1488828,1488829,1488830,1488831,1488832,1488833,1488834,1488835,1488836,1488837,1488838,1488839,1488840,1488841,1488842,1488843,1488844,1488845,1488846,1488847,1488848,1488849,1488850,1488851,1488852,1488853,1488854,1488855,1488856,1488857,1488858,1489300,1489301,1489302,1489303,1489304,1489305,1489306,1489307,1489308,1489309,1489310,1489311,1489312,1489313,1489314,1489315,1489316,1489317,1489318,1489319,1489320,1489321,1489322,1489323,1489324,1489325,1489326,1489327,1489328,1489329,1489330,1489331,1489332,1489333,1489334,1489335,1489336,1498295,1498296,1498297,1498299,1455083,1455099,1455100,1488859,1488860,1488861,1488862,1488863,1488864,1488865,1488866,1488867,1488868,1488869,1488870,1488871,1488872,1488873,1488874,1488875,1488876,1488877,1488878,1488879,1488880,1488881,1488882,1488883,1488884,1488885,1488886,1488887,1488888,1488889,1488890,1488891,1488892,1488893,1488894,1488895,1488896,1488897,1488898,1488899,1488900,1488901,1493918,1494014,1494074,1445762,1445795,1435939,1435940,1435941,1435989,1435990,1435991,1435993,1435994,1435995,1435997,1489337,1489338,1489339,1489340,1489341,1489342,1489343,1489344,1489345,1489346,1489347,1489348,1489349,1489350,1489360,1489371,1489376,1489377,1489378,1489379,1489380,1489381,1438325,1438326,1438327,1438328,1438329,1497596,1497598,1497599,1497600,1497601,1497602,1497604,1497605,1497606,1497608,1497610,1497611,1497612,1497614,1497615,1497616,1497617,1497618,1497619,1497620,1498381,1498382,1488902,1488903,1488904,1488905,1488906,1488907,1488908,1488909,1488910,1488911,1488912,1488913,1488914,1488915,1488916,1488917,1488918,1488919,1488920,1488921,1488922,1488923,1488924,1436006,1436007,1436008,1436009,1436010,1436012,1436013,1436014,1436015,1436016,1436018,1489406,1489407,1489408,1489409,1489410,1489411,1489412,1489413,1489414,1489415,1489416,1489417,1489418,1489419,1489420,1489421,1489422,1489423,1489424,1489425,1489426,1489427,1489428,1489429,1489430,1489431,1489432,1489433,1489434,1489435,1489436,1489437,1489438,1436488,1497621,1497622,1497625,1497626,1497627,1497628,1498383,1498384,1498385,1498387,1498388,1498390,1498391,1498393,1498395,1498396,1498397,1498399,1498400,1498401,1498402,1498403,1498404,1498405,1498406,1498432,1498434,1498442,1498453,1498454,1498455,1498456,1498457,1498458,1498459,1498460,1498461,1498462,1498463,1498466,1498467,1498468,1498469,1498470,1498482,1498483,1498484,1498516,1498519,1488975,1488976,1488977,1488978,1488979,1488980,1488981,1488983,1488984,1488986,1436092,1436093,1436094,1436095,1436096,1436097,1436098,1445439,1498520,1498521,1498522,1498523,1498524,1498525,1498526,1498528,1498529,1498542,1498543,1498544,1498545,1498546,1498547,1498548,1488987,1488988,1488989,1488990,1488992,1488993,1488994,1488995,1488996,1488997,1488998,1489000,1489001,1489002,1489003,1489004,1489005,1489006,1489007,1489010,1489011,1489012,1489020,1489021,1489022,1489023,1489024,1489025,1427031,1436233,1436099,1436100,1436101,1436102,1436104,1497736,1446006,1446148,1489054,1489055,1489056,1489057,1489058,1489059,1489060,1489061,1489062,1489063,1489064,1489065,1445748,1445777,1491175,1489078,1489079,1489080,1489081,1489082,1489083,1489084,1489085,1489086,1489087,1489088,1489089,1489090,1489091,1489092,1489093,1489094,1489095,1489096,1489097,1489098,1489099,1489100,1489101,1489102,1489103,1489104,1489105,1489106,1489107,1489108,1489109,1489110,1489111,1497089,1497091,1497092,1497093,1411717,1455171,1461997,1436342,1437049,1437050,1455091,1455098,1455140,1451927,1451928,1445946,1445970,1455036,1455082,1455197,1493858,1494570,1497272,1497273,1497274,1497275,1497276,1497277,1462000,1462005,1462006,1462007,1462010,1462011,1462018,1462022,1462024,1462025,1462029,1462034,1445636,1445787,1445789,1445925,1445955,1445967,1446149,1445483,1445568,1480781,1480782,1480783,1480784,1480785,1480786,1445442,1480787,1480788,1480789,1480790,1480791,1480793,1480794,1480795,1480796,1480797,1480798,1480799,1480800,1480801,1480802,1480803,1480825,1480826,1480827,1480828,1480829,1497292,1497464,1497465,1497466,1462035,1462036,1462037,1445943,1445975,1445984,1446033,1446041,1446146,1493953,1455151,1480830,1480831,1480835,1474259,1497541,1497544,1497545,1497549,1497550,1497551,1497552,1497554,1411325,1411326,1411327,1480973,1480974,1480975,1480976,1480977,1480978,1480979,1480980,1497293,1497294,1497295,1497296,1497297,1497298,1497300,1497301,1497302,1497317,1497318,1497319,1497320,1497321,1497322,1497323,1497324,1497325,1497326,1497327,1455079,1455172,1455180,1480981,1480982,1480983,1480984,1480985,1480986,1480987,1480988,1480989,1480990,1480991,1480992,1480993,1480994,1480996,1480997,1480998,1480999,1481000,1481001,1496245,1455030,1445435,1445440,1445490,1445540,1445548,1446136,1496988,1496989,1496990,1496991,1496992,1496993,1496994,1496995,1496996,1496997,1496998,1496999,1497001,1497002,1497003,1497004,1497005,1497006,1497007,1497008,1497009,1497010,1497011,1497012,1497013,1497014,1497015,1497016,1497017,1497018,1497020,1497021,1497022,1497349,1497350,1497351,1497352,1497353,1497354,1497355,1497356,1497357,1497358,1497359,1497360,1497361,1497362,1497363,1497364,1497365,1497366,1497367,1497368,1497369,1497370,1497371,1497372,1497373,1497374,1497375,1497376,1497377,1497378,1497382,1497383,1497384,1497385,1497386,1491177,1481068,1481069,1481070,1481071,1481072,1481078,1481088,1481089,1481090,1481091,1481092,1481093,1481094,1436485,1467037,1497023,1497024,1497025,1497026,1497027,1497028,1497029,1497030,1497031,1497032,1497033,1497034,1497035,1497042,1497043,1497044,1497045,1497387,1497388,1497389,1497390,1497391,1497393,1497394,1497395,1497397,1497399,1497400,1497401,1497402,1486100,1474201,1474223,1481135,1440255,1486708,1486709,1445968,1496963,1496964,1496965,1496966,1496967,1496968,1496969,1496970,1496971,1496972,1496973,1496974,1496975,1496976,1496977,1496978,1496979,1496980,1496981,1496982,1496983,1496984,1496985,1496986,1496987,1455050,1455199,1455202,1481175,1481179,1481185,1481189,1481191,1481192,1481205,1481206,1481207,1481208,1481209,1481210,1481211,1481212,1481213,1481214,1481215,1481216,1481217,1481218,1481219,1481220,1481221,1481222,1481223,1481224,1481225,1481226,1481227,1481228,1481229,1481230,1481231,1497512,1497513,1497514,1497515,1497517,1497518,1497519,1497520,1497522,1497523,1497524,1497525,1497529,1497530,1445980,1488479,1497176,1497177,1497178,1497179,1497180,1497181,1497182,1497183,1497184,1497194,1497195,1497196,1497197,1455017,1455084,1495921,1495938,1495939,1495940,1495942,1495949,1495957,1493665,1493666,1480584,1480585,1481232,1481233,1481234,1481235,1481236,1481237,1481238,1481239,1481240,1481243,1481246,1481247,1481248,1481249,1481250,1481251,1491565,1491566,1491567,1491568,1495817,1495818,1495819,1495820,1495821,1495822,1495823,1495824,1495958,1495978,1495985,1483355,1483359,1483360,1483362,1483363,1483365,1483366,1483367,1481252,1481253,1481254,1497046,1497049,1497050,1497051,1497052,1497053,1497054,1497055,1497056,1497062,1497063,1496000,1496003,1496005,1496007,1497198,1497199,1497200,1497201,1497202,1497203,1497204,1497205,1497206,1497207,1497208,1497209,1497210,1497211,1497218,1497219,1497220,1497221,1497222,1497223,1497224,1497225,1483374,1480667,1480668,1436197,1436320,1497070,1497071,1497072,1497073,1497074,1497075,1497079,1497083,1497084,1497085,1497086,1497087,1497088,1497226,1497227,1497228,1497229,1497230,1497231,1497232,1497233,1497234,1497235,1497236,1497237,1497238,1497239,1497240,1497241,1497242,1497243,1497244,1497245,1497246,1497247,1497248,1497249,1497250,1497251,1436349,1428315,1436479,1455081,1455096,1455097,1455155,1654815,1479964,1426061,1426066,1426067,1426078,1426086,1426088,1426092,1426098,1455231,1455241,1654825,1447141,1447142,1447143,1447144,1447145,1447146,1447147,1447148,1447153,1447155,1447158,1447163,1447165,1447166,1447167,1447168,1447171,1485099,1485100,1485101,1485102,1485103,1485104,1485105,1485106,1485107,1485108,1654813,1426102,1654824,1654826,1447184,1447190,1447191,1447192,1447193,1447194,1447195,1447196,1447197,1447198,1447199,1447200,1447201,1447203,1447204,1447205,1447206,1447207,1447208,1447209,1447210,1447211,1447212,1447213,1447214,1447215,1447216,1447217,1447218,1447219,1436225,1654820,1447220,1447221,1447222,1447223,1447224,1447225,1447227,1447228,1447229,1447230,1447231,1447232,1447234,1447235,1447236,1447237,1447238,1406953,1406954,1406955,1406956,1654827,1654816,1446111,1446120,1654830,1447306,1654828,1654829,1446058,1473964,1473965,1473973,1455137,1654817,1654821,1445768,1445771,1445932,1447307,1447308,1447309,1447310,1447312,1447313,1447314,1447315,1447319,1447323,1447327,1447331,1447333,1447335,1447336,1447338,1447339,1447340,1447342,1447346,1447347,1447348,1447349,1447350,1447352,1447353,1447354,1447355,1447356,1447358,1447359,1447360,1447361,1447362,1447363,1447364,1455210,1475587,1475591,1473994,1473995,1474010,1654822,1474217,1482367,1428831,1428832,1475776,1475779,1475782,1475784,1475786,1475789,1475794,1475797,1475800,1475803,1475807,1446200,1446201,1473679,1654810,1654811,1475808,1475811,1475813,1475816,1475820,1475823,1475826,1475829,1475832,1475835,1475838,1475839,1475840,1475843,1475845,1475847,1475849,1475852,1475853,1475856,1475857,1475860,1475861,1445668,1493895,1493927,1493964,1445597,1654831,1474182,1654818,1654812,1445511,1445567,1476014,1476019,1476022,1476027,1476033,1476038,1476045,1476048,1476052,1476056,1451957,1455089,1493942,1484750,1484751,1484752,1484753,1484754,1485461,1485462,1485463,1485464,1485465,1485466,1485467,1485468,1485469,1485470,1485471,1485472,1485473,1485474,1485475,1485476,1485477,1485478,1485479,1485480,1485481,1485482,1485484,1485485,1485486,1455227,1484893,1484894,1484895,1484896,1484897,1484898,1479561,1479562,1479564,1479569,1479570,1479571,1479572,1479573,1479575,1479576,1479577,1455141,1455167,1455222,1445560,1445808,1431728,1431729,1431730,1431731,1431732,1431733,1445797,1654819,1654823,1445674,1446145,1455019,1446036,1474203,1484936,1484937,1455095,1455132,1470096,1470098,1470101,1470103,1470104,1470105,1470106,1470107,1446191,1445492,1425733,1491707,1491708,1491709,1491710,1491711,1491713,1491716,1491717,1491719,1491721,1491723,1491725,1491726,1491728,1491730,1491731,1491700,1491701,1491702,1491703,1491704,1491705,1436472,1445930,1445934,1445700,1480396,1480397,1480398,1480399,1480400,1421584,1421585,1421586,1421587,1494008,1494087,1426024,1426026,1426029,1426030,1426033,1426035,1426038,1426039,1426042,1426043,1426045,1426052,1426055,1426057,1426059,1494575,1447100,1447112,1447115,1447117,1447119,1447120,1447122,1447127,1447131,1447134,1447136,1447138,1447140,1470180,1470181,1470184,1470187,1470189,1470190,1470191,1470192,1470194,1470196,1470197,1470199,1470200,1470201,1474218,1485079,1485080,1485081,1485082,1485083,1485084,1485085,1485086,1485087,1485088,1486558,1486710,1486711,1528280,1528281,1528282,1528285,1528286,1528289,1528290,1528291,1528293,1528297,1528300,1528301,1540115,1540151,1528316,1528317,1528318,1528328,1528330,1528336,1528339,1528341,1531319,1502114,1574279,1527510,1528343,1528345,1528346,1528351,1528352,1528353,1528354,1540160,1621387,1621388,1621389,1559931,1559932,1559934,1559936,1540076,1525046,1525048,1525049,1626099,1622922,1622929,1622934,1622936,1622937,1622940,1622941,1622942,1622945,1622947,1622948,1622949,1531321,1560001,1560003,1518500,1518501,1518502,1518503,1518504,1518505,1518506,1518507,1518508,1518509,1518510,1518511,1518513,1518514,1518515,1518516,1518517,1518518,1518519,1518520,1518521,1518522,1518523,1518524,1557388,1530074,1530075,1530076,1403213,1624166,1557386,1624349,1624350,1624351,1624352,1624353,1624354,1560049,1560050,1560052,1560053,1560054,1560056,1560057,1560058,1560060,1560061,1560063,1560064,1560065,1560067,1560068,1560568,1518525,1518526,1518527,1518528,1518529,1518530,1518531,1518532,1518533,1518534,1518535,1518536,1518537,1518538,1574280,1624215,1624216,1624217,1624218,1624219,1624220,1624221,1624223,1623948,1624231,1624253,1137521,1540118,1540119,1540135,1624455,1624456,1624457,1624458,1560070,1560071,1560073,1560074,1560075,1560076,1560078,1560079,1560080,1560081,1560082,1560084,1560085,1560086,1560087,1560088,1560089,1560091,1560092,1560093,1560094,1560095,1560097,1560098,1560099,1560101,1560102,1560104,1560105,1560106,1560108,1560109,1560111,1560112,1560113,1560114,1560116,1560117,1560119,1560120,1560121,1560123,1500911,1525218,1586794,1586795,1586796,1586797,1624362,1624363,1624365,1624366,1624375,1624376,1624377,1624378,1624379,1624380,1624383,1624384,1624385,1624387,1624388,1624389,1624390,1624391,1624392,1624393,1624394,1624395,1624396,1624592,1624593,1624594,1560124,1560125,1560128,1560129,1560131,1560132,1560133,1560136,1560137,1560138,1560140,1560141,1560143,1560144,1560145,1560147,1560148,1560149,1560150,1560151,1560152,1624483,1624497,1624498,1624499,1624500,1624501,1539995,1540202,1587268,1587269,1587270,1587271,1587272,1587273,1587274,1587275,1587276,1587277,1587278,1587279,1587283,1587284,1587285,1587296,1587297,1587298,1587299,1587300,1536509,1536510,1536511,1536512,1536513,1536514,1536515,1540150,1540159,1625353,1625357,1625358,1625359,1625360,1625362,1625363,1625366,1625367,1625375,1625376,1625377,1625378,1625379,1625380,1625381,1621390,1621391,1621392,1621393,1621394,1621395,1621396,1621397,1621398,1533282,1560153,1560154,1560155,1560156,1560157,1560158,1560159,1560160,1560161,1560162,1560163,1540203,1626036,1626037,1626038,1626039,1626040,1559594,1560164,1560165,1560166,1560167,1560168,1560170,1560171,1560172,1560173,1560174,1560175,1560176,1560177,1560178,1560179,1560180,1560181,1560183,1560184,1560185,1560186,1560187,1560188,1560189,1560190,1560191,1560192,1560193,1560194,1560195,1560196,1560197,1560198,1560200,1560201,1560202,1560203,1560204,1560205,1560935,1560936,1560937,1560938,1560939,1560940,1560944,1560946,1560947,1560955,1525219,1525220,1605667,1538084,1624264,1560206,1560207,1560209,1560210,1560211,1560212,1560213,1560214,1560215,1560216,1560217,1560218,1560220,1560221,1560222,1560223,1560224,1560225,1524973,1525221,1525222,1525223,1525224,1506486,1506487,1506489,1506490,1506491,1506493,1506494,1506496,1506497,1592624,1624401,1559678,1559680,1559681,1559683,1559684,1559685,1559686,1559688,1559690,1559691,1559692,1559693,1559695,1559696,1559697,1560249,1540022,1506498,1506499,1506500,1506502,1506503,1506504,1506505,1506506,1506507,1506508,1506509,1506510,1506511,1506512,1506514,1624317,1540167,1624519,1624520,1624521,1624522,1624523,1624529,1624538,1624539,1624540,1624541,1624542,1624543,1624544,1559730,1559741,1559746,1560294,1560295,1560296,1560297,1560298,1560299,1560300,1560301,1560302,1560303,1560304,1560305,1560306,1560307,1560308,1560309,1560310,1560311,1560312,1560313,1560314,1605665,1500312,1624419,1624422,1624423,1624424,1624425,1624426,1624427,1624428,1624429,1624430,1624431,1624432,1624433,1624434,1624435,1624448,1624451,1624452,1624453,1624454,1540154,1625395,1625396,1625397,1625398,1625413,1625421,1574277,1136437,1578631,1583905,1583906,1583907,1583908,1583909,1583910,1583911,1583912,1506516,1532229,1532230,1532231,1532232,1532233,1540146,1624552,1624553,1624554,1624566,1624572,1624574,1624577,1624578,1624579,1624585,1557328,1557329,1557330,1557331,1557332,1557333,1557334,1557335,1557336,1626041,1626042,1626043,1626044,1540163,1540039,1540040,1540041,1540042,1540043,1540044,1540045,1540046,1540047,1540048,1540049,1506515,1540339,1540340,1540341,1540342,1538082,1540194,1540144,1540157,1625456,1622908,1622909,1622910,1622911,1622912,1622913,1501284,1501285,1626045,1626046,1626048,1626050,1626051,1626052,1626053,1626064,1626072,1626073,1626074,1626075,1626076,1626077,1626078,1626079,1626080,1626081,1626082,1626083,1626084,1626085,1626086,1626087,1626088,1626089,1626090,1626094,1624183,1624184,1624195,1518640,1604997,1604998,1629303,1629304,1533843,1585825,1585826,1585827,1585828,1585829,1519225,1519226,1519227,1519235,1531320,1574286,1540077,1518962,1535828,1535831,1539996,1540162,1627434,1535880,1607184,1626146,1627457,1627465,1627469,1613334,1613347,1519343,1519351,1519352,1519353,1519354,1519355,1519356,1519357,1519358,1519359,1519360,1519361,1519363,1519364,1519365,1519366,1519367,1519368,1519369,1519374,1519375,1519376,1519377,1519378,1519379,1519380,1519381,1519382,1519383,1519384,1519385,1519386,1519387,1519388,1539998,1510212,1540120,1613375,1613376,1613387,1613396,1519389,1519390,1519391,1519393,1519394,1519395,1519396,1519397,1519398,1519399,1519400,1519401,1519403,1519404,1519405,1519406,1519407,1519408,1519409,1519415,1519416,1519417,1519418,1519419,1519420,1519421,1519422,1519424,1519426,1519427,1519428,1519429,1519430,1519431,1519432,1519433,1519434,1519435,1520441,1520442,1520443,1520444,1520445,1520446,1520447,1520448,1520449,1574248,1574249,1574250,1574251,1574252,1574253,1574254,1574255,1574256,1585587,1626197,1626213,1626214,1627527,1607599,1613443,1613445,1519436,1519437,1519438,1519439,1519440,1519441,1519453,1520450,1520451,1520453,1536049,1536050,1536051,1536052,1536053,1536054,1536055,1536056,1536057,1536058,1536059,1536061,1536062,1536063,1536064,1536065,1536066,1536186,1536187,1536188,1536189,1536190,1536191,1536192,1536193,1536194,1536195,1536196,1574284,1627548,1627549,1627550,1627551,1627552,1627553,1627554,1627555,1627556,1627557,1627558,1613540,1613541,1615378,1615379,1520548,1536197,1536198,1536199,1536201,1536202,1536203,1536205,1536206,1536207,1536208,1536209,1536210,1536211,1615398,1615399,1615400,1615401,1615402,1615404,1615405,1615418,1615419,1615420,1615421,1615422,1519636,1519637,1540094,1540133,1540195,1540198,1557397,1557398,1557399,1500311,1540140,1574288,1517700,1517701,1517702,1517703,1517705,1517706,1517707,1517708,1517709,1517710,1517711,1517712,1519638,1519639,1519640,1519641,1519642,1519643,1519644,1519645,1519646,1519647,1519648,1519649,1519650,1519651,1519652,1519653,1519654,1519655,1519656,1519657,1519658,1519660,1519661,1519662,1519663,1519664,1519666,1519668,1519670,1519671,1519672,1519673,1519674,1519675,1519676,1519677,1519678,1519679,1519680,1519681,1519682,1519683,1520902,1520903,1520904,1520905,1520908,1520909,1560244,1573199,1430056,1532348,1621748,1519684,1519685,1519686,1519687,1519688,1519689,1519690,1519691,1519692,1519693,1519694,1519695,1519696,1519697,1519698,1519699,1519700,1519701,1519702,1519703,1519704,1519705,1519706,1519707,1519708,1519709,1519710,1519711,1519712,1519713,1519715,1519717,1519718,1519719,1520912,1520913,1520914,1520915,1520916,1520917,1520918,1520919,1520920,1520921,1520922,1520923,1520924,1520925,1520926,1500840,1500841,1500842,1500843,1500844,1624039,1532350,1532351,1532352,1532353,1532355,1532358,1532360,1532362,1532363,1532364,1532365,1532366,1532367,1532368,1532369,1532370,1532371,1532372,1532373,1532374,1532375,1532376,1532500,1532932,1533137,1533138,1533139,1533140,1533141,1533142,1533143,1533144,1533145,1533146,1533147,1519737,1519738,1519739,1519740,1519741,1519742,1519743,1519744,1519745,1519746,1519747,1519748,1519749,1519750,1519751,1519752,1519753,1519754,1519755,1519757,1519758,1519759,1519760,1519761,1519762,1519763,1519764,1519765,1519766,1519767,1519768,1519769,1519770,1520974,1520994,1504754,1574281,1533148,1533149,1533150,1533151,1533152,1533153,1533154,1533155,1533156,1533157,1533158,1533159,1533160,1533161,1533162,1533164,1533165,1533167,1533176,1533177,1533178,1533179,1533181,1519771,1519772,1519773,1519774,1519775,1519776,1519777,1519778,1519779,1519780,1519781,1519782,1519783,1519784,1519785,1519786,1519787,1519788,1519789,1519790,1519792,1519793,1519795,1519796,1519797,1519798,1519799,1519800,1519801,1519802,1519805,1519806,1519807,1519808,1519810,1519811,1519812,1519820,1519821,1519822,1519823,1521071,1521073,1521080,1521081,1521082,1521084,1521085,1521086,1521087,1521088,1521089,1521090,1521092,1521094,1521096,1521097,1521099,1521100,1521102,1521115,1521116,1521118,1521120,1521121,1521122,1521123,1521124,1627591,1519824,1519825,1519826,1519827,1519828,1519829,1519830,1519835,1519836,1519838,1519839,1519840,1519841,1519842,1519844,1519845,1519846,1519847,1519849,1519850,1519851,1519852,1519853,1519854,1519855,1519856,1519857,1519858,1519859,1519860,1519861,1519862,1519863,1519865,1519866,1519867,1519868,1519869,1519870,1519871,1520002,1520003,1520004,1521125,1521136,1521137,1521142,1540007,1626100,1626101,1626116,1626117,1626118,1626119,1626120,1626121,1506009,1629305,1629306,1629307,1520005,1520006,1520007,1520008,1520009,1520010,1520014,1520031,1520032,1520033,1520034,1520035,1520036,1520037,1520039,1520040,1520041,1520043,1520044,1520045,1520047,1520048,1520049,1520050,1520051,1535741,1537033,1586637,1586638,1586639,1586640,1586641,1586642,1586643,1586645,1586646,1586647,1586648,1586649,1586650,1586651,1586652,1586653,1586654,1586655,1586656,1586657,1586658,1586659,1586660,1586661,1586662,1586663,1586664,1586668,1540145,1540155,1519954,1519955,1519956,1519957,1519958,1519959,1519960,1519961,1519962,1519963,1519964,1506340,1540138,1540141,1529307,1529323,1529325,1529336,1529345,1529346,1529347,1529348,1529349,1529350,1519965,1519966,1519967,1519968,1519969,1519970,1519971,1519972,1536067,1586751,1586752,1586753,1529390,1529391,1529392,1529393,1529394,1529395,1529396,1529397,1529398,1529399,1529400,1529401,1529402,1529403,1529404,1529405,1528666,1528667,1528668,1528669,1529406,1529407,1529408,1529409,1529410,1529412,1529413,1529425,1529426,1529428,1529429,1529430,1529431,1529432,1529433,1529434,1529435,1529436,1529437,1529438,1519973,1519974,1519975,1519976,1519977,1519978,1519979,1519980,1519981,1519982,1519983,1519984,1519985,1519986,1519987,1519988,1519989,1519990,1519991,1519992,1519993,1519994,1536220,1536224,1536225,1536226,1536227,1536228,1536229,1536230,1536231,1536232,1536233,1536234,1536235,1536236,1536237,1536238,1536239,1536240,1536241,1536242,1536243,1536244,1536245,1536246,1536247,1536249,1536250,1536251,1536252,1536255,1528670,1528671,1528679,1528680,1528681,1528682,1528683,1528684,1528685,1528686,1528687,1528689,1528690,1528692,1528693,1528694,1528695,1528697,1528704,1528705,1528707,1528708,1528709,1529471,1529472,1529473,1529474,1529475,1529476,1529477,1529478,1529479,1529480,1529481,1529488,1529489,1529490,1529491,1529492,1529493,1529494,1529495,1529496,1529497,1529498,1529499,1529500,1529501,1529502,1585442,1585453,1585457,1585459,1585460,1519995,1519996,1519997,1519998,1536257,1536258,1536259,1536260,1536261,1536262,1536263,1536264,1536265,1536266,1536269,1536270,1536271,1536273,1536274,1536275,1536276,1536286,1536287,1536288,1536290,1536291,1536292,1536293,1536294,1536295,1536296,1536297,1536300,1536302,1536303,1536304,1536305,1536306,1536311,1536318,1536319,1536320,1536321,1536322,1536323,1536324,1536325,1536326,1536327,1528730,1528732,1528733,1528734,1528735,1528736,1528737,1528738,1528739,1528740,1528741,1528742,1528743,1528744,1528745,1528746,1528747,1528748,1528749,1528750,1529534,1529535,1529536,1529540,1585463,1585465,1585469,1585473,1585478,1585485,1585495,1585497,1585498,1585500,1585501,1520000,1536328,1536329,1536330,1536331,1536332,1536334,1536339,1536340,1536341,1536343,1536344,1536345,1536347,1536348,1536349,1536350,1536351,1536361,1536364,1536365,1536366,1536367,1536372,1536373,1536374,1536375,1518168,1540081,1540134,1540147,1540164,1540165,1557385,1528760,1528769,1528770,1528771,1528772,1528773,1528774,1528775,1528776,1528777,1528778,1528779,1528780,1528781,1528782,1528783,1528784,1528785,1528786,1528787,1528788,1528789,1528790,1528796,1528797,1528798,1528799,1585506,1585517,1585518,1585519,1585520,1585522,1585524,1585526,1585533,1585539,1509480,1586377,1586378,1586379,1586380,1586381,1586382,1528800,1528802,1528805,1528821,1528822,1528823,1528825,1528826,1528827,1528828,1528829,1528830,1528831,1528832,1528833,1528834,1528835,1528836,1528837,1528838,1528839,1528840,1528841,1528844,1528845,1528846,1528847,1528848,1529617,1529631,1529632,1585550,1585552,1585554,1585556,1585559,1585560,1585565,1585567,1585568,1585569,1585570,1585571,1536442,1586383,1586384,1586385,1586386,1586411,1587085,1587118,1587119,1587120,1587121,1587122,1528849,1528850,1528907,1528908,1528909,1528910,1528911,1528912,1528913,1529633,1529634,1529635,1529636,1529653,1529654,1529655,1529656,1529657,1529658,1529659,1529660,1529661,1529662,1529663,1529664,1529665,1529667,1529668,1529671,1529672,1529673,1529674,1585583,1585584,1585585,1510338,1510339,1510340,1510341,1510342,1510343,1510344,1510345,1510346,1510347,1510348,1510349,1524968,1586444,1587123,1587125,1587126,1587128,1587129,1587136,1587165,1587166,1587174,1587177,1587178,1528914,1528915,1528916,1528917,1528918,1528919,1528920,1528921,1528922,1528923,1528924,1528925,1528926,1528927,1528928,1528929,1528936,1528937,1528938,1529689,1529691,1529692,1529693,1529694,1529695,1529696,1529697,1529699,1529700,1529701,1592583,1500499,1500509,1500512,1500513,1500518,1500519,1500521,1500522,1500523,1587213,1587214,1587215,1587217,1587218,1528977,1528978,1528979,1528980,1528981,1528982,1528983,1528984,1528985,1528986,1528987,1528988,1528989,1528990,1528991,1528992,1528993,1528994,1500529,1500530,1500531,1500532,1500533,1500534,1500535,1573198,1586505,1586532,1529027,1529031,1529032,1529033,1529034,1529035,1529036,1529037,1529038,1529039,1529040,1529041,1529042,1574283,1586538,1586539,1586541,1529069,1529070,1529071,1529072,1529073,1529074,1529098,1529158,1529159,1529160,1529189,1529190,1519872,1519873,1519874,1519875,1519876,1519877,1519878,1519879,1519880,1519881,1519882,1519883,1519884,1519898,1519899,1519900,1519901,1519902,1519903,1519904,1519905,1519906,1519907,1519908,1519909,1519910,1519911,1505120,1505121,1505122,1505123,1505124,1505125,1505126,1505127,1505128,1505129,1505130,1505131,1505132,1505133,978635,1529196,1529197,1529198,1529199,1529200,1529201,1529202,1529208,1529209,1529210,1529211,1529212,1529213,1519912,1519913,1519914,1519915,1519916,1519917,1519918,1519919,1519920,1519921,1519922,1519923,1519924,1519925,1519926,1519927,1519928,1519929,1519930,1519931,1519932,1519933,1519934,1519935,1519936,1519937,1519938,1519939,1519940,1519941,1519942,1519943,1519944,1519945,1519946,1519947,1519948,1519949,1519950,1519951,1519952,1519953,1540142,1540143,1611651,1611652,1611653,1612315,1612316,1612317,1612318,1612321,1612322,1612323,1612324,1137512,1612344,1612345,1612347,1612348,1612349,1612351,1612352,1612353,1612354,1612355,1612356,1612357,1612358,1612359,1612360,1612361,1612362,1612363,1612364,1612365,1612366,1612367,1612368,1612369,1612370,1612371,1540149,1507354,1507355,1507356,1559474,1559493,1559502,1559503,1559504,1591659,1591660,1591661,1510197,1510262,1612387,1612388,1612389,1612390,1612391,1507357,1507358,1507382,1507383,1507384,1507385,1507389,1507390,1507391,1507392,1507393,1507394,1507395,1507396,1507397,1507398,1507399,1507400,1508039,1508040,1508041,1508042,1508043,1508044,1508045,1508046,1508047,1508048,1508049,1559507,1559509,1559512,1559645,1559682,1559694,1559707,1559807,1559812,1540152,1525192,1502109,1611816,1611820,1611821,1540201,1507401,1507402,1507403,1507404,1507415,1507416,1507417,1507418,1507419,1508050,1508051,1508052,1508053,1508054,1508056,1508057,1508058,1508059,1508060,1508061,1508062,1508063,1508064,1508065,1508066,1508067,1508068,1508069,1508071,1508072,1508073,1508074,1508075,1508076,1559820,1559823,1559827,1559840,1559871,1559880,1559888,1559897,1559907,1559920,1559927,1559933,1559938,1559941,1559944,1559946,1559953,1559956,1559964,1559969,1559980,1559985,1559987,1559993,1501330,1501331,1501332,1501333,1501334,1501335,1501336,1501337,1501338,1501339,1501340,1501341,1501342,1501343,1501344,1501345,1501346,1501347,1501348,1501349,1501350,1501351,1501352,1501353,1501354,1501355,1501356,1501357,1501358,1501359,1501360,1501361,1501362,1501363,1501364,1501365,1501366,1501367,1501368,1501369,1501370,1501371,1501372,1501373,1502576,1537035,1539997,1611924,1611930,1611932,1611933,1611934,1611935,1508134,1508135,1508136,1508137,1508138,1508139,1508140,1508141,1508146,1508147,1508148,1508149,1508150,1508151,1508152,1508153,1508154,1508155,1508156,1508159,1508160,1508161,1508162,1501374,1501375,1501376,1501377,1501378,1501379,1501380,1501381,1501382,1501383,1501384,1501385,1501386,1501387,1501388,1501389,1501390,1501391,1501392,1501393,1501394,1501395,1501396,1501397,1501398,1501399,1501400,1501401,1501402,1501403,1501404,1502605,1529330,1611942,1611943,1611972,1611973,1506822,1506823,1508163,1508164,1508165,1508166,1508167,1508179,1508182,1508183,1508184,1508190,1508193,1508194,1508196,1508197,1508198,1508199,1560021,1560024,1560036,1560051,1560083,1560100,1560110,1560115,1560118,1560122,1502639,1502645,1502646,1502647,1502649,1502653,1502654,1502655,1529719,1529720,1611348,1611349,1611350,1611351,1611352,1611353,1611354,1611355,1508226,1508243,1560146,1526076,1607483,1607488,1540136,1508261,1508262,1508263,1508265,1508266,1508268,1508269,1508270,1508271,1508273,1537037,1538085,1502136,1502137,1502138,1502139,1611373,1611374,1611394,1611395,1611396,1611397,1507549,1507551,1507552,1507554,1508293,1508294,1508296,1508297,1508298,1508299,1508308,1539366,1539367,1539368,1539369,1539370,1539371,1539372,1539373,1539374,1539375,1539376,1539377,1539378,1539379,1539380,1501558,1501559,1501560,1501561,1501562,1501563,1501564,1501565,1502150,1502151,1502153,1502154,1502155,1502156,1502157,1502158,1502159,1502160,1502161,1502162,1502163,1502164,1502166,1502167,1502168,1502169,1502170,1502171,1502172,1502173,1502174,1502175,1502176,1502177,1502178,1502179,1502180,1502182,1502183,1502184,1502185,1502186,1502187,1502188,1502189,1502190,1611414,1611416,1518454,1611875,1540139,1507557,1507558,1507559,1507560,1507561,1507562,1507563,1507564,1507565,1507566,1507567,1507580,1507581,1507582,1507592,1507593,1507594,1507595,1507596,1540137,1501576,1501577,1501578,1501579,1501580,1501581,1501582,1501583,1501584,1501585,1501586,1501587,1501588,1501589,1501590,1501591,1501592,1501593,1501594,1501595,1501596,1501597,1501598,1501599,1502191,1502192,1502193,1502194,1502195,1502197,1502198,1502199,1502200,1502201,1502202,1502203,1502204,1502205,1502206,1502207,1502208,1502209,1502210,1502211,1502212,1502213,1502214,1502215,1502217,1502218,1502219,1502220,1502221,1502222,1502223,1502224,1502225,1502226,1502227,1502228,1502229,1502902,1502903,1502904,1502905,1502906,1502907,1502908,1502909,1502910,1502911,1502912,1502913,1502914,1502915,1611199,1611200,1611201,1611202,1611203,1611204,1611205,1611206,1611207,1611208,1611424,1611425,1611426,1611427,1611428,1611429,1611430,1611431,1611432,1611433,1611434,1611435,1611436,1611437,1611438,1611439,1611440,1612142,1612143,1612144,1612145,1612146,1612147,1612149,1612150,1612151,1612152,1612153,1612154,1612155,1612156,1507601,1507602,1507603,1507621,1507622,1507623,1507624,1507625,1507631,1507633,1507646,1507647,1507648,1507649,1507650,1507652,1559289,1559290,1559293,1559294,1574278,1527414,1527415,1527416,1533281,1611444,1611445,1611446,1611447,1611448,1574287,1612157,1507654,1507655,1507659,1507661,1507664,1507665,1507666,1507667,1507669,1507670,1507672,1507673,1507675,1507676,1507677,1507688,1559299,1559302,1559303,1559304,1559305,1559306,1559307,1559308,1559313,1559315,1559316,1559317,1559318,1559319,1559321,1559322,1559323,1559324,1559325,1559326,1559327,1559331,1559333,1501668,1501669,1501670,1501671,1501672,1501673,1501674,1502287,1502288,1502289,1502290,1502291,1502292,1502307,1502308,1502309,1611292,1611293,1611294,1611295,1612158,1612159,1612160,1612161,1612162,1612163,1612164,1612165,1612166,1612167,1612168,1612169,1612170,1612171,1612172,1612173,1612174,1612175,1612176,1612177,1612178,1612179,1612180,1612181,1612182,1612183,1612184,1612185,1612186,1612187,1612188,1612189,1612190,1612191,1612192,1612193,1612194,1612195,1612196,1612197,1612198,1612199,1612200,1612201,1507145,1507146,1507147,1507148,1507149,1507150,1507151,1507152,1507153,1507154,1507155,1507156,1559337,1559340,1559344,1559349,1559350,1559351,1559352,1559353,1559356,1502336,1502337,1502338,1502339,1502340,1502341,1502342,1502343,1502344,1502345,1502346,1502347,1502348,1502349,1502350,1502351,1540073,1611300,1611304,1611305,1611306,1611327,1611328,1611550,1611551,1611552,1611553,1611554,1611555,1611556,1611557,1611559,1611560,1612202,1612203,1612204,1612205,1612206,1612207,1612208,1612209,1612210,1612211,1612212,1612213,1612214,1612215,1612216,1612217,1612218,1612220,1612221,1612222,1612223,1612224,1612225,1612226,1612227,1612228,1612229,1612230,1612231,1612232,1507157,1507158,1507159,1507160,1507161,1507162,1507163,1507164,1507165,1507166,1507167,1507184,1507185,1507186,1507187,1507188,1507189,1507190,1507191,1507192,1507193,1507194,1507195,1507196,1559360,1559361,1559364,1559365,1559366,1559367,1559368,1559369,1559371,1559372,1559375,1559377,1559378,1559386,1559387,1559389,1559390,1559392,1559393,1559396,1559398,1559401,1559402,1607180,1607557,1501745,1501746,1501747,1501748,1501749,1501750,1501751,1501752,1501753,1501754,1501755,1501756,1501757,1501758,1501759,1501760,1501761,1501762,1501763,1501764,1501765,1501766,1501767,1501768,1501769,1501770,1501771,1501772,1501773,1501774,1501775,1502378,1502410,1503069,1503070,1503071,1503072,1503073,1503076,1503077,1503078,1503079,1503080,1503081,1503082,1503083,1503084,1503085,1503086,1503087,1503088,1503089,1503090,1503091,1503092,1503093,1503094,1503095,1503096,1503097,1503098,1503099,1503100,1503101,1503102,1503103,1503104,1540074,1540079,1540121,1540200,1611564,1611565,1611592,1611626,1612233,1612234,1612235,1612236,1612237,1612238,1612239,1612240,1612241,1612242,1612243,1612244,1612245,1612246,1612247,1612248,1612249,1612250,1612251,1612252,1612253,1612254,1612255,1612256,1612257,1612258,1612262,1612263,1612265,1612266,1612267,1612268,1612269,1507197,1507198,1507199,1507200,1507201,1507202,1507203,1507204,1507205,1507206,1507207,1507208,1507209,1507210,1507211,1507212,1507213,1507214,1507215,1507216,1507217,1507218,1507219,1507220,1507221,1507222,1507837,1507855,1559405,1559406,1559413,1559415,1559437,1559443,1501776,1501777,1501778,1501780,1501781,1501782,1501783,1501784,1501785,1501786,1501787,1501788,1501789,1501790,1501791,1503126,1503127,1503128,1503129,1503130,1503131,1503132,1503134,1503135,1503136,1503137,1503139,1503140,1503141,1503142,1503143,1537896,1611633,1611634,1611645,1611647,1611648,1611649,1611650,1538083,1612270,1612271,1612272,1612273,1612274,1612275,1612276,1612277,1612278,1612279,1612280,1612281,1612282,1612283,1612284,1612285,1612288,1612289,1612290,1612291,1612292,1612293,1612294,1612295,1612296,1612297,1612298,1612299,1612300,1612301,1612302,1612304,1612305,1612306,1612307,1612308,1612309,1612310,1612311,1612312,1612313,1612314,1612831,1612832,1507856,1507857,1507858,1507859,1559452,1559454,1559458,1559459,1559460,1559463,1559464,1559466,1559467,1559468,1559469,1559470,1559471,1559473,1501818,1501819,1726625,1726626,1726627,1726628,1726629,1726632,1726633,1726634,1656331,1711624,1711633,1664923,1721522,1662007,1726410,1307755,1663900,1720938,1720939,1716093,1716095,1716096,1716097,1716098,1716099,1716108,1656519,1656520,1714612,1714613,1714614,1726731,1643839,1643846,1643848,1643849,1643850,1643851,1643853,1643857,1643858,1643859,1643861,1643862,1643865,1643866,1720394,1721856,1721858,1726463,1656187,1711617,1643868,1643870,1643871,1643875,1643880,1718926,1720992,1725533,1725534,1725535,1725536,1725538,1725539,1725540,1725541,1725542,1725545,1725546,1725547,1725548,1711615,1726834,1726835,1726836,1726837,1721014,1629892,1711637,1630094,1726848,1726849,1726850,1726851,1660106,1641883,1711661,1716175,1642854,1654832,1654833,1654834,1654835,1726896,1662008,1721124,1721125,1721126,1721127,1721129,1654836,1654837,1654838,1654839,1654840,1654841,1654842,1654843,1654845,1654846,1654847,1654848,1654849,1654851,1654852,1654853,1654854,1654855,1654856,1654857,1654858,1654859,1654860,1654861,1654863,1654864,1654865,1654867,1654868,1654869,1654870,1654871,1654872,1654873,1726918,1726920,1726921,1726922,1726923,1726924,1726925,1726926,1720517,1721143,1721144,1711009,1711041,1723375,1638191,1638210,1638214,1638218,1726509,1726515,1726516,1726524,1726525,1654874,1654875,1654876,1654877,1654878,1654879,1654881,1654882,1654883,1654884,1654885,1654886,1654887,1654888,1654889,1654890,1654891,1654893,1654894,1654895,1654896,1654897,1654898,1654900,1654902,1654903,1654904,1654905,1654906,1654907,1654909,1711636,1718965,1638230,1638232,1638235,1638236,1638237,1638239,1638240,1654932,1638901,1638915,1638923,1711202,1711221,1724207,1721092,1721093,1721094,1721095,1721096,1721097,1721098,1721099,1721100,1721101,1721103,1721104,1721105,1721109,1721111,1721113,1721114,1721115,1721116,1721117,1721119,1721121,1721122,1721123,1711063,1711090,1721265,1721266,1642720,1727124,1727131,1727139,1708278,1708279,1708281,1708286,1708291,1708292,1708293,1708294,1708295,1708296,1708297,1708298,1708299,1708300,1708301,1708302,1708303,1708304,1708305,1708306,1708307,1655174,1655175,1655176,1655177,1655178,1655179,1655180,1655181,1655182,1655183,1655184,1655185,1655186,1655187,1655189,1655191,1727175,1662338,1662339,1711640,1724206,1655192,1655193,1655212,1655213,1655214,1655215,1655216,1655218,1655219,1655220,1655221,1655222,1655223,1655224,1655225,1655226,1655227,1655228,1655229,1655230,1655231,1655236,1655240,1660401,1656139,1649543,1649544,1649545,1649546,1649570,1649572,1641422,1642721,1656327,1655268,1655282,1655283,1711130,1669257,1669258,1669259,1669260,1669261,1669262,1669263,1655357,1655358,1655359,1655360,1726612,1726614,1726615,1726616,1726617,1726618,1726619,1726620,1726621,1726622,1726623,1726624,1639938,1639939,1639940,1639943,1639944,1639954,1639958,1639960,1641005,1641006,1641008,1641010,1630567,1649571,1669283,1669284,1716018,1716028,1639963,1639965,1639966,1639967,1639968,1639969,1639970,1639971,1639977,1639978,1639979,1639980,1639981,1639982,1639983,1639984,1639985,1639986,1639987,1639996,1639997,1656137,1702947,1702948,1702949,1702950,1702951,1702952,1702961,1702962,1702963,1702964,1702965,1702966,1702967,1702968,1630098,1640037,1640038,1640040,1640041,1640042,1640043,1640044,1640045,1702969,1640052,1640053,1640054,1640055,1640056,1640058,1640059,1640067,1640068,1640069,1640070,1640071,1640072,1640073,1640074,1640075,1640076,1640077,1640078,1640079,1640080,1640081,1640082,1640083,1640084,1640085,1640086,1640087,1640088,1640090,1640098,1640109,1640110,1640111,1640112,1640113,1640249,1640250,1640251,1640271,1640272,1711157,1633009,1633010,1633011,1633012,1633013,1633014,1633015,1633016,1633017,1633018,1633019,1633020,1640275,1640276,1640280,1640281,1640289,1640290,1640291,1640292,1640293,1640294,1640297,1640298,1640303,1640304,1640305,1640306,1640307,1640308,1669060,1669061,1703142,1715487,1640335,1640336,1640337,1640338,1640341,1640342,1640343,1640347,1640348,1640350,1640354,1313350,1703200,1703201,1703202,1703203,1703204,1703205,1703206,1703207,1703208,1703209,1703210,1703212,1703213,1703214,1703215,1703216,1654326,1640372,1640377,1640380,1640392,1640395,1640396,1640397,1640398,1640399,1640403,1640404,1640405,1640408,1640409,1640410,1640411,1640412,1640413,1640414,1640415,1640417,1640418,1640419,1640420,1640421,1640422,1640423,1640426,1640427,1640428,1640429,1640430,1640434,1640435,1656512,1656514,1656515,1703249,1703252,1630293,1656136,1719207,1639683,1639684,1639685,1639686,1639687,1639688,1639689,1639690,1639691,1639692,1639693,1639694,1639695,1640447,1640448,1640449,1640450,1640451,1640452,1640453,1640454,1640472,1640473,1640475,1640476,1640477,1640479,1640480,1640483,1640486,1640487,1640488,1640489,1640490,1640491,1640492,1640493,1640494,1640495,1640497,1640498,1639696,1639697,1640499,1640500,1640501,1640502,1640503,1640504,1640505,1640506,1640507,1640508,1640509,1640510,1640511,1640512,1640513,1640514,1640515,1640516,1640517,1640518,1640519,1640520,1640521,1640565,1640566,1640567,1640568,1640569,1640570,1640571,1640582,1640583,1640584,1640586,1640587,1640588,1640589,1640590,1640594,1640595,1640596,1640597,1640598,1724205,1721700,1721709,1710999,1715626,1715627,1715628,1715629,1715630,1715631,1715632,1715633,1715634,1715635,1715636,1715637,1715650,1719209,1719213,1721845,1721846,1721855,1640599,1640600,1640601,1640604,1640605,1640606,1640607,1640608,1640609,1640610,1640611,1640612,1640613,1640615,1640616,1640619,1640620,1640621,1640622,1725220,1725221,1725222,1721721,1721722,1721723,1721724,1721726,1721728,1721729,1721731,1721857,1721859,1711659,1715750,1715761,1660402,1640646,1640648,1640650,1640652,1640654,1640705,1640706,1640707,1640708,1640709,1728089,1728090,1728091,1728092,1639793,1639794,1639795,1640801,1640802,1640806,1640808,1711621,1711652,1711653,1661658,1715103,1715105,1715106,1715107,1715108,1715109,1639819,1639820,1639821,1639822,1639823,1639824,1639827,1639831,1640871,1640872,1640873,1640875,1640876,1640878,1640905,1710493,1711067,1711092,1702826,1630629,1715925,1715942,1639848,1639849,1640997,1640998,1640999,1711651,1714317,1714318,1714524,1714525,1714526,1714527,1226574,1644843,1646498,1646499,1646500,1646501,1646502,1646503,1646504,1646505,1646506,1646507,1646508,1646509,1646510,1646511,1646512,1646513,1646514,1646515,1646516,1646517,1646518,1646519,1646520,1646521,1710755,1711648,1711657,1711660,1630173,1644872,1644873,1644874,1644875,1644876,1644888,1644889,1644890,1644891,1644892,1644893,1646528,1646529,1646530,1646531,1646532,1646533,1646534,1646535,1646536,1646537,1646538,1646539,1646540,1646541,1646542,1646543,1646544,1646545,1646546,1646548,1646549,1646550,1646551,1646552,1646553,1646554,1646555,1646556,1646557,1646558,1646559,1646560,1646562,1646563,1646565,1646566,1711046,1656337,1664402,1664403,1664404,1650603,1650604,1650605,1650606,1650607,1650608,1650609,1650610,1650611,1644903,1644904,1644905,1644914,1714202,1714203,1649573,1313118,1724634,1644957,1644958,1644959,1644962,1643572,1669265,1669266,1669267,1669268,1669269,1643573,1645010,1645011,1645012,1645013,1645014,1645015,1645016,1645018,1645019,1645020,1645021,1645022,1645024,1645025,1645026,1645027,1645028,1645029,1645030,1648998,1711614,1660044,1660045,1660046,1660047,1660048,1660049,1711655,1654760,1654761,1654762,1654770,1654771,1654772,1654773,1654774,1654775,1654776,1654777,1654778,1654779,1654780,1654781,1654782,1654783,1654784,1654785,1655194,1655195,1655196,1655197,1655198,1655199,1655204,1655205,1655206,1655207,1645031,1645032,1645033,1645035,1645036,1645048,1645049,1645050,1645051,1645052,1645053,1645055,1645056,1645057,1645058,1645059,1645060,1645061,1645063,1645064,1645065,1645066,1645068,1645069,1645070,1645072,1645073,1645074,1645075,1645076,1645077,1645078,1724203,1724204,1708610,1708611,1708612,1708613,1708614,1708615,1655208,1655209,1655210,1638910,1638912,1638913,1729928,1729930,1645079,1645081,1645082,1645083,1645085,1645086,1645087,1645088,1645089,1645090,1645091,1645092,1645093,1645094,1645095,1645096,1645097,1645098,1645099,1645100,1645101,1645102,1645103,1645104,1645105,1645106,1645107,1645108,1645109,1645110,1645111,1645112,1645113,1645114,1645115,1645116,1645117,1645118,1641918,1645119,1645129,1664924,1664925,1664926,1664927,1664928,1638914,1711635,1711644,1731978,1664590,1645189,1645190,1645191,1645192,1645193,1664929,1664930,1664931,1664932,1664933,1664934,1664935,1664936,1664937,1664938,1649581,1664408,1631472,1631473,1631474,1631475,1631476,1631477,1631478,1711048,1711140,1711143,1641729,1641730,1641731,1641732,1641733,1641734,1641735,1641736,1641737,1641738,1641739,1664592,1664595,1664596,1664597,1664600,1664601,1664603,1664604,1664606,1731046,1670309,1670311,1670313,1670319,1670322,1670323,1670326,1670330,1670331,1670337,1670344,1670345,1711189,1711274,1670348,1670349,1670350,1670351,1670352,1731708,1731709,1731710,1731699,1731700,1731701,1731702,1731703,1731704,1731705,1731706,1731707,1731977,1731982,1731983,1731985,1714491,1714492,1714501,1714507,1714516,1714517,1714519,1649936,1649937,1649938,1645452,1733925,1733926,1733927,1733928,1733929,1733930,1733931,1733932,1733933,1733934,1733936,1731979,1665492,1665496,1711647,1656342,1733460,1710491,1665511,1665512,1665613,1665614,1718902,1719210,1734016,1734017,1734018,1734019,1734020,1734021,1734022,1734023,1734024,1734025,1734026,1734027,1734028,1734029,1734030,1734031,1734032,1711613,1718933,1649062,1710656,1665513,1665519,1665520,1665521,1665522,1665523,1665524,1665525,1665526,1665527,1665528,1665529,1665530,1665533,1665534,1665535,1665634,1665635,1665644,1665647,1731976,1731980,1731987,1664380,1664381,1664382,1641271,1711641,1733504,1733534,1733535,1734033,1734034,1734035,1734036,1734037,1734038,1734039,1734040,1734041,1734042,1734043,1734044,1734045,1734046,1734047,1734048,1734049,1734050,1734051,1734052,1734053,1734054,1734055,1734056,1734057,1734058,1734059,1642856,1665536,1665537,1665538,1665539,1665540,1665541,1665542,1665543,1732671,1732674,1631580,1711142,1734060,1734061,1734062,1734063,1734064,1734065,1734066,1734067,1734068,1734069,1734070,1734072,1734074,1734075,1734076,1734077,1734078,1734079,1734080,1734081,1734082,1734083,1734084,1734085,1734086,1734087,1734088,1734089,1734090,1734091,1734092,1734093,1734094,1734095,1734096,1734097,1734098,1734099,1734100,1654478,1654489,1654507,1654508,1654509,1654510,1654511,1654512,1654513,1654514,1654515,1654516,1654517,1654518,1654519,1734101,1734102,1734103,1734104,1734105,1734106,1734107,1734108,1734109,1734110,1734111,1734113,1734114,1734115,1734116,1734117,1734118,1734119,1734120,1734121,1734122,1734123,1734125,1734126,1734127,1734128,1734129,1734130,1734131,1734132,1734133,1734134,1734135,1734136,1734138,1734139,1734140,1734141,1734151,1734152,1732680,1732690,1313240,1313521,1654520,1654521,1654524,1654525,1654526,1654527,1654528,1654530,1654531,1724994,1724996,1732691,1732709,1729927,1729929,1729975,1654613,1654644,1654645,1733663,1733680,1711634,1711645,1725005,1725006,1725011,1725012,1725025,1725029,1725030,1664519,1664542,1664549,1664554,1664556,1664557,1710758,1711275,1711276,1711277,1711278,1711279,1711280,1711281,1654650,1654684,1654685,1654686,1654687,1654688,1654689,1654690,1654691,1731988,1731989,1725031,1725033,1725036,1725037,1725041,1725042,1725043,1664568,1664577,1664578,1664581,1664582,1664583,1664584,1664586,1664587,1711061,1665132,1665133,1665134,1665136,1711618,1711642,1654692,1654693,1654786,1654787,1654788,1654789,1654790,1654791,1654792,1654793,1654794,1654795,1654796,1654801,1654802,1654803,1654804,1654805,1654806,1654807,1654808,1732382,1733753,1733754,1733755,1733756,1725044,1308463,1665172,1724200,1656346,1666552,1666553,1666554,1711622,1711623,1733757,1733758,1733759,1733771,1734193,1726225,1650542,1650543,1711070,1711650,1711658,1642230,1711639,1656125,1656126,1656127,1656128,1656129,1656130,1656131,1656132,1656133,1656134,1656135,1711188,1711643,1731984,1711654,1724351,1668904,1668905,1668906,1668907,1668908,1668909,1668910,1732712,1732713,1313473,1313296,1313472,1313302,1312038,1313349,1316282,1312037,1316404,1717841,1313298,1313288,1313235,1717845,1313097,1313470,1313484,1313673,1313501,1313227,1313238,1311947,1313133,1313291,1311951,1717857,1313286,1313184,1313621,1313084,1313185,1313607,1313295,1313195,1313096,1313089,1719208,1719212,1719214,1719215,1724201,1733398,1733399,1733400,1733401,1733402,1733403,1733404,1733837,1733838,1733855,1733856,1733857,1733858,1630572,1734764,1734765,1734766,1734767,1665332,1630634,1710545,1714766,1724395,1724396,1724397,1724398,1724399,1724400,1724401,1724403,1724404,1311996,1311906,1313280,1313307,1313309,1313283,1313246,1312135,1313226,1719211,1711619,1711620,1657233,1733859,1733860,1711069,1734167,1665369,1665374,1665384,1665421,1665422,1665423,1665424,1665432,1731975,1732718,1732719,1732723,1732724,1732726,1732727,1732729,1732730,1711186,1731986,1733903,1733918,1733919,1733920,1733921,1733922,1733923,1733924,1638924,1665433,1665442,1665443,1665444,1665445,1665446,1665448,1665449,1665453,1665454,1665457,1665461,1665462,1665472,1801655,1747343,1747344,1747345,1747346,1747347,1747348,1747349,1747350,1747351,1747352,1781327,1750126,1801771,1801772,1801773,1801774,1801775,1801776,1801777,1801778,1801781,1801782,1737987,1763376,1763378,1786505,1782746,1749091,1749092,1750288,1750293,1750294,1750295,1750296,1750298,1750299,1750300,1750301,1746063,1746064,1746065,1746066,1746067,1746068,1746069,1746070,1746071,1746072,1746073,1746074,1746075,1746076,1746077,1746078,1746079,1746080,1746081,1746082,1746084,1746085,1746086,1746087,1746088,1307450,1788495,1814013,1814014,1814017,1744845,1744847,1744849,1744857,1755372,1797331,1797348,1755394,1746089,1746090,1746091,1746092,1746093,1746094,1746095,1746096,1746097,1746098,1746099,1746100,1746101,1746102,1746103,1746104,1746105,1746106,1746107,1746108,1746109,1746110,1746111,1746112,1746113,1746115,1746116,1746117,1746118,1746119,1746120,1746121,1746122,1746123,1746124,1746125,1746126,1746127,1746128,1746129,1746131,1746132,1746133,1746134,1746135,1749588,1749589,1749590,1749591,1749592,1749593,1744858,1744859,1744862,1744882,1760992,1760993,1760994,1760995,1760996,1760997,1760998,1760999,1801927,1801929,1801930,1801932,1801934,1801935,1801936,1801937,1801938,1801939,1801940,1801942,1801944,1801946,1801947,1801948,1801950,1801952,1801953,1801954,1801955,1801956,1801958,1801960,1801962,1801963,1801966,1801969,1801971,1801972,1801973,1801974,1801975,1801976,1801978,1801979,1745666,1746136,1746137,1746138,1746139,1746140,1746141,1746142,1746143,1746144,1746145,1746146,1746147,1746148,1746149,1746150,1746151,1746152,1746153,1746154,1746155,1746156,1746157,1746158,1746159,1746160,1746161,1746163,1746164,1746165,1746166,1746167,1746168,1746169,1746170,1749607,1745073,1814021,1814022,1814023,1814024,1814031,1814032,1814033,1814036,1783596,1783598,1783600,1783602,1783618,1783619,1783621,1783622,1801980,1801981,1801982,1801984,1270445,1305018,1270448,1745673,1746171,1746172,1746173,1746174,1746175,1746176,1746177,1746178,1746180,1746181,1746182,1746183,1746185,1746186,1746187,1746188,1746189,1746190,1746191,1746193,1746194,1746195,1746196,1746197,1746198,1746199,1746200,1746201,1746203,1746206,1746207,1746209,1746210,1746212,1746213,1746215,1746216,1746217,1746218,1746219,1746220,1814049,1814053,1814055,1814056,1814060,1814061,1814063,1814066,1814070,1793426,1797376,1797339,1746221,1746222,1746223,1746224,1746225,1746226,1746234,1746235,1746236,1746237,1797355,1791622,1761361,1739456,1750364,1739628,1815601,1737965,1800837,1800839,1800840,1800841,1800842,1800843,1800846,1800847,1800848,1800849,1800850,1784204,1313130,1315729,1315817,1315916,1316065,1316347,1316429,1316446,1809203,1809279,1815629,1815639,1815640,1815641,1815642,1815643,1815644,1815645,1815646,1815647,1815648,1815649,1815923,1800851,1800852,1800853,1800854,1800855,1800856,1800857,1800858,1800859,1800860,1800861,1800862,1800863,1800864,1800867,1800868,1800869,1800870,1307753,1755785,1755787,1755788,1755802,1755803,1755804,1755805,1755806,1755807,1755808,1755809,1815650,1815651,1815652,1815653,1815654,1815655,1815656,1815657,1815658,1815659,1815660,1815661,1815671,1750123,1750125,1800937,1800939,1800951,1800954,1800955,1800957,1800959,1800962,1800963,1800965,1800967,1736150,1737717,1737718,1737719,1745194,1815690,1776834,1801049,1747231,1815704,1815705,1815706,1815707,1815708,1815709,1815710,1815711,1815712,1815713,1815714,1815716,1815717,1815718,1815719,1815720,1815721,1815722,1815723,1815725,1815726,1815727,1815728,1815729,1815730,1815731,1815732,1815733,1815734,1741711,1741719,1741734,1757729,1757749,1757750,1757752,1757754,1741757,1741758,1741759,1741760,1741761,1757780,1765117,1765118,1765119,1765122,1765123,1765127,1765129,1765136,1765140,1765142,1765143,1765144,1786037,1786038,1786039,1786040,1786041,1786042,1786043,1786044,1786045,1786046,1786047,1786048,1786049,1786050,1743947,1749120,1765154,1765156,1765157,1765158,1765162,1765163,1782583,1786053,1786054,1786055,1786056,1786057,1786058,1786059,1786060,1735397,1771877,1771878,1771879,1771880,1771881,1771882,1771883,1771884,1771885,1771886,1771887,1771888,1771889,1771890,1741899,1741900,1741901,1741902,1741903,1741904,1741905,1741906,1741907,1742655,1742659,1743337,1743340,1743342,1737985,1744027,1744028,1772445,1772446,1772447,1772448,1772449,1772450,1772451,1772452,1772453,1772454,1772455,1772457,1772459,1772460,1772461,1772462,1772463,1772465,1772466,1772467,1785507,1785509,1785511,1785513,1785518,1735502,1750127,1741932,1741934,1742676,1742678,1785554,1785555,1785556,1739004,1743421,1743422,1743423,1743444,1743445,1743446,1743447,1743448,1743449,1743450,1743451,1743452,1743453,1743454,1743455,1785568,1785569,1744657,1737961,1737967,1750112,1744029,1742084,1742085,1742820,1742821,1742822,1744030,1744031,1744032,1744033,1744034,1744035,1744036,1744037,1744038,1744039,1755664,1755685,1755688,1755689,1755690,1738554,1738555,1738520,1738521,1738522,1738523,1738526,1738528,1738533,1738535,1738537,1738539,1742823,1742824,1742825,1742826,1742827,1742828,1755692,1755693,1755694,1755695,1755702,1755703,1755704,1755705,1755706,1755707,1755726,1785671,1785672,1785673,1785674,1785675,1785676,1785677,1785679,1785680,1785681,1785682,1785683,1785684,1785685,1785687,1785688,1785690,1785692,1785693,1785694,1785696,1785697,1785698,1746265,1778590,1778591,1797360,1797361,1797362,1797366,1797378,1797379,1797387,1797394,1797397,1742882,1742883,1742885,1742886,1742887,1742888,1742889,1742890,1742891,1742892,1742893,1742894,1742895,1742896,1742897,1742898,1742899,1742900,1742901,1742902,1742903,1742904,1742905,1742906,1742907,1742908,1742909,1742910,1743647,1743648,1743649,1743650,1743651,1743653,1743654,1743655,1743656,1744102,1270447,1270441,1270451,1743659,1743661,1743662,1743664,1743667,1743668,1743670,1743671,1743672,1743673,1743674,1761425,1761431,1761434,1761437,1761438,1761439,1761440,1761441,1761442,1761443,1761444,1761445,1786500,1786506,1786573,1743675,1743676,1743677,1743678,1743679,1743680,1743681,1743682,1743683,1743684,1743686,1743687,1741650,1744803,1744806,1763439,1760241,1738273,1738274,1743779,1743780,1743781,1743782,1743783,1743784,1743785,1743786,1743787,1743788,1743789,1746851,1746852,1746854,1786509,1741710,1742430,1742431,1742432,1742434,1742436,1742437,1742438,1736590,1736591,1736592,1736593,1736594,1736595,1736596,1736597,1736598,1736599,1736600,1736601,1736602,1736603,1736604,1756376,1756377,1756378,1756380,1756382,1756383,1756385,1757644,1757645,1757716,1785927,1785928,1785929,1785933,1785934,1785935,1785937,1785938,1785939,1739999,1821636,1821640,1749473,1750129,1751374,1750124,1750131,1809274,1750133,1798397,1798398,1798399,1798401,1798404,1798405,1798406,1798407,1798408,1798409,1798410,1798411,1798412,1798415,1798423,1798424,1798426,1798427,1798432,1822193,1822194,1822195,1822196,1817056,1817062,1817069,1817074,1817090,1817098,1781333,1798437,1798469,1798474,1798478,1798479,1798480,1798481,1798482,1798483,1798486,1798487,1798488,1798489,1798491,1798493,1798494,1798495,1819952,1819953,1755314,1798497,1827398,1827400,1827405,1750130,1750137,1750138,1750139,1750140,1816199,1816200,1776848,1821950,1821951,1821952,1821953,1821954,1821955,1821956,1133131,1816898,1816899,1816900,1816901,1816902,1816903,1816904,1816905,1816906,1816907,1816908,1816909,1816910,1816911,1816912,1816913,1816914,1816916,1816918,1816919,1816920,1816921,1816922,1816923,1831328,1831329,1736290,1736291,1736292,1736293,1736294,1736295,1736296,1736297,1736298,1736299,1822282,1822283,1809282,978676,1796671,1781226,1830640,1830641,1830642,1830643,1830644,1830645,1830646,1830647,1830649,1830650,1830651,1830652,1830653,1830654,1830655,1830656,1830657,1830659,1830660,1830661,1830761,1830762,1830763,1830764,1830765,1830766,1830768,1830769,1822404,1822405,1822406,1822407,1822408,1822409,1822410,1822411,1822412,1822413,1307737,1776841,1307885,1403192,1781759,1781760,1781761,1781762,1781763,1781764,1781765,1781766,1830146,1830147,1830148,1830149,1830150,1830151,1830152,1830153,1830154,1830162,1830163,1830164,1830165,1830166,1830168,1830782,1830783,1830784,1830785,1830794,1830795,1830797,1830798,1830799,1830800,1830801,1830802,1830803,1830805,1830806,1830807,1830809,1830810,1830811,1749040,1830662,1830663,1830664,1830665,1830666,1830667,1830668,1830669,1830670,1830671,1830673,1830674,1830675,1830677,1830678,1830679,1830680,1830681,1830682,1830683,1830684,1830685,1830686,1830687,1830688,1830812,1830813,1830814,1830816,1830817,1830818,1816791,1816793,1816799,1816813,1816815,1816816,1816817,1816818,1816819,1830689,1830690,1830691,1816872,1816879,1816884,1816887,1816888,1816896,1816917,1830692,1830693,1830694,1830695,1830697,1830698,1830699,1830700,1830701,1830702,1830703,1830705,1830706,1830707,1830708,1830709,1830710,1830711,1830712,1830713,1830714,1830715,1830716,1830717,1830718,1830719,1830720,1830721,1830723,1816936,1816944,1816953,1816964,1816966,1816967,1816970,1816971,1816974,1797353,1830724,1830725,1830727,1830734,1830735,1830736,1830737,1830738,1830739,1830740,1830741,1831172,1831174,1831175,1744650,1744651,1744652,1744653,1744654,1744655,1744656,1796259,1797368,1830621,1830622,1830623,1830624,1830625,1830626,1830627,1830628,1830630,1830631,1830632,1830634,1830635,1830636,1830637,1830638,1830639,1768052,1768061,1768066,1768067,1832034,1832035,1832036,1832037,1832038,1832039,1832041,1832042,1832043,1832044,1832045,1832047,1832048,1832049,1832050,1832051,1737960,1738541,1738542,1738543,1738544,1827561,1768109,1768110,1768111,1768112,1768113,1737988,1781331,1755442,1742065,1744805,1744768,1768114,1768115,1768116,1768117,1768129,1768138,1768139,1768140,1768141,1768142,1768143,1768145,1768146,1768147,1768148,1768149,1768150,1768151,1768152,1768153,1768154,1768155,1737975,1316401,1223615,1316395,1827544,1755445,1778989,1833512,1833513,1833514,1833516,1754767,1754768,1768156,1768178,1768184,1768185,1768187,1768188,1768189,1768190,1806597,1768191,1768192,1768193,1828380,1828381,1828382,1828383,1828384,1828385,1828386,1828387,1828388,1828389,1769289,1769290,1769291,1763432,980346,1745193,1804552,1769292,1769293,1769294,1769295,1769296,1828406,1828407,1828408,1828409,1828410,1828411,1828412,1828413,1828414,1828415,1828418,1828419,1828420,1828421,1828422,1828423,1828424,1828425,1828426,1755432,1778580,1316243,1316410,1316120,1778584,1316050,1828427,1828428,1828430,1828431,1828432,1828433,1828436,1828437,1828438,1828439,1828441,1307876,1772584,1832124,1832125,1816586,1816587,1816172,1816174,1816175,1816176,1805291,1307911,1776845,1781627,1736151,1831985,1831986,1831987,1831988,1831989,1831990,1831991,1831992,1768296,1739396,1739397,1739398,1739399,1739400,1739401,1739402,1739403,1739404,1739405,1750128,1821993,1821994,1769005,1769006,1769007,1769008,1769009,1769010,1769011,1769014,1769018,1769019,1769025,1769026,1769027,1891883,1891886,1891887,1891888,1891889,1891890,1891891,1891893,1891894,1891899,1891900,1891903,1884888,1884889,1922758,1922759,1922760,1922762,1922765,1922766,1922767,1922769,1922771,1922772,1922773,1922774,1922775,1922776,1922777,1922779,1922783,1922784,1922786,1922787,1922788,1922789,1922795,1907809,1891917,1891920,1891923,1891930,1891934,1891935,1891937,1891938,1891939,1891940,1891949,1891950,1891951,1891952,1891953,1891954,1891955,1891956,1891957,1891958,1891959,1891960,1891961,1891963,1895082,1895086,1895088,1895106,1895108,1895109,1895111,1895114,1895117,1895119,1895121,1895126,1895128,1895129,1895131,1895132,1895133,1895134,1895136,1895138,1895145,1895152,1895153,1895155,1895158,1891904,1851957,1851961,1923327,1923328,1923330,1891964,1891965,1891966,1891968,1891969,1891970,1891971,1891972,1891973,1891975,1891976,1891977,1891978,1891984,1891985,1891986,1891987,1891988,1891989,1891990,1891991,1891992,1891993,1891994,1891995,1895207,1895208,1895210,1895213,1895214,1895215,1895216,1895217,1895218,1895219,1895220,1895221,1895222,1895223,1895224,1895225,1895227,1895229,1895230,1895232,1895233,1851965,1903978,1937058,1916493,1922858,1922862,1922863,1922864,1922865,1922866,1922867,1922868,1922870,1922872,1922874,1922875,1922876,1922878,1922879,1922880,1922881,1922883,1922885,1922886,1922887,1922888,1922889,1922890,1922891,1922893,1922895,1922896,1922897,1922898,1891996,1891997,1891998,1891999,1892000,1892001,1892002,1892004,1892005,1892007,1892008,1892009,1892010,1892011,1892012,1892014,1892015,1892017,1892018,1892019,1892020,1892022,1892024,1892025,1892026,1892033,1892034,1892036,1892037,1892038,1895235,1895236,1895237,1895239,1895240,1895241,1895242,1895243,1895245,1895253,1895263,1895265,1895267,1895271,1895272,1895277,1895278,1922900,1922901,1922903,1922904,1922905,1922906,1922908,1922909,1922910,1922911,1922914,1922916,1922917,1922918,1861031,1861032,1861033,1861034,1861035,1861036,1861037,1861038,1861039,1861040,1861042,1892132,1892133,1892135,1893581,1893582,1855000,1916514,1861043,1861044,1861045,1861046,1861047,1861048,1861049,1861050,1861051,1861052,1861053,1861054,1861055,1861056,1861057,1861058,1861059,1861060,1861061,1861062,1861063,1861064,1861065,1892198,1892199,1892200,1892201,1892202,1892203,1892204,1892205,1892207,1892211,1892213,1892214,1892216,1892217,1892220,1892222,1863701,1851969,1922134,1922136,1922138,1922140,1922143,1922145,1922147,1922149,1922151,1922153,1922155,1922157,1922159,1922161,1922164,1922166,1922169,1922171,1922174,1922176,1922179,1922181,1922957,1922959,1922963,1922964,1922965,1922966,1922967,1922969,1922970,1922971,1922972,1922973,1878970,1861085,1861109,1861110,1861118,1861119,1861120,1861121,1892287,1892302,1895414,1895416,1895417,1895418,1895419,1922183,1922186,1922188,1922191,1922193,1922196,1922199,1922202,1922205,1922207,1922210,1922213,1922216,1922219,1922222,1922245,1922248,1922251,1922254,1922258,1922261,1922264,1922267,1922270,1922274,1922277,1922280,1922284,1922287,1922291,1926322,1923040,1923043,1923047,1923052,1923053,1923055,1923056,1923057,1923058,1923059,1923060,1923063,1923064,1861122,1861126,1861135,1861136,1861137,1861138,1861140,1861141,1861142,1892357,1895465,1926323,1926324,1926325,1926326,1926327,1926331,1926336,1926337,1926338,1926339,1926341,1923066,1923067,1923068,1923070,1923071,1923073,1923074,1923076,1923077,1923079,1923080,1923082,1923083,1923084,1923086,1923088,1923089,1923091,1923093,1923094,1923095,1923097,1923099,1923100,1923102,1842863,1892458,1892460,1892476,1892479,1907745,1907746,1873082,1873083,1873085,1873086,1873087,1873088,1873090,1873106,1873107,1873108,1873109,1873110,1873112,1873113,1873115,1873116,1892480,1892482,1892484,1892485,1892487,1892551,1307440,1870736,1907769,1907771,1907773,1907779,1907781,1907782,1907787,1907788,1854956,1898205,1894344,1894355,1894424,1861925,1861926,1861927,1861929,1861930,1861931,1861932,1861935,1861936,1861939,1861941,1861942,1861943,1861945,1861946,1861947,1892561,1892564,1892572,1892573,1892574,1892576,1892580,1892581,1892582,1892583,1892584,1892585,1892586,1892588,1892589,1892590,1892592,1892594,1892595,1892596,1892597,1892599,1892600,1892602,1892604,1892605,1892607,1892608,1892609,1892610,1833760,1892611,1892613,1892614,1892616,1892645,1892646,1892647,1892648,1892649,1892652,1892653,1892660,1892675,1892678,1892682,1892684,1892686,1892687,1892690,1892694,1892695,1892696,1892698,1922435,1922436,1922438,1922439,1922440,1922441,1922442,1922444,1922445,1922446,1922447,1922448,1922449,1922451,1922452,1922455,1922456,1922457,1922458,1922459,1922460,1922461,1922462,1922463,1922464,1834695,1851954,1835395,1892700,1892701,1892703,1892704,1892706,1892712,1892714,1892717,1892720,1892727,1892731,1892733,1892736,1892738,1892741,1892743,1892746,1892747,1892847,1892848,1892849,1870860,1901938,1901939,1922465,1922466,1922467,1922468,1922469,1922470,1922471,1922472,1922473,1922474,1922476,1922477,1922478,1922479,1922480,1922481,1922482,1922484,1922485,1922487,1922489,1922491,1922492,1892868,1892905,1892909,1895045,1895050,1895055,1895063,1895064,1895067,1895074,1895075,1895078,1895080,1922129,1922131,1922132,1854979,1926552,1922719,1922720,1922721,1922723,1922726,1922727,1922729,1922732,1922733,1922734,1922736,1922738,1922741,1922742,1922743,1922745,1922747,1922749,1922750,1922751,1922752,1922755,1922757,1923210,1923211,1923213,1891906,1891907,1891908,1891909,1891910,1891911,1891912,1891913,1891914,1891915,1902200,1937391,1937441,1937904,1939214,1939222,1939228,1939242,1939245,1851151,1887925,1887926,1887927,1887928,1912839,1870124,1939271,1939272,1939273,1887929,1887942,1887952,1887954,1887959,1887964,1887966,1887967,1887968,1912883,1912884,1912885,1912886,1912890,1912905,1912906,1912907,1912908,1912909,1912910,1912911,1833773,1854985,1955124,1955155,1955157,1955226,1866729,1937250,1937255,1937322,1937352,1937411,1912262,1912263,1912264,1887970,1887971,1912912,1912914,1912915,1912918,1912919,1912920,1912921,1912922,1912924,1912925,1912926,1912932,1912934,1912935,1912936,1912937,1912938,1912939,1912940,1912941,1912942,1912943,1912944,1912945,1912946,1912947,1912948,1912949,1912950,1833971,1833973,1833975,1833977,1937658,1937678,1904216,1912951,1912952,1912954,1912958,1912960,1912962,1912963,1912964,1863699,1878976,1914126,1914127,1914128,1914129,1914130,1914131,1914132,1914133,1914134,1914135,1914136,1914137,1955323,1917637,1910135,1914156,1914157,1914158,1914159,1914160,1859400,1859401,1859402,1859403,1859404,1859405,1859408,1859440,1937247,1912267,1912268,1912269,1912270,1912271,1912272,1912273,1912274,1912275,1912276,1912277,1912278,1912279,1912280,1912282,1912283,1912285,1912286,1912287,1912288,1912289,1912290,1912291,1912293,1912294,1912295,1912296,1912297,1912298,1912299,1912300,1916439,1842867,1859441,1859445,1859463,1859465,1859474,1859477,1859480,1859481,1913068,1913069,1913070,1913071,1913072,1913073,1913074,1913075,1913076,1913077,1913078,1913079,1913080,1913081,1913082,1630007,1944871,1945087,1945227,1945420,1945683,1859485,1859488,1859491,1964175,1964182,1964184,1964185,1964187,1964189,1834334,1834342,1976885,1976886,1976887,1976888,1976889,1976890,1976891,1976892,1976893,1976894,1976895,1976896,1840128,1946508,1946518,1946535,1946545,1833768,1976897,1976898,1976899,1976900,1976901,1976903,1851967,1851968,1300967,1313099,1316274,1862670,1316496,1931651,1931652,1931653,1935419,1935420,1935421,1935422,1945065,1879393,1941090,1941093,1941099,1941101,1941102,1941106,1941109,1941110,1941111,1878832,1912554,1912555,1912556,1912557,1912558,1912559,1912560,1912561,1913236,1898411,1944898,1912562,1912563,1912564,1912565,1912566,1912567,1912568,1912569,1912570,1912571,1912572,1912573,1912574,1912575,1912576,1851955,1851959,1944975,1945236,1917738,1949643,1950269,1938975,1916018,1851963,1939034,1939036,1939037,1939038,1939039,1939040,1939045,1939047,1939048,1939049,1939052,1939057,1939060,1939061,1976931,1976932,1976933,1976934,1976936,1976937,1976938,1976939,1976940,1976941,1976942,1976943,1976944,1976945,1976946,1976948,1976949,1976950,1976951,1976952,1976953,1976954,1976955,1976956,1976958,1976959,1976960,1879003,1939062,1939065,1939067,1939068,1939071,1939074,1939077,1939079,1939081,1939082,1939083,1939085,1939098,1939103,1939108,1939111,1939116,1939118,1917173,1975889,1892750,1892752,1892755,1892758,1892761,1892762,1892764,1892765,1892767,1892769,1892770,1845963,1845964,1845967,1845968,1845969,1845975,1845981,1948099,1885376,1874322,1874323,1874324,1917679,1937552,1945676,1937155,1892825,1892826,1892827,1892828,1892829,1892830,1892831,1892832,1892833,1892834,1313106,1908503,1846022,1846024,1846025,1846026,1846028,1846029,1846031,1846032,1846034,1872551,1872552,1872553,1946506,1947528,1946558,1892835,1892836,1892837,1892838,1892839,1854940,1872554,1872555,1872556,1872557,1872560,1872561,1872562,1872563,1872564,1872565,1872566,1872567,1872568,1872569,1872570,1872571,1872572,1872573,1872574,1872575,1872576,1872577,1872578,1872579,1872580,1872581,1872582,1872583,1872584,1872585,1872586,1872587,1872588,1872589,1872590,1872591,1872592,1872593,1872594,1872595,1946564,1937063,1074622,1946568,1872596,1872597,1872598,1872599,1872600,1872601,1872602,1872604,1872605,1872606,1872607,1872609,1872610,1872611,1872613,1872614,1872615,1872616,1872617,1872618,1872619,1872621,1872622,1872623,1872624,1872625,1872626,1872627,1872628,1872629,1872630,1872631,1872632,1872633,1872634,1872635,1872636,1872638,1872639,1872640,1898494,1851952,1854936,1955111,1872643,1872661,1872662,1872663,1872664,1872665,1872666,1872667,1872670,1872672,1833523,1872690,1872722,1872723,1872724,1872725,1955151,1955266,1955401,1955103,1969661,1945701,1846267,1846269,1944886,1872726,1872749,1872750,1872751,1872752,1872753,1872754,1872755,1872756,1872758,1872759,1872760,1869949,1869950,1881941,1882117,1885405,1846331,1846332,1846333,1846334,1846335,1846345,1846346,1846348,1846360,1846375,1846376,1869951,1945423,1846393,1846394,1846395,1846397,1846398,1846399,1846401,1846403,1846404,1846405,1846406,1846407,1846408,1846409,1846410,1846411,1846412,1846413,1846414,1846415,1846417,1846418,1846419,1846420,1937265,1842390,1842391,1842392,1842393,1842394,1842396,1842397,1842399,1842400,1842401,1842402,1842403,1842404,1842405,1842407,1842408,1842409,1842410,1842421,1842423,1872840,1872841,1917697,1882051,1842427,1842435,1842436,1842438,1842440,1842441,1842442,1842446,1842450,1842451,1842452,1842454,1842455,1842456,1842457,1842458,1842459,1842463,1842467,1842468,1872883,1872884,1872885,1872886,1937697,1845711,1845724,1969827,1834694,1967563,1967564,1967566,1967570,1967571,1967590,1967591,1845725,1845726,1845727,1845728,1845729,1845730,1845731,1845732,1845733,1845734,1845735,1845736,1845737,1845738,1845739,1845740,1845741,1845742,1845743,1845744,1845746,1845747,1845749,1845750,1845751,1845752,1845753,1845754,1845756,1845757,1845758,1845759,1845760,1845761,1845762,1845763,1845764,1845765,1968040,1968042,1968043,1968045,1968047,1968049,1968052,1968054,1968056,1968057,1968060,1968061,1968062,1968064,1968066,1968067,1968068,1968070,1968071,1968073,1968074,1968076,1968077,1968078,1968080,1968082,1968083,1968084,1968085,1968087,1845766,1845767,1845769,1845770,1845772,1845773,1845774,1845775,1845776,1845778,1845779,1845780,1845782,1845783,1845785,1845786,1845787,1845788,1845789,1935469,1935470,1935471,1935472,1935473,1935475,1937666,1833787,1937345,1845820,1845821,1845822,1845823,1845825,1969424,1873093,1874170,1874171,1874172,1874173,1874175,1874176,1874177,1874180,1874181,1874185,1851973,1939715,1917749,1935618,1935630,1935772,1935774,1845854,1845856,1944913,1873118,1873119,1873121,1873122,1873123,1873124,1892068,1892070,1892071,1892073,1892075,1851970,1854921,1945071,1945075,1946503,1946562,1779829,1864340,1874317,1874318,1874319,1874320,1874321,1851953,1851962,1937108,1885391,1865772,1795147,1937636,1955148,1955393,1945091,1870726,1946494,1916488,1946490,1978009,1978010,1978011,1978013,1978015,1871633,1871634,1871635,1871636,1871637,1871638,1871639,1871640,1871641,1871662,1871665,1955128,1955387,1955395,1955403,1937425,1945705,1944900,1978110,1871672,1871674,1871675,1871676,1871677,1871678,1871679,1871681,1871682,1871683,1938410,1938412,1938413,1938414,1938415,1938416,1938417,1938418,1938419,1938420,1938421,1938422,1938423,1938424,1938425,1938426,1938427,1938428,1938430,1938431,1938432,1938433,1938434,1938435,1938436,1938437,1938438,1938439,1938440,1938441,1938442,1948093,1948106,1948108,1948110,1948111,1948117,1948119,1948124,1948134,1955504,1955130,1955161,1945461,1938443,1938444,1938445,1205058,1916318,1916321,1762154,1834109,1845659,1845668,1873712,1877597,1878154,1927913,950195,1946534,1946539,1946567,1865961,1938446,1938447,1938448,1938449,1938450,1938451,1938452,1938453,1938454,1938455,1938456,1938457,1938458,1938459,1938460,1938461,1938462,1938463,1938464,1938465,1938466,1938467,1938468,1938469,1938470,1938481,1938482,1938483,1938484,1937721,1978612,1978613,1978614,1978619,1978621,1978623,1978624,1884844,1884846,1884847,1938488,1938489,1938490,1938491,1937274,1968422,1978636,1978642,1978645,1978657,1978661,1978663,1978667,1978668,1978669,1834696,1938518,1938519,1938522,1938523,1938524,1938525,1938526,1938527,1938528,1938529,1938530,1938531,1938532,1938533,1938534,1938535,1938536,1938537,1938538,1938539,1938540,1938542,1938543,1938544,1938545,1938546,1938547,1938548,1938549,1938550,1938551,1938552,1893671,1873094,1873096,1873098,1873099,1873101,1873102,1873103,1873105,1833527,1886511,1886514,986484,986607,1938553,1938554,1938556,1938558,1938562,1938563,1938564,1938565,1938566,1938567,1938568,1938569,1938570,1938571,1938572,1938573,1938574,1938579,1938580,1938583,1938584,1938585,1938586,1938594,1938597,1938598,1938599,1938600,1977243,1977244,1977247,1870867,1977460,1977461,1977462,1920427,1920428,1920429,1920430,1920432,1920433,1920443,1920445,1920450,1920455,1920459,1920460,1920461,1920462,1920463,1920464,1920467,1885460,1961363,1938601,1938602,1938603,1938604,1977248,1977249,1977251,1977253,1977256,1977464,1920468,1920470,1920474,1920479,1920483,1920488,1920489,1916441,1940989,1940992,1940998,1854975,1313100,1783456,1784086,1784150,1784306,1784311,1886508,1313179,1854911,1938656,1938658,1938659,1938660,1938661,1938662,1938663,1938664,1938665,1938666,1938667,1977303,1851974,1978670,1978672,1978673,1978674,1978675,1978676,1978677,1978678,1978679,1978681,1978682,1978686,1978688,1978689,1938682,1938696,1938710,1938711,1938712,1938713,1938714,1938715,1938716,1938719,1938723,1938726,1938727,1938729,1938730,1938731,1938732,1938733,1938734,1938735,1938736,1938737,1938738,1938739,1938740,1938743,1938745,1938748,1938749,1938751,1938752,1938753,1938754,1938755,1938756,1938757,1938758,1938759,1941298,1839324,1839326,1839327,1977304,1977306,1977307,1977308,1977309,1977311,1977312,1977339,1977340,1978690,1978697,1978698,1978715,1978716,1978717,1978719,1937603,1922797,1922805,1922829,1923278,1923283,1929507,1854928,1938762,1938765,1938767,1938768,1938769,1938770,1938772,1938774,1938777,1938778,1938780,1938781,1938784,1938786,1938788,1938789,1938790,1938792,1938793,1938794,1938795,1938796,1938797,1938798,1938799,1938800,1938802,1938803,1938804,1938805,1938808,1938810,1938811,1938812,1938813,1938815,1938816,1854992,1977533,1977563,1977566,1978726,1978730,1978731,1978732,1978733,1978734,1978737,1978738,1978748,1978750,1978751,1937366,1937408,1937431,1313090,1938817,1938818,1938819,1938820,1938821,1938822,1938823,1938824,1938827,1938828,1938829,1938830,1938831,1938832,1853180,1946512,1946555,1978756,1978761,1978768,1978773,1893786,1938851,1938852,1938854,1938858,1938859,1938860,1938861,1938863,1851269,2095026,2095027,2095037,2095043,2095044,2095046,2095047,2095049,2095050,2095051,2095053,2095056,2095057,2095058,2085890,2085894,2085895,2085903,2085905,2037521,2014346,2095062,2095063,2095068,2095069,2095073,2095077,2095079,2095087,2085946,2087531,2037602,2037603,2037604,2037607,2037608,2090480,2087520,2027429,2027420,2053454,2027453,2027432,2053564,2027462,2027460,2037765,2059732,2044833,2044834,2044835,2044836,2044837,2044838,2044839,2044840,2044841,2044842,2044843,2044844,2044845,2086321,2086357,2086374,2086378,2086380,2042908,2044879,2044881,2044883,2085439,2085440,2085441,2085442,2085443,2085444,2085445,2085446,2085447,2085448,2085449,2085450,2085451,2085452,2085453,2085454,2085455,2085456,2085457,2085462,2085463,2085464,2085465,2085466,2085467,2085468,2085469,2085470,2085471,2078539,2090555,2090556,2046117,2046127,2046131,2078540,2085472,2085473,2085474,2085475,2085476,2085479,2085480,2085481,2085482,2037351,2037352,2037354,2087509,2046134,2046137,2046148,2046150,2046151,2046152,1989513,2090559,1991579,2037417,2037418,2037419,2037421,2037422,2037423,1941572,2046153,2046160,2087524,2059857,2046161,2046164,2046165,2046166,2046167,2046168,2046169,2046170,2046174,2046175,2046179,2046182,2046183,2046185,978743,2090490,2086602,2086605,2086606,2086610,2086611,2086613,2086615,2086616,2086619,2086621,2086623,1961374,1961377,1961379,1961435,2037437,2037438,2079041,2087507,2065138,2079324,2079325,2095007,2095012,2095013,2037481,2085843,2085846,2085854,2085858,2085859,2085863,2085864,2085867,2085868,2085871,2085876,2111267,2111269,2111271,2111273,2111275,2111278,2106268,2106254,2106255,2106256,1991564,2104931,2113304,2113305,2113307,2106205,2106217,2106218,2106230,2106234,2106266,1307888,2104928,2106202,2106216,2106219,2106220,2106222,1850187,1844175,1789685,2036692,2036693,2036694,2036695,2036696,2036697,2036698,2036699,2036700,2077828,2109952,2109953,2109954,2109955,2109956,2109957,2109962,2106235,2106231,2106233,2106239,2106247,2106253,2106258,2106269,1991572,2059445,2102909,2102910,2036719,2036720,2109966,2109969,2109973,2109975,2109977,2109979,2109980,2109982,2109994,2110013,2065098,2065099,2065100,2065101,2065102,2065103,2065104,2065105,2065106,2065107,2065108,2065109,2111189,1285420,2048525,2110081,2106228,1991549,2036796,2036798,2036802,2036803,2036804,2036805,2036806,2036807,2036808,2036809,2036810,2036811,2036812,2036813,2036815,2036817,2036818,2111309,2111311,2111313,2111315,1983396,2031939,2106201,2014347,2014286,2087532,1986456,1986460,1986461,1986462,1986464,1986465,1986466,1986467,1986468,1986469,1986470,1986471,1986472,1986474,1986475,1986480,1986481,1986483,1986495,2111342,2111344,2111353,2111354,2111356,2111370,2106243,1986496,1986497,1986498,1986500,2036833,2036834,2036835,2036836,2102900,2015348,2015346,1224934,1347136,1834133,1930924,1988774,1930933,1930980,1951573,950198,1988780,1988781,1988782,2105042,2106192,2106204,2036837,2036838,2111768,2111769,1234187,2106259,2107098,2036856,2036857,2036858,2036860,2036861,2036862,2036864,2036865,2036866,2036867,2036869,2036870,2036871,2036874,2036875,2036876,2036877,2036878,2036880,2053137,2053139,2053141,2053144,2053146,2053148,2053151,2053154,2053159,2053161,2053164,2053168,2110879,2110885,2110887,2110889,2110891,2110892,2110905,2110908,2046866,2046859,2046423,2080090,2045931,2046874,2046779,2110947,2110949,2110952,2110954,2110956,2110958,2110960,2110962,2110964,2036924,2036925,2036927,2036928,2036929,2036930,2053282,2053284,2027068,2027069,2027070,2027071,2027072,2027073,2027074,2027075,2027077,2027078,2027079,2027080,2027081,2027082,2027083,2027084,2027085,2027086,2027087,2027088,2027089,2027090,2111836,2106226,2036962,2036963,2036980,2036983,2036985,2036987,2053348,2053350,2106224,2106241,2106245,2106262,2106265,2106252,2106263,2031372,2086638,2086641,2086642,2106251,2111069,2111072,2111077,2111082,2111086,2111089,2111092,2111096,2111100,2111103,2111106,2111109,2111113,2111116,2111120,2111123,2111127,2111131,2111135,2111138,2111154,2111157,2037135,2037144,2037153,2037162,2037169,2037175,2037181,2106232,2106238,2106236,2086644,2086647,2086649,2086651,2086653,2086654,2086657,2086659,2086661,2086663,2086664,2086665,2086667,2086670,2106242,2111228,2111230,2111232,2111233,2111250,2111252,2111256,2111258,2111260,2111262,2111264,2037220,2037226,2037232,2037243,2037250,2037256,2037262,2037268,2037275,2106225,2106227,2052637,2052648,2052649,2052651,2052653,2052655,2052657,2052659,2052661,2052663,2052665,2073364,2073365,2059737,2052689,2052691,2052693,2052695,2052766,2052768,2032932,2032933,2073406,2073407,2073409,2052780,2052785,2052791,2052797,2052801,2052805,2052808,2052812,2052816,2073410,2073443,2052987,2015274,2053020,2053021,2053024,2053025,2053027,2053029,2053031,2053035,2053036,2053038,2053041,2053042,2053044,2053046,2053048,2053050,2053052,2053054,2053057,2053069,2053071,2053072,2053074,2053075,2073691,1991513,2045182,2053077,2073831,2073833,2073836,2073861,2073879,2073882,1765379,2053315,2052494,2052497,2052501,2052504,2052506,2052509,2052510,2052511,2052524,2052526,2052529,2052530,2052533,2052534,2052536,2052537,2052539,2052541,2052542,2052574,2052576,2052579,2052581,2052583,2052585,2052587,2052589,2056725,2056727,1989160,1989161,1989162,1989163,1989164,1989165,1989166,1989167,1989169,2070223,2070225,2070227,2070228,2052590,2102285,1991543,2070232,2070233,2070234,1991574,2042909,2085996,2073414,2073415,2073417,2073418,2073419,1972376,1972389,1972397,2078990,2014366,2014360,2014349,2056707,2056708,2056710,2056711,2056712,2056713,2056715,2079322,1991570,1991569,2056716,2056717,2056718,2056720,2056721,2056735,2056736,2056737,2056738,2056739,2014074,2014075,2014077,2014078,2014079,2014080,2014081,2014082,2014092,2014093,2014094,2014095,1963701,1966170,1971115,1990950,2056740,2056741,2056742,2056743,2056744,2056745,2056746,2056747,2056748,2056749,2056750,2056751,2056752,2056753,2014098,2014099,2014100,2014101,2014102,2014103,2014104,2014105,2014114,2014120,2014121,2014124,2056754,2056755,2056756,2056757,2056758,2056759,2056760,2056761,2056762,2014125,2014127,2014128,2014130,2014132,2014133,2014134,2014135,1991577,2056763,2056764,2056765,2056766,2056768,2056770,2056771,2056774,2056775,2056776,2056777,2056778,2056779,2056780,2056781,2056782,2056783,2056784,2056785,2056786,2056787,2056788,2056789,2056790,2056791,2056792,2056793,2056794,2056795,2056797,2038321,2038324,2038325,2056798,2056808,2056809,2056810,2056811,2056812,2056813,2056814,2056815,2056816,2056817,2056818,2056819,2056820,2056821,2038451,2038453,2038454,2038455,2038460,2038470,2038479,2038487,2077659,1991565,2029854,1971571,1971579,1971596,2027394,2027395,2078544,2078574,1784075,1784307,1792478,1807835,1965868,1966031,1966034,1966060,1966068,1966078,1966083,1966088,1966098,1966128,1989406,1989407,1989408,1989409,1989410,1989411,1989412,1989413,2155358,2155353,2173592,2138466,2138467,2138470,2138482,2138486,2138487,2138488,2138490,2138492,2138497,2138499,2138500,2138502,2138503,2138507,2138508,2138510,2138511,2138512,2138513,2138515,2138516,2138522,2138524,2138525,2144325,2212670,2161757,2163534,2163554,2169914,2154571,2146635,2138536,2138540,2138543,2138545,2138554,2138556,2138584,2138586,2138595,2138599,2138601,2138603,2138605,2138607,2138609,2138610,2138612,2138613,2138614,2138616,2212671,2216746,2146680,2163565,2163574,2163576,2163577,2163578,2163587,2137865,2137866,2215920,2215925,2215927,2215929,2215931,2215933,2215935,2215937,2215939,2215940,2215942,2215943,2215945,2215947,2215949,2215952,2215955,2215957,2215958,2215960,2215961,2215964,2215965,2215967,2215969,2215970,2215973,2138627,2138629,2138630,2138631,2138632,2138635,2138636,2138637,2138639,2138642,2138643,2138644,2138645,2138648,2138656,2138663,2163607,2163609,2163610,2163611,2163614,2163615,2163616,2163620,2163621,2163623,2163624,2163625,2163628,2163631,2163633,2163638,2183694,2219372,2193597,2141280,2129841,2129842,2156160,2156173,2156174,2163645,2203604,2203632,2203633,2203634,2203635,2203636,2142736,2142737,2142738,2142739,2142740,2142741,2142742,2142743,2142744,2142746,2142747,2142748,2142749,2142750,2142754,2142756,2142757,2142758,1972405,2156297,2215176,2139986,2203637,2221381,2221382,2221383,2221384,2221385,2221386,2221387,2221390,2221391,2221392,2221393,2221394,2221395,2221396,2121107,2121110,2121111,2121118,2121126,2121134,2204432,2204434,2204437,2207437,2207438,2208269,2198599,2121135,2121138,2121139,2121142,2121147,2121148,2121149,2121152,2121154,2121158,2121160,2144341,2192341,2141933,2167326,2142714,2142725,2142726,2142727,2142728,2142729,2142730,2142731,2142732,2142733,2142734,2142735,2144378,2193603,2193736,2141409,2146646,1316346,2209018,2146274,2146275,2146276,2146277,2146279,2146280,2146281,2146282,2146283,2146284,2146285,2146286,2146287,2146288,2146289,2146290,2138094,2138095,2138096,2138097,2138119,2147104,2212675,2126347,2126348,2126349,2126350,2146291,2146293,1773442,2205119,2138158,2150302,2204630,2204631,2204632,2204634,2204637,2204641,2204643,2156145,2156150,2138160,2138166,2138171,2138172,2138176,2138177,2138181,2138182,2138183,2161761,2207122,2208275,2156274,2156300,2156303,2156307,2156310,2156313,2196343,2138185,2138197,2138201,2138202,2138217,2138224,2156377,2156380,2156383,1772482,2181474,2215573,2015322,2138235,2138280,2138283,2138286,2138288,2138291,2138300,2138320,2167341,2167597,2212683,2212692,2212696,2203764,2203809,2146682,2138333,2138334,2138335,2138336,2138338,2138343,2138344,2138356,2138357,2138360,2138361,2138362,2138364,2138365,2138367,2138369,2138370,2138371,2138374,2138376,2138377,2138379,2138381,2138382,2138383,2178038,2128720,2198592,2212711,2212724,2212726,2212729,2212732,2212737,2212739,2212743,2223067,2225259,2138384,2138385,2138387,2138390,2138393,2138394,2138395,2138396,2138397,2138398,2138400,2138401,2138402,2138403,2138404,2138405,2138406,2138407,2138409,2138410,2138411,2138414,2138415,2138416,2138417,2138428,2138430,2140002,2207537,2212748,2212750,2212751,2212761,2126546,2126547,2126552,2181424,2138432,2138433,2138436,2138439,2138441,2138443,2138447,2138451,2138455,2138456,2138461,2138462,2140010,2146583,1784100,2154577,2155736,2155742,2155747,2155753,2155757,2155773,2155778,2155781,2155787,2155844,2155847,2155851,2155854,2155857,2155862,2155866,2155871,2155876,2155880,2155886,2155891,2155895,2130650,1767788,2146640,2152417,1782727,2152970,2152972,2201049,2201053,2201057,2201059,2201063,2201068,2201069,2205121,2205122,2205123,2205124,2205125,2237929,2146302,2146303,2146304,2146305,2146306,2146307,2146308,2155899,2155902,2155907,2155912,2155917,2155922,2207124,2207125,2207128,2207129,2207130,2207131,2207132,2146650,2146669,2167339,2155117,2162067,2205126,2205127,2205128,2205129,2205130,2205131,2205132,2205133,2205134,2205135,2205136,2205137,2205139,2205140,2205141,2205142,2205143,2205144,2205145,2205146,2205147,2205150,2205151,2205152,2205153,2205154,2205155,2205159,2205160,2156063,2156073,2156116,2156121,2156125,2156129,2156138,2156142,2156478,2146598,2141415,2192385,1784310,1785224,1784313,1784312,1784314,1785209,1785216,1973031,2167310,2167318,2167340,2167342,2169908,2169912,2208306,2154567,2157635,2015265,2146674,2146686,2190733,2204227,2204229,2204233,2204235,2146673,1904891,2114979,1930942,2119057,2114768,2147213,2119049,2119035,2119045,2147244,2147271,2161758,2167602,2167603,2167604,2167605,1908786,2144372,2177463,2167663,2167664,2167665,2167666,2167667,2167669,2167670,2167676,2167677,2215400,2181480,2144340,2167678,2167679,2167680,2167681,2167683,2167684,2167685,2167686,2167687,2167688,2167689,2167690,2167691,2167692,2167693,2167694,2167695,2167696,2167697,2167698,2144391,2146430,2146634,2219774,2241200,2241202,2241205,2241218,2241219,1910261,2146643,1784089,2139991,2186332,2192352,2221017,2221018,2221020,2221021,2221022,2221023,2221024,2221025,2241226,2131536,1789209,2131538,2221981,2221982,2221983,2221984,2221985,2221986,2221987,2221988,2221989,2221990,1910182,1785437,2167837,2191270,2191271,2181413,2181422,1772516,2152918,2152923,2167844,2167852,2167859,2167868,2167895,2167900,2167904,2167910,2167917,2167923,2167929,2167934,2167940,2167946,2167951,2167957,2167963,2167968,2167974,2167978,2167984,2167989,2167994,2167999,2168004,2130699,2152927,2152932,2152934,2152937,2146675,1785441,1785298,1783699,1788846,1785354,1785357,1783383,1783396,1783440,1783347,1789212,1785414,1788612,1788635,1785450,1789083,1782597,1783658,1783670,1783686,1784076,1784073,1788866,1785438,1785433,1789215,1782670,1788869,1788872,1788873,1788880,1785445,1789222,1788901,1784031,1784061,1784883,1783890,1783900,1784102,1784124,1784091,1784099,1783820,1783910,1788913,1784893,1784896,1784923,2155623,2155624,2155625,2155626,2155627,2155628,2155629,2155630,2155636,2155639,2155640,2155641,2155642,2155643,2155644,2155645,2155646,2155647,2155648,2155649,2155650,1772492,1847142,1791240,1853717,1853791,1782737,1853894,1855092,2158828,2015279,1852465,1852468,2200575,1784913,1788918,1784146,1788922,1788928,1788937,1788967,1787547,1787624,1787601,1788980,1788992,1789011,1786063,1783399,1783427,1782535,1789249,1789029,1787626,1783428,1783423,1783328,2155651,2155652,2155653,2155654,2155655,2155656,2155657,2155658,2155659,2155660,2155661,2155662,2155663,2155664,2155665,2155666,2155667,2155668,2155669,2155670,2169931,2200599,2200600,2200615,2200625,2200630,2200643,2200667,2200669,2200677,2200682,2200685,2241094,2241095,2241098,2241099,2241100,2241102,2241103,2241104,2241105,2241106,2241108,2241109,2241110,2241113,2140012,2155671,2155672,2155673,2155674,2155675,2155676,2155677,2155678,2155679,2155680,2155681,2155682,2155683,2155684,2155685,2193930,1852756,1853748,1788859,1782709,1788868,1788890,1784142,1789017,2190766,2190790,2190792,2190764,2190912,2192095,2190810,2192113,2192123,2192110,2225950,1965565,2200695,2200734,2200755,2200761,2241125,2241129,2241136,2131565,2183707,2200769,2200774,2200809,2200829,2200836,2200930,2200938,2200960,2241154,2241160,2241162,2241185,2241194,2241196,2192364,2155686,2155687,2155688,2155689,2155690,2155691,2155692,2155693,2155695,2155696,2155697,2155698,2155699,2155700,2155701,2155702,2155703,2155704,2155705,2155706,2155707,2155708,2155709,2155711,2155713,2155714,2155720,2155726,2155731,2144330,1830894,2215407,1785212,2200970,2200981,2200985,2200995,2201003,2201010,2201011,2201013,2201014,2201017,2201018,2201019,2201022,2201027,2201028,2201032,2201035,2201041,2201044,2201045,2201048,2235837,2235851,2235852,2244387,2244390,2244395,2169910,2169913,2169917,2203663,2203668,2203670,2203671,2203673,2203674,2203676,2203677,2203679,2203680,2203682,2203683,2203685,2203687,2203688,2015278,1782749,1784104,2125985,2125986,2125987,2125988,2125989,2125990,2125991,2125992,2125993,2125994,2125995,2125996,2125997,2125998,2178173,2178181,2178188,2178193,2178199,2178204,2178210,2178245,2178250,2178257,2178262,2178268,2178274,2178283,2178289,2178294,2178300,2178306,2178312,2178319,2178323,2178329,2178335,2178341,2178346,2178350,2178353,2141155,2141160,2141164,2141168,2141173,2141179,2141183,2141188,2141193,2141197,2141203,2141208,2141214,2141217,2141220,2143766,2180984,2193948,2193955,2193957,2126023,2126024,2126025,2126026,2126027,2126028,2126029,2126030,2126031,2126032,2126033,2178357,2178361,2178364,2178369,2178373,2178377,2144326,2208208,1854989,2243961,2243962,2243964,2243965,2243966,2243968,2243969,2243970,2243972,2243973,2243974,2243976,2243977,2243978,2243980,2243981,2243983,2243984,2243985,2154569,2203901,2203909,2203915,2203921,2203926,2203932,2204324,2204326,2204327,2204329,2141297,2146654,2146666,2146684,1900252,1852970,1853799,2159089,2220180,2243987,2243988,2243989,2243991,2243992,2243993,2243994,2243996,2244032,2244531,2244532,2244535,2244538,2244540,2244543,2204330,2204331,2204333,2204335,2204337,2204339,2204340,2139883,2181421,1773532,1845692,2141403,2185279,2144322,2144328,2144329,1980329,2152204,1791171,2244034,2139989,2187906,2208151,2146616,2189651,2112773,2053686,2227904,2227907,2227910,2227912,2227915,2227916,2227919,2227924,2129234,2243796,2243802,2189673,2189697,2227927,2227931,2227943,2227944,2227946,2227947,2227948,2227949,2227950,2227952,2227953,2227959,2198594,1853922,1844207,1843845,1852945,1784871,1789223,1784884,1784887,1786101,1784889,1786229,2235847,2146652,2146653,2189701,2189739,2189741,2155009,2015323,2161766,2140281,2140285,2140290,2140291,2140292,2140293,2140299,2140300,2140301,2140302,2140303,2140304,2140305,2140306,2140307,2140308,2140309,2161770,1897862,1830617,2219376,2243939,2243942,2243946,2243949,2243986,2243990,2243995,2243998,2244000,2244005,2244362,2244364,2244366,2192348,2235835,2235848,2234619,2140310,2140311,2140312,2140313,2140314,2140315,2140316,2140317,2140318,2140319,2140320,2140321,2140322,2140323,2140324,2140325,2140326,2140327,2140328,2140329,2140330,2140331,2140332,2140333,2140334,2140335,2140337,2140338,2140339,2140340,2140341,2140342,2140343,2244007,2244009,2244018,2244020,2244022,2244024,2244025,2244035,2244055,2244057,2244069,2244072,2244076,2244079,2244082,2244085,2244088,2244400,2244401,2244402,2125678,2125683,2125704,2125705,2125706,2125707,2125708,2125709,2125710,2125711,2125712,2125713,2125714,2125715,2125716,2125717,2125718,2140344,2140345,2140346,2140347,2140348,2140349,2140350,2140351,2140353,2140354,2140355,2140356,2140357,2140359,2140364,2140371,2140373,2140383,2140391,2140395,2140399,2198593,2235834,2125719,2125721,2125722,2125723,2125724,2125725,2125726,2125727,2125728,2125729,2125730,2125731,2125732,2125733,2125734,2125735,2125736,2125737,2125738,2125739,2125740,2125741,2125743,2125744,2125745,2125746,2125747,2125748,2125749,2125750,2125751,2125752,2125753,2125754,2125755,2125756,2125757,2125758,2125759,2197923,1782581,2152437,2216359,2216361,2216362,2216364,2216365,2216366,2216368,2216370,2216372,2216373,2216374,2216376,2216377,2235832,2140403,2140407,2140412,2140416,2140418,2140422,2140425,2140428,2140431,2140435,2140438,2140440,2140444,2140448,2140452,2140459,2140466,2140471,2140476,2140480,2140485,2140488,2140492,2140497,2140502,2140505,2140508,2140510,2140513,2140517,2140520,2140523,2140526,2140529,2140533,2140537,2140539,2140543,2125760,2125761,2125762,2125763,2125764,2125765,2125766,2125767,2125768,2125769,2125770,2125771,2125773,2125774,2125776,2125777,2125778,2125779,2125780,2125781,2125782,2125783,2125784,2125785,2125786,2125787,2125789,2125790,2125791,2125792,2125793,2125794,2125795,2200335,2216434,2216435,2216437,2216438,2140545,2140551,2140557,2140561,2140566,2140572,2140574,2140577,2140581,2140586,2140589,2140592,2140595,2140598,2140601,2140603,2140606,2183670,2183672,2183673,2244113,2244116,2244119,2244122,2244125,2244128,2244131,2244135,2244138,2244142,2244146,2244150,2244154,2244158,2244162,2244166,2244170,2244174,2244178,2244182,2244186,2244190,2244194,1789264,2125806,2125809,2125819,2125820,2125821,2125822,2125824,2125825,2125826,2125828,2125829,2125830,2125831,2125832,2125833,2125834,2125835,2125836,2125837,2125838,2125840,2125841,2125842,2125843,2125844,2125845,2125846,2125848,2244259,2117656,2244198,2244202,2244206,2244210,2244215,2244220,2244223,2244227,2244230,2244234,2244237,2244241,2244244,2244248,2244249,2244251,2244253,2244254,2244256,2244258,2244261,2244264,2244267,2244269,2244272,2244276,2125849,2125850,2125851,2125852,2125853,2125854,2125855,2125857,2125858,2125859,2125860,2125861,2125862,2125864,2125865,2125866,2125867,2125868,2125869,2125871,2125872,2125873,2125874,2125875,2125876,2125878,2125879,2125880,2125881,2125882,2125883,2125884,2125886,2125887,2125889,2125895,2125896,2125897,2125899,2125900,2125901,2177815,2177818,2177821,2177824,2177827,2177829,2177832,2177835,2177837,2177840,2177843,2177846,2177848,2177851,2144334,2144379,1772306,2140873,2140875,2140878,2140880,2140882,2140884,2140886,2140888,2140890,2140892,2015275,1847115,1847110,1851389,2015277,1852949,1853926,1853805,1855034,1782762,1852986,1853787,1853676,1855007,1854966,1854939,1844225,1850022,2244280,2244291,2244293,2125902,2125903,2125904,2125905,2125906,2125907,2125909,2125910,2125911,2125912,2125913,2125914,2125915,2125916,2125917,2125918,2125919,2125920,2177853,2177855,2177859,2177862,2177864,2177867,2177869,2177872,2177875,2177877,2177880,2177882,2177885,2177889,2177891,2177893,2177896,2177899,2177901,2177904,2177906,2177909,2177911,2177914,2177916,2177919,2177921,2177923,2177926,2177928,2177930,2177933,2177935,2215209,2243818,2243822,2243824,2243825,2167303,2140980,2140984,2140989,2140994,2140998,2141003,2141007,2141013,2141017,2141022,2141026,2141030,2192378,2244296,2244339,2235836,2177938,2177940,2177943,2177946,2177948,2177951,2177953,2177956,2177958,2177961,2177964,2177966,2177969,2177971,2177974,2177976,2177979,2177981,2177984,2177986,2177989,2177992,2177994,2177996,2178000,2178002,2178005,2178007,2178009,2178011,2178015,2178017,2178019,2178023,2178025,2178027,2178031,2178044,2178057,2178074,2178087,1853854,2154903,2243923,2243925,2243927,2141034,2141038,2141042,2141046,2141050,2141055,2141059,2141064,2141068,2141072,2141076,2141080,2141084,2141089,2141093,2141097,2141101,2141104,2141108,2141112,2141116,2141120,2141122,2141125,2141129,2141133,2141137,2141142,2141146,2141151,2112789,2112783,2170596,2015301,1855055,2139912,2229202,2140910,2154911,2140184,2140358,2140360,2140361,2140362,2140363,2140365,2155019,2145710,2191955,2191956,2191957,2191958,2198602,2144441,2015247,2169929,2152442,2192357,2192382,2140015,2140022,2177259,2177262,2177264,2177270,2177274,2177288,2177291,1789664,2183959,2128725,2141412,2130995,2130988,2131022,2191176,2191185,2191192,2191202,2191211,2191220,2191229,2141389,2193954,2193958,2141339,2141288,2144373,2152440,2220202,2221078,2144390,2191238,2191246,2191253,2191261,2191268,2191274,2191278,2146447,1774021,2162153,2138041,2138044,2138047,2138055,2138068,2138084,2138086,2138087,2138088,2138089,2138236,2138237,2138248,1853671,1783991,1853653,1853742,1784081,1784087,1795167,1844066,1845261,2194821,1853721,1855070,1853688,1853910,1782512,1854978,1854887,1854914,1855108,2228920,2228927,2228928,2228930,2138257,2138260,2138263,2138267,2138272,2138277,2138278,2225340,2147275,2150324,2223111,2228945,2228946,2228955,2228956,2146683,2155118,2161765,2161772,2191483,2191489,2191493,2144381,2147277,2130701,2228976,2228977,2228978,2228979,2228980,2228981,2228982,2228983,2228984,2228985,2228986,2228987,2228988,2228989,2228990,2228991,2228992,2128254,2128271,2128273,2128276,2128277,2128279,2128282,2128284,2128286,2128288,2128290,2128292,2128295,2128298,2128300,2128303,2128305,2128307,2128310,2128312,2128315,2128317,2128320,2128322,2128326,2128329,2128332,2128335,2128337,2128339,2128340,2128342,2128343,2128345,2128346,2229405,2140199,2225210,2225213,2228993,2228994,2228995,2228996,2128348,2128349,2128350,2128352,2128354,2128360,2128361,2128362,2128364,2128366,2128368,2128369,2128370,2128372,2128373,2128374,2128376,2128377,2128378,2128379,2128380,2128381,2128383,2128384,2128385,2128386,2128387,2128388,2128390,2128391,2128392,2128393,2128394,2128395,2128397,2128398,2169720,2169721,2177784,2229010,2229011,2229012,2128400,2128401,2128402,2128403,2128404,2128406,2128407,2128408,2128409,2128410,2128411,2128413,2128414,2128415,2128417,2128418,2128419,2146664,1853664,2146318,2146651,1772281,2225219,2225221,2225222,2225223,2225224,2225225,2225226,2225232,2225233,2225237,2229037,2229039,2229040,2229045,2229046,2229047,2229048,2229049,2216748,2225238,2225241,2225242,2128494,2128495,2128496,2128497,2128498,2128499,2128500,2128501,2128502,2128503,2128504,2128507,2128508,2229151,2140806,2140808,2140809,2140810,2091416,2181469,2229103,2229104,2128525,2128526,2229174,2229175,2229176,2229177,2229178,2229179,2229180,2229181,2229183,2229184,2229185,2229186,2229187,2229189,2140887,2140889,2140891,2140895,2140897,2140898,2140900,2183957,2359570,2359571,2359572,2359573,2359574,2359575,2359576,2359577,2359578,2359579,2359581,2359582,2359583,2359584,2359585,2359586,2359588,2359589,2359590,2289925,2289926,2289927,2289930,2289933,2015220,2015245,2359591,2359592,2359593,2359594,2359595,2359596,2359597,2359598,2359599,2359600,2359601,2359602,2359603,2359604,2359605,2359606,2359608,2359609,2359610,2359611,2359612,2359622,2359627,2338835,2206275,2273812,2359630,2359631,2359632,2359633,2359636,2253487,2284725,1981140,2284803,2371764,2371765,2371766,2371767,2309282,2318179,2318188,2318220,2318223,2318224,2318227,2318228,2318229,2318236,2262656,2262668,2359659,2359660,2359661,2359663,2359664,2359665,2359666,2359667,2359668,2359669,2359670,1972942,1972949,2015810,1972185,1972873,1972944,1972140,2017896,2292521,2371812,2371813,2273809,1785352,2292569,2292570,2292571,2292572,2292573,2292574,2292575,2292576,2292577,2292578,2292580,2292581,2292583,2292584,2292585,2292586,2292587,2292588,2292589,2292591,2292592,2292593,2292595,2292596,2292598,2292599,2292601,2292603,2292604,1794042,2269283,2371703,2157382,2292606,2292607,2292608,2292610,2292611,2292612,2292614,2292615,2292617,2292618,2292621,2292623,2292624,2292626,2292627,2292629,2292630,2292632,2292634,2292635,2292637,2292638,2292640,2292641,2292643,2292644,2292646,2292647,2292649,2292650,2292652,2292653,2292654,2292656,2292657,2292659,2292660,2292662,2315193,1646443,2350696,2368479,2368481,1773462,2329898,2265773,2292663,2292665,2292666,2292668,2292669,2292671,2292672,2292674,2292675,2292677,2292679,2292680,2292681,2292683,2292685,2292686,2292688,2292705,2292715,2292717,2292718,1785364,1791024,2273777,2284727,2284800,2292720,2292722,2292723,2292725,2292727,2292728,2292730,2292732,2292734,2292736,2292738,2292740,2292742,2292743,2292745,2292747,2292748,2292750,2292752,2292753,2292755,2292757,2292761,2292762,2292764,2292765,2292767,2292769,2292770,2292772,2292773,2292775,2292777,2292778,2292780,2292781,2292783,2292785,2292786,2292788,2317546,2317548,1898148,2355038,2355041,2355042,2371805,2292790,2292791,2292793,2292795,2292796,2292798,2292800,2292801,2292803,2292805,2292806,2292808,2292809,2292827,2292843,2292844,2292846,2292847,2292848,2292849,2292851,2292852,2317549,2317550,2317551,2317552,2317553,2317554,2317555,2317556,2317557,2317558,2317559,2317560,2317561,2317562,2317563,2317564,2317565,2317566,2317567,2317568,2317569,2317570,2317571,2317572,2317573,2317574,2317575,2317576,2317577,2317578,2317579,2317580,2317581,2317582,2317583,2317584,2317585,2359865,2359866,2284799,1794053,2311404,2355049,2355050,2355052,2355054,2355055,2355057,1986055,1986052,2292856,2292857,2292858,2292860,2292861,2292862,2291363,1981860,1807797,2027403,1972906,1972410,1973036,1972917,1973034,2285684,2371755,2262682,1980591,1982052,1981902,2371676,2371679,2371683,2371693,2371725,2371735,2371798,2371799,2273787,2252700,2317730,2317734,2317735,2317736,2317737,2317738,2317739,2317741,2317743,2317744,2317745,2317746,2317748,2317749,2317750,2317751,2317752,2317754,2317755,2317756,2317757,2317759,2317760,2317761,2317762,2317763,2317765,2317766,2317767,2317768,2317770,2317771,1830598,2317665,2317666,2317667,2317668,2317669,2317670,2317671,2317672,2317673,2317674,2317675,2317676,2317678,2317679,2317680,2317681,2317682,2317683,2317684,2317685,2317686,2317687,2317688,2317689,2317690,2317691,2317692,2317693,2317694,2317695,2317696,2317697,2317698,2317699,2317700,2317701,2317702,1791196,1988343,2032033,1975376,2371697,2371759,2371762,2284694,1971565,2317703,2317704,2317705,2317706,2317707,2317708,2317709,2317710,2317712,2317714,2317716,1988281,2273700,2371749,1984155,1984176,2318517,2318523,2318525,2318527,2318529,2318531,2318534,2318535,2318537,2318539,2318540,2318542,2318544,2318546,2318548,2318550,2318551,2318553,2318555,2318557,2318559,2318561,1975350,2273795,1785398,1971930,2365652,2371702,2280020,2281818,2347585,2347587,2347588,2347591,2347596,2347597,2347598,2347599,2347600,2347602,2347605,2347606,2347607,2347608,2347609,2347610,2347611,2347612,2347613,2347615,2347616,2347618,2262661,2279993,2272310,2272312,1971878,1975379,2194983,2347625,2347630,2347631,2347632,2347633,2347650,2347652,2347655,2347656,2347658,2347659,2272194,2272196,2272198,2272200,2272203,2272205,2272207,2272209,2272211,2272214,2272216,2272218,2272220,2272222,2272224,2272226,2272228,2272230,2272232,2280027,2280540,2280541,2280542,1789224,1988335,1984357,1981638,1988197,1986153,1791089,1988182,2272433,2272436,2272439,2272441,2272444,2272446,2272449,2272451,2272454,2272456,2272459,2272463,2272467,2272471,2272475,2272479,2272483,2272487,2272491,2272495,2272499,2272503,2272507,2272511,2272515,2272519,2272523,2272527,2272531,2272535,2272539,1971539,1986295,1986320,2294134,1772338,2347722,2347733,2272695,2272696,2272698,2272699,2272701,2311425,2272543,2272547,2272551,2272555,2272559,2272563,2272567,2272569,2272572,2272575,2272578,2272581,2272584,2272587,2272590,2272593,2272596,2272599,2272602,2272605,2272610,2272613,2272617,2272620,2272624,2272627,2272631,2272634,2272639,2272642,2272646,2272649,2272653,2272657,2272660,2272663,2272665,2272666,2272669,2280012,2311434,1986053,1986054,1986045,2365645,2265708,2265709,2265710,2265711,2265712,2265715,2272702,2284723,2284747,2284790,2272671,2272672,2272674,2272676,2272677,2272680,2272681,2272683,2272685,2272686,2272688,2272690,2272691,2272693,2272694,2272697,2272700,2272704,2272707,2272711,2272715,2272718,2272722,2272725,2272729,2272732,2272736,2272737,2272740,2272742,2272743,2272745,2272747,2272750,2272754,2272759,2272764,2272768,2272770,2272771,2192557,2323641,2323654,2280031,2315359,1981862,2280041,2255000,2255001,2255002,2255003,2255004,2255005,2255006,2255007,2255008,2255009,2255010,2255011,2255012,2255019,2255020,2255021,2255022,2255023,2255024,2255025,2255026,2049819,2122357,2289840,2272773,2272774,2272776,2272778,2272779,2272781,2272784,2272787,2272790,2272793,2272796,2272800,2272803,2272806,2272810,2272813,2272817,2272820,2272823,2272827,2272830,2272833,2272836,2272839,2272842,2272845,2272848,2272850,2272852,2272854,2272856,2272859,2272861,2272864,2272866,2272868,2272871,2272873,2272882,2272886,2325880,1316654,2029655,1972882,1972856,1972836,2279995,2363210,2272892,2272904,2272888,2272891,2272893,2272895,2272897,2272899,2272901,2272903,2272905,2272908,2272910,2272914,2272917,2272921,2272924,2272928,2272931,2272935,2330583,2330584,2330585,2330586,2330587,2330588,2330590,2330591,2330593,1988256,1984185,1989156,1981641,1847117,2270030,2272262,2286582,1971946,2280042,2285586,2252693,2330595,2330596,2330597,2330598,2330599,2330600,2330601,2330603,2330604,2330605,2330607,2330608,2330609,2330610,2330611,2330612,2330613,2330614,2330615,2330616,2330617,2330618,2330619,2330620,2330622,2330623,2330625,2330626,2330627,2330628,2330629,2330630,2330637,2246316,2315362,2317007,2317955,2317957,2293744,2330638,2330640,2330641,2330642,2330643,2330644,2330646,1971135,2284734,2318033,2318046,2318050,2318052,2318056,2318058,2347305,2347306,2347307,2347308,2347309,1971816,2272264,2272267,2272270,2276608,2318060,2318061,2318064,2318066,2318070,2318071,2318072,2318075,2318077,2318080,2318082,2318085,2318087,2318088,2318091,2318095,2318098,2318101,2318103,2318104,2318107,2318108,2318110,2318112,2318113,2318115,2318117,2318119,2318121,2318124,2318125,2318128,2318129,2318131,2318133,2318135,2318136,2318138,2318140,2318141,2318144,2318145,2347310,2347311,2347313,2347314,2347315,2347316,2347317,2347320,2347321,2347323,2347324,2347325,2347326,2347327,2347328,2347330,2347332,2347333,2347334,2347337,2347338,2318148,2318149,2318151,2318153,2318155,2318156,2318159,2318160,2318163,2318164,2318166,2318168,2318170,2318172,2318175,2318177,2318180,2318183,2318187,2318190,2318194,2318197,2318202,2318205,2318207,2318211,2318214,2318218,2318221,2318225,2318230,2318233,2318237,2318240,2318244,2318246,2318250,2318254,2318259,2318264,2318269,2347339,2347340,2347341,2347342,2347343,2347352,2347353,2347354,2347355,2347356,2347363,2347364,2347366,2347369,2347370,2347372,2280019,2284607,2318274,2318278,2318283,2318288,2318293,2318298,2318303,2318308,2318313,2318317,2318325,2318331,2318336,2318341,2318346,2318355,2318360,2318365,2318370,2318374,2318380,2318387,2318394,2318402,2318408,2318416,2318422,2318425,2318427,2318428,2318430,2318431,2318432,2318434,2318435,2318437,2318438,2318440,2318441,2318443,2347396,2347401,2347402,2347403,2347404,2347405,2347406,2347407,2347408,2347409,2347410,2347411,2347412,2347413,2347414,2347415,2347416,2347417,2347418,2300287,2300292,2300293,2300297,2300298,2300300,2300301,2300306,2300308,2330393,2330394,2330396,2330397,2330398,2330399,2330402,2330403,2330404,2330405,2330406,2330408,2330409,2330410,2330413,2330416,2330419,2330422,2330425,2330428,2330430,2330431,2330432,2330433,2330434,2330435,2330436,2330437,2330438,2330439,2330440,2330441,2330442,2330443,2330444,2330445,2330446,2032093,2318444,2318446,2318447,2318449,2318450,2318452,2318453,2318454,2318456,2318458,2318460,2318461,2318463,2318465,2318466,2318468,2318469,2318471,2318472,2318474,2318475,2318477,2318478,2318480,2318481,2318483,2318485,2318496,2318498,2318499,2318501,2318502,2318504,2318505,2347419,2347420,2347421,2347422,2347423,2347424,2347425,2347426,2347427,2347428,2347430,2347431,2347432,2347433,2347434,2347435,2347436,2347438,2347439,2347440,2347442,2347443,2347444,2347445,2347446,2347447,2347449,2347450,2347451,2347452,2347453,2347454,2347455,2347457,2347458,2347459,2347460,2330447,2330448,2330449,2330450,2330451,2330452,2330453,2330454,2330455,2330456,2330457,2330458,2330459,2330460,2330462,2330463,2330464,2330465,2330466,2330467,2330468,2330469,2330470,2330471,2330472,2330473,2330474,2330475,2330476,2330477,2330478,2330479,2330480,2330481,2330482,2330483,2330484,2330485,2330486,2330487,2330489,2330491,2331981,2331982,2331983,2331984,2332016,2332180,2332321,2332454,2332745,2332823,2332826,2332827,2332828,2332830,2332831,2332832,2332834,2332835,2332836,2332837,2332838,2332839,2332840,2332841,2332843,2332844,2332845,2332846,2332847,2294448,2294454,2361998,2294469,2275122,2275121,2275123,2275125,1981232,1981009,2329858,2318507,2318533,2318536,2318538,2318541,2318543,2318545,2318547,2318549,2318552,2318554,2318556,2318558,2318560,2318562,2318563,2318564,2318565,2318566,2318567,2318568,2318569,2318570,2318571,2318572,2318573,2318574,2318575,2318580,2318582,2318583,2272355,2272366,2272368,2272396,2273712,2330492,2330493,2330494,2330495,2330496,2330497,2330498,2330500,2330501,2330503,2330505,2330506,2330507,2330508,2330509,2330510,2330512,2330513,2330514,2330515,2330516,2330517,2330519,2330522,2330523,2330524,2330525,2330526,2330527,2330528,2330529,2330530,2330531,2330532,2330533,2330534,1794038,2277141,2311437,2311469,2332848,2332849,2332850,2332851,2332852,2332854,2332855,2332856,2332858,2332860,2332861,2332864,2332865,2332866,2332867,2332868,2216618,2350495,2347257,2347262,2347263,2347264,2347265,2347266,2347267,2347268,2347269,2347270,2347271,2347272,2347273,2347274,2347275,2347276,2347277,2347278,2347279,2347280,2347281,2347282,2347283,2347284,2347285,2347287,2347288,2347289,2347290,2347291,2347292,2347293,2347294,2318584,2318586,2318587,2318588,2318589,2318590,2318591,2318593,2318595,2318597,2318598,2318599,2318600,2318602,2318603,2330535,2330536,2330537,2330538,2330539,2330540,2330541,2330542,2330543,2330544,2330545,2330546,2330547,2330548,2330549,2330551,2330552,2330553,2330554,2330555,2330556,2330558,2330559,2330560,2330562,2330563,2330564,2330565,2330566,2330568,2330569,2330573,2330574,2330575,2330576,2330577,2330578,2330579,2330580,2330581,2330582,2332925,1785356,2281954,2281958,2281959,2281960,2281961,2281963,2281964,2281965,2281969,2281970,2281974,2281976,2281977,2281980,2281981,2281982,2281983,2281984,2281985,2281986,2281987,2281988,2286753,2286756,2286758,2286762,2286764,2282425,2282429,2282433,2282437,2282441,2282445,2282449,2282454,2282458,2282462,2282466,2282470,2282473,2282476,2194942,2323651,2282318,2282320,2282322,2282334,2282337,2282339,2282480,2282491,2282542,2282546,2282551,2282555,2282560,2282564,2282569,2282572,2282576,2371299,2284929,1976606,2334487,2285685,2209564,2252671,2273798,2282456,2282461,2282464,2282469,2282474,2282478,2323640,2371396,1825668,2282483,2282487,2282492,2282496,2282501,2282505,2282510,2282514,2282518,2282522,2282527,2282531,2282534,2282538,2122480,2282544,2282549,2282553,2282558,2282563,2282568,2282574,2282578,2282582,2282587,2282592,2282597,2282602,2323628,2323649,2284118,2284702,1975353,2292317,2292318,2292319,2292320,2292321,2292322,2292324,2292325,2292326,2292327,2292328,2292329,2292330,2292331,2292332,2292333,2292334,2292335,2292336,2292337,2292338,2292339,2292340,2292341,2292342,2292343,2292344,2292345,2292346,2282607,2282612,2282616,2282621,2282625,2282629,2282633,2282639,2282644,2282650,2282654,2282660,2104820,2262658,2282664,2282668,2282672,2282677,2282681,2282686,2282690,2282695,2282698,2282701,2282705,2282710,2282713,2282719,2282726,2262654,2262691,2285291,1971634,2281286,2284722,2282732,2282738,2282743,2282750,2282756,2282763,2282769,2282775,2282780,2282786,2363186,1986183,2032744,1981866,2262657,2292438,2292439,2292440,2292441,2292442,2292443,2292444,2292445,2292446,2292447,2292448,2292449,2292450,2292451,2292452,2292453,2292454,2292455,2292456,2292457,2292458,2292459,2292460,2292461,2292462,2292464,2292465,2292466,2292467,2292468,2292469,2292470,2292471,2292472,2292473,2292474,2292476,2292477,2292478,2292479,2292480,2253395,2253396,2253397,2253398,2253399,2253400,2253401,2253402,2253403,2253404,2253405,2253406,2253407,2253408,2253409,2253410,2253411,2253412,2253413,2253414,2253415,2253416,2253417,2282790,2282797,2282803,2282809,2282817,2282826,2282833,2282838,2350454,2255647,2255650,2255652,2255653,2255654,2255655,2255656,2255657,2255661,2255663,2255664,2255665,2255667,2255668,2255669,2255670,2255671,2255672,2255673,2255674,2255675,2255676,2255677,2292484,2253418,2253419,2282872,2282876,2282881,2282887,2282892,2282897,2282903,2282908,1986134,1981897,2031401,1981900,2255482,2255483,2255484,2334501,2255678,2255679,2255680,2255681,2255682,2255683,2255684,2255685,2255686,2255687,2255688,2255691,2255692,2255695,2255696,2255697,2255698,2255699,2255700,2255701,2255702,2255705,2273786,2282913,2282919,2282924,2282929,2282935,2282941,2282945,2282951,2282955,2282961,2282965,2311424,2281287,2032012,2282971,2282975,2282980,2282985,2282991,2282995,2283001,2283008,2283013,2283019,2283025,2283032,1981871,2280006,2283036,2283040,2283044,2283047,2283051,2283055,2283058,2283062,2283066,2283069,2283073,2283077,2283080,2283084,2283088,2283091,2283095,2283099,2283100,2283102,2283104,2283105,2283107,2283109,2283110,2283112,2283115,2283122,2283123,2283125,2282294,2282295,2282301,2282304,2282308,2282312,2282316,2282317,2282321,2282323,2282327,2282331,2282333,2282336,2282338,2282342,2282345,2282349,2282353,2282356,2282358,2282362,1981894,1984351,2293081,2293082,2293085,2293089,2293096,1636777,2282293,2283163,2283173,2283190,2283192,2283193,2323637,2282365,2282368,2282371,2282374,2282378,2282382,2282396,2282400,2282404,2282408,2282412,2282416,2282420,2282423,2296548,2296549,2296550,2296551,2296552,2296553,2296554,2296555,2296556,2296557,2296558,2296559,2296560,2296561,2296562,2296563,2296564,2296565,2296567,2296568,2296569,2296570,2268877,1855101,2311475,2202082,2202096,2202097,2311479,2202083,2311481,2311482,2311483,2311484,2311486,2311487,2311488,1794484,2281950,2281951,2281953,2283195,2283197,2283198,2283200,2283202,2283203,2283205,2283206,2283210,2283214,2283217,2283220,2283224,2283227,2283230,2283234,2283237,2283240,2283244,2283247,2283260,2283264,2273800,2291330,2291329,2311492,2243491,2243492,2307511,2307512,2307513,2307514,2055757,2055760,1980930,2333019,2333020,2333021,2333022,2333023,2333024,2333025,2252689,1975664,1788691,2311455,2315365,2252751,2194943,2333048,2333049,2333050,2333051,2333052,2333053,2333054,2333055,2333056,2333058,2333059,2333060,2333061,2333062,2280037,2328014,2328017,2328022,2328025,2328031,2311444,2280016,2333090,2333091,2333092,2333093,1982111,2259518,2307673,2307674,2307676,2307677,2307679,2262663,2278690,2253491,2253496,2311435,2333159,2209556,1772237,2323653,2284715,1965527,2255499,2255500,2255501,1791190,2333202,2333203,2333204,2333205,2333206,2333207,2333208,2333209,2333210,2333211,2333212,2333213,2333214,2333215,2333216,2333217,2333218,2333219,2333220,2333221,2333222,2269209,2273784,2333223,2333224,2333225,2333226,2333227,2333228,2333229,2333230,2333231,2333232,2333233,2333234,2333235,2333236,2333237,2259386,2259387,2273781,2269212,2269213,2269216,2269219,2269220,2269221,2269227,2269229,2269232,2269233,2269239,2269241,2269242,2269243,2269247,2269248,2269251,2315149,2273783,2284608,2269254,2269263,2269266,2269269,2269272,2269273,2269274,2269276,2269279,2269280,2269281,2334495,2334499,2259464,2259466,2259468,2259469,2259471,2259473,2284928,2244831,2244832,2253421,2253422,2253423,2253424,2259475,2259477,2259478,2259480,2259482,2259485,2259487,2259489,2259491,2259494,2259496,2259497,2259499,2259501,2259507,2265271,2275126,2342767,2342769,2342773,2342780,2342782,2342783,2280011,2244851,2280025,2323655,2259546,2259547,2259549,2259551,2259554,2259556,2259558,2259560,2259562,2259564,2259566,2259568,2259570,2259572,2259574,2259576,2259578,2259580,2259582,2259584,2259586,2259588,2342785,2342790,2342799,2342804,2342805,2342806,2342812,2342813,2342814,2307436,2307437,2307438,2307439,1941201,2252657,1796484,1785431,2280008,2342816,2342819,2342820,2342823,2342827,2342828,2342832,2342836,2342838,2342840,2342841,2342842,2342843,2307440,2307441,2307442,2307443,2307444,2307445,2307446,2307447,2307448,2307449,2307450,2307451,2307452,2307453,2307454,2307455,2307456,2307457,2307458,2307459,2307460,2307461,2307462,2307463,2307464,2307465,2307466,2307468,2307469,2307470,2307471,2307472,2307473,2307474,2307475,2307476,2280034,1971496,2342846,2342847,2342855,2342856,2342858,2342859,2342860,2342861,2342906,2342909,2342910,2342914,2342915,2307477,2307478,2307484,2307485,2307486,2307487,2307488,2307489,2307490,2307491,2307492,2307493,2307494,2307495,2307496,2055762,2406281,2406282,2406283,2378826,2380264,2380265,2380266,2380267,2380268,2421094,2420723,2420789,2377310,2194654,2381353,2462695,2470124,2470125,2470126,2470127,1984095,2454286,2469563,2469566,2469568,2469569,2469571,2469572,2469574,2469575,2469577,2469578,2469579,2469581,2469582,2469584,2469585,2469586,2469588,2469589,2469590,2469592,2469593,2469594,2469596,1984376,1984387,1984388,2462403,2462423,2462433,2462468,2462600,2462694,2462702,2462747,2427568,2427575,2427583,2462503,2470373,2377285,2420760,2420976,2258533,1971713,2444393,2444395,2444398,2444400,2444403,2444405,2444408,2444409,2469501,2366605,2426758,2470128,2470129,2470130,2470131,2470132,2470133,2470134,2470136,2470137,2470138,2470139,2470140,2470141,2393719,2394273,2393722,2444425,2469597,2469599,2469600,2469601,2469603,2469604,2469606,2469607,2469609,2469610,2469612,2469613,2469615,2469616,2469618,2469619,2469621,2469622,2469624,2469625,2469627,2469629,2469630,2469631,2469633,2469634,2469636,2469637,2469639,2469641,2469643,2469645,2469648,2469649,2469651,2469653,2469654,2417112,2417113,2417114,2417115,2417116,2417117,2417118,2417119,2417120,2417121,2417122,2417123,2417124,2417125,2417126,2417127,2417128,2417129,2417130,2417131,2417132,2417133,2417134,2417135,2417136,2417137,2417139,2417140,2417141,2417143,2417145,2417146,2417147,2417148,2417149,2417150,2417151,2417152,2417153,2417154,2194919,2377292,2420775,2417155,2417156,2417157,2417158,2417159,2417161,2417162,2417163,2417164,2417165,2417166,2417167,2417169,2417170,2417171,2417172,2417173,2417174,2417175,2417176,2417177,2417178,2417179,2417180,2417181,2417182,2417183,2417184,2417185,2417186,2417187,2417188,2417189,2417190,2417191,2417192,2417193,2417194,2417195,2462356,2462421,2462654,2462732,2417196,2417197,2417198,2417199,2417200,2417202,2417203,2417204,2417205,2417206,2417207,2417208,2417209,2417211,2417212,2417213,2417214,2417216,2417217,2417218,2417219,2417220,2417222,2417223,2417224,2417226,2417227,2417228,2417229,2417230,2417232,2417233,2417234,2417235,2417236,2417238,2417239,2417240,2462395,2462407,2462440,2462482,2462692,2462704,2469541,2469543,2389824,2417241,2417242,2417243,2417244,2417245,2417246,2417247,2417248,2417251,2417252,2417253,2417254,2417255,2417257,2417258,2417273,2417274,2417276,2417278,2417280,2417281,2417283,2417285,2392270,2377263,2454456,1226576,2469675,2469676,2469678,2469679,2469680,2377286,2462415,2417286,2417287,2417288,2417289,2417290,2417291,2417292,2417293,2417295,2417296,2417297,2417298,2417299,2417300,2417301,2417302,2417303,2417304,2417305,2417306,2417307,2417308,2417309,2417310,2417312,2417313,2417314,2417315,2417316,2417317,2417319,2417320,2417321,2417322,2417323,2417324,2417325,2417327,2417328,2381337,2393143,2454458,2454459,2454460,2470369,2470370,2470371,2381328,2417329,2417330,2417331,2417332,2417333,2417334,2417335,2417336,2417338,2417339,2417340,2417342,2417343,2470103,2470104,2470105,2470106,2470107,2470108,2470109,2470110,2470111,2470113,2470114,2470115,2470116,2470117,2470118,2470119,2470120,2470122,2470123,2462396,2462493,2462618,2462761,2420796,2421070,2373101,2373104,2373105,2373106,2373109,2373110,2373111,2373113,2373114,2373115,2373116,2373117,2373118,2373119,2373120,2373121,2373122,2373123,2373124,2373125,2373126,2373127,2373128,2373129,2373130,2373131,2373132,2373133,2373134,2373135,2373136,2373137,2434680,2420695,2421064,2373138,2373139,2373140,2373141,2373142,2373143,2373144,2373146,2373147,2373148,2373149,2373150,2373151,2373152,2373153,2373154,2373155,2373156,2373157,2373158,2373159,2373160,2373161,2373162,2373163,2373164,2373165,2373167,2373168,2373169,2373170,2373171,2373172,2373173,2373174,2373175,2373176,2373177,2373178,2377304,2451721,2451731,2451749,2476170,2444526,2444529,2444530,2444532,2444535,2444537,2373179,2373180,2373181,2373182,2373183,2373185,2373186,2373187,2373188,2373189,2373190,2373191,2373192,2373193,2373194,2373195,2373196,2373197,2373198,2373199,2373201,2373202,2373203,2373204,2373206,2373207,2393124,2393715,2393822,2394264,2394270,2394256,2202099,2393721,2330271,2393724,2424285,2330269,2393716,2329539,2330264,2451761,2451778,2451782,2377354,2397619,2397631,2397633,2397636,2397638,2397640,2397643,2397645,2444604,2444608,2444610,2444613,2444615,2444618,2444620,2444621,2444624,2444625,2444626,2444628,2444629,2444631,2444632,2444633,2444635,2444636,2444637,2444639,2444640,2444641,2444643,2444644,2444646,2373208,2373209,2373210,2373211,2373212,2373213,2373214,2373215,2373216,2373217,2373218,2373219,2373221,2373222,2373223,2373224,2373225,2373226,2373227,2373228,2373229,2373230,2373231,2373236,2373237,2373238,2373239,2373240,2373241,2373242,2373243,2373244,2373247,1984359,2426741,2426760,2397646,2397649,2397651,2397654,2397655,2397658,2397660,2397662,2397664,2397666,2397667,2397670,2397672,2397673,2397676,2397677,2397681,2397684,2397687,2397689,2444647,2444648,2444650,2444651,2444653,2444654,2444656,2444657,2444658,2444660,2444661,2444663,2444664,2444665,2444667,2444668,2444669,2444671,2444672,2444674,2444675,2444677,2444678,2444680,2444681,2444683,2444684,2444685,2444687,2444688,2444689,2444691,2444692,2444694,2444695,2444697,2444698,2444700,2444701,2444703,2212023,2373248,2373249,2373250,2373251,2373252,2373254,2373255,2373257,2373258,2373260,2373261,2373263,2373264,2373266,2373267,2373269,2373270,2373272,2373273,2373275,2373276,2373278,2373279,2401324,2401325,2401326,2397691,2397694,2397697,2397701,2397703,2397706,2397708,2397710,2397713,2397714,2397717,2397719,2397720,2397723,2397724,2397727,2397729,2397731,2397733,2397737,2397739,2397741,2444704,2444706,2444707,2444709,2444710,2444711,2444713,2444714,2444716,2444717,2444718,2444720,2444721,2444724,2444726,2444729,2444731,2444734,2444736,2444739,2444742,2444744,2444747,2444750,2444752,2444755,2444757,2444758,2444760,2444763,2444766,2444768,2444770,2444771,2444777,2462391,2462393,2462465,2462480,2462494,2377238,2397744,2397745,2397748,2397750,2397753,2397754,2397757,2397759,2397761,2397765,2397768,2420700,2420985,2421023,2421230,2444787,2444790,2426746,1988696,2430485,2431908,2462523,2462567,2462658,2462688,2462729,2397773,2397776,2397780,2397784,2397822,2397829,2397832,2397836,2397840,2397842,2444918,2444951,2444954,2444957,2444960,2444963,2444966,2444969,2444972,2444975,2444978,2444981,2444983,2444985,2421072,2431910,2431911,2431912,2431913,2431914,2431915,2431916,2431917,2431919,2431920,2431921,2431922,2431923,2431924,2431925,2431926,2431927,2431928,2431929,2431930,2431931,2431932,2431933,2431934,2431935,2431936,2431937,2431939,2431940,2431941,2431943,2431944,2431945,2431946,2431947,2431948,2431949,2431950,2431951,2463735,2028740,2028530,2029376,1972896,1972923,1972639,2397907,2397912,2397916,2397921,2444986,2444988,2444989,2444991,2444993,2444994,2444996,2444997,2444999,2445000,2445002,2445004,2445005,2445007,2445008,2445010,2445012,2445014,2445015,2445017,2445018,2445020,2445021,2445024,2445026,2445029,2445032,2445035,2445037,2445040,2445044,2434134,2434135,2434136,2434137,2434138,2434144,2434145,2434146,2434147,2434148,2434149,2434150,2434151,2434152,2434153,2434154,2434155,2434156,2434157,2434159,2434160,2435876,2435898,2431952,2431953,2431954,2431955,2431956,2431957,2431958,2431959,2431960,2431961,2431962,2431964,2431965,2431966,2431967,2431968,2431986,2431991,1972223,2028245,1972704,2196015,2462392,2462418,2462424,2462531,2462548,2462554,2378948,2397931,2397937,2397942,2397948,2397953,2397959,2397965,2397971,2397976,2397981,2397987,2397992,2397998,2398004,2398010,2398015,2398020,2398025,2398030,2398035,2398041,2398047,2398053,2398059,2398064,2398069,2398074,2339615,2434161,2434162,2434163,2434164,2434165,2434166,2434168,2434169,2434170,2434171,2434172,2434173,2434174,2434175,2434176,2434177,2434178,2434179,2434180,2434181,2434182,2434184,2434185,2434186,2434187,2434188,2434189,2434191,2434192,2434193,2434194,2434195,2434196,2434197,2434198,2434199,2434200,2431992,2431993,2431994,2431995,2431996,2431997,2431998,2432000,2432001,2432002,2432003,2432004,2432005,2432006,2432007,2432008,2432009,2432010,2432011,2432012,2432013,2432014,2432015,2432016,2432017,2432018,2432020,2432021,2432022,2432023,2432024,2432025,2432026,2432027,2432028,2432029,2432030,2432031,2432032,2432033,2403859,2462615,2398079,2398084,2398088,2398092,2398097,2398101,2398110,2398114,2398119,2398123,2398128,2398132,2398136,2398139,2398142,2374389,2434201,2434202,2434203,2434204,2434205,2434206,2434207,2434208,2434209,2434210,2434211,2434212,2434213,2434214,2434215,2434216,2434217,2434218,2434219,2434220,2434221,2434222,2434223,2434224,2434225,2434226,2434227,2434228,2434229,2434230,2434231,2434232,2434233,2434234,2434235,2434236,2434237,2434238,2434239,2432034,2432035,2432036,2432037,2432038,2432040,2432041,2432042,2432043,2432044,2432045,2432046,2432047,2432048,2432049,2432050,2432052,2432054,2432055,2432058,2432059,2432060,2432061,2432062,2432063,2432065,2432067,2432068,2432069,2432070,2432071,2432072,2432073,2432074,2432075,2432076,2432077,2432078,2432079,2432080,2449542,2194913,2192386,2374444,2374446,2374447,2374449,2374451,2374453,2374459,2374460,2374462,2374464,2374465,2374466,2374467,2374469,2374472,2374473,2374474,2374475,2374477,2374479,2374480,2374481,2374483,2374484,2374485,2374486,2374488,2374489,2374490,2434240,2434241,2434242,2434243,2434244,2434245,2434246,2434247,2434248,2434249,2434250,2434252,2434253,2434254,2434258,2434267,2434270,2434271,2434272,2434273,2434274,2434275,2434276,2434277,2434279,2432081,2432082,2432084,2432085,2432086,2432096,2432097,2432098,2432099,2432100,2432101,2432102,2432103,2432104,2432105,2432106,2432107,2432108,2432109,2432110,2432111,2432112,2432113,2432114,2432115,2432117,2432118,2432119,2432120,2432121,2347095,2374491,2374493,2374899,2374900,2374906,2374908,2417702,2434280,2434281,2434282,2434283,2434284,2434285,2434286,2434288,2434293,2432122,2432123,2432124,2432125,2432126,2432128,2432129,2432130,2432132,2435124,2435125,2435127,2435130,2435132,2435134,2435135,2435143,2435146,2374919,2374920,2374921,2374922,2374923,2417717,2417719,2443152,2443153,2443154,2212048,1985579,2476313,2476314,2434392,2434394,2434395,2434399,2434402,2420703,2420973,2421225,2462715,2462719,2462750,2462754,2462762,2462792,2462794,2379665,2379667,2379668,2379670,2379671,2379672,2379673,2436117,2462397,2417986,2417987,2417988,2417989,2417990,2417991,2418002,2435977,2381855,2381862,2381864,2381865,2436899,2443203,2443204,2443205,2443206,2418003,2418004,2418005,2454863,2454864,2381866,2381867,2381868,2381869,2381870,2381871,2381872,2381873,2381874,2381875,2381876,2381877,2381878,2381879,2381880,2381891,2381892,2381893,2381894,2381895,2377297,2454865,2454866,2454868,2381896,2381897,2381898,2381899,2381900,2381901,2381902,2381903,2381904,2381905,2430476,2426762,2462594,2420799,2372200,2381906,2381907,2381908,2381909,2381910,2381911,2381912,2381913,2381914,2381917,2381918,2381919,2381920,2381921,2398255,2454482,2454483,2454484,2454485,2454486,2454488,2454489,2454490,2454491,2454493,2454495,2454496,2454497,2454499,2454500,2454501,2454502,2454503,2454504,2454506,2381930,2381931,2381934,2381935,2381936,2381937,2381938,2381939,2381945,1980236,2398332,2398336,2398340,2398343,2454507,2454508,2454509,2454510,2454511,2454512,2454513,2454514,2454515,2454517,2454518,2454519,2454520,2454521,2454522,2454523,2454524,2454525,2454527,2454528,2454529,2454530,2454531,2454532,2454533,2454534,2454535,2454536,2454537,2454538,2454540,2454541,2454542,2454543,2454544,2381946,2381947,2381948,2381949,2381950,2381951,2381952,2417889,2417890,2417891,2417892,2417893,2417894,2417895,2417896,2417897,2417898,2417899,2417900,2417901,2417902,2417903,2454545,2454546,2454547,2455026,2455027,2455028,2455030,2455031,2455032,2455033,2455034,2455035,2455036,2455037,2455038,2455040,2381998,2381999,2382000,2382001,2382002,2382003,2382004,2382005,2382006,2382007,2382008,2382009,2382010,2382011,2382013,2377229,2258530,2377356,2454597,2454598,2454599,2454600,2454601,2454602,2454603,2454604,2454605,2454606,2454608,2454609,2454610,2455041,2455042,2455044,2455045,2455046,2455047,2455049,2455050,2455052,2455053,2455054,2455055,2455056,2455057,2455058,2455059,2455060,2455061,2455062,2455063,2455064,2455065,2455066,2455067,2382014,2440799,2440803,2440806,2440810,2377287,2454611,2454612,2454615,2454617,2454618,2454620,2454621,2454622,2454623,2454625,2454626,2454646,2455068,2455069,2455070,2455071,2455072,2455074,2455075,2455077,2455078,2455079,2455080,2455081,2455082,2455083,2455084,2455085,2455086,2455087,2455088,2455089,2455091,2455093,2455095,2455097,2455099,2455100,2455101,2455103,2455104,2455106,2455107,1975425,2440814,2440822,2440823,2440824,2440825,2440827,2440834,2440835,1985303,2462535,2462559,2462580,2454648,2454649,2454650,2454672,2454673,2455108,2455109,2455111,2377296,2382106,2382107,2382108,2382109,2382110,2382111,2382112,2382113,2382114,2382115,2440839,2440841,2440847,2440848,2440849,2440851,2440856,2440857,2440860,2440861,2417904,2417905,2417906,2417907,2417908,2417909,2417910,2417911,2417912,2417913,2454697,2454698,2454699,2454701,2454702,2454704,2454706,2454707,2454709,2454710,2454711,2454712,2454713,2454714,2454715,2440868,2440871,2440875,2440878,2440880,2440884,2440887,2440888,2440893,2440894,2440896,2440897,2440898,2469286,2469909,2417914,2417915,2417916,2417917,2417918,2417919,2417920,2417921,2454717,2454718,2454720,2454721,2454723,2454725,2454726,2454727,2454728,2406668,2406675,2406680,2406683,2406684,2440902,2440903,2440910,2440911,2440912,2440913,2440914,2440915,2440916,2440917,2440918,2440920,2440921,2440922,2440923,2440924,2440925,2440930,2440933,2377290,2469416,2469460,2469462,2469464,2469467,2469469,2469471,2469950,2469952,2469955,2469957,2326758,2326757,2326760,2326762,2326903,2430470,2406697,2406698,2455416,2455417,2455418,2455419,2455420,2455421,2455422,2455423,2455424,2455425,2455426,2455427,2455428,2455429,2455430,2455431,2455432,2455433,2455434,2455435,2455436,2455437,2440945,2440946,2440951,2440955,2462401,2469514,2469517,2469520,2469525,2469529,2462430,2469993,2469994,2469997,2470000,2417951,2417952,2417953,2417954,1984099,1984073,1984088,1791197,1791140,1981882,2420806,2421022,2421222,2440959,2440961,2440964,2440965,2440969,2440971,2440972,2440973,2440974,2440975,2440976,2440981,2440982,2440983,2440984,2440985,2440987,2440988,2440989,2440993,2379615,2469576,2469580,2469583,2469587,2469591,2469595,2469598,2469602,2469605,2469608,2469611,2469614,2469617,2469620,2469623,2469626,2469628,2469632,2469635,2469638,2469642,2469646,2469650,2462483,2462745,2417974,2455497,2426744,2440999,2441000,2441008,2441011,2441017,2441019,2441023,2441027,2462414,2462419,2462420,2462461,2462476,2462478,2462515,2462527,2462637,2462709,2469347,2469349,2469351,2469353,2469355,2469357,2469360,2469362,2379635,2379636,2379639,2379643,2379647,2469652,2469656,2469659,2469662,2469665,2469668,2469671,2469674,2469677,2469681,2469686,2469691,2469695,2469699,2469704,2469708,2469713,2469717,2469720,2469724,2469728,2469732,2469736,2358662,2358678,2358689,2426753,2441030,2377300,2378840,2444886,2444888,2444890,2444892,2444895,2444897,2444899,2444901,2462596,2420801,2462390,2462780,2258524,2377288,2426780,2464262,2464264,2464265,2464268,2464280,2464300,2464305,1975397,1984363,2443159,2378956,2464317,2464321,2464341,2464364,2421060,2462488,2462572,2462577,2462700,2374576,2374577,2420998,2464394,2377355,2358795,2358818,2358762,2329121,2269305,2436082,2426750,1771742,2444227,2443069,2443070,2443072,2443074,2443075,2443078,2443079,2443080,2443081,2443082,2403709,2403710,2386744,2386745,2462425,2417067,2417068,2417069,2417070,2417071,2417072,2417073,2417074,2417075,2417076,2417077,2417078,2417079,2417080,2417081,2417082,2417083,2417084,2417085,2209057,2462645,2417086,2417087,2417088,2417089,2417090,2417091,2417092,2417093,2417094,2417095,2417096,2417097,2417098,2417099,2417100,2417101,2417102,2417103,2417104,2417105,2417106,2417107,2417108,2417109,2417110,2462398,2462584,2462708,2462735,2462517,2462589,2476509,2208693,2208696,2462591,2444388,2444396,2444397,2444399,2444401,2444436,2444440,2444443,2444447,2444450,2377242,2465785,2465786,2476532,2476543,2476547,2392251,2392253,2392254,2392256,2392259,2392261,2392267,2392271,2392273,2462547,2462405,2462444,2378960,2462538,2339614,2462521,2462570,2462666,2462684,2462705,2462706,2462711,2421025,2421212,2421020,1972335,2347093,2213214,2462649,2476568,2476570,2476574,2476576,2476580,2476582,2476583,2377318,2389645,2392292,2511930,2511490,2511492,2511516,2188429,2188464,2189340,2189841,2189333,2189345,2188705,2188766,2188636,2189261,2190800,2190904,2190870,2192523,2488410,2488957,2488839,2488843,2488338,2508225,2190312,2511554,2511556,2511557,2511559,2511560,2189189,2190940,1981892,1982120,2209395,2485482,2508039,2549918,2549919,2549920,2508272,2497190,2497195,2497201,2497203,2497207,2497208,2497209,2497212,2497213,2497214,2497215,2497218,2497219,2497220,2497221,2497222,2497223,2497224,2549921,2549922,2549923,2479872,2479884,2479886,2479888,2479890,2479892,2479894,2479897,2479899,2479901,2479904,2479906,2479908,2479910,2479912,2479915,2479917,2479919,2479921,2479923,2479925,2479928,2194656,2497226,2497228,2497230,2497231,2497232,2497235,2497237,2497239,2497241,2497242,2497243,2497245,2497248,2497250,2497252,2497253,2497254,2497255,2497257,2497258,2497259,2497260,2497263,2497264,2497265,2194287,2550138,2550156,2497266,2497267,2497268,2497269,2497270,2497271,2497273,2497274,2497276,2485524,2188952,2550169,2507923,2511481,2489274,2507994,2525313,2525319,2480140,2190878,2473919,2473838,2329721,2473866,2473913,2480283,2480286,2480290,2480293,2480297,2480300,2480304,2480325,2480329,2480366,2480371,2545963,2545966,2545967,2545971,2545975,2480426,2480428,2507919,2371242,2194655,2507990,2508318,2482266,2545760,2545761,2545762,2545763,2545764,2550101,2550103,2550105,2550108,2550122,2550124,2550126,2507917,2189839,2189833,2553291,2553304,2508304,2192238,2443352,2341208,2190371,2549464,2190365,2553908,2511863,2511864,2511865,2511866,2511867,2511482,2511485,2511487,2511489,2512460,2512461,2512462,2549978,2549979,2549987,2549988,2549989,2549990,2549991,2549992,2549993,2549994,2549995,2549996,2549997,2549998,2550997,2551001,2193876,2553999,2511868,2511869,2511870,2511871,2511872,2511873,2511874,2511875,2549999,2550000,2550001,2550002,2550004,2550005,2550006,2550008,2550011,2550013,2550024,2550028,2550033,2550036,2550040,2550045,2550048,2550051,2550054,2550058,2550061,2550064,2550067,2550070,2550072,2550075,2550077,2550081,2550083,2550086,2550089,2550091,2550094,2550096,2550098,2488951,2498164,2488427,2488828,2498188,2192031,2500916,2431593,2410101,2431597,2481920,2329725,2410037,2431601,2431640,2431820,2507966,2520189,2520190,2520191,2520192,2520193,2520194,2520195,2520196,2520197,2475595,2392364,2392372,2392374,2392378,2392376,2482105,2482357,2535313,2535314,2535315,2535316,2535317,2535318,2535322,2535323,2535324,2535325,2535326,2535327,2535328,2535329,2535330,2535331,2535332,2535333,2535334,2535335,2535336,2535337,2535338,2535339,2526252,2275922,2535340,2535341,2535342,2535343,2535344,2535345,2535346,2535347,2535348,2535349,2535350,2535351,2535352,2535353,2535354,2535355,2535356,2535357,2535358,2535359,2535360,2535361,2535362,2535363,2535364,2535365,2535366,2535367,2535369,2535370,2535371,2535372,2535373,2535374,2535375,2535376,2535377,2535378,2535379,2194882,2192379,2192383,2190730,2190963,2212106,2500440,2500441,2500442,2500443,2508048,1975356,2507897,2507925,2508593,2535380,2535381,2535382,2535383,2535384,2535386,2535387,2535388,2535389,2535390,2535392,2535394,2535397,2535401,2535405,2535408,2535412,2535416,2535419,2535423,2535431,2192751,2192760,2192755,2500085,2500086,2500087,2500088,2500089,2500090,2500091,2500092,2500094,2500095,2500096,2500097,2500098,2500099,2500100,2500105,2500108,2443340,2535544,2535623,2535625,2507921,2500111,2500112,2500113,2500114,2500115,2500120,2500121,2500126,2500127,2500128,2500129,2500130,2189616,2189608,2535627,2535628,2535633,2535640,2535653,2535655,2535656,2535663,2535723,2535725,2535727,2535729,2535734,2535735,2500131,2500132,2500134,2500135,2500568,2500569,2500570,2500571,2500572,2500573,2500574,2500575,2500576,2500577,2500578,2500579,2190355,2565134,2565523,2535737,2535739,2535828,2511399,2511400,2511401,2511402,2511403,2511404,2511405,2511406,2511407,2511408,2511409,2511410,2511411,2500144,2500145,2500580,2500581,2500582,2500583,2190971,2492344,2492345,2552466,2492767,2535864,2535866,2535868,2535871,2535873,2535875,2535877,2535879,2535882,2535914,2535917,2535919,2535920,2535922,2535923,2511413,2511414,2511415,2511416,2511417,2511418,2511419,2511420,2511421,2511422,2511423,2511424,2511425,2500155,2500156,2500168,2500169,2443348,2433019,2443307,2192017,2565137,2565139,2500170,2500171,2500172,2500173,2500174,2500175,2500176,2500177,2500179,2500180,2500181,2500182,2500183,2500184,2500185,2500186,2500187,2500188,2500189,2500190,2500191,2500192,2500193,2500194,2500195,2500196,2500197,2500198,2500199,2500200,2500201,2500202,2500203,2500204,2212763,2544806,2500205,2500208,2500209,2500210,2500211,2500212,2500213,2500214,2500215,2500216,2500217,2500218,2500219,2188577,2189613,2189843,2507941,1971995,2557286,2557293,2212547,2192524,2549463,1985574,2190734,2501118,2501119,2501120,2190910,2565547,2520182,2520183,2520184,2520185,2520186,2520187,2520188,2507924,2507985,2192412,2507931,2190762,2573703,2573705,2573706,2573708,2573709,2573711,2573712,2573713,2573714,2573721,2573723,2573726,2573727,2573728,2573729,2489299,2508063,2482271,2507940,2548933,2548935,2548987,2548938,2548942,2190745,2508043,2553532,2431641,2190796,2190414,2549452,2549465,2193890,2329084,2473870,2190937,2190565,2554159,2192038,2192548,2492378,2410110,2122280,2192698,2209268,2553907,2548909,2548902,2548906,2548911,2548934,2548941,2548916,2548952,2548919,2573774,2573777,2573778,2573780,2573784,2507967,2573849,2573852,2212046,2212065,2188897,2188498,2188840,2545575,2545556,2545558,2545577,2545560,2545568,2545386,2545582,2545394,2545584,2545496,2545542,2545544,2545555,2496933,2545591,2492396,1386337,2386497,2565520,2573679,2573681,2573687,2573688,2573689,2573691,2573693,2573695,2573697,2573699,2573700,2573702,2507968,2507983,2209325,2212049,2212555,2212597,2212051,2565545,2508023,2573804,2573805,2573808,2573815,2507922,2565135,2565516,2565528,2551725,2551726,2551729,2551732,2551734,2551736,2359977,2551754,2258676,2539921,2573747,2573753,2573756,2573758,2573759,2360018,2189626,2360028,2360117,2360120,2359964,2574637,2359974,2359984,2359957,2520294,2573822,2573841,2480159,2480161,2480165,2480167,2480168,2480170,2480172,2480174,2480175,2480176,2480178,2480179,2480181,2550104,2550106,2550107,2550109,2550110,2550112,2550114,2550116,2550118,2550119,2550121,2550123,2550125,2550127,2550128,2550130,2550132,2507950,2507962,2507964,2190946,2482263,2550133,2190725,2480543,2480544,2480546,2480548,2480550,2480551,2480553,2480554,2480556,2524720,2524761,2524765,2194652,1965418,2192384,2493326,2493328,2493329,2493330,2493331,2493332,2493333,2493334,2493335,2493336,2493337,2493338,2493339,2493349,2493350,2493351,2493352,2493353,2493354,2493355,2493356,2493357,2493358,2493359,2493360,2493361,2493362,2524796,2524799,2524801,2524805,2524807,2524810,2524814,2524817,2524819,2524822,2524824,2524827,2524829,2524831,2524835,2524837,2524840,2524842,2524843,2524844,2524845,2524847,2524848,2499717,2499718,2499719,2499720,2499721,2499722,2499723,2499724,2499725,2499726,2499727,2499728,2499729,2499730,2499731,2499732,2499736,2499737,2499738,2499739,2499740,2499741,2189934,2189925,1790595,2493933,2493934,2192324,2192129,2190424,2190471,2493363,2493364,2192701,2515846,2551038,2181433,2181439,2493408,2508052,2524849,2524850,2524852,2524854,2524855,2524856,2524857,2524859,2524860,2524861,2524862,2524865,2524866,2524867,2524868,2524869,2524870,2524872,2524873,2524874,2524876,2524878,2524879,2524881,2524882,2524883,2524885,2524886,2524887,2524888,2524889,2524891,2524892,2524893,2524894,2493469,2493470,2493471,2493472,2493473,2493478,2493483,2493484,2524895,2524897,2524898,2524899,2524900,2524902,2524903,2524904,2524906,2524907,2524911,2524914,2524918,2524920,2524921,2524922,2524923,2524926,2524927,2524928,2524929,2524930,2524931,2524932,2524934,2524935,2524936,2524937,2524938,2524939,2192368,2550135,2550137,2550139,2550141,2550143,2550145,2550149,2550154,2550161,2550168,2550175,2550183,2550190,2493485,2493486,2493487,2493488,2493492,2493495,2493499,2493500,2493505,2493510,2493511,2493512,2493513,2493514,2493515,2524940,2524941,2524943,2524944,2524945,2524946,2524947,2524948,2524949,2524951,2524952,2524955,2524959,2524963,2524967,2524971,2524976,2524979,2524983,2194967,2550194,2550199,2550206,2550211,2550218,2550224,2550231,2550238,2550244,2550251,2550256,2550261,2550268,2550274,2550280,2550285,2550292,2550298,2550303,2550310,2550316,2493540,2493541,2493542,2493544,2493545,2493546,2493547,2493548,2493549,2493550,2493551,2493552,2493557,2493558,2493559,2493560,2480920,2480923,2480924,2480930,2524986,2524991,2524995,2524999,2525000,2525003,2525006,2525009,2525013,2525018,2525021,2525026,2525030,2525034,2525039,2525044,2525047,2525051,2525055,2507912,1975444,2493564,2493565,2493566,2493567,2493568,2493569,2493594,2493595,2520118,2520119,2520124,2520127,2525059,2525064,2525068,2525071,2525075,2525080,2525083,2525087,2525091,2525094,2525098,2525101,2525105,2525109,2525112,2525116,2525120,2525123,2525127,2525137,2507920,2507980,2520307,2520330,2520335,2520339,2520338,2520346,2493602,2493603,2493604,2493605,2493606,2493607,2493609,2493610,2493611,2493612,2493613,2493614,2493615,2493617,2493618,2493619,2493620,2493621,2493622,2493623,2493624,2493625,2493626,2493627,2493628,2493629,2493630,2493631,2191925,2507899,2520136,2520140,2520141,2520144,2520145,2192525,2194881,2524613,2524615,2524618,2524619,2524622,2524624,2524627,2524629,2524632,2524635,2524637,2524640,2524642,2524645,2524648,2524650,2524654,2524657,2524659,2524662,2524665,2525149,2525161,2525172,2525179,2525182,2525186,2525190,2525194,2525199,2525203,2525208,2525214,2525219,2536324,2536327,2194876,2549444,2549458,2549461,2549468,2549470,2493709,2493713,2493717,2493721,2493725,2493728,2493731,2493734,2190337,2524667,2524670,2524673,2524675,2524679,2524682,2524685,2524689,2524692,2524694,2524698,2524703,2524706,2524709,2524712,2524715,2525225,2525230,2525236,2525241,2525247,2525253,2525258,2525264,2525269,2490404,2536337,2524719,2524722,2524725,2524732,2524739,2524744,2524748,2524753,2524756,2524759,2524762,2524766,2524768,2524771,2524774,2524788,2525275,2525280,2525286,2525291,2525298,2525304,2525309,2525315,2525318,2525323,2192126,2507929,2508021,2524791,2524794,2524797,2524800,2524803,2524806,2524809,2524811,2524815,2524818,2524821,2524823,2524826,2524828,2524830,2524834,2524838,2524841,2192660,1630006,2190332,2525329,2525336,2525340,2525344,2492931,2492934,2492935,2492937,2492938,2492939,2492940,2492941,2492942,2492943,2492944,2492945,2492946,2492947,2492948,2492949,2492950,2492951,2492952,2492953,2492954,2492955,2492956,2492957,2492958,2492959,2492960,2492961,2192333,2493701,2493702,2493703,2493705,2493706,2190765,2524383,2524385,2524388,2524390,2524392,2524418,2524421,2524424,2508584,2487525,2492576,2508001,2480003,2480005,2550079,2550092,2550095,2550097,2550099,2550100,2508249,2212542,2524477,2212075,2212113,2492386,2480091,2480093,2550102,2190736,2524600,2524602,2524604,2524607,2213334,2212068,2480156,2603235,2603240,2606070,2606071,2606072,2580832,2580836,2580837,2580838,2580839,2580840,2580841,2580842,2580843,2580844,2580845,2580846,2580847,2580848,2580849,2580850,2580851,2580852,2580853,2580854,2580855,2580856,2580857,2580858,2580859,2580860,2580861,2580862,2580863,2580864,2580865,2580866,2580867,2432914,2603158,2603178,2603185,2603233,2580941,2580942,2597337,2597338,2597340,2597341,2597342,2598005,2581070,2581075,2581076,2528877,2528909,2597440,2597444,2359983,2359979,2372393,2598120,2598121,2598122,2598123,2598124,2598125,2598126,2598127,2598129,2598130,2598131,2598132,2598133,2598134,2598135,2598136,2598137,2598138,2598139,2598140,2598141,2598142,2598143,2598144,2598145,2598146,2598148,2598149,2598150,2598151,2598152,2598153,2598154,2598155,2598157,2598158,2598159,2598160,2598161,2581197,2581198,2581199,2581200,2581201,2598162,2598163,2598164,2598165,2598166,2598167,2598168,2598169,2598170,2598171,2598172,2598173,2598175,2598176,2598178,2598179,2598180,2598181,2598182,2598183,2598184,2598185,2598186,2598187,2598188,2598192,2598194,2191447,2603050,2597532,2598223,2603502,2580904,2580905,2580907,2601759,2601779,2601771,2607534,1985290,2208690,1985292,2209069,1985297,1985302,2603176,2603218,2581824,2581825,2581826,2581827,2581829,2581830,2581831,2581832,2581833,2581834,2581835,2604250,2604253,2604256,2604260,2604262,2604264,2604265,2604266,2623786,2604273,2604274,2604275,2604277,2358756,2358333,2607535,2581955,2581956,2581957,2581958,2581959,2581960,2606022,2596680,2618036,2593846,2593848,2593850,2593851,2593854,2582049,2632733,2632742,2632744,2632745,2632747,2632750,2632751,2632753,2632754,2632757,2632759,2632760,2632762,2632765,2632766,2632799,2632802,2632804,2632806,2632809,2632810,2632812,2582075,2582086,2582094,2582095,2632815,2632816,2632819,2632821,2632824,2632826,2632828,2632830,2632833,2632846,2632848,2632850,2632851,2632854,2632856,2632859,2632862,2632865,2632868,2632870,2632874,2632876,2632880,2632883,2632885,2632890,2632892,2632896,2632898,2632902,2632905,2632907,2632911,2632913,2632918,2632920,2632923,2632928,2632929,2632934,2632939,2632943,2632947,2632950,2632953,2632957,2632959,2632964,2632968,2632970,2632974,2632977,2632980,2632983,2632987,2632991,2632993,2632997,2633000,2633003,2633007,2633010,2633015,2633017,2633021,2633024,2633028,2633031,2633034,2633038,2633041,2633044,2633048,2633051,2633054,2633057,2633061,2633063,2633067,2633070,2633073,2633076,2633080,2633083,2633086,2633090,2633093,2633097,2633100,2633103,2633108,2633112,2633115,2633119,2633123,2633126,2633130,2633133,2633136,2633140,2633144,2633147,2633150,2633154,2633158,2633162,2633166,2633170,2633174,2604174,2604176,2604179,2597690,2633177,2633181,2633186,2633191,2633196,2633201,2633206,2633211,2633216,2633221,2633226,2633231,2633236,2633241,2633246,2633250,2633256,2633261,2633266,2633269,2633272,2633276,2633279,2633282,2601712,2604180,2604181,2604182,2604185,2633400,2604186,2604190,2604192,2604194,2604200,2604203,2604206,2604207,2604208,2604212,2604218,2604219,2604220,2581650,2581651,2633593,2633596,2633599,2633602,2633605,2633608,2633611,1985289,1985293,1985294,1985295,1985300,1985301,1985296,2604225,2604228,2604229,2604233,2604234,2604235,2604238,2604242,2604243,2604247,2581652,2581653,2581654,2581657,2581659,2581661,2581662,2581663,2581664,2581665,2581666,2581667,2581668,2581669,2581670,2581671,2581672,2581674,2581675,2581676,2581677,2581678,2581679,2581680,2581681,2581682,2581683,2581684,2581685,2581686,2581687,2581688,2581689,2581690,2581691,2581692,2581693,2581694,2581696,2581697,2581698,2530862,2531178,2531019,2531195,2531198,2531201,2531203,2531205,2531114,2531032,2531206,2531209,2531211,2581699,2581700,2581701,2581702,2581703,2581704,2581705,2581706,2581708,2581710,2581711,2581712,2581713,2581714,2581715,2581716,2581718,2581720,2581724,2581726,2581729,2581730,2581731,2581732,2581733,2581734,2603362,2603371,2603478,2601745,2443560,2603129,2603149,2190968,2192064,2190651,2609301,2609370,2608644,2608648,2608686,2608689,2608442,2608443,2608444,2608450,2608451,2608452,2608453,2595969,2595970,2595971,2595972,2595973,2595974,2595975,2595976,2595978,2595979,2595980,2595981,2595982,2595983,2595984,2595985,2595986,2595987,2601769,2603060,2608454,2608456,2608457,2608458,2608459,2608460,2608462,2608463,2608465,2608470,2608475,2608479,2608481,2608929,2608931,2625788,2625789,2625790,2625792,2625793,2625794,2625795,2625797,2625798,2625799,2625800,2625801,2625805,2625811,2625821,2625829,2625830,2625831,2625832,2625834,2625836,2625837,2625838,2625843,2625846,2625848,2625856,2625861,2609256,2625865,2625866,2625870,2625871,2625872,2625873,2625875,2625876,2625885,2625894,2625902,2603153,2608983,2622344,2622345,2622346,2622355,2622356,2622357,2632352,2632353,2632354,2632355,2603137,2622371,2622372,2622373,2632620,2609095,2609101,2609107,2609113,2609118,2609121,2609132,2609136,2609140,2609144,2609148,2609152,2609155,2609159,2609163,2609167,2609171,2609174,2609177,2609180,2609183,2609184,2609187,2609191,2609196,2609200,2609204,2609208,2609212,2609216,2609220,2609224,2609229,2609233,2609238,2609242,2609247,2609253,2609258,2609262,2603450,2603500,2609267,2609272,2609278,2609284,2609290,2609294,2609300,2609305,2609311,2609315,2609320,2609324,2609327,2609332,2609336,2609340,2609344,2609349,2609352,2609358,2609363,2609369,2609374,2609381,2609386,2609392,2609399,2609405,2609412,2609418,2609424,2609430,2609437,2609442,2609449,2609454,2609461,2609462,2633183,2603467,2603470,2437297,2609464,2609470,2609471,2609473,2609474,2609476,2609478,2609480,2609482,2609483,2609485,2609486,2609488,2609490,2609491,2609493,2609494,2609496,2609498,2609500,2609503,2609507,2609509,2609511,2609514,2609516,2609519,2609521,2609523,2609528,2609531,2609533,2609536,2609538,2609541,2609543,2609546,2609550,2633247,2633249,2633252,2633254,2633257,2633259,2633262,2633264,2601669,2603365,2603378,2609553,2609555,2609558,2609560,2609566,2609568,2609571,2609572,2609575,2609576,2609578,2609580,2609581,2609583,2609585,2609586,2609588,2609591,2617559,2603474,2603150,2618055,2622432,2622433,2622434,2622435,2622436,2622437,2352855,2192842,2633356,2633357,2633360,2633362,2633365,2633367,2633369,2633372,2633373,2603465,2443568,2443551,2488064,2510627,2510634,2603446,2603505,2622438,2622439,2622440,2603182,2632232,2632233,2632234,2632235,2632236,2632237,2632238,2632239,2632240,2632294,2632295,2632296,2632297,2632298,2632299,2632300,2632301,2632302,2632303,2632304,2632305,2632306,2632307,2632308,2632309,2632310,2632311,2632614,2632615,2632617,2632618,2632619,2632621,2632622,2632312,2632313,2632314,2632315,2632316,2632317,2632318,2632319,2632320,2632321,2632322,2632323,2632324,2632325,2632326,2632334,2632335,2632336,2632337,2632338,2632339,2632340,2632341,2632342,2632343,2632344,2632345,2632346,2632347,2632348,2632349,2632350,2632351,2632623,2632625,2632626,2632627,2632629,2632630,2632631,2632633,2632634,2632636,2632637,2632638,2632640,2632641,2632642,2632644,2632645,2632646,2632648,2632649,2632651,2632652,2632653,2632655]; + }; + + function domMnaipulation(){ + for(var i=0; i< productList.length; i++){ + //cosnole.log(injMbox.productList[i]); + if(pageProductId == productList[i]){ + mboxUpdate("mboxClickTrack","profile.browsedProduct=yes"); + cartPage(); + return; + } + } + }; + + function cartPage(){ + console.log('enter') + if(jQuery('.addToBagButton').length > 0){ + jQuery('.addToBagButton').on('mousedown',function(){ + mboxUpdate("mboxClickTrack","profile.productInCart=yes"); + }); + } + else{ + timeout-= timer; + if(timeout>timer){ + setTimeout(cartPage,timer); + } + } + }; + + function confirmPage(){ + if(MACYS.brightTag.products.length > 0){ + for(var i=0; i< productList.length; i++){ + for(var j=0; j<MACYS.brightTag.products.length; j++){ + orderConfirmId = MACYS.brightTag.products[j].productID + if(orderConfirmId == productList[i]){ + mboxUpdate("mboxClickTrack","profile.productPurchased=yes"); + return; + } + } + } + } + else{ + timeout-=timer; + if(timeout>timer){ + setTimeout(confirmPage,timer); + } + } + + }; + + function mboxDefineFunc(){ + mboxFactoryDefault.addOnLoad(function(){ + var mbox = mboxFactoryDefault.getMboxes().get("mboxClickTrack"); + if (mbox.length()==0) { + var d = document.createElement("div"); + d.id = "mboxClickTrack_div"; + document.body.appendChild(d); + mboxDefine("mboxClickTrack_div","mboxClickTrack"); + } + }) + }; + + function check(){ + // console.log("hellooooo22222222"); + // console.log(location.href.indexOf('/shop/product/') != -1 || location.href.indexOf('/bag/') != -1 || location.href.indexOf('/chkout/confirm') != -1); + if(location.href.indexOf('/shop/product/') != -1 || location.href.indexOf('/bag/') != -1 || location.href.indexOf('/chkout/confirm') != -1){ + //console.log('enter'); + init(); + } + else{ + timeout-=timer; + if(timeout>timer){ + setTimeout(check,timer); + } + } + }; + + + + //Call the check function + //Can also check for jQuery or dom Ready events + var checkJQuery = function(){ + if ('undefined' === typeof window.jQuery) { + if(timeout > timer) { + setTimeout(checkJQuery, timer); + } + timeout -= timer; + return; + } + // console.log("hellooooo1111111"); + check(); + }; + checkJQuery(); +})(); +</script></div> + +<!--[if lte IE 8]><body class="? lt-ie9"><![endif]--> +<!--[if gt IE 8]><!--> <!--<![endif]--> +<div id="doc3"> +<a name="top"></a> +<div id="hd"> +</div> +<div id="bd"><div id="rc-header"><div><header></header> +</div></div> +<div id="rc-content" role="main"><div><div id="rc-global-errors-warnings" class="row"><div><div id="rc-error-list" class="rc-error-container small-16 medium-16 large-16 columns" tabindex="-1"></div> +<div id="rc-warning-list" class="rc-warning-container small-16 medium-16 large-16 columns"></div> +</div></div> +<div id="rc-maincontent-layout" class="row"><div><section id="rc-guest-checkoutmain"> + <div id="rc-step-list" class="small-16 medium-10 large-10 columns"> + <div class="rc-section-wrapper"> + <a role="button" href="#shipping" name="shipping" data-section="rc-shipping-info" aria-controls="rc-shipping-info" aria-expanded="true"> + <div class="row"> + <h1 class="small-14 small-offset-1">Shipping</h1> + </div> + </a> + <section id="rc-shipping-info" style="opacity: 1; overflow: hidden;"><div> + + + + + + + + + + <div id="rc-shipping-summary" class="row"> + <div id="rc-at-shipping-address" class="small-14 small-offset-1 medium-7 columns"> + <h2>Shipping Address</h2> + + + <p id="rc-shipping-contact">Homer Simpson</p> + <p class="rc-ellipsis">123 Main Street</p> + <p class="rc-ellipsis">Apt 123</p> + <p>Springfield, IL 62684</p><p> + </p><p>(516) 545-1514</p> + + </div> + + <div id="rc-at-shipping-method" class="small-14 small-offset-1 medium-6 columns"> + <h2>Shipping Method</h2> + <p>Standard</p> + + + + <p id="rc-estimated-delivery">3-6 business days</p> + + + + + </div> + + + + </div> + + + + + <div class="row"> + <div class="small-14 medium-6 large-4 small-offset-1 medium-offset-1 large-offset-1 columns"> + <button class="secondary medium" id="rc-shipping-edit" aria-label="Edit shipping method and shipping address">Edit</button> + </div> + </div> + + + + + +</div></section> + </div> + + + <div class="rc-section-wrapper"> + <a role="button" href="#usl" name="usl" data-section="rc-usl-heading" aria-expanded="false" aria-controls="rc-usl-form" aria-disabled="false"> + <div class="row"> + <h6 id="rc-usl-heading" class="rc-usl-logo-icon small-14 small-offset-1 columns end"> + <span>Have a Plenti #?</span> + <span class="rc-icon-section-collapsed icon-ui-plus-gr-large"></span> + </h6> + </div> + </a> + <section id="rc-usl"><div></div></section> + </div> + + <div class="rc-section-wrapper"> + <a role="button" href="#payment" name="payment" data-section="rc-payment-info" aria-expanded="true" aria-disabled="false"> + <div class="row"><h1 class="small-14 small-offset-1">Payment</h1></div> + </a> + <section id="rc-payment-info" style="opacity: 1; overflow: hidden;"><div> + + + <div> + <fieldset> + <div class="row"> + <div class="small-offset-1 small-14 columns end"> + <h2 class="rc-header-border no-top-padding">Apply Gift & Rewards Cards</h2> + </div> + </div> + + <div id="rc-giftcard-container"> + + + <div class="row"> + +</div> + + + <div class="row"> + <div class="small-14 small-offset-1 medium-6 large-8 columns rc-giftcard-message"> + You can apply up to 5. + </div> + + <div class="small-14 medium-7 large-5 small-offset-1 columns end"> + <button type="button" id="rc-gift-card" class="tertiary small" aria-expanded="false" aria-controls="rc-giftcard-container"> + Apply card + </button> + </div> + + + + </div> + + + +</div> + </fieldset> + </div> + <form id="rc-payment-info-form" class="standard-form" novalidate=""> + + + <div class="row"> + <div class="small-offset-1 small-14 columns end"> + + <h2 class="rc-header-border">Choose Payment Method</h2> + + </div> + </div> + + + <div class="row" id="rc-payment-selection-row"> + <div class="small-14 small-offset-1 medium-6 columns"> + <input type="radio" id="rc-creditcard" for="rc-creditcard-label" aria-labelledby="rc-creditcard-label" data-type="creditcard" name="payment.type" checked="checked" value="CREDITCARD" title="overall type: UNKNOWN_TYPE + server type: NO_SERVER_DATA + heuristic type: UNKNOWN_TYPE + field signature: 2449554739 + form signature: 4053649612452005841"> + <label id="rc-creditcard-label" for="rc-creditcard" aria-hidden="true" class="rc-plenti-label">Credit Card</label> + </div> + <div class="small-14 small-offset-1 medium-6 columns end"> + <input type="radio" id="rc-paypal" data-type="paypal" name="payment.type" aria-label="Paypal" value="PAYPAL" title="overall type: UNKNOWN_TYPE + server type: NO_SERVER_DATA + heuristic type: UNKNOWN_TYPE + field signature: 2449554739 + form signature: 4053649612452005841"> + <span for="rc-paypal" class="rc-paypalicon"></span> + + </div> + </div> + + + + <fieldset id="rc-credit-card-container"> + + + <div id="rc-paypal-disclaimer-cc-row" class="row hide"> + <div id="rc-paypal-disclaimer" class="small-offset-1 small-14 columns end"> + <b>Note: </b>PayPal can't be used with Gift Cards, Reward Cards and Credit Cards. + Plenti points can be earned but not used with PayPal. + </div> + </div> + + + + <div class="row"> + <div class="small-14 small-offset-1 medium-10 columns"> + <label for="rc-payment-card-type">Card type</label> + <select name="creditCard.cardType.code" id="rc-payment-card-type" aria-required="true" aria-describedby="payment-aria-info" title="overall type: CREDIT_CARD_TYPE + server type: CREDIT_CARD_TYPE + heuristic type: CREDIT_CARD_TYPE + field signature: 1958753038 + form signature: 4053649612452005841"> + <option value="-1">Select</option> + + <option value="Y">Macy's</option> + + <option value="B">Macy's American Express</option> + + <option value="A">American Express</option> + + <option value="V">Visa</option> + + <option value="M">MasterCard</option> + + <option value="O">Discover</option> + + <option value="F">Employee Card</option> + + </select> + <div class="hide-for-screenreader" id="payment-aria-info" aria-hidden="true" tabindex="-1">Your Shipping, Plenti, and Gift Card information can be found and verified at the top of this page"</div> + + </div> + </div> + + + + + + <div class="row" id="rc-payment-card-number-row"> + <div class="small-14 small-offset-1 medium-10 columns"> + <label for="rc-payment-card-number">Card number</label> + <input type="text" maxlength="20" pattern="\d*" name="creditCard.cardNumber" id="rc-payment-card-number" value="" autocomplete="off" autocorrect="off" aria-required="true" title="overall type: CREDIT_CARD_NUMBER + server type: CREDIT_CARD_NUMBER + heuristic type: CREDIT_CARD_NUMBER + field signature: 2117159926 + form signature: 4053649612452005841"> + <input type="hidden" name="creditCard.maskedCreditCardNumber" value=""> + </div> + </div> + + + + + <div class="row"> + <div class="small-14 small-offset-1 columns"> + <label id="rc-payment-expiration-label">Expiration date</label> + </div> + </div> + <div class="row"> + <div class="small-4 small-offset-1 columns"> + <select name="creditCard.expMonth" id="rc-payment-card-month" aria-required="true" aria-label="”Expiration" date="" month”="" title="overall type: CREDIT_CARD_EXP_MONTH + server type: CREDIT_CARD_EXP_MONTH + heuristic type: CREDIT_CARD_EXP_MONTH + field signature: 989675451 + form signature: 4053649612452005841"> + + <option>01</option> + + <option>02</option> + + <option>03</option> + + <option>04</option> + + <option>05</option> + + <option>06</option> + + <option>07</option> + + <option>08</option> + + <option>09</option> + + <option>10</option> + + <option>11</option> + + <option>12</option> + + </select> + </div> + <div class="small-5 columns end"> + <select name="creditCard.expYear" id="rc-payment-card-year" aria-required="true" aria-label="”Expiration" date="" year”="" title="overall type: CREDIT_CARD_EXP_4_DIGIT_YEAR + server type: CREDIT_CARD_EXP_4_DIGIT_YEAR + heuristic type: CREDIT_CARD_EXP_4_DIGIT_YEAR + field signature: 891328465 + form signature: 4053649612452005841"> + + <option>2016</option> + + <option>2017</option> + + <option>2018</option> + + <option>2019</option> + + <option>2020</option> + + <option>2021</option> + + <option>2022</option> + + <option>2023</option> + + <option>2024</option> + + <option>2025</option> + + </select> + </div> + </div> + + + + + + + + <div class="row"> + <div class="small-14 small-offset-1 columns"> + <label for="rc-payment-scode" id="rc-payment-scode-label">Security code</label> + </div> + </div> + + <div class="row" id="rc-payment-scode-row"> + <div class="small-4 small-offset-1 large-3 columns end"> + <input type="text" name="fake-password" id="rc-fake-password" class="hidden" autocomplete="off" style="display: none;" title="overall type: CREDIT_CARD_VERIFICATION_CODE + server type: NO_SERVER_DATA + heuristic type: CREDIT_CARD_VERIFICATION_CODE + field signature: 3761992124 + form signature: 4053649612452005841"> + <input type="text" maxlength="4" pattern="\d*" name="creditCard.securityCode" id="rc-payment-scode" aria-required="true" title="overall type: CREDIT_CARD_VERIFICATION_CODE + server type: NO_SERVER_DATA + heuristic type: CREDIT_CARD_VERIFICATION_CODE + field signature: 789650537 + form signature: 4053649612452005841"> + </div> + </div> + + + + </fieldset> + + + + <section id="rc-paypal-container" class="hide" aria-hidden="true"> + <div class="row"> + <div id="rc-paypal-disclaimer" class="small-offset-1 small-14 columns end"> + <b>Note: </b>PayPal can't be used with Gift Cards, Reward Cards and Credit Cards. + Plenti points can be earned but not used with PayPal. + </div> + </div> + + <div id="rc-paypal-login-disclaimer" class="row hide"> + <div class="rc-paypal-message small-offset-1 small-14 columns end"> + You will login on PayPal's site on the next page and review your order, then you will finish the transaction at macy's.com + </div> + </div> + + </section> + + + <fieldset id="rc-billing-address-container"> + <div class="row"> + <div class="small-offset-1 small-14 columns end"> + <h2 class="rc-header-border">Billing Address</h2> + </div> + </div> + + + <div id="rc-use-shipping-container" class="row "> + <div class="small-1 small-offset-1 columns"> + <input type="checkbox" id="rc-use-shipping" name="useMyShippingAddress" value="false" aria-checked="false" title="overall type: UNKNOWN_TYPE + server type: NO_SERVER_DATA + heuristic type: UNKNOWN_TYPE + field signature: 1490259836 + form signature: 4053649612452005841"> + </div> + <div class="small-11 columns end"> + <label id="rc-use-shipping-label" class="inline" for="rc-use-shipping">Use my shipping address</label> + </div> + </div> + + + + <div id="rc-billing-address"> + <div class="row"> + <div class="small-14 small-offset-1 medium-10 columns"> + <label for="rc-payment-firstName">First name</label> + <input type="text" maxlength="20" name="billingContact.firstName" id="rc-payment-firstName" value="" autocorrect="off" aria-required="true" title="overall type: NAME_FIRST + server type: NAME_FIRST + heuristic type: CREDIT_CARD_NAME + field signature: 1110479879 + form signature: 4053649612452005841"> + </div> +</div> + + + + +<div class="row"> + <div class="small-14 small-offset-1 medium-10 columns"> + + <label for="rc-payment-lastName">Last name</label> + <input type="text" maxlength="30" name="billingContact.lastName" id="rc-payment-lastName" value="" autocorrect="off" aria-required="true" title="overall type: NAME_LAST + server type: NAME_LAST + heuristic type: UNKNOWN_TYPE + field signature: 724121833 + form signature: 4053649612452005841"> + </div> +</div> + + + + + +<div class="row"> + <div class="small-14 small-offset-1 medium-10 columns"> + + <label for="rc-payment-line1">Address line 1</label> + <input type="text" maxlength="35" name="billingAddress.addressLine1" id="rc-payment-line1" value="" autocorrect="off" aria-required="true" title="overall type: ADDRESS_HOME_LINE1 + server type: ADDRESS_HOME_LINE1 + heuristic type: ADDRESS_HOME_LINE1 + field signature: 3436138513 + form signature: 4053649612452005841"> + </div> +</div> + + + + + +<div class="row"> + <div class="small-14 small-offset-1 medium-10 columns"> + + <label for="rc-payment-line2" class="optional">Address line 2 (optional)</label> + <input type="text" maxlength="35" name="billingAddress.addressLine2" id="rc-payment-line2" autocorrect="off" aria-required="false" value="" title="overall type: ADDRESS_HOME_LINE2 + server type: ADDRESS_HOME_LINE2 + heuristic type: ADDRESS_HOME_LINE2 + field signature: 3817149136 + form signature: 4053649612452005841"> + </div> +</div> + + + + +<div class="row"> + <div class="small-14 small-offset-1 medium-10 columns"> + + <label for="rc-payment-city">City</label> + <input type="text" maxlength="25" name="billingAddress.city" id="rc-payment-city" value="" autocorrect="off" aria-required="true" title="overall type: ADDRESS_HOME_CITY + server type: ADDRESS_HOME_CITY + heuristic type: ADDRESS_HOME_CITY + field signature: 2433902552 + form signature: 4053649612452005841"> + </div> +</div> + + + + + +<div id="rc-paystateZipRow" class="row"> + + <div class="small-6 medium-5 small-offset-1 columns"> + <label for="rc-payment-state">State</label> + <select name="billingAddress.state" id="rc-payment-state" aria-required="true" title="overall type: ADDRESS_HOME_STATE + server type: ADDRESS_HOME_STATE + heuristic type: ADDRESS_HOME_STATE + field signature: 333754698 + form signature: 4053649612452005841"> + <option value="-1">Select</option> + + <option value="AL">AL</option> + + <option value="AK">AK</option> + + <option value="AS">AS</option> + + <option value="AZ">AZ</option> + + <option value="AR">AR</option> + + <option value="AA">AA</option> + + <option value="AE">AE</option> + + <option value="AP">AP</option> + + <option value="CA">CA</option> + + <option value="CO">CO</option> + + <option value="CT">CT</option> + + <option value="DE">DE</option> + + <option value="DC">DC</option> + + <option value="FM">FM</option> + + <option value="FL">FL</option> + + <option value="GA">GA</option> + + <option value="GU">GU</option> + + <option value="HI">HI</option> + + <option value="ID">ID</option> + + <option value="IL">IL</option> + + <option value="IN">IN</option> + + <option value="IA">IA</option> + + <option value="KS">KS</option> + + <option value="KY">KY</option> + + <option value="LA">LA</option> + + <option value="ME">ME</option> + + <option value="MH">MH</option> + + <option value="MD">MD</option> + + <option value="MA">MA</option> + + <option value="MI">MI</option> + + <option value="MN">MN</option> + + <option value="MS">MS</option> + + <option value="MO">MO</option> + + <option value="MT">MT</option> + + <option value="NE">NE</option> + + <option value="NV">NV</option> + + <option value="NH">NH</option> + + <option value="NJ">NJ</option> + + <option value="NM">NM</option> + + <option value="NY">NY</option> + + <option value="NC">NC</option> + + <option value="ND">ND</option> + + <option value="MP">MP</option> + + <option value="OH">OH</option> + + <option value="OK">OK</option> + + <option value="OR">OR</option> + + <option value="PW">PW</option> + + <option value="PA">PA</option> + + <option value="PR">PR</option> + + <option value="RI">RI</option> + + <option value="SC">SC</option> + + <option value="SD">SD</option> + + <option value="TN">TN</option> + + <option value="TX">TX</option> + + <option value="VI">VI</option> + + <option value="UT">UT</option> + + <option value="VT">VT</option> + + <option value="VA">VA</option> + + <option value="WA">WA</option> + + <option value="WV">WV</option> + + <option value="WI">WI</option> + + <option value="WY">WY</option> + + </select> + </div> + + <div class="small-8 medium-5 columns end"> + <label for="rc-payment-zipCode">Zip code</label> + <input type="text" maxlength="5" pattern="\d*" name="billingAddress.zipCode" id="rc-payment-zipCode" value="" autocorrect="off" aria-required="true" title="overall type: ADDRESS_HOME_ZIP + server type: ADDRESS_HOME_ZIP + heuristic type: ADDRESS_HOME_ZIP + field signature: 837276327 + form signature: 4053649612452005841"> + </div> +</div> + + + + + + + + + + </div> + </fieldset> + + <div class="row"> + <div class="small-offset-1 small-14 columns end"> + <h2 class="rc-header-border">Contact Info</h2> + </div> + </div> + <div class="row"> + <div class="rc-contact-message small-offset-1 small-14 columns end"> + We’ll only contact you if we have questions about this order. + </div> + </div> + <div class="row"> + <div class="small-14 small-offset-1 medium-10 columns"> + + <label for="rc-payment-phone">Phone number</label> + <input type="text" maxlength="14" pattern="\d*" name="billingAddress.phone" id="rc-payment-phone" value="" autocorrect="off" aria-required="true" autocomplete="off" title="overall type: PHONE_HOME_CITY_AND_NUMBER + server type: PHONE_HOME_CITY_AND_NUMBER + heuristic type: PHONE_HOME_WHOLE_NUMBER + field signature: 2467847771 + form signature: 4053649612452005841"> + </div> + </div> + + + + <div class="row"> + <div class="small-14 small-offset-1 medium-10 columns"> + + <label for="rc-payment-email">Email address</label> + <input type="email" maxlength="75" name="billingContact.email" id="rc-payment-email" value="" autocapitalize="off" autocorrect="off" aria-required="true" title="overall type: EMAIL_ADDRESS + server type: EMAIL_ADDRESS + heuristic type: EMAIL_ADDRESS + field signature: 4157735572 + form signature: 4053649612452005841"> + </div> + </div> + + + + + + <fieldset> + + + <div id="rc-paypalcontinue-row" class="row hide" aria-hidden="true"> + <div class="small-14 medium-10 large-8 small-offset-1 medium-offset-5 large-offset-7 columns"> + <button type="button" class="medium" id="rc-paypal-continue">Continue to Paypal</button> + </div> + </div> + + <div id="rc-normalpaycontinue-row" class="row"> + <div class="small-14 medium-7 large-5 small-offset-1 medium-offset-8 large-offset-10 columns"> + <button type="submit" class="medium" id="rc-payment-continue">Continue</button> + </div> + </div> + + </fieldset> + </form> + + + +</div></section> + </div> + </div> + + <div class="small-16 medium-6 large-6 columns"> + <div id="rc-order-summary" role="complementary"><div> +<ul id="rc-order-subtotal-container"> + <li id="rc-subtotal" class="row rc-total-row"> + <div id="rc-at-subtotal" class="small-9 medium-9 large-9 small-offset-1 medium-offset-1 large-offset-1 columns rc-left">Subtotal</div> + <div id="rc-at-subtotal-value" class="small-4 medium-4 large-4 small-offset-1 columns"> $49.99</div> + </li> + + + <li class="row"> + <div id="rc-at-shipping-cost" class="small-9 medium-9 large-9 small-offset-2 columns rc-left rc-subsection">Shipping <span id="rc-item-count"></span></div> + <div id="rc-at-shipping-cost-value" class="small-4 medium-4 large-4 columns "> $9.95</div> + </li> + + + + + + + + + <li class="row"> + <div id="rc-at-estimated-tax" class="small-9 medium-9 large-9 small-offset-2 columns rc-left rc-subsection">Estimated Tax</div> + <div id="rc-at-estimated-tax-value" class="small-4 medium-4 large-4 columns"> $3.75</div> + </li> + + + + + + <hr class="small-offset-1 small-14 columns" aria-hidden="true"> + + <li id="rc-total" class="row rc-total-row "> + <div id="rc-at-order-total" class="small-9 medium-9 large-9 small-offset-1 medium-offset-1 large-offset-1 columns rc-left">Order Total</div> + <div id="rc-at-order-total-value" class="small-4 medium-4 large-4 small-offset-1 columns"> $63.69</div> + </li> + + + <li class="row rc-savings"> + <div id="rc-at-order-discount" class="small-9 medium-9 large-9 small-offset-1 medium-offset-1 large-offset-1 columns rc-left rc-green">You Saved</div> + <div id="rc-at-order-discount-value" class="small-4 medium-4 large-4 small-offset-1 columns rc-green"> $70.01</div> + </li> + + + + +</ul> +</div></div> + + <div id="rc-place-order-container" class="row"> + <div class="small-14 medium-14 large-14 small-offset-1 medium-offset-1 large-offset-1 columns"> + <button class="medium" id="rc-place-order" disabled="disabled" aria-disabled="true">place order</button> + <div class="hide-for-screenreader" aria-hidden="true" tabindex="-1" id="aria-placeorder-info">Your Shipping, Plenti, Gift Card and Payment information can be found and verified at the top of this page"</div> + </div> + </div> + </div> + +</section> + +<section id="rc-paypal-section" class="rc-loading-background hide"> + <div class="loader-container rc-start-loader "> + <p class="loader primary"></p> + </div> + <div class="rc-start-loader" tabindex="-1"> + <p class="rc-start-loader-text">Please wait while we redirect you to Paypal's secure site...</p> + </div> +</section> + +<div id="rc-page-name" class="hidden" aria-hidden="true" data-page-name="RC - Checkout"></div> +<!-- this is added for iovation which is loaded via brighttag --> +<input type="hidden" id="deviceId"> +</div></div> +<div id="rc-overlay"></div></div></div> +<div id="rc-footer"><div id="footer-container"><footer class="row" role="contentinfo"> + <div class="row"> + <div class="columns medium-offset-2 medium-12 large-offset-3 large-10 small-offset-0 small-16"> + + <ul class="small-block-grid-1 rc-contact-us + + medium-block-grid-2 large-block-grid-2 + + "> + <li><span class="icon-gen-phone-bk-medium inline-icon-medium"></span>Need Help? call 1-800-289-6229</li> + + <li class="show-for-medium-up"> + + + <div id="rnowChatLinkContainer_type7" class="rn_ConditionalChatLink"> + <div id="rnowChatLink_type7"> + <div id="rnowChatLinkInfo_type7"><span>Live chat offline</span></div> + </div> + </div> + + </li> + + </ul> + </div> + </div> + <div id="rc-policy-links"><div class="row"> + <div class=" + columns medium-offset-4 medium-8 small-offset-0 small-16 + "> + <ul class=" + small-block-grid-2 medium-block-grid-4 large-block-grid-4 + "> + + <li>Bag ID: 540829266</li> + + <li><a href="https://www.customerservice-macys.com/app/answers/detail/a_id/40/theme/popup" target="_blank">Privacy Policy</a></li> + <li><a href="https://www.customerservice-macys.com/app/answers/detail/a_id/260/theme/popup" target="_blank">Shipping Policy</a></li> + <li><a href="https://www.customerservice-macys.com/app/answers/detail/a_id/140/theme/popup" target="_blank">Return Policy</a></li> + </ul> + </div> +</div></div> + <p> + ©2015 macys.com is a registered trademark. All rights reserved. + </p> +</footer> +</div></div> +</div> +<div id="ft"> +</div> +</div> +<input type="hidden" id="gmeUrl" value="https://www.googleapis.com/mapsengine/v1/tables/06739517320133004748-11853667273131550346/features?version=published&key=AIzaSyCzwiHW1tSp_4FXaFuORRffbxBzQUN1qs4"> +<input type="hidden" id="gmClientId" value="gme-macysinc"> +<input type="hidden" id="gmeAPIKey" value="AIzaSyCzwiHW1tSp_4FXaFuORRffbxBzQUN1qs4"> +<input type="hidden" id="gmeTableId" value="06739517320133004748-11853667273131550346"> +<input type="hidden" id="gmeToSdpEnabled" value="true"> +<input type="hidden" id="macysCookieDomain" value=".macys.com"> +<input type="hidden" id="MACYS_secureHostName" value="https://www.macys.com"> +<input type="hidden" id="MACYS_baseHostName" value="http://www.macys.com"> +<input type="hidden" id="MACYS_assetsHostName" value="https://www.macys.com"> +<input type="hidden" id="MACYS_imageHostName" value="/img/ts/is/image/MCY"> +<input type="hidden" id="AKAMAI_LOGIC" value="hybrid"> +<input type="hidden" id="searchBoxPlaceholderGuest" value="Search or enter web ID"> +<input type="hidden" id="searchBoxPlaceholderUser" value="[userName], Search or enter web ID"> +<script type="text/javascript"> +var keyword=""; +if ( typeof MACYS === 'undefined' ) { MACYS = {}; } +if ( typeof MACYS.util !== 'undefined' +&& typeof MACYS.util.Url !== 'undefined' +&& typeof MACYS.util.Url !== 'undefined' +&& typeof MACYS.util.Url.getParameter !== 'undefined' +&& MACYS.util.Url.getParameter('Keyword') ) { +keyword=MACYS.util.Url.getParameter('Keyword'); +} +function getBTRegistryMode() { +var defaultMode = "YES"; +var url = window.location.href; +var a = url.substring(0, url.indexOf("registry")); +var hasWedding = url.substring(0, url.indexOf("wedding")); +if(a.length==0 && hasWedding.length==0){ +defaultMode = "NO"; +} +return defaultMode; +} +if ( typeof MACYS.namespace !== 'undefined' ) { MACYS.namespace("brightTag"); } else { MACYS.brightTag = {}; } +MACYS.brightTag["navigation"] = { +"pageName" : "", +"pageID" : "", +"keyword" : keyword, +"registryMode" : getBTRegistryMode() +}; +</script> +<noscript> +<iframe src="//s.thebrighttag.com/iframe?c=YQClrLy" width="1" height="1" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"></iframe> +</noscript> + +<div id="soasta_pageinfo" style="display:none"> +<site>RTP</site> +<type>? - ?</type> +<appserver>macys-shopapp_prod_cellB_ma100mlvshp011_m01</appserver> +<server>MA100MLVSHP011</server> +<timestamp>Sat Jan 30 01:31:56 EST 2016</timestamp> +<release>15KJ</release> +<releasedate> Mon Jan 11 23:04:19 EST 2016</releasedate> +<version>1.45.1737</version> +<requestid></requestid> +</div> + +<iframe height="1px" scrolling="no" width="1px" src="//img.pulsemgr.com/px/?srh=undefined&y29=l27&ptnr=30089&sit=macys.com&pty=cfp&pce=1&csurl=https%3A%2F%2Fs.thebrighttag.com%2Fcs&btt=6o0YwC_FgnKwsKjGk9JezkUTpYkQY00MAs_bCLDa8D8" style="display: none;"></iframe><div class="midReplacerCard"><div class="midReplacerCard-profile"><div class="midReplacerCard-thumb"></div><div class="midReplacerCard-info"><div class="midReplacerCard-name"></div><div class="midReplacerCard-id"></div><div class="midReplacerCard-desc"></div></div><div class="midReplacerCard-notable"></div></div></div> + + + + + + + +<script type="text/javascript" src="//static.atgsvcs.com/js/atgsvcs.js" async=""></script><script type="text/javascript" src="https://www.customerservice-macys.com/rnt/rnw/javascript/vs/1/vsapi.js" async=""></script><iframe src="javascript:false" title="" style="width: 0px; height: 0px; border: 0px;"></iframe><script type="text/javascript" src="https://www.customerservice-macys.com/vs/1/vsopts.js" async=""></script><iframe src="//gateway.answerscloud.com/macys/production/foresee/frameWorker.html?v=R035F75269C" id="//gateway.answerscloud.com/macys/production/foresee/frameWorker.html?v=R035F75269C" class="ACS_" title="acsFrameController" style="display: none;" data-ready="true"></iframe><div id="undefined"></div><script type="text/javascript" src="//static.atgsvcs.com/js/atgsvcs.js" async=""></script><script type="text/javascript" src="https://www.customerservice-macys.com/rnt/rnw/javascript/vs/1/vsapi.js" async=""></script><script type="text/javascript" src="https://www.customerservice-macys.com/vs/1/vsopts.js" async=""></script></body></html>
diff --git a/chrome/test/data/autofill/heuristics/output/21_checkout_address2lines.out b/chrome/test/data/autofill/heuristics/output/21_checkout_address2lines.out new file mode 100644 index 0000000..7827c76 --- /dev/null +++ b/chrome/test/data/autofill/heuristics/output/21_checkout_address2lines.out
@@ -0,0 +1,7 @@ +NAME_FULL | name | Name: | | name_1-default +ADDRESS_HOME_LINE1 | addressLineOne | Line 1: | | name_1-default +ADDRESS_HOME_LINE2 | addressLineTwo | Line 2: | | name_1-default +ADDRESS_HOME_CITY | city | City: | | name_1-default +ADDRESS_HOME_STATE | state | State: | MA | name_1-default +ADDRESS_HOME_ZIP | zip | Zip: | | name_1-default +EMAIL_ADDRESS | email | Email: | | name_1-default
diff --git a/chrome/test/data/autofill/heuristics/output/21_checkout_costco.com.out b/chrome/test/data/autofill/heuristics/output/21_checkout_costco.com.out new file mode 100644 index 0000000..398d4b0 --- /dev/null +++ b/chrome/test/data/autofill/heuristics/output/21_checkout_costco.com.out
@@ -0,0 +1,15 @@ +NAME_FIRST | addressFormInlineFirstName | FIRST NAME* | | addressFormInlineFirstName_1-default +NAME_MIDDLE_INITIAL | addressFormInlineMiddleInitial | M.I. | | addressFormInlineFirstName_1-default +NAME_LAST | addressFormInlineLastName | LAST NAME* | | addressFormInlineFirstName_1-default +COMPANY_NAME | addressFormInlineCompany | COMPANY NAME | | addressFormInlineFirstName_1-default +ADDRESS_HOME_COUNTRY | addressFormInlineCountry | COUNTRY* | US | addressFormInlineFirstName_1-default +ADDRESS_HOME_LINE1 | addressFormInlineAddressLine1 | STREET ADDRESS* | | addressFormInlineFirstName_1-default +ADDRESS_HOME_LINE2 | addressFormInlineAddressLine2 | Address Line 2 | | addressFormInlineFirstName_1-default +ADDRESS_HOME_CITY | addressFormInlineCity | CITY* | | addressFormInlineFirstName_1-default +ADDRESS_HOME_STATE | addressFormInlineState | STATE / PROVINCE* | NO_STATE_TYPE_SELECTED | addressFormInlineFirstName_1-default +ADDRESS_HOME_ZIP | addressFormInlineZip | ZIP / POSTAL CODE* | | addressFormInlineFirstName_1-default +PHONE_HOME_WHOLE_NUMBER | addressFormInlinePhoneNumber | PHONE NUMBER* | | addressFormInlineFirstName_1-default +EMAIL_ADDRESS | addressFormInlineEmail | EMAIL | | addressFormInlineFirstName_1-default +ADDRESS_HOME_LINE1 | addressFormInlineAddressNickName | ADDRESS NICKNAME* ?The Address Nickname is a short name you create to help you easily identify this address within your address book. | | addressFormInlineAddressNickName_1-default +UNKNOWN_TYPE | saveAddressCheckboxInline | Add to address book. | on | addressFormInlineAddressNickName_1-default +UNKNOWN_TYPE | setDefaultCheckboxInline | Save as default shipping address in Address Book | on | addressFormInlineAddressNickName_1-default
diff --git a/chrome/test/data/autofill/heuristics/output/29_cc_checkout_walgreens.com.out b/chrome/test/data/autofill/heuristics/output/29_cc_checkout_walgreens.com.out new file mode 100644 index 0000000..f09da40 --- /dev/null +++ b/chrome/test/data/autofill/heuristics/output/29_cc_checkout_walgreens.com.out
@@ -0,0 +1,16 @@ +UNKNOWN_TYPE | paymentMethodType | CC | CC | paymentMethodType_1-default +UNKNOWN_TYPE | 007 | VisaCheckout | VisaCheckout | paymentMethodType_1-default +UNKNOWN_TYPE | paymentMethodType | Paypal | Paypal | paymentMethodType_1-default +UNKNOWN_TYPE | paymentMethodType | BML | BML | paymentMethodType_1-default +CREDIT_CARD_TYPE | addtype | | | paymentMethodType_1-cc +CREDIT_CARD_NUMBER | addcardnumber | | | paymentMethodType_1-cc +CREDIT_CARD_EXP_MONTH | addmonth | | | paymentMethodType_1-cc +CREDIT_CARD_EXP_4_DIGIT_YEAR | addyear | | | paymentMethodType_1-cc +UNKNOWN_TYPE | preferred | Same as shipping address | on | paymentMethodType_1-default +NAME_FIRST | addfirstName | | | paymentMethodType_1-default +NAME_LAST | addlastName | | | paymentMethodType_1-default +ADDRESS_HOME_LINE1 | addstreet1 | | | paymentMethodType_1-default +ADDRESS_HOME_CITY | addcity | | | paymentMethodType_1-default +ADDRESS_HOME_STATE | addstate | | | paymentMethodType_1-default +ADDRESS_HOME_ZIP | addzipcode | | | paymentMethodType_1-default +UNKNOWN_TYPE | addzipcodeExt | Optional | | paymentMethodType_1-default
diff --git a/chrome/test/data/autofill/heuristics/output/30_cc_checkout_macys.com.out b/chrome/test/data/autofill/heuristics/output/30_cc_checkout_macys.com.out new file mode 100644 index 0000000..4839242 --- /dev/null +++ b/chrome/test/data/autofill/heuristics/output/30_cc_checkout_macys.com.out
@@ -0,0 +1,18 @@ +UNKNOWN_TYPE | payment.type | Credit Card | CREDITCARD | payment.type_1-default +UNKNOWN_TYPE | payment.type | Choose Payment Method | PAYPAL | payment.type_1-default +CREDIT_CARD_TYPE | creditCard.cardType.code | Card type | -1 | payment.type_1-cc +CREDIT_CARD_NUMBER | creditCard.cardNumber | Card number | | payment.type_1-cc +CREDIT_CARD_EXP_MONTH | creditCard.expMonth | Expiration date | 01 | payment.type_1-cc +CREDIT_CARD_EXP_4_DIGIT_YEAR | creditCard.expYear | Expiration date | 2016 | payment.type_1-cc +CREDIT_CARD_VERIFICATION_CODE | fake-password | Security code | | payment.type_1-cc +CREDIT_CARD_VERIFICATION_CODE | creditCard.securityCode | Security code | | payment.type_1-cc +UNKNOWN_TYPE | useMyShippingAddress | Use my shipping address | false | payment.type_1-default +CREDIT_CARD_NAME | billingContact.firstName | First name | | payment.type_1-cc +UNKNOWN_TYPE | billingContact.lastName | Last name | | payment.type_1-default +ADDRESS_HOME_LINE1 | billingAddress.addressLine1 | Address line 1 | | payment.type_1-default +ADDRESS_HOME_LINE2 | billingAddress.addressLine2 | Address line 2 (optional) | | payment.type_1-default +ADDRESS_HOME_CITY | billingAddress.city | City | | payment.type_1-default +ADDRESS_HOME_STATE | billingAddress.state | State | -1 | payment.type_1-default +ADDRESS_HOME_ZIP | billingAddress.zipCode | Zip code | | payment.type_1-default +PHONE_HOME_WHOLE_NUMBER | billingAddress.phone | Phone number | | payment.type_1-default +EMAIL_ADDRESS | billingContact.email | Email address | | payment.type_1-default
diff --git a/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added.crx b/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added.crx new file mode 100644 index 0000000..d4e8674 --- /dev/null +++ b/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added.crx Binary files differ
diff --git a/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added/app_main.html b/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added/app_main.html new file mode 100644 index 0000000..e0aa0f6 --- /dev/null +++ b/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added/app_main.html
@@ -0,0 +1,6 @@ +<html> +<script src="app_main.js"></script> +<body> +<h1>Test Kiosk App!!!</h1> +</body> +<hmtl>
diff --git a/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added/app_main.js b/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added/app_main.js new file mode 100644 index 0000000..6201556e --- /dev/null +++ b/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added/app_main.js
@@ -0,0 +1,8 @@ +// Copyright (c) 2013 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. + +window.addEventListener('load', function onload() { + window.close(); +}); +
diff --git a/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added/icon-128.png b/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added/icon-128.png new file mode 100644 index 0000000..5c226f3 --- /dev/null +++ b/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added/icon-128.png Binary files differ
diff --git a/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added/icon-16.png b/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added/icon-16.png new file mode 100644 index 0000000..c7510d38 --- /dev/null +++ b/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added/icon-16.png Binary files differ
diff --git a/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added/main.js b/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added/main.js new file mode 100644 index 0000000..842ca23d --- /dev/null +++ b/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added/main.js
@@ -0,0 +1,12 @@ +// Copyright (c) 2013 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. + +chrome.app.runtime.onLaunched.addListener(function(launchData) { + if (launchData.isKioskSession) + chrome.test.sendMessage('launchData.isKioskSession = true'); + + chrome.app.window.create('app_main.html', + { 'width': 1920, + 'height': 1080 }); +});
diff --git a/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added/manifest.json b/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added/manifest.json new file mode 100644 index 0000000..4a9789a --- /dev/null +++ b/chrome/test/data/chromeos/app_mode/offline_enabled_kiosk_app/v2_required_platform_version_added/manifest.json
@@ -0,0 +1,20 @@ +{ + "manifest_version": 2, + "name": "Test Kiosk App", + "minimum_chrome_version": "24.0.1307.0", + "version": "2.0.0", + "icons": { + "128": "icon-128.png", + "16": "icon-16.png" + }, + "app": { + "background": { + "scripts": ["main.js"] + } + }, + "kiosk_enabled": true, + "kiosk": { + "required_platform_version": "1234" + }, + "offline_enabled": true +}
diff --git a/chrome/test/data/chromeos/app_mode/webstore/inlineinstall/detail/app_with_bad_required_platform_version b/chrome/test/data/chromeos/app_mode/webstore/inlineinstall/detail/app_with_bad_required_platform_version new file mode 100644 index 0000000..0af85ac --- /dev/null +++ b/chrome/test/data/chromeos/app_mode/webstore/inlineinstall/detail/app_with_bad_required_platform_version
@@ -0,0 +1,10 @@ +{ + "id": "app_with_bad_required_platform_version", + "users": "1234", + "average_rating": 1.0, + "rating_count": 999, + "verified_site": "chrome.google.com", + "localized_name": "App with bad required platform version", + "localized_description": "Description of app with bad required_platform_version", + "icon_url": "webstore/inlineinstall/detail/app_1_green16x16.png", "manifest":"{\n \"name\": \"__MSG_appName__\",\n \"version\": \"1\",\n \"manifest_version\": 2,\n \"description\": \"__MSG_appDesc__\",\n \"default_locale\": \"en\",\n \"app\": {\n \"background\": {\n \"scripts\": [\"background.js\"]\n },\n \"launch\": {\n \"local_path\": \"index.html\"\n }\n },\n \"icons\": {\n \"16\": \"favicon.png\",\n \"128\": \"128.png\"\n },\n \"kiosk_enabled\": true,\n \"kiosk\": {\"required_platform_version\": \"bad\"},\n \"permissions\": [] }" +}
diff --git a/chrome/test/data/chromeos/app_mode/webstore/inlineinstall/detail/app_with_required_platform_version b/chrome/test/data/chromeos/app_mode/webstore/inlineinstall/detail/app_with_required_platform_version new file mode 100644 index 0000000..e76a63470d --- /dev/null +++ b/chrome/test/data/chromeos/app_mode/webstore/inlineinstall/detail/app_with_required_platform_version
@@ -0,0 +1,11 @@ +{ + "id": "app_with_required_platform_version", + "users": "1234", + "average_rating": 1.0, + "rating_count": 999, + "verified_site": "chrome.google.com", + "localized_name": "App with required platform version", + "localized_description": "Description of app with required_platform_version", + "icon_url": "webstore/inlineinstall/detail/app_1_green16x16.png", + "manifest":"{\n \"name\": \"__MSG_appName__\",\n \"version\": \"1\",\n \"manifest_version\": 2,\n \"description\": \"__MSG_appDesc__\",\n \"default_locale\": \"en\",\n \"app\": {\n \"background\": {\n \"scripts\": [\"background.js\"]\n },\n \"launch\": {\n \"local_path\": \"index.html\"\n }\n },\n \"icons\": {\n \"16\": \"favicon.png\",\n \"128\": \"128.png\"\n },\n \"kiosk_enabled\": true,\n \"kiosk\": {\"required_platform_version\": \"1234\"},\n \"permissions\": [] }" +}
diff --git a/chrome/test/data/extensions/api_test/permissions/optional/background.js b/chrome/test/data/extensions/api_test/permissions/optional/background.js index e0c2f64..2bf1e17b 100644 --- a/chrome/test/data/extensions/api_test/permissions/optional/background.js +++ b/chrome/test/data/extensions/api_test/permissions/optional/background.js
@@ -206,13 +206,13 @@ // The user shouldn't have to approve permissions that have no warnings. function noPromptForNoWarnings() { chrome.permissions.request( - {permissions: ['notifications']}, + {permissions: ['cookies']}, pass(function(granted) { assertTrue(granted); - // Remove the notifications permission to return to normal. + // Remove the cookies permission to return to normal. chrome.permissions.remove( - {permissions: ['notifications']}, + {permissions: ['cookies']}, pass(function(removed) { assertTrue(removed); })); })); },
diff --git a/chrome/test/data/extensions/api_test/permissions/optional/manifest.json b/chrome/test/data/extensions/api_test/permissions/optional/manifest.json index 3611f72..b2565260 100644 --- a/chrome/test/data/extensions/api_test/permissions/optional/manifest.json +++ b/chrome/test/data/extensions/api_test/permissions/optional/manifest.json
@@ -13,8 +13,8 @@ ], "optional_permissions": [ "bookmarks", + "cookies", "management", - "notifications", "background", "http://a.com/*", "http://*.c.com/*"
diff --git a/chrome/test/data/extensions/api_test/tab_capture/end_to_end.js b/chrome/test/data/extensions/api_test/tab_capture/end_to_end.js index 47c23772..3ff64cc6 100644 --- a/chrome/test/data/extensions/api_test/tab_capture/end_to_end.js +++ b/chrome/test/data/extensions/api_test/tab_capture/end_to_end.js
@@ -197,7 +197,11 @@ receiver.createAnswer(function (receiver_description) { receiver.setLocalDescription(receiver_description); sender.setRemoteDescription(receiver_description); + }, function (error) { + chrome.test.fail("createAnswer failed: " + error); }); + }, function (error) { + chrome.test.fail("createOffer failed: " + error) }); } else { chrome.test.fail("Unknown transport method: " + transportMethod);
diff --git a/chrome/test/data/extensions/app/manifest.json b/chrome/test/data/extensions/app/manifest.json index 7deaba5..a5bf5ce2 100644 --- a/chrome/test/data/extensions/app/manifest.json +++ b/chrome/test/data/extensions/app/manifest.json
@@ -2,9 +2,6 @@ "name": "App Test", "version": "1", "manifest_version": 2, - "permissions": [ - "notifications" - ], "app": { "launch": { "web_url": "http://www.example.com/empty.html"
diff --git a/chrome/test/data/extensions/app_no_www/manifest.json b/chrome/test/data/extensions/app_no_www/manifest.json index 9a413dc..c3e8acb 100644 --- a/chrome/test/data/extensions/app_no_www/manifest.json +++ b/chrome/test/data/extensions/app_no_www/manifest.json
@@ -2,9 +2,6 @@ "name": "App Test", "version": "1", "manifest_version": 2, - "permissions": [ - "notifications" - ], "app": { "launch": { "web_url": "http://example.com/"
diff --git a/chrome/test/data/extensions/hosted_app.crx b/chrome/test/data/extensions/hosted_app.crx index 4798bb1..3405cc6 100644 --- a/chrome/test/data/extensions/hosted_app.crx +++ b/chrome/test/data/extensions/hosted_app.crx Binary files differ
diff --git a/chrome/test/data/extensions/https_app/manifest.json b/chrome/test/data/extensions/https_app/manifest.json index 59ec30b..6ed10f6 100644 --- a/chrome/test/data/extensions/https_app/manifest.json +++ b/chrome/test/data/extensions/https_app/manifest.json
@@ -2,9 +2,6 @@ "name": "App Test", "version": "1", "manifest_version": 2, - "permissions": [ - "notifications" - ], "app": { "launch": { "web_url": "https://www.example.com/empty.html"
diff --git a/chrome/test/data/nacl/BUILD.gn b/chrome/test/data/nacl/BUILD.gn index aaafc9f2..29cd5cb 100644 --- a/chrome/test/data/nacl/BUILD.gn +++ b/chrome/test/data/nacl/BUILD.gn
@@ -19,7 +19,6 @@ ":irt_exception_test($newlib)", ":irt_exception_test($pnacl)", ":irt_manifest_file($newlib)", - ":partly_invalid($newlib)", ":pnacl_debug_url_test($pnacl)", ":pnacl_dyncode_syscall_disabled_test($pnacl)", ":pnacl_error_handling_test($pnacl)", @@ -72,6 +71,9 @@ ":sysconf_nprocessors_onln_test($newlib)", ":sysconf_nprocessors_onln_test($pnacl)", ] + if (target_cpu != "arm") { + data_deps += [ ":partly_invalid($newlib)" ] + } if (is_linux) { nonsfi = "//build/toolchain/nacl:newlib_pnacl_nonsfi" data_deps += [
diff --git a/chrome/test/data/nacl/ppapi/ppp_instance/ppapi_ppp_instance.cc b/chrome/test/data/nacl/ppapi/ppp_instance/ppapi_ppp_instance.cc index e190439f..5369e16 100644 --- a/chrome/test/data/nacl/ppapi/ppp_instance/ppapi_ppp_instance.cc +++ b/chrome/test/data/nacl/ppapi/ppp_instance/ppapi_ppp_instance.cc
@@ -46,14 +46,14 @@ PP_Rect clip; PPBView()->GetClipRect(view, &clip); - EXPECT(clip.point.x == 0 && clip.point.y == -1); + EXPECT(clip.point.x == 0 && clip.point.y == 0); // These are based on embed dimensions. PP_Rect position; PPBView()->GetRect(view, &position); fprintf(stderr, "clip.size.height: %d\n", clip.size.height); EXPECT(position.size.width == 15 && clip.size.width == 15); - EXPECT(position.size.height == 20 && clip.size.height == 23); + EXPECT(position.size.height == 20 && clip.size.height == 21); TEST_PASSED; }
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json index 8bca4430..aad34dd 100644 --- a/chrome/test/data/policy/policy_test_cases.json +++ b/chrome/test/data/policy/policy_test_cases.json
@@ -204,6 +204,9 @@ "RemoteAccessClientFirewallTraversal": { }, + "RemoteAccessHostClientDomain": { + }, + "RemoteAccessHostFirewallTraversal": { },
diff --git a/chrome/test/data/webrtc/webrtc-simulcast.html b/chrome/test/data/webrtc/webrtc-simulcast.html index 486681a8..1e9be22 100644 --- a/chrome/test/data/webrtc/webrtc-simulcast.html +++ b/chrome/test/data/webrtc/webrtc-simulcast.html
@@ -191,7 +191,7 @@ } function afterSetServerRemoteDescription() { - pcServer.createAnswer(onServerAnswer); + pcServer.createAnswer(onServerAnswer, onServerAnswerFailed); } function onServerAnswer(desc) { @@ -202,6 +202,10 @@ pcClient.setRemoteDescription(desc); } +function onServerAnswerFailed(err) { + returnToTest('Unexpectedly failed to create answer: ' + err); +} + function onServerGotStream(e) { trace('Received remote stream: ' + e.stream.id + '; looking up corresponding video tag.');
diff --git a/chrome/test/data/webui/cr_test.html b/chrome/test/data/webui/cr_test.html index 05a2c682..7553094 100644 --- a/chrome/test/data/webui/cr_test.html +++ b/chrome/test/data/webui/cr_test.html
@@ -262,24 +262,6 @@ v = 1; assertEquals(1, foo.v); } - -/** - * Tests that an event fired by a WebUI handler is sent to all listeners. - */ -function testAddWebUIListener() { - var responses = new Map(); - cr.addWebUIListener('fullscreen-enabled', function(enabled) { - responses.set('first', enabled); - }); - cr.addWebUIListener('fullscreen-enabled', function(enabled) { - responses.set('second', enabled); - }); - - cr.webUIListenerCallback('fullscreen-enabled', true); - assertTrue(responses.get('first')); - assertTrue(responses.get('second')); -} - </script> </body>
diff --git a/chrome/test/data/webui/media_router/route_details_tests.js b/chrome/test/data/webui/media_router/route_details_tests.js index 9446f2f..123c0b1 100644 --- a/chrome/test/data/webui/media_router/route_details_tests.js +++ b/chrome/test/data/webui/media_router/route_details_tests.js
@@ -38,13 +38,15 @@ }; // Checks the default route view is shown. - var checkJoinButtonIsShown = function() { - assertFalse(details.$['join-route-button'].hasAttribute('hidden')); + var checkStartCastButtonIsShown = function() { + assertFalse( + details.$['start-casting-to-route-button'].hasAttribute('hidden')); }; // Checks the default route view is not shown. - var checkJoinButtonIsNotShown = function() { - assertTrue(details.$['join-route-button'].hasAttribute('hidden')); + var checkStartCastButtonIsNotShown = function() { + assertTrue( + details.$['start-casting-to-route-button'].hasAttribute('hidden')); }; // Checks the custom controller is shown. @@ -92,13 +94,12 @@ MockInteractions.tap(details.$['close-route-button']); }); - // Tests for 'join-route-click' event firing when the - // 'join-route-button' button is clicked. - test('join route button click', function(done) { - details.addEventListener('join-route-click', function() { - done(); - }); - MockInteractions.tap(details.$['join-route-button']); + // Tests for 'start-casting-to-route-click' event firing when the + // 'start-casting-to-route-button' button is clicked. + test('start casting to route button click', function(done) { + details.addEventListener( + 'start-casting-to-route-click', function() { done(); }); + MockInteractions.tap(details.$['start-casting-to-route-button']); }); // Tests the initial expected text. @@ -106,8 +107,9 @@ // <paper-button> text is styled as upper case. checkSpanText(loadTimeData.getString('stopCastingButton') .toUpperCase(), 'close-route-button'); - checkSpanText(loadTimeData.getString('joinButton'), - 'join-route-button'); + checkSpanText( + loadTimeData.getString('startCastingButton'), + 'start-casting-to-route-button'); checkSpanText('', 'route-information'); }); @@ -123,7 +125,7 @@ checkSpanText(loadTimeData.getStringF('castingActivityStatus', fakeRouteOne.description), 'route-information'); checkDefaultViewIsShown(); - checkJoinButtonIsNotShown(); + checkStartCastButtonIsNotShown(); // Set |route| to a different route. details.route = fakeRouteTwo; @@ -131,7 +133,7 @@ checkSpanText(loadTimeData.getStringF('castingActivityStatus', fakeRouteTwo.description), 'route-information'); checkDefaultViewIsShown(); - checkJoinButtonIsShown(); + checkStartCastButtonIsShown(); }); // Tests when |route| exists, has a custom controller, and it loads.
diff --git a/chrome/test/data/webui/settings/reset_page_test.js b/chrome/test/data/webui/settings/reset_page_test.js index 471fa04..2445718 100644 --- a/chrome/test/data/webui/settings/reset_page_test.js +++ b/chrome/test/data/webui/settings/reset_page_test.js
@@ -48,7 +48,7 @@ // - the reset profile dialog is closed after reset is done. test(TestNames.ResetBannerReset, function() { var dialog = resetBanner.$$('settings-reset-profile-dialog'); - assertEquals(undefined, dialog); + assert(!dialog); MockInteractions.tap(resetBanner.$['reset']); Polymer.dom.flush(); dialog = resetBanner.$$('settings-reset-profile-dialog'); @@ -67,7 +67,7 @@ var whenOnHideResetProfileBanner = whenChromeSendCalled( 'onHideResetProfileBanner'); MockInteractions.tap(resetBanner.$['close']); - assertEquals(null, resetBanner.parentNode); + assert(!resetBanner.parentNode); return whenOnHideResetProfileBanner; }); });
diff --git a/chrome/test/data/webui/webui_resource_async_browsertest.js b/chrome/test/data/webui/webui_resource_async_browsertest.js index 3c57998..30916a09 100644 --- a/chrome/test/data/webui/webui_resource_async_browsertest.js +++ b/chrome/test/data/webui/webui_resource_async_browsertest.js
@@ -52,7 +52,7 @@ }); } - suite('cr.js', function() { + suite('SendWithPromise', function() { setup(function() { // Simulate a WebUI handler that echoes back all parameters passed to it. whenChromeSendCalled(CHROME_SEND_NAME).then(function(args) { @@ -96,3 +96,81 @@ // Run all registered tests. mocha.run(); }); + + +TEST_F('WebUIResourceAsyncTest', 'WebUIListeners', function() { + suite('WebUIListeners', function() { + var listener1 = null; + var listener2 = null; + + /** @const {string} */ + var EVENT_NAME = 'my-foo-event'; + + teardown(function() { + if (listener1) + cr.removeWebUIListener(listener1); + if (listener2) + cr.removeWebUIListener(listener2); + }); + + test('removeWebUIListener', function() { + listener1 = cr.addWebUIListener(EVENT_NAME, function() {}); + assertTrue(cr.removeWebUIListener(listener1)); + assertFalse(cr.removeWebUIListener(listener1)); + assertFalse(cr.removeWebUIListener({ + eventName: 'non-existing-event', + uid: 12345, + })); + }); + + test('addWebUIListener_ResponseParams', function() { + var expectedString = 'foo'; + var expectedNumber = 123; + var expectedArray = [1, 2]; + var expectedObject = {}; + + return new Promise(function(resolve, reject) { + listener1 = cr.addWebUIListener(EVENT_NAME, function(s, n, a, o) { + assertEquals(expectedString, s); + assertEquals(expectedNumber, n); + assertEquals(expectedArray, a); + assertEquals(expectedObject, o); + resolve(); + }); + cr.webUIListenerCallback(EVENT_NAME, expectedString, expectedNumber, + expectedArray, expectedObject); + }); + }); + + test('addWebUIListener_NoResponseParams', function() { + return new Promise(function(resolve, reject) { + listener1 = cr.addWebUIListener(EVENT_NAME, function() { + assertEquals(0, arguments.length); + resolve(); + }); + cr.webUIListenerCallback(EVENT_NAME); + }); + }); + + test('addWebUIListener_MulitpleListeners', function() { + /** @constructor */ + var PromiseResolver = function() { + this.promise = new Promise(function(resolve, reject) { + this.resolve = resolve; + this.reject = reject; + }.bind(this)); + }; + + var resolver1 = new PromiseResolver(); + var resolver2 = new PromiseResolver(); + listener1 = cr.addWebUIListener(EVENT_NAME, resolver1.resolve); + listener2 = cr.addWebUIListener(EVENT_NAME, resolver2.resolve); + cr.webUIListenerCallback(EVENT_NAME); + // Check that both listeners registered are invoked. + return Promise.all([resolver1.promise, resolver2.promise]); + }); + }); + + // Run all registered tests. + mocha.run(); +});
diff --git a/chromecast/BUILD.gn b/chromecast/BUILD.gn index 1733a59..5fac3c6f 100644 --- a/chromecast/BUILD.gn +++ b/chromecast/BUILD.gn
@@ -120,9 +120,7 @@ # --test-launcher-jobs=1 => so internal code can bind to port filters += [ "cast_shell_browser_test --no-sandbox --enable-local-file-accesses --enable-cma-media-pipeline --ozone-platform=cast --test-launcher-jobs=1" ] - # TODO(slan): Reenable this test for Desktop x86 when CQ supports it. - # (b/26429268) - if (use_alsa && !is_cast_desktop_build) { + if (use_alsa) { tests += [ "//chromecast/media/cma/backend/alsa:alsa_cma_backend_unittests" ] }
diff --git a/chromecast/base/component/component.h b/chromecast/base/component/component.h index 1a00631..a545ea435 100644 --- a/chromecast/base/component/component.h +++ b/chromecast/base/component/component.h
@@ -271,9 +271,9 @@ }; template <typename C> -class Dependency : public subtle::DependencyBase { +class StrongDependency : public subtle::DependencyBase { public: - Dependency(const WeakReference<C>& dependency, ComponentBase* dependent) + StrongDependency(const WeakReference<C>& dependency, ComponentBase* dependent) : subtle::DependencyBase(dependency, dependent) {} C* operator->() const { @@ -282,14 +282,14 @@ } private: - DISALLOW_COPY_AND_ASSIGN(Dependency); + DISALLOW_COPY_AND_ASSIGN(StrongDependency); }; template <typename C> class WeakReference : public subtle::WeakReferenceBase { public: explicit WeakReference(const C& dependency) : WeakReferenceBase(dependency) {} - explicit WeakReference(const Dependency<C>& dependency) + explicit WeakReference(const StrongDependency<C>& dependency) : subtle::WeakReferenceBase(dependency) {} // Explicitly allow copy. @@ -312,7 +312,7 @@ class Component : public ComponentBase { public: using WeakRef = WeakReference<C>; - using Dependency = Dependency<C>; + using Dependency = StrongDependency<C>; Component() = default;
diff --git a/chromecast/base/metrics/grouped_histogram.cc b/chromecast/base/metrics/grouped_histogram.cc index 4d84929a..1101a799 100644 --- a/chromecast/base/metrics/grouped_histogram.cc +++ b/chromecast/base/metrics/grouped_histogram.cc
@@ -42,7 +42,7 @@ const char* name; int minimum; int maximum; - size_t bucket_count; + uint32_t bucket_count; }; // List of metrics to collect using a GroupedHistogram. @@ -123,7 +123,7 @@ std::string metric_to_group_; Sample minimum_; Sample maximum_; - size_t bucket_count_; + uint32_t bucket_count_; DISALLOW_COPY_AND_ASSIGN(GroupedHistogram); }; @@ -135,7 +135,7 @@ void PreregisterHistogram(const std::string& name, GroupedHistogram::Sample minimum, GroupedHistogram::Sample maximum, - size_t bucket_count, + uint32_t bucket_count, int32_t flags) { DCHECK(base::StatisticsRecorder::IsActive()); DCHECK(base::Histogram::InspectConstructionArguments(
diff --git a/chromecast/browser/metrics/external_metrics.cc b/chromecast/browser/metrics/external_metrics.cc index ce9cbdb..cc1164a 100644 --- a/chromecast/browser/metrics/external_metrics.cc +++ b/chromecast/browser/metrics/external_metrics.cc
@@ -30,7 +30,7 @@ bool CheckValues(const std::string& name, int minimum, int maximum, - size_t bucket_count) { + uint32_t bucket_count) { if (!base::Histogram::InspectConstructionArguments( name, &minimum, &maximum, &bucket_count)) return false;
diff --git a/chromecast/chromecast_tests.gypi b/chromecast/chromecast_tests.gypi index bc7b9ec3d..4bd94b84 100644 --- a/chromecast/chromecast_tests.gypi +++ b/chromecast/chromecast_tests.gypi
@@ -189,9 +189,7 @@ ], }, 'conditions': [ - # TODO(slan): Reenable this test for Desktop x86 when CQ supports it. - # (b/26429268) - ['use_alsa==1 and is_cast_desktop_build==0', { + ['use_alsa==1', { 'dependencies': [ 'media/media.gyp:alsa_cma_backend_unittests', ],
diff --git a/chromecast/common/cast_resource_delegate.cc b/chromecast/common/cast_resource_delegate.cc index 22b29cb..994a426 100644 --- a/chromecast/common/cast_resource_delegate.cc +++ b/chromecast/common/cast_resource_delegate.cc
@@ -97,9 +97,4 @@ extra_localized_strings_.clear(); } -scoped_ptr<gfx::Font> CastResourceDelegate::GetFont( - ui::ResourceBundle::FontStyle style) { - return scoped_ptr<gfx::Font>(); -} - } // namespace chromecast
diff --git a/chromecast/common/cast_resource_delegate.h b/chromecast/common/cast_resource_delegate.h index 160554b..d31fdc2 100644 --- a/chromecast/common/cast_resource_delegate.h +++ b/chromecast/common/cast_resource_delegate.h
@@ -48,7 +48,6 @@ ui::ScaleFactor scale_factor, base::StringPiece* value) override; bool GetLocalizedString(int message_id, base::string16* value) override; - scoped_ptr<gfx::Font> GetFont(ui::ResourceBundle::FontStyle style) override; // Adds/removes/clears extra localized strings. void AddExtraLocalizedString(int resource_id,
diff --git a/chromecast/media/base/BUILD.gn b/chromecast/media/base/BUILD.gn index 5371726..85cfcf3e 100644 --- a/chromecast/media/base/BUILD.gn +++ b/chromecast/media/base/BUILD.gn
@@ -100,7 +100,9 @@ ] deps = [ + "//base", "//build/config/sanitizers:deps", + "//chromecast/base", "//chromecast/media/cma/backend", ] } @@ -121,7 +123,9 @@ ] deps = [ + "//base", "//build/config/sanitizers:deps", + "//chromecast/base", "//chromecast/media/cma/backend", ] }
diff --git a/chromecast/media/base/cast_media_default.cc b/chromecast/media/base/cast_media_default.cc index 33f9590..dbf4867 100644 --- a/chromecast/media/base/cast_media_default.cc +++ b/chromecast/media/base/cast_media_default.cc
@@ -2,10 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/memory/scoped_ptr.h" #include "build/build_config.h" +#include "base/single_thread_task_runner.h" +#include "base/thread_task_runner_handle.h" +#include "chromecast/base/task_runner_impl.h" #include "chromecast/media/cma/backend/media_pipeline_backend_default.h" #include "chromecast/public/cast_media_shlib.h" #include "chromecast/public/graphics_types.h" +#include "chromecast/public/media/media_pipeline_device_params.h" #include "chromecast/public/media_codec_support_shlib.h" #include "chromecast/public/video_plane.h" @@ -22,6 +27,7 @@ }; DefaultVideoPlane* g_video_plane = nullptr; +base::ThreadTaskRunnerHandle* g_thread_task_runner_handle = nullptr; } // namespace @@ -32,6 +38,8 @@ void CastMediaShlib::Finalize() { delete g_video_plane; g_video_plane = nullptr; + delete g_thread_task_runner_handle; + g_thread_task_runner_handle = nullptr; } VideoPlane* CastMediaShlib::GetVideoPlane() { @@ -40,6 +48,17 @@ MediaPipelineBackend* CastMediaShlib::CreateMediaPipelineBackend( const MediaPipelineDeviceParams& params) { + // Set up the static reference in base::ThreadTaskRunnerHandle::Get + // for the media thread in this shared library. We can extract the + // SingleThreadTaskRunner passed in from cast_shell for this. + if (!base::ThreadTaskRunnerHandle::IsSet()) { + DCHECK(!g_thread_task_runner_handle); + const scoped_refptr<base::SingleThreadTaskRunner> task_runner = + static_cast<TaskRunnerImpl*>(params.task_runner)->runner(); + DCHECK(task_runner->BelongsToCurrentThread()); + g_thread_task_runner_handle = new base::ThreadTaskRunnerHandle(task_runner); + } + return new MediaPipelineBackendDefault(); }
diff --git a/chromecast/media/cma/backend/alsa/audio_decoder_alsa.cc b/chromecast/media/cma/backend/alsa/audio_decoder_alsa.cc index 0a0ab98..eddff02e 100644 --- a/chromecast/media/cma/backend/alsa/audio_decoder_alsa.cc +++ b/chromecast/media/cma/backend/alsa/audio_decoder_alsa.cc
@@ -75,6 +75,7 @@ DCHECK(delegate_); stats_ = Statistics(); is_eos_ = false; + last_buffer_pts_ = std::numeric_limits<int64_t>::min(); struct timespec now; if (clock_gettime(CLOCK_MONOTONIC, &now) == 0) { @@ -135,8 +136,10 @@ uint64_t input_bytes = buffer->end_of_stream() ? 0 : buffer->data_size(); scoped_refptr<DecoderBufferBase> buffer_base( static_cast<DecoderBufferBase*>(buffer)); - if (!buffer->end_of_stream()) + if (!buffer->end_of_stream()) { last_buffer_pts_ = buffer->timestamp(); + current_pts_ = std::min(current_pts_, last_buffer_pts_); + } // If the buffer is already decoded, do not attempt to decode. Call // OnBufferDecoded asynchronously on the main thread. @@ -278,7 +281,7 @@ const RenderingDelay& delay) { TRACE_FUNCTION_ENTRY0(); DCHECK(task_runner_->BelongsToCurrentThread()); - if (status == MediaPipelineBackendAlsa::kBufferSuccess) + if (status == MediaPipelineBackendAlsa::kBufferSuccess && !is_eos_) current_pts_ = last_buffer_pts_; if (delay.timestamp_microseconds != kInvalidDelayTimestamp) last_known_delay_ = delay;
diff --git a/chromecast/media/cma/backend/alsa/mock_alsa_wrapper.h b/chromecast/media/cma/backend/alsa/mock_alsa_wrapper.h index 3aed1e02..071e934 100644 --- a/chromecast/media/cma/backend/alsa/mock_alsa_wrapper.h +++ b/chromecast/media/cma/backend/alsa/mock_alsa_wrapper.h
@@ -112,7 +112,7 @@ int(snd_pcm_t* handle, snd_pcm_hw_params_t* params, snd_pcm_format_t format)); - MOCK_METHOD4(PcmHwParamsTestRateNear, + MOCK_METHOD4(PcmHwParamsTestRate, int(snd_pcm_t* handle, snd_pcm_hw_params_t* params, unsigned int rate,
diff --git a/chromecast/media/cma/backend/alsa/stream_mixer_alsa.cc b/chromecast/media/cma/backend/alsa/stream_mixer_alsa.cc index 30828923..d5f8760 100644 --- a/chromecast/media/cma/backend/alsa/stream_mixer_alsa.cc +++ b/chromecast/media/cma/backend/alsa/stream_mixer_alsa.cc
@@ -261,6 +261,7 @@ int StreamMixerAlsa::SetAlsaPlaybackParams() { int err = 0; // Set hardware parameters. + DCHECK(pcm_); DCHECK(!pcm_hw_params_); RETURN_ERROR_CODE(PcmHwParamsMalloc, &pcm_hw_params_); RETURN_ERROR_CODE(PcmHwParamsAny, pcm_, pcm_hw_params_); @@ -421,12 +422,16 @@ void StreamMixerAlsa::FinalizeOnMixerThread() { RUN_ON_MIXER_THREAD(&StreamMixerAlsa::FinalizeOnMixerThread); - retry_write_frames_timer_.reset(); - check_close_timer_.reset(); - Stop(); ClosePcm(); + // Post a task to allow any pending input deletions to run. + POST_TASK_TO_MIXER_THREAD(&StreamMixerAlsa::FinishFinalize); +} + +void StreamMixerAlsa::FinishFinalize() { + retry_write_frames_timer_.reset(); + check_close_timer_.reset(); inputs_.clear(); ignored_inputs_.clear(); } @@ -632,6 +637,8 @@ } void StreamMixerAlsa::OnFramesQueued() { + if (state_ != kStateNormalPlayback) + return; if (retry_write_frames_timer_->IsRunning()) return; retry_write_frames_timer_->Start(
diff --git a/chromecast/media/cma/backend/alsa/stream_mixer_alsa.h b/chromecast/media/cma/backend/alsa/stream_mixer_alsa.h index 0e8ba35d..ba88802 100644 --- a/chromecast/media/cma/backend/alsa/stream_mixer_alsa.h +++ b/chromecast/media/cma/backend/alsa/stream_mixer_alsa.h
@@ -146,6 +146,7 @@ private: void ResetTaskRunnerForTest(); void FinalizeOnMixerThread(); + void FinishFinalize(); // Reads the buffer size, period size, start threshold, and avail min value // from the provided command line flags or uses default values if no flags are
diff --git a/chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc b/chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc index d8861191..dbe841b 100644 --- a/chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc +++ b/chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc
@@ -29,7 +29,10 @@ const size_t kBytesPerSample = sizeof(int32_t); const int kNumChannels = 2; const int kTestMaxReadSize = 4096; -const int kTestSamplesPerSecond = 12345; + +// kTestSamplesPerSecond needs to be higher than kLowSampleRateCutoff for the +// mixer to use it. +const int kTestSamplesPerSecond = 54321; // This array holds |NUM_DATA_SETS| sets of arbitrary interleaved float data. // Each set holds |NUM_SAMPLES| / kNumChannels frames of data.
diff --git a/chromecast/media/cma/backend/audio_decoder_default.cc b/chromecast/media/cma/backend/audio_decoder_default.cc index 28887ba..9a399bb 100644 --- a/chromecast/media/cma/backend/audio_decoder_default.cc +++ b/chromecast/media/cma/backend/audio_decoder_default.cc
@@ -4,13 +4,21 @@ #include "chromecast/media/cma/backend/audio_decoder_default.h" +#include <limits> + +#include "base/bind.h" +#include "base/location.h" #include "base/logging.h" +#include "base/thread_task_runner_handle.h" #include "chromecast/public/media/cast_decoder_buffer.h" namespace chromecast { namespace media { -AudioDecoderDefault::AudioDecoderDefault() : delegate_(nullptr) {} +AudioDecoderDefault::AudioDecoderDefault() + : delegate_(nullptr), + last_push_pts_(std::numeric_limits<int64_t>::min()), + weak_factory_(this) {} AudioDecoderDefault::~AudioDecoderDefault() {} @@ -23,8 +31,14 @@ CastDecoderBuffer* buffer) { DCHECK(delegate_); DCHECK(buffer); - if (buffer->end_of_stream()) - delegate_->OnEndOfStream(); + + if (buffer->end_of_stream()) { + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::Bind(&AudioDecoderDefault::OnEndOfStream, + weak_factory_.GetWeakPtr())); + } else { + last_push_pts_ = buffer->timestamp(); + } return MediaPipelineBackend::kBufferSuccess; } @@ -43,5 +57,9 @@ return RenderingDelay(); } +void AudioDecoderDefault::OnEndOfStream() { + delegate_->OnEndOfStream(); +} + } // namespace media } // namespace chromecast
diff --git a/chromecast/media/cma/backend/audio_decoder_default.h b/chromecast/media/cma/backend/audio_decoder_default.h index 75e0dec..ea712dad 100644 --- a/chromecast/media/cma/backend/audio_decoder_default.h +++ b/chromecast/media/cma/backend/audio_decoder_default.h
@@ -5,7 +5,10 @@ #ifndef CHROMECAST_MEDIA_CMA_BACKEND_AUDIO_DECODER_DEFAULT_H_ #define CHROMECAST_MEDIA_CMA_BACKEND_AUDIO_DECODER_DEFAULT_H_ +#include <stdint.h> + #include "base/macros.h" +#include "base/memory/weak_ptr.h" #include "chromecast/public/media/media_pipeline_backend.h" namespace chromecast { @@ -16,6 +19,8 @@ AudioDecoderDefault(); ~AudioDecoderDefault() override; + int64_t last_push_pts() const { return last_push_pts_; } + // MediaPipelineBackend::AudioDecoder implementation: void SetDelegate(Delegate* delegate) override; MediaPipelineBackend::BufferStatus PushBuffer( @@ -26,7 +31,11 @@ RenderingDelay GetRenderingDelay() override; private: + void OnEndOfStream(); + Delegate* delegate_; + int64_t last_push_pts_; + base::WeakPtrFactory<AudioDecoderDefault> weak_factory_; DISALLOW_COPY_AND_ASSIGN(AudioDecoderDefault); };
diff --git a/chromecast/media/cma/backend/audio_video_pipeline_device_unittest.cc b/chromecast/media/cma/backend/audio_video_pipeline_device_unittest.cc index 72d4d4b1..3cb80b4 100644 --- a/chromecast/media/cma/backend/audio_video_pipeline_device_unittest.cc +++ b/chromecast/media/cma/backend/audio_video_pipeline_device_unittest.cc
@@ -4,6 +4,7 @@ #include <stdint.h> +#include <limits> #include <vector> #include "base/bind.h" @@ -20,6 +21,7 @@ #include "base/single_thread_task_runner.h" #include "base/thread_task_runner_handle.h" #include "base/threading/thread.h" +#include "base/threading/thread_checker.h" #include "base/time/time.h" #include "chromecast/base/task_runner_impl.h" #include "chromecast/media/cma/base/decoder_buffer_adapter.h" @@ -31,6 +33,7 @@ #include "chromecast/public/media/media_pipeline_backend.h" #include "chromecast/public/media/media_pipeline_device_params.h" #include "media/base/audio_decoder_config.h" +#include "media/base/audio_timestamp_helper.h" #include "media/base/decoder_buffer.h" #include "media/base/video_decoder_config.h" #include "testing/gtest/include/gtest/gtest.h" @@ -43,6 +46,31 @@ namespace { const base::TimeDelta kMonitorLoopDelay = base::TimeDelta::FromMilliseconds(20); +// Call Start() with an initial PTS of 1 second, to test the behaviour if +// we push buffers with a PTS before the start PTS. In this case the backend +// should report the PTS as no later than the last pushed buffers. +const int64_t kStartPts = 1000 * 1000; + +void IgnoreEos() {} + +AudioConfig DefaultAudioConfig() { + AudioConfig default_config; + default_config.codec = kCodecPCM; + default_config.sample_format = kSampleFormatS16; + default_config.channel_number = 2; + default_config.bytes_per_channel = 2; + default_config.samples_per_second = 48000; + return default_config; +} + +VideoConfig DefaultVideoConfig() { + VideoConfig default_config; + default_config.codec = kCodecH264; + default_config.profile = kH264Main; + default_config.additional_config = nullptr; + default_config.is_encrypted = false; + return default_config; +} base::FilePath GetTestDataFilePath(const std::string& name) { base::FilePath file_path; @@ -56,6 +84,7 @@ class BufferFeeder : public MediaPipelineBackend::Decoder::Delegate { public: + explicit BufferFeeder(const base::Closure& eos_cb); ~BufferFeeder() override {} static scoped_ptr<BufferFeeder> LoadAudio(MediaPipelineBackend* backend, @@ -67,32 +96,58 @@ const base::Closure& eos_cb); bool eos() const { return eos_; } + MediaPipelineBackend::Decoder* decoder() const { return decoder_; } + int64_t last_pushed_pts() const { return last_pushed_pts_; } - void Initialize(MediaPipelineBackend::Decoder* decoder, + void SetAudioConfig(const AudioConfig& config) { audio_config_ = config; } + void SetVideoConfig(const VideoConfig& config) { video_config_ = config; } + + void FeedContinuousPcm(); + void PauseBeforeEos(); + void Initialize(MediaPipelineBackend* backend, + MediaPipelineBackend::Decoder* decoder, const BufferList& buffers); void Start(); + void Stop(); + + void ScheduleConfigTest(); + + void TestAudioConfigs(); + void TestAudioVolume(); + void TestVideoConfigs(); // MediaPipelineBackend::Decoder::Delegate implementation: void OnPushBufferComplete(MediaPipelineBackend::BufferStatus status) override; void OnEndOfStream() override; - void OnDecoderError() override { ASSERT_TRUE(false); } + void OnDecoderError() override; void OnKeyStatusChanged(const std::string& key_id, CastKeyStatus key_status, - uint32_t system_code) override { - ASSERT_TRUE(false); - } - void OnVideoResolutionChanged(const Size& size) override {} + uint32_t system_code) override; + void OnVideoResolutionChanged(const Size& size) override; private: - explicit BufferFeeder(const base::Closure& eos_cb); void FeedBuffer(); + void FeedPcm(); + void TestConfigs(); base::Closure eos_cb_; + bool within_push_buffer_call_; + bool expecting_buffer_complete_; bool feeding_completed_; bool eos_; + bool pause_before_eos_; + bool test_config_after_next_push_; + bool feed_continuous_pcm_; + MediaPipelineBackend* backend_; MediaPipelineBackend::Decoder* decoder_; BufferList buffers_; + BufferList buffers_copy_; scoped_refptr<DecoderBufferBase> pending_buffer_; + base::ThreadChecker thread_checker_; + AudioConfig audio_config_; + VideoConfig video_config_; + int64_t last_pushed_pts_; + scoped_ptr<::media::AudioTimestampHelper> timestamp_helper_; DISALLOW_COPY_AND_ASSIGN(BufferFeeder); }; @@ -113,6 +168,14 @@ AudioVideoPipelineDeviceTest(); ~AudioVideoPipelineDeviceTest() override; + MediaPipelineBackend* backend() const { return backend_.get(); } + void set_sync_type(MediaPipelineDeviceParams::MediaSyncType sync_type) { + sync_type_ = sync_type; + } + void set_audio_type(MediaPipelineDeviceParams::AudioStreamType audio_type) { + audio_type_ = audio_type; + } + void SetUp() override { CastMediaShlib::Initialize( base::CommandLine::ForCurrentProcess()->argv()); @@ -135,22 +198,43 @@ // Adds a pause to the end of pause pattern void AddPause(base::TimeDelta delay, base::TimeDelta length); + void PauseBeforeEos(); + void AddEffectsStreams(); + void Initialize(); void Start(); void OnEndOfStream(); - private: - void Initialize(); + void SetAudioFeeder(scoped_ptr<BufferFeeder> audio_feeder) { + audio_feeder_ = std::move(audio_feeder); + } + void SetVideoFeeder(scoped_ptr<BufferFeeder> video_feeder) { + video_feeder_ = std::move(video_feeder); + } + void RunStoppedChecks(); + void RunPlaybackChecks(); + void TestBackendStates(); + void StartImmediateEosTest(); + void EndImmediateEosTest(); + + private: void MonitorLoop(); void OnPauseCompleted(); + MediaPipelineDeviceParams::MediaSyncType sync_type_; + MediaPipelineDeviceParams::AudioStreamType audio_type_; scoped_ptr<TaskRunnerImpl> task_runner_; scoped_ptr<MediaPipelineBackend> backend_; + std::vector<scoped_ptr<MediaPipelineBackend>> effects_backends_; + std::vector<scoped_ptr<BufferFeeder>> effects_feeders_; scoped_ptr<BufferFeeder> audio_feeder_; scoped_ptr<BufferFeeder> video_feeder_; bool stopped_; + bool ran_playing_playback_checks_; + bool backwards_pts_change_; + int64_t last_pts_; // Current media time. base::TimeDelta pause_time_; @@ -165,13 +249,32 @@ namespace { BufferFeeder::BufferFeeder(const base::Closure& eos_cb) - : eos_cb_(eos_cb), feeding_completed_(false), eos_(false) { + : eos_cb_(eos_cb), + within_push_buffer_call_(false), + expecting_buffer_complete_(false), + feeding_completed_(false), + eos_(false), + pause_before_eos_(false), + test_config_after_next_push_(false), + feed_continuous_pcm_(false), + backend_(nullptr) { CHECK(!eos_cb_.is_null()); } -void BufferFeeder::Initialize(MediaPipelineBackend::Decoder* decoder, +void BufferFeeder::FeedContinuousPcm() { + feed_continuous_pcm_ = true; +} + +void BufferFeeder::PauseBeforeEos() { + pause_before_eos_ = true; +} + +void BufferFeeder::Initialize(MediaPipelineBackend* backend, + MediaPipelineBackend::Decoder* decoder, const BufferList& buffers) { + CHECK(backend); CHECK(decoder); + backend_ = backend; decoder_ = decoder; decoder_->SetDelegate(this); buffers_ = buffers; @@ -180,28 +283,65 @@ } void BufferFeeder::Start() { + if (feed_continuous_pcm_) { + timestamp_helper_.reset( + new ::media::AudioTimestampHelper(audio_config_.samples_per_second)); + timestamp_helper_->SetBaseTimestamp(base::TimeDelta()); + } + last_pushed_pts_ = std::numeric_limits<int64_t>::min(); + buffers_copy_ = buffers_; base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::Bind(&BufferFeeder::FeedBuffer, base::Unretained(this))); } +void BufferFeeder::Stop() { + feeding_completed_ = true; +} + +void BufferFeeder::ScheduleConfigTest() { + if (expecting_buffer_complete_) { + test_config_after_next_push_ = true; + } else { + TestConfigs(); + } +} + void BufferFeeder::FeedBuffer() { - // Possibly feed one buffer. - CHECK(!buffers_.empty()); + CHECK(decoder_); if (feeding_completed_) return; + if (feed_continuous_pcm_) { + FeedPcm(); + return; + } + // Possibly feed one buffer. + CHECK(!buffers_.empty()); pending_buffer_ = buffers_.front(); + if (pending_buffer_->end_of_stream()) { + if (pause_before_eos_) + ASSERT_TRUE(backend_->Pause()); + } else { + last_pushed_pts_ = pending_buffer_->timestamp(); + } + expecting_buffer_complete_ = true; + within_push_buffer_call_ = true; BufferStatus status = decoder_->PushBuffer(pending_buffer_.get()); + within_push_buffer_call_ = false; EXPECT_NE(status, MediaPipelineBackend::kBufferFailed); buffers_.pop_front(); + if (pending_buffer_->end_of_stream() && pause_before_eos_) + ASSERT_TRUE(backend_->Resume()); + // Feeding is done, just wait for the end of stream callback. if (pending_buffer_->end_of_stream() || buffers_.empty()) { if (buffers_.empty() && !pending_buffer_->end_of_stream()) LOG(WARNING) << "Stream emptied without feeding EOS frame"; + if (!buffers_.empty()) + LOG(WARNING) << "Stream has more buffers after EOS frame"; feeding_completed_ = true; - return; } if (status == MediaPipelineBackend::kBufferPending) @@ -210,13 +350,50 @@ OnPushBufferComplete(MediaPipelineBackend::kBufferSuccess); } +void BufferFeeder::FeedPcm() { + const int num_frames = 512; + scoped_refptr<::media::DecoderBuffer> silence_buffer( + new ::media::DecoderBuffer(num_frames * audio_config_.channel_number * + audio_config_.bytes_per_channel)); + memset(silence_buffer->writable_data(), 0, silence_buffer->data_size()); + pending_buffer_ = new media::DecoderBufferAdapter(silence_buffer); + pending_buffer_->set_timestamp(timestamp_helper_->GetTimestamp()); + timestamp_helper_->AddFrames(num_frames); + + expecting_buffer_complete_ = true; + within_push_buffer_call_ = true; + BufferStatus status = decoder_->PushBuffer(pending_buffer_.get()); + within_push_buffer_call_ = false; + ASSERT_NE(status, MediaPipelineBackend::kBufferFailed); + if (status == MediaPipelineBackend::kBufferPending) + return; + OnPushBufferComplete(MediaPipelineBackend::kBufferSuccess); +} + void BufferFeeder::OnEndOfStream() { + DCHECK(thread_checker_.CalledOnValidThread()); + EXPECT_FALSE(expecting_buffer_complete_) + << "Got OnEndOfStream() before the EOS buffer completed"; eos_ = true; eos_cb_.Run(); } void BufferFeeder::OnPushBufferComplete(BufferStatus status) { - EXPECT_NE(status, MediaPipelineBackend::kBufferFailed); + DCHECK(thread_checker_.CalledOnValidThread()); + pending_buffer_ = nullptr; + EXPECT_FALSE(within_push_buffer_call_) + << "OnPushBufferComplete() called during a call to PushBuffer()"; + EXPECT_TRUE(expecting_buffer_complete_) + << "OnPushBufferComplete() called unexpectedly"; + expecting_buffer_complete_ = false; + ASSERT_NE(status, MediaPipelineBackend::kBufferFailed); + EXPECT_FALSE(eos_) << "Got OnPushBufferComplete() after OnEndOfStream()"; + + if (test_config_after_next_push_) { + test_config_after_next_push_ = false; + TestConfigs(); + } + if (feeding_completed_) return; @@ -224,6 +401,131 @@ FROM_HERE, base::Bind(&BufferFeeder::FeedBuffer, base::Unretained(this))); } +void BufferFeeder::OnDecoderError() { + DCHECK(thread_checker_.CalledOnValidThread()); + if (feed_continuous_pcm_) { + feeding_completed_ = true; + } else { + ASSERT_TRUE(false); + } +} + +void BufferFeeder::OnKeyStatusChanged(const std::string& key_id, + CastKeyStatus key_status, + uint32_t system_code) { + DCHECK(thread_checker_.CalledOnValidThread()); + ASSERT_TRUE(false); +} + +void BufferFeeder::OnVideoResolutionChanged(const Size& size) { + DCHECK(thread_checker_.CalledOnValidThread()); +} + +void BufferFeeder::TestConfigs() { + if (IsValidConfig(audio_config_)) + TestAudioConfigs(); + if (IsValidConfig(video_config_)) + TestVideoConfigs(); +} + +void BufferFeeder::TestAudioConfigs() { + MediaPipelineBackend::AudioDecoder* audio_decoder = + static_cast<MediaPipelineBackend::AudioDecoder*>(decoder_); + AudioConfig config; + // First, make sure that kAudioCodecUnknown is not accepted. + config.codec = kAudioCodecUnknown; + config.sample_format = kSampleFormatS16; + config.channel_number = 2; + config.bytes_per_channel = 2; + config.samples_per_second = 48000; + // Set invalid config first, to test that the decoder still accepts valid + // config after an invalid config. + audio_decoder->SetConfig(config); + + // Next, test required sample formats. + config.codec = kCodecPCM_S16BE; + EXPECT_TRUE(audio_decoder->SetConfig(config)) + << "Audio decoder does not accept kCodecPCM_S16BE"; + + config.codec = kCodecPCM; + EXPECT_TRUE(audio_decoder->SetConfig(config)) + << "Audio decoder does not accept kCodecPCM"; + + config.sample_format = kSampleFormatPlanarF32; + config.bytes_per_channel = 4; + EXPECT_TRUE(audio_decoder->SetConfig(config)) + << "Audio decoder does not accept kCodecPCM with " + << "planar float (required for multiroom audio)"; + + config.codec = kCodecAAC; + // TODO(kmackay) Determine required sample formats/channel numbers. + config.sample_format = kSampleFormatS16; + config.bytes_per_channel = 2; + config.codec = kCodecAAC; + EXPECT_TRUE(audio_decoder->SetConfig(config)) + << "Audio decoder does not accept kCodecAAC"; + config.codec = kCodecMP3; + EXPECT_TRUE(audio_decoder->SetConfig(config)) + << "Audio decoder does not accept kCodecMP3"; + + // Test optional codecs. + // TODO(kmackay) Make sure other parts of config are correct for each codec. + config.codec = kCodecOpus; + if (!audio_decoder->SetConfig(config)) + LOG(INFO) << "Audio decoder does not accept kCodecOpus"; + config.codec = kCodecEAC3; + if (!audio_decoder->SetConfig(config)) + LOG(INFO) << "Audio decoder does not accept kCodecEAC3"; + config.codec = kCodecAC3; + if (!audio_decoder->SetConfig(config)) + LOG(INFO) << "Audio decoder does not accept kCodecAC3"; + config.codec = kCodecDTS; + if (!audio_decoder->SetConfig(config)) + LOG(INFO) << "Audio decoder does not accept kCodecDTS"; + config.codec = kCodecFLAC; + if (!audio_decoder->SetConfig(config)) + LOG(INFO) << "Audio decoder does not accept kCodecFLAC"; + + // Test supported sample rates. + const int kRequiredSampleRates[] = {8000, 11025, 12000, 16000, 22050, + 24000, 32000, 44100, 48000}; + const int kHiResSampleRates[] = {64000, 88200, 96000}; + config.codec = kCodecPCM; + for (int rate : kRequiredSampleRates) { + config.samples_per_second = rate; + EXPECT_TRUE(audio_decoder->SetConfig(config)) + << "Audio decoder does not accept sample rate " << rate; + } + for (int rate : kHiResSampleRates) { + config.samples_per_second = rate; + if (!audio_decoder->SetConfig(config)) + LOG(INFO) << "Audio decoder does not accept hi-res sample rate " << rate; + } + EXPECT_TRUE(audio_decoder->SetConfig(audio_config_)); +} + +void BufferFeeder::TestAudioVolume() { + MediaPipelineBackend::AudioDecoder* audio_decoder = + static_cast<MediaPipelineBackend::AudioDecoder*>(decoder_); + EXPECT_TRUE(audio_decoder->SetVolume(1.0)) + << "Failed to set audio volume to 1.0"; + EXPECT_TRUE(audio_decoder->SetVolume(0.0)) + << "Failed to set audio volume to 0.0"; + EXPECT_TRUE(audio_decoder->SetVolume(0.2)) + << "Failed to set audio volume to 0.2"; +} + +void BufferFeeder::TestVideoConfigs() { + MediaPipelineBackend::VideoDecoder* video_decoder = + static_cast<MediaPipelineBackend::VideoDecoder*>(decoder_); + VideoConfig config; + config.codec = kVideoCodecUnknown; + // Set invalid config first, to test that the decoder still accepts valid + // config after an invalid config. + video_decoder->SetConfig(config); + EXPECT_TRUE(video_decoder->SetConfig(video_config_)); +} + // static scoped_ptr<BufferFeeder> BufferFeeder::LoadAudio(MediaPipelineBackend* backend, const std::string& filename, @@ -234,14 +536,15 @@ MediaPipelineBackend::AudioDecoder* decoder = backend->CreateAudioDecoder(); CHECK(decoder); - - bool success = decoder->SetConfig(DecoderConfigAdapter::ToCastAudioConfig( - kPrimary, demux_result.audio_config)); + AudioConfig config = DecoderConfigAdapter::ToCastAudioConfig( + kPrimary, demux_result.audio_config); + bool success = decoder->SetConfig(config); CHECK(success); VLOG(2) << "Got " << demux_result.frames.size() << " audio input frames"; scoped_ptr<BufferFeeder> feeder(new BufferFeeder(eos_cb)); - feeder->Initialize(decoder, demux_result.frames); + feeder->audio_config_ = config; + feeder->Initialize(backend, decoder, demux_result.frames); return feeder; } @@ -264,7 +567,7 @@ // TODO(erickung): Either pull data from stream or make caller specify value video_config.codec = kCodecH264; video_config.profile = kH264Main; - video_config.additional_config = NULL; + video_config.additional_config = nullptr; video_config.is_encrypted = false; } else { base::FilePath file_path = GetTestDataFilePath(filename); @@ -282,22 +585,68 @@ VLOG(2) << "Got " << buffers.size() << " video input frames"; scoped_ptr<BufferFeeder> feeder(new BufferFeeder(eos_cb)); - feeder->Initialize(decoder, buffers); + feeder->video_config_ = video_config; + feeder->Initialize(backend, decoder, buffers); return feeder; } } // namespace AudioVideoPipelineDeviceTest::AudioVideoPipelineDeviceTest() - : stopped_(false), pause_pattern_() {} + : sync_type_(MediaPipelineDeviceParams::kModeSyncPts), + audio_type_(MediaPipelineDeviceParams::kAudioStreamNormal), + stopped_(false), + ran_playing_playback_checks_(false), + backwards_pts_change_(false), + pause_pattern_() {} AudioVideoPipelineDeviceTest::~AudioVideoPipelineDeviceTest() {} +void AudioVideoPipelineDeviceTest::Initialize() { + // Create the media device. + task_runner_.reset(new TaskRunnerImpl()); + MediaPipelineDeviceParams params(sync_type_, audio_type_, task_runner_.get()); + backend_.reset(CastMediaShlib::CreateMediaPipelineBackend(params)); + CHECK(backend_); +} + void AudioVideoPipelineDeviceTest::AddPause(base::TimeDelta delay, base::TimeDelta length) { pause_pattern_.push_back(PauseInfo(delay, length)); } +void AudioVideoPipelineDeviceTest::PauseBeforeEos() { + if (audio_feeder_) + audio_feeder_->PauseBeforeEos(); + if (video_feeder_) + video_feeder_->PauseBeforeEos(); +} + +void AudioVideoPipelineDeviceTest::AddEffectsStreams() { + const int kNumEffectsStreams = 3; + for (int i = 0; i < kNumEffectsStreams; ++i) { + MediaPipelineDeviceParams params( + MediaPipelineDeviceParams::kModeIgnorePts, + MediaPipelineDeviceParams::kAudioStreamSoundEffects, + task_runner_.get()); + MediaPipelineBackend* effects_backend = + CastMediaShlib::CreateMediaPipelineBackend(params); + CHECK(effects_backend); + effects_backends_.push_back(make_scoped_ptr(effects_backend)); + + MediaPipelineBackend::AudioDecoder* audio_decoder = + effects_backend->CreateAudioDecoder(); + audio_decoder->SetConfig(DefaultAudioConfig()); + + scoped_ptr<BufferFeeder> feeder(new BufferFeeder(base::Bind(&IgnoreEos))); + feeder->FeedContinuousPcm(); + feeder->Initialize(effects_backend, audio_decoder, BufferList()); + feeder->SetAudioConfig(DefaultAudioConfig()); + effects_feeders_.push_back(std::move(feeder)); + ASSERT_TRUE(effects_backend->Initialize()); + } +} + void AudioVideoPipelineDeviceTest::SetPausePattern( const std::vector<PauseInfo> pattern) { pause_pattern_ = pattern; @@ -310,8 +659,7 @@ backend_.get(), filename, base::Bind(&AudioVideoPipelineDeviceTest::OnEndOfStream, base::Unretained(this))); - bool success = backend_->Initialize(); - ASSERT_TRUE(success); + ASSERT_TRUE(backend_->Initialize()); } void AudioVideoPipelineDeviceTest::ConfigureForVideoOnly( @@ -322,8 +670,7 @@ backend_.get(), filename, raw_h264, base::Bind(&AudioVideoPipelineDeviceTest::OnEndOfStream, base::Unretained(this))); - bool success = backend_->Initialize(); - ASSERT_TRUE(success); + ASSERT_TRUE(backend_->Initialize()); } void AudioVideoPipelineDeviceTest::ConfigureForFile( @@ -334,33 +681,72 @@ video_feeder_ = BufferFeeder::LoadVideo(backend_.get(), filename, false /* raw_h264 */, eos_cb); audio_feeder_ = BufferFeeder::LoadAudio(backend_.get(), filename, eos_cb); - bool success = backend_->Initialize(); - ASSERT_TRUE(success); + ASSERT_TRUE(backend_->Initialize()); } void AudioVideoPipelineDeviceTest::Start() { pause_time_ = base::TimeDelta(); pause_pattern_idx_ = 0; stopped_ = false; + ran_playing_playback_checks_ = false; + last_pts_ = std::numeric_limits<int64_t>::min(); if (audio_feeder_) audio_feeder_->Start(); if (video_feeder_) video_feeder_->Start(); - backend_->Start(0); + for (auto& feeder : effects_feeders_) + feeder->Start(); + for (auto& backend : effects_backends_) + backend->Start(kStartPts); + + RunStoppedChecks(); + + backend_->Start(kStartPts); + int64_t current_pts = backend()->GetCurrentPts(); + EXPECT_TRUE(kStartPts || current_pts == std::numeric_limits<int64_t>::min()); + last_pts_ = current_pts; base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::Bind(&AudioVideoPipelineDeviceTest::MonitorLoop, base::Unretained(this))); } +void AudioVideoPipelineDeviceTest::RunStoppedChecks() { + if (audio_feeder_) { + audio_feeder_->ScheduleConfigTest(); + audio_feeder_->TestAudioVolume(); + } + if (video_feeder_) + video_feeder_->ScheduleConfigTest(); +} + +void AudioVideoPipelineDeviceTest::RunPlaybackChecks() { + RunStoppedChecks(); + + EXPECT_TRUE(backend_->SetPlaybackRate(1.0f)); + if (!backend_->SetPlaybackRate(0.1f)) + LOG(INFO) << "Playback rate 0.1 not supported"; + if (!backend_->SetPlaybackRate(0.5f)) + LOG(INFO) << "Playback rate 0.5 not supported"; + if (!backend_->SetPlaybackRate(1.5f)) + LOG(INFO) << "Playback rate 1.5 not supported"; + EXPECT_TRUE(backend_->SetPlaybackRate(1.0f)); +} + void AudioVideoPipelineDeviceTest::OnEndOfStream() { if ((!audio_feeder_ || audio_feeder_->eos()) && (!video_feeder_ || video_feeder_->eos())) { + RunPlaybackChecks(); bool success = backend_->Stop(); stopped_ = true; ASSERT_TRUE(success); + RunStoppedChecks(); + + for (auto& feeder : effects_feeders_) + feeder->Stop(); + base::MessageLoop::current()->QuitWhenIdle(); } } @@ -370,8 +756,33 @@ if (stopped_) return; - base::TimeDelta media_time = - base::TimeDelta::FromMicroseconds(backend_->GetCurrentPts()); + // Run checks while playing (once). + if (!ran_playing_playback_checks_) { + RunPlaybackChecks(); + ran_playing_playback_checks_ = true; + } + + int64_t pts = backend_->GetCurrentPts(); + base::TimeDelta media_time = base::TimeDelta::FromMicroseconds(pts); + + // Check that the current PTS is no more than 100ms past the last pushed PTS. + if (audio_feeder_ && + audio_feeder_->last_pushed_pts() != std::numeric_limits<int64_t>::min()) { + EXPECT_LE(pts, audio_feeder_->last_pushed_pts() + 100 * 1000); + } + if (video_feeder_ && + video_feeder_->last_pushed_pts() != std::numeric_limits<int64_t>::min()) { + EXPECT_LE(pts, video_feeder_->last_pushed_pts() + 100 * 1000); + } + // PTS is allowed to move backwards once to allow for updates when the first + // buffers are pushed. + if (!backwards_pts_change_) { + if (pts < last_pts_) + backwards_pts_change_ = true; + } else { + EXPECT_GE(pts, last_pts_); + } + last_pts_ = pts; if (!pause_pattern_.empty() && pause_pattern_[pause_pattern_idx_].delay >= base::TimeDelta() && @@ -379,6 +790,7 @@ // Do Pause backend_->Pause(); pause_time_ = base::TimeDelta::FromMicroseconds(backend_->GetCurrentPts()); + RunPlaybackChecks(); VLOG(2) << "Pausing at " << pause_time_.InMilliseconds() << "ms for " << pause_pattern_[pause_pattern_idx_].length.InMilliseconds() << "ms"; @@ -403,38 +815,90 @@ base::TimeDelta media_time = base::TimeDelta::FromMicroseconds(backend_->GetCurrentPts()); - // TODO(damienv): - // Should be: - // EXPECT_EQ(media_time, media_time_); - // However, some backends, when rendering the first frame while in paused - // mode moves the time forward. - // This behaviour is not intended. - EXPECT_GE(media_time, pause_time_); - EXPECT_LE(media_time, pause_time_ + base::TimeDelta::FromMilliseconds(50)); + // Make sure that the PTS did not advance while paused. + EXPECT_EQ(pause_time_, media_time); pause_time_ = media_time; pause_pattern_idx_ = (pause_pattern_idx_ + 1) % pause_pattern_.size(); VLOG(2) << "Pause complete, restarting media clock"; + RunPlaybackChecks(); // Resume playback and frame feeding. backend_->Resume(); + RunPlaybackChecks(); MonitorLoop(); } -void AudioVideoPipelineDeviceTest::Initialize() { - // Create the media device. - task_runner_.reset(new TaskRunnerImpl()); - MediaPipelineDeviceParams params(task_runner_.get()); - backend_.reset(CastMediaShlib::CreateMediaPipelineBackend(params)); - CHECK(backend_); +void AudioVideoPipelineDeviceTest::TestBackendStates() { + ASSERT_TRUE(backend()->Initialize()); + base::MessageLoop::current()->RunUntilIdle(); + + RunStoppedChecks(); + base::MessageLoop::current()->RunUntilIdle(); + + const int64_t start_pts = 222; + ASSERT_TRUE(backend()->Start(start_pts)); + base::MessageLoop::current()->RunUntilIdle(); + RunPlaybackChecks(); + + ASSERT_TRUE(backend()->Pause()); + base::MessageLoop::current()->RunUntilIdle(); + RunPlaybackChecks(); + + ASSERT_TRUE(backend()->Stop()); + base::MessageLoop::current()->RunUntilIdle(); + + RunStoppedChecks(); + base::MessageLoop::current()->RunUntilIdle(); +} + +void AudioVideoPipelineDeviceTest::StartImmediateEosTest() { + RunStoppedChecks(); + + ASSERT_TRUE(backend()->Initialize()); + base::MessageLoop::current()->RunUntilIdle(); + + Start(); +} + +void AudioVideoPipelineDeviceTest::EndImmediateEosTest() { + EXPECT_EQ(kStartPts, backend_->GetCurrentPts()); + RunPlaybackChecks(); + + ASSERT_TRUE(backend_->Pause()); + base::MessageLoop::current()->RunUntilIdle(); + + EXPECT_EQ(kStartPts, backend_->GetCurrentPts()); + RunPlaybackChecks(); + + ASSERT_TRUE(backend_->Stop()); + base::MessageLoop::current()->RunUntilIdle(); + + RunStoppedChecks(); + + base::MessageLoop::current()->QuitWhenIdle(); } TEST_F(AudioVideoPipelineDeviceTest, Mp3Playback) { scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); + set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); ConfigureForAudioOnly("sfx.mp3"); + AddEffectsStreams(); + PauseBeforeEos(); + Start(); + message_loop->Run(); +} + +TEST_F(AudioVideoPipelineDeviceTest, AacPlayback) { + scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); + + set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); + ConfigureForAudioOnly("sfx.m4a"); + AddEffectsStreams(); + PauseBeforeEos(); Start(); message_loop->Run(); } @@ -442,7 +906,44 @@ TEST_F(AudioVideoPipelineDeviceTest, VorbisPlayback) { scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); + set_sync_type(MediaPipelineDeviceParams::kModeIgnorePts); ConfigureForAudioOnly("sfx.ogg"); + AddEffectsStreams(); + Start(); + message_loop->Run(); +} + +// TODO(kmackay) FFmpegDemuxForTest can't handle AC3 or EAC3. + +TEST_F(AudioVideoPipelineDeviceTest, OpusPlayback_Optional) { + scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); + + set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); + ConfigureForAudioOnly("bear-opus.ogg"); + AddEffectsStreams(); + PauseBeforeEos(); + Start(); + message_loop->Run(); +} + +TEST_F(AudioVideoPipelineDeviceTest, DtsPlayback_Optional) { + scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); + + set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); + ConfigureForAudioOnly("bear.adts"); + AddEffectsStreams(); + PauseBeforeEos(); + Start(); + message_loop->Run(); +} + +TEST_F(AudioVideoPipelineDeviceTest, FlacPlayback_Optional) { + scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); + + set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); + ConfigureForAudioOnly("bear.flac"); + AddEffectsStreams(); + PauseBeforeEos(); Start(); message_loop->Run(); } @@ -450,7 +951,10 @@ TEST_F(AudioVideoPipelineDeviceTest, H264Playback) { scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); + set_sync_type(MediaPipelineDeviceParams::kModeIgnorePtsAndVSync); ConfigureForVideoOnly("bear.h264", true /* raw_h264 */); + PauseBeforeEos(); + AddEffectsStreams(); Start(); message_loop->Run(); } @@ -458,11 +962,13 @@ TEST_F(AudioVideoPipelineDeviceTest, WebmPlaybackWithPause) { scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); + set_sync_type(MediaPipelineDeviceParams::kModeIgnorePts); // Setup to pause for 100ms every 500ms AddPause(base::TimeDelta::FromMilliseconds(500), base::TimeDelta::FromMilliseconds(100)); ConfigureForVideoOnly("bear-640x360.webm", false /* raw_h264 */); + AddEffectsStreams(); Start(); message_loop->Run(); } @@ -470,7 +976,9 @@ TEST_F(AudioVideoPipelineDeviceTest, Vp8Playback) { scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); + set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); ConfigureForVideoOnly("bear-vp8a.webm", false /* raw_h264 */); + AddEffectsStreams(); Start(); message_loop->Run(); } @@ -478,10 +986,95 @@ TEST_F(AudioVideoPipelineDeviceTest, WebmPlayback) { scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); + set_sync_type(MediaPipelineDeviceParams::kModeIgnorePtsAndVSync); ConfigureForFile("bear-640x360.webm"); + PauseBeforeEos(); + AddEffectsStreams(); Start(); message_loop->Run(); } +// TODO(kmackay) FFmpegDemuxForTest can't handle HEVC or VP9. + +TEST_F(AudioVideoPipelineDeviceTest, AudioBackendStates) { + scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); + Initialize(); + MediaPipelineBackend::AudioDecoder* audio_decoder = + backend()->CreateAudioDecoder(); + + // Test setting config before Initialize(). + scoped_ptr<BufferFeeder> feeder(new BufferFeeder(base::Bind(&IgnoreEos))); + feeder->Initialize(backend(), audio_decoder, BufferList()); + feeder->SetAudioConfig(DefaultAudioConfig()); + feeder->TestAudioConfigs(); + + SetAudioFeeder(std::move(feeder)); + TestBackendStates(); +} + +TEST_F(AudioVideoPipelineDeviceTest, AudioEffectsBackendStates) { + scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); + set_audio_type(MediaPipelineDeviceParams::kAudioStreamSoundEffects); + Initialize(); + MediaPipelineBackend::AudioDecoder* audio_decoder = + backend()->CreateAudioDecoder(); + + // Test setting config before Initialize(). + scoped_ptr<BufferFeeder> feeder(new BufferFeeder(base::Bind(&IgnoreEos))); + feeder->Initialize(backend(), audio_decoder, BufferList()); + feeder->SetAudioConfig(DefaultAudioConfig()); + + SetAudioFeeder(std::move(feeder)); + TestBackendStates(); +} + +TEST_F(AudioVideoPipelineDeviceTest, VideoBackendStates) { + scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); + Initialize(); + MediaPipelineBackend::VideoDecoder* video_decoder = + backend()->CreateVideoDecoder(); + + // Test setting config before Initialize(). + scoped_ptr<BufferFeeder> feeder(new BufferFeeder(base::Bind(&IgnoreEos))); + feeder->Initialize(backend(), video_decoder, BufferList()); + feeder->SetVideoConfig(DefaultVideoConfig()); + feeder->TestVideoConfigs(); + + SetVideoFeeder(std::move(feeder)); + TestBackendStates(); +} + +TEST_F(AudioVideoPipelineDeviceTest, AudioImmediateEos) { + scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); + Initialize(); + MediaPipelineBackend::AudioDecoder* audio_decoder = + backend()->CreateAudioDecoder(); + + scoped_ptr<BufferFeeder> feeder(new BufferFeeder( + base::Bind(&AudioVideoPipelineDeviceTest::EndImmediateEosTest, + base::Unretained(this)))); + feeder->Initialize(backend(), audio_decoder, BufferList()); + feeder->SetAudioConfig(DefaultAudioConfig()); + SetAudioFeeder(std::move(feeder)); + + StartImmediateEosTest(); +} + +TEST_F(AudioVideoPipelineDeviceTest, VideoImmediateEos) { + scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); + Initialize(); + MediaPipelineBackend::VideoDecoder* video_decoder = + backend()->CreateVideoDecoder(); + + scoped_ptr<BufferFeeder> feeder(new BufferFeeder( + base::Bind(&AudioVideoPipelineDeviceTest::EndImmediateEosTest, + base::Unretained(this)))); + feeder->Initialize(backend(), video_decoder, BufferList()); + feeder->SetVideoConfig(DefaultVideoConfig()); + SetVideoFeeder(std::move(feeder)); + + StartImmediateEosTest(); +} + } // namespace media } // namespace chromecast
diff --git a/chromecast/media/cma/backend/media_pipeline_backend_default.cc b/chromecast/media/cma/backend/media_pipeline_backend_default.cc index 5ad1260..e23a1b1d 100644 --- a/chromecast/media/cma/backend/media_pipeline_backend_default.cc +++ b/chromecast/media/cma/backend/media_pipeline_backend_default.cc
@@ -4,6 +4,9 @@ #include "chromecast/media/cma/backend/media_pipeline_backend_default.h" +#include <algorithm> +#include <limits> + #include "chromecast/media/cma/backend/audio_decoder_default.h" #include "chromecast/media/cma/backend/video_decoder_default.h" #include "chromecast/public/media/cast_decoder_buffer.h" @@ -12,8 +15,9 @@ namespace media { MediaPipelineBackendDefault::MediaPipelineBackendDefault() - : running_(false), rate_(1.0f) { -} + : start_pts_(std::numeric_limits<int64_t>::min()), + running_(false), + rate_(1.0f) {} MediaPipelineBackendDefault::~MediaPipelineBackendDefault() { } @@ -38,21 +42,21 @@ bool MediaPipelineBackendDefault::Start(int64_t start_pts) { DCHECK(!running_); - start_pts_ = base::TimeDelta::FromMicroseconds(start_pts); + start_pts_ = start_pts; start_clock_ = base::TimeTicks::Now(); running_ = true; return true; } bool MediaPipelineBackendDefault::Stop() { - start_pts_ = base::TimeDelta::FromMicroseconds(GetCurrentPts()); + start_pts_ = GetCurrentPts(); running_ = false; return true; } bool MediaPipelineBackendDefault::Pause() { DCHECK(running_); - start_pts_ = base::TimeDelta::FromMicroseconds(GetCurrentPts()); + start_pts_ = GetCurrentPts(); running_ = false; return true; } @@ -66,17 +70,28 @@ int64_t MediaPipelineBackendDefault::GetCurrentPts() { if (!running_) - return start_pts_.InMicroseconds(); + return start_pts_; + + if (audio_decoder_ && + audio_decoder_->last_push_pts() != std::numeric_limits<int64_t>::min()) { + start_pts_ = std::min(start_pts_, audio_decoder_->last_push_pts()); + } + if (video_decoder_ && + video_decoder_->last_push_pts() != std::numeric_limits<int64_t>::min()) { + start_pts_ = std::min(start_pts_, video_decoder_->last_push_pts()); + } base::TimeTicks now = base::TimeTicks::Now(); base::TimeDelta interpolated_media_time = - start_pts_ + (now - start_clock_) * rate_; + base::TimeDelta::FromMicroseconds(start_pts_) + + (now - start_clock_) * rate_; + return interpolated_media_time.InMicroseconds(); } bool MediaPipelineBackendDefault::SetPlaybackRate(float rate) { DCHECK_GT(rate, 0.0f); - start_pts_ = base::TimeDelta::FromMicroseconds(GetCurrentPts()); + start_pts_ = GetCurrentPts(); start_clock_ = base::TimeTicks::Now(); rate_ = rate; return true;
diff --git a/chromecast/media/cma/backend/media_pipeline_backend_default.h b/chromecast/media/cma/backend/media_pipeline_backend_default.h index 4f9f4d0..82a90e1a4 100644 --- a/chromecast/media/cma/backend/media_pipeline_backend_default.h +++ b/chromecast/media/cma/backend/media_pipeline_backend_default.h
@@ -35,7 +35,7 @@ bool SetPlaybackRate(float rate) override; private: - base::TimeDelta start_pts_; + int64_t start_pts_; base::TimeTicks start_clock_; bool running_; float rate_;
diff --git a/chromecast/media/cma/backend/video_decoder_default.cc b/chromecast/media/cma/backend/video_decoder_default.cc index 257332e..0d057aa 100644 --- a/chromecast/media/cma/backend/video_decoder_default.cc +++ b/chromecast/media/cma/backend/video_decoder_default.cc
@@ -4,13 +4,21 @@ #include "chromecast/media/cma/backend/video_decoder_default.h" +#include <limits> + +#include "base/bind.h" +#include "base/location.h" #include "base/logging.h" +#include "base/thread_task_runner_handle.h" #include "chromecast/public/media/cast_decoder_buffer.h" namespace chromecast { namespace media { -VideoDecoderDefault::VideoDecoderDefault() : delegate_(nullptr) {} +VideoDecoderDefault::VideoDecoderDefault() + : delegate_(nullptr), + last_push_pts_(std::numeric_limits<int64_t>::min()), + weak_factory_(this) {} VideoDecoderDefault::~VideoDecoderDefault() {} @@ -23,8 +31,13 @@ CastDecoderBuffer* buffer) { DCHECK(delegate_); DCHECK(buffer); - if (buffer->end_of_stream()) - delegate_->OnEndOfStream(); + if (buffer->end_of_stream()) { + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::Bind(&VideoDecoderDefault::OnEndOfStream, + weak_factory_.GetWeakPtr())); + } else { + last_push_pts_ = buffer->timestamp(); + } return MediaPipelineBackend::kBufferSuccess; } @@ -35,5 +48,9 @@ return true; } +void VideoDecoderDefault::OnEndOfStream() { + delegate_->OnEndOfStream(); +} + } // namespace media } // namespace chromecast
diff --git a/chromecast/media/cma/backend/video_decoder_default.h b/chromecast/media/cma/backend/video_decoder_default.h index 5b71edd7..b56a485 100644 --- a/chromecast/media/cma/backend/video_decoder_default.h +++ b/chromecast/media/cma/backend/video_decoder_default.h
@@ -5,7 +5,10 @@ #ifndef CHROMECAST_MEDIA_CMA_BACKEND_VIDEO_DECODER_DEFAULT_H_ #define CHROMECAST_MEDIA_CMA_BACKEND_VIDEO_DECODER_DEFAULT_H_ +#include <stdint.h> + #include "base/macros.h" +#include "base/memory/weak_ptr.h" #include "chromecast/public/media/media_pipeline_backend.h" namespace chromecast { @@ -16,6 +19,8 @@ VideoDecoderDefault(); ~VideoDecoderDefault() override; + int64_t last_push_pts() const { return last_push_pts_; } + // MediaPipelineBackend::VideoDecoder implementation: void SetDelegate(Delegate* delegate) override; MediaPipelineBackend::BufferStatus PushBuffer( @@ -24,7 +29,11 @@ bool SetConfig(const VideoConfig& config) override; private: + void OnEndOfStream(); + Delegate* delegate_; + int64_t last_push_pts_; + base::WeakPtrFactory<VideoDecoderDefault> weak_factory_; DISALLOW_COPY_AND_ASSIGN(VideoDecoderDefault); };
diff --git a/chromecast/media/cma/decoder/cast_audio_decoder_linux.cc b/chromecast/media/cma/decoder/cast_audio_decoder_linux.cc index b5b0396..360d945 100644 --- a/chromecast/media/cma/decoder/cast_audio_decoder_linux.cc +++ b/chromecast/media/cma/decoder/cast_audio_decoder_linux.cc
@@ -170,7 +170,10 @@ } decoded_chunks_.clear(); decoded->set_timestamp(buffer_timestamp); + base::WeakPtr<CastAudioDecoderImpl> self = weak_factory_.GetWeakPtr(); decode_callback.Run(result_status, decoded); + if (!self.get()) + return; // Return immediately if the decode callback deleted this. // Do not reset decode_pending_ to false until after the callback has // finished running because the callback may call Decode().
diff --git a/chromecast/media/media.gyp b/chromecast/media/media.gyp index 71074a2..359e9aea 100644 --- a/chromecast/media/media.gyp +++ b/chromecast/media/media.gyp
@@ -16,6 +16,18 @@ '../..', # Root of Chromium checkout '../public/', # Public APIs ], + 'target_conditions': [ + ['_type=="executable"', { + 'ldflags': [ + # Allow OEMs to override default libraries that are shipped with + # cast receiver package by installed OEM-specific libraries in + # /oem_cast_shlib. + '-Wl,-rpath=/oem_cast_shlib', + # Some shlibs are built in same directory of executables. + '-Wl,-rpath=\$$ORIGIN', + ], + }], + ], }, 'targets': [ { @@ -291,14 +303,6 @@ 'cma/test/mock_frame_provider.h', 'cma/test/run_all_unittests.cc', ], - 'ldflags': [ - # Allow OEMs to override default libraries that are shipped with - # cast receiver package by installed OEM-specific libraries in - # /oem_cast_shlib. - '-Wl,-rpath=/oem_cast_shlib', - # Some shlibs are built in same directory of executables. - '-Wl,-rpath=\$$ORIGIN', - ], 'conditions': [ ['chromecast_branding=="public"', { 'dependencies': [ @@ -326,6 +330,8 @@ 'target_name': 'libcast_media_1.0_default_core', 'type': '<(component)', 'dependencies': [ + '<(DEPTH)/base/base.gyp:base', + '<(DEPTH)/chromecast/chromecast.gyp:cast_base', '../../chromecast/chromecast.gyp:cast_public_api', 'default_cma_backend' ],
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM index c9ca0db..5ab6781 100644 --- a/chromeos/CHROMEOS_LKGM +++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@ -7904.0.0 \ No newline at end of file +7907.0.0 \ No newline at end of file
diff --git a/components/OWNERS b/components/OWNERS index 53ac8ca..95f9960 100644 --- a/components/OWNERS +++ b/components/OWNERS
@@ -111,8 +111,7 @@ per-file dom_distiller*=wychen@chromium.org per-file domain_reliability.gypi=davidben@chromium.org -per-file domain_reliability.gypi=mmenke@chromium.org -per-file domain_reliability.gypi=szym@chromium.org +per-file domain_reliability.gypi=rdsmith@chromium.org per-file domain_reliability.gypi=ttuttle@chromium.org per-file drive.gypi=fukino@chromium.org @@ -123,10 +122,6 @@ per-file drive.gypi=mtomasz@chromium.org per-file drive.gypi=yoshiki@chromium.org -per-file enhanced_bookmarks*=kkimlabs@chromium.org -per-file enhanced_bookmarks*=noyau@chromium.org -per-file enhanced_bookmarks*=sky@chromium.org - per-file error_page*=mmenke@chromium.org per-file error_page*=ttuttle@chromium.org
diff --git a/components/app_modal/javascript_app_modal_dialog.cc b/components/app_modal/javascript_app_modal_dialog.cc index d2cc903..efce144 100644 --- a/components/app_modal/javascript_app_modal_dialog.cc +++ b/components/app_modal/javascript_app_modal_dialog.cc
@@ -4,6 +4,8 @@ #include "components/app_modal/javascript_app_modal_dialog.h" +#include "base/metrics/histogram_macros.h" +#include "base/time/time.h" #include "build/build_config.h" #include "components/app_modal/javascript_dialog_manager.h" #include "components/app_modal/javascript_native_dialog_factory.h" @@ -72,7 +74,8 @@ is_before_unload_dialog_(is_before_unload_dialog), is_reload_(is_reload), callback_(callback), - use_override_prompt_text_(false) { + use_override_prompt_text_(false), + creation_time_(base::TimeTicks::Now()) { EnforceMaxTextSize(message_text, &message_text_); EnforceMaxPromptSize(default_prompt_text, &default_prompt_text_); } @@ -95,10 +98,7 @@ return; AppModalDialog::Invalidate(); - if (!callback_.is_null()) { - callback_.Run(false, base::string16()); - callback_.Reset(); - } + CallDialogClosedCallback(false, base::string16()); if (native_dialog()) CloseModalDialog(); } @@ -142,12 +142,9 @@ if (!IsValid()) return; - if (!callback_.is_null()) { - callback_.Run(success, user_input); - callback_.Reset(); - } + CallDialogClosedCallback(success, user_input); - // The callback_ above may delete web_contents_, thus removing the extra + // The close callback above may delete web_contents_, thus removing the extra // data from the map owned by ::JavaScriptDialogManager. Make sure // to only use the data if still present. http://crbug.com/236476 ExtraDataMap::iterator extra_data = @@ -162,6 +159,20 @@ AppModalDialog::Invalidate(); } +void JavaScriptAppModalDialog::CallDialogClosedCallback(bool success, + const base::string16& user_input) { + // TODO(joenotcharles): Both the callers of this function also check IsValid + // and call AppModalDialog::Invalidate, but in different orders. If the + // difference is not significant, more common code could be moved here. + UMA_HISTOGRAM_MEDIUM_TIMES( + "JSDialogs.FineTiming.TimeBetweenDialogCreatedAndSameDialogClosed", + base::TimeTicks::Now() - creation_time_); + if (!callback_.is_null()) { + callback_.Run(success, user_input); + callback_.Reset(); + } +} + // static std::string JavaScriptAppModalDialog::GetSerializedOriginForWebContents( content::WebContents* contents) {
diff --git a/components/app_modal/javascript_app_modal_dialog.h b/components/app_modal/javascript_app_modal_dialog.h index 5c81ef7..111ba7d4 100644 --- a/components/app_modal/javascript_app_modal_dialog.h +++ b/components/app_modal/javascript_app_modal_dialog.h
@@ -10,6 +10,7 @@ #include "base/compiler_specific.h" #include "base/macros.h" +#include "base/time/time.h" #include "components/app_modal/app_modal_dialog.h" #include "content/public/browser/javascript_dialog_manager.h" @@ -83,6 +84,9 @@ void NotifyDelegate(bool success, const base::string16& prompt_text, bool suppress_js_messages); + void CallDialogClosedCallback(bool success, + const base::string16& prompt_text); + // A map of extra Chrome-only data associated with the delegate_. The keys // come from |GetSerializedOriginForWebContents|. ExtraDataMap* extra_data_map_; @@ -102,6 +106,8 @@ base::string16 override_prompt_text_; bool use_override_prompt_text_; + base::TimeTicks creation_time_; + DISALLOW_COPY_AND_ASSIGN(JavaScriptAppModalDialog); };
diff --git a/components/app_modal/javascript_dialog_manager.cc b/components/app_modal/javascript_dialog_manager.cc index 2b6ec646..f654f8bf3 100644 --- a/components/app_modal/javascript_dialog_manager.cc +++ b/components/app_modal/javascript_dialog_manager.cc
@@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/i18n/rtl.h" #include "base/macros.h" +#include "base/metrics/histogram_macros.h" #include "base/strings/utf_string_conversions.h" #include "components/app_modal/app_modal_dialog.h" #include "components/app_modal/app_modal_dialog_queue.h" @@ -22,10 +23,17 @@ #include "grit/components_strings.h" #include "net/base/net_util.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/gfx/font_list.h" namespace app_modal { namespace { +#if !defined(OS_ANDROID) +// Keep in sync with kDefaultMessageWidth, but allow some space for the rest of +// the text. +const int kUrlElideWidth = 350; +#endif + class DefaultExtensionsClient : public JavaScriptDialogExtensionsClient { public: DefaultExtensionsClient() {} @@ -100,6 +108,25 @@ return; } + base::TimeTicks now = base::TimeTicks::Now(); + if (!last_creation_time_.is_null()) { + // A new dialog has been created: log the time since the last one was + // created. + UMA_HISTOGRAM_MEDIUM_TIMES( + "JSDialogs.FineTiming.TimeBetweenDialogCreatedAndNextDialogCreated", + now - last_creation_time_); + } + last_creation_time_ = now; + + // Also log the time since a dialog was closed, but only if this is the first + // dialog that was opened since the closing. + if (!last_close_time_.is_null()) { + UMA_HISTOGRAM_MEDIUM_TIMES( + "JSDialogs.FineTiming.TimeBetweenDialogClosedAndNextDialogCreated", + now - last_close_time_); + last_close_time_ = base::TimeTicks(); + } + bool is_alert = message_type == content::JAVASCRIPT_MESSAGE_TYPE_ALERT; base::string16 dialog_title = GetTitle(web_contents, origin_url, accept_lang, is_alert); @@ -208,9 +235,14 @@ (web_contents->GetURL().GetOrigin() == origin_url.GetOrigin()); if (origin_url.IsStandard() && !origin_url.SchemeIsFile() && !origin_url.SchemeIsFileSystem()) { +#if !defined(OS_ANDROID) + base::string16 url_string = + url_formatter::ElideHost(origin_url, gfx::FontList(), kUrlElideWidth); +#else base::string16 url_string = url_formatter::FormatUrlForSecurityDisplayOmitScheme(origin_url, accept_lang); +#endif return l10n_util::GetStringFUTF16( is_same_origin_as_main_frame ? IDS_JAVASCRIPT_MESSAGEBOX_TITLE : IDS_JAVASCRIPT_MESSAGEBOX_TITLE_IFRAME, @@ -249,6 +281,8 @@ // their WebContents is destroyed so |web_contents| is still valid here.) extensions_client_->OnDialogClosed(web_contents); + last_close_time_ = base::TimeTicks::Now(); + callback.Run(success, user_input); }
diff --git a/components/app_modal/javascript_dialog_manager.h b/components/app_modal/javascript_dialog_manager.h index b204aaf8..9d70bd3 100644 --- a/components/app_modal/javascript_dialog_manager.h +++ b/components/app_modal/javascript_dialog_manager.h
@@ -8,6 +8,7 @@ #include "base/macros.h" #include "base/memory/scoped_ptr.h" #include "base/memory/singleton.h" +#include "base/time/time.h" #include "components/app_modal/javascript_app_modal_dialog.h" #include "content/public/browser/javascript_dialog_manager.h" @@ -80,6 +81,11 @@ scoped_ptr<JavaScriptNativeDialogFactory> native_dialog_factory_; scoped_ptr<JavaScriptDialogExtensionsClient> extensions_client_; + // Record a single create and close timestamp to track the time between + // dialogs. (Since Javascript dialogs are modal, this is even accurate!) + base::TimeTicks last_close_time_; + base::TimeTicks last_creation_time_; + DISALLOW_COPY_AND_ASSIGN(JavaScriptDialogManager); };
diff --git a/components/arc/input/arc_input_bridge.cc b/components/arc/input/arc_input_bridge.cc index 74bd7a4c..d4e8e8ff 100644 --- a/components/arc/input/arc_input_bridge.cc +++ b/components/arc/input/arc_input_bridge.cc
@@ -200,11 +200,11 @@ SendKernelEvent(touchscreen_fd_, time_stamp, EV_ABS, ABS_MT_POSITION_Y, event->y()); SendKernelEvent(touchscreen_fd_, time_stamp, EV_ABS, ABS_MT_TOUCH_MAJOR, - details.radius_x()); + details.radius_x); SendKernelEvent(touchscreen_fd_, time_stamp, EV_ABS, ABS_MT_TOUCH_MINOR, - details.radius_y()); + details.radius_y); SendKernelEvent(touchscreen_fd_, time_stamp, EV_ABS, ABS_MT_PRESSURE, - details.force() * kMaxPressure); + details.force * kMaxPressure); } SendSynReport(touchscreen_fd_, time_stamp); }
diff --git a/components/autofill/content/common/autofill_messages.h b/components/autofill/content/common/autofill_messages.h index f3977e5..74c32c5 100644 --- a/components/autofill/content/common/autofill_messages.h +++ b/components/autofill/content/common/autofill_messages.h
@@ -189,6 +189,11 @@ // |AutofillHostMsg_FocusedPasswordFormFound|. IPC_MESSAGE_ROUTED0(AutofillMsg_FindFocusedPasswordForm) +// Tells the renderer to find a focused element, and if it is a password field +// eligible for generation then to trigger generation by responding to the +// browser with the message |AutofillHostMsg_ShowPasswordGenerationPopup|. +IPC_MESSAGE_ROUTED0(AutofillMsg_GeneratePassword) + // Tells the renderer that this password form is not blacklisted. A form can // be blacklisted if a user chooses "never save passwords for this site". IPC_MESSAGE_ROUTED1(AutofillMsg_FormNotBlacklisted,
diff --git a/components/autofill/content/common/autofill_param_traits_macros.h b/components/autofill/content/common/autofill_param_traits_macros.h index b090d86..2afd0471 100644 --- a/components/autofill/content/common/autofill_param_traits_macros.h +++ b/components/autofill/content/common/autofill_param_traits_macros.h
@@ -19,6 +19,7 @@ IPC_STRUCT_TRAITS_MEMBER(origin) IPC_STRUCT_TRAITS_MEMBER(action) IPC_STRUCT_TRAITS_MEMBER(is_form_tag) + IPC_STRUCT_TRAITS_MEMBER(is_formless_checkout) IPC_STRUCT_TRAITS_MEMBER(fields) IPC_STRUCT_TRAITS_END()
diff --git a/components/autofill/content/renderer/form_autofill_util.cc b/components/autofill/content/renderer/form_autofill_util.cc index cb25090..9db4b76c 100644 --- a/components/autofill/content/renderer/form_autofill_util.cc +++ b/components/autofill/content/renderer/form_autofill_util.cc
@@ -1520,6 +1520,7 @@ keyword, keyword + strlen(keyword)); if (title_pos != title.end() || path.find(keyword) != std::string::npos) { + form->is_formless_checkout = true; // Found a keyword: treat this as an unowned form. return UnownedFormElementsAndFieldSetsToFormData( fieldsets, control_elements, element, document, extract_mask, form, @@ -1527,7 +1528,22 @@ } } - return false; + // Since it's not a checkout flow, only add fields that have a non-"off" + // autocomplete attribute to the formless autofill. + CR_DEFINE_STATIC_LOCAL(WebString, kOffAttribute, ("off")); + std::vector<WebFormControlElement> elements_with_autocomplete; + for (const WebFormControlElement& element : control_elements) { + blink::WebString autocomplete = element.getAttribute("autocomplete"); + if (autocomplete.length() && autocomplete != kOffAttribute) + elements_with_autocomplete.push_back(element); + } + + if (elements_with_autocomplete.empty()) + return false; + + return UnownedFormElementsAndFieldSetsToFormData( + fieldsets, elements_with_autocomplete, element, document, extract_mask, + form, field); } bool UnownedPasswordFormElementsAndFieldSetsToFormData(
diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc index 84ec184b..d18ff7b 100644 --- a/components/autofill/content/renderer/password_autofill_agent.cc +++ b/components/autofill/content/renderer/password_autofill_agent.cc
@@ -733,7 +733,14 @@ password_info_iter->second.username_was_edited = true; } - DCHECK_EQ(element.document().frame(), render_frame()->GetWebFrame()); + blink::WebFrame* const element_frame = element.document().frame(); + // The element's frame might have been detached in the meantime (see + // http://crbug.com/585363, comments 5 and 6), in which case frame() will + // return null. This was hardly caused by form submission (unless the user + // is supernaturally quick), so it is OK to drop the ball here. + if (!element_frame) + return; + DCHECK_EQ(element_frame, render_frame()->GetWebFrame()); // Some login forms have event handlers that put a hash of the password into // a hidden field and then clear the password (http://crbug.com/28910, @@ -744,8 +751,7 @@ scoped_ptr<PasswordForm> password_form; if (element.form().isNull()) { password_form = CreatePasswordFormFromUnownedInputElements( - *element.document().frame(), &nonscript_modified_values_, - &form_predictions_); + *element_frame, &nonscript_modified_values_, &form_predictions_); } else { password_form = CreatePasswordFormFromWebForm( element.form(), &nonscript_modified_values_, &form_predictions_);
diff --git a/components/autofill/content/renderer/password_generation_agent.cc b/components/autofill/content/renderer/password_generation_agent.cc index 016336aa..ded1af0 100644 --- a/components/autofill/content/renderer/password_generation_agent.cc +++ b/components/autofill/content/renderer/password_generation_agent.cc
@@ -74,11 +74,11 @@ // than 2 elements. std::vector<blink::WebInputElement> FindPasswordElementsForGeneration( const std::vector<blink::WebInputElement>& all_password_elements, - const FormFieldData& field_data) { + const base::string16& field_name) { auto iter = std::find_if(all_password_elements.begin(), all_password_elements.end(), - [&field_data](const blink::WebInputElement& input) { - return input.nameForAutofill() == field_data.name; + [&field_name](const blink::WebInputElement& input) { + return input.nameForAutofill() == field_name; }); std::vector<blink::WebInputElement> passwords; @@ -253,6 +253,7 @@ OnPasswordAccepted) IPC_MESSAGE_HANDLER(AutofillMsg_FoundFormsEligibleForGeneration, OnFormsEligibleForGenerationFound); + IPC_MESSAGE_HANDLER(AutofillMsg_GeneratePassword, OnGeneratePassword); IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; @@ -338,7 +339,7 @@ std::vector<blink::WebInputElement> password_elements = generation_data ? FindPasswordElementsForGeneration( possible_form_data.password_elements, - generation_data->generation_field) + generation_data->generation_field.name) : possible_form_data.password_elements; if (password_elements.empty()) { // It might be if JavaScript changes field names. @@ -458,4 +459,33 @@ Send(new AutofillHostMsg_HidePasswordGenerationPopup(routing_id())); } +void PasswordGenerationAgent::OnGeneratePassword() { + blink::WebDocument doc = render_frame()->GetWebFrame()->document(); + if (doc.isNull()) + return; + + blink::WebElement focused_element = doc.focusedElement(); + const blink::WebInputElement* element = toWebInputElement(&focused_element); + if (!element || !element->isPasswordField()) + return; + + blink::WebFormElement form = element->form(); + if (form.isNull()) + return; + + scoped_ptr<PasswordForm> password_form( + CreatePasswordFormFromWebForm(form, nullptr, nullptr)); + if (!password_form) + return; + + generation_element_ = *element; + std::vector<blink::WebInputElement> password_elements; + GetAccountCreationPasswordFields(form, &password_elements); + password_elements = FindPasswordElementsForGeneration( + password_elements, element->nameForAutofill()); + generation_form_data_.reset(new AccountCreationFormData( + make_linked_ptr(password_form.release()), password_elements)); + ShowGenerationPopup(); +} + } // namespace autofill
diff --git a/components/autofill/content/renderer/password_generation_agent.h b/components/autofill/content/renderer/password_generation_agent.h index 90d480b..b9c7f3c 100644 --- a/components/autofill/content/renderer/password_generation_agent.h +++ b/components/autofill/content/renderer/password_generation_agent.h
@@ -102,6 +102,10 @@ // Hides a password generation popup if one exists. void HidePopup(); + // Sets |generation_element_| to the focused password field and shows a + // generation popup at this field. + void OnGeneratePassword(); + // Stores forms that are candidates for account creation. AccountCreationFormDataList possible_account_creation_forms_;
diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc index 47a9037..3bfcfd0 100644 --- a/components/autofill/core/browser/autofill_manager.cc +++ b/components/autofill/core/browser/autofill_manager.cc
@@ -983,79 +983,126 @@ } #endif // ENABLE_FORM_DEBUG_DUMP - // If credit card information was submitted, we need to confirm whether to - // save it. - if (imported_credit_card) { - // Don't offer to save any cards that were recently unmasked. - for (const CreditCard& unmasked_card : recently_unmasked_cards_) { - if (unmasked_card.TypeAndLastFourDigits() == - imported_credit_card->TypeAndLastFourDigits()) - return; - } + // No card available to offer save or upload. + if (!imported_credit_card) + return; + // Don't offer to save any cards that were recently unmasked. + for (const CreditCard& unmasked_card : recently_unmasked_cards_) { + if (unmasked_card.TypeAndLastFourDigits() == + imported_credit_card->TypeAndLastFourDigits()) + return; + } + + if (!IsCreditCardUploadEnabled()) { + // This block will only be reached if we have observed a new card. In this + // case, ImportFormData will return false if the card matches one already + // stored. + client_->ConfirmSaveCreditCardLocally( + *imported_credit_card, + base::Bind( + base::IgnoreResult(&PersonalDataManager::SaveImportedCreditCard), + base::Unretained(personal_data_), *imported_credit_card)); + } else { + // Whereas, because we pass IsCreditCardUploadEnabled() to ImportFormData, + // this block can be reached on observing either a new card or one already + // stored locally. We will offer to upload either kind. upload_request_ = payments::PaymentsClient::UploadRequestDetails(); - if (!IsCreditCardUploadEnabled()) { - client_->ConfirmSaveCreditCardLocally( - *imported_credit_card, - base::Bind( - base::IgnoreResult(&PersonalDataManager::SaveImportedCreditCard), - base::Unretained(personal_data_), *imported_credit_card)); - } else { - // Check for a CVC in order to determine whether we can prompt the user to - // upload their card. - for (const auto& field : submitted_form) { - if (field->Type().GetStorableType() == CREDIT_CARD_VERIFICATION_CODE) { - upload_request_.cvc = field->value; - break; - } - } + upload_request_.card = *imported_credit_card; - // Upload also requires recently used or modified profiles with matching - // names. - upload_request_.profiles = - GetProfilesForCreditCardUpload(*imported_credit_card); - - // If the necessary conditions don't exist, do nothing. We could fall back - // to a local save here but we believe that sometimes offering upload and - // sometimes offering local save is a confusing user experience. - if (!upload_request_.cvc.empty() && !upload_request_.profiles.empty()) { - upload_request_.card = *imported_credit_card; - payments_client_->GetUploadDetails(app_locale_); - } else if (upload_request_.cvc.empty()) { - AutofillMetrics::LogCardUploadDecisionMetric( - AutofillMetrics::UPLOAD_NOT_OFFERED_NO_CVC); - } else { - AutofillMetrics::LogCardUploadDecisionMetric( - AutofillMetrics::UPLOAD_NOT_OFFERED_NO_ADDRESS); + // Check for a CVC to determine whether we can prompt the user to upload + // their card. If no CVC is present, do nothing. We could fall back to a + // local save but we believe that sometimes offering upload and sometimes + // offering local save is a confusing user experience. + for (const AutofillField* field : submitted_form) { + if (field->Type().GetStorableType() == CREDIT_CARD_VERIFICATION_CODE) { + upload_request_.cvc = field->value; + break; } } + if (upload_request_.cvc.empty()) { + AutofillMetrics::LogCardUploadDecisionMetric( + AutofillMetrics::UPLOAD_NOT_OFFERED_NO_CVC); + return; + } + + // Upload also requires recently used or modified addresses that meet the + // client-side validation rules. + if (!GetProfilesForCreditCardUpload(*imported_credit_card, + &upload_request_.profiles)) { + return; + } + + // All required data is available, start the upload process. + payments_client_->GetUploadDetails(app_locale_); } } -std::vector<AutofillProfile> AutofillManager::GetProfilesForCreditCardUpload( - const CreditCard& card) { - std::vector<AutofillProfile> profiles; +bool AutofillManager::GetProfilesForCreditCardUpload( + const CreditCard& card, + std::vector<AutofillProfile>* profiles) const { + std::vector<AutofillProfile> candidate_profiles; const base::Time now = base::Time::Now(); const base::TimeDelta fifteen_minutes = base::TimeDelta::FromMinutes(15); + // First, collect all of the addresses used recently. for (AutofillProfile* profile : personal_data_->GetProfiles()) { - if ((now - profile->use_date()) > fifteen_minutes && - (now - profile->modification_date()) > fifteen_minutes) { - continue; + if ((now - profile->use_date()) < fifteen_minutes || + (now - profile->modification_date()) < fifteen_minutes) { + candidate_profiles.push_back(*profile); } - - if (profile->GetInfo(AutofillType(NAME_FULL), app_locale_) != - card.GetInfo(AutofillType(CREDIT_CARD_NAME), app_locale_)) { - continue; - } - - if (profile->GetRawInfo(ADDRESS_HOME_ZIP).empty()) - continue; - - profiles.push_back(*profile); + } + if (candidate_profiles.empty()) { + AutofillMetrics::LogCardUploadDecisionMetric( + AutofillMetrics::UPLOAD_NOT_OFFERED_NO_ADDRESS); + return false; } - return profiles; + // If neither the card nor any of the addresses have a name associated with + // them, the candidate set is invalid. + bool name_available = false; + if (!card.GetInfo(AutofillType(CREDIT_CARD_NAME), app_locale_).empty()) { + name_available = true; + } else { + for (const AutofillProfile& profile : candidate_profiles) { + if (!profile.GetInfo(AutofillType(NAME_FULL), app_locale_).empty()) { + name_available = true; + break; + } + } + } + if (!name_available) { + AutofillMetrics::LogCardUploadDecisionMetric( + AutofillMetrics::UPLOAD_NOT_OFFERED_NO_NAME); + return false; + } + + // If any of the candidate addresses have a non-empty zip that doesn't match + // any other non-empty zip, then the candidate set is invalid. + base::string16 verified_zip; + for (const AutofillProfile& profile : candidate_profiles) { + base::string16 zip = profile.GetRawInfo(ADDRESS_HOME_ZIP); + if (!zip.empty()) { + if (verified_zip.empty()) { + verified_zip = zip; + } else if (verified_zip != zip) { + AutofillMetrics::LogCardUploadDecisionMetric( + AutofillMetrics::UPLOAD_NOT_OFFERED_CONFLICTING_ZIPS); + return false; + } + } + } + + // If none of the candidate addresses have a zip, the candidate set is + // invalid. + if (verified_zip.empty()) { + AutofillMetrics::LogCardUploadDecisionMetric( + AutofillMetrics::UPLOAD_NOT_OFFERED_NO_ZIP_CODE); + return false; + } + + profiles->assign(candidate_profiles.begin(), candidate_profiles.end()); + return true; } // Note that |submitted_form| is passed as a pointer rather than as a reference
diff --git a/components/autofill/core/browser/autofill_manager.h b/components/autofill/core/browser/autofill_manager.h index 11c30521..7f21268 100644 --- a/components/autofill/core/browser/autofill_manager.h +++ b/components/autofill/core/browser/autofill_manager.h
@@ -396,11 +396,12 @@ // Imports the form data, submitted by the user, into |personal_data_|. void ImportFormData(const FormStructure& submitted_form); - // Returns all web profiles known to the personal data manager whose names - // match the name on |card| and that have been created or used within the last - // 15 minutes. - std::vector<AutofillProfile> GetProfilesForCreditCardUpload( - const CreditCard& card); + // Examines |card| and the stored profiles and if a candidate set of profiles + // is found that matches the client-side validation rules, assigns the values + // to |profiles|. If no valid set can be found, returns false. + bool GetProfilesForCreditCardUpload( + const CreditCard& card, + std::vector<AutofillProfile>* profiles) const; // If |initial_interaction_timestamp_| is unset or is set to a later time than // |interaction_timestamp|, updates the cached timestamp. The latter check is
diff --git a/components/autofill/core/browser/autofill_manager_unittest.cc b/components/autofill/core/browser/autofill_manager_unittest.cc index 3588d9d..f292f22 100644 --- a/components/autofill/core/browser/autofill_manager_unittest.cc +++ b/components/autofill/core/browser/autofill_manager_unittest.cc
@@ -849,12 +849,16 @@ } // Fills the fields in |form| with test data. - void ManuallyFillAddressForm(FormData* form) { + void ManuallyFillAddressForm(const char* first_name, + const char* last_name, + const char* zip_code, + const char* country, + FormData* form) { for (FormFieldData& field : form->fields) { if (base::EqualsASCII(field.name, "firstname")) - field.value = ASCIIToUTF16("Flo"); + field.value = ASCIIToUTF16(first_name); else if (base::EqualsASCII(field.name, "lastname")) - field.value = ASCIIToUTF16("Master"); + field.value = ASCIIToUTF16(last_name); else if (base::EqualsASCII(field.name, "addr1")) field.value = ASCIIToUTF16("123 Maple"); else if (base::EqualsASCII(field.name, "city")) @@ -862,13 +866,13 @@ else if (base::EqualsASCII(field.name, "state")) field.value = ASCIIToUTF16("Texas"); else if (base::EqualsASCII(field.name, "zipcode")) - field.value = ASCIIToUTF16("77401"); + field.value = ASCIIToUTF16(zip_code); else if (base::EqualsASCII(field.name, "country")) - field.value = ASCIIToUTF16("US"); + field.value = ASCIIToUTF16(country); } } - // Tests if credit card data gets saved + // Tests if credit card data gets saved. void TestSaveCreditCards(bool is_https) { // Set up our form data. FormData form; @@ -876,7 +880,7 @@ std::vector<FormData> forms(1, form); FormsSeen(forms); - // Edit the data, and submit + // Edit the data, and submit. form.fields[1].value = ASCIIToUTF16("4111111111111111"); form.fields[2].value = ASCIIToUTF16("11"); form.fields[3].value = ASCIIToUTF16("2017"); @@ -3247,7 +3251,7 @@ std::vector<FormData> forms(1, form); FormsSeen(forms); - // Edit the data, and submit + // Edit the data, and submit. form.fields[1].value = ASCIIToUTF16("4111111111111111"); form.fields[2].value = ASCIIToUTF16("11"); form.fields[3].value = ASCIIToUTF16("2017"); @@ -3845,7 +3849,7 @@ form = FormData(); test::CreateTestAddressFormData(&form); FormsSeen(std::vector<FormData>(1, form)); - ManuallyFillAddressForm(&form); + ManuallyFillAddressForm("Flo", "Master", "77401", "US", &form); autofill_manager_->OnFormSubmitted(form); } @@ -3879,7 +3883,7 @@ FormData address_form; test::CreateTestAddressFormData(&address_form); FormsSeen(std::vector<FormData>(1, address_form)); - ManuallyFillAddressForm(&address_form); + ManuallyFillAddressForm("Flo", "Master", "77401", "US", &address_form); FormSubmitted(address_form); // Set up our credit card form data. @@ -3887,7 +3891,7 @@ CreateTestCreditCardFormData(&credit_card_form, true, false); FormsSeen(std::vector<FormData>(1, credit_card_form)); - // Edit the data, and submit + // Edit the data, and submit. credit_card_form.fields[0].value = ASCIIToUTF16("Flo Master"); credit_card_form.fields[1].value = ASCIIToUTF16("4111111111111111"); credit_card_form.fields[2].value = ASCIIToUTF16("11"); @@ -3900,11 +3904,11 @@ EXPECT_TRUE(autofill_manager_->credit_card_was_uploaded()); // Verify that the correct histogram entry (and only that) was logged. - histogram_tester.ExpectUniqueSample("Autofill.CardUploadDecision", + histogram_tester.ExpectUniqueSample("Autofill.CardUploadDecisionExpanded", AutofillMetrics::UPLOAD_OFFERED, 1); } -TEST_F(AutofillManagerTest, DontUploadCreditCardIfFeatureNotEnabled) { +TEST_F(AutofillManagerTest, UploadCreditCard_FeatureNotEnabled) { autofill_manager_->set_credit_card_upload_enabled(false); // Create, fill and submit an address form in order to establish a recent @@ -3912,7 +3916,7 @@ FormData address_form; test::CreateTestAddressFormData(&address_form); FormsSeen(std::vector<FormData>(1, address_form)); - ManuallyFillAddressForm(&address_form); + ManuallyFillAddressForm("Flo", "Master", "77401", "US", &address_form); FormSubmitted(address_form); // Set up our credit card form data. @@ -3920,7 +3924,7 @@ CreateTestCreditCardFormData(&credit_card_form, true, false); FormsSeen(std::vector<FormData>(1, credit_card_form)); - // Edit the data, and submit + // Edit the data, and submit. credit_card_form.fields[0].value = ASCIIToUTF16("Flo Master"); credit_card_form.fields[1].value = ASCIIToUTF16("4111111111111111"); credit_card_form.fields[2].value = ASCIIToUTF16("11"); @@ -3935,10 +3939,10 @@ EXPECT_FALSE(autofill_manager_->credit_card_was_uploaded()); // Verify that no histogram entry was logged called. - histogram_tester.ExpectTotalCount("Autofill.CardUploadDecision", 0); + histogram_tester.ExpectTotalCount("Autofill.CardUploadDecisionExpanded", 0); } -TEST_F(AutofillManagerTest, DontUploadCreditCardIfCvcUnavailable) { +TEST_F(AutofillManagerTest, UploadCreditCard_CvcUnavailable) { autofill_manager_->set_credit_card_upload_enabled(true); // Create, fill and submit an address form in order to establish a recent @@ -3946,7 +3950,7 @@ FormData address_form; test::CreateTestAddressFormData(&address_form); FormsSeen(std::vector<FormData>(1, address_form)); - ManuallyFillAddressForm(&address_form); + ManuallyFillAddressForm("Flo", "Master", "77401", "US", &address_form); FormSubmitted(address_form); // Set up our credit card form data. @@ -3954,7 +3958,7 @@ CreateTestCreditCardFormData(&credit_card_form, true, false); FormsSeen(std::vector<FormData>(1, credit_card_form)); - // Edit the data, and submit + // Edit the data, and submit. credit_card_form.fields[0].value = ASCIIToUTF16("Flo Master"); credit_card_form.fields[1].value = ASCIIToUTF16("4111111111111111"); credit_card_form.fields[2].value = ASCIIToUTF16("11"); @@ -3970,28 +3974,21 @@ // Verify that the correct histogram entry (and only that) was logged. histogram_tester.ExpectUniqueSample( - "Autofill.CardUploadDecision", AutofillMetrics::UPLOAD_NOT_OFFERED_NO_CVC, - 1); + "Autofill.CardUploadDecisionExpanded", + AutofillMetrics::UPLOAD_NOT_OFFERED_NO_CVC, 1); } -TEST_F(AutofillManagerTest, DontUploadCreditCardIfNoMatchingProfileAvailable) { +TEST_F(AutofillManagerTest, UploadCreditCard_NoProfileAvailable) { autofill_manager_->set_credit_card_upload_enabled(true); - // Create, fill and submit an address form in order to establish a recent - // profile which can be selected for the upload request. - FormData address_form; - test::CreateTestAddressFormData(&address_form); - FormsSeen(std::vector<FormData>(1, address_form)); - ManuallyFillAddressForm(&address_form); - FormSubmitted(address_form); + // Don't fill or submit an address form. // Set up our credit card form data. FormData credit_card_form; CreateTestCreditCardFormData(&credit_card_form, true, false); FormsSeen(std::vector<FormData>(1, credit_card_form)); - // Edit the data, and submit - // The address form has "Flo Master" but the credit card has "Bob Master". + // Edit the data, and submit. credit_card_form.fields[0].value = ASCIIToUTF16("Bob Master"); credit_card_form.fields[1].value = ASCIIToUTF16("4111111111111111"); credit_card_form.fields[2].value = ASCIIToUTF16("11"); @@ -4007,11 +4004,177 @@ // Verify that the correct histogram entry (and only that) was logged. histogram_tester.ExpectUniqueSample( - "Autofill.CardUploadDecision", + "Autofill.CardUploadDecisionExpanded", AutofillMetrics::UPLOAD_NOT_OFFERED_NO_ADDRESS, 1); } -TEST_F(AutofillManagerTest, DontUploadCreditCardIfUploadDetailsFails) { +TEST_F(AutofillManagerTest, UploadCreditCard_NoNameAvailable) { + autofill_manager_->set_credit_card_upload_enabled(true); + + // Create, fill and submit an address form in order to establish a recent + // profile which can be selected for the upload request. + FormData address_form; + test::CreateTestAddressFormData(&address_form); + FormsSeen(std::vector<FormData>(1, address_form)); + // But omit the name: + ManuallyFillAddressForm("", "", "77401", "US", &address_form); + FormSubmitted(address_form); + + // Set up our credit card form data. + FormData credit_card_form; + CreateTestCreditCardFormData(&credit_card_form, true, false); + FormsSeen(std::vector<FormData>(1, credit_card_form)); + + // Edit the data, but don't include a name, and submit. + credit_card_form.fields[1].value = ASCIIToUTF16("4111111111111111"); + credit_card_form.fields[2].value = ASCIIToUTF16("11"); + credit_card_form.fields[3].value = ASCIIToUTF16("2017"); + credit_card_form.fields[4].value = ASCIIToUTF16("123"); + + base::HistogramTester histogram_tester; + + // Neither a local save nor an upload should happen in this case. + EXPECT_CALL(autofill_client_, ConfirmSaveCreditCardLocally(_, _)).Times(0); + FormSubmitted(credit_card_form); + EXPECT_FALSE(autofill_manager_->credit_card_was_uploaded()); + + // Verify that the correct histogram entry (and only that) was logged. + histogram_tester.ExpectUniqueSample( + "Autofill.CardUploadDecisionExpanded", + AutofillMetrics::UPLOAD_NOT_OFFERED_NO_NAME, 1); +} + +TEST_F(AutofillManagerTest, UploadCreditCard_ZipCodesConflict) { + autofill_manager_->set_credit_card_upload_enabled(true); + + // Create, fill and submit two address forms with different zip codes. + FormData address_form1, address_form2; + test::CreateTestAddressFormData(&address_form1); + test::CreateTestAddressFormData(&address_form2); + + std::vector<FormData> address_forms; + address_forms.push_back(address_form1); + address_forms.push_back(address_form2); + FormsSeen(address_forms); + + ManuallyFillAddressForm("Flo", "Master", "77401", "US", &address_form1); + FormSubmitted(address_form1); + + ManuallyFillAddressForm("Flo", "Master", "10477", "US", &address_form2); + FormSubmitted(address_form2); + + // Set up our credit card form data. + FormData credit_card_form; + CreateTestCreditCardFormData(&credit_card_form, true, false); + FormsSeen(std::vector<FormData>(1, credit_card_form)); + + // Edit the data, but don't include a name, and submit. + credit_card_form.fields[0].value = ASCIIToUTF16("Flo Master"); + credit_card_form.fields[1].value = ASCIIToUTF16("4111111111111111"); + credit_card_form.fields[2].value = ASCIIToUTF16("11"); + credit_card_form.fields[3].value = ASCIIToUTF16("2017"); + credit_card_form.fields[4].value = ASCIIToUTF16("123"); + + base::HistogramTester histogram_tester; + + // Neither a local save nor an upload should happen in this case. + EXPECT_CALL(autofill_client_, ConfirmSaveCreditCardLocally(_, _)).Times(0); + FormSubmitted(credit_card_form); + EXPECT_FALSE(autofill_manager_->credit_card_was_uploaded()); + + // Verify that the correct histogram entry (and only that) was logged. + histogram_tester.ExpectUniqueSample( + "Autofill.CardUploadDecisionExpanded", + AutofillMetrics::UPLOAD_NOT_OFFERED_CONFLICTING_ZIPS, 1); +} + +TEST_F(AutofillManagerTest, UploadCreditCard_NoZipCodeAvailable) { + autofill_manager_->set_credit_card_upload_enabled(true); + + // Create, fill and submit an address form in order to establish a recent + // profile which can be selected for the upload request. + FormData address_form; + test::CreateTestAddressFormData(&address_form); + FormsSeen(std::vector<FormData>(1, address_form)); + // Autofill's validation requirements for Venezuala ("VE", see + // src/components/autofill/core/browser/country_data.cc) do not require zip + // codes. We use Venezuala here because to use the US (or one of many other + // countries which autofill requires a zip code for) would result in no + // address being imported at all, and then we never reach the check for + // missing zip code in the upload code. + ManuallyFillAddressForm("Flo", "Master", "" /* zip_code */, "Venezuela", + &address_form); + FormSubmitted(address_form); + + // Set up our credit card form data. + FormData credit_card_form; + CreateTestCreditCardFormData(&credit_card_form, true, false); + FormsSeen(std::vector<FormData>(1, credit_card_form)); + + // Edit the data, and submit. + credit_card_form.fields[0].value = ASCIIToUTF16("Flo Master"); + credit_card_form.fields[1].value = ASCIIToUTF16("4111111111111111"); + credit_card_form.fields[2].value = ASCIIToUTF16("11"); + credit_card_form.fields[3].value = ASCIIToUTF16("2017"); + credit_card_form.fields[4].value = ASCIIToUTF16("123"); + + base::HistogramTester histogram_tester; + + // Neither a local save nor an upload should happen in this case. + EXPECT_CALL(autofill_client_, ConfirmSaveCreditCardLocally(_, _)).Times(0); + FormSubmitted(credit_card_form); + EXPECT_FALSE(autofill_manager_->credit_card_was_uploaded()); + + // Verify that the correct histogram entry (and only that) was logged. + histogram_tester.ExpectUniqueSample( + "Autofill.CardUploadDecisionExpanded", + AutofillMetrics::UPLOAD_NOT_OFFERED_NO_ZIP_CODE, 1); +} + +TEST_F(AutofillManagerTest, UploadCreditCard_NamesDontHaveToMatch) { + autofill_manager_->set_credit_card_upload_enabled(true); + + // Create, fill and submit two address forms with different names. + FormData address_form1, address_form2; + test::CreateTestAddressFormData(&address_form1); + test::CreateTestAddressFormData(&address_form2); + + std::vector<FormData> address_forms; + address_forms.push_back(address_form1); + address_forms.push_back(address_form2); + FormsSeen(address_forms); + + ManuallyFillAddressForm("Flo", "Master", "", "US", &address_form1); + FormSubmitted(address_form1); + + ManuallyFillAddressForm("Master", "Blaster", "77401", "US", &address_form2); + FormSubmitted(address_form2); + + // Set up our credit card form data. + FormData credit_card_form; + CreateTestCreditCardFormData(&credit_card_form, true, false); + FormsSeen(std::vector<FormData>(1, credit_card_form)); + + // Edit the data, but use yet another name, and submit. + credit_card_form.fields[0].value = ASCIIToUTF16("Bob Master"); + credit_card_form.fields[1].value = ASCIIToUTF16("4111111111111111"); + credit_card_form.fields[2].value = ASCIIToUTF16("11"); + credit_card_form.fields[3].value = ASCIIToUTF16("2017"); + credit_card_form.fields[4].value = ASCIIToUTF16("123"); + + base::HistogramTester histogram_tester; + + // Names are not required to match, upload should happen. + EXPECT_CALL(autofill_client_, ConfirmSaveCreditCardLocally(_, _)).Times(0); + FormSubmitted(credit_card_form); + EXPECT_TRUE(autofill_manager_->credit_card_was_uploaded()); + + // Verify that the correct histogram entry (and only that) was logged. + histogram_tester.ExpectUniqueSample("Autofill.CardUploadDecisionExpanded", + AutofillMetrics::UPLOAD_OFFERED, 1); +} + +TEST_F(AutofillManagerTest, UploadCreditCard_UploadDetailsFails) { autofill_manager_->set_credit_card_upload_enabled(true); // Anything other than "en-US" will cause GetUploadDetails to return a failure @@ -4023,7 +4186,7 @@ FormData address_form; test::CreateTestAddressFormData(&address_form); FormsSeen(std::vector<FormData>(1, address_form)); - ManuallyFillAddressForm(&address_form); + ManuallyFillAddressForm("Flo", "Master", "77401", "US", &address_form); FormSubmitted(address_form); // Set up our credit card form data. @@ -4031,7 +4194,7 @@ CreateTestCreditCardFormData(&credit_card_form, true, false); FormsSeen(std::vector<FormData>(1, credit_card_form)); - // Edit the data, and submit + // Edit the data, and submit. credit_card_form.fields[0].value = ASCIIToUTF16("Flo Master"); credit_card_form.fields[1].value = ASCIIToUTF16("4111111111111111"); credit_card_form.fields[2].value = ASCIIToUTF16("11"); @@ -4047,7 +4210,7 @@ // Verify that the correct histogram entry (and only that) was logged. histogram_tester.ExpectUniqueSample( - "Autofill.CardUploadDecision", + "Autofill.CardUploadDecisionExpanded", AutofillMetrics::UPLOAD_NOT_OFFERED_GET_UPLOAD_DETAILS_FAILED, 1); }
diff --git a/components/autofill/core/browser/autofill_metrics.cc b/components/autofill/core/browser/autofill_metrics.cc index 82befa4..d55d685 100644 --- a/components/autofill/core/browser/autofill_metrics.cc +++ b/components/autofill/core/browser/autofill_metrics.cc
@@ -272,7 +272,7 @@ void AutofillMetrics::LogCardUploadDecisionMetric( CardUploadDecisionMetric metric) { DCHECK_LT(metric, NUM_CARD_UPLOAD_DECISION_METRICS); - UMA_HISTOGRAM_ENUMERATION("Autofill.CardUploadDecision", metric, + UMA_HISTOGRAM_ENUMERATION("Autofill.CardUploadDecisionExpanded", metric, NUM_CARD_UPLOAD_DECISION_METRICS); }
diff --git a/components/autofill/core/browser/autofill_metrics.h b/components/autofill/core/browser/autofill_metrics.h index 08a8bf99..84b33be 100644 --- a/components/autofill/core/browser/autofill_metrics.h +++ b/components/autofill/core/browser/autofill_metrics.h
@@ -42,15 +42,27 @@ // All the required conditions were satisfied and the card upload prompt was // triggered. UPLOAD_OFFERED, - // No CVC was detected. We don't know whether a valid address was available + // No CVC was detected. We don't know whether any addresses were available // nor whether we would have been able to get upload details. UPLOAD_NOT_OFFERED_NO_CVC, - // A CVC was detected but no valid address was available (recently created - // or used, with a name matching the card, and with a non-empty zip code). + // A CVC was detected but no recently created or used address was available. // We don't know whether we would have been able to get upload details. UPLOAD_NOT_OFFERED_NO_ADDRESS, - // A CVC was detected and a valid address was available but the request to - // Payments for upload details failed. + // A CVC and one or more addresses were available but no name was found on + // either the card or the adress(es). We don't know whether the address(es) + // were otherwise valid nor whether we would have been able to get upload + // details. + UPLOAD_NOT_OFFERED_NO_NAME, + // A CVC, multiple addresses, and a name were available but the adresses had + // conflicting zip codes. We don't know whether we would have been able to + // get upload details. + UPLOAD_NOT_OFFERED_CONFLICTING_ZIPS, + // A CVC, one or more addresses, and a name were available but no zip code + // was found on any of the adress(es). We don't know whether we would have + // been able to get upload details. + UPLOAD_NOT_OFFERED_NO_ZIP_CODE, + // A CVC, one or more valid addresses, and a name were available but the + // request to Payments for upload details failed. UPLOAD_NOT_OFFERED_GET_UPLOAD_DETAILS_FAILED, NUM_CARD_UPLOAD_DECISION_METRICS, };
diff --git a/components/autofill/core/browser/autofill_regex_constants.cc b/components/autofill/core/browser/autofill_regex_constants.cc index 4d7236c..facf0c61 100644 --- a/components/autofill/core/browser/autofill_regex_constants.cc +++ b/components/autofill/core/browser/autofill_regex_constants.cc
@@ -29,7 +29,7 @@ "|单位|公司" // zh-CN "|회사|직장"; // ko-KR const char kAddressLine1Re[] = - "^address$|address.*line|address1|addr1|street" + "^address$|address[_-]?line(one)?|address1|addr1|street" "|(?:shipping|billing)address$" "|strasse|straße|hausnummer|housenumber" // de-DE "|house.?name" // en-GB @@ -49,7 +49,7 @@ "|地址" // zh-CN "|주소"; // ko-KR const char kAddressLine2Re[] = - "address.*line2|address2|addr2|street|suite|unit" + "address[_-]?line(2|two)|address2|addr2|street|suite|unit" "|adresszusatz|ergänzende.?angaben" // de-DE "|direccion2|colonia|adicional" // es "|addresssuppl|complementnom|appartement" // fr-FR @@ -137,7 +137,7 @@ const char kNameOnCardContextualRe[] = "name"; const char kCardNumberRe[] = - "(?:card|cc|acct).?(?:number|#|no|num)" + "(add)?(?:card|cc|acct).?(?:number|#|no|num)" "|nummer" // de-DE "|credito|numero|número" // es "|numéro" // fr-FR @@ -164,7 +164,7 @@ // https://rps.fidelity.com/ftgw/rps/RtlCust/CreatePIN/Init. // Instead, we match only words beginning with "month". const char kExpirationMonthRe[] = - "expir|exp.*mo|exp.*date|ccmonth|cardmonth" + "expir|exp.*mo|exp.*date|ccmonth|cardmonth|addmonth" "|gueltig|gültig|monat" // de-DE "|fecha" // es "|date.*exp" // fr-FR @@ -174,7 +174,7 @@ "|Срок действия карты" // ru "|月"; // zh-CN const char kExpirationYearRe[] = - "exp|^/|year" + "exp|^/|(add)?year" "|ablaufdatum|gueltig|gültig|jahr" // de-DE "|fecha" // es "|scadenza" // it-IT
diff --git a/components/autofill/core/browser/form_structure.cc b/components/autofill/core/browser/form_structure.cc index feb1ddc..bb8c3bd 100644 --- a/components/autofill/core/browser/form_structure.cc +++ b/components/autofill/core/browser/form_structure.cc
@@ -304,7 +304,8 @@ has_author_specified_sections_(false), was_parsed_for_autocomplete_attributes_(false), has_password_field_(false), - is_form_tag_(form.is_form_tag) { + is_form_tag_(form.is_form_tag), + is_formless_checkout_(form.is_formless_checkout) { // Copy the form fields. std::map<base::string16, size_t> unique_names; for (const FormFieldData& field : form.fields) { @@ -337,13 +338,15 @@ void FormStructure::DetermineHeuristicTypes() { // First, try to detect field types based on each field's |autocomplete| - // attribute value. If there is at least one form field that specifies an - // autocomplete type hint, don't try to apply other heuristics to match fields - // in this form. + // attribute value. if (!was_parsed_for_autocomplete_attributes_) ParseFieldTypesFromAutocompleteAttributes(); - if (active_field_count() >= kRequiredFieldsForPredictionRoutines) { + // Then if there are enough active fields, and if we are dealing with either a + // proper <form> or a <form>-less checkout, run the heuristics and server + // prediction routines. + if (active_field_count() >= kRequiredFieldsForPredictionRoutines && + (is_form_tag_ || is_formless_checkout_)) { ServerFieldTypeMap field_type_map; FormField::ParseFormFields(fields_.get(), is_form_tag_, &field_type_map); for (size_t i = 0; i < field_count(); ++i) {
diff --git a/components/autofill/core/browser/form_structure.h b/components/autofill/core/browser/form_structure.h index 1a14f8d..f789f5c4 100644 --- a/components/autofill/core/browser/form_structure.h +++ b/components/autofill/core/browser/form_structure.h
@@ -301,6 +301,9 @@ // True if the form is a <form>. bool is_form_tag_; + // True if the form is made of unowned fields in a non checkout flow. + bool is_formless_checkout_; + DISALLOW_COPY_AND_ASSIGN(FormStructure); };
diff --git a/components/autofill/core/browser/form_structure_unittest.cc b/components/autofill/core/browser/form_structure_unittest.cc index 4d1812a3e..21e9945 100644 --- a/components/autofill/core/browser/form_structure_unittest.cc +++ b/components/autofill/core/browser/form_structure_unittest.cc
@@ -451,6 +451,58 @@ EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(2)->heuristic_type()); } +// Verify that the heuristics are not run for non checkout formless forms. +TEST_F(FormStructureTest, Heuristics_FormlessNonCheckoutForm) { + scoped_ptr<FormStructure> form_structure; + FormData form; + + FormFieldData field; + field.form_control_type = "text"; + + field.label = ASCIIToUTF16("First Name:"); + field.name = ASCIIToUTF16("firstname"); + field.autocomplete_attribute = "given-name"; + form.fields.push_back(field); + + field.label = ASCIIToUTF16("Last Name:"); + field.name = ASCIIToUTF16("lastname"); + field.autocomplete_attribute = "family-name"; + form.fields.push_back(field); + + field.label = ASCIIToUTF16("Email:"); + field.name = ASCIIToUTF16("email"); + field.autocomplete_attribute = "email"; + form.fields.push_back(field); + + form_structure.reset(new FormStructure(form)); + form_structure->DetermineHeuristicTypes(); + EXPECT_TRUE(form_structure->IsAutofillable()); + + // Expect the correct number of fields. + ASSERT_EQ(3U, form_structure->field_count()); + ASSERT_EQ(3U, form_structure->autofill_count()); + + // The heuristic type should be good. + EXPECT_EQ(HTML_TYPE_GIVEN_NAME, form_structure->field(0)->html_type()); + EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type()); + + // Set the form as a formless non checkout form. + form.is_formless_checkout = false; + form.is_form_tag = false; + + form_structure.reset(new FormStructure(form)); + form_structure->DetermineHeuristicTypes(); + EXPECT_TRUE(form_structure->IsAutofillable()); + + // Expect the correct number of fields. + ASSERT_EQ(3U, form_structure->field_count()); + ASSERT_EQ(3U, form_structure->autofill_count()); + + // The heuristic type should be Unknown. + EXPECT_EQ(HTML_TYPE_GIVEN_NAME, form_structure->field(0)->html_type()); + EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(0)->heuristic_type()); +} + // All fields share a common prefix which could confuse the heuristics. Test // that the common prefix is stripped out before running heuristics. TEST_F(FormStructureTest, StripCommonNamePrefix) {
diff --git a/components/autofill/core/common/form_data.cc b/components/autofill/core/common/form_data.cc index e093083..a1a5e82 100644 --- a/components/autofill/core/common/form_data.cc +++ b/components/autofill/core/common/form_data.cc
@@ -18,7 +18,7 @@ namespace { -const int kPickleVersion = 4; +const int kPickleVersion = 5; bool ReadGURL(base::PickleIterator* iter, GURL* url) { std::string spec; @@ -60,26 +60,23 @@ } // namespace -FormData::FormData() - : is_form_tag(true) { -} +FormData::FormData() : is_form_tag(true), is_formless_checkout(false) {} FormData::FormData(const FormData& data) : name(data.name), origin(data.origin), action(data.action), is_form_tag(data.is_form_tag), - fields(data.fields) { -} + is_formless_checkout(data.is_formless_checkout), + fields(data.fields) {} FormData::~FormData() { } bool FormData::SameFormAs(const FormData& form) const { - if (name != form.name || - origin != form.origin || - action != form.action || + if (name != form.name || origin != form.origin || action != form.action || is_form_tag != form.is_form_tag || + is_formless_checkout != form.is_formless_checkout || fields.size() != form.fields.size()) return false; for (size_t i = 0; i < fields.size(); ++i) { @@ -90,16 +87,15 @@ } bool FormData::operator<(const FormData& form) const { - return std::tie(name, origin, action, is_form_tag, fields) < - std::tie(form.name, form.origin, form.action, form.is_form_tag, - form.fields); + return std::tie(name, origin, action, is_form_tag, is_formless_checkout, + fields) < std::tie(form.name, form.origin, form.action, + form.is_form_tag, + form.is_formless_checkout, form.fields); } std::ostream& operator<<(std::ostream& os, const FormData& form) { - os << base::UTF16ToUTF8(form.name) << " " - << form.origin << " " - << form.action << " " - << form.is_form_tag << " " + os << base::UTF16ToUTF8(form.name) << " " << form.origin << " " << form.action + << " " << form.is_form_tag << " " << form.is_formless_checkout << " " << "Fields:"; for (size_t i = 0; i < form.fields.size(); ++i) { os << form.fields[i] << ","; @@ -114,6 +110,7 @@ pickle->WriteString(form_data.action.spec()); SerializeFormFieldDataVector(form_data.fields, pickle); pickle->WriteBool(form_data.is_form_tag); + pickle->WriteBool(form_data.is_formless_checkout); } void SerializeFormDataToBase64String(const FormData& form_data, @@ -170,6 +167,13 @@ form_data->is_form_tag = true; } + if (version >= 5) { + if (!iter->ReadBool(&temp_form_data.is_formless_checkout)) { + LogDeserializationError(version); + return false; + } + } + *form_data = temp_form_data; return true; }
diff --git a/components/autofill/core/common/form_data.h b/components/autofill/core/common/form_data.h index a406ccb..6014c14f 100644 --- a/components/autofill/core/common/form_data.h +++ b/components/autofill/core/common/form_data.h
@@ -32,8 +32,10 @@ GURL origin; // The action target of the form. GURL action; - // true if this form is a form tag. + // True if this form is a form tag. bool is_form_tag; + // True if the form is made of unowned fields in a non checkout flow. + bool is_formless_checkout; // A vector of all the input fields in the form. std::vector<FormFieldData> fields; };
diff --git a/components/autofill/core/common/form_data_unittest.cc b/components/autofill/core/common/form_data_unittest.cc index d775081..a025420 100644 --- a/components/autofill/core/common/form_data_unittest.cc +++ b/components/autofill/core/common/form_data_unittest.cc
@@ -73,6 +73,20 @@ pickle->WriteBool(form_data.is_form_tag); } +void SerializeInVersion5Format(const FormData& form_data, + base::Pickle* pickle) { + pickle->WriteInt(5); + pickle->WriteString16(form_data.name); + pickle->WriteString(form_data.origin.spec()); + pickle->WriteString(form_data.action.spec()); + pickle->WriteInt(static_cast<int>(form_data.fields.size())); + for (size_t i = 0; i < form_data.fields.size(); ++i) { + SerializeFormFieldData(form_data.fields[i], pickle); + } + pickle->WriteBool(form_data.is_form_tag); + pickle->WriteBool(form_data.is_formless_checkout); +} + // This function serializes the form data into the pickle in incorrect format // (no version number). void SerializeIncorrectFormat(const FormData& form_data, base::Pickle* pickle) { @@ -91,6 +105,7 @@ data->origin = GURL("origin"); data->action = GURL("action"); data->is_form_tag = true; // Default value. + data->is_formless_checkout = false; // Default value. FormFieldData field_data; field_data.label = base::ASCIIToUTF16("label"); @@ -220,6 +235,21 @@ EXPECT_TRUE(actual.SameFormAs(data)); } +TEST(FormDataTest, Serialize_v5_Deserialize_vCurrent) { + FormData data; + FillInDummyFormData(&data); + data.is_formless_checkout = true; + + base::Pickle pickle; + SerializeInVersion5Format(data, &pickle); + + base::PickleIterator iter(pickle); + FormData actual; + EXPECT_TRUE(DeserializeFormData(&iter, &actual)); + + EXPECT_TRUE(actual.SameFormAs(data)); +} + TEST(FormDataTest, SerializeIncorrectFormatAndDeserialize) { FormData data; FillInDummyFormData(&data);
diff --git a/components/autofill/core/common/form_field_data.cc b/components/autofill/core/common/form_field_data.cc index 7b8d105..f3cebf24 100644 --- a/components/autofill/core/common/form_field_data.cc +++ b/components/autofill/core/common/form_field_data.cc
@@ -57,7 +57,7 @@ iter->ReadString16(&field_data->value) && iter->ReadString(&field_data->form_control_type) && iter->ReadString(&field_data->autocomplete_attribute) && - iter->ReadSizeT(&field_data->max_length) && + iter->ReadUInt32(&field_data->max_length) && iter->ReadBool(&field_data->is_autofilled) && iter->ReadBool(&field_data->is_checked) && iter->ReadBool(&field_data->is_checkable) && @@ -155,7 +155,7 @@ pickle->WriteString16(field_data.value); pickle->WriteString(field_data.form_control_type); pickle->WriteString(field_data.autocomplete_attribute); - pickle->WriteSizeT(field_data.max_length); + pickle->WriteUInt32(field_data.max_length); pickle->WriteBool(field_data.is_autofilled); pickle->WriteBool(field_data.is_checked); pickle->WriteBool(field_data.is_checkable);
diff --git a/components/autofill/core/common/form_field_data.h b/components/autofill/core/common/form_field_data.h index f711b77..03172390 100644 --- a/components/autofill/core/common/form_field_data.h +++ b/components/autofill/core/common/form_field_data.h
@@ -45,7 +45,7 @@ base::string16 value; std::string form_control_type; std::string autocomplete_attribute; - size_t max_length; + uint32_t max_length; bool is_autofilled; bool is_checked; bool is_checkable;
diff --git a/components/autofill/core/common/form_field_data_unittest.cc b/components/autofill/core/common/form_field_data_unittest.cc index dc17277..3297f73 100644 --- a/components/autofill/core/common/form_field_data_unittest.cc +++ b/components/autofill/core/common/form_field_data_unittest.cc
@@ -38,7 +38,7 @@ pickle->WriteString16(data.value); pickle->WriteString(data.form_control_type); pickle->WriteString(data.autocomplete_attribute); - pickle->WriteSizeT(data.max_length); + pickle->WriteUInt32(data.max_length); pickle->WriteBool(data.is_autofilled); pickle->WriteBool(data.is_checked); pickle->WriteBool(data.is_checkable);
diff --git a/components/bitmap_uploader/bitmap_uploader.cc b/components/bitmap_uploader/bitmap_uploader.cc index 506e5fe2..2425fd1 100644 --- a/components/bitmap_uploader/bitmap_uploader.cc +++ b/components/bitmap_uploader/bitmap_uploader.cc
@@ -115,9 +115,9 @@ GL_UNSIGNED_BYTE, &((*bitmap_)[0])); - GLbyte mailbox[GL_MAILBOX_SIZE_CHROMIUM]; - glGenMailboxCHROMIUM(mailbox); - glProduceTextureCHROMIUM(GL_TEXTURE_2D, mailbox); + gpu::Mailbox mailbox; + glGenMailboxCHROMIUM(mailbox.name); + glProduceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); const GLuint64 fence_sync = glInsertFenceSyncCHROMIUM(); glShallowFlushCHROMIUM(); @@ -132,15 +132,8 @@ resource->format = mus::mojom::ResourceFormat::RGBA_8888; resource->filter = GL_LINEAR; resource->size = bitmap_size.Clone(); - mus::mojom::MailboxHolderPtr mailbox_holder = - mus::mojom::MailboxHolder::New(); - mailbox_holder->mailbox = mus::mojom::Mailbox::New(); - for (int i = 0; i < GL_MAILBOX_SIZE_CHROMIUM; ++i) - mailbox_holder->mailbox->name.push_back(mailbox[i]); - mailbox_holder->texture_target = GL_TEXTURE_2D; - mailbox_holder->sync_token = - mus::mojom::SyncToken::From<gpu::SyncToken>(sync_token); - resource->mailbox_holder = std::move(mailbox_holder); + resource->mailbox_holder = + gpu::MailboxHolder(mailbox, sync_token, GL_TEXTURE_2D); resource->read_lock_fences_enabled = false; resource->is_software = false; resource->is_overlay_candidate = false; @@ -247,7 +240,7 @@ mus::mojom::ReturnedResourcePtr resource = std::move(resources[i]); DCHECK_EQ(1, resource->count); glWaitSyncTokenCHROMIUM( - resource->sync_token.To<gpu::SyncToken>().GetConstData()); + resource->sync_token.GetConstData()); uint32_t texture_id = resource_to_texture_id_map_[resource->id]; DCHECK_NE(0u, texture_id); resource_to_texture_id_map_.erase(resource->id);
diff --git a/components/bookmark_component_strings.grdp b/components/bookmark_component_strings.grdp new file mode 100644 index 0000000..6acef33 --- /dev/null +++ b/components/bookmark_component_strings.grdp
@@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="utf-8"?> +<grit-part> + <message name="IDS_BOOKMARK_BUBBLE_REMOVE_BOOKMARK" desc="Title of the button for removing the bookmark"> + Remove + </message> + <message name="IDS_BOOKMARK_EDITOR_NEW_FOLDER_NAME" desc="Name for newly created groups"> + New folder + </message> + <message name="IDS_BOOKMARK_EDITOR_TITLE" desc="Title of the window the bookmark editor is in."> + Edit Bookmark + </message> + <if expr="not use_titlecase"> + <message name="IDS_BOOKMARK_MANAGER_NAME_INPUT_PLACE_HOLDER" desc="Text to show in the URL input field when editing or creating bookmarks."> + Name + </message> + <message name="IDS_BOOKMARK_MANAGER_URL_INPUT_PLACE_HOLDER" desc="Text to show in the URL input field when editing or creating bookmarks."> + URL + </message> + </if> + <if expr="use_titlecase"> + <message name="IDS_BOOKMARK_MANAGER_NAME_INPUT_PLACE_HOLDER" desc="In Title Case: Text to show in the URL input field when editing or creating bookmarks."> + Name + </message> + <message name="IDS_BOOKMARK_MANAGER_URL_INPUT_PLACE_HOLDER" desc="In Title Case: Text to show in the URL input field when editing or creating bookmarks."> + URL + </message> + </if> + <if expr="is_ios"> + <message name="IDS_BOOKMARK_FOLDER_CHOOSER_TITLE" desc="Title of the window the bookmark folder chooser is in."> + Choose Folder + </message> + <message name="IDS_BOOKMARK_ADD_EDITOR_TITLE" desc="Title of the window the bookmark editor is in when adding a bookmark. [Length: 10em]"> + Add Bookmark + </message> + <message name="IDS_BOOKMARK_NEW_FOLDER_BUTTON_TITLE" desc="Title for button to create a new folder in Bookmarks [Length: 14em]"> + New Folder + </message> + <message name="IDS_BOOKMARK_FOLDER_EDITOR_TITLE" desc="Title of the window the bookmark folder editor is in."> + Edit Folder + </message> + <message name="IDS_BOOKMARK_MANAGER_FOLDER_SECTION" desc="The label for the folder section when editing or creating bookmarks on a phone."> + In Folder: + </message> + <message name="IDS_BOOKMARK_MANAGER_FOLDER_TITLE" desc="The label for the folder selector field when editing or creating bookmarks."> + Folder + </message> + <message name="IDS_BOOKMARK_MANAGER_REMOVE_TITLE" desc="The label for the remove button when editing bookmarks."> + Remove + </message> + </if> + <message name="IDS_TOOLTIP_STAR" desc="The tooltip shown when you hover the star button in the right side of the location bar."> + Bookmark this page + </message> +</grit-part>
diff --git a/components/bookmarks/browser/bookmark_node_data.cc b/components/bookmarks/browser/bookmark_node_data.cc index 5046ad86..83d160f 100644 --- a/components/bookmarks/browser/bookmark_node_data.cc +++ b/components/bookmarks/browser/bookmark_node_data.cc
@@ -42,14 +42,14 @@ pickle->WriteString(url.spec()); pickle->WriteString16(title); pickle->WriteInt64(id_); - pickle->WriteSizeT(meta_info_map.size()); + pickle->WriteUInt32(static_cast<uint32_t>(meta_info_map.size())); for (BookmarkNode::MetaInfoMap::const_iterator it = meta_info_map.begin(); it != meta_info_map.end(); ++it) { pickle->WriteString(it->first); pickle->WriteString(it->second); } if (!is_url) { - pickle->WriteSizeT(children.size()); + pickle->WriteUInt32(static_cast<uint32_t>(children.size())); for (std::vector<Element>::const_iterator i = children.begin(); i != children.end(); ++i) { i->WriteToPickle(pickle); @@ -69,8 +69,8 @@ date_added = base::Time(); date_folder_modified = base::Time(); meta_info_map.clear(); - size_t meta_field_count; - if (!iterator->ReadSizeT(&meta_field_count)) + uint32_t meta_field_count; + if (!iterator->ReadUInt32(&meta_field_count)) return false; for (size_t i = 0; i < meta_field_count; ++i) { std::string key; @@ -83,8 +83,8 @@ } children.clear(); if (!is_url) { - size_t children_count; - if (!iterator->ReadSizeT(&children_count)) + uint32_t children_count; + if (!iterator->ReadUInt32(&children_count)) return false; children.reserve(children_count); for (size_t i = 0; i < children_count; ++i) { @@ -234,7 +234,7 @@ void BookmarkNodeData::WriteToPickle(const base::FilePath& profile_path, base::Pickle* pickle) const { profile_path.WriteToPickle(pickle); - pickle->WriteSizeT(size()); + pickle->WriteUInt32(static_cast<uint32_t>(size())); for (size_t i = 0; i < size(); ++i) elements[i].WriteToPickle(pickle); @@ -242,9 +242,9 @@ bool BookmarkNodeData::ReadFromPickle(base::Pickle* pickle) { base::PickleIterator data_iterator(*pickle); - size_t element_count; + uint32_t element_count; if (profile_path_.ReadFromPickle(&data_iterator) && - data_iterator.ReadSizeT(&element_count)) { + data_iterator.ReadUInt32(&element_count)) { std::vector<Element> tmp_elements; tmp_elements.resize(element_count); for (size_t i = 0; i < element_count; ++i) {
diff --git a/components/clipboard/clipboard_application_delegate.cc b/components/clipboard/clipboard_application_delegate.cc index fe148c7..077ec90f 100644 --- a/components/clipboard/clipboard_application_delegate.cc +++ b/components/clipboard/clipboard_application_delegate.cc
@@ -23,7 +23,7 @@ bool ClipboardApplicationDelegate::AcceptConnection( mojo::Connection* connection) { - connection->AddService(this); + connection->AddInterface(this); return true; }
diff --git a/components/component_updater/component_updater_service.cc b/components/component_updater/component_updater_service.cc index 490e5c4..fce7e99 100644 --- a/components/component_updater/component_updater_service.cc +++ b/components/component_updater/component_updater_service.cc
@@ -13,7 +13,6 @@ #include "base/bind.h" #include "base/bind_helpers.h" #include "base/callback.h" -#include "base/compiler_specific.h" #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/logging.h"
diff --git a/components/component_updater/configurator_impl.cc b/components/component_updater/configurator_impl.cc index 34097a0..35c1793a 100644 --- a/components/component_updater/configurator_impl.cc +++ b/components/component_updater/configurator_impl.cc
@@ -9,7 +9,6 @@ #include <algorithm> #include "base/command_line.h" -#include "base/compiler_specific.h" #include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/version.h"
diff --git a/components/component_updater/default_component_installer.h b/components/component_updater/default_component_installer.h index f76bc837..5b99491 100644 --- a/components/component_updater/default_component_installer.h +++ b/components/component_updater/default_component_installer.h
@@ -10,7 +10,6 @@ #include <vector> #include "base/callback_forward.h" -#include "base/compiler_specific.h" #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h"
diff --git a/components/components.gyp b/components/components.gyp index 9e7bcbe..1816fd62 100644 --- a/components/components.gyp +++ b/components/components.gyp
@@ -31,7 +31,6 @@ 'data_use_measurement.gypi', 'device_event_log.gypi', 'dom_distiller.gypi', - 'enhanced_bookmarks.gypi', 'error_page.gypi', 'favicon.gypi', 'favicon_base.gypi',
diff --git a/components/components_strings.grd b/components/components_strings.grd index 1ad4c7a..752936d 100644 --- a/components/components_strings.grd +++ b/components/components_strings.grd
@@ -185,6 +185,7 @@ <part file="app_modal_strings.grdp" /> <part file="autofill_strings.grdp" /> <part file="bookmark_bar_strings.grdp" /> + <part file="bookmark_component_strings.grdp" /> <part file="browser_sync_strings.grdp" /> <part file="components_settings_strings.grdp" /> <part file="crash_strings.grdp" /> @@ -192,6 +193,7 @@ <part file="dialog_strings.grdp" /> <part file="dom_distiller_strings.grdp" /> <part file="error_page_strings.grdp" /> + <part file="find_in_page_strings.grdp" /> <part file="flags_ui_strings.grdp" /> <part file="history_ui_strings.grdp" /> <part file="omnibox_strings.grdp" />
diff --git a/components/components_tests.gyp b/components/components_tests.gyp index 84978d14..73a7b307 100644 --- a/components/components_tests.gyp +++ b/components/components_tests.gyp
@@ -772,6 +772,7 @@ 'sync_sessions/revisit/typed_url_page_revisit_task_unittest.cc', 'sync_sessions/session_data_type_controller_unittest.cc', 'sync_sessions/synced_session_tracker_unittest.cc', + 'sync_sessions/sync_sessions_metrics_unittest.cc', 'sync_sessions/tab_node_pool_unittest.cc', ], 'syncable_prefs_unittest_sources': [
diff --git a/components/crash.gypi b/components/crash.gypi index 9f65150..ddf0c15 100644 --- a/components/crash.gypi +++ b/components/crash.gypi
@@ -220,6 +220,9 @@ '../base/base.gyp:base', '../third_party/kasko/kasko.gyp:kasko', ], + 'export_dependent_settings': [ + '../third_party/kasko/kasko.gyp:kasko', + ], 'conditions': [ ['OS=="win"', { 'dependencies': [
diff --git a/components/crash/content/app/crashpad.cc b/components/crash/content/app/crashpad.cc index 38b54b1..8cb7d5b 100644 --- a/components/crash/content/app/crashpad.cc +++ b/components/crash/content/app/crashpad.cc
@@ -16,11 +16,13 @@ #include <vector> #include "base/auto_reset.h" +#include "base/base_paths.h" #include "base/command_line.h" #include "base/debug/crash_logging.h" #include "base/debug/dump_without_crashing.h" #include "base/logging.h" #include "base/macros.h" +#include "base/path_service.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_piece.h" #include "base/strings/stringprintf.h" @@ -364,7 +366,12 @@ if (!process_handle.IsValid()) return; - HMODULE module = GetModuleInProcess(process_handle.Get(), L"chrome.exe"); + // The executable name is the same for the browser process and the crash + // reporter. + base::FilePath exe_path; + base::PathService::Get(base::FILE_EXE, &exe_path); + HMODULE module = GetModuleInProcess(process_handle.Get(), + exe_path.BaseName().value().c_str()); if (!module) return;
diff --git a/components/cronet/android/BUILD.gn b/components/cronet/android/BUILD.gn index 1f9ab1e..b1a3469f 100644 --- a/components/cronet/android/BUILD.gn +++ b/components/cronet/android/BUILD.gn
@@ -140,6 +140,8 @@ "//components/cronet/android/cronet_url_request_adapter.h", "//components/cronet/android/cronet_url_request_context_adapter.cc", "//components/cronet/android/cronet_url_request_context_adapter.h", + "//components/cronet/android/io_buffer_with_byte_buffer.cc", + "//components/cronet/android/io_buffer_with_byte_buffer.h", "//components/cronet/android/url_request_adapter.cc", "//components/cronet/android/url_request_adapter.h", "//components/cronet/android/url_request_context_adapter.cc",
diff --git a/components/cronet/android/api/src/org/chromium/net/JavaUrlRequest.java b/components/cronet/android/api/src/org/chromium/net/JavaUrlRequest.java index ac873ba..79d71c0 100644 --- a/components/cronet/android/api/src/org/chromium/net/JavaUrlRequest.java +++ b/components/cronet/android/api/src/org/chromium/net/JavaUrlRequest.java
@@ -563,30 +563,6 @@ })); } - @Override - public void read(final ByteBuffer buffer) { - Preconditions.checkDirect(buffer); - if (!(buffer.capacity() - buffer.position() > 0)) { - throw new IllegalArgumentException("ByteBuffer is already full."); - } - transitionStates(State.AWAITING_READ, State.READING, new Runnable() { - @Override - public void run() { - mExecutor.execute(errorSetting(State.READING, new CheckedRunnable() { - @Override - public void run() throws IOException { - int oldPosition = buffer.position(); - buffer.limit(buffer.capacity()); - int read = mResponseChannel.read(buffer); - buffer.limit(buffer.position()); - buffer.position(oldPosition); - processReadResult(read, buffer); - } - })); - } - }); - } - private Runnable errorSetting(final State expectedState, final CheckedRunnable delegate) { return new Runnable() { @Override
diff --git a/components/cronet/android/api/src/org/chromium/net/UrlRequest.java b/components/cronet/android/api/src/org/chromium/net/UrlRequest.java index 84862bd..3aae05ab 100644 --- a/components/cronet/android/api/src/org/chromium/net/UrlRequest.java +++ b/components/cronet/android/api/src/org/chromium/net/UrlRequest.java
@@ -299,8 +299,8 @@ * With the exception of {@link Callback#onCanceled onCanceled()}, * no other {@link Callback} method will be invoked for the request, * including {@link Callback#onSucceeded onSucceeded()} and {@link - * Callback#onFailed onFailed()}, until {@link UrlRequest#read - * UrlRequest.read()} is called to attempt to start reading the response + * Callback#onFailed onFailed()}, until {@link UrlRequest#readNew + * UrlRequest.readNew()} is called to attempt to start reading the response * body. * * @param request Request that started to get response. @@ -319,13 +319,13 @@ * no other {@link Callback} method will be invoked for the request, * including {@link Callback#onSucceeded onSucceeded()} and {@link * Callback#onFailed onFailed()}, until {@link - * UrlRequest#read UrlRequest.read()} is called to attempt to continue + * UrlRequest#readNew UrlRequest.readNew()} is called to attempt to continue * reading the response body. * * @param request Request that received data. * @param info Response information. * @param byteBuffer The buffer that was passed in to - * {@link UrlRequest#read UrlRequest.read()}, now containing the + * {@link UrlRequest#readNew UrlRequest.readNew()}, now containing the * received data. The buffer's position is updated to the end of * the received data. The buffer's limit is not changed. * @throws Exception if an error occurs while processing a read completion. @@ -392,7 +392,7 @@ * This state corresponds to a resource load that has either not yet begun * or is idle waiting for the consumer to do something to move things along * (e.g. when the consumer of a {@link UrlRequest} has not called - * {@link UrlRequest#read read()} yet). + * {@link UrlRequest#readNew readNew()} yet). */ public static final int IDLE = 0; /** @@ -481,7 +481,7 @@ * the period after the response headers have been received and before all * of the response body has been downloaded. (NOTE: This state only applies * for an {@link UrlRequest} while there is an outstanding - * {@link UrlRequest#read read()} operation.) + * {@link UrlRequest#readNew readNew()} operation.) */ public static final int READING_RESPONSE = 14; @@ -627,28 +627,6 @@ * * @param buffer {@link ByteBuffer} to write response body to. Must be a * direct ByteBuffer. The embedder must not read or modify buffer's - * position, limit, or data between its position and capacity until the - * request calls back into the {@link Callback}. - * @deprecated Use readNew() instead though note that it updates the - * buffer's position not limit. - */ - // TODO(pauljensen): Switch all callers to call readNew(). - @Deprecated public void read(ByteBuffer buffer); - - /** - * Attempts to read part of the response body into the provided buffer. - * Must only be called at most once in response to each invocation of the - * {@link Callback#onResponseStarted onResponseStarted()} and {@link - * Callback#onReadCompleted onReadCompleted()} methods of the {@link - * Callback}. Each call will result in an asynchronous call to - * either the {@link Callback Callback's} - * {@link Callback#onReadCompleted onReadCompleted()} method if data - * is read, its {@link Callback#onSucceeded onSucceeded()} method if - * there's no more data to read, or its {@link Callback#onFailed - * onFailed()} method if there's an error. - * - * @param buffer {@link ByteBuffer} to write response body to. Must be a - * direct ByteBuffer. The embedder must not read or modify buffer's * position, limit, or data between its position and limit until the * request calls back into the {@link Callback}. */
diff --git a/components/cronet/android/cronet_bidirectional_stream_adapter.cc b/components/cronet/android/cronet_bidirectional_stream_adapter.cc index fd0dbb9..b0a07c1 100644 --- a/components/cronet/android/cronet_bidirectional_stream_adapter.cc +++ b/components/cronet/android/cronet_bidirectional_stream_adapter.cc
@@ -12,9 +12,9 @@ #include "base/logging.h" #include "base/strings/string_number_conversions.h" #include "components/cronet/android/cronet_url_request_context_adapter.h" +#include "components/cronet/android/io_buffer_with_byte_buffer.h" #include "components/cronet/android/url_request_error.h" #include "jni/CronetBidirectionalStream_jni.h" -#include "net/base/io_buffer.h" #include "net/base/net_errors.h" #include "net/base/request_priority.h" #include "net/http/bidirectional_stream_request_info.h" @@ -48,47 +48,6 @@ return reinterpret_cast<jlong>(adapter); } -// TODO(mef): Extract this and its original from cronet_url_request_adapter.cc -// into separate module. -// net::WrappedIOBuffer subclass for a buffer owned by a Java ByteBuffer. Keeps -// the ByteBuffer alive until destroyed. Uses WrappedIOBuffer because data() is -// owned by the embedder. -class CronetBidirectionalStreamAdapter::IOBufferWithByteBuffer - : public net::WrappedIOBuffer { - public: - // Creates a buffer wrapping the Java ByteBuffer |jbyte_buffer|. - // |byte_buffer_data| points to the memory backed by the ByteBuffer, and - // |position| is the index of the first byte of data inside of the buffer. - // |limit| is the the index of the first element that should not be read or - // written, preserved to verify that buffer is not changed externally during - // networking operations. - IOBufferWithByteBuffer(JNIEnv* env, - const JavaParamRef<jobject>& jbyte_buffer, - void* byte_buffer_data, - int position, - int limit) - : net::WrappedIOBuffer(static_cast<char*>(byte_buffer_data) + position), - byte_buffer_(env, jbyte_buffer), - initial_position_(position), - initial_limit_(limit) { - DCHECK(byte_buffer_data); - DCHECK_EQ(env->GetDirectBufferAddress(jbyte_buffer), byte_buffer_data); - } - - int initial_position() const { return initial_position_; } - int initial_limit() const { return initial_limit_; } - - jobject byte_buffer() const { return byte_buffer_.obj(); } - - private: - ~IOBufferWithByteBuffer() override {} - - base::android::ScopedJavaGlobalRef<jobject> byte_buffer_; - - const int initial_position_; - const int initial_limit_; -}; - // static bool CronetBidirectionalStreamAdapter::RegisterJni(JNIEnv* env) { return RegisterNativesImpl(env);
diff --git a/components/cronet/android/cronet_bidirectional_stream_adapter.h b/components/cronet/android/cronet_bidirectional_stream_adapter.h index 14b403ef..53a538071 100644 --- a/components/cronet/android/cronet_bidirectional_stream_adapter.h +++ b/components/cronet/android/cronet_bidirectional_stream_adapter.h
@@ -25,6 +25,7 @@ namespace cronet { class CronetURLRequestContextAdapter; +class IOBufferWithByteBuffer; // An adapter from Java BidirectionalStream object to net::BidirectionalStream. // Created and configured from a Java thread. Start, ReadData, WriteData and @@ -88,8 +89,6 @@ jboolean jsend_on_canceled); private: - class IOBufferWithByteBuffer; - // net::BidirectionalStream::Delegate implementations: void OnHeadersSent() override; void OnHeadersReceived(const net::SpdyHeaderBlock& response_headers) override;
diff --git a/components/cronet/android/cronet_url_request_adapter.cc b/components/cronet/android/cronet_url_request_adapter.cc index cfdceb0b..64a35c0 100644 --- a/components/cronet/android/cronet_url_request_adapter.cc +++ b/components/cronet/android/cronet_url_request_adapter.cc
@@ -12,9 +12,9 @@ #include "base/location.h" #include "base/logging.h" #include "components/cronet/android/cronet_url_request_context_adapter.h" +#include "components/cronet/android/io_buffer_with_byte_buffer.h" #include "components/cronet/android/url_request_error.h" #include "jni/CronetUrlRequest_jni.h" -#include "net/base/io_buffer.h" #include "net/base/load_flags.h" #include "net/base/net_errors.h" #include "net/base/request_priority.h" @@ -57,39 +57,6 @@ return reinterpret_cast<jlong>(adapter); } -// net::WrappedIOBuffer subclass for a buffer owned by a Java ByteBuffer. Keeps -// the ByteBuffer alive until destroyed. Uses WrappedIOBuffer because data() is -// owned by the embedder. -class CronetURLRequestAdapter::IOBufferWithByteBuffer - : public net::WrappedIOBuffer { - public: - // Creates a buffer wrapping the Java ByteBuffer |jbyte_buffer|. |data| points - // to the memory backed by the ByteBuffer, and position is the location to - // start writing. - IOBufferWithByteBuffer( - JNIEnv* env, - jobject jbyte_buffer, - void* data, - int position) - : net::WrappedIOBuffer(static_cast<char*>(data) + position), - initial_position_(position) { - DCHECK(data); - DCHECK_EQ(env->GetDirectBufferAddress(jbyte_buffer), data); - byte_buffer_.Reset(env, jbyte_buffer); - } - - int initial_position() const { return initial_position_; } - - jobject byte_buffer() const { return byte_buffer_.obj(); } - - private: - ~IOBufferWithByteBuffer() override {} - - base::android::ScopedJavaGlobalRef<jobject> byte_buffer_; - - const int initial_position_; -}; - CronetURLRequestAdapter::CronetURLRequestAdapter( CronetURLRequestContextAdapter* context, JNIEnv* env, @@ -188,18 +155,18 @@ const JavaParamRef<jobject>& jcaller, const JavaParamRef<jobject>& jbyte_buffer, jint jposition, - jint jcapacity) { + jint jlimit) { DCHECK(!context_->IsOnNetworkThread()); - DCHECK_LT(jposition, jcapacity); + DCHECK_LT(jposition, jlimit); void* data = env->GetDirectBufferAddress(jbyte_buffer); if (!data) return JNI_FALSE; scoped_refptr<IOBufferWithByteBuffer> read_buffer( - new IOBufferWithByteBuffer(env, jbyte_buffer, data, jposition)); + new IOBufferWithByteBuffer(env, jbyte_buffer, data, jposition, jlimit)); - int remaining_capacity = jcapacity - jposition; + int remaining_capacity = jlimit - jposition; context_->PostTaskToNetworkThread( FROM_HERE, base::Bind(&CronetURLRequestAdapter::ReadDataOnNetworkThread, @@ -222,42 +189,6 @@ base::Unretained(this), jsend_on_canceled)); } -base::android::ScopedJavaLocalRef<jstring> -CronetURLRequestAdapter::GetHttpStatusText( - JNIEnv* env, - const JavaParamRef<jobject>& jcaller) const { - DCHECK(context_->IsOnNetworkThread()); - const net::HttpResponseHeaders* headers = url_request_->response_headers(); - return ConvertUTF8ToJavaString(env, headers->GetStatusText()); -} - -base::android::ScopedJavaLocalRef<jstring> -CronetURLRequestAdapter::GetNegotiatedProtocol( - JNIEnv* env, - const JavaParamRef<jobject>& jcaller) const { - DCHECK(context_->IsOnNetworkThread()); - return ConvertUTF8ToJavaString( - env, url_request_->response_info().npn_negotiated_protocol); -} - -base::android::ScopedJavaLocalRef<jstring> -CronetURLRequestAdapter::GetProxyServer( - JNIEnv* env, - const JavaParamRef<jobject>& jcaller) const { - DCHECK(context_->IsOnNetworkThread()); - return ConvertUTF8ToJavaString( - env, url_request_->response_info().proxy_server.ToString()); -} - -jboolean CronetURLRequestAdapter::GetWasCached( - JNIEnv* env, - const JavaParamRef<jobject>& jcaller) const { - DCHECK(context_->IsOnNetworkThread()); - return url_request_->response_info().was_cached; -} - -// net::URLRequest::Delegate overrides (called on network thread). - void CronetURLRequestAdapter::OnReceivedRedirect( net::URLRequest* request, const net::RedirectInfo& redirect_info, @@ -265,11 +196,20 @@ DCHECK(context_->IsOnNetworkThread()); DCHECK(request->status().is_success()); JNIEnv* env = base::android::AttachCurrentThread(); - cronet::Java_CronetUrlRequest_onRedirectReceived( env, owner_.obj(), ConvertUTF8ToJavaString(env, redirect_info.new_url.spec()).obj(), - redirect_info.status_code, GetResponseHeaders(env).obj(), + redirect_info.status_code, + ConvertUTF8ToJavaString(env, request->response_headers()->GetStatusText()) + .obj(), + GetResponseHeaders(env).obj(), + request->response_info().was_cached ? JNI_TRUE : JNI_FALSE, + ConvertUTF8ToJavaString(env, + request->response_info().npn_negotiated_protocol) + .obj(), + ConvertUTF8ToJavaString(env, + request->response_info().proxy_server.ToString()) + .obj(), request->GetTotalReceivedBytes()); *defer_redirect = true; } @@ -303,7 +243,16 @@ JNIEnv* env = base::android::AttachCurrentThread(); cronet::Java_CronetUrlRequest_onResponseStarted( env, owner_.obj(), request->GetResponseCode(), - GetResponseHeaders(env).obj()); + ConvertUTF8ToJavaString(env, request->response_headers()->GetStatusText()) + .obj(), + GetResponseHeaders(env).obj(), + request->response_info().was_cached ? JNI_TRUE : JNI_FALSE, + ConvertUTF8ToJavaString(env, + request->response_info().npn_negotiated_protocol) + .obj(), + ConvertUTF8ToJavaString(env, + request->response_info().proxy_server.ToString()) + .obj()); } void CronetURLRequestAdapter::OnReadCompleted(net::URLRequest* request, @@ -315,7 +264,8 @@ JNIEnv* env = base::android::AttachCurrentThread(); cronet::Java_CronetUrlRequest_onReadCompleted( env, owner_.obj(), read_buffer_->byte_buffer(), bytes_read, - read_buffer_->initial_position(), request->GetTotalReceivedBytes()); + read_buffer_->initial_position(), read_buffer_->initial_limit(), + request->GetTotalReceivedBytes()); // Free the read buffer. This lets the Java ByteBuffer be freed, if the // embedder releases it, too. read_buffer_ = nullptr;
diff --git a/components/cronet/android/cronet_url_request_adapter.h b/components/cronet/android/cronet_url_request_adapter.h index f85eb81..2041ce9 100644 --- a/components/cronet/android/cronet_url_request_adapter.h +++ b/components/cronet/android/cronet_url_request_adapter.h
@@ -36,6 +36,7 @@ namespace cronet { class CronetURLRequestContextAdapter; +class IOBufferWithByteBuffer; bool CronetUrlRequestAdapterRegisterJni(JNIEnv* env); @@ -44,8 +45,7 @@ // posted to network thread and all callbacks into the Java CronetUrlRequest are // done on the network thread. Java CronetUrlRequest is expected to initiate the // next step like FollowDeferredRedirect, ReadData or Destroy. Public methods -// can be called on any thread except PopulateResponseHeaders and Get* methods, -// which can only be called on the network thread. +// can be called on any thread. class CronetURLRequestAdapter : public net::URLRequest::Delegate { public: CronetURLRequestAdapter(CronetURLRequestContextAdapter* context, @@ -103,30 +103,6 @@ const base::android::JavaParamRef<jobject>& jcaller, jboolean jsend_on_canceled); - // When called during a OnRedirect or OnResponseStarted callback, these - // methods return the corresponding response information. These methods - // can only be called on the network thread. - - // Gets http status text from the response headers. - base::android::ScopedJavaLocalRef<jstring> GetHttpStatusText( - JNIEnv* env, - const base::android::JavaParamRef<jobject>& jcaller) const; - - // Gets NPN or ALPN Negotiated Protocol (if any) from HttpResponseInfo. - base::android::ScopedJavaLocalRef<jstring> GetNegotiatedProtocol( - JNIEnv* env, - const base::android::JavaParamRef<jobject>& jcaller) const; - - // Returns the host and port of the proxy server, if one was used. - base::android::ScopedJavaLocalRef<jstring> GetProxyServer( - JNIEnv* env, - const base::android::JavaParamRef<jobject>& jcaller) const; - - // Returns true if response is coming from the cache. - jboolean GetWasCached( - JNIEnv* env, - const base::android::JavaParamRef<jobject>& jcaller) const; - // net::URLRequest::Delegate implementations: void OnReceivedRedirect(net::URLRequest* request, @@ -142,8 +118,6 @@ void OnReadCompleted(net::URLRequest* request, int bytes_read) override; private: - class IOBufferWithByteBuffer; - void StartOnNetworkThread(); void GetStatusOnNetworkThread( const base::android::ScopedJavaGlobalRef<jobject>& jstatus_listener_ref)
diff --git a/components/cronet/android/io_buffer_with_byte_buffer.cc b/components/cronet/android/io_buffer_with_byte_buffer.cc new file mode 100644 index 0000000..e6be670 --- /dev/null +++ b/components/cronet/android/io_buffer_with_byte_buffer.cc
@@ -0,0 +1,27 @@ +// Copyright 2016 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/cronet/android/io_buffer_with_byte_buffer.h" + +#include "base/logging.h" + +namespace cronet { + +IOBufferWithByteBuffer::IOBufferWithByteBuffer( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& jbyte_buffer, + void* byte_buffer_data, + jint position, + jint limit) + : net::WrappedIOBuffer(static_cast<char*>(byte_buffer_data) + position), + byte_buffer_(env, jbyte_buffer), + initial_position_(position), + initial_limit_(limit) { + DCHECK(byte_buffer_data); + DCHECK_EQ(env->GetDirectBufferAddress(jbyte_buffer), byte_buffer_data); +} + +IOBufferWithByteBuffer::~IOBufferWithByteBuffer() {} + +} // namespace cronet
diff --git a/components/cronet/android/io_buffer_with_byte_buffer.h b/components/cronet/android/io_buffer_with_byte_buffer.h new file mode 100644 index 0000000..17cce93 --- /dev/null +++ b/components/cronet/android/io_buffer_with_byte_buffer.h
@@ -0,0 +1,51 @@ +// Copyright 2016 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_CRONET_ANDROID_IO_BUFFER_WITH_BYTE_BUFFER_H_ +#define COMPONENTS_CRONET_ANDROID_IO_BUFFER_WITH_BYTE_BUFFER_H_ + +#include <jni.h> + +#include "base/android/scoped_java_ref.h" +#include "net/base/io_buffer.h" + +namespace cronet { + +// net::WrappedIOBuffer subclass for a buffer owned by a Java ByteBuffer. Keeps +// the ByteBuffer alive until destroyed. Uses WrappedIOBuffer because data() is +// owned by the embedder. +class IOBufferWithByteBuffer : public net::WrappedIOBuffer { + public: + // Creates a buffer wrapping the Java ByteBuffer |jbyte_buffer|. + // |byte_buffer_data| points to the memory backed by the ByteBuffer, and + // |position| is the index of the first byte of data inside of the buffer. + // |limit| is the the index of the first element that should not be read or + // written, preserved to verify that buffer is not changed externally during + // networking operations. + IOBufferWithByteBuffer( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& jbyte_buffer, + void* byte_buffer_data, + jint position, + jint limit); + + jint initial_position() const { return initial_position_; } + jint initial_limit() const { return initial_limit_; } + + jobject byte_buffer() const { return byte_buffer_.obj(); } + + private: + ~IOBufferWithByteBuffer() override; + + base::android::ScopedJavaGlobalRef<jobject> byte_buffer_; + + const jint initial_position_; + const jint initial_limit_; + + DISALLOW_COPY_AND_ASSIGN(IOBufferWithByteBuffer); +}; + +} // namespace cronet + +#endif // COMPONENTS_CRONET_ANDROID_IO_BUFFER_WITH_BYTE_BUFFER_H_
diff --git a/components/cronet/android/java/src/org/chromium/net/CronetUrlRequest.java b/components/cronet/android/java/src/org/chromium/net/CronetUrlRequest.java index a969576..d332644 100644 --- a/components/cronet/android/java/src/org/chromium/net/CronetUrlRequest.java +++ b/components/cronet/android/java/src/org/chromium/net/CronetUrlRequest.java
@@ -54,13 +54,6 @@ private boolean mWaitingOnRedirect = false; @GuardedBy("mUrlRequestAdapterLock") private boolean mWaitingOnRead = false; - /* - * When a read call completes, should the ByteBuffer limit() be updated - * instead of the position(). This controls legacy read() behavior. - * TODO(pauljensen): remove when all callers of read() are switched over - * to calling readNew(). - */ - private boolean mLegacyReadByteBufferAdjustment = false; /* * Synchronize access to mUrlRequestAdapter, mStarted, mWaitingOnRedirect, @@ -101,35 +94,32 @@ private static final class HeadersList extends ArrayList<Map.Entry<String, String>> {} private final class OnReadCompletedRunnable implements Runnable { + // Buffer passed back from current invocation of onReadCompleted. ByteBuffer mByteBuffer; @Override public void run() { - if (isDone()) { - return; - } + // Null out mByteBuffer, to pass buffer ownership to callback or release if done. + ByteBuffer buffer = mByteBuffer; + mByteBuffer = null; + try { synchronized (mUrlRequestAdapterLock) { - if (mUrlRequestAdapter == 0) { + if (isDoneLocked()) { return; } mWaitingOnRead = true; } - // Null out mByteBuffer, out of paranoia. Has to be done before - // mCallback call, to avoid any race when there are multiple - // executor threads. - ByteBuffer buffer = mByteBuffer; - mByteBuffer = null; mCallback.onReadCompleted(CronetUrlRequest.this, mResponseInfo, buffer); } catch (Exception e) { - onListenerException(e); + onCallbackException(e); } } } - CronetUrlRequest(CronetUrlRequestContext requestContext, long urlRequestContextAdapter, - String url, int priority, UrlRequest.Callback callback, Executor executor, - Collection<Object> requestAnnotations, boolean metricsCollectionEnabled) { + CronetUrlRequest(CronetUrlRequestContext requestContext, String url, int priority, + UrlRequest.Callback callback, Executor executor, Collection<Object> requestAnnotations, + boolean metricsCollectionEnabled) { if (url == null) { throw new NullPointerException("URL is required"); } @@ -245,7 +235,7 @@ } mWaitingOnRedirect = false; - if (isDone()) { + if (isDoneLocked()) { return; } @@ -254,39 +244,6 @@ } @Override - public void read(ByteBuffer buffer) { - synchronized (mUrlRequestAdapterLock) { - if (buffer.position() >= buffer.capacity()) { - throw new IllegalArgumentException( - "ByteBuffer is already full."); - } - Preconditions.checkDirect(buffer); - - if (!mWaitingOnRead) { - throw new IllegalStateException("Unexpected read attempt."); - } - mWaitingOnRead = false; - mLegacyReadByteBufferAdjustment = true; - - if (isDone()) { - return; - } - - // Indicate buffer has no new data. This is primarily to make it - // clear the buffer has no data in the failure and completion cases. - buffer.limit(buffer.position()); - - if (!nativeReadData(mUrlRequestAdapter, buffer, buffer.position(), - buffer.capacity())) { - // Still waiting on read. This is just to have consistent - // behavior with the other error cases. - mWaitingOnRead = true; - throw new IllegalArgumentException("Unable to call native read"); - } - } - } - - @Override public void readNew(ByteBuffer buffer) { Preconditions.checkHasRemaining(buffer); Preconditions.checkDirect(buffer); @@ -295,9 +252,8 @@ throw new IllegalStateException("Unexpected read attempt."); } mWaitingOnRead = false; - mLegacyReadByteBufferAdjustment = false; - if (isDone()) { + if (isDoneLocked()) { return; } @@ -313,7 +269,7 @@ @Override public void cancel() { synchronized (mUrlRequestAdapterLock) { - if (isDone() || !mStarted) { + if (isDoneLocked() || !mStarted) { return; } destroyRequestAdapter(true); @@ -323,10 +279,15 @@ @Override public boolean isDone() { synchronized (mUrlRequestAdapterLock) { - return mStarted && mUrlRequestAdapter == 0; + return isDoneLocked(); } } + @GuardedBy("mUrlRequestAdapterLock") + private boolean isDoneLocked() { + return mStarted && mUrlRequestAdapter == 0; + } + @Override public void disableCache() { checkNotStarted(); @@ -371,8 +332,8 @@ Log.e(CronetUrlRequestContext.LOG_TAG, "Exception posting task to executor", failException); // If posting a task throws an exception, then there is no choice - // but to cancel the request. - cancel(); + // but to destroy the request without invoking the callback. + destroyRequestAdapter(false); } } @@ -393,18 +354,13 @@ } } - private UrlResponseInfo prepareResponseInfoOnNetworkThread( - int httpStatusCode, String[] headers) { - long urlRequestAdapter; + private UrlResponseInfo prepareResponseInfoOnNetworkThread(int httpStatusCode, + String httpStatusText, String[] headers, boolean wasCached, String negotiatedProtocol, + String proxyServer) { synchronized (mUrlRequestAdapterLock) { if (mUrlRequestAdapter == 0) { return null; } - // This method is running on network thread, so even if - // mUrlRequestAdapter is set to 0 from another thread the actual - // deletion of the adapter is posted to network thread, so it is - // safe to preserve and use urlRequestAdapter outside the lock. - urlRequestAdapter = mUrlRequestAdapter; } HeadersList headersList = new HeadersList(); @@ -413,17 +369,15 @@ headers[i], headers[i + 1])); } - UrlResponseInfo responseInfo = new UrlResponseInfo(new ArrayList<String>(mUrlChain), - httpStatusCode, nativeGetHttpStatusText(urlRequestAdapter), headersList, - nativeGetWasCached(urlRequestAdapter), - nativeGetNegotiatedProtocol(urlRequestAdapter), - nativeGetProxyServer(urlRequestAdapter)); + UrlResponseInfo responseInfo = + new UrlResponseInfo(new ArrayList<String>(mUrlChain), httpStatusCode, + httpStatusText, headersList, wasCached, negotiatedProtocol, proxyServer); return responseInfo; } private void checkNotStarted() { synchronized (mUrlRequestAdapterLock) { - if (mStarted || isDone()) { + if (mStarted || isDoneLocked()) { throw new IllegalStateException("Request is already started."); } } @@ -448,18 +402,18 @@ } /** - * If listener method throws an exception, request gets canceled + * If callback method throws an exception, request gets canceled * and exception is reported via onFailed listener callback. * Only called on the Executor. */ - private void onListenerException(Exception e) { + private void onCallbackException(Exception e) { UrlRequestException requestError = new UrlRequestException("Exception received from UrlRequest.Callback", e); Log.e(CronetUrlRequestContext.LOG_TAG, "Exception in CalledByNative method", e); // Do not call into listener if request is finished. synchronized (mUrlRequestAdapterLock) { - if (isDone()) { + if (isDoneLocked()) { return; } destroyRequestAdapter(false); @@ -490,7 +444,7 @@ @Override public void run() { synchronized (mUrlRequestAdapterLock) { - if (isDone()) { + if (isDoneLocked()) { return; } destroyRequestAdapter(false); @@ -525,10 +479,11 @@ */ @SuppressWarnings("unused") @CalledByNative - private void onRedirectReceived(final String newLocation, int httpStatusCode, String[] headers, - long receivedBytesCount) { - final UrlResponseInfo responseInfo = - prepareResponseInfoOnNetworkThread(httpStatusCode, headers); + private void onRedirectReceived(final String newLocation, int httpStatusCode, + String httpStatusText, String[] headers, boolean wasCached, String negotiatedProtocol, + String proxyServer, long receivedBytesCount) { + final UrlResponseInfo responseInfo = prepareResponseInfoOnNetworkThread(httpStatusCode, + httpStatusText, headers, wasCached, negotiatedProtocol, proxyServer); mReceivedBytesCountFromRedirects += receivedBytesCount; responseInfo.setReceivedBytesCount(mReceivedBytesCountFromRedirects); @@ -539,7 +494,7 @@ @Override public void run() { synchronized (mUrlRequestAdapterLock) { - if (isDone()) { + if (isDoneLocked()) { return; } mWaitingOnRedirect = true; @@ -548,7 +503,7 @@ try { mCallback.onRedirectReceived(CronetUrlRequest.this, responseInfo, newLocation); } catch (Exception e) { - onListenerException(e); + onCallbackException(e); } } }; @@ -561,16 +516,18 @@ */ @SuppressWarnings("unused") @CalledByNative - private void onResponseStarted(int httpStatusCode, String[] headers) { + private void onResponseStarted(int httpStatusCode, String httpStatusText, String[] headers, + boolean wasCached, String negotiatedProtocol, String proxyServer) { if (mRequestMetricsAccumulator != null) { mRequestMetricsAccumulator.onResponseStarted(); } - mResponseInfo = prepareResponseInfoOnNetworkThread(httpStatusCode, headers); + mResponseInfo = prepareResponseInfoOnNetworkThread(httpStatusCode, httpStatusText, headers, + wasCached, negotiatedProtocol, proxyServer); Runnable task = new Runnable() { @Override public void run() { synchronized (mUrlRequestAdapterLock) { - if (isDone()) { + if (isDoneLocked()) { return; } mWaitingOnRead = true; @@ -579,7 +536,7 @@ try { mCallback.onResponseStarted(CronetUrlRequest.this, mResponseInfo); } catch (Exception e) { - onListenerException(e); + onCallbackException(e); } } }; @@ -599,14 +556,17 @@ * @param initialPosition Original position of byteBuffer when passed to * read(). Used as a minimal check that the buffer hasn't been * modified while reading from the network. + * @param initialLimit Original limit of byteBuffer when passed to + * read(). Used as a minimal check that the buffer hasn't been + * modified while reading from the network. * @param receivedBytesCount number of bytes received. */ @SuppressWarnings("unused") @CalledByNative private void onReadCompleted(final ByteBuffer byteBuffer, int bytesRead, int initialPosition, - long receivedBytesCount) { + int initialLimit, long receivedBytesCount) { mResponseInfo.setReceivedBytesCount(mReceivedBytesCountFromRedirects + receivedBytesCount); - if (byteBuffer.position() != initialPosition) { + if (byteBuffer.position() != initialPosition || byteBuffer.limit() != initialLimit) { failWithException(new UrlRequestException( "ByteBuffer modified externally during read", null)); return; @@ -614,11 +574,7 @@ if (mOnReadCompletedTask == null) { mOnReadCompletedTask = new OnReadCompletedRunnable(); } - if (mLegacyReadByteBufferAdjustment) { - byteBuffer.limit(initialPosition + bytesRead); - } else { - byteBuffer.position(initialPosition + bytesRead); - } + byteBuffer.position(initialPosition + bytesRead); mOnReadCompletedTask.mByteBuffer = byteBuffer; postTaskToExecutor(mOnReadCompletedTask); } @@ -637,7 +593,7 @@ @Override public void run() { synchronized (mUrlRequestAdapterLock) { - if (isDone()) { + if (isDoneLocked()) { return; } // Destroy adapter first, so request context could be shut @@ -778,17 +734,5 @@ private native void nativeDestroy(long nativePtr, boolean sendOnCanceled); @NativeClassQualifiedName("CronetURLRequestAdapter") - private native String nativeGetHttpStatusText(long nativePtr); - - @NativeClassQualifiedName("CronetURLRequestAdapter") - private native String nativeGetNegotiatedProtocol(long nativePtr); - - @NativeClassQualifiedName("CronetURLRequestAdapter") - private native String nativeGetProxyServer(long nativePtr); - - @NativeClassQualifiedName("CronetURLRequestAdapter") private native void nativeGetStatus(long nativePtr, UrlRequest.StatusListener listener); - - @NativeClassQualifiedName("CronetURLRequestAdapter") - private native boolean nativeGetWasCached(long nativePtr); }
diff --git a/components/cronet/android/java/src/org/chromium/net/CronetUrlRequestContext.java b/components/cronet/android/java/src/org/chromium/net/CronetUrlRequestContext.java index cf6dd24..4d935b78 100644 --- a/components/cronet/android/java/src/org/chromium/net/CronetUrlRequestContext.java +++ b/components/cronet/android/java/src/org/chromium/net/CronetUrlRequestContext.java
@@ -134,8 +134,8 @@ metricsCollectionEnabled = !mFinishedListenerList.isEmpty(); } } - return new CronetUrlRequest(this, mUrlRequestContextAdapter, url, priority, callback, - executor, requestAnnotations, metricsCollectionEnabled); + return new CronetUrlRequest(this, url, priority, callback, executor, requestAnnotations, + metricsCollectionEnabled); } }
diff --git a/components/cronet/android/sample/src/org/chromium/cronet_sample_apk/CronetSampleActivity.java b/components/cronet/android/sample/src/org/chromium/cronet_sample_apk/CronetSampleActivity.java index 639bb6c..e32d829 100644 --- a/components/cronet/android/sample/src/org/chromium/cronet_sample_apk/CronetSampleActivity.java +++ b/components/cronet/android/sample/src/org/chromium/cronet_sample_apk/CronetSampleActivity.java
@@ -58,12 +58,13 @@ Log.i(TAG, "****** Response Started ******"); Log.i(TAG, "*** Headers Are *** %s", info.getAllHeaders()); - request.read(ByteBuffer.allocateDirect(32 * 1024)); + request.readNew(ByteBuffer.allocateDirect(32 * 1024)); } @Override public void onReadCompleted( UrlRequest request, UrlResponseInfo info, ByteBuffer byteBuffer) { + byteBuffer.flip(); Log.i(TAG, "****** onReadCompleted ******%s", byteBuffer); try { @@ -71,8 +72,8 @@ } catch (IOException e) { Log.i(TAG, "IOException during ByteBuffer read. Details: ", e); } - byteBuffer.position(0); - request.read(byteBuffer); + byteBuffer.clear(); + request.readNew(byteBuffer); } @Override
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java index 58b9f59..f426f20 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java
@@ -595,95 +595,6 @@ } /** - * Checks that the buffer is updated correctly, when starting at an offset, - * when using legacy read() API. - */ - @SmallTest - @Feature({"Cronet"}) - @SuppressWarnings("deprecation") - public void testLegacySimpleGetBufferUpdates() throws Exception { - TestUrlRequestCallback callback = new TestUrlRequestCallback(); - callback.mLegacyReadByteBufferAdjustment = true; - callback.setAutoAdvance(false); - // Since the default method is "GET", the expected response body is also - // "GET". - UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.getEchoMethodURL(), - callback, callback.getExecutor(), mTestFramework.mCronetEngine); - UrlRequest urlRequest = builder.build(); - urlRequest.start(); - callback.waitForNextStep(); - - ByteBuffer readBuffer = ByteBuffer.allocateDirect(5); - readBuffer.put("FOR".getBytes()); - assertEquals(3, readBuffer.position()); - - // Read first two characters of the response ("GE"). It's theoretically - // possible to need one read per character, though in practice, - // shouldn't happen. - while (callback.mResponseAsString.length() < 2) { - assertFalse(callback.isDone()); - urlRequest.read(readBuffer); - callback.waitForNextStep(); - } - - // Make sure the two characters were read. - assertEquals("GE", callback.mResponseAsString); - - // Check the contents of the entire buffer. The first 3 characters - // should not have been changed, and the last two should be the first - // two characters from the response. - assertEquals("FORGE", bufferContentsToString(readBuffer, 0, 5)); - // The limit should now be 5. Position could be either 3 or 4. - assertEquals(5, readBuffer.limit()); - - assertEquals(ResponseStep.ON_READ_COMPLETED, callback.mResponseStep); - - // Start reading from position 3. Since the only remaining character - // from the response is a "T", when the read completes, the buffer - // should contain "FORTE", with a position() of 3 and a limit() of 4. - readBuffer.position(3); - urlRequest.read(readBuffer); - callback.waitForNextStep(); - - // Make sure all three characters of the response have now been read. - assertEquals("GET", callback.mResponseAsString); - - // Check the entire contents of the buffer. Only the third character - // should have been modified. - assertEquals("FORTE", bufferContentsToString(readBuffer, 0, 5)); - - // Make sure position and limit were updated correctly. - assertEquals(3, readBuffer.position()); - assertEquals(4, readBuffer.limit()); - - assertEquals(ResponseStep.ON_READ_COMPLETED, callback.mResponseStep); - - // One more read attempt. The request should complete. - readBuffer.position(1); - readBuffer.limit(5); - urlRequest.read(readBuffer); - callback.waitForNextStep(); - - assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); - assertEquals("GET", callback.mResponseAsString); - checkResponseInfo(callback.mResponseInfo, NativeTestServer.getEchoMethodURL(), 200, "OK"); - - // Check that buffer contents were not modified. - assertEquals("FORTE", bufferContentsToString(readBuffer, 0, 5)); - - // Buffer limit should be set to original position, and position should - // not have been modified, since nothing was read. - assertEquals(1, readBuffer.position()); - assertEquals(1, readBuffer.limit()); - - assertEquals(ResponseStep.ON_SUCCEEDED, callback.mResponseStep); - - // Make sure there are no other pending messages, which would trigger - // asserts in TestUrlRequestCallback. - testSimpleGet(); - } - - /** * Checks that the buffer is updated correctly, when starting at an offset. */ @SmallTest
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/TestUrlRequestCallback.java b/components/cronet/android/test/javatests/src/org/chromium/net/TestUrlRequestCallback.java index 8894813a..1d794df6 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/TestUrlRequestCallback.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/TestUrlRequestCallback.java
@@ -40,11 +40,6 @@ public int mHttpResponseDataLength = 0; public String mResponseAsString = ""; - // Expect legacy read() API to be used on UrlRequest. - // TODO(pauljensen): Remove when all callers of UrlRequest.read() are - // transitioned to UrlRequest.readNew(); - public boolean mLegacyReadByteBufferAdjustment = false; - private static final int READ_BUFFER_SIZE = 32 * 1024; // When false, the consumer is responsible for all calls into the request @@ -181,23 +176,14 @@ mResponseStep = ResponseStep.ON_READ_COMPLETED; final byte[] lastDataReceivedAsBytes; - if (mLegacyReadByteBufferAdjustment) { - // Make a slice of ByteBuffer, so can read from it without affecting - // position, which allows tests to check the state of the buffer. - ByteBuffer slice = byteBuffer.slice(); - mHttpResponseDataLength += slice.remaining(); - lastDataReceivedAsBytes = new byte[slice.remaining()]; - slice.get(lastDataReceivedAsBytes); - } else { - final int bytesRead = byteBuffer.position() - mBufferPositionBeforeRead; - mHttpResponseDataLength += bytesRead; - lastDataReceivedAsBytes = new byte[bytesRead]; - // Rewind |byteBuffer.position()| to pre-read() position. - byteBuffer.position(mBufferPositionBeforeRead); - // This restores |byteBuffer.position()| to its value on entrance to - // this function. - byteBuffer.get(lastDataReceivedAsBytes); - } + final int bytesRead = byteBuffer.position() - mBufferPositionBeforeRead; + mHttpResponseDataLength += bytesRead; + lastDataReceivedAsBytes = new byte[bytesRead]; + // Rewind |byteBuffer.position()| to pre-read() position. + byteBuffer.position(mBufferPositionBeforeRead); + // This restores |byteBuffer.position()| to its value on entrance to + // this function. + byteBuffer.get(lastDataReceivedAsBytes); mResponseAsString += new String(lastDataReceivedAsBytes); if (maybeThrowCancelOrPause(request)) {
diff --git a/components/cronet/cronet_static.gypi b/components/cronet/cronet_static.gypi index aff6ce4..6521926 100644 --- a/components/cronet/cronet_static.gypi +++ b/components/cronet/cronet_static.gypi
@@ -32,6 +32,8 @@ 'android/cronet_url_request_adapter.h', 'android/cronet_url_request_context_adapter.cc', 'android/cronet_url_request_context_adapter.h', + 'android/io_buffer_with_byte_buffer.cc', + 'android/io_buffer_with_byte_buffer.h', 'android/url_request_adapter.cc', 'android/url_request_adapter.h', 'android/url_request_context_adapter.cc',
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data_unittest.cc index 691e2c4..e6b4dc8 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data_unittest.cc +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data_unittest.cc
@@ -109,8 +109,8 @@ request_context->GetNetworkSessionParams(); EXPECT_FALSE(http_params->enable_spdy31); EXPECT_FALSE(http_params->enable_http2); - EXPECT_TRUE(http_params->parse_alternative_services); - EXPECT_TRUE(http_params->enable_alternative_service_with_different_host); + EXPECT_FALSE(http_params->parse_alternative_services); + EXPECT_FALSE(http_params->enable_alternative_service_with_different_host); EXPECT_FALSE(http_params->enable_quic); // Check that io_data creates an interceptor. Such an interceptor is
diff --git a/components/data_usage/android/BUILD.gn b/components/data_usage/android/BUILD.gn index f3d70da..a664d636 100644 --- a/components/data_usage/android/BUILD.gn +++ b/components/data_usage/android/BUILD.gn
@@ -10,6 +10,7 @@ deps = [ "//base", "//components/data_usage/core", + "//components/variations", "//net", "//url", ]
diff --git a/components/data_usage/android/DEPS b/components/data_usage/android/DEPS index 75ebc8b4..fec8465 100644 --- a/components/data_usage/android/DEPS +++ b/components/data_usage/android/DEPS
@@ -1,5 +1,6 @@ include_rules = [ "+components/data_usage/core", + "+components/variations", "+net", "+url", ]
diff --git a/components/data_usage/android/traffic_stats_amortizer.cc b/components/data_usage/android/traffic_stats_amortizer.cc index da9a4b9..3acec99 100644 --- a/components/data_usage/android/traffic_stats_amortizer.cc +++ b/components/data_usage/android/traffic_stats_amortizer.cc
@@ -6,14 +6,18 @@ #include <algorithm> // For std::min. #include <cmath> // For std::modf. +#include <set> #include <utility> #include "base/location.h" +#include "base/metrics/field_trial.h" #include "base/metrics/histogram_base.h" #include "base/metrics/histogram_macros.h" +#include "base/strings/string_number_conversions.h" #include "base/time/default_tick_clock.h" #include "base/timer/timer.h" #include "components/data_usage/core/data_use.h" +#include "components/variations/variations_associated_data.h" #include "net/android/traffic_stats.h" namespace data_usage { @@ -26,21 +30,54 @@ DataUseAmortizer::AmortizationCompleteCallback>> DataUseBuffer; +// Name of the field trial. +const char kExternalDataUseObserverFieldTrial[] = "ExternalDataUseObserver"; + // The delay between receiving DataUse and querying TrafficStats byte counts for // amortization. -// TODO(sclittle): Control this with a field trial parameter. const int64_t kDefaultTrafficStatsQueryDelayMs = 50; // The longest amount of time that an amortization run can be delayed for. -// TODO(sclittle): Control this with a field trial parameter. const int64_t kDefaultMaxAmortizationDelayMs = 500; // The maximum allowed size of the DataUse buffer. If the buffer ever exceeds // this size, then DataUse will be amortized immediately and the buffer will be // flushed. -// TODO(sclittle): Control this with a field trial parameter. const size_t kDefaultMaxDataUseBufferSize = 128; +base::TimeDelta GetTrafficStatsQueryDelay() { + int64_t duration_ms = kDefaultTrafficStatsQueryDelayMs; + std::string variation_value = variations::GetVariationParamValue( + kExternalDataUseObserverFieldTrial, "traffic_stats_query_delay_ms"); + if (!variation_value.empty() && + base::StringToInt64(variation_value, &duration_ms) && duration_ms >= 0) { + return base::TimeDelta::FromMilliseconds(duration_ms); + } + return base::TimeDelta::FromMilliseconds(kDefaultTrafficStatsQueryDelayMs); +} + +base::TimeDelta GetMaxAmortizationDelay() { + int64_t duration_ms = kDefaultMaxAmortizationDelayMs; + std::string variation_value = variations::GetVariationParamValue( + kExternalDataUseObserverFieldTrial, "max_amortization_delay_ms"); + if (!variation_value.empty() && + base::StringToInt64(variation_value, &duration_ms) && duration_ms >= 0) { + return base::TimeDelta::FromMilliseconds(duration_ms); + } + return base::TimeDelta::FromMilliseconds(kDefaultMaxAmortizationDelayMs); +} + +size_t GetMaxDataUseBufferSize() { + size_t max_buffer_size = kDefaultMaxDataUseBufferSize; + std::string variation_value = variations::GetVariationParamValue( + kExternalDataUseObserverFieldTrial, "max_data_use_buffer_size"); + if (!variation_value.empty() && + base::StringToSizeT(variation_value, &max_buffer_size)) { + return max_buffer_size; + } + return kDefaultMaxDataUseBufferSize; +} + // Returns |byte_count| as a histogram sample capped at the maximum histogram // sample value that's suitable for being recorded without overflowing. base::HistogramBase::Sample GetByteCountAsHistogramSample(int64_t byte_count) { @@ -127,15 +164,23 @@ return sum; } +void RecordConcurrentTabsHistogram(const DataUseBuffer& data_use_buffer) { + std::set<int32_t> unique_tabs; + for (const auto& data_use_buffer_pair : data_use_buffer) + unique_tabs.insert(data_use_buffer_pair.first->tab_id); + UMA_HISTOGRAM_COUNTS_100("TrafficStatsAmortizer.ConcurrentTabs", + unique_tabs.size()); +} + } // namespace TrafficStatsAmortizer::TrafficStatsAmortizer() : TrafficStatsAmortizer( scoped_ptr<base::TickClock>(new base::DefaultTickClock()), scoped_ptr<base::Timer>(new base::Timer(false, false)), - base::TimeDelta::FromMilliseconds(kDefaultTrafficStatsQueryDelayMs), - base::TimeDelta::FromMilliseconds(kDefaultMaxAmortizationDelayMs), - kDefaultMaxDataUseBufferSize) {} + GetTrafficStatsQueryDelay(), + GetMaxAmortizationDelay(), + GetMaxDataUseBufferSize()) {} TrafficStatsAmortizer::~TrafficStatsAmortizer() {} @@ -296,6 +341,7 @@ UMA_HISTOGRAM_COUNTS( "TrafficStatsAmortizer.PostAmortizationRunDataUseBytes.Rx", GetByteCountAsHistogramSample(GetTotalRxBytes(buffered_data_use_))); + RecordConcurrentTabsHistogram(buffered_data_use_); } UMA_HISTOGRAM_TIMES(
diff --git a/components/data_usage/android/traffic_stats_amortizer_unittest.cc b/components/data_usage/android/traffic_stats_amortizer_unittest.cc index 90d87d3..e949b40 100644 --- a/components/data_usage/android/traffic_stats_amortizer_unittest.cc +++ b/components/data_usage/android/traffic_stats_amortizer_unittest.cc
@@ -57,6 +57,7 @@ "TrafficStatsAmortizer.AmortizationDelay"; const char kBufferSizeOnFlushHistogram[] = "TrafficStatsAmortizer.BufferSizeOnFlush"; +const char kConcurrentTabs[] = "TrafficStatsAmortizer.ConcurrentTabs"; // The maximum sample value that can be recorded in a histogram. const base::HistogramBase::Sample kMaxRecordableSample = @@ -68,16 +69,34 @@ return static_cast<base::HistogramBase::Sample>(delay.InMilliseconds()); } +// Synthesizes a fake scoped_ptr<DataUse> with the given |url|, |tab_id|, +// |tx_bytes| and |rx_bytes|, using arbitrary values for all other fields. +scoped_ptr<DataUse> CreateDataUseWithURLAndTab(const GURL& url, + int32_t tab_id, + int64_t tx_bytes, + int64_t rx_bytes) { + return scoped_ptr<DataUse>( + new DataUse(url, base::TimeTicks() /* request_start */, + GURL("http://examplefirstparty.com"), tab_id, + net::NetworkChangeNotifier::CONNECTION_2G, "example_mcc_mnc", + tx_bytes, rx_bytes)); +} + // Synthesizes a fake scoped_ptr<DataUse> with the given |url|, |tx_bytes| and // |rx_bytes|, using arbitrary values for all other fields. scoped_ptr<DataUse> CreateDataUseWithURL(const GURL& url, int64_t tx_bytes, int64_t rx_bytes) { - return scoped_ptr<DataUse>( - new DataUse(url, base::TimeTicks() /* request_start */, - GURL("http://examplefirstparty.com"), 10 /* tab_id */, - net::NetworkChangeNotifier::CONNECTION_2G, "example_mcc_mnc", - tx_bytes, rx_bytes)); + return CreateDataUseWithURLAndTab(url, 10, tx_bytes, rx_bytes); +} + +// Synthesizes a fake scoped_ptr<DataUse> with the given |tab_id|, |tx_bytes| +// and |rx_bytes|, using arbitrary values for all other fields. +scoped_ptr<DataUse> CreateDataUseWithTab(int32_t tab_id, + int64_t tx_bytes, + int64_t rx_bytes) { + return CreateDataUseWithURLAndTab(GURL("http://example.com"), tab_id, + tx_bytes, rx_bytes); } // Synthesizes a fake scoped_ptr<DataUse> with the given |tx_bytes| and @@ -296,6 +315,7 @@ GetDelaySample(kTrafficStatsQueryDelay), 1); histogram_tester.ExpectUniqueSample(kBufferSizeOnFlushHistogram, 1, 1); + histogram_tester.ExpectUniqueSample(kConcurrentTabs, 1, 1); } } @@ -325,6 +345,7 @@ GetDelaySample(kTrafficStatsQueryDelay), 1); histogram_tester.ExpectUniqueSample(kBufferSizeOnFlushHistogram, 2, 1); + histogram_tester.ExpectUniqueSample(kConcurrentTabs, 1, 1); } // Simulate the second amortization run. @@ -362,6 +383,7 @@ GetDelaySample(kTrafficStatsQueryDelay + kTrafficStatsQueryDelay / 2), 1); histogram_tester.ExpectUniqueSample(kBufferSizeOnFlushHistogram, 2, 1); + histogram_tester.ExpectUniqueSample(kConcurrentTabs, 1, 1); } } @@ -384,6 +406,7 @@ histogram_tester.ExpectUniqueSample( kAmortizationDelayHistogram, GetDelaySample(kTrafficStatsQueryDelay), 1); histogram_tester.ExpectUniqueSample(kBufferSizeOnFlushHistogram, 1, 1); + histogram_tester.ExpectUniqueSample(kConcurrentTabs, 1, 1); } TEST_F(TrafficStatsAmortizerTest, AmortizeWithNegativeOverhead) { @@ -404,6 +427,7 @@ histogram_tester.ExpectUniqueSample( kAmortizationDelayHistogram, GetDelaySample(kTrafficStatsQueryDelay), 1); histogram_tester.ExpectUniqueSample(kBufferSizeOnFlushHistogram, 1, 1); + histogram_tester.ExpectUniqueSample(kConcurrentTabs, 1, 1); } TEST_F(TrafficStatsAmortizerTest, AmortizeWithMaxIntByteCounts) { @@ -431,6 +455,7 @@ histogram_tester.ExpectUniqueSample( kAmortizationDelayHistogram, GetDelaySample(kTrafficStatsQueryDelay), 1); histogram_tester.ExpectUniqueSample(kBufferSizeOnFlushHistogram, 1, 1); + histogram_tester.ExpectUniqueSample(kConcurrentTabs, 1, 1); } TEST_F(TrafficStatsAmortizerTest, AmortizeWithMaxIntScaleFactor) { @@ -456,6 +481,7 @@ histogram_tester.ExpectUniqueSample( kAmortizationDelayHistogram, GetDelaySample(kTrafficStatsQueryDelay), 1); histogram_tester.ExpectUniqueSample(kBufferSizeOnFlushHistogram, 1, 1); + histogram_tester.ExpectUniqueSample(kConcurrentTabs, 1, 1); } TEST_F(TrafficStatsAmortizerTest, AmortizeWithZeroScaleFactor) { @@ -480,6 +506,7 @@ histogram_tester.ExpectUniqueSample( kAmortizationDelayHistogram, GetDelaySample(kTrafficStatsQueryDelay), 1); histogram_tester.ExpectUniqueSample(kBufferSizeOnFlushHistogram, 1, 1); + histogram_tester.ExpectUniqueSample(kConcurrentTabs, 1, 1); } TEST_F(TrafficStatsAmortizerTest, AmortizeWithZeroPreAmortizationBytes) { @@ -505,6 +532,7 @@ GetDelaySample(kTrafficStatsQueryDelay), 1); histogram_tester.ExpectUniqueSample(kBufferSizeOnFlushHistogram, 1, 1); + histogram_tester.ExpectUniqueSample(kConcurrentTabs, 1, 1); } { @@ -526,6 +554,7 @@ GetDelaySample(kTrafficStatsQueryDelay), 1); histogram_tester.ExpectUniqueSample(kBufferSizeOnFlushHistogram, 1, 1); + histogram_tester.ExpectUniqueSample(kConcurrentTabs, 1, 1); } } @@ -552,6 +581,7 @@ GetDelaySample(kTrafficStatsQueryDelay), 1); histogram_tester.ExpectUniqueSample(kBufferSizeOnFlushHistogram, 1, 1); + histogram_tester.ExpectUniqueSample(kConcurrentTabs, 1, 1); } { @@ -572,6 +602,7 @@ GetDelaySample(kTrafficStatsQueryDelay), 1); histogram_tester.ExpectUniqueSample(kBufferSizeOnFlushHistogram, 1, 1); + histogram_tester.ExpectUniqueSample(kConcurrentTabs, 1, 1); } } @@ -598,6 +629,7 @@ GetDelaySample(kTrafficStatsQueryDelay), 1); histogram_tester.ExpectUniqueSample(kBufferSizeOnFlushHistogram, 1, 1); + histogram_tester.ExpectUniqueSample(kConcurrentTabs, 1, 1); } { @@ -618,6 +650,7 @@ GetDelaySample(kTrafficStatsQueryDelay), 1); histogram_tester.ExpectUniqueSample(kBufferSizeOnFlushHistogram, 1, 1); + histogram_tester.ExpectUniqueSample(kConcurrentTabs, 1, 1); } } @@ -656,6 +689,7 @@ histogram_tester.ExpectUniqueSample(kAmortizationDelayHistogram, GetDelaySample(kMaxAmortizationDelay), 1); histogram_tester.ExpectUniqueSample(kBufferSizeOnFlushHistogram, 1, 1); + histogram_tester.ExpectUniqueSample(kConcurrentTabs, 1, 1); } TEST_F(TrafficStatsAmortizerTest, AmortizeAtMaxBufferSize) { @@ -687,6 +721,7 @@ histogram_tester.ExpectUniqueSample(kAmortizationDelayHistogram, 0, 1); histogram_tester.ExpectUniqueSample(kBufferSizeOnFlushHistogram, kExpectedBufSize, 1); + histogram_tester.ExpectUniqueSample(kConcurrentTabs, 1, 1); } TEST_F(TrafficStatsAmortizerTest, AmortizeCombinedDataUse) { @@ -752,6 +787,50 @@ histogram_tester.ExpectUniqueSample( kAmortizationDelayHistogram, GetDelaySample(kTrafficStatsQueryDelay), 1); histogram_tester.ExpectUniqueSample(kBufferSizeOnFlushHistogram, 4, 1); + histogram_tester.ExpectUniqueSample(kConcurrentTabs, 1, 1); +} + +TEST_F(TrafficStatsAmortizerTest, ConcurrentTabsHistogram) { + SkipFirstAmortizationRun(); + + { + // Test data usage reported multiple times for two tabs. + base::HistogramTester histogram_tester; + amortizer()->SetNextTrafficStats(true, 0, 0); + amortizer()->AmortizeDataUse( + CreateDataUseWithTab(1, 50, 500), + ExpectDataUseCallback(CreateDataUseWithTab(1, 100, 1000))); + amortizer()->AmortizeDataUse( + CreateDataUseWithTab(2, 100, 1000), + ExpectDataUseCallback(CreateDataUseWithTab(2, 200, 2000))); + amortizer()->AmortizeDataUse( + CreateDataUseWithTab(1, 50, 500), + ExpectDataUseCallback(CreateDataUseWithTab(1, 100, 1000))); + amortizer()->AmortizeDataUse( + CreateDataUseWithTab(2, 100, 1000), + ExpectDataUseCallback(CreateDataUseWithTab(2, 200, 2000))); + amortizer()->SetNextTrafficStats(true, 600, 6000); + AdvanceTime(kTrafficStatsQueryDelay); + histogram_tester.ExpectUniqueSample(kConcurrentTabs, 2, 1); + histogram_tester.ExpectUniqueSample(kPreAmortizationTxHistogram, 300, 1); + histogram_tester.ExpectUniqueSample(kPreAmortizationRxHistogram, 3000, 1); + histogram_tester.ExpectUniqueSample(kPostAmortizationTxHistogram, 600, 1); + histogram_tester.ExpectUniqueSample(kPostAmortizationRxHistogram, 6000, 1); + } + + // Test data usage for 1-5 tabs. + for (int32_t total_tabs = 1; total_tabs <= 5; ++total_tabs) { + base::HistogramTester histogram_tester; + + for (int32_t i = 1; i <= total_tabs; ++i) { + amortizer()->AmortizeDataUse( + CreateDataUseWithTab(i, 100, 1000), + ExpectDataUseCallback(CreateDataUseWithTab(i, 200, 2000))); + } + amortizer()->AddTrafficStats(total_tabs * 200, total_tabs * 2000); + AdvanceTime(kTrafficStatsQueryDelay); + histogram_tester.ExpectUniqueSample(kConcurrentTabs, total_tabs, 1); + } } } // namespace
diff --git a/components/devtools_service/devtools_service_delegate.cc b/components/devtools_service/devtools_service_delegate.cc index d4384cc..9e3dc5ff 100644 --- a/components/devtools_service/devtools_service_delegate.cc +++ b/components/devtools_service/devtools_service_delegate.cc
@@ -39,12 +39,12 @@ } bool DevToolsServiceDelegate::AcceptConnection(mojo::Connection* connection) { - connection->AddService<DevToolsRegistry>(this); + connection->AddInterface<DevToolsRegistry>(this); // DevToolsCoordinator is a privileged interface and only allowed for the // shell. if (IsShell(GURL(connection->GetRemoteApplicationURL()))) - connection->AddService<DevToolsCoordinator>(this); + connection->AddInterface<DevToolsCoordinator>(this); return true; }
diff --git a/components/domain_reliability.gypi b/components/domain_reliability.gypi index b35e0335..94eb5bc2 100644 --- a/components/domain_reliability.gypi +++ b/components/domain_reliability.gypi
@@ -44,6 +44,8 @@ 'domain_reliability/google_configs.h', 'domain_reliability/monitor.cc', 'domain_reliability/monitor.h', + 'domain_reliability/quic_error_mapping.cc', + 'domain_reliability/quic_error_mapping.h', 'domain_reliability/scheduler.cc', 'domain_reliability/scheduler.h', 'domain_reliability/service.cc',
diff --git a/components/domain_reliability/BUILD.gn b/components/domain_reliability/BUILD.gn index aad15db3..1a1efbc 100644 --- a/components/domain_reliability/BUILD.gn +++ b/components/domain_reliability/BUILD.gn
@@ -59,6 +59,8 @@ "google_configs.h", "monitor.cc", "monitor.h", + "quic_error_mapping.cc", + "quic_error_mapping.h", "scheduler.cc", "scheduler.h", "service.cc",
diff --git a/components/domain_reliability/OWNERS b/components/domain_reliability/OWNERS index 1b1b256..aa977fd75 100644 --- a/components/domain_reliability/OWNERS +++ b/components/domain_reliability/OWNERS
@@ -1,3 +1,6 @@ davidben@chromium.org rdsmith@chromium.org ttuttle@chromium.org + +per-file quic_error_mapping*=rtc@chromium.org +per-file quic_error_mapping*=rtenneti@chromium.org
diff --git a/components/domain_reliability/monitor.cc b/components/domain_reliability/monitor.cc index b6337ef..f60316d3 100644 --- a/components/domain_reliability/monitor.cc +++ b/components/domain_reliability/monitor.cc
@@ -13,6 +13,7 @@ #include "base/task_runner.h" #include "components/domain_reliability/baked_in_configs.h" #include "components/domain_reliability/google_configs.h" +#include "components/domain_reliability/quic_error_mapping.h" #include "net/base/ip_endpoint.h" #include "net/base/load_flags.h" #include "net/base/net_errors.h"
diff --git a/components/domain_reliability/quic_error_mapping.cc b/components/domain_reliability/quic_error_mapping.cc new file mode 100644 index 0000000..2baafa0 --- /dev/null +++ b/components/domain_reliability/quic_error_mapping.cc
@@ -0,0 +1,243 @@ +// Copyright 2016 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/domain_reliability/quic_error_mapping.h" + +namespace domain_reliability { + +namespace { + +const struct QuicErrorMapping { + net::QuicErrorCode quic_error; + const char* beacon_quic_error; +} kQuicErrorMap[] = { + // Connection has reached an invalid state. + { net::QUIC_INTERNAL_ERROR, "quic.internal_error" }, + // There were data frames after the a fin or reset. + { net::QUIC_STREAM_DATA_AFTER_TERMINATION, + "quic.stream_data.after_termination" }, + // Control frame is malformed. + { net::QUIC_INVALID_PACKET_HEADER, "quic.invalid.packet_header" }, + // Frame data is malformed. + { net::QUIC_INVALID_FRAME_DATA, "quic.invalid_frame_data" }, + // The packet contained no payload. + { net::QUIC_MISSING_PAYLOAD, "quic.missing.payload" }, + // FEC data is malformed. + { net::QUIC_INVALID_FEC_DATA, "quic.invalid.fec_data" }, + // STREAM frame data is malformed. + { net::QUIC_INVALID_STREAM_DATA, "quic.invalid.stream_data" }, + // STREAM frame data is not encrypted. + { net::QUIC_UNENCRYPTED_STREAM_DATA, "quic.unencrypted.stream_data" }, + // FEC frame data is not encrypted. + { net::QUIC_UNENCRYPTED_FEC_DATA, "quic.unencrypted.fec.data" }, + // RST_STREAM frame data is malformed. + { net::QUIC_INVALID_RST_STREAM_DATA, "quic.invalid.rst_stream_data" }, + // CONNECTION_CLOSE frame data is malformed. + { net::QUIC_INVALID_CONNECTION_CLOSE_DATA, + "quic.invalid.connection_close_data" }, + // GOAWAY frame data is malformed. + { net::QUIC_INVALID_GOAWAY_DATA, "quic.invalid.goaway_data" }, + // WINDOW_UPDATE frame data is malformed. + { net::QUIC_INVALID_WINDOW_UPDATE_DATA, "quic.invalid.window_update_data" }, + // BLOCKED frame data is malformed. + { net::QUIC_INVALID_BLOCKED_DATA, "quic.invalid.blocked_data" }, + // STOP_WAITING frame data is malformed. + { net::QUIC_INVALID_STOP_WAITING_DATA, "quic.invalid.stop_waiting_data" }, + // PATH_CLOSE frame data is malformed. + { net::QUIC_INVALID_PATH_CLOSE_DATA, "quic.invalid_path_close_data" }, + // ACK frame data is malformed. + { net::QUIC_INVALID_ACK_DATA, "quic.invalid.ack_data" }, + + // Version negotiation packet is malformed. + { net::QUIC_INVALID_VERSION_NEGOTIATION_PACKET, + "quic_invalid_version_negotiation_packet" }, + // Public RST packet is malformed. + { net::QUIC_INVALID_PUBLIC_RST_PACKET, "quic.invalid.public_rst_packet" }, + + // There was an error decrypting. + { net::QUIC_DECRYPTION_FAILURE, "quic.decryption.failure" }, + // There was an error encrypting. + { net::QUIC_ENCRYPTION_FAILURE, "quic.encryption.failure" }, + // The packet exceeded kMaxPacketSize. + { net::QUIC_PACKET_TOO_LARGE, "quic.packet.too_large" }, + // The peer is going away. May be a client or server. + { net::QUIC_PEER_GOING_AWAY, "quic.peer_going_away" }, + // A stream ID was invalid. + { net::QUIC_INVALID_STREAM_ID, "quic.invalid_stream_id" }, + // A priority was invalid. + { net::QUIC_INVALID_PRIORITY, "quic.invalid_priority" }, + // Too many streams already open. + { net::QUIC_TOO_MANY_OPEN_STREAMS, "quic.too_many_open_streams" }, + // The peer created too many available streams. + { net::QUIC_TOO_MANY_AVAILABLE_STREAMS, "quic.too_many_available_streams" }, + // Received public reset for this connection. + { net::QUIC_PUBLIC_RESET, "quic.public_reset" }, + // Invalid protocol version. + { net::QUIC_INVALID_VERSION, "quic.invalid_version" }, + + // The Header ID for a stream was too far from the previous. + { net::QUIC_INVALID_HEADER_ID, "quic.invalid_header_id" }, + // Negotiable parameter received during handshake had invalid value. + { net::QUIC_INVALID_NEGOTIATED_VALUE, "quic.invalid_negotiated_value" }, + // There was an error decompressing data. + { net::QUIC_DECOMPRESSION_FAILURE, "quic.decompression_failure" }, + // We hit our prenegotiated (or default) timeout + { net::QUIC_NETWORK_IDLE_TIMEOUT, "quic.connection.idle_time_out" }, + // We hit our overall connection timeout + { net::QUIC_HANDSHAKE_TIMEOUT, + "quic.connection.handshake_timed_out" }, + // There was an error encountered migrating addresses + { net::QUIC_ERROR_MIGRATING_ADDRESS, "quic.error_migrating_address" }, + // There was an error while writing to the socket. + { net::QUIC_PACKET_WRITE_ERROR, "quic.packet.write_error" }, + // There was an error while reading from the socket. + { net::QUIC_PACKET_READ_ERROR, "quic.packet.read_error" }, + // We received a STREAM_FRAME with no data and no fin flag set. + { net::QUIC_INVALID_STREAM_FRAME, "quic.invalid_stream_frame" }, + // We received invalid data on the headers stream. + { net::QUIC_INVALID_HEADERS_STREAM_DATA, "quic.invalid_headers_stream_data" }, + // The peer received too much data, violating flow control. + { net::QUIC_FLOW_CONTROL_RECEIVED_TOO_MUCH_DATA, + "quic.flow_control.received_too_much_data" }, + // The peer sent too much data, violating flow control. + { net::QUIC_FLOW_CONTROL_SENT_TOO_MUCH_DATA, + "quic.flow_control.sent_too_much_data" }, + // The peer received an invalid flow control window. + { net::QUIC_FLOW_CONTROL_INVALID_WINDOW, "quic.flow_control.invalid_window" }, + // The connection has been IP pooled into an existing connection. + { net::QUIC_CONNECTION_IP_POOLED, "quic.connection.ip_pooled" }, + // The connection has too many outstanding sent packets. + { net::QUIC_TOO_MANY_OUTSTANDING_SENT_PACKETS, + "quic.too_many_outstanding_sent_packets" }, + // The connection has too many outstanding received packets. + { net::QUIC_TOO_MANY_OUTSTANDING_RECEIVED_PACKETS, + "quic.too_many_outstanding_received_packets" }, + // The quic connection job to load server config is cancelled. + { net::QUIC_CONNECTION_CANCELLED, "quic.connection.cancelled" }, + // Disabled QUIC because of high packet loss rate. + { net::QUIC_BAD_PACKET_LOSS_RATE, "quic.bad_packet_loss_rate" }, + // Disabled QUIC because of too many PUBLIC_RESETs post handshake. + { net::QUIC_PUBLIC_RESETS_POST_HANDSHAKE, + "quic.public_resets_post_handshake" }, + // Disabled QUIC because of too many timeouts with streams open. + { net::QUIC_TIMEOUTS_WITH_OPEN_STREAMS, "quic.timeouts_with_open_streams" }, + // Closed because we failed to serialize a packet. + { net::QUIC_FAILED_TO_SERIALIZE_PACKET, "quic.failed_to_serialize_packet" }, + + // Crypto errors. + + // Hanshake failed. + { net::QUIC_HANDSHAKE_FAILED, "quic.handshake_failed" }, + // Handshake message contained out of order tags. + { net::QUIC_CRYPTO_TAGS_OUT_OF_ORDER, "quic.crypto.tags_out_of_order" }, + // Handshake message contained too many entries. + { net::QUIC_CRYPTO_TOO_MANY_ENTRIES, "quic.crypto.too_many_entries" }, + // Handshake message contained an invalid value length. + { net::QUIC_CRYPTO_INVALID_VALUE_LENGTH, "quic.crypto.invalid_value_length" }, + // A crypto message was received after the handshake was complete. + { net::QUIC_CRYPTO_MESSAGE_AFTER_HANDSHAKE_COMPLETE, + "quic.crypto_message_after_handshake_complete" }, + // A crypto message was received with an illegal message tag. + { net::QUIC_INVALID_CRYPTO_MESSAGE_TYPE, "quic.invalid_crypto_message_type" }, + // A crypto message was received with an illegal parameter. + { net::QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER, + "quic.invalid_crypto_message_parameter" }, + // An invalid channel id signature was supplied. + { net::QUIC_INVALID_CHANNEL_ID_SIGNATURE, + "quic.invalid_channel_id_signature" }, + // A crypto message was received with a mandatory parameter missing. + { net::QUIC_CRYPTO_MESSAGE_PARAMETER_NOT_FOUND, + "quic.crypto_message.parameter_not_found" }, + // A crypto message was received with a parameter that has no overlap + // with the local parameter. + { net::QUIC_CRYPTO_MESSAGE_PARAMETER_NO_OVERLAP, + "quic.crypto_message.parameter_no_overlap" }, + // A crypto message was received that contained a parameter with too few + // values. + { net::QUIC_CRYPTO_MESSAGE_INDEX_NOT_FOUND, + "quic_crypto_message_index_not_found" }, + // An internal error occured in crypto processing. + { net::QUIC_CRYPTO_INTERNAL_ERROR, "quic.crypto.internal_error" }, + // A crypto handshake message specified an unsupported version. + { net::QUIC_CRYPTO_VERSION_NOT_SUPPORTED, + "quic.crypto.version_not_supported" }, + // A crypto handshake message resulted in a stateless reject. + { net::QUIC_CRYPTO_HANDSHAKE_STATELESS_REJECT, + "quic.crypto.handshake_stateless_reject" }, + // There was no intersection between the crypto primitives supported by the + // peer and ourselves. + { net::QUIC_CRYPTO_NO_SUPPORT, "quic.crypto.no_support" }, + // The server rejected our client hello messages too many times. + { net::QUIC_CRYPTO_TOO_MANY_REJECTS, "quic.crypto.too_many_rejects" }, + // The client rejected the server's certificate chain or signature. + { net::QUIC_PROOF_INVALID, "quic.proof_invalid" }, + // A crypto message was received with a duplicate tag. + { net::QUIC_CRYPTO_DUPLICATE_TAG, "quic.crypto.duplicate_tag" }, + // A crypto message was received with the wrong encryption level (i.e. it + // should have been encrypted but was not.) + { net::QUIC_CRYPTO_ENCRYPTION_LEVEL_INCORRECT, + "quic.crypto.encryption_level_incorrect" }, + // The server config for a server has expired. + { net::QUIC_CRYPTO_SERVER_CONFIG_EXPIRED, + "quic.crypto.server_config_expired" }, + // We failed to setup the symmetric keys for a connection. + { net::QUIC_CRYPTO_SYMMETRIC_KEY_SETUP_FAILED, + "quic.crypto.symmetric_key_setup_failed" }, + // A handshake message arrived, but we are still validating the + // previous handshake message. + { net::QUIC_CRYPTO_MESSAGE_WHILE_VALIDATING_CLIENT_HELLO, + "quic.crypto_message_while_validating_client_hello" }, + // A server config update arrived before the handshake is complete. + { net::QUIC_CRYPTO_UPDATE_BEFORE_HANDSHAKE_COMPLETE, + "quic.crypto.update_before_handshake_complete" }, + // This connection involved a version negotiation which appears to have been + // tampered with. + { net::QUIC_VERSION_NEGOTIATION_MISMATCH, + "quic.version_negotiation_mismatch" }, + + // Multipath is not enabled, but a packet with multipath flag on is received. + { net::QUIC_BAD_MULTIPATH_FLAG, "quic.bad_multipath_flag" }, + + // Network change and connection migration errors. + + // IP address changed causing connection close. + { net::QUIC_IP_ADDRESS_CHANGED, "quic.ip_address_changed" }, + // Network changed, but connection had no migratable streams. + { net::QUIC_CONNECTION_MIGRATION_NO_MIGRATABLE_STREAMS, + "quic.connection_migration_no_migratable_streams" }, + // Connection changed networks too many times. + { net::QUIC_CONNECTION_MIGRATION_TOO_MANY_CHANGES, + "quic.connection_migration_too_many_changes" }, + // Connection migration was attempted, but there was no new network to + // migrate to. + { net::QUIC_CONNECTION_MIGRATION_NO_NEW_NETWORK, + "quic.connection_migration_no_new_network" }, + + // No error. Used as bound while iterating. + { net::QUIC_LAST_ERROR, "quic.last_error"} +}; + +static_assert(arraysize(kQuicErrorMap) == net::kActiveQuicErrorCount, + "quic_error_map is not in sync with quic protocol!"); + +} // namespace + +// static +bool GetDomainReliabilityBeaconQuicError(net::QuicErrorCode quic_error, + std::string* beacon_quic_error_out) { + if (quic_error != net::QUIC_NO_ERROR) { + // Convert a QUIC error. + // TODO(ttuttle): Consider sorting and using binary search? + for (size_t i = 0; i < arraysize(kQuicErrorMap); i++) { + if (kQuicErrorMap[i].quic_error == quic_error) { + *beacon_quic_error_out = kQuicErrorMap[i].beacon_quic_error; + return true; + } + } + } + beacon_quic_error_out->clear(); + return false; +} + +} // namespace domain_reliability
diff --git a/components/domain_reliability/quic_error_mapping.h b/components/domain_reliability/quic_error_mapping.h new file mode 100644 index 0000000..7d936ea --- /dev/null +++ b/components/domain_reliability/quic_error_mapping.h
@@ -0,0 +1,26 @@ +// Copyright 2016 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_DOMAIN_RELIABILITY_QUIC_ERROR_MAPPING_H_ +#define COMPONENTS_DOMAIN_RELIABILITY_QUIC_ERROR_MAPPING_H_ + +#include <string> + +#include "net/quic/quic_protocol.h" + +// N.B. This file and the .cc are separate from util.h/.cc so that they can be +// independently updated by folks working on QUIC when new errors are added. + +namespace domain_reliability { + +// Attempts to convert a QUIC error into the quic_error string +// that should be recorded in a beacon. Returns true and parse the QUIC error +// code in |beacon_quic_error_out| if it could. +// Returns false and clear |beacon_quic_error_out| otherwise. +bool GetDomainReliabilityBeaconQuicError(net::QuicErrorCode quic_error, + std::string* beacon_quic_error_out); + +} // namespace domain_reliability + +#endif // COMPONENTS_DOMAIN_RELIABILITY_QUIC_ERROR_MAPPING_H_
diff --git a/components/domain_reliability/util.cc b/components/domain_reliability/util.cc index 49fc304..8dd4e43e 100644 --- a/components/domain_reliability/util.cc +++ b/components/domain_reliability/util.cc
@@ -70,223 +70,6 @@ { net::ERR_SSL_UNRECOGNIZED_NAME_ALERT, "ssl.unrecognized_name_alert" } }; -const struct QuicErrorMapping { - net::QuicErrorCode quic_error; - const char* beacon_quic_error; -} quic_error_map[] = { - // Connection has reached an invalid state. - { net::QUIC_INTERNAL_ERROR, "quic.internal_error" }, - // There were data frames after the a fin or reset. - { net::QUIC_STREAM_DATA_AFTER_TERMINATION, - "quic.stream_data.after_termination" }, - // Control frame is malformed. - { net::QUIC_INVALID_PACKET_HEADER, "quic.invalid.packet_header" }, - // Frame data is malformed. - { net::QUIC_INVALID_FRAME_DATA, "quic.invalid_frame_data" }, - // The packet contained no payload. - { net::QUIC_MISSING_PAYLOAD, "quic.missing.payload" }, - // FEC data is malformed. - { net::QUIC_INVALID_FEC_DATA, "quic.invalid.fec_data" }, - // STREAM frame data is malformed. - { net::QUIC_INVALID_STREAM_DATA, "quic.invalid.stream_data" }, - // STREAM frame data is not encrypted. - { net::QUIC_UNENCRYPTED_STREAM_DATA, "quic.unencrypted.stream_data" }, - // FEC frame data is not encrypted. - { net::QUIC_UNENCRYPTED_FEC_DATA, "quic.unencrypted.fec.data" }, - // RST_STREAM frame data is malformed. - { net::QUIC_INVALID_RST_STREAM_DATA, "quic.invalid.rst_stream_data" }, - // CONNECTION_CLOSE frame data is malformed. - { net::QUIC_INVALID_CONNECTION_CLOSE_DATA, - "quic.invalid.connection_close_data" }, - // GOAWAY frame data is malformed. - { net::QUIC_INVALID_GOAWAY_DATA, "quic.invalid.goaway_data" }, - // WINDOW_UPDATE frame data is malformed. - { net::QUIC_INVALID_WINDOW_UPDATE_DATA, "quic.invalid.window_update_data" }, - // BLOCKED frame data is malformed. - { net::QUIC_INVALID_BLOCKED_DATA, "quic.invalid.blocked_data" }, - // STOP_WAITING frame data is malformed. - { net::QUIC_INVALID_STOP_WAITING_DATA, "quic.invalid.stop_waiting_data" }, - // PATH_CLOSE frame data is malformed. - { net::QUIC_INVALID_PATH_CLOSE_DATA, "quic.invalid_path_close_data" }, - // ACK frame data is malformed. - { net::QUIC_INVALID_ACK_DATA, "quic.invalid.ack_data" }, - - // Version negotiation packet is malformed. - { net::QUIC_INVALID_VERSION_NEGOTIATION_PACKET, - "quic_invalid_version_negotiation_packet" }, - // Public RST packet is malformed. - { net::QUIC_INVALID_PUBLIC_RST_PACKET, "quic.invalid.public_rst_packet" }, - - // There was an error decrypting. - { net::QUIC_DECRYPTION_FAILURE, "quic.decryption.failure" }, - // There was an error encrypting. - { net::QUIC_ENCRYPTION_FAILURE, "quic.encryption.failure" }, - // The packet exceeded kMaxPacketSize. - { net::QUIC_PACKET_TOO_LARGE, "quic.packet.too_large" }, - // The peer is going away. May be a client or server. - { net::QUIC_PEER_GOING_AWAY, "quic.peer_going_away" }, - // A stream ID was invalid. - { net::QUIC_INVALID_STREAM_ID, "quic.invalid_stream_id" }, - // A priority was invalid. - { net::QUIC_INVALID_PRIORITY, "quic.invalid_priority" }, - // Too many streams already open. - { net::QUIC_TOO_MANY_OPEN_STREAMS, "quic.too_many_open_streams" }, - // The peer created too many available streams. - { net::QUIC_TOO_MANY_AVAILABLE_STREAMS, "quic.too_many_available_streams" }, - // Received public reset for this connection. - { net::QUIC_PUBLIC_RESET, "quic.public_reset" }, - // Invalid protocol version. - { net::QUIC_INVALID_VERSION, "quic.invalid_version" }, - - // The Header ID for a stream was too far from the previous. - { net::QUIC_INVALID_HEADER_ID, "quic.invalid_header_id" }, - // Negotiable parameter received during handshake had invalid value. - { net::QUIC_INVALID_NEGOTIATED_VALUE, "quic.invalid_negotiated_value" }, - // There was an error decompressing data. - { net::QUIC_DECOMPRESSION_FAILURE, "quic.decompression_failure" }, - // We hit our prenegotiated (or default) timeout - { net::QUIC_NETWORK_IDLE_TIMEOUT, "quic.connection.idle_time_out" }, - // We hit our overall connection timeout - { net::QUIC_HANDSHAKE_TIMEOUT, - "quic.connection.handshake_timed_out" }, - // There was an error encountered migrating addresses - { net::QUIC_ERROR_MIGRATING_ADDRESS, "quic.error_migrating_address" }, - // There was an error while writing to the socket. - { net::QUIC_PACKET_WRITE_ERROR, "quic.packet.write_error" }, - // There was an error while reading from the socket. - { net::QUIC_PACKET_READ_ERROR, "quic.packet.read_error" }, - // We received a STREAM_FRAME with no data and no fin flag set. - { net::QUIC_INVALID_STREAM_FRAME, "quic.invalid_stream_frame" }, - // We received invalid data on the headers stream. - { net::QUIC_INVALID_HEADERS_STREAM_DATA, "quic.invalid_headers_stream_data" }, - // The peer received too much data, violating flow control. - { net::QUIC_FLOW_CONTROL_RECEIVED_TOO_MUCH_DATA, - "quic.flow_control.received_too_much_data" }, - // The peer sent too much data, violating flow control. - { net::QUIC_FLOW_CONTROL_SENT_TOO_MUCH_DATA, - "quic.flow_control.sent_too_much_data" }, - // The peer received an invalid flow control window. - { net::QUIC_FLOW_CONTROL_INVALID_WINDOW, "quic.flow_control.invalid_window" }, - // The connection has been IP pooled into an existing connection. - { net::QUIC_CONNECTION_IP_POOLED, "quic.connection.ip_pooled" }, - // The connection has too many outstanding sent packets. - { net::QUIC_TOO_MANY_OUTSTANDING_SENT_PACKETS, - "quic.too_many_outstanding_sent_packets" }, - // The connection has too many outstanding received packets. - { net::QUIC_TOO_MANY_OUTSTANDING_RECEIVED_PACKETS, - "quic.too_many_outstanding_received_packets" }, - // The quic connection job to load server config is cancelled. - { net::QUIC_CONNECTION_CANCELLED, "quic.connection.cancelled" }, - // Disabled QUIC because of high packet loss rate. - { net::QUIC_BAD_PACKET_LOSS_RATE, "quic.bad_packet_loss_rate" }, - // Disabled QUIC because of too many PUBLIC_RESETs post handshake. - { net::QUIC_PUBLIC_RESETS_POST_HANDSHAKE, - "quic.public_resets_post_handshake" }, - // Disabled QUIC because of too many timeouts with streams open. - { net::QUIC_TIMEOUTS_WITH_OPEN_STREAMS, "quic.timeouts_with_open_streams" }, - // Closed because we failed to serialize a packet. - { net::QUIC_FAILED_TO_SERIALIZE_PACKET, "quic.failed_to_serialize_packet" }, - - // Crypto errors. - - // Hanshake failed. - { net::QUIC_HANDSHAKE_FAILED, "quic.handshake_failed" }, - // Handshake message contained out of order tags. - { net::QUIC_CRYPTO_TAGS_OUT_OF_ORDER, "quic.crypto.tags_out_of_order" }, - // Handshake message contained too many entries. - { net::QUIC_CRYPTO_TOO_MANY_ENTRIES, "quic.crypto.too_many_entries" }, - // Handshake message contained an invalid value length. - { net::QUIC_CRYPTO_INVALID_VALUE_LENGTH, "quic.crypto.invalid_value_length" }, - // A crypto message was received after the handshake was complete. - { net::QUIC_CRYPTO_MESSAGE_AFTER_HANDSHAKE_COMPLETE, - "quic.crypto_message_after_handshake_complete" }, - // A crypto message was received with an illegal message tag. - { net::QUIC_INVALID_CRYPTO_MESSAGE_TYPE, "quic.invalid_crypto_message_type" }, - // A crypto message was received with an illegal parameter. - { net::QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER, - "quic.invalid_crypto_message_parameter" }, - // An invalid channel id signature was supplied. - { net::QUIC_INVALID_CHANNEL_ID_SIGNATURE, - "quic.invalid_channel_id_signature" }, - // A crypto message was received with a mandatory parameter missing. - { net::QUIC_CRYPTO_MESSAGE_PARAMETER_NOT_FOUND, - "quic.crypto_message.parameter_not_found" }, - // A crypto message was received with a parameter that has no overlap - // with the local parameter. - { net::QUIC_CRYPTO_MESSAGE_PARAMETER_NO_OVERLAP, - "quic.crypto_message.parameter_no_overlap" }, - // A crypto message was received that contained a parameter with too few - // values. - { net::QUIC_CRYPTO_MESSAGE_INDEX_NOT_FOUND, - "quic_crypto_message_index_not_found" }, - // An internal error occured in crypto processing. - { net::QUIC_CRYPTO_INTERNAL_ERROR, "quic.crypto.internal_error" }, - // A crypto handshake message specified an unsupported version. - { net::QUIC_CRYPTO_VERSION_NOT_SUPPORTED, - "quic.crypto.version_not_supported" }, - // A crypto handshake message resulted in a stateless reject. - { net::QUIC_CRYPTO_HANDSHAKE_STATELESS_REJECT, - "quic.crypto.handshake_stateless_reject" }, - // There was no intersection between the crypto primitives supported by the - // peer and ourselves. - { net::QUIC_CRYPTO_NO_SUPPORT, "quic.crypto.no_support" }, - // The server rejected our client hello messages too many times. - { net::QUIC_CRYPTO_TOO_MANY_REJECTS, "quic.crypto.too_many_rejects" }, - // The client rejected the server's certificate chain or signature. - { net::QUIC_PROOF_INVALID, "quic.proof_invalid" }, - // A crypto message was received with a duplicate tag. - { net::QUIC_CRYPTO_DUPLICATE_TAG, "quic.crypto.duplicate_tag" }, - // A crypto message was received with the wrong encryption level (i.e. it - // should have been encrypted but was not.) - { net::QUIC_CRYPTO_ENCRYPTION_LEVEL_INCORRECT, - "quic.crypto.encryption_level_incorrect" }, - // The server config for a server has expired. - { net::QUIC_CRYPTO_SERVER_CONFIG_EXPIRED, - "quic.crypto.server_config_expired" }, - // We failed to setup the symmetric keys for a connection. - { net::QUIC_CRYPTO_SYMMETRIC_KEY_SETUP_FAILED, - "quic.crypto.symmetric_key_setup_failed" }, - // A handshake message arrived, but we are still validating the - // previous handshake message. - { net::QUIC_CRYPTO_MESSAGE_WHILE_VALIDATING_CLIENT_HELLO, - "quic.crypto_message_while_validating_client_hello" }, - // A server config update arrived before the handshake is complete. - { net::QUIC_CRYPTO_UPDATE_BEFORE_HANDSHAKE_COMPLETE, - "quic.crypto.update_before_handshake_complete" }, - // This connection involved a version negotiation which appears to have been - // tampered with. - { net::QUIC_VERSION_NEGOTIATION_MISMATCH, - "quic.version_negotiation_mismatch" }, - - // Multipath is not enabled, but a packet with multipath flag on is received. - { net::QUIC_BAD_MULTIPATH_FLAG, "quic.bad_multipath_flag" }, - - // Network change and connection migration errors. - - // IP address changed causing connection close. - { net::QUIC_IP_ADDRESS_CHANGED, "quic.ip_address_changed" }, - // Network changed, but connection had no migratable streams. - { net::QUIC_CONNECTION_MIGRATION_NO_MIGRATABLE_STREAMS, - "quic.connection_migration_no_migratable_streams" }, - // Connection changed networks too many times. - { net::QUIC_CONNECTION_MIGRATION_TOO_MANY_CHANGES, - "quic.connection_migration_too_many_changes" }, - // Connection migration was attempted, but there was no new network to - // migrate to. - { net::QUIC_CONNECTION_MIGRATION_NO_NEW_NETWORK, - "quic.connection_migration_no_new_network" }, - - // No error. Used as bound while iterating. - { net::QUIC_LAST_ERROR, "quic.last_error"} -}; - -// static -const int quic_error_map_size = - sizeof(quic_error_map) / sizeof(QuicErrorMapping); - -static_assert(quic_error_map_size == net::kActiveQuicErrorCount, - "quic_error_map is not in sync with quic protocol!"); - bool CanReportFullBeaconURLToCollector(const GURL& beacon_url, const GURL& collector_url) { return beacon_url.GetOrigin() == collector_url.GetOrigin(); @@ -317,23 +100,6 @@ return false; } -// static -bool GetDomainReliabilityBeaconQuicError(net::QuicErrorCode quic_error, - std::string* beacon_quic_error_out) { - if (quic_error != net::QUIC_NO_ERROR) { - // Convert a QUIC error. - // TODO(ttuttle): Consider sorting and using binary search? - for (size_t i = 0; i < arraysize(quic_error_map); i++) { - if (quic_error_map[i].quic_error == quic_error) { - *beacon_quic_error_out = quic_error_map[i].beacon_quic_error; - return true; - } - } - } - beacon_quic_error_out->clear(); - return false; -} - // TODO(ttuttle): Consider using NPN/ALPN instead, if there's a good way to // differentiate HTTP and HTTPS. std::string GetDomainReliabilityProtocol(
diff --git a/components/domain_reliability/util.h b/components/domain_reliability/util.h index b8ea6ce..3cbf469b 100644 --- a/components/domain_reliability/util.h +++ b/components/domain_reliability/util.h
@@ -19,7 +19,6 @@ #include "components/domain_reliability/domain_reliability_export.h" #include "components/domain_reliability/uploader.h" #include "net/http/http_response_info.h" -#include "net/quic/quic_protocol.h" #include "net/url_request/url_request_status.h" namespace domain_reliability { @@ -35,13 +34,6 @@ int http_response_code, std::string* beacon_status_out); -// Attempts to convert a QUIC error into the quic_error string -// that should be recorded in a beacon. Returns true and parse the QUIC error -// code in |beacon_quic_error_out| if it could. -// Returns false and clear |beacon_quic_error_out| otherwise. -bool GetDomainReliabilityBeaconQuicError(net::QuicErrorCode quic_error, - std::string* beacon_quic_error_out); - std::string GetDomainReliabilityProtocol( net::HttpResponseInfo::ConnectionInfo connection_info, bool ssl_info_populated);
diff --git a/components/enhanced_bookmarks.gypi b/components/enhanced_bookmarks.gypi deleted file mode 100644 index 3ebdc60..0000000 --- a/components/enhanced_bookmarks.gypi +++ /dev/null
@@ -1,22 +0,0 @@ -# Copyright 2014 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -{ - 'conditions' : [ - ['OS=="android"', { - 'targets': [ - { - # GN: //components/enhanced_bookmarks:enhanced_bookmarks_java_enums_srcjar - 'target_name': 'enhanced_bookmarks_java_enums_srcjar', - 'type': 'none', - 'variables': { - 'source_file': 'enhanced_bookmarks/enhanced_bookmark_utils.h', - }, - 'includes': [ '../build/android/java_cpp_enum.gypi' ], - }, - ], - }, - ], - ], -}
diff --git a/components/enhanced_bookmarks/BUILD.gn b/components/enhanced_bookmarks/BUILD.gn deleted file mode 100644 index 32329bd..0000000 --- a/components/enhanced_bookmarks/BUILD.gn +++ /dev/null
@@ -1,17 +0,0 @@ -# Copyright 2014 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -if (is_android) { - import("//build/config/android/config.gni") - import("//build/config/android/rules.gni") -} - -if (is_android) { - # GYP: //components/enhanced_bookmarks.gypi:enhanced_bookmarks_java_enums_srcjar - java_cpp_enum("enhanced_bookmarks_java_enums_srcjar") { - sources = [ - "enhanced_bookmark_utils.h", - ] - } -}
diff --git a/components/enhanced_bookmarks/OWNERS b/components/enhanced_bookmarks/OWNERS deleted file mode 100644 index adb9a1b..0000000 --- a/components/enhanced_bookmarks/OWNERS +++ /dev/null
@@ -1,3 +0,0 @@ -kkimlabs@chromium.org -noyau@chromium.org -sky@chromium.org
diff --git a/components/enhanced_bookmarks/enhanced_bookmark_utils.h b/components/enhanced_bookmarks/enhanced_bookmark_utils.h deleted file mode 100644 index 30150aad..0000000 --- a/components/enhanced_bookmarks/enhanced_bookmark_utils.h +++ /dev/null
@@ -1,28 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef COMPONENTS_ENHANCED_BOOKMARKS_ENHANCED_BOOKMARK_UTILS_H_ -#define COMPONENTS_ENHANCED_BOOKMARKS_ENHANCED_BOOKMARK_UTILS_H_ - -namespace enhanced_bookmarks { - -// Possible locations where a bookmark can be opened from. -// Please sync with the corresponding histograms.xml. -// -// A Java counterpart will be generated for this enum. -// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.enhancedbookmarks -enum LaunchLocation { - ALL_ITEMS = 0, - UNCATEGORIZED = 1, // Deprecated. - FOLDER = 2, - FILTER = 3, - SEARCH = 4, - BOOKMARK_EDITOR = 5, - COUNT = 6, -}; - -} // namespace enhanced_bookmarks - -#endif // COMPONENTS_ENHANCED_BOOKMARKS_ENHANCED_BOOKMARK_UTILS_H_ -
diff --git a/components/exo/buffer.cc b/components/exo/buffer.cc index 9700326..1bb5b26 100644 --- a/components/exo/buffer.cc +++ b/components/exo/buffer.cc
@@ -18,6 +18,7 @@ #include "cc/output/context_provider.h" #include "cc/resources/single_release_callback.h" #include "cc/resources/texture_mailbox.h" +#include "gpu/command_buffer/client/context_support.h" #include "gpu/command_buffer/client/gles2_interface.h" #include "ui/aura/env.h" #include "ui/compositor/compositor.h" @@ -51,6 +52,28 @@ return kGLInternalFormats[static_cast<int>(format)]; } +unsigned CreateGLTexture(gpu::gles2::GLES2Interface* gles2, GLenum target) { + unsigned texture_id = 0; + gles2->GenTextures(1, &texture_id); + gles2->ActiveTexture(GL_TEXTURE0); + gles2->BindTexture(target, texture_id); + gles2->TexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + gles2->TexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + gles2->TexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + gles2->TexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + return texture_id; +} + +void CreateGLTextureMailbox(gpu::gles2::GLES2Interface* gles2, + unsigned texture_id, + GLenum target, + gpu::Mailbox* mailbox) { + gles2->ActiveTexture(GL_TEXTURE0); + gles2->BindTexture(target, texture_id); + gles2->GenMailboxCHROMIUM(mailbox->name); + gles2->ProduceTextureCHROMIUM(target, mailbox->name); +} + } // namespace //////////////////////////////////////////////////////////////////////////////// @@ -59,21 +82,38 @@ // Encapsulates the state and logic needed to bind a buffer to a GLES2 texture. class Buffer::Texture { public: - Texture(gfx::GpuMemoryBuffer* gpu_memory_buffer, - cc::ContextProvider* context_provider, - unsigned texture_target); + explicit Texture(cc::ContextProvider* context_provider); + Texture(cc::ContextProvider* context_provider, + gfx::GpuMemoryBuffer* gpu_memory_buffer, + unsigned texture_target, + unsigned query_type); ~Texture(); // Returns true if GLES2 resources for texture have been lost. bool IsLost(); - // Binds the content of gpu memory buffer to the texture returned by - // mailbox(). Returns a sync token that can be used to when accessing texture + // Allow texture to be reused after |sync_token| has passed and runs + // |callback|. + void Release(const base::Closure& callback, + const gpu::SyncToken& sync_token, + bool is_lost); + + // Binds the contents referenced by |image_id_| to the texture returned by + // mailbox(). Returns a sync token that can be used when accessing texture // from a different context. gpu::SyncToken BindTexImage(); - // Releases the content of gpu memory buffer after |sync_token| has passed. - void ReleaseTexImage(const gpu::SyncToken& sync_token); + // Releases the contents referenced by |image_id_| after |sync_token| has + // passed and runs |callback| when completed. + void ReleaseTexImage(const base::Closure& callback, + const gpu::SyncToken& sync_token, + bool is_lost); + + // Copy the contents of texture to |destination| and runs |callback| when + // completed. Returns a sync token that can be used when accessing texture + // from a different context. + gpu::SyncToken CopyTexImage(Texture* destination, + const base::Closure& callback); // Returns the mailbox for this texture. gpu::Mailbox mailbox() const { return mailbox_; } @@ -81,43 +121,57 @@ private: scoped_refptr<cc::ContextProvider> context_provider_; const unsigned texture_target_; - const gfx::Size size_; + const unsigned query_type_; + const GLenum internalformat_; unsigned image_id_; + unsigned query_id_; unsigned texture_id_; gpu::Mailbox mailbox_; DISALLOW_COPY_AND_ASSIGN(Texture); }; -Buffer::Texture::Texture(gfx::GpuMemoryBuffer* gpu_memory_buffer, - cc::ContextProvider* context_provider, - unsigned texture_target) +Buffer::Texture::Texture(cc::ContextProvider* context_provider) : context_provider_(context_provider), - texture_target_(texture_target), - size_(gpu_memory_buffer->GetSize()), + texture_target_(GL_TEXTURE_2D), + query_type_(GL_COMMANDS_COMPLETED_CHROMIUM), + internalformat_(GL_RGBA), image_id_(0), + query_id_(0), texture_id_(0) { gpu::gles2::GLES2Interface* gles2 = context_provider_->ContextGL(); - image_id_ = gles2->CreateImageCHROMIUM( - gpu_memory_buffer->AsClientBuffer(), size_.width(), size_.height(), - GLInternalFormat(gpu_memory_buffer->GetFormat())); - gles2->GenTextures(1, &texture_id_); - gles2->ActiveTexture(GL_TEXTURE0); - gles2->BindTexture(texture_target_, texture_id_); - gles2->TexParameteri(texture_target_, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - gles2->TexParameteri(texture_target_, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - gles2->TexParameteri(texture_target_, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - gles2->TexParameteri(texture_target_, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + texture_id_ = CreateGLTexture(gles2, texture_target_); // Generate a crypto-secure random mailbox name. - gles2->GenMailboxCHROMIUM(mailbox_.name); - gles2->ProduceTextureCHROMIUM(texture_target_, mailbox_.name); + CreateGLTextureMailbox(gles2, texture_id_, texture_target_, &mailbox_); +} + +Buffer::Texture::Texture(cc::ContextProvider* context_provider, + gfx::GpuMemoryBuffer* gpu_memory_buffer, + unsigned texture_target, + unsigned query_type) + : context_provider_(context_provider), + texture_target_(texture_target), + query_type_(query_type), + internalformat_(GLInternalFormat(gpu_memory_buffer->GetFormat())), + image_id_(0), + query_id_(0), + texture_id_(0) { + gpu::gles2::GLES2Interface* gles2 = context_provider_->ContextGL(); + gfx::Size size = gpu_memory_buffer->GetSize(); + image_id_ = + gles2->CreateImageCHROMIUM(gpu_memory_buffer->AsClientBuffer(), + size.width(), size.height(), internalformat_); + gles2->GenQueriesEXT(1, &query_id_); + texture_id_ = CreateGLTexture(gles2, texture_target_); } Buffer::Texture::~Texture() { gpu::gles2::GLES2Interface* gles2 = context_provider_->ContextGL(); - gles2->ActiveTexture(GL_TEXTURE0); gles2->DeleteTextures(1, &texture_id_); - gles2->DestroyImageCHROMIUM(image_id_); + if (query_id_) + gles2->DeleteQueriesEXT(1, &query_id_); + if (image_id_) + gles2->DestroyImageCHROMIUM(image_id_); } bool Buffer::Texture::IsLost() { @@ -125,11 +179,27 @@ return gles2->GetGraphicsResetStatusKHR() != GL_NO_ERROR; } +void Buffer::Texture::Release(const base::Closure& callback, + const gpu::SyncToken& sync_token, + bool is_lost) { + gpu::gles2::GLES2Interface* gles2 = context_provider_->ContextGL(); + if (sync_token.HasData()) + gles2->WaitSyncTokenCHROMIUM(sync_token.GetConstData()); + + // Run callback as texture can be reused immediately after waiting for sync + // token. + callback.Run(); +} + gpu::SyncToken Buffer::Texture::BindTexImage() { gpu::gles2::GLES2Interface* gles2 = context_provider_->ContextGL(); gles2->ActiveTexture(GL_TEXTURE0); gles2->BindTexture(texture_target_, texture_id_); + DCHECK_NE(image_id_, 0u); gles2->BindTexImage2DCHROMIUM(texture_target_, image_id_); + // Generate a crypto-secure random mailbox name if not already done. + if (mailbox_.IsZero()) + CreateGLTextureMailbox(gles2, texture_id_, texture_target_, &mailbox_); // Create and return a sync token that can be used to ensure that the // BindTexImage2DCHROMIUM call is processed before issuing any commands // that will read from the texture on a different context. @@ -140,70 +210,160 @@ return sync_token; } -void Buffer::Texture::ReleaseTexImage(const gpu::SyncToken& sync_token) { +void Buffer::Texture::ReleaseTexImage(const base::Closure& callback, + const gpu::SyncToken& sync_token, + bool is_lost) { gpu::gles2::GLES2Interface* gles2 = context_provider_->ContextGL(); if (sync_token.HasData()) gles2->WaitSyncTokenCHROMIUM(sync_token.GetConstData()); gles2->ActiveTexture(GL_TEXTURE0); gles2->BindTexture(texture_target_, texture_id_); + DCHECK_NE(query_id_, 0u); + gles2->BeginQueryEXT(query_type_, query_id_); gles2->ReleaseTexImage2DCHROMIUM(texture_target_, image_id_); + gles2->EndQueryEXT(query_type_); + // Run callback when query has signaled and ReleaseTexImage has been handled + // if sync token has data and buffer has been used. If buffer was never used + // then run the callback immediately. + if (sync_token.HasData()) { + context_provider_->ContextSupport()->SignalQuery(query_id_, callback); + } else { + callback.Run(); + } +} + +gpu::SyncToken Buffer::Texture::CopyTexImage(Texture* destination, + const base::Closure& callback) { + gpu::gles2::GLES2Interface* gles2 = context_provider_->ContextGL(); + gles2->ActiveTexture(GL_TEXTURE0); + gles2->BindTexture(texture_target_, texture_id_); + DCHECK_NE(image_id_, 0u); + gles2->BindTexImage2DCHROMIUM(texture_target_, image_id_); + gles2->CopyTextureCHROMIUM(texture_id_, destination->texture_id_, + internalformat_, GL_UNSIGNED_BYTE, false, false, + false); + DCHECK_NE(query_id_, 0u); + gles2->BeginQueryEXT(query_type_, query_id_); + gles2->ReleaseTexImage2DCHROMIUM(texture_target_, image_id_); + gles2->EndQueryEXT(query_type_); + // Run callback when query has signaled and ReleaseTexImage has been handled. + context_provider_->ContextSupport()->SignalQuery(query_id_, callback); + // Create and return a sync token that can be used to ensure that the + // CopyTextureCHROMIUM call is processed before issuing any commands + // that will read from the target texture on a different context. + uint64_t fence_sync = gles2->InsertFenceSyncCHROMIUM(); + gles2->OrderingBarrierCHROMIUM(); + gpu::SyncToken sync_token; + gles2->GenUnverifiedSyncTokenCHROMIUM(fence_sync, sync_token.GetData()); + return sync_token; } //////////////////////////////////////////////////////////////////////////////// // Buffer, public: +Buffer::Buffer(scoped_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer) + : gpu_memory_buffer_(std::move(gpu_memory_buffer)), + texture_target_(GL_TEXTURE_2D), + query_type_(GL_COMMANDS_COMPLETED_CHROMIUM), + use_zero_copy_(true), + use_count_(0) {} + Buffer::Buffer(scoped_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer, - unsigned texture_target) + unsigned texture_target, + unsigned query_type, + bool use_zero_copy) : gpu_memory_buffer_(std::move(gpu_memory_buffer)), texture_target_(texture_target), + query_type_(query_type), + use_zero_copy_(use_zero_copy), use_count_(0) {} Buffer::~Buffer() {} scoped_ptr<cc::SingleReleaseCallback> Buffer::ProduceTextureMailbox( - cc::TextureMailbox* texture_mailbox) { + cc::TextureMailbox* texture_mailbox, + bool lost_context) { DLOG_IF(WARNING, use_count_) << "Producing a texture mailbox for a buffer that has not been released"; + // Some clients think that they can reuse a buffer before it's released by + // performing a fast blit into the buffer. This behavior is bad as it prevents + // the client from knowing when the buffer is actually released (e.g. the + // release notification for the previous use of buffer can arrive after the + // buffer has been reused). We stop running the release callback when this + // type of behavior is detected as having the buffer always be busy will + // result in fewer drawing artifacts. + if (use_count_ && !lost_context) + release_callback_.Reset(); + // Increment the use count for this buffer. ++use_count_; - // Creating a new texture is relatively expensive so we reuse the last - // texture whenever possible. - scoped_ptr<Texture> texture = std::move(last_texture_); + // If textures are lost, destroy them to ensure that we create new ones below. + if (contents_texture_ && contents_texture_->IsLost()) + contents_texture_.reset(); + if (texture_ && texture_->IsLost()) + texture_.reset(); - // If texture is lost, destroy it to ensure that we create a new one below. - if (texture && texture->IsLost()) - texture.reset(); - - // Create a new texture if one doesn't already exist. The contents of this - // buffer can be bound to the texture using a call to BindTexImage and must - // be released using a matching ReleaseTexImage call before it can be reused - // or destroyed. - if (!texture) { - // Note: This can fail if GPU acceleration has been disabled. - scoped_refptr<cc::ContextProvider> context_provider = - aura::Env::GetInstance() - ->context_factory() - ->SharedMainThreadContextProvider(); - if (!context_provider) { - DLOG(WARNING) << "Failed to acquire a context provider"; - Release(); // Decrements the use count - return nullptr; - } - texture = make_scoped_ptr(new Texture( - gpu_memory_buffer_.get(), context_provider.get(), texture_target_)); + // Note: This can fail if GPU acceleration has been disabled. + scoped_refptr<cc::ContextProvider> context_provider = + aura::Env::GetInstance() + ->context_factory() + ->SharedMainThreadContextProvider(); + if (!context_provider) { + DLOG(WARNING) << "Failed to acquire a context provider"; + Release(); // Decrements the use count + return nullptr; } - // This binds the latest contents of this buffer to the texture. - gpu::SyncToken sync_token = texture->BindTexImage(); + // Create a new image texture for |gpu_memory_buffer_| with |texture_target_| + // if one doesn't already exist. The contents of this buffer are copied to + // |texture| using a call to CopyTexImage. + if (!contents_texture_) { + contents_texture_ = make_scoped_ptr( + new Texture(context_provider.get(), gpu_memory_buffer_.get(), + texture_target_, query_type_)); + } - bool is_overlay_candidate = false; - *texture_mailbox = - cc::TextureMailbox(texture->mailbox(), sync_token, texture_target_, - gpu_memory_buffer_->GetSize(), is_overlay_candidate); + if (use_zero_copy_) { + // Zero-copy means using the contents texture directly. + Texture* texture = contents_texture_.get(); + + // This binds the latest contents of this buffer to |texture|. + gpu::SyncToken sync_token = texture->BindTexImage(); + + // TODO(reveman): Set to true when GMBs can be imported for SCANOUT. + bool is_overlay_candidate = false; + *texture_mailbox = + cc::TextureMailbox(texture->mailbox(), sync_token, texture_target_, + gpu_memory_buffer_->GetSize(), is_overlay_candidate); + // The contents texture will be released when no longer used by the + // compositor. + return cc::SingleReleaseCallback::Create( + base::Bind(&Buffer::Texture::ReleaseTexImage, base::Unretained(texture), + base::Bind(&Buffer::ReleaseContentsTexture, AsWeakPtr(), + base::Passed(&contents_texture_)))); + } + + // Create a mailbox texture that we copy the buffer contents to. + if (!texture_) + texture_ = make_scoped_ptr(new Texture(context_provider.get())); + + Texture* texture = texture_.get(); + + // The contents texture will be released when copy has completed. + gpu::SyncToken sync_token = contents_texture_->CopyTexImage( + texture, base::Bind(&Buffer::ReleaseContentsTexture, AsWeakPtr(), + base::Passed(&contents_texture_))); + *texture_mailbox = cc::TextureMailbox( + texture->mailbox(), sync_token, GL_TEXTURE_2D, + gpu_memory_buffer_->GetSize(), false /* is_overlay_candidate*/); + // The mailbox texture will be released when no longer used by the + // compositor. return cc::SingleReleaseCallback::Create( - base::Bind(&Buffer::ReleaseTexture, AsWeakPtr(), base::Passed(&texture))); + base::Bind(&Buffer::Texture::Release, base::Unretained(texture), + base::Bind(&Buffer::ReleaseTexture, AsWeakPtr(), + base::Passed(&texture_)))); } gfx::Size Buffer::GetSize() const { @@ -234,26 +394,15 @@ release_callback_.Run(); } -// static -void Buffer::ReleaseTexture(base::WeakPtr<Buffer> buffer, - scoped_ptr<Texture> texture, - const gpu::SyncToken& sync_token, - bool is_lost) { - TRACE_EVENT1("exo", "Buffer::ReleaseTexture", "is_lost", is_lost); +void Buffer::ReleaseTexture(scoped_ptr<Texture> texture) { + texture_ = std::move(texture); +} - // Release image so it can safely be reused or destroyed. - texture->ReleaseTexImage(sync_token); +void Buffer::ReleaseContentsTexture(scoped_ptr<Texture> texture) { + TRACE_EVENT0("exo", "Buffer::ReleaseContentsTexture"); - // Early out if buffer is gone. This can happen when the client destroyed the - // buffer before receiving a release callback. - if (!buffer) - return; - - // Allow buffer to reused texture if it's not lost. - if (!is_lost) - buffer->last_texture_ = std::move(texture); - - buffer->Release(); + contents_texture_ = std::move(texture); + Release(); } } // namespace exo
diff --git a/components/exo/buffer.h b/components/exo/buffer.h index 2f60f5b..a98c4b31 100644 --- a/components/exo/buffer.h +++ b/components/exo/buffer.h
@@ -37,8 +37,11 @@ // and not defined as part of this class. class Buffer : public base::SupportsWeakPtr<Buffer> { public: + explicit Buffer(scoped_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer); Buffer(scoped_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer, - unsigned texture_target); + unsigned texture_target, + unsigned query_type, + bool use_zero_copy); ~Buffer(); // Set the callback to run when the buffer is no longer used by the @@ -48,11 +51,13 @@ release_callback_ = release_callback; } - // This function can be used to acquire a texture mailbox that is bound to - // the buffer. Returns a release callback on success. The release callback - // must be called before a new texture mailbox can be acquired. + // This function can be used to acquire a texture mailbox for the contents of + // buffer. Returns a release callback on success. The release callback should + // be called before a new texture mailbox can be acquired unless + // |lost_context| is true. scoped_ptr<cc::SingleReleaseCallback> ProduceTextureMailbox( - cc::TextureMailbox* mailbox); + cc::TextureMailbox* mailbox, + bool lost_context); // Returns the size of the buffer. gfx::Size GetSize() const; @@ -68,14 +73,13 @@ void Release(); // This is used by ProduceTextureMailbox() to produce a release callback + // that releases a texture so it can be destroyed or reused. + void ReleaseTexture(scoped_ptr<Texture> texture); + + // This is used by ProduceTextureMailbox() to produce a release callback // that releases the buffer contents referenced by a texture before the // texture is destroyed or reused. - // Note: This is a static function as it needs to run even if the buffer - // has been destroyed. - static void ReleaseTexture(base::WeakPtr<Buffer> buffer, - scoped_ptr<Texture> texture, - const gpu::SyncToken& sync_token, - bool is_lost); + void ReleaseContentsTexture(scoped_ptr<Texture> texture); // The GPU memory buffer that contains the contents of this buffer. scoped_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer_; @@ -83,14 +87,24 @@ // Texture target that must be used when creating a texture for buffer. const unsigned texture_target_; + // Query type that must be used when releasing buffer from a texture. + const unsigned query_type_; + + // True if zero copy is used when producing a texture mailbox for buffer. + const bool use_zero_copy_; + // This is incremented when a texture mailbox is produced and decremented // when a texture mailbox is released. It is used to determine when we should // notify the client that buffer has been released. unsigned use_count_; - // The last released texture instance. ProduceTextureMailbox() will use this + // The last used texture. ProduceTextureMailbox() will use this // instead of creating a new texture when possible. - scoped_ptr<Texture> last_texture_; + scoped_ptr<Texture> texture_; + + // The last used contents texture. ProduceTextureMailbox() will use this + // instead of creating a new texture when possible. + scoped_ptr<Texture> contents_texture_; // The client release callback. base::Closure release_callback_;
diff --git a/components/exo/buffer_unittest.cc b/components/exo/buffer_unittest.cc index bf320f3..1f0bbe6e 100644 --- a/components/exo/buffer_unittest.cc +++ b/components/exo/buffer_unittest.cc
@@ -29,8 +29,8 @@ TEST_F(BufferTest, ReleaseCallback) { gfx::Size buffer_size(256, 256); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); // Set the release callback. int release_call_count = 0; @@ -40,7 +40,7 @@ // Produce a texture mailbox for the contents of the buffer. cc::TextureMailbox texture_mailbox; scoped_ptr<cc::SingleReleaseCallback> buffer_release_callback = - buffer->ProduceTextureMailbox(&texture_mailbox); + buffer->ProduceTextureMailbox(&texture_mailbox, false); ASSERT_TRUE(buffer_release_callback); // Release buffer. @@ -52,13 +52,13 @@ TEST_F(BufferTest, IsLost) { gfx::Size buffer_size(256, 256); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); // Acquire a texture mailbox for the contents of the buffer. cc::TextureMailbox texture_mailbox; scoped_ptr<cc::SingleReleaseCallback> buffer_release_callback = - buffer->ProduceTextureMailbox(&texture_mailbox); + buffer->ProduceTextureMailbox(&texture_mailbox, false); ASSERT_TRUE(buffer_release_callback); scoped_refptr<cc::ContextProvider> context_provider = @@ -76,7 +76,8 @@ buffer_release_callback->Run(gpu::SyncToken(), is_lost); // Producing a new texture mailbox for the contents of the buffer. - buffer_release_callback = buffer->ProduceTextureMailbox(&texture_mailbox); + buffer_release_callback = + buffer->ProduceTextureMailbox(&texture_mailbox, is_lost); ASSERT_TRUE(buffer_release_callback); // Release buffer.
diff --git a/components/exo/display.cc b/components/exo/display.cc index a63a627..0e12f960 100644 --- a/components/exo/display.cc +++ b/components/exo/display.cc
@@ -14,6 +14,7 @@ #include "components/exo/surface.h" #if defined(USE_OZONE) +#include <GLES2/gl2extchromium.h> #include "components/exo/buffer.h" #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h" #include "third_party/khronos/GLES2/gl2.h" @@ -69,8 +70,13 @@ return nullptr; } + // Using zero-copy for optimal performance. + bool use_zero_copy = true; + return make_scoped_ptr( - new Buffer(std::move(gpu_memory_buffer), GL_TEXTURE_EXTERNAL_OES)); + new Buffer(std::move(gpu_memory_buffer), GL_TEXTURE_EXTERNAL_OES, + // COMMANDS_COMPLETED queries are required by native pixmaps. + GL_COMMANDS_COMPLETED_CHROMIUM, use_zero_copy)); } #endif
diff --git a/components/exo/keyboard_unittest.cc b/components/exo/keyboard_unittest.cc index b9a228f4..881b667 100644 --- a/components/exo/keyboard_unittest.cc +++ b/components/exo/keyboard_unittest.cc
@@ -12,7 +12,6 @@ #include "components/exo/test/exo_test_base.h" #include "components/exo/test/exo_test_helper.h" #include "testing/gmock/include/gmock/gmock.h" -#include "third_party/khronos/GLES2/gl2.h" #include "ui/aura/client/focus_client.h" #include "ui/events/keycodes/dom/dom_code.h" #include "ui/events/test/event_generator.h" @@ -40,8 +39,8 @@ scoped_ptr<Surface> surface(new Surface); scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); gfx::Size buffer_size(10, 10); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); surface->Attach(buffer.get()); surface->Commit(); @@ -81,8 +80,8 @@ scoped_ptr<Surface> surface(new Surface); scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); gfx::Size buffer_size(10, 10); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); surface->Attach(buffer.get()); surface->Commit(); @@ -111,8 +110,8 @@ scoped_ptr<Surface> surface(new Surface); scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); gfx::Size buffer_size(10, 10); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); surface->Attach(buffer.get()); surface->Commit(); @@ -150,8 +149,8 @@ scoped_ptr<Surface> surface(new Surface); scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); gfx::Size buffer_size(10, 10); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); surface->Attach(buffer.get()); surface->Commit();
diff --git a/components/exo/pointer_unittest.cc b/components/exo/pointer_unittest.cc index b699efb..ed81aef 100644 --- a/components/exo/pointer_unittest.cc +++ b/components/exo/pointer_unittest.cc
@@ -11,7 +11,6 @@ #include "components/exo/test/exo_test_base.h" #include "components/exo/test/exo_test_helper.h" #include "testing/gmock/include/gmock/gmock.h" -#include "third_party/khronos/GLES2/gl2.h" #include "ui/events/event_utils.h" #include "ui/events/test/event_generator.h" @@ -38,8 +37,8 @@ scoped_ptr<Surface> surface(new Surface); scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); gfx::Size buffer_size(10, 10); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); surface->Attach(buffer.get()); surface->Commit(); @@ -60,8 +59,8 @@ scoped_ptr<Surface> surface(new Surface); scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); gfx::Size buffer_size(10, 10); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); surface->Attach(buffer.get()); surface->Commit(); @@ -85,8 +84,8 @@ scoped_ptr<Surface> surface(new Surface); scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); gfx::Size buffer_size(10, 10); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); surface->Attach(buffer.get()); surface->Commit(); @@ -108,8 +107,7 @@ surface->SetSubSurfacePosition(sub_surface.get(), gfx::Point(5, 5)); gfx::Size sub_buffer_size(5, 5); scoped_ptr<Buffer> sub_buffer( - new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(sub_buffer_size), - GL_TEXTURE_2D)); + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(sub_buffer_size))); sub_surface->Attach(sub_buffer.get()); sub_surface->Commit(); surface->Commit(); @@ -132,8 +130,8 @@ scoped_ptr<Surface> surface(new Surface); scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); gfx::Size buffer_size(10, 10); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); surface->Attach(buffer.get()); surface->Commit(); @@ -160,8 +158,8 @@ scoped_ptr<Surface> surface(new Surface); scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); gfx::Size buffer_size(10, 10); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); surface->Attach(buffer.get()); surface->Commit(); @@ -185,8 +183,8 @@ scoped_ptr<Surface> surface(new Surface); scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); gfx::Size buffer_size(10, 10); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); surface->Attach(buffer.get()); surface->Commit();
diff --git a/components/exo/shared_memory.cc b/components/exo/shared_memory.cc index 39e5afd..07f8269 100644 --- a/components/exo/shared_memory.cc +++ b/components/exo/shared_memory.cc
@@ -4,6 +4,7 @@ #include "components/exo/shared_memory.h" +#include <GLES2/gl2extchromium.h> #include <stddef.h> #include <utility> @@ -76,8 +77,18 @@ return nullptr; } + // Zero-copy doesn't provide a benefit in the case of shared memory as an + // implicit copy is required when trying to use these buffers as zero-copy + // buffers. Making the copy explicit allows the buffer to be reused earlier. + bool use_zero_copy = false; + return make_scoped_ptr( - new Buffer(std::move(gpu_memory_buffer), GL_TEXTURE_2D)); + new Buffer(std::move(gpu_memory_buffer), GL_TEXTURE_2D, + // COMMANDS_ISSUED queries are sufficient for shared memory + // buffers as binding to texture is implemented using a call to + // glTexImage2D and the buffer can be reused as soon as that + // command has been issued. + GL_COMMANDS_ISSUED_CHROMIUM, use_zero_copy)); } } // namespace exo
diff --git a/components/exo/shell_surface_unittest.cc b/components/exo/shell_surface_unittest.cc index d7bc5888..fe46f4c 100644 --- a/components/exo/shell_surface_unittest.cc +++ b/components/exo/shell_surface_unittest.cc
@@ -10,7 +10,6 @@ #include "components/exo/test/exo_test_base.h" #include "components/exo/test/exo_test_helper.h" #include "testing/gtest/include/gtest/gtest.h" -#include "third_party/khronos/GLES2/gl2.h" #include "ui/aura/window.h" #include "ui/views/widget/widget.h" @@ -21,8 +20,8 @@ TEST_F(ShellSurfaceTest, Maximize) { gfx::Size buffer_size(256, 256); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); scoped_ptr<Surface> surface(new Surface); scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); @@ -35,8 +34,8 @@ TEST_F(ShellSurfaceTest, Restore) { gfx::Size buffer_size(256, 256); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); scoped_ptr<Surface> surface(new Surface); scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); @@ -51,8 +50,8 @@ TEST_F(ShellSurfaceTest, SetFullscreen) { gfx::Size buffer_size(256, 256); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); scoped_ptr<Surface> surface(new Surface); scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); @@ -105,8 +104,8 @@ TEST_F(ShellSurfaceTest, SetGeometry) { gfx::Size buffer_size(64, 64); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); scoped_ptr<Surface> surface(new Surface); scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); @@ -186,8 +185,8 @@ EXPECT_EQ(ash::wm::WINDOW_STATE_TYPE_FULLSCREEN, has_state_type); gfx::Size buffer_size(64, 64); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); surface->Attach(buffer.get()); surface->Commit(); shell_surface->GetWidget()->Activate();
diff --git a/components/exo/surface.cc b/components/exo/surface.cc index fb29abc..c01993f 100644 --- a/components/exo/surface.cc +++ b/components/exo/surface.cc
@@ -273,7 +273,7 @@ scoped_ptr<cc::SingleReleaseCallback> texture_mailbox_release_callback; if (current_buffer_) { texture_mailbox_release_callback = - current_buffer_->ProduceTextureMailbox(&texture_mailbox); + current_buffer_->ProduceTextureMailbox(&texture_mailbox, false); } if (texture_mailbox_release_callback) { @@ -414,11 +414,11 @@ // Update contents by producing a new texture mailbox for the current buffer. cc::TextureMailbox texture_mailbox; scoped_ptr<cc::SingleReleaseCallback> texture_mailbox_release_callback = - current_buffer_->ProduceTextureMailbox(&texture_mailbox); + current_buffer_->ProduceTextureMailbox(&texture_mailbox, true); if (texture_mailbox_release_callback) { layer()->SetTextureMailbox(texture_mailbox, std::move(texture_mailbox_release_callback), - texture_mailbox.size_in_pixels()); + layer()->bounds().size()); layer()->SetTextureFlipped(false); layer()->SchedulePaint(gfx::Rect(texture_mailbox.size_in_pixels())); }
diff --git a/components/exo/surface_unittest.cc b/components/exo/surface_unittest.cc index 333c81d..b1351a4 100644 --- a/components/exo/surface_unittest.cc +++ b/components/exo/surface_unittest.cc
@@ -8,7 +8,6 @@ #include "components/exo/test/exo_test_base.h" #include "components/exo/test/exo_test_helper.h" #include "testing/gtest/include/gtest/gtest.h" -#include "third_party/khronos/GLES2/gl2.h" #include "ui/gfx/gpu_memory_buffer.h" namespace exo { @@ -22,8 +21,8 @@ TEST_F(SurfaceTest, Attach) { gfx::Size buffer_size(256, 256); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); // Set the release callback that will be run when buffer is no longer in use. int release_buffer_call_count = 0; @@ -49,8 +48,8 @@ TEST_F(SurfaceTest, Damage) { gfx::Size buffer_size(256, 256); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); scoped_ptr<Surface> surface(new Surface); // Attach the buffer to the surface. This will update the pending bounds of @@ -91,8 +90,8 @@ TEST_F(SurfaceTest, SetBufferScale) { gfx::Size buffer_size(512, 512); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); scoped_ptr<Surface> surface(new Surface); // Attach the buffer to the surface. This will update the pending bounds of
diff --git a/components/exo/touch_unittest.cc b/components/exo/touch_unittest.cc index 28206c5..7175475 100644 --- a/components/exo/touch_unittest.cc +++ b/components/exo/touch_unittest.cc
@@ -13,7 +13,6 @@ #include "components/exo/touch.h" #include "components/exo/touch_delegate.h" #include "testing/gmock/include/gmock/gmock.h" -#include "third_party/khronos/GLES2/gl2.h" #include "ui/events/test/event_generator.h" #include "ui/views/widget/widget.h" @@ -44,8 +43,7 @@ new ShellSurface(bottom_surface.get())); gfx::Size bottom_buffer_size(10, 10); scoped_ptr<Buffer> bottom_buffer( - new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(bottom_buffer_size), - GL_TEXTURE_2D)); + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(bottom_buffer_size))); bottom_surface->Attach(bottom_buffer.get()); bottom_surface->Commit(); ash::wm::CenterWindow(bottom_shell_surface->GetWidget()->GetNativeWindow()); @@ -55,8 +53,7 @@ new ShellSurface(top_surface.get())); gfx::Size top_buffer_size(8, 8); scoped_ptr<Buffer> top_buffer( - new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(top_buffer_size), - GL_TEXTURE_2D)); + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(top_buffer_size))); top_surface->Attach(top_buffer.get()); top_surface->Commit(); ash::wm::CenterWindow(top_shell_surface->GetWidget()->GetNativeWindow()); @@ -88,8 +85,8 @@ scoped_ptr<Surface> surface(new Surface); scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); gfx::Size buffer_size(10, 10); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); surface->Attach(buffer.get()); surface->Commit(); @@ -119,8 +116,8 @@ scoped_ptr<Surface> surface(new Surface); scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); gfx::Size buffer_size(10, 10); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); surface->Attach(buffer.get()); surface->Commit(); @@ -156,8 +153,8 @@ scoped_ptr<Surface> surface(new Surface); scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); gfx::Size buffer_size(10, 10); - scoped_ptr<Buffer> buffer(new Buffer( - exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); + scoped_ptr<Buffer> buffer( + new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); surface->Attach(buffer.get()); surface->Commit();
diff --git a/components/favicon_base.gypi b/components/favicon_base.gypi index b1d4669b..b969e54 100644 --- a/components/favicon_base.gypi +++ b/components/favicon_base.gypi
@@ -16,6 +16,7 @@ '../net/net.gyp:net', '../skia/skia.gyp:skia', '../ui/base/ui_base.gyp:ui_base', + '../ui/base/ui_base.gyp:ui_data_pack', '../ui/gfx/gfx.gyp:gfx', '../ui/gfx/gfx.gyp:gfx_geometry', '../url/url.gyp:url_lib',
diff --git a/components/favicon_base/BUILD.gn b/components/favicon_base/BUILD.gn index a34461af..a0c9e9c 100644 --- a/components/favicon_base/BUILD.gn +++ b/components/favicon_base/BUILD.gn
@@ -28,6 +28,7 @@ "//net", "//skia", "//ui/base", + "//ui/base:ui_data_pack", "//ui/gfx", "//ui/gfx/geometry", "//url",
diff --git a/components/filesystem/file_system_app.cc b/components/filesystem/file_system_app.cc index ec3887b..ff182fc7 100644 --- a/components/filesystem/file_system_app.cc +++ b/components/filesystem/file_system_app.cc
@@ -24,7 +24,7 @@ } bool FileSystemApp::AcceptConnection(mojo::Connection* connection) { - connection->AddService<FileSystem>(this); + connection->AddInterface<FileSystem>(this); return true; }
diff --git a/components/filesystem/main.cc b/components/filesystem/main.cc index b84980e..69be93f 100644 --- a/components/filesystem/main.cc +++ b/components/filesystem/main.cc
@@ -7,7 +7,7 @@ #include "mojo/public/c/system/main.h" #include "mojo/shell/public/cpp/application_runner.h" -MojoResult MojoMain(MojoHandle application_request) { +MojoResult MojoMain(MojoHandle request) { mojo::ApplicationRunner runner(new filesystem::FileSystemApp()); - return runner.Run(application_request); + return runner.Run(request); }
diff --git a/components/find_in_page_strings.grdp b/components/find_in_page_strings.grdp new file mode 100644 index 0000000..a1fd5422 --- /dev/null +++ b/components/find_in_page_strings.grdp
@@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<grit-part> + + <message name="IDS_FIND_IN_PAGE_COUNT" desc="How many matches found and what item we are showing"> + <ph name="ACTIVE_MATCH">$1<ex>1</ex></ph> of <ph name="TOTAL_MATCHCOUNT">$2<ex>5</ex></ph> + </message> + <message name="IDS_FIND_IN_PAGE_PREVIOUS_TOOLTIP" desc="The tooltip for the previous button"> + Previous + </message> + <message name="IDS_FIND_IN_PAGE_NEXT_TOOLTIP" desc="The tooltip for the next button"> + Next + </message> + <message name="IDS_FIND_IN_PAGE_CLOSE_TOOLTIP" desc="The tooltip for the close button"> + Close find bar + </message> + +</grit-part>
diff --git a/components/font_service/font_service_app.cc b/components/font_service/font_service_app.cc index 8636c7c..637410e 100644 --- a/components/font_service/font_service_app.cc +++ b/components/font_service/font_service_app.cc
@@ -64,7 +64,7 @@ } bool FontServiceApp::AcceptConnection(mojo::Connection* connection) { - connection->AddService(this); + connection->AddInterface(this); return true; }
diff --git a/components/html_viewer/ax_provider_apptest.cc b/components/html_viewer/ax_provider_apptest.cc index 2ee55873..7b80b76 100644 --- a/components/html_viewer/ax_provider_apptest.cc +++ b/components/html_viewer/ax_provider_apptest.cc
@@ -87,7 +87,7 @@ // Embed the html_viewer in a Window. mus::mojom::WindowTreeClientPtr tree_client; - connection->ConnectToService(&tree_client); + connection->GetInterface(&tree_client); mus::Window* embed_window = window_manager()->NewWindow(); embed_window->Embed(std::move(tree_client)); @@ -102,7 +102,7 @@ array[0]->parent_id = 0u; web_view::mojom::FrameClientPtr frame_client; - connection->ConnectToService(&frame_client); + connection->GetInterface(&frame_client); frame_client->OnConnect( std::move(frame_ptr), 1u, embed_window->id(), web_view::mojom::WindowConnectType::USE_NEW, std::move(array), @@ -110,7 +110,7 @@ // Connect to the AxProvider of the HTML document and get the AxTree. AxProviderPtr ax_provider; - connection->ConnectToService(&ax_provider); + connection->GetInterface(&ax_provider); Array<AxNodePtr> ax_tree; ax_provider->GetTree([&ax_tree](Array<AxNodePtr> tree) { ax_tree = std::move(tree);
diff --git a/components/html_viewer/blink_platform_impl.cc b/components/html_viewer/blink_platform_impl.cc index 1a8d159..53df0ed 100644 --- a/components/html_viewer/blink_platform_impl.cc +++ b/components/html_viewer/blink_platform_impl.cc
@@ -80,11 +80,11 @@ if (shell) { scoped_ptr<mojo::Connection> connection = shell->Connect("mojo:network_service"); - connection->ConnectToService(&web_socket_factory_); - connection->ConnectToService(&url_loader_factory_); + connection->GetInterface(&web_socket_factory_); + connection->GetInterface(&url_loader_factory_); mojo::CookieStorePtr cookie_store; - connection->ConnectToService(&cookie_store); + connection->GetInterface(&cookie_store); cookie_jar_.reset(new WebCookieJarImpl(std::move(cookie_store))); mojo::ClipboardPtr clipboard;
diff --git a/components/html_viewer/blink_resource_constants.h b/components/html_viewer/blink_resource_constants.h index ac9f3d7..cc12ca1 100644 --- a/components/html_viewer/blink_resource_constants.h +++ b/components/html_viewer/blink_resource_constants.h
@@ -89,8 +89,6 @@ {"xhtmlmp.css", IDR_UASTYLE_XHTMLMP_CSS}, {"viewportAndroid.css", IDR_UASTYLE_VIEWPORT_ANDROID_CSS}, {"InspectorOverlayPage.html", IDR_INSPECTOR_OVERLAY_PAGE_HTML}, - {"InjectedScriptSource.js", IDR_INSPECTOR_INJECTED_SCRIPT_SOURCE_JS}, - {"DebuggerScriptSource.js", IDR_INSPECTOR_DEBUGGER_SCRIPT_SOURCE_JS}, {"DocumentExecCommand.js", IDR_PRIVATE_SCRIPT_DOCUMENTEXECCOMMAND_JS}, {"DocumentXMLTreeViewer.css", IDR_PRIVATE_SCRIPT_DOCUMENTXMLTREEVIEWER_CSS}, {"DocumentXMLTreeViewer.js", IDR_PRIVATE_SCRIPT_DOCUMENTXMLTREEVIEWER_JS},
diff --git a/components/html_viewer/content_handler_impl.cc b/components/html_viewer/content_handler_impl.cc index 0b3b2ef..aff23eee 100644 --- a/components/html_viewer/content_handler_impl.cc +++ b/components/html_viewer/content_handler_impl.cc
@@ -23,7 +23,7 @@ } void ContentHandlerImpl::StartApplication( - mojo::ApplicationRequest request, + mojo::ShellClientRequest request, mojo::URLResponsePtr response, const mojo::Callback<void()>& destruct_callback) { // HTMLDocumentApplicationDelegate deletes itself.
diff --git a/components/html_viewer/content_handler_impl.h b/components/html_viewer/content_handler_impl.h index ee52c176..51fa01ef 100644 --- a/components/html_viewer/content_handler_impl.h +++ b/components/html_viewer/content_handler_impl.h
@@ -29,7 +29,7 @@ private: // Overridden from shell::mojom::ContentHandler: void StartApplication( - mojo::ApplicationRequest request, + mojo::ShellClientRequest request, mojo::URLResponsePtr response, const mojo::Callback<void()>& destruct_callback) override;
diff --git a/components/html_viewer/html_document.cc b/components/html_viewer/html_document.cc index fdb4efd..8e1fa129 100644 --- a/components/html_viewer/html_document.cc +++ b/components/html_viewer/html_document.cc
@@ -27,7 +27,7 @@ #include "components/mus/ws/ids.h" #include "mojo/converters/geometry/geometry_type_converters.h" #include "mojo/public/cpp/system/data_pipe.h" -#include "mojo/shell/public/cpp/application_impl.h" +#include "mojo/shell/public/cpp/shell_connection.h" #include "mojo/shell/public/interfaces/shell.mojom.h" #include "third_party/WebKit/public/web/WebLocalFrame.h" #include "ui/gfx/geometry/dip_util.h" @@ -106,12 +106,12 @@ frame_(nullptr), delete_callback_(delete_callback), factory_(factory) { - connection->AddService<web_view::mojom::FrameClient>(this); - connection->AddService<AxProvider>(this); - connection->AddService<mus::mojom::WindowTreeClient>(this); - connection->AddService<devtools_service::DevToolsAgent>(this); + connection->AddInterface<web_view::mojom::FrameClient>(this); + connection->AddInterface<AxProvider>(this); + connection->AddInterface<mus::mojom::WindowTreeClient>(this); + connection->AddInterface<devtools_service::DevToolsAgent>(this); if (IsTestInterfaceEnabled()) - connection->AddService<TestHTMLViewer>(this); + connection->AddInterface<TestHTMLViewer>(this); resource_waiter_.reset( new DocumentResourceWaiter(global_state_, std::move(response), this));
diff --git a/components/html_viewer/html_document.h b/components/html_viewer/html_document.h index b24f2b3..efe7fb11 100644 --- a/components/html_viewer/html_document.h +++ b/components/html_viewer/html_document.h
@@ -20,8 +20,7 @@ #include "mojo/services/network/public/interfaces/url_loader.mojom.h" #include "mojo/shell/public/cpp/app_lifetime_helper.h" #include "mojo/shell/public/cpp/interface_factory.h" -#include "mojo/shell/public/cpp/service_provider_impl.h" -#include "mojo/shell/public/interfaces/application.mojom.h" +#include "mojo/shell/public/interfaces/shell_client.mojom.h" namespace base { class SingleThreadTaskRunner;
diff --git a/components/html_viewer/html_document_application_delegate.cc b/components/html_viewer/html_document_application_delegate.cc index e1208d2c..90f445df9 100644 --- a/components/html_viewer/html_document_application_delegate.cc +++ b/components/html_viewer/html_document_application_delegate.cc
@@ -10,24 +10,25 @@ #include "base/macros.h" #include "components/html_viewer/global_state.h" #include "components/html_viewer/html_document.h" +#include "mojo/shell/public/cpp/interface_binder.h" #include "mojo/shell/public/cpp/shell_client.h" namespace html_viewer { -// ServiceConnectorQueue records all incoming service requests and processes +// InterfaceBinderQueue records all incoming service requests and processes // them once PushRequestsTo() is called. This is useful if you need to delay // processing incoming service requests. -class HTMLDocumentApplicationDelegate::ServiceConnectorQueue - : public mojo::ServiceConnector { +class HTMLDocumentApplicationDelegate::InterfaceBinderQueue + : public mojo::InterfaceBinder { public: - ServiceConnectorQueue() {} - ~ServiceConnectorQueue() override {} + InterfaceBinderQueue() {} + ~InterfaceBinderQueue() override {} void PushRequestsTo(mojo::Connection* connection) { ScopedVector<Request> requests; requests_.swap(requests); for (Request* request : requests) { - connection->GetLocalServiceProvider()->ConnectToService( + connection->GetLocalInterfaces()->ConnectToService( request->interface_name, std::move(request->handle)); } } @@ -38,10 +39,10 @@ mojo::ScopedMessagePipeHandle handle; }; - // mojo::ServiceConnector: - void ConnectToService(mojo::Connection* connection, - const std::string& interface_name, - mojo::ScopedMessagePipeHandle handle) override { + // mojo::InterfaceBinder: + void BindInterface(mojo::Connection* connection, + const std::string& interface_name, + mojo::ScopedMessagePipeHandle handle) override { scoped_ptr<Request> request(new Request); request->interface_name = interface_name; request->handle = std::move(handle); @@ -50,11 +51,11 @@ ScopedVector<Request> requests_; - DISALLOW_COPY_AND_ASSIGN(ServiceConnectorQueue); + DISALLOW_COPY_AND_ASSIGN(InterfaceBinderQueue); }; HTMLDocumentApplicationDelegate::HTMLDocumentApplicationDelegate( - mojo::ApplicationRequest request, + mojo::ShellClientRequest request, mojo::URLResponsePtr response, GlobalState* global_state, scoped_ptr<mojo::AppRefCount> parent_app_refcount, @@ -119,9 +120,9 @@ } else { // HTMLDocument provides services, but is created asynchronously. Queue up // requests until the HTMLDocument is created. - scoped_ptr<ServiceConnectorQueue> service_connector_queue( - new ServiceConnectorQueue); - connection->SetServiceConnector(service_connector_queue.get()); + scoped_ptr<InterfaceBinderQueue> interface_binder_queue( + new InterfaceBinderQueue); + connection->SetDefaultInterfaceBinder(interface_binder_queue.get()); mojo::URLLoaderPtr loader; url_loader_factory_->CreateURLLoader(GetProxy(&loader)); @@ -141,7 +142,7 @@ base::Bind(&HTMLDocumentApplicationDelegate::OnResponseReceived, weak_factory_.GetWeakPtr(), base::Passed(&app_retainer), base::Passed(&loader), connection, - base::Passed(&service_connector_queue))); + base::Passed(&interface_binder_queue))); } return true; } @@ -156,7 +157,7 @@ scoped_ptr<mojo::AppRefCount> app_refcount, mojo::URLLoaderPtr loader, mojo::Connection* connection, - scoped_ptr<ServiceConnectorQueue> connector_queue, + scoped_ptr<InterfaceBinderQueue> binder_queue, mojo::URLResponsePtr response) { // HTMLDocument is destroyed when the hosting view is destroyed, or // explicitly from our destructor. @@ -167,9 +168,9 @@ html_factory_); documents2_.insert(document); - if (connector_queue) { - connector_queue->PushRequestsTo(connection); - connection->SetServiceConnector(nullptr); + if (binder_queue) { + binder_queue->PushRequestsTo(connection); + connection->SetDefaultInterfaceBinder(nullptr); } }
diff --git a/components/html_viewer/html_document_application_delegate.h b/components/html_viewer/html_document_application_delegate.h index 8870021..d80306b 100644 --- a/components/html_viewer/html_document_application_delegate.h +++ b/components/html_viewer/html_document_application_delegate.h
@@ -13,9 +13,9 @@ #include "components/html_viewer/html_factory.h" #include "mojo/public/cpp/bindings/interface_request.h" #include "mojo/services/network/public/interfaces/url_loader_factory.mojom.h" -#include "mojo/shell/public/cpp/application_impl.h" #include "mojo/shell/public/cpp/shell.h" #include "mojo/shell/public/cpp/shell_client.h" +#include "mojo/shell/public/cpp/shell_connection.h" namespace html_viewer { @@ -27,7 +27,7 @@ public HTMLFactory { public: HTMLDocumentApplicationDelegate( - mojo::ApplicationRequest request, + mojo::ShellClientRequest request, mojo::URLResponsePtr response, GlobalState* global_state, scoped_ptr<mojo::AppRefCount> parent_app_refcount, @@ -37,7 +37,7 @@ HTMLFactory* html_factory() { return html_factory_; } private: - class ServiceConnectorQueue; + class InterfaceBinderQueue; ~HTMLDocumentApplicationDelegate() override; @@ -56,7 +56,7 @@ void OnResponseReceived(scoped_ptr<mojo::AppRefCount> app_refcount, mojo::URLLoaderPtr loader, mojo::Connection* connection, - scoped_ptr<ServiceConnectorQueue> connector_queue, + scoped_ptr<InterfaceBinderQueue> binder_queue, mojo::URLResponsePtr response); // HTMLFactory: @@ -64,7 +64,7 @@ HTMLWidgetRootLocal* CreateHTMLWidgetRootLocal( HTMLWidgetRootLocal::CreateParams* params) override; - mojo::ApplicationImpl app_; + mojo::ShellConnection app_; // AppRefCount of the parent (HTMLViewer). scoped_ptr<mojo::AppRefCount> parent_app_refcount_; const mojo::String url_;
diff --git a/components/html_viewer/html_frame_apptest.cc b/components/html_viewer/html_frame_apptest.cc index a52baad..8447f522 100644 --- a/components/html_viewer/html_frame_apptest.cc +++ b/components/html_viewer/html_frame_apptest.cc
@@ -58,7 +58,7 @@ std::string GetFrameText(Connection* connection) { html_viewer::TestHTMLViewerPtr test_html_viewer; - connection->ConnectToService(&test_html_viewer); + connection->GetInterface(&test_html_viewer); std::string result; test_html_viewer->GetContentAsText([&result](const String& mojo_string) { result = mojo_string; @@ -73,7 +73,7 @@ scoped_ptr<base::Value> ExecuteScript(Connection* connection, const std::string& script) { html_viewer::TestHTMLViewerPtr test_html_viewer; - connection->ConnectToService(&test_html_viewer); + connection->GetInterface(&test_html_viewer); scoped_ptr<base::Value> result; test_html_viewer->ExecuteScript(script, [&result](const String& json_string) { result = base::JSONReader::Read(json_string.To<std::string>());
diff --git a/components/html_viewer/html_viewer.cc b/components/html_viewer/html_viewer.cc index 62fcf525..f686b6d 100644 --- a/components/html_viewer/html_viewer.cc +++ b/components/html_viewer/html_viewer.cc
@@ -25,7 +25,7 @@ } bool HTMLViewer::AcceptConnection(mojo::Connection* connection) { - connection->AddService(this); + connection->AddInterface(this); return true; }
diff --git a/components/html_viewer/layout_test_content_handler_impl.cc b/components/html_viewer/layout_test_content_handler_impl.cc index 7683e68..c541e296 100644 --- a/components/html_viewer/layout_test_content_handler_impl.cc +++ b/components/html_viewer/layout_test_content_handler_impl.cc
@@ -62,7 +62,7 @@ } void LayoutTestContentHandlerImpl::StartApplication( - mojo::ApplicationRequest request, + mojo::ShellClientRequest request, mojo::URLResponsePtr response, const mojo::Callback<void()>& destruct_callback) { test_interfaces_->SetTestIsRunning(true);
diff --git a/components/html_viewer/layout_test_content_handler_impl.h b/components/html_viewer/layout_test_content_handler_impl.h index 50f6b5cd..5c39e25 100644 --- a/components/html_viewer/layout_test_content_handler_impl.h +++ b/components/html_viewer/layout_test_content_handler_impl.h
@@ -39,7 +39,7 @@ // ContentHandler: void StartApplication( - mojo::ApplicationRequest request, + mojo::ShellClientRequest request, mojo::URLResponsePtr response, const mojo::Callback<void()>& destruct_callback) override;
diff --git a/components/html_viewer/stats_collection_controller.cc b/components/html_viewer/stats_collection_controller.cc index 15710ec69..0b568a5f 100644 --- a/components/html_viewer/stats_collection_controller.cc +++ b/components/html_viewer/stats_collection_controller.cc
@@ -87,8 +87,8 @@ return nullptr; tracing::StartupPerformanceDataCollectorPtr collector_for_controller; tracing::StartupPerformanceDataCollectorPtr collector_for_caller; - connection->ConnectToService(&collector_for_controller); - connection->ConnectToService(&collector_for_caller); + connection->GetInterface(&collector_for_controller); + connection->GetInterface(&collector_for_caller); gin::Handle<StatsCollectionController> controller = gin::CreateHandle( isolate,
diff --git a/components/html_viewer/touch_handler.cc b/components/html_viewer/touch_handler.cc index ff1253f..c7eeb96 100644 --- a/components/html_viewer/touch_handler.cc +++ b/components/html_viewer/touch_handler.cc
@@ -182,7 +182,7 @@ return; blink::WebTouchEvent web_event = ui::CreateWebTouchEventFromMotionEvent( - *current_motion_event_, result.did_generate_scroll); + *current_motion_event_, result.moved_beyond_slop_region); gesture_provider_.OnTouchEventAck(web_event.uniqueTouchEventId, web_widget_->handleInputEvent(web_event) != blink::WebInputEventResult::NotHandled);
diff --git a/components/html_viewer/web_test_delegate_impl.cc b/components/html_viewer/web_test_delegate_impl.cc index 751b842..9d7e648 100644 --- a/components/html_viewer/web_test_delegate_impl.cc +++ b/components/html_viewer/web_test_delegate_impl.cc
@@ -194,6 +194,11 @@ NOTIMPLEMENTED(); } +void WebTestDelegateImpl::SimulateWebNotificationClose( + const std::string& title, bool by_user) { + NOTIMPLEMENTED(); +} + void WebTestDelegateImpl::SetDeviceScaleFactor(float factor) { NOTIMPLEMENTED(); }
diff --git a/components/html_viewer/web_test_delegate_impl.h b/components/html_viewer/web_test_delegate_impl.h index cae5649f..3007189 100644 --- a/components/html_viewer/web_test_delegate_impl.h +++ b/components/html_viewer/web_test_delegate_impl.h
@@ -72,6 +72,8 @@ void SetDatabaseQuota(int quota) override; void SimulateWebNotificationClick(const std::string& title, int action_index) override; + void SimulateWebNotificationClose(const std::string& title, + bool by_user) override; void SetDeviceScaleFactor(float factor) override; void EnableUseZoomForDSF() override; void SetDeviceColorProfile(const std::string& name) override;
diff --git a/components/json_schema/json_schema_validator.h b/components/json_schema/json_schema_validator.h index e570dc5..f3a5edf 100644 --- a/components/json_schema/json_schema_validator.h +++ b/components/json_schema/json_schema_validator.h
@@ -52,7 +52,7 @@ // if present, "additionalProperties" is to be a schema against which all // additional properties will be validated. // - regular expression supports all syntaxes that re2 accepts. -// See https://code.google.com/p/re2/wiki/Syntax for details. +// See https://github.com/google/re2/blob/master/doc/syntax.txt for details. //============================================================================== class JSONSchemaValidator { public:
diff --git a/components/mus/android_loader.cc b/components/mus/android_loader.cc index eeaddf4..0e9e5d8 100644 --- a/components/mus/android_loader.cc +++ b/components/mus/android_loader.cc
@@ -5,7 +5,7 @@ #include "components/mus/android_loader.h" #include "components/mus/mus_app.h" -#include "mojo/shell/public/cpp/application_impl.h" +#include "mojo/shell/public/cpp/shell_connection.h" namespace mus { @@ -14,9 +14,9 @@ void AndroidLoader::Load( const GURL& url, - mojo::InterfaceRequest<mojo::shell::mojom::Application> request) { + mojo::InterfaceRequest<mojo::shell::mojom::ShellClient> request) { DCHECK(request.is_pending()); - app_.reset(new mojo::ApplicationImpl(new MandolineUIServicesApp, + app_.reset(new mojo::ShellConnection(new MandolineUIServicesApp, std::move(request))); }
diff --git a/components/mus/android_loader.h b/components/mus/android_loader.h index 7ff605d..88270f2 100644 --- a/components/mus/android_loader.h +++ b/components/mus/android_loader.h
@@ -9,7 +9,7 @@ #include "mojo/shell/application_loader.h" namespace mojo { -class ApplicationImpl; +class ShellConnection; } namespace mus { @@ -23,9 +23,9 @@ // Overridden from mojo::shell::ApplicationLoader: void Load( const GURL& url, - mojo::InterfaceRequest<mojo::shell::mojom::Application> request) override; + mojo::InterfaceRequest<mojo::shell::mojom::ShellClient> request) override; - scoped_ptr<mojo::ApplicationImpl> app_; + scoped_ptr<mojo::ShellConnection> app_; DISALLOW_COPY_AND_ASSIGN(AndroidLoader); };
diff --git a/components/mus/gles2/command_buffer_impl.cc b/components/mus/gles2/command_buffer_impl.cc index aa8fa3b..c00a86ee 100644 --- a/components/mus/gles2/command_buffer_impl.cc +++ b/components/mus/gles2/command_buffer_impl.cc
@@ -21,14 +21,14 @@ void RunInitializeCallback( const mojom::CommandBuffer::InitializeCallback& callback, - mojom::CommandBufferInfoPtr info) { - callback.Run(std::move(info)); + mojom::CommandBufferInitializeResultPtr result) { + callback.Run(std::move(result)); } void RunMakeProgressCallback( const mojom::CommandBuffer::MakeProgressCallback& callback, const gpu::CommandBuffer::State& state) { - callback.Run(mojom::CommandBufferState::From(state)); + callback.Run(state); } } // namespace @@ -157,7 +157,8 @@ mojom::CommandBufferLostContextObserverPtr loss_observer, mojo::ScopedSharedBufferHandle shared_state, mojo::Array<int32_t> attribs, - const base::Callback<void(mojom::CommandBufferInfoPtr)>& callback) { + const base::Callback< + void(mojom::CommandBufferInitializeResultPtr)>& callback) { DCHECK(!driver_); driver_.reset(new CommandBufferDriver( gpu::CommandBufferNamespace::MOJO, ++g_next_command_buffer_id, @@ -166,16 +167,15 @@ loss_observer_ = mojo::MakeProxy(loss_observer.PassInterface()); bool result = driver_->Initialize(std::move(shared_state), std::move(attribs)); - mojom::CommandBufferInfoPtr info; + mojom::CommandBufferInitializeResultPtr initialize_result; if (result) { - info = mojom::CommandBufferInfo::New(); - info->command_buffer_namespace = driver_->GetNamespaceID(); - info->command_buffer_id = driver_->GetCommandBufferID(); - info->capabilities = - mojom::GpuCapabilities::From(driver_->GetCapabilities()); + initialize_result = mojom::CommandBufferInitializeResult::New(); + initialize_result->command_buffer_namespace = driver_->GetNamespaceID(); + initialize_result->command_buffer_id = driver_->GetCommandBufferID(); + initialize_result->capabilities = driver_->GetCapabilities(); } gpu_state_->control_task_runner()->PostTask( - FROM_HERE, base::Bind(callback, base::Passed(&info))); + FROM_HERE, base::Bind(callback, base::Passed(&initialize_result))); } bool CommandBufferImpl::SetGetBufferOnGpuThread(int32_t buffer) {
diff --git a/components/mus/gles2/command_buffer_impl.h b/components/mus/gles2/command_buffer_impl.h index cbe91cfc..668e8b2 100644 --- a/components/mus/gles2/command_buffer_impl.h +++ b/components/mus/gles2/command_buffer_impl.h
@@ -67,7 +67,8 @@ mojom::CommandBufferLostContextObserverPtr loss_observer, mojo::ScopedSharedBufferHandle shared_state, mojo::Array<int32_t> attribs, - const base::Callback<void(mojom::CommandBufferInfoPtr)>& callback); + const base::Callback< + void(mojom::CommandBufferInitializeResultPtr)>& callback); bool SetGetBufferOnGpuThread(int32_t buffer); bool FlushOnGpuThread(int32_t put_offset, uint32_t order_num); bool MakeProgressOnGpuThread(
diff --git a/components/mus/gles2/command_buffer_type_conversions.cc b/components/mus/gles2/command_buffer_type_conversions.cc index 47deb56..73e54935 100644 --- a/components/mus/gles2/command_buffer_type_conversions.cc +++ b/components/mus/gles2/command_buffer_type_conversions.cc
@@ -6,181 +6,11 @@ #include "components/mus/public/interfaces/command_buffer.mojom.h" -using mus::mojom::CommandBufferPtr; -using mus::mojom::CommandBufferState; -using mus::mojom::CommandBufferStatePtr; -using mus::mojom::GpuCapabilities; -using mus::mojom::GpuCapabilitiesPtr; using mus::mojom::GpuInfo; using mus::mojom::GpuInfoPtr; -using mus::mojom::GpuPerStagePrecisions; -using mus::mojom::GpuPerStagePrecisionsPtr; -using mus::mojom::GpuShaderPrecision; -using mus::mojom::GpuShaderPrecisionPtr; namespace mojo { -CommandBufferStatePtr -TypeConverter<CommandBufferStatePtr, gpu::CommandBuffer::State>::Convert( - const gpu::CommandBuffer::State& input) { - CommandBufferStatePtr result(CommandBufferState::New()); - result->get_offset = input.get_offset; - result->token = input.token; - result->error = input.error; - result->context_lost_reason = input.context_lost_reason; - result->generation = input.generation; - return result; -} - -gpu::CommandBuffer::State -TypeConverter<gpu::CommandBuffer::State, CommandBufferStatePtr>::Convert( - const CommandBufferStatePtr& input) { - gpu::CommandBuffer::State state; - state.get_offset = input->get_offset; - state.token = input->token; - state.error = static_cast<gpu::error::Error>(input->error); - state.context_lost_reason = - static_cast<gpu::error::ContextLostReason>(input->context_lost_reason); - state.generation = input->generation; - return state; -} - -GpuShaderPrecisionPtr -TypeConverter<GpuShaderPrecisionPtr, gpu::Capabilities::ShaderPrecision>:: - Convert(const gpu::Capabilities::ShaderPrecision& input) { - GpuShaderPrecisionPtr result(GpuShaderPrecision::New()); - result->min_range = input.min_range; - result->max_range = input.max_range; - result->precision = input.precision; - return result; -} - -gpu::Capabilities::ShaderPrecision TypeConverter< - gpu::Capabilities::ShaderPrecision, - GpuShaderPrecisionPtr>::Convert(const GpuShaderPrecisionPtr& input) { - gpu::Capabilities::ShaderPrecision result; - result.min_range = input->min_range; - result.max_range = input->max_range; - result.precision = input->precision; - return result; -} - -GpuPerStagePrecisionsPtr -TypeConverter<GpuPerStagePrecisionsPtr, gpu::Capabilities::PerStagePrecisions>:: - Convert(const gpu::Capabilities::PerStagePrecisions& input) { - GpuPerStagePrecisionsPtr result(GpuPerStagePrecisions::New()); - result->low_int = GpuShaderPrecision::From(input.low_int); - result->medium_int = GpuShaderPrecision::From(input.medium_int); - result->high_int = GpuShaderPrecision::From(input.high_int); - result->low_float = GpuShaderPrecision::From(input.low_float); - result->medium_float = GpuShaderPrecision::From(input.medium_float); - result->high_float = GpuShaderPrecision::From(input.high_float); - return result; -} - -gpu::Capabilities::PerStagePrecisions TypeConverter< - gpu::Capabilities::PerStagePrecisions, - GpuPerStagePrecisionsPtr>::Convert(const GpuPerStagePrecisionsPtr& input) { - gpu::Capabilities::PerStagePrecisions result; - result.low_int = input->low_int.To<gpu::Capabilities::ShaderPrecision>(); - result.medium_int = - input->medium_int.To<gpu::Capabilities::ShaderPrecision>(); - result.high_int = input->high_int.To<gpu::Capabilities::ShaderPrecision>(); - result.low_float = input->low_float.To<gpu::Capabilities::ShaderPrecision>(); - result.medium_float = - input->medium_float.To<gpu::Capabilities::ShaderPrecision>(); - result.high_float = - input->high_float.To<gpu::Capabilities::ShaderPrecision>(); - return result; -} - -GpuCapabilitiesPtr -TypeConverter<GpuCapabilitiesPtr, gpu::Capabilities>::Convert( - const gpu::Capabilities& input) { - GpuCapabilitiesPtr result(GpuCapabilities::New()); - result->vertex_shader_precisions = - GpuPerStagePrecisions::From(input.vertex_shader_precisions); - result->fragment_shader_precisions = - GpuPerStagePrecisions::From(input.fragment_shader_precisions); - result->max_combined_texture_image_units = - input.max_combined_texture_image_units; - result->max_cube_map_texture_size = input.max_cube_map_texture_size; - result->max_fragment_uniform_vectors = input.max_fragment_uniform_vectors; - result->max_renderbuffer_size = input.max_renderbuffer_size; - result->max_texture_image_units = input.max_texture_image_units; - result->max_texture_size = input.max_texture_size; - result->max_varying_vectors = input.max_varying_vectors; - result->max_vertex_attribs = input.max_vertex_attribs; - result->max_vertex_texture_image_units = input.max_vertex_texture_image_units; - result->max_vertex_uniform_vectors = input.max_vertex_uniform_vectors; - result->num_compressed_texture_formats = input.num_compressed_texture_formats; - result->num_shader_binary_formats = input.num_shader_binary_formats; - result->bind_generates_resource_chromium = - input.bind_generates_resource_chromium; - result->post_sub_buffer = input.post_sub_buffer; - result->egl_image_external = input.egl_image_external; - result->texture_format_bgra8888 = input.texture_format_bgra8888; - result->texture_format_etc1 = input.texture_format_etc1; - result->texture_format_etc1_npot = input.texture_format_etc1_npot; - result->texture_rectangle = input.texture_rectangle; - result->iosurface = input.iosurface; - result->texture_usage = input.texture_usage; - result->texture_storage = input.texture_storage; - result->discard_framebuffer = input.discard_framebuffer; - result->sync_query = input.sync_query; - result->image = input.image; - result->future_sync_points = input.future_sync_points; - result->blend_equation_advanced = input.blend_equation_advanced; - result->blend_equation_advanced_coherent = - input.blend_equation_advanced_coherent; - result->flips_vertically = input.flips_vertically; - return result; -} - -gpu::Capabilities TypeConverter<gpu::Capabilities, GpuCapabilitiesPtr>::Convert( - const GpuCapabilitiesPtr& input) { - gpu::Capabilities result; - result.vertex_shader_precisions = - input->vertex_shader_precisions - .To<gpu::Capabilities::PerStagePrecisions>(); - result.fragment_shader_precisions = - input->fragment_shader_precisions - .To<gpu::Capabilities::PerStagePrecisions>(); - result.max_combined_texture_image_units = - input->max_combined_texture_image_units; - result.max_cube_map_texture_size = input->max_cube_map_texture_size; - result.max_fragment_uniform_vectors = input->max_fragment_uniform_vectors; - result.max_renderbuffer_size = input->max_renderbuffer_size; - result.max_texture_image_units = input->max_texture_image_units; - result.max_texture_size = input->max_texture_size; - result.max_varying_vectors = input->max_varying_vectors; - result.max_vertex_attribs = input->max_vertex_attribs; - result.max_vertex_texture_image_units = input->max_vertex_texture_image_units; - result.max_vertex_uniform_vectors = input->max_vertex_uniform_vectors; - result.num_compressed_texture_formats = input->num_compressed_texture_formats; - result.num_shader_binary_formats = input->num_shader_binary_formats; - result.bind_generates_resource_chromium = - input->bind_generates_resource_chromium; - result.post_sub_buffer = input->post_sub_buffer; - result.egl_image_external = input->egl_image_external; - result.texture_format_bgra8888 = input->texture_format_bgra8888; - result.texture_format_etc1 = input->texture_format_etc1; - result.texture_format_etc1_npot = input->texture_format_etc1_npot; - result.texture_rectangle = input->texture_rectangle; - result.iosurface = input->iosurface; - result.texture_usage = input->texture_usage; - result.texture_storage = input->texture_storage; - result.discard_framebuffer = input->discard_framebuffer; - result.sync_query = input->sync_query; - result.image = input->image; - result.future_sync_points = input->future_sync_points; - result.blend_equation_advanced = input->blend_equation_advanced; - result.blend_equation_advanced_coherent = - input->blend_equation_advanced_coherent; - result.flips_vertically = input->flips_vertically; - return result; -} - GpuInfoPtr TypeConverter<GpuInfoPtr, gpu::GPUInfo>::Convert( const gpu::GPUInfo& input) {
diff --git a/components/mus/gles2/command_buffer_type_conversions.h b/components/mus/gles2/command_buffer_type_conversions.h index 082a37b..acbf474f 100644 --- a/components/mus/gles2/command_buffer_type_conversions.h +++ b/components/mus/gles2/command_buffer_type_conversions.h
@@ -15,58 +15,6 @@ namespace mojo { template <> -struct TypeConverter<mus::mojom::CommandBufferStatePtr, - gpu::CommandBuffer::State> { - static mus::mojom::CommandBufferStatePtr Convert( - const gpu::CommandBuffer::State& input); -}; - -template <> -struct TypeConverter<gpu::CommandBuffer::State, - mus::mojom::CommandBufferStatePtr> { - static gpu::CommandBuffer::State Convert( - const mus::mojom::CommandBufferStatePtr& input); -}; - -template <> -struct TypeConverter<mus::mojom::GpuShaderPrecisionPtr, - gpu::Capabilities::ShaderPrecision> { - static mus::mojom::GpuShaderPrecisionPtr Convert( - const gpu::Capabilities::ShaderPrecision& input); -}; - -template <> -struct TypeConverter<gpu::Capabilities::ShaderPrecision, - mus::mojom::GpuShaderPrecisionPtr> { - static gpu::Capabilities::ShaderPrecision Convert( - const mus::mojom::GpuShaderPrecisionPtr& input); -}; - -template <> -struct TypeConverter<mus::mojom::GpuPerStagePrecisionsPtr, - gpu::Capabilities::PerStagePrecisions> { - static mus::mojom::GpuPerStagePrecisionsPtr Convert( - const gpu::Capabilities::PerStagePrecisions& input); -}; - -template <> -struct TypeConverter<gpu::Capabilities::PerStagePrecisions, - mus::mojom::GpuPerStagePrecisionsPtr> { - static gpu::Capabilities::PerStagePrecisions Convert( - const mus::mojom::GpuPerStagePrecisionsPtr& input); -}; - -template <> -struct TypeConverter<mus::mojom::GpuCapabilitiesPtr, gpu::Capabilities> { - static mus::mojom::GpuCapabilitiesPtr Convert(const gpu::Capabilities& input); -}; - -template <> -struct TypeConverter<gpu::Capabilities, mus::mojom::GpuCapabilitiesPtr> { - static gpu::Capabilities Convert(const mus::mojom::GpuCapabilitiesPtr& input); -}; - -template <> struct TypeConverter<mus::mojom::GpuInfoPtr, gpu::GPUInfo> { static mus::mojom::GpuInfoPtr Convert(const gpu::GPUInfo& input); };
diff --git a/components/mus/mus_app.cc b/components/mus/mus_app.cc index cd7a786..f8a3b467 100644 --- a/components/mus/mus_app.cc +++ b/components/mus/mus_app.cc
@@ -91,11 +91,11 @@ } bool MandolineUIServicesApp::AcceptConnection(Connection* connection) { - connection->AddService<Gpu>(this); - connection->AddService<mojom::DisplayManager>(this); - connection->AddService<mojom::WindowManagerFactoryService>(this); - connection->AddService<mojom::WindowTreeFactory>(this); - connection->AddService<WindowTreeHostFactory>(this); + connection->AddInterface<Gpu>(this); + connection->AddInterface<mojom::DisplayManager>(this); + connection->AddInterface<mojom::WindowManagerFactoryService>(this); + connection->AddInterface<mojom::WindowTreeFactory>(this); + connection->AddInterface<WindowTreeHostFactory>(this); return true; }
diff --git a/components/mus/public/cpp/lib/window.cc b/components/mus/public/cpp/lib/window.cc index ba6b77f7..8c2ec50c6 100644 --- a/components/mus/public/cpp/lib/window.cc +++ b/components/mus/public/cpp/lib/window.cc
@@ -18,7 +18,6 @@ #include "components/mus/public/cpp/window_observer.h" #include "components/mus/public/cpp/window_surface.h" #include "components/mus/public/cpp/window_tracker.h" -#include "mojo/shell/public/cpp/service_provider_impl.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/size.h"
diff --git a/components/mus/public/cpp/tests/window_server_test_base.cc b/components/mus/public/cpp/tests/window_server_test_base.cc index 678fc55..ab47629 100644 --- a/components/mus/public/cpp/tests/window_server_test_base.cc +++ b/components/mus/public/cpp/tests/window_server_test_base.cc
@@ -76,7 +76,7 @@ } bool WindowServerTestBase::AcceptConnection(mojo::Connection* connection) { - connection->AddService<mojom::WindowTreeClient>(this); + connection->AddInterface<mojom::WindowTreeClient>(this); return true; }
diff --git a/components/mus/public/interfaces/BUILD.gn b/components/mus/public/interfaces/BUILD.gn index 53d7053..40ebaf8 100644 --- a/components/mus/public/interfaces/BUILD.gn +++ b/components/mus/public/interfaces/BUILD.gn
@@ -12,7 +12,6 @@ "cursor.mojom", "display.mojom", "gpu.mojom", - "gpu_capabilities.mojom", "input_event_constants.mojom", "input_event_matcher.mojom", "input_events.mojom", @@ -33,7 +32,11 @@ ] deps = [ + "//gpu/command_buffer/common:interfaces", "//ui/mojo/geometry:interfaces", "//ui/mojo/ime:interfaces", ] + + typemaps = [ "//gpu/command_buffer/common/mojo.typemap" ] + typemap_deps = [ "//gpu/ipc" ] }
diff --git a/components/mus/public/interfaces/command_buffer.mojom b/components/mus/public/interfaces/command_buffer.mojom index dd0c9fa..d48f987 100644 --- a/components/mus/public/interfaces/command_buffer.mojom +++ b/components/mus/public/interfaces/command_buffer.mojom
@@ -4,30 +4,20 @@ module mus.mojom; -import "components/mus/public/interfaces/gpu_capabilities.mojom"; +import "gpu/command_buffer/common/capabilities.mojom"; +import "gpu/command_buffer/common/command_buffer.mojom"; import "ui/mojo/geometry/geometry.mojom"; -struct CommandBufferInfo { - int32 command_buffer_namespace; - uint64 command_buffer_id; - GpuCapabilities capabilities; -}; - -struct CommandBufferState { - int32 num_entries; - int32 get_offset; - int32 put_offset; - int32 token; - int32 error; // TODO(piman): enum - int32 context_lost_reason; // TODO(piman): enum - uint32 generation; +struct CommandBufferInitializeResult { + int32 command_buffer_namespace; + uint64 command_buffer_id; + gpu.mojom.Capabilities capabilities; }; interface CommandBufferLostContextObserver { DidLoseContext(int32 context_lost_reason); }; - interface CommandBuffer { // Initialize attempts to initialize the command buffer. // If the context is lost after creation the LostContext method on the @@ -35,10 +25,10 @@ // closed. Initialize(CommandBufferLostContextObserver lost_observer, handle<shared_buffer> shared_state, - array<int32> attribs) => (CommandBufferInfo? info); + array<int32> attribs) => (CommandBufferInitializeResult? result); SetGetBuffer(int32 buffer); Flush(int32 put_offset); - MakeProgress(int32 last_get_offset) => (CommandBufferState state); + MakeProgress(int32 last_get_offset) => (gpu.mojom.CommandBufferState state); RegisterTransferBuffer( int32 id, handle<shared_buffer> transfer_buffer, uint32 size); DestroyTransferBuffer(int32 id);
diff --git a/components/mus/public/interfaces/compositor_frame.mojom b/components/mus/public/interfaces/compositor_frame.mojom index 38ab06f6..aaab87a4 100644 --- a/components/mus/public/interfaces/compositor_frame.mojom +++ b/components/mus/public/interfaces/compositor_frame.mojom
@@ -4,8 +4,10 @@ module mus.mojom; -import "ui/mojo/geometry/geometry.mojom"; import "components/mus/public/interfaces/quads.mojom"; +import "ui/mojo/geometry/geometry.mojom"; +import "gpu/command_buffer/common/mailbox_holder.mojom"; +import "gpu/command_buffer/common/sync_token.mojom"; enum ResourceFormat { RGBA_8888, @@ -17,48 +19,14 @@ ETC1, }; -// See src/gpu/command_buffer/common/constants.h -enum CommandBufferNamespace { - INVALID = -1, - - GPU_IO, - IN_PROCESS, - MOJO, - MOJO_LOCAL, - OLD_SYNC_POINTS, - - NUM_COMMAND_BUFFER_NAMESPACES -}; - -// See src/gpu/command_buffer/common/sync_token.h -struct SyncToken { - bool verified_flush; - CommandBufferNamespace namespace_id; - int32 extra_data_field; - uint64 command_buffer_id; - uint64 release_count; -}; - // See src/cc/resources/returned_resource.h. struct ReturnedResource { uint32 id; - SyncToken sync_token; + gpu.mojom.SyncToken sync_token; int32 count; bool lost; }; -// See src/gpu/command_buffer/common/mailbox.h. -struct Mailbox { - array<int8, 64> name; -}; - -// See src/gpu/command_buffer/common/mailbox_holder.h. -struct MailboxHolder { - Mailbox mailbox; - SyncToken sync_token; - uint32 texture_target; -}; - // A TransferableResource is a graphics resource such as a texture or a bitmap // in shared memory (software mode) that is shared between the window server and // a client. This data structure is used to manage reuse of @@ -70,7 +38,7 @@ ResourceFormat format; uint32 filter; mojo.Size size; - MailboxHolder mailbox_holder; + gpu.mojom.MailboxHolder mailbox_holder; bool read_lock_fences_enabled; bool is_software; bool is_overlay_candidate;
diff --git a/components/mus/public/interfaces/gpu_capabilities.mojom b/components/mus/public/interfaces/gpu_capabilities.mojom deleted file mode 100644 index d56b337a..0000000 --- a/components/mus/public/interfaces/gpu_capabilities.mojom +++ /dev/null
@@ -1,55 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -module mus.mojom; - -struct GpuShaderPrecision { - int32 min_range; - int32 max_range; - int32 precision; -}; - -struct GpuPerStagePrecisions { - GpuShaderPrecision low_int; - GpuShaderPrecision medium_int; - GpuShaderPrecision high_int; - GpuShaderPrecision low_float; - GpuShaderPrecision medium_float; - GpuShaderPrecision high_float; -}; - -struct GpuCapabilities { - GpuPerStagePrecisions vertex_shader_precisions; - GpuPerStagePrecisions fragment_shader_precisions; - int32 max_combined_texture_image_units; - int32 max_cube_map_texture_size; - int32 max_fragment_uniform_vectors; - int32 max_renderbuffer_size; - int32 max_texture_image_units; - int32 max_texture_size; - int32 max_varying_vectors; - int32 max_vertex_attribs; - int32 max_vertex_texture_image_units; - int32 max_vertex_uniform_vectors; - int32 num_compressed_texture_formats; - int32 num_shader_binary_formats; - int32 bind_generates_resource_chromium; - - bool post_sub_buffer; - bool egl_image_external; - bool texture_format_bgra8888; - bool texture_format_etc1; - bool texture_format_etc1_npot; - bool texture_rectangle; - bool iosurface; - bool texture_usage; - bool texture_storage; - bool discard_framebuffer; - bool sync_query; - bool image; - bool future_sync_points; - bool blend_equation_advanced; - bool blend_equation_advanced_coherent; - bool flips_vertically; -};
diff --git a/components/mus/public/interfaces/quads.mojom b/components/mus/public/interfaces/quads.mojom index dcc4168..1b0ada83 100644 --- a/components/mus/public/interfaces/quads.mojom +++ b/components/mus/public/interfaces/quads.mojom
@@ -106,6 +106,8 @@ uint32 v_plane_resource_id; uint32 a_plane_resource_id; YUVColorSpace color_space; + float resource_offset; + float resource_multiplier; }; enum Material {
diff --git a/components/mus/ws/window_tree_apptest.cc b/components/mus/ws/window_tree_apptest.cc index cb43c7ee..2951037 100644 --- a/components/mus/ws/window_tree_apptest.cc +++ b/components/mus/ws/window_tree_apptest.cc
@@ -593,7 +593,7 @@ // mojo::ShellClient implementation. bool AcceptConnection(Connection* connection) override { - connection->AddService(client_factory_.get()); + connection->AddInterface(client_factory_.get()); return true; }
diff --git a/components/nacl/browser/nacl_file_host.cc b/components/nacl/browser/nacl_file_host.cc index 0c10254..36c9eba 100644 --- a/components/nacl/browser/nacl_file_host.cc +++ b/components/nacl/browser/nacl_file_host.cc
@@ -43,9 +43,9 @@ } typedef void (*WriteFileInfoReply)(IPC::Message* reply_msg, - IPC::PlatformFileForTransit file_desc, - uint64_t file_token_lo, - uint64_t file_token_hi); + const IPC::PlatformFileForTransit& file_desc, + const uint64_t& file_token_lo, + const uint64_t& file_token_hi); void DoRegisterOpenedNaClExecutableFile( scoped_refptr<nacl::NaClHostMessageFilter> nacl_host_message_filter,
diff --git a/components/nacl/loader/nacl_helper_linux.h b/components/nacl/loader/nacl_helper_linux.h index 644e26b..161a8d6 100644 --- a/components/nacl/loader/nacl_helper_linux.h +++ b/components/nacl/loader/nacl_helper_linux.h
@@ -24,7 +24,7 @@ // The next set of constants define global Linux file descriptors. // For communications between NaCl loader and browser. // See also content/common/zygote_main_linux.cc and -// http://code.google.com/p/chromium/wiki/LinuxZygote +// https://chromium.googlesource.com/chromium/src/+/master/docs/linux_zygote.md // For communications between NaCl loader and zygote. #define kNaClZygoteDescriptor 3
diff --git a/components/nacl/loader/nacl_main_platform_delegate_linux.cc b/components/nacl/loader/nacl_main_platform_delegate_linux.cc index 8e7be40..a5924541 100644 --- a/components/nacl/loader/nacl_main_platform_delegate_linux.cc +++ b/components/nacl/loader/nacl_main_platform_delegate_linux.cc
@@ -7,7 +7,7 @@ void NaClMainPlatformDelegate::EnableSandbox( const content::MainFunctionParams& parameters) { // The setuid sandbox is started in the zygote process: zygote_main_linux.cc - // http://code.google.com/p/chromium/wiki/LinuxSUIDSandbox + // https://chromium.googlesource.com/chromium/src/+/master/docs/linux_suid_sandbox.md // // The seccomp sandbox is started in the renderer. // http://code.google.com/p/seccompsandbox/
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer.cc b/components/page_load_metrics/browser/metrics_web_contents_observer.cc index d2decce..5ca418e 100644 --- a/components/page_load_metrics/browser/metrics_web_contents_observer.cc +++ b/components/page_load_metrics/browser/metrics_web_contents_observer.cc
@@ -96,9 +96,6 @@ namespace internal { -const char kProvisionalEvents[] = "PageLoad.Events.Provisional"; -const char kBackgroundProvisionalEvents[] = - "PageLoad.Events.Provisional.Background"; const char kErrorEvents[] = "PageLoad.Events.InternalError"; } // namespace internal @@ -152,6 +149,13 @@ } } +void PageLoadTracker::FailedProvisionalLoad( + content::NavigationHandle* navigation_handle) { + for (const auto& observer : observers_) { + observer->OnFailedProvisionalLoad(navigation_handle); + } +} + void PageLoadTracker::Redirect(content::NavigationHandle* navigation_handle) { for (const auto& observer : observers_) { observer->OnRedirect(navigation_handle); @@ -255,16 +259,6 @@ abort_time_ = timestamp; } -void PageLoadTracker::RecordProvisionalEvent(ProvisionalLoadEvent event) { - if (HasBackgrounded()) { - UMA_HISTOGRAM_ENUMERATION(internal::kBackgroundProvisionalEvents, event, - PROVISIONAL_LOAD_LAST_ENTRY); - } else { - UMA_HISTOGRAM_ENUMERATION(internal::kProvisionalEvents, event, - PROVISIONAL_LOAD_LAST_ENTRY); - } -} - // static MetricsWebContentsObserver::MetricsWebContentsObserver( content::WebContents* web_contents, @@ -343,27 +337,24 @@ // TODO(csharrison): Track changes to NavigationHandle for signals when this // is the case (HTTP response headers). if (!navigation_handle->HasCommitted()) { - const ProvisionalLoadEvent event = [](net::Error error) { - switch (error) { - case net::OK: - // When a finished navigation that didn't commit has a net error code - // of OK, it indicates that the provisional load was stopped by the - // user. - return PROVISIONAL_LOAD_STOPPED; - case net::ERR_ABORTED: - return PROVISIONAL_LOAD_ERR_ABORTED; - default: - return PROVISIONAL_LOAD_ERR_FAILED_NON_ABORT; - } - }(navigation_handle->GetNetErrorCode()); - finished_nav->RecordProvisionalEvent(event); - if (event != PROVISIONAL_LOAD_ERR_FAILED_NON_ABORT) { + finished_nav->FailedProvisionalLoad(navigation_handle); + + net::Error error = navigation_handle->GetNetErrorCode(); + + // net::OK: This case occurs when the NavigationHandle finishes and reports + // !HasCommitted(), but reports no net::Error. This should not occur + // pre-PlzNavigate, but afterwards it should represent the navigation + // stopped by the user before it was ready to commit. + // net::ERR_ABORTED: An aborted provisional load has error net::ERR_ABORTED. + // Note that this can come from some non user-initiated errors, such as + // downloads, or 204 responses. See crbug.com/542369. + if ((error == net::OK) || (error == net::ERR_ABORTED)) { finished_nav->NotifyAbort(ABORT_OTHER, base::TimeTicks::Now()); aborted_provisional_loads_.push_back(std::move(finished_nav)); } + return; } - finished_nav->RecordProvisionalEvent(PROVISIONAL_LOAD_COMMITTED); // Don't treat a same-page nav as a new page load. if (navigation_handle->IsSamePage())
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer.h b/components/page_load_metrics/browser/metrics_web_contents_observer.h index a1e0cb3..3dd626b 100644 --- a/components/page_load_metrics/browser/metrics_web_contents_observer.h +++ b/components/page_load_metrics/browser/metrics_web_contents_observer.h
@@ -31,41 +31,10 @@ namespace internal { -extern const char kProvisionalEvents[]; -extern const char kBackgroundProvisionalEvents[]; extern const char kErrorEvents[]; } // namespace internal -// ProvisionalLoadEvents count all main frame navigations before they commit. -// The events in this enum are all disjoint, and summing them yields the total -// number of main frame provisional loads. -// -// If you add elements from this enum, make sure you update the enum -// value in histograms.xml. Only add elements to the end to prevent -// inconsistencies between versions. -enum ProvisionalLoadEvent { - // This case occurs when the NavigationHandle finishes and reports - // !HasCommitted(), but reports no net::Error. This should not occur - // pre-PlzNavigate, but afterwards it should represent the navigation stopped - // by the user before it was ready to commit. - PROVISIONAL_LOAD_STOPPED, - - // An aborted provisional load has error net::ERR_ABORTED. Note that this can - // come from some non user-initiated errors, such as downloads, or 204 - // responses. See crbug.com/542369. - PROVISIONAL_LOAD_ERR_ABORTED, - - // This event captures all the other ways a provisional load can fail. - PROVISIONAL_LOAD_ERR_FAILED_NON_ABORT, - - // Counts the number of successful commits. - PROVISIONAL_LOAD_COMMITTED, - - // Add values before this final count. - PROVISIONAL_LOAD_LAST_ENTRY -}; - // These errors are internal to the page_load_metrics subsystem and do not // reflect actual errors that occur during a page load. // @@ -132,12 +101,12 @@ ~PageLoadTracker(); void Redirect(content::NavigationHandle* navigation_handle); void Commit(content::NavigationHandle* navigation_handle); + void FailedProvisionalLoad(content::NavigationHandle* navigation_handle); void WebContentsHidden(); void WebContentsShown(); // Returns true if the timing was successfully updated. bool UpdateTiming(const PageLoadTiming& timing); - void RecordProvisionalEvent(ProvisionalLoadEvent event); bool HasBackgrounded(); void set_renderer_tracked(bool renderer_tracked); @@ -196,8 +165,9 @@ DISALLOW_COPY_AND_ASSIGN(PageLoadTracker); }; -// MetricsWebContentsObserver logs page load UMA metrics based on -// IPC messages received from a MetricsRenderFrameObserver. +// MetricsWebContentsObserver tracks page loads and loading metrics +// related data based on IPC messages received from a +// MetricsRenderFrameObserver. class MetricsWebContentsObserver : public content::WebContentsObserver, public content::WebContentsUserData<MetricsWebContentsObserver> {
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc index 16bffa7..3320b48f 100644 --- a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc +++ b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc
@@ -73,10 +73,7 @@ class MetricsWebContentsObserverTest : public content::RenderViewHostTestHarness { public: - MetricsWebContentsObserverTest() - : num_provisional_events_(0), - num_provisional_events_bg_(0), - num_errors_(0) {} + MetricsWebContentsObserverTest() : num_errors_(0) {} void SetUp() override { RenderViewHostTestHarness::SetUp(); @@ -90,30 +87,12 @@ observer_->WasShown(); } - void CheckProvisionalEvent(ProvisionalLoadEvent event, - int count, - bool background) { - if (background) { - histogram_tester_.ExpectBucketCount( - internal::kBackgroundProvisionalEvents, event, count); - num_provisional_events_bg_ += count; - } else { - histogram_tester_.ExpectBucketCount(internal::kProvisionalEvents, event, - count); - num_provisional_events_ += count; - } - } - void CheckErrorEvent(InternalErrorLoadEvent error, int count) { histogram_tester_.ExpectBucketCount(internal::kErrorEvents, error, count); num_errors_ += count; } void CheckTotalEvents() { - histogram_tester_.ExpectTotalCount(internal::kProvisionalEvents, - num_provisional_events_); - histogram_tester_.ExpectTotalCount(internal::kBackgroundProvisionalEvents, - num_provisional_events_bg_); histogram_tester_.ExpectTotalCount(internal::kErrorEvents, num_errors_); } @@ -134,8 +113,6 @@ scoped_ptr<MetricsWebContentsObserver> observer_; private: - int num_provisional_events_; - int num_provisional_events_bg_; int num_errors_; DISALLOW_COPY_AND_ASSIGN(MetricsWebContentsObserverTest); @@ -207,53 +184,6 @@ AssertNoTimingReported(); } -TEST_F(MetricsWebContentsObserverTest, FailProvisionalLoad) { - content::WebContentsTester* web_contents_tester = - content::WebContentsTester::For(web_contents()); - - web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); - content::RenderFrameHostTester* rfh_tester = - content::RenderFrameHostTester::For(main_rfh()); - rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl), - net::ERR_TIMED_OUT); - rfh_tester->SimulateNavigationStop(); - - CheckProvisionalEvent(PROVISIONAL_LOAD_ERR_FAILED_NON_ABORT, 1, false); - CheckProvisionalEvent(PROVISIONAL_LOAD_ERR_ABORTED, 0, false); - CheckTotalEvents(); -} - -TEST_F(MetricsWebContentsObserverTest, AbortProvisionalLoad) { - content::WebContentsTester* web_contents_tester = - content::WebContentsTester::For(web_contents()); - - web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); - content::RenderFrameHostTester* rfh_tester = - content::RenderFrameHostTester::For(main_rfh()); - rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl), net::ERR_ABORTED); - rfh_tester->SimulateNavigationStop(); - - CheckProvisionalEvent(PROVISIONAL_LOAD_ERR_FAILED_NON_ABORT, 0, false); - CheckProvisionalEvent(PROVISIONAL_LOAD_ERR_ABORTED, 1, false); - CheckTotalEvents(); -} - -TEST_F(MetricsWebContentsObserverTest, AbortProvisionalLoadInBackground) { - content::WebContentsTester* web_contents_tester = - content::WebContentsTester::For(web_contents()); - - observer_->WasHidden(); - web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); - content::RenderFrameHostTester* rfh_tester = - content::RenderFrameHostTester::For(main_rfh()); - rfh_tester->SimulateNavigationError(GURL(kDefaultTestUrl), net::ERR_ABORTED); - rfh_tester->SimulateNavigationStop(); - - CheckProvisionalEvent(PROVISIONAL_LOAD_ERR_FAILED_NON_ABORT, 0, true); - CheckProvisionalEvent(PROVISIONAL_LOAD_ERR_ABORTED, 1, true); - CheckTotalEvents(); -} - TEST_F(MetricsWebContentsObserverTest, DontLogIrrelevantNavigation) { PageLoadTiming timing; timing.navigation_start = base::Time::FromDoubleT(10); @@ -270,7 +200,6 @@ web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); - CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 2, false); CheckErrorEvent(ERR_IPC_FROM_BAD_URL_SCHEME, 1); CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1); CheckTotalEvents(); @@ -316,7 +245,6 @@ PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing2), main_rfh()); - CheckProvisionalEvent(PROVISIONAL_LOAD_COMMITTED, 1, false); CheckErrorEvent(ERR_BAD_TIMING_IPC, 1); CheckTotalEvents(); }
diff --git a/components/page_load_metrics/browser/page_load_metrics_observer.h b/components/page_load_metrics/browser/page_load_metrics_observer.h index 7e01f37..06705b2 100644 --- a/components/page_load_metrics/browser/page_load_metrics_observer.h +++ b/components/page_load_metrics/browser/page_load_metrics_observer.h
@@ -103,8 +103,15 @@ // first data for the request. The navigation handle holds relevant data for // the navigation, but will be destroyed soon after this call. Don't hold a // reference to it. + // Note that this does not get called for same page navigations. virtual void OnCommit(content::NavigationHandle* navigation_handle) {} + // OnFailedProvisionalLoad is triggered when a provisional load failed and did + // not commit. Note that provisional loads that result in downloads or 204s + // are aborted by the system, and thus considered failed provisional loads. + virtual void OnFailedProvisionalLoad( + content::NavigationHandle* navigation_handle) {} + // OnComplete is triggered when we are ready to record metrics for this page // load. This will happen some time after commit. The PageLoadTiming struct // contains timing data and the PageLoadExtraInfo struct contains other useful
diff --git a/components/password_manager/content/browser/content_password_manager_driver.cc b/components/password_manager/content/browser/content_password_manager_driver.cc index 404fed85..054aa1d 100644 --- a/components/password_manager/content/browser/content_password_manager_driver.cc +++ b/components/password_manager/content/browser/content_password_manager_driver.cc
@@ -115,6 +115,11 @@ host->Send(new AutofillMsg_FindFocusedPasswordForm(host->GetRoutingID())); } +void ContentPasswordManagerDriver::GeneratePassword() { + content::RenderFrameHost* host = render_frame_host_; + host->Send(new AutofillMsg_GeneratePassword(host->GetRoutingID())); +} + void ContentPasswordManagerDriver::SendLoggingAvailability() { render_frame_host_->Send(new AutofillMsg_SetLoggingState( render_frame_host_->GetRoutingID(),
diff --git a/components/password_manager/content/browser/content_password_manager_driver.h b/components/password_manager/content/browser/content_password_manager_driver.h index fdd0412e..f2bf8822 100644 --- a/components/password_manager/content/browser/content_password_manager_driver.h +++ b/components/password_manager/content/browser/content_password_manager_driver.h
@@ -67,6 +67,7 @@ const base::string16& password) override; void ClearPreviewedForm() override; void ForceSavePassword() override; + void GeneratePassword() override; void SendLoggingAvailability() override; PasswordGenerationManager* GetPasswordGenerationManager() override;
diff --git a/components/password_manager/core/browser/login_database.cc b/components/password_manager/core/browser/login_database.cc index 36617d9..37a4a1f 100644 --- a/components/password_manager/core/browser/login_database.cc +++ b/components/password_manager/core/browser/login_database.cc
@@ -1049,7 +1049,7 @@ DCHECK_GE(PasswordForm::SCHEME_LAST, scheme_int); form->scheme = static_cast<PasswordForm::Scheme>(scheme_int); int type_int = s.ColumnInt(COLUMN_PASSWORD_TYPE); - DCHECK(type_int >= 0 && type_int <= PasswordForm::TYPE_GENERATED); + DCHECK(type_int >= 0 && type_int <= PasswordForm::TYPE_LAST) << type_int; form->type = static_cast<PasswordForm::Type>(type_int); if (s.ColumnByteLength(COLUMN_POSSIBLE_USERNAMES)) { base::Pickle pickle(
diff --git a/components/password_manager/core/browser/password_manager_client.cc b/components/password_manager/core/browser/password_manager_client.cc index b597e9c6..c7b1198 100644 --- a/components/password_manager/core/browser/password_manager_client.cc +++ b/components/password_manager/core/browser/password_manager_client.cc
@@ -22,6 +22,8 @@ void PasswordManagerClient::ForceSavePassword() { } +void PasswordManagerClient::GeneratePassword() {} + void PasswordManagerClient::PasswordWasAutofilled( const autofill::PasswordFormMap& best_matches, const GURL& origin) const {}
diff --git a/components/password_manager/core/browser/password_manager_client.h b/components/password_manager/core/browser/password_manager_client.h index 3ac83ecb..449d621 100644 --- a/components/password_manager/core/browser/password_manager_client.h +++ b/components/password_manager/core/browser/password_manager_client.h
@@ -98,6 +98,10 @@ // password in the focused password field. virtual void ForceSavePassword(); + // Informs the embedder that the user has manually requested to generate a + // password in the focused password field. + virtual void GeneratePassword(); + // Informs the embedder that automatic signing in just happened. The form // returned to the site is |local_forms[0]|. |local_forms| and // |federated_forms| contain all the local and federated credentials for the
diff --git a/components/password_manager/core/browser/password_manager_driver.h b/components/password_manager/core/browser/password_manager_driver.h index 4f397c8..390de2fe 100644 --- a/components/password_manager/core/browser/password_manager_driver.h +++ b/components/password_manager/core/browser/password_manager_driver.h
@@ -74,6 +74,10 @@ // the corresponding password form, so that it can be saved. virtual void ForceSavePassword() {} + // Tells the driver to find the focused password field and to show generation + // popup at it. + virtual void GeneratePassword() {} + // Returns the PasswordGenerationManager associated with this instance. virtual PasswordGenerationManager* GetPasswordGenerationManager() = 0;
diff --git a/components/password_manager/core/common/experiments.cc b/components/password_manager/core/common/experiments.cc index c2329b1c..b7399d7 100644 --- a/components/password_manager/core/common/experiments.cc +++ b/components/password_manager/core/common/experiments.cc
@@ -13,4 +13,9 @@ password_manager::features::kEnablePasswordForceSaving); } +bool ManualPasswordGenerationEnabled() { + return base::FeatureList::IsEnabled( + password_manager::features::kEnableManualPasswordGeneration); +} + } // namespace password_manager
diff --git a/components/password_manager/core/common/experiments.h b/components/password_manager/core/common/experiments.h index 2c6aa9cd..13b83b9 100644 --- a/components/password_manager/core/common/experiments.h +++ b/components/password_manager/core/common/experiments.h
@@ -10,6 +10,9 @@ // True iff the force-saving of passwords is enabled. bool ForceSavingExperimentEnabled(); +// True iff the manual password generation is enabled. +bool ManualPasswordGenerationEnabled(); + } // namespace password_manager #endif // COMPONENTS_PASSWORD_MANAGER_CORE_COMMON_EXPERIMENTS_H_
diff --git a/components/password_manager/core/common/password_manager_features.cc b/components/password_manager/core/common/password_manager_features.cc index eeb74426..c1f9f4d9 100644 --- a/components/password_manager/core/common/password_manager_features.cc +++ b/components/password_manager/core/common/password_manager_features.cc
@@ -23,6 +23,10 @@ const base::Feature kEnablePasswordForceSaving = { "enable-password-force-saving", base::FEATURE_DISABLED_BY_DEFAULT}; +// Enable the user to trigger password generation manually. +extern const base::Feature kEnableManualPasswordGeneration = { + "enable-manual-password-generation", base::FEATURE_DISABLED_BY_DEFAULT}; + } // namespace features } // namespace password_manager
diff --git a/components/password_manager/core/common/password_manager_features.h b/components/password_manager/core/common/password_manager_features.h index 68390eb2..32cfcb8 100644 --- a/components/password_manager/core/common/password_manager_features.h +++ b/components/password_manager/core/common/password_manager_features.h
@@ -18,6 +18,7 @@ // alongside the definition of their values in the .cc file. extern const base::Feature kEnableAutomaticPasswordSaving; +extern const base::Feature kEnableManualPasswordGeneration; extern const base::Feature kEnablePasswordChangeSupport; extern const base::Feature kEnablePasswordForceSaving;
diff --git a/components/password_manager_strings.grdp b/components/password_manager_strings.grdp index 341c919b..7f988e7 100644 --- a/components/password_manager_strings.grdp +++ b/components/password_manager_strings.grdp
@@ -1,11 +1,17 @@ <?xml version="1.0" encoding="utf-8"?> <grit-part> - <message name="IDS_PASSWORD_MANAGER_EMPTY_LOGIN" desc="A placeholder for the 'Manage Passwords' bubble's empty username label"> - (No username) - </message> - <message name="IDS_PASSWORD_MANAGER_SMART_LOCK" desc="The brand name of the password manager for the title of the save password bubble when a user is signed in."> - Google Smart Lock - </message> + <message name="IDS_PASSWORD_MANAGER_EMPTY_LOGIN" desc="A placeholder for the 'Manage Passwords' bubble's empty username label"> + (No username) + </message> + <message name="IDS_PASSWORD_MANAGER_EXCEPTIONS_TAB_TITLE" desc="Title for 'Never saved' tab"> + Never saved + </message> + <message name="IDS_PASSWORD_MANAGER_SHOW_PASSWORDS_TAB_TITLE" desc="Title for 'Saved passwords' tab"> + Saved passwords + </message> + <message name="IDS_PASSWORD_MANAGER_SMART_LOCK" desc="The brand name of the password manager for the title of the save password bubble when a user is signed in."> + Google Smart Lock + </message> </grit-part>
diff --git a/components/pdf_viewer/pdf_viewer.cc b/components/pdf_viewer/pdf_viewer.cc index 1fa2984..e46e7df 100644 --- a/components/pdf_viewer/pdf_viewer.cc +++ b/components/pdf_viewer/pdf_viewer.cc
@@ -27,10 +27,10 @@ #include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/strong_binding.h" #include "mojo/services/tracing/public/cpp/tracing_impl.h" -#include "mojo/shell/public/cpp/application_impl.h" #include "mojo/shell/public/cpp/application_runner.h" #include "mojo/shell/public/cpp/interface_factory_impl.h" #include "mojo/shell/public/cpp/shell_client.h" +#include "mojo/shell/public/cpp/shell_connection.h" #include "mojo/shell/public/interfaces/content_handler.mojom.h" #include "mojo/shell/public/interfaces/shell.mojom.h" #include "third_party/pdfium/public/fpdf_ext.h" @@ -64,7 +64,7 @@ root_(nullptr), frame_client_binding_(this), delete_callback_(delete_callback) { - connection->AddService(this); + connection->AddInterface(this); } void Close() { @@ -242,7 +242,7 @@ public mojo::InterfaceFactory<mus::mojom::WindowTreeClient> { public: PDFViewerApplicationDelegate( - mojo::ApplicationRequest request, + mojo::ShellClientRequest request, mojo::URLResponsePtr response, const mojo::Callback<void()>& destruct_callback) : app_(this, @@ -287,7 +287,7 @@ // mojo::ShellClient: bool AcceptConnection(mojo::Connection* connection) override { - connection->AddService<mus::mojom::WindowTreeClient>(this); + connection->AddInterface<mus::mojom::WindowTreeClient>(this); return true; } @@ -305,7 +305,7 @@ mus::WindowTreeConnection::CreateType::DONT_WAIT_FOR_EMBED); } - mojo::ApplicationImpl app_; + mojo::ShellConnection app_; std::string data_; std::vector<PDFView*> pdf_views_; FPDF_DOCUMENT doc_; @@ -325,7 +325,7 @@ private: // mojo::shell::mojom::ContentHandler: void StartApplication( - mojo::ApplicationRequest request, + mojo::ShellClientRequest request, mojo::URLResponsePtr response, const mojo::Callback<void()>& destruct_callback) override { new PDFViewerApplicationDelegate(std::move(request), std::move(response), @@ -356,7 +356,7 @@ } bool AcceptConnection(mojo::Connection* connection) override { - connection->AddService(this); + connection->AddInterface(this); return true; } @@ -374,7 +374,7 @@ } // namespace } // namespace pdf_viewer -MojoResult MojoMain(MojoHandle application_request) { +MojoResult MojoMain(MojoHandle request) { mojo::ApplicationRunner runner(new pdf_viewer::PDFViewer()); - return runner.Run(application_request); + return runner.Run(request); }
diff --git a/components/plugins/renderer/webview_plugin.cc b/components/plugins/renderer/webview_plugin.cc index 995ff09..cb641bc 100644 --- a/components/plugins/renderer/webview_plugin.cc +++ b/components/plugins/renderer/webview_plugin.cc
@@ -6,6 +6,7 @@ #include <stddef.h> +#include "base/auto_reset.h" #include "base/message_loop/message_loop.h" #include "base/metrics/histogram_macros.h" #include "base/numerics/safe_conversions.h" @@ -55,7 +56,8 @@ container_(nullptr), web_view_(WebView::create(this)), finished_loading_(false), - focused_(false) { + focused_(false), + is_painting_(false) { // ApplyWebPreferences before making a WebLocalFrame so that the frame sees a // consistent view of our preferences. content::RenderView::ApplyWebPreferences(preferences, web_view_); @@ -172,6 +174,9 @@ if (paint_rect.IsEmpty()) return; + base::AutoReset<bool> is_painting( + &is_painting_, true); + paint_rect.Offset(-rect_.x(), -rect_.y()); canvas->save(); @@ -288,8 +293,11 @@ } void WebViewPlugin::scheduleAnimation() { - if (container_) + if (container_) { + // This should never happen; see also crbug.com/545039 for context. + CHECK(!is_painting_); container_->setNeedsLayout(); + } } void WebViewPlugin::didClearWindowObject(WebLocalFrame* frame) {
diff --git a/components/plugins/renderer/webview_plugin.h b/components/plugins/renderer/webview_plugin.h index b889fc5d..0d3a812 100644 --- a/components/plugins/renderer/webview_plugin.h +++ b/components/plugins/renderer/webview_plugin.h
@@ -178,6 +178,7 @@ blink::WebString old_title_; bool finished_loading_; bool focused_; + bool is_painting_; }; #endif // COMPONENTS_PLUGINS_RENDERER_WEBVIEW_PLUGIN_H_
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index f2979f7..85d5001 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json
@@ -63,7 +63,7 @@ # Windows ignore this. Policies on Mac are using this instead of caption. # # Non-translateable strings should be tagged using <ph name="..."></ph> as -# described in https://code.google.com/p/grit-i18n/wiki/GritUsersGuide. +# described in https://www.chromium.org/developers/tools-we-use-in-chromium/grit/grit-users-guide # # Generated grd names: # Each name has two parts: the second part is either CAPTION, DESC or LABEL, @@ -137,7 +137,7 @@ # persistent IDs for all fields (but not for groups!) are needed. These are # specified by the 'id' keys of each policy. NEVER CHANGE EXISTING IDs, # because doing so would break the deployed wire format! -# For your editing convenience: highest ID currently used: 315 +# For your editing convenience: highest ID currently used: 316 # # Placeholders: # The following placeholder strings are automatically substituted: @@ -701,6 +701,27 @@ If this setting is disabled and outgoing UDP connections are filtered by the firewall, then this machine can only connect to host machines within the local network.''', }, { + 'name': 'RemoteAccessHostClientDomain', + 'type': 'string', + 'schema': { 'type': 'string' }, + 'supported_on': ['chrome.*:22-', 'chrome_os:41-'], + 'features': { + 'dynamic_refresh': True, + 'per_profile': False, + }, + 'example_value': 'my-awesome-domain.com', + 'id': 316, + 'caption': '''Configure the required domain name for remote access clients''', + 'tags': [], + 'desc': '''Configures the required client domain name that will be imposed on remote access clients and prevents users from changing it. + + If this setting is enabled, then only clients from the specified domain can connect to the host. + + If this setting is disabled or not set, then the default policy for the connection type is applied. For remote assistance, this allows clients from any domain can connect to the host; for anytime remote access, only the host owner can connect. + + See also RemoteAccessHostDomain.''', + }, + { 'name': 'RemoteAccessHostFirewallTraversal', 'type': 'main', 'schema': { 'type': 'boolean' }, @@ -738,7 +759,9 @@ If this setting is enabled, then hosts can be shared only using accounts registered on the specified domain name. - If this setting is disabled or not set, then hosts can be shared using any account.''', + If this setting is disabled or not set, then hosts can be shared using any account. + + See also RemoteAccessHostClientDomain.''', }, { 'name': 'RemoteAccessHostRequireTwoFactor',
diff --git a/components/policy/resources/policy_templates_am.xtb b/components/policy/resources/policy_templates_am.xtb index 77d8aeb..14d59bf 100644 --- a/components/policy/resources/policy_templates_am.xtb +++ b/components/policy/resources/policy_templates_am.xtb
@@ -104,7 +104,7 @@ <translation id="1426410128494586442">አዎ</translation> <translation id="1427655258943162134">የተኪ አገልጋይ አድራሻ ወይም ዩአርኤል</translation> <translation id="1435659902881071157">የመሣሪያ ደረጃ አውታረ መረብ ውቅር</translation> -<translation id="1438739959477268107">ነባሪ የቁፍም ማመንጫ ቅንብር</translation> +<translation id="1438739959477268107">ነባሪ የቁልፍ ማመንጫ ቅንብር</translation> <translation id="1454846751303307294">የትኛዎቹ ጣቢያዎች JavaScriptን እንዲያሂዱ የማይፈቀድላቸው ጣቢያዎች የሚገልጽ የዩ አር ኤል ስርዓተ ጥለቶች ዝርዝር እንዲያስቀምጡ ያስችልዎታል። ይህ መመሪያ እንዳልተዋቀረ ከተተወ ከተዋቀረ የ«DefaultJavaScriptSetting» መመሪያ፣ አለበለዚያ ደግሞ የተጠቃሚው የግል ውቅር ሁለንተናዊ ነባሪ ዋጋ ስራ ላይ ይውላል።</translation> @@ -2303,7 +2303,6 @@ የመመሪያ ዋጋው በሚሊሰከንዶች ነው መገለጽ ያለበት። ዋጋዎች ከስራ ፈትቶ መዘግየቱ ያነሱ ነው የሚሆኑት።</translation> <translation id="891435090623616439">እንደ JSON ሕብረ ቁምፊ በኮድ ተቀምጧል፣ ለዝርዝሩ <ph name="COMPLEX_POLICIES_URL" />ን ይመልከቱ</translation> <translation id="8947415621777543415">የመሣሪያ አካባቢ ሪፖርት አድርግ</translation> -<translation id="89493502583189945"><ph name="PRODUCT_NAME" /> ሲጀመር የሚተገብሩበት ዕልባቶችን ይገልጻል። የተገለጹት ዕልባቶች <ph name="PRODUCT_NAME" /> ከመጀመሩ በፊት የሚተገበሩ ናቸው፣ ለመግቢያ ገጹም እንኳ።</translation> <translation id="8951350807133946005">የዲስክ መሸጎጫ አቃፊ አዋቅር</translation> <translation id="8955719471735800169">ወደ ላይ ተመለስ</translation> <translation id="8960850473856121830">በዚህ ዝርዝር ውስጥ ያሉ ስርዓተ ጥለቶች ከሚጠይቀው ዩአርኤል የደህንነት መነሻ
diff --git a/components/policy/resources/policy_templates_ar.xtb b/components/policy/resources/policy_templates_ar.xtb index ef95b611..a966d3d 100644 --- a/components/policy/resources/policy_templates_ar.xtb +++ b/components/policy/resources/policy_templates_ar.xtb
@@ -2036,7 +2036,6 @@ يجب تحديد قيمة السياسة بالمللي ثانية. يجب أن تكون القيم أقل من مهلة وضع الخمول.</translation> <translation id="891435090623616439">مشفرة على هيئة JSON string، اطلع على <ph name="COMPLEX_POLICIES_URL" /> لمزيد من التفاصيل</translation> <translation id="8947415621777543415">الإبلاغ عن موقع الجهاز</translation> -<translation id="89493502583189945">يحدد العلامات التي ينبغي أن وضعها على <ph name="PRODUCT_NAME" /> عند بدء تشغيله. يتم وضع العلامات المحددة قبل تشغيل <ph name="PRODUCT_NAME" /> حتى لشاشة تسجيل الدخول.</translation> <translation id="8951350807133946005">تعيين دليل ذاكرة التخزين المؤقت للقرص</translation> <translation id="8955719471735800169">الرجوع إلى أعلى</translation> <translation id="8960850473856121830">ستتم مطابقة الأنماط في هذه القائمة مع المصدر الأمني
diff --git a/components/policy/resources/policy_templates_bg.xtb b/components/policy/resources/policy_templates_bg.xtb index 87a7be0..97ae8dc 100644 --- a/components/policy/resources/policy_templates_bg.xtb +++ b/components/policy/resources/policy_templates_bg.xtb
@@ -2103,7 +2103,6 @@ Съответната стойност трябва да се посочи в милисекунди. Тя се променя така, че да е по-малка от забавянето при неактивност.</translation> <translation id="891435090623616439">кодирано като низ на JSON, за подробности вижте <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Съобщаване на местоположението на устройството</translation> -<translation id="89493502583189945">Посочва флаговете, които трябва да бъдат приложени при стартиране на <ph name="PRODUCT_NAME" />. Те влизат в сила преди включването на <ph name="PRODUCT_NAME" /> дори за екрана за вход.</translation> <translation id="8951350807133946005">Задаване на директория за кеша на диска</translation> <translation id="8955719471735800169">Обратно в началото</translation> <translation id="8960850473856121830">Ще се търси съответствие между образците в този списък и първоизточника на сигурност
diff --git a/components/policy/resources/policy_templates_bn.xtb b/components/policy/resources/policy_templates_bn.xtb index 1dbf70272..5ffb91f 100644 --- a/components/policy/resources/policy_templates_bn.xtb +++ b/components/policy/resources/policy_templates_bn.xtb
@@ -512,9 +512,9 @@ যদি এই সেটিং সক্ষম থাকে বা সেট করা নয়, তাহলে ওয়েব পৃষ্ঠাগুলি JavaScript ব্যবহার করতে পারে কিন্তু ব্যবহারকারী সেই সেটিং পরিবর্তন করতে পারে৷</translation> <translation id="2747783890942882652">দূরবর্তী অ্যাক্সেস হোস্টে আরোপিত হবে এমন আবশ্যক ডোমেন নাম কনফিগার করে এবং এটিকে পরিবর্তন করা থেকে ব্যবহারকারীদের আটকায়৷ - এই সেটিংস সক্ষম থাকলে, কেবল নির্দিষ্ট ডোমেন নামে নিবন্ধভুক্ত অ্যাকাউন্টগুলিকে ব্যবহার করে হোস্ট ভাগ করা যেতে পারে৷ + এই সেটিংস সক্ষম থাকলে, কেবল নির্দিষ্ট ডোমেন নামে নিবন্ধভুক্ত অ্যাকাউন্টগুলিকে ব্যবহার করে হোস্ট শেয়ার করা যেতে পারে৷ - এই সেটিংস অক্ষম থাকলে বা সেট না থাকলে, যেকোনো অ্যাকাউন্ট ব্যবহার করে হোস্ট ভাগ করা যেতে পারে৷</translation> + এই সেটিংস অক্ষম থাকলে বা সেট না থাকলে, যেকোনো অ্যাকাউন্ট ব্যবহার করে হোস্ট শেয়ার করা যেতে পারে৷</translation> <translation id="2757054304033424106">যে ধরনের এক্সটেনশন/অ্যাপ্লিকেশগুলি ইনস্টল করার জন্য অনুমোদিত</translation> <translation id="2759224876420453487">একটি মাল্টিপ্রোফাইল সেশন ব্যবহারকারী আচরণ নিয়ন্ত্রণ করুন</translation> <translation id="2761483219396643566">ব্যাটারি শক্তি চলাকালীন নিষ্ক্রিয়তা সতর্কতাতে বিলম্ব</translation> @@ -692,10 +692,10 @@ যদি এই সেটিংটি সক্ষমিত থাকে বা কনফিগার করা না থাকে তবে ব্যবহারকারী তাদের Google অ্যাকাউন্টটি প্রমাণীকরণের মাধ্যমে মেঘ মুদ্রণ প্রক্সিটি সক্ষম করতে পারে৷ - যদি এই সেটিংটি অক্ষমিত থাকে তবে ব্যবহারকারীরা প্রক্সিটি সক্ষম করতে পারে না এবং যন্ত্রটি তার মুদ্রক <ph name="CLOUD_PRINT_NAME" /> এর সাথে ভাগ করার জন্য অনুমতি দেবে না৷</translation> + যদি এই সেটিংটি অক্ষমিত থাকে তবে ব্যবহারকারীরা প্রক্সিটি সক্ষম করতে পারে না এবং যন্ত্রটি তার মুদ্রক <ph name="CLOUD_PRINT_NAME" /> এর সাথে শেয়ার করার জন্য অনুমতি দেবে না৷</translation> <translation id="3322771899429619102">আপনাকে url প্যাটার্নের একটি তালিকা সেট করার মঞ্জুরি দেয় যা এমন সাইটগুলিকে নির্দিষ্ট করে যেগুলি কী তৈরি করা ব্যবহার করার জন্য মঞ্জুরিপ্রাপ্ত। যদি কোনো url প্যাটার্ন 'KeygenBlockedForUrls' এ থাকে, তাহলে সেটি এসব ব্যতিক্রমকে ওভারারইড করে। - যদি এই নীতিটি সেট না করে ছেড়ে যাওয়া হয়, তাহলে গ্লোবাল ডিফল্ট মান সব সাইটগুলির জন্য ব্যবহার করা হবে যদি 'DefaultKeygenSetting' নীতি সেট করা হয় তা থেকে, নয়তো ব্যবহারকারীদের ব্যক্তিগত কনফিগারেশান থেকে।</translation> + যদি এই নীতিটি সেট না করে ছেড়ে যাওয়া হয়, তাহলে গ্লোবাল ডিফল্ট মান সব সাইটগুলির জন্য ব্যবহার করা হবে আর যদি 'DefaultKeygenSetting' নীতি সেট করা হয় তাহলে তার থেকে ব্যবহার করা হবে, নয়তো ব্যবহারকারীদের ব্যক্তিগত কনফিগারেশান থেকে।</translation> <translation id="3381968327636295719">ডিফল্ট অনুসারে হোস্ট ব্রাউজারটি ব্যবহার করুন</translation> <translation id="3417418267404583991">যদি এই নীতি সত্য সেট করা হয় বা কনফিগার না করা হয়ে থাকে, <ph name="PRODUCT_OS_NAME" /> অতিথি লগইন সক্ষম করবে৷ অতিথি লগইন হল অজ্ঞাতনামা ব্যবহারকারী সেশন এবং এতে কোন পাসওয়ার্ড প্রয়োজন হয় না৷ @@ -901,7 +901,7 @@ <translation id="4224610387358583899">যে নিষ্ক্রিয়তা বিলম্বের পর স্ক্রীন বন্ধ হয়ে যাবে</translation> <translation id="423797045246308574">আপনাকে একটি url প্যাটার্নের তালিকা সেট করতে দেয় যা এমন সাইটগুলিকে নির্দিষ্ট করে যেগুলি কী তৈরি করা ব্যবহারের জন্য মঞ্জুরিপ্রাপ্ত নয়। যদি কোনো url প্যাটার্ন 'KeygenBlockedForUrls' এ থাকে, তাহলে সেটি এসব ব্যতিক্রমকে ওভারারইড করে। - যদি এই নীতিটি সেট না করে ছেড়ে যাওয়া হয়, তাহলে গ্লোবাল ডিফল্ট মান সব সাইটগুলির জন্য ব্যবহার করা হবে যদি 'DefaultKeygenSetting' নীতি সেট করা হয় তা থেকে, নয়তো ব্যবহারকারীদের ব্যক্তিগত কনফিগারেশান থেকে।</translation> + যদি এই নীতিটি সেট না করে ছেড়ে যাওয়া হয়, তাহলে গ্লোবাল ডিফল্ট মান সব সাইটগুলির জন্য ব্যবহার করা হবে আর যদি 'DefaultKeygenSetting' নীতি সেট করা হয় তাহলে তার থেকে ব্যবহার করা হবে, নয়তো ব্যবহারকারীদের ব্যক্তিগত কনফিগারেশান থেকে।</translation> <translation id="4250680216510889253">না</translation> <translation id="427632463972968153">POST এর মাধ্যমে প্রস্তাবনা অনুসন্ধান করার সময় ব্যবহৃত প্যারামিটারগুলি নির্দিষ্ট করে৷ কমা দ্বারা বিভাজিত নাম/মান জোড়াগুলি নিয়ে এটি গঠিত৷ মানটি যদি টেমপ্লেট প্যারামিটার হয়, যেমন উপরোক্ত উদাহরণের {চিত্র থাম্বনেল}, তাহলে এটা আসল চিত্র থাম্বনেলের ডেটা দ্বারা প্রতিস্থাপন করা হবে৷ @@ -1204,7 +1204,7 @@ এই সেটিংস সক্ষম থাকলে, দূরবর্তী সংযোগ প্রগতিতে থাকার সময় হোস্টের বাস্তব ইনপুট ও আউটপুট ডিভাইসগুলি অক্ষম হয়৷ - এই সেটিংস অক্ষম থাকলে বা সেট না থাকলে, এটি ভাগ করার সময়, স্থানীয় ও দূরবর্তী উভয় ব্যবহারকারীরাই হোস্টের সাথে পরস্পরক্রিয়া করতে পারে৷</translation> + এই সেটিংস অক্ষম থাকলে বা সেট না থাকলে, এটি শেয়ার করার সময়, স্থানীয় ও দূরবর্তী উভয় ব্যবহারকারীরাই হোস্টের সাথে পরস্পরক্রিয়া করতে পারে৷</translation> <translation id="5423001109873148185">এই নীতিটি সক্ষম থাকলে অনুসন্ধানের ইঞ্জিনগুলিকে বর্তমান ডিফল্ট ব্রাউজার থেকে আমদানি করতে জোর দেয়৷ যদি সক্ষম থাকে এই নীতিটি কথোপকথন আমদানিকেও প্রভাবিত করে৷ যদি অক্ষম থাকে তবে ডিফল্ট অনুসন্ধানের ইঞ্জিনটি আমদানি করা হয় না৷ @@ -1937,7 +1937,7 @@ সাইন-ইন স্ক্রীনে এক্সটেনশানের id কে স্ক্রীন সেভার হিসাবে ব্যবহারের জন্য নির্ধারিত করে৷ এক্সটেনশানটিকে অবশ্যই AppPack এর অংশ হতে হবে যা DeviceAppPack নীতির মাধ্যমে এই ডোমেইনের জন্য কনফিগার করা হয়েছে৷</translation> <translation id="7912255076272890813">অনুমতিপ্রাপ্ত অ্যাপ্লিকেশন/এক্সটেনশন প্রকারগুলি কনফিগার করুন</translation> -<translation id="793134539373873765">OS আপডেট প্লেলোডগুলির জন্য p2p ব্যবহার করা হবে কিনা নির্দিষ্ট করে৷ যদি True তে সেট করা থাকে, ডিভাইসগুলি ভাগ করা হবে এবং ইন্টারনেট ব্যান্ডউইডথ ব্যবহার এবং ঝনঝট কমাতে LAN এ আপডেট প্লেলোডগুলির কনজিউম করার চেষ্টা করবে৷ যদি LAN এ আপডেট প্লেলোড উপলব্ধ না থাকে, তবে ডিভাইস আপডেট সার্ভার থেকে ডাউনলোড করতে ফিরে আসবে৷ যদি False তে সেট করা থাকে বা কনফিগার করা না থাকে, তবে p2p ব্যবহার করা হবে না৷</translation> +<translation id="793134539373873765">OS আপডেট প্লেলোডগুলির জন্য p2p ব্যবহার করা হবে কিনা নির্দিষ্ট করে৷ যদি True তে সেট করা থাকে, ডিভাইসগুলি শেয়ার করা হবে এবং ইন্টারনেট ব্যান্ডউইডথ ব্যবহার এবং ঝনঝট কমাতে LAN এ আপডেট প্লেলোডগুলির কনজিউম করার চেষ্টা করবে৷ যদি LAN এ আপডেট প্লেলোড উপলব্ধ না থাকে, তবে ডিভাইস আপডেট সার্ভার থেকে ডাউনলোড করতে ফিরে আসবে৷ যদি False তে সেট করা থাকে বা কনফিগার করা না থাকে, তবে p2p ব্যবহার করা হবে না৷</translation> <translation id="7933141401888114454">তত্বাবধানে থাকা ব্যবহারকারী তৈরি করা সক্ষম করুন</translation> <translation id="7936098023732125869">একটি ডিফল্ট অনুসন্ধান প্রদানকারীর ব্যবহার সক্ষম করে। @@ -2236,7 +2236,6 @@ নীতির মানটি মিলিসেকেন্ডে নির্ধারণ করা উচিত৷ নিষ্ক্রিয়তা বিলম্বের থেকে কম হিসাবে মানগুলি ধার্য করা হয়ে থাকে৷</translation> <translation id="891435090623616439">একটি JSON স্ট্রিং হিসেবে এনকোড করা রয়েছে, বিশদ বিবরণের জন্য <ph name="COMPLEX_POLICIES_URL" /> দেখুন</translation> <translation id="8947415621777543415">ডিভাইসের অবস্থান প্রতিবেদন করুন</translation> -<translation id="89493502583189945"><ph name="PRODUCT_NAME" /> শুরুর সময়ে তাতে যে ফ্ল্যাগগুলি প্রয়োগ করা হবে সেগুলিকে নির্দিষ্ট করে৷ এমনকি সাইন-ইন করা স্ক্রিনের জন্যও, নির্দিষ্ট ফ্ল্যাগগুলি <ph name="PRODUCT_NAME" /> শুরু হওয়ার পূর্বে প্রযুক্ত হয়৷</translation> <translation id="8951350807133946005">ডিস্ক ক্যাশে ডিরেক্টরি সেট করুন</translation> <translation id="8955719471735800169">শীর্ষে ফিরে যান</translation> <translation id="8960850473856121830">এই তালিকার প্যাটার্নগুলি অনুরোধ করা URL এর নিরাপত্তার
diff --git a/components/policy/resources/policy_templates_ca.xtb b/components/policy/resources/policy_templates_ca.xtb index 7a58b9a..589843d 100644 --- a/components/policy/resources/policy_templates_ca.xtb +++ b/components/policy/resources/policy_templates_ca.xtb
@@ -645,7 +645,7 @@ <translation id="3322771899429619102">Us permet definir una llista de patrons d'URL que especifiquin els llocs que estan autoritzats a utilitzar la generació de claus. Si un patró d'URL està configurat com a "KeygenBlockedForUrls", la política substitueix aquestes excepcions. - Si aquesta política es deixa sense establir, s'utilitzarà el valor predeterminat per a tots els llocs, bé des de la política "DefaultKeygenSetting" (si està configurada), o bé des de la configuració personal definida per l'usuari.</translation> + Si aquesta política es deixa sense establir, s'utilitzarà el valor general predeterminat de la política "DefaultKeygenSetting" (si està configurada) per a tots els llocs web, o bé s'utilitzarà la configuració personal de l'usuari.</translation> <translation id="3381968327636295719">Fes servir el navegador amfitrió de manera predeterminada</translation> <translation id="3417418267404583991">Si aquesta política es defineix a «true» (cert) o no es configura, <ph name="PRODUCT_OS_NAME" /> permetrà els inicis de sessió de convidat. Aquests inicis de sessió són sessions d'usuari anònimes i no cal introduir cap contrasenya. @@ -693,7 +693,7 @@ Si activeu aquesta opció, el mode de seguretat de YouTube està sempre activat. Si la desactiveu o no hi establiu cap valor, el mode de seguretat de YouTube no s'aplica.</translation> -<translation id="3750220015372671395">No permetis que aquests llocs utilitzin la generació de claus</translation> +<translation id="3750220015372671395">Bloqueja la generació de claus en aquests llocs web</translation> <translation id="3756011779061588474">Bloquejar el mode de desenvolupador</translation> <translation id="3758249152301468420">Desactiva les eines per a desenvolupadors</translation> <translation id="3765260570442823273">Durada del missatge d'advertència de tancament de la sessió per inactivitat</translation> @@ -826,7 +826,7 @@ <translation id="423797045246308574">Us permet definir una llista de patrons d'URL que especifiquin els llocs que no estan autoritzats a utilitzar la generació de claus. Si un patró d'URL està configurat com a "KeygenAllowedForUrls", la política substitueix aquestes excepcions. - Si aquesta política es deixa sense establir, s'utilitzarà el valor predeterminat per a tots els llocs, bé des de la política "DefaultKeygenSetting" (si està configurada), o bé des de la configuració personal definida per l'usuari.</translation> + Si aquesta política es deixa sense establir, s'utilitzarà el valor general predeterminat de la política "DefaultKeygenSetting" (si està configurada) per a tots els llocs web, o bé s'utilitzarà la configuració personal de l'usuari.</translation> <translation id="4250680216510889253">No</translation> <translation id="427632463972968153">Especifica els paràmetres utilitzats en cercar imatges amb POST. Consisteix en parelles de nom/valor separades per comes. Si un valor és un paràmetre de plantilla, com ara {imageThumbnail} a l'exemple anterior, se substituirà per dades de la miniatura de la imatge real. @@ -1877,7 +1877,7 @@ <translation id="8300455783946254851">Si s'utilitza el valor true per a aquesta política, es desactiva la sincronització de Google Drive a l'aplicació Fitxers de <ph name="PRODUCT_OS_NAME" /> quan s'utilitza una connexió mòbil. En aquest cas, les dades només se sincronitzen amb Google Drive quan hi ha connexió Wi-Fi o Ethernet. Si aquesta política no es defineix o si es defineix com a false, els usuaris podran transferir fitxers a Google Drive mitjançant connexions mòbils.</translation> -<translation id="8312129124898414409">Us permet definir si els llocs web estan autoritzats a utilitzar la generació de claus. L'ús de la generació de claus es pot autoritzar o denegar per al conjunt total de llocs web. +<translation id="8312129124898414409">Us permet definir si els llocs web estan autoritzats a utilitzar la generació de claus. L'ús de la generació de claus es pot autoritzar o denegar per a tots els llocs web. Si aquesta política es deixa sense establir, s'utilitzarà "BlockKeygen" i l'usuari podrà canviar-la.</translation> <translation id="8329984337216493753">Aquesta política només està activa en mode de venta. @@ -2059,7 +2059,6 @@ El valor de la política s'ha d'indicar en mil·lisegons i es limita perquè sigui inferior al retard d'inactivitat.</translation> <translation id="891435090623616439">codificat com a cadena JSON; per obtenir informació detallada, consulteu <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Informa de la ubicació d'un dispositiu</translation> -<translation id="89493502583189945">Especifica les opcions que s'han d'aplicar a <ph name="PRODUCT_NAME" /> quan s'inicia. Les opcions especificades s'apliquen abans que s'iniciï <ph name="PRODUCT_NAME" />, fins i tot per a la pantalla d'inici de sessió.</translation> <translation id="8951350807133946005">Defineix el directori de la memòria cau del disc</translation> <translation id="8955719471735800169">Torna a dalt</translation> <translation id="8960850473856121830">Els patrons d'aquesta llista es compararan amb l'origen de seguretat
diff --git a/components/policy/resources/policy_templates_cs.xtb b/components/policy/resources/policy_templates_cs.xtb index 7fb2f930..407a9fff 100644 --- a/components/policy/resources/policy_templates_cs.xtb +++ b/components/policy/resources/policy_templates_cs.xtb
@@ -2247,7 +2247,6 @@ Hodnotu zásady zadávejte v milisekundách. Maximální hodnota je nižší než prodleva režimu spánku.</translation> <translation id="891435090623616439">Zakódováno jako řetězec JSON, podrobnosti naleznete zde: <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Oznamovat polohu zařízení</translation> -<translation id="89493502583189945">Udává příznaky, které mají být na aplikaci <ph name="PRODUCT_NAME" /> použity při spuštění. Zadané příznaky se použijí ještě před spuštěním prohlížeče <ph name="PRODUCT_NAME" /> k zobrazení přihlašovací obrazovky.</translation> <translation id="8951350807133946005">Nastavit adresář mezipaměti na disku</translation> <translation id="8955719471735800169">Zpět na začátek</translation> <translation id="8960850473856121830">Vzory v tomto seznamu budou porovnány s bezpečnostními údaji o původu požadované adresy URL. Pokud bude nalezena shoda, přístup k zařízením pro záznam zvuku bude udělen bez vyzvání.
diff --git a/components/policy/resources/policy_templates_da.xtb b/components/policy/resources/policy_templates_da.xtb index 8a03a1a5..ee74390 100644 --- a/components/policy/resources/policy_templates_da.xtb +++ b/components/policy/resources/policy_templates_da.xtb
@@ -2084,7 +2084,6 @@ Politikkens værdi skal angives i millisekunder. Værdierne reduceres, så de er mindre end inaktivitetsforsinkelsen.</translation> <translation id="891435090623616439">kodet som en JSON-streng. Få flere oplysninger på <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Rapportér enhedens placering</translation> -<translation id="89493502583189945">Angiver de markeringer, der skal anvendes for <ph name="PRODUCT_NAME" /> ved opstart. De angivne markeringer anvendes, før <ph name="PRODUCT_NAME" /> startes, selv på loginskærmen.</translation> <translation id="8951350807133946005">Angiv mappen for diskens cache</translation> <translation id="8955719471735800169">Tilbage til toppen</translation> <translation id="8960850473856121830">Mønstre på denne liste sammenlignes med sikkerhedskilden
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb index f406f82..9f38b8ae 100644 --- a/components/policy/resources/policy_templates_de.xtb +++ b/components/policy/resources/policy_templates_de.xtb
@@ -2034,7 +2034,6 @@ Der Wert für die Richtlinie muss in Millisekunden angegeben werden. Werte müssen kleiner als der Wert für die Inaktivitätsverzögerung sein.</translation> <translation id="891435090623616439">Als JSON-String codiert, weitere Informationen unter <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Gerätestandort melden</translation> -<translation id="89493502583189945">Hiermit werden die Parameter angegeben, die beim Starten von <ph name="PRODUCT_NAME" /> angewendet werden sollen. Diese gelten bereits vor dem eigentlichen Starten von <ph name="PRODUCT_NAME" />, also auch auf dem Anmeldebildschirm.</translation> <translation id="8951350807133946005">Datenträger-Cache-Verzeichnis festlegen</translation> <translation id="8955719471735800169">Zurück nach oben</translation> <translation id="8960850473856121830">Muster in dieser Liste werden mit der Sicherheitsherkunft
diff --git a/components/policy/resources/policy_templates_el.xtb b/components/policy/resources/policy_templates_el.xtb index 3d86dc09..32eb589 100644 --- a/components/policy/resources/policy_templates_el.xtb +++ b/components/policy/resources/policy_templates_el.xtb
@@ -713,7 +713,7 @@ Εάν αυτή η ρύθμιση είναι ενεργοποιημένη ή δεν έχει διαμορφωθεί, οι χρήστες μπορούν να ενεργοποιήσουν τον διακομιστή μεσολάβησης εκτυπωτή νέφους μέσω του ελέγχου ταυτότητας με το Λογαριασμό τους Google. Εάν αυτή η ρύθμιση είναι απενεργοποιημένη, οι χρήστες δεν μπορούν να ενεργοποιήσουν το διακομιστή μεσολάβησης και δεν θα επιτρέπεται η κοινή χρήση των εκτυπωτών του υπολογιστή με το <ph name="CLOUD_PRINT_NAME" />.</translation> -<translation id="3322771899429619102">Σας επιτρέπει να ορίσετε μια λίστα με τα μοτίβα url που προσδιορίζουν ιστότοπους στους οποίους επιτρέπεται να χρησιμοποιούν τη δημιουργία κλειδιού.. Αν ένα μοτίβο url περιέχεται στην πολιτική "KeygenBlockedForUrls", αυτή η πολιτική παρακάμπτει αυτές τις εξαιρέσεις. +<translation id="3322771899429619102">Σας επιτρέπει να ορίσετε μια λίστα με τα μοτίβα url που προσδιορίζουν ιστότοπους στους οποίους επιτρέπεται να χρησιμοποιούν τη δημιουργία κλειδιού. Αν ένα μοτίβο url περιέχεται στην πολιτική "KeygenBlockedForUrls", αυτή η πολιτική παρακάμπτει αυτές τις εξαιρέσεις. Αν δεν ορίσετε αυτήν την πολιτική, θα χρησιμοποιηθεί η καθολική προεπιλεγμένη τιμή για όλους τους ιστότοπους είτε από την πολιτική "DefaultKeygenSetting" εφόσον έχει οριστεί, είτε από την προσωπική διαμόρφωση του χρήστη.</translation> <translation id="3381968327636295719">Χρήση του προγράμματος περιήγησης του κεντρικού υπολογιστή από προεπιλογή</translation> @@ -2296,7 +2296,6 @@ Η τιμή πολιτικής πρέπει να προσδιορίζεται σε χιλιοστά δευτερολέπτου. Οι τιμές καθορίζονται έτσι ώστε να είναι μικρότερες από την καθυστέρηση αδράνειας.</translation> <translation id="891435090623616439">έχει κωδικοποιηθεί ως συμβολοσειρά JSON. Για λεπτομέρειες ανατρέξτε στη διεύθυνση <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Αναφορά τοποθεσίας συσκευής</translation> -<translation id="89493502583189945">Προσδιορίζει τις επισημάνσεις που πρέπει να εφαρμοστούν στο <ph name="PRODUCT_NAME" /> κατά την εκκίνησή του. Οι καθορισμένες επισημάνσεις εφαρμόζονται πριν από την εκκίνηση του <ph name="PRODUCT_NAME" />, ακόμα και για την οθόνη σύνδεσης.</translation> <translation id="8951350807133946005">Ορισμός καταλόγου προσωρινής μνήμης δίσκου</translation> <translation id="8955719471735800169">Επιστροφή στην κορυφή</translation> <translation id="8960850473856121830">Τα μοτίβα σε αυτήν τη λίστα θα αντιστοιχιστούν με την προέλευση ασφαλείας
diff --git a/components/policy/resources/policy_templates_en-GB.xtb b/components/policy/resources/policy_templates_en-GB.xtb index 9bc2490..efccc08 100644 --- a/components/policy/resources/policy_templates_en-GB.xtb +++ b/components/policy/resources/policy_templates_en-GB.xtb
@@ -2319,7 +2319,6 @@ The policy value should be specified in milliseconds. Values are clamped to be less than the idle delay.</translation> <translation id="891435090623616439">encoded as a JSON string, for details see <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Report device location</translation> -<translation id="89493502583189945">Specifies the flags that should be applied to <ph name="PRODUCT_NAME" /> when it starts. The specified flags are applied before <ph name="PRODUCT_NAME" /> is started even for the sign-in screen.</translation> <translation id="8951350807133946005">Set disk cache directory</translation> <translation id="8955719471735800169">Back to top</translation> <translation id="8960850473856121830">Patterns in this list will be matched against the security
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb index f64ee29..d8d8104 100644 --- a/components/policy/resources/policy_templates_es-419.xtb +++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -629,9 +629,9 @@ <translation id="3292147213643666827">Permite que <ph name="PRODUCT_NAME" /> funcione como proxy entre <ph name="CLOUD_PRINT_NAME" /> e impresoras anteriores conectadas a la computadora. Si se habilita o no se configura esta opción, los usuarios pueden habilitar el proxy de Google Cloud Print si realizan la autenticación con su cuenta de Google. Si se inhabilita esta opción, los usuarios no podrán habilitar el proxy y la computadora no podrá compartir las impresoras con <ph name="CLOUD_PRINT_NAME" />.</translation> -<translation id="3322771899429619102">Te permite configurar una lista de patrones de URL que especifican los sitios que están autorizados a utilizar la generación de claves. Si un patrón de URL tiene configurada la política "KeygenBlockedForUrls", en ese caso se anulan estas excepciones. +<translation id="3322771899429619102">Te permite configurar una lista de patrones de URL que especifican los sitios que están autorizados a utilizar la generación de claves. Si un patrón de URL tiene configurada la política "KeygenBlockedForUrls", se anulan estas excepciones. - Si esta política no se configura, se usará el valor global predeterminado para todos los sitios, ya sea de la política "DefaultKeygenSetting" si está configurada, o de otro tipo de configuración personal del usuario.</translation> + Si esta política no se configura, se usará el valor global predeterminado para todos los sitios, ya sea de la política "DefaultKeygenSetting" si está configurada o de otro tipo de configuración personal del usuario.</translation> <translation id="3381968327636295719">Utilizar el navegador del host de manera predeterminada</translation> <translation id="3417418267404583991">Si esta política no se configura o se establece en "true", <ph name="PRODUCT_OS_NAME" /> permitirá iniciar sesión como invitado. Los inicios de sesión como invitado son sesiones de usuario anónimas y no requieren contraseña. @@ -811,7 +811,7 @@ <translation id="4224610387358583899">Demoras de bloqueo de pantalla</translation> <translation id="423797045246308574">Te permite configurar una lista de patrones de URL que especifican los sitios a los que no se les permite utilizar la generación de claves. Si un patrón de URL tiene configurada la política "KeygenAllowedForUrls", esta anula estas excepciones. - Si esta política no se configura, se usará el valor predeterminado global para todos los sitios, ya sea de la política "DefaultKeygenSetting" si está configurada, o de otro tipo de configuración personal del usuario.</translation> + Si esta política no se configura, se usará el valor predeterminado global para todos los sitios, ya sea de la política "DefaultKeygenSetting" si está configurada o de otro tipo de configuración personal del usuario.</translation> <translation id="4250680216510889253">No</translation> <translation id="427632463972968153">Especifica los parámetros utilizados al realizar una búsqueda de imágenes con POST. Se compone de pares de nombre/valor separados por coma. Si un valor es un parámetro de plantilla, como {imageThumbnail} en el ejemplo anterior, se reemplazará por datos de miniaturas de imágenes reales. @@ -1851,7 +1851,7 @@ <translation id="8300455783946254851">Inhabilita la sincronización de Google Drive en la aplicación Archivos de <ph name="PRODUCT_OS_NAME" /> cuando se utiliza una conexión móvil y se establece en true. En ese caso, los datos solo se sincronizan con Google Drive al utilizar una conexión Wi-Fi o Ethernet. Si esta política no se establece o se establece en false, los usuarios podrán transferir archivos a Google Drive mediante conexiones móviles.</translation> -<translation id="8312129124898414409">Te permite configurar si los sitios web están autorizados a utilizar la generación de claves. La generación de claves puede permitirse o rechazarse para todos los sitios web. +<translation id="8312129124898414409">Te permite establecer si los sitios web están autorizados a utilizar la generación de claves. La generación de claves puede permitirse o rechazarse para todos los sitios web. Si esta política no se configura, se usará "BlockKeygen" y el usuario podrá cambiarla.</translation> <translation id="8329984337216493753">Esta política solo se encuentra activa en el modo de venta. @@ -2013,7 +2013,6 @@ El valor de la política debe especificarse en milisegundos. Los valores se establecerán para que sean inferiores a la demora de inactividad.</translation> <translation id="891435090623616439">codificada como cadena JSON; para obtener detalles, se puede consultar <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Informar la ubicación del dispositivo</translation> -<translation id="89493502583189945">Especifica las marcas que se deben aplicar a <ph name="PRODUCT_NAME" /> cuando se inicia. Las marcas especificadas se aplican antes de que <ph name="PRODUCT_NAME" /> se inicie, incluso en la pantalla de acceso.</translation> <translation id="8951350807133946005">Configurar el directorio de caché de disco</translation> <translation id="8955719471735800169">Volver al principio</translation> <translation id="8960850473856121830">Los patrones de esta lista se compararán con el origen de seguridad de la URL solicitante. Si se encuentra una coincidencia, se concederá acceso a los dispositivos de captura de audio sin solicitarlo.
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index 0bd3eacf..530f77e 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -2307,7 +2307,6 @@ El valor de la política se debe especificar en milisegundos. Los valores están establecidos para ser inferiores al retraso de inactividad.</translation> <translation id="891435090623616439">codificado como cadena JSON, consulta <ph name="COMPLEX_POLICIES_URL" /> para obtener más información</translation> <translation id="8947415621777543415">Informar de ubicación del dispositivo</translation> -<translation id="89493502583189945">Especifica las opciones que se deben aplicar a <ph name="PRODUCT_NAME" /> cuando se inicia. Las opciones especificadas se aplican antes de que se inicie <ph name="PRODUCT_NAME" /> incluso para la pantalla de inicio de sesión.</translation> <translation id="8951350807133946005">Establecer directorio de caché de disco</translation> <translation id="8955719471735800169">Volver al principio</translation> <translation id="8960850473856121830">Los patrones de esta lista se compararán con el origen de seguridad de la URL solicitante. Si se encuentra alguna coincidencia, se concederá acceso a dispositivos de captura de audio sin solicitarlo.
diff --git a/components/policy/resources/policy_templates_et.xtb b/components/policy/resources/policy_templates_et.xtb index 21f5909d..860c98ca 100644 --- a/components/policy/resources/policy_templates_et.xtb +++ b/components/policy/resources/policy_templates_et.xtb
@@ -2290,7 +2290,6 @@ Reegli väärtus tuleb määrata millisekundites. Väärtused tuleb kinnitada väiksematena kui jõudeoleku viiteaeg.</translation> <translation id="891435090623616439">kodeeritud JSON-stringina. Lisateavet vaadake saidilt <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Esita seadme asukoht</translation> -<translation id="89493502583189945">Määrab märgistused, mis tuleb rakendada tootes <ph name="PRODUCT_NAME" /> selle käivitamisel. Määratud märgistused rakendatakse enne toote <ph name="PRODUCT_NAME" /> käivitamist isegi sisselogimisekraanil.</translation> <translation id="8951350807133946005">Vahemälu kataloogi seadmine</translation> <translation id="8955719471735800169">Tagasi üles</translation> <translation id="8960850473856121830">Selles loendis olevaid mustreid võrreldakse taotleva URL-i
diff --git a/components/policy/resources/policy_templates_fa.xtb b/components/policy/resources/policy_templates_fa.xtb index aa74dd55..a3fedf2d 100644 --- a/components/policy/resources/policy_templates_fa.xtb +++ b/components/policy/resources/policy_templates_fa.xtb
@@ -2026,7 +2026,6 @@ مقدار خطمشی باید بر حسب میلی ثانیه باشد. مقادیر باید کمتر از تأخیر بیحرکتی باشند.</translation> <translation id="891435090623616439">کدگذاری شده به عنوان رشته JSON، برای جزئیات <ph name="COMPLEX_POLICIES_URL" /> را ببینید</translation> <translation id="8947415621777543415">گزارش موقعیت مکانی دستگاه</translation> -<translation id="89493502583189945">پرچمهایی را مشخص میکند که باید هنگام شروع به کار <ph name="PRODUCT_NAME" /> برای آن استفاده شوند. پرچمهای خاص قبل از اینکه <ph name="PRODUCT_NAME" /> شروع شود، حتی برای صفحه ورود به سیستم، استفاده میشوند.</translation> <translation id="8951350807133946005">تنظیم دایرکتوری حافظهٔ پنهان دیسک</translation> <translation id="8955719471735800169">برگشت به بالا</translation> <translation id="8960850473856121830">الگوهای این فهرست با منشأ امنیتی نشانی وب درخواستی مطابقت داده میشود.
diff --git a/components/policy/resources/policy_templates_fi.xtb b/components/policy/resources/policy_templates_fi.xtb index fd4c49e..098719c 100644 --- a/components/policy/resources/policy_templates_fi.xtb +++ b/components/policy/resources/policy_templates_fi.xtb
@@ -2043,7 +2043,6 @@ Tämän käytännön arvo täytyy määrittää millisekunteina. Arvo rajoitetaan käyttämättömyysajan arvoa pienemmäksi.</translation> <translation id="891435090623616439">koodattu JSON-merkkijonoksi; lisätietoja on osoitteessa <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Ilmoita laitteen sijainti</translation> -<translation id="89493502583189945">Määrittää käytännöt, joita tuotteen <ph name="PRODUCT_NAME" /> tulee käyttää käynnistyessään. Määritettyjä käytäntöjä käytetään jo ennen tuotteen <ph name="PRODUCT_NAME" /> käynnistystä kirjautumisruudulla.</translation> <translation id="8951350807133946005">Aseta levyn välimuistihakemisto</translation> <translation id="8955719471735800169">Sivun alkuun</translation> <translation id="8960850473856121830">Tähän luetteloon merkittyjä osoitemalleja verrataan pyytävän URL-osoitteen suojaustiedon
diff --git a/components/policy/resources/policy_templates_fil.xtb b/components/policy/resources/policy_templates_fil.xtb index 774a8cb..304d5670 100644 --- a/components/policy/resources/policy_templates_fil.xtb +++ b/components/policy/resources/policy_templates_fil.xtb
@@ -2306,7 +2306,6 @@ Dapat tukuyin ang halaga ng patakaran ayon sa millisecond. Kinakailangang mas mababa kaysa sa idle delay ang mga halaga.</translation> <translation id="891435090623616439">naka-encode bilang JSON string, para sa mga detalye, tingnan ang <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">I-ulat ang lokasyon ng device</translation> -<translation id="89493502583189945">Tinutukoy ang mga flag na dapat mailapat sa <ph name="PRODUCT_NAME" /> kapag nagsimula ito. Inilalapat ang mga natukoy na flag bago simulan ang <ph name="PRODUCT_NAME" /> kahit para sa screen sa pag-sign in.</translation> <translation id="8951350807133946005">Itakda ang direktoryo ng cache ng disk</translation> <translation id="8955719471735800169">Bumalik sa tuktok</translation> <translation id="8960850473856121830">Itutugma ang mga pattern sa listahang ito sa security
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb index d93d972..6cda2d0 100644 --- a/components/policy/resources/policy_templates_fr.xtb +++ b/components/policy/resources/policy_templates_fr.xtb
@@ -2325,7 +2325,6 @@ La valeur de cette règle doit être indiquée en millisecondes. Les valeurs doivent être inférieures au délai d'inactivité.</translation> <translation id="891435090623616439">codée comme une chaîne JSON, pour plus de détails voir <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Indiquer l'emplacement de l'appareil</translation> -<translation id="89493502583189945">Spécifie les indicateurs à appliquer à <ph name="PRODUCT_NAME" /> au démarrage. Ces indicateurs sont appliqués avant le démarrage de <ph name="PRODUCT_NAME" /> (avant même l'affichage de l'écran de connexion).</translation> <translation id="8951350807133946005">Définir le répertoire du cache disque</translation> <translation id="8955719471735800169">Haut de page</translation> <translation id="8960850473856121830">Les modèles de cette liste sont rapprochés de la source de sécurité
diff --git a/components/policy/resources/policy_templates_gu.xtb b/components/policy/resources/policy_templates_gu.xtb index cea56cf..662cd863 100644 --- a/components/policy/resources/policy_templates_gu.xtb +++ b/components/policy/resources/policy_templates_gu.xtb
@@ -2289,7 +2289,6 @@ નીતિ મૂલ્ય મિલિસેકન્ડ્સમાં નિર્દિષ્ટ કરવું જોઈએ. નિષ્ક્રિય વિલંબ કરતાં મૂલ્યો ઓછા હોવા ફરજિયાત છે.</translation> <translation id="891435090623616439">JSON સ્ટ્રીંગ તરીકે એન્કોડ કરી, વિગતો માટે <ph name="COMPLEX_POLICIES_URL" /> જુઓ</translation> <translation id="8947415621777543415">ઉપકરણ સ્થાનની જાણ કરો</translation> -<translation id="89493502583189945">જ્યારે <ph name="PRODUCT_NAME" /> પ્રારંભ થાય ત્યારે લાગુ થવા જોઈએ તે ધ્વજોનો ઉલ્લેખ કરે છે. સાઇન-ઇન સ્ક્રીન માટે પણ <ph name="PRODUCT_NAME" /> પ્રારંભ થાય તે પહેલાં ઉલ્લેખિત ધ્વજો લાગુ થાય છે.</translation> <translation id="8951350807133946005">ડિસ્ક કેશ નિર્દેશિકા સેટ કરો</translation> <translation id="8955719471735800169">શીર્ષ પર પાછા</translation> <translation id="8960850473856121830">આ સૂચિમાંની પેટર્ન વિનંતી કરવામાં આવનાર URL ની મૂળ સુરક્ષા
diff --git a/components/policy/resources/policy_templates_hi.xtb b/components/policy/resources/policy_templates_hi.xtb index 1ca8fdd..efd37d1 100644 --- a/components/policy/resources/policy_templates_hi.xtb +++ b/components/policy/resources/policy_templates_hi.xtb
@@ -101,7 +101,7 @@ <translation id="1426410128494586442">हां</translation> <translation id="1427655258943162134">प्रॉक्सी सर्वर का पता या URL</translation> <translation id="1435659902881071157">डिवाइस-स्तरीय नेटवर्क कॉन्फ़िगरेशन</translation> -<translation id="1438739959477268107">डिफ़ॉल्ट कुंजी जेनरेशन सेटिंग</translation> +<translation id="1438739959477268107">डिफ़ॉल्ट कुंजी जेनरेशन सेटिंग</translation> <translation id="1454846751303307294">आपको url प्रतिमानों की सूची सेट करने देती है जो उन साइटों को निर्दिष्ट करती है जिन्हें JavaScript चलाने की अनुमति नहीं होती. यदि यह नीति सेट किए बिना छोड़ दी जाती है तो सभी साइटों के लिए 'DefaultJavaScriptSetting' नीति के सेट होने पर इससे, या अन्यथा उपयोगकर्ता के व्यक्तिगत कॉन्फ़िगरेशन से वैश्विक डिफ़ॉल्ट मान का उपयोग किया जाएगा.</translation> @@ -684,9 +684,9 @@ यदि यह सेटिंग सक्षम है या कॉन्फ़िगर नहीं है, तो उपयोगकर्ता अपने Google खाते के साथ प्रमाणीकरण द्वारा मेघ मुद्रण प्रॉक्सी सक्षम कर सकते हैं. यदि यह सेटिंग अक्षम है, तो उपयोगकर्ता प्रॉक्सी को सक्षम नहीं कर सकते, और मशीन को <ph name="CLOUD_PRINT_NAME" /> के साथ प्रिंटर साझा करने की अनुमति नहीं दी जाएगी.</translation> -<translation id="3322771899429619102">आपको उन url पैटर्न की सूची सेट करने देती है जो ऐसी साइट निर्दिष्ट करते हैं जिन्हें कुंजी जेनरेशन का उपयोग करने की अनुमति है. यदि कोई url पैटर्न 'KeygenBlockedForUrls' में हो, तो वह इन अपवादों को ओवरराइड करता है. +<translation id="3322771899429619102">आपको उन url पैटर्न की सूची सेट करने देती है जो ऐसी साइट निर्दिष्ट करते हैं जिन्हें कुंजी जेनरेशन का उपयोग करने की अनुमति है. यदि कोई url पैटर्न 'KeygenBlockedForUrls' में हो, तो वह इन अपवादों को ओवरराइड करता है. - यदि यह पॉलिसी सेट किए बिना छोड़ दी जाती है तो सभी साइट के लिए डिफ़ॉल्ट मान का उपयोग या तो 'DefaultKeygenSetting' नीति के सेट होने पर उससे किया जाएगा, अन्यथा उपयोगकर्ता के व्यक्तिगत कॉन्फ़िगरेशन से किया जाएगा.</translation> + यदि यह पॉलिसी सेट किए बिना छोड़ दी जाती है तो सभी साइट के लिए डिफ़ॉल्ट मान का उपयोग या तो 'DefaultKeygenSetting' नीति के सेट होने पर उससे किया जाएगा, अन्यथा उपयोगकर्ता के व्यक्तिगत कॉन्फ़िगरेशन से किया जाएगा.</translation> <translation id="3381968327636295719">डिफ़ॉल्ट रूप से होस्ट ब्राउज़र का उपयोग करें</translation> <translation id="3417418267404583991">यदि यह नीति सही पर सेट है या कॉन्फ़िगर नहीं है, तो <ph name="PRODUCT_OS_NAME" /> अतिथि प्रवेश सक्षम करेगा. अतिथि प्रवेश अज्ञात उपयोगकर्ता सत्र है और इसके लिए पासवर्ड की आवश्यकता नहीं है. @@ -882,9 +882,9 @@ यह पॉलिसी <ph name="PRODUCT_NAME" /> द्वारा स्वयं के आंतरिक उपयोग के लिए है.</translation> <translation id="4224610387358583899">स्क्रीन लॉक विलंब</translation> -<translation id="423797045246308574">आपको ऐसे url पैटर्न की सूची सेट करने देती है जो उन साइट को निर्दिष्ट करते हैं जिन्हें कुंजी जेनरेशन का उपयोग करने की अनुमति नहीं है. यदि कोई url पैटर्न 'KeygenAllowedForUrls' में है, तो यह पॉलिसी इन अपवादों को ओवरराइड करती है. +<translation id="423797045246308574">आपको ऐसे url पैटर्न की सूची सेट करने देती है जो उन साइट को निर्दिष्ट करते हैं जिन्हें कुंजी जेनरेशन का उपयोग करने की अनुमति नहीं है. यदि कोई url पैटर्न 'KeygenAllowedForUrls' में है, तो यह पॉलिसी इन अपवादों को ओवरराइड करती है. - यदि यह पॉलिसी सेट किए बिना छोड़ दी जाती है तो वैश्विक डिफ़ॉल्ट मान का उपयोग इन सभी साइट के लिए या तो 'DefaultKeygenSetting' पॉलिसी के सेट होने पर उससे किया जाएगा, अन्यथा उपयोगकर्ता के व्यक्तिगत कॉन्फ़िगरेशन से किया जाएगा.</translation> + यदि यह पॉलिसी सेट किए बिना छोड़ दी जाती है तो वैश्विक डिफ़ॉल्ट मान का उपयोग इन सभी साइट के लिए या तो 'DefaultKeygenSetting' पॉलिसी के सेट होने पर उससे किया जाएगा, अन्यथा उपयोगकर्ता के व्यक्तिगत कॉन्फ़िगरेशन से किया जाएगा.</translation> <translation id="4250680216510889253">नहीं</translation> <translation id="427632463972968153">POST के साथ चित्र खोज करते समय उपयोग किए जाने वाले पैरामीटर निर्दिष्ट करती है. इसमें अल्पविराम द्वारा अलग किए गए नाम/मान के युग्म शामिल होते हैं. यदि कोई मान टेम्पलेट पैरामीटर, जैसे उपरोक्त उदाहरण में {imageThumbnail} है, तो उसे वास्तविक चित्र थंबनेल डेटा से प्रतिस्थापित कर दिया जाएगा. @@ -2018,7 +2018,7 @@ <translation id="8300455783946254851">सही पर सेट होने पर सेल्युलर कनेक्शन का उपयोग करते समय <ph name="PRODUCT_OS_NAME" /> फ़ाइलें ऐप्स में Google डिस्क समन्वयन को अक्षम करती है. उस स्थिति में, डेटा डेटा को Google डिस्क में तभी समन्वयित किया जाता है जब WiFi या ईथरनेट से कनेक्ट किया गया हो. यदि सेट नहीं हो या गलत पर सेट हो, तो उपयोगकर्ता फ़ाइलों को सेल्युलर कनेक्शन के द्वारा Google डिस्क में स्थानान्तरित कर सकेगा.</translation> -<translation id="8312129124898414409">आपको यह सेट करने देती है कि वेबसाइट को कुंजी जेनरेशन का उपयोग करने की अनुमति है या नहीं. कुंजी जेनरेशन का उपयोग करने की अनुमति या तो सभी वेबसाइट के लिए हो सकती है या सभी वेबसाइट के लिए अस्वीकृत की जा सकती है. +<translation id="8312129124898414409">आपको यह सेट करने देती है कि वेबसाइट को कुंजी जेनरेशन का उपयोग करने की अनुमति है या नहीं. कुंजी जेनरेशन का उपयोग करने की अनुमति या तो सभी वेबसाइट के लिए हो सकती है या सभी वेबसाइट के लिए अस्वीकृत की जा सकती है. यदि यह पॉलिसी सेट किए बिना छोड़ दी जाती है, तो 'BlockKeygen' का उपयोग किया जाएगा और उपयोगकर्ता उसे बदल सकेगा.</translation> <translation id="8329984337216493753">यह नीति केवल रिटेल मोड में सक्रिय है. @@ -2199,7 +2199,6 @@ नीति का मान मिलीसेकंड में निर्दिष्ट किया जाना चाहिए. मानों को प्रयोग में नहीं विलंब से कम होने के लिए क्लैम्प किया जाता है.</translation> <translation id="891435090623616439">JSON स्ट्रिंग के रूप में एन्कोड किया गया है, विवरण के लिए <ph name="COMPLEX_POLICIES_URL" /> देखें</translation> <translation id="8947415621777543415">डिवाइस स्थान की रिपोर्ट करें</translation> -<translation id="89493502583189945"><ph name="PRODUCT_NAME" /> के प्रारंभ होने पर उसमें लागू होने वाले फ़्लैग निर्दिष्ट करती है. निर्दिष्ट फ़्लैग <ph name="PRODUCT_NAME" /> के प्रारंभ होने से भी पहले लागू कर दिए जाते हैं, यहां तक प्रवेश स्क्रीन के लिए भी.</translation> <translation id="8951350807133946005">डिस्क संचय निर्देशिका सेट करें</translation> <translation id="8955719471735800169">शीर्ष पर वापस जाएं</translation> <translation id="8960850473856121830">इस सूची के पैटर्न का मिलान अनुरोध करने वाले URL के सुरक्षा
diff --git a/components/policy/resources/policy_templates_hr.xtb b/components/policy/resources/policy_templates_hr.xtb index 5314ac8..8f77142f 100644 --- a/components/policy/resources/policy_templates_hr.xtb +++ b/components/policy/resources/policy_templates_hr.xtb
@@ -2045,7 +2045,6 @@ Vrijednost pravila treba navesti u milisekundama. Vrijednosti su ograničene na vrijeme kraće od odgode neaktivnosti.</translation> <translation id="891435090623616439">kodirano kao JSON niz, pojedinosti potražite na stranici <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Prijava lokacije uređaja</translation> -<translation id="89493502583189945">Određuje oznake koje se trebaju primijeniti na <ph name="PRODUCT_NAME" /> prilikom njegova pokretanja. Navedene oznake primjenjuju se prije pokretanja preglednika <ph name="PRODUCT_NAME" /> čak i za zaslon za prijavu.</translation> <translation id="8951350807133946005">Postavi direktorij predmemorije na disku</translation> <translation id="8955719471735800169">Natrag na vrh</translation> <translation id="8960850473856121830">Uzorci na tom popisu usporedit će se sa sigurnosnim izvorištem
diff --git a/components/policy/resources/policy_templates_hu.xtb b/components/policy/resources/policy_templates_hu.xtb index 046324ae..70b23fa8b 100644 --- a/components/policy/resources/policy_templates_hu.xtb +++ b/components/policy/resources/policy_templates_hu.xtb
@@ -2046,7 +2046,6 @@ A házirend értékét ezredmásodpercben kell megadni. Az értéknek kisebbnek kell lennie a tétlenségi késleltetésnél.</translation> <translation id="891435090623616439">JSON-karakterláncként kódolva; a részletekért lásd: <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Eszköz helyének jelentése</translation> -<translation id="89493502583189945">Azokat a jelölőket adja meg, amelyeket a <ph name="PRODUCT_NAME" />-ra kell alkalmazni annak elindításakor. A megadott jelölők alkalmazása már az előtt megtörténik, hogy a <ph name="PRODUCT_NAME" /> elindulna (már a bejelentkezési képernyőn is).</translation> <translation id="8951350807133946005">A lemez gyorsítótár-könyvtárának beállítása</translation> <translation id="8955719471735800169">Vissza az oldal tetejére</translation> <translation id="8960850473856121830">A listában szereplő mintákat a böngésző egyezteti a kérelmező URL
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb index 1a26316..c831db9 100644 --- a/components/policy/resources/policy_templates_id.xtb +++ b/components/policy/resources/policy_templates_id.xtb
@@ -643,7 +643,7 @@ Jika setelan ini diaktifkan atau tidak dikonfigurasi, pengguna dapat mengaktifkan proxy cloud print lewat autentikasi dengan akun Google. Jika setelan ini dinonaktifkan, pengguna tidak dapat mengaktifkan proxy tersebut, dan komputer tidak akan diizinkan berbagi printernya dengan <ph name="CLOUD_PRINT_NAME" />.</translation> -<translation id="3322771899429619102">Memungkinkan Anda menyetel daftar pola URL yang menentukan situs mana yang diizinkan untuk menggunakan pembuatan kunci. Jika pola URL ada di dalam 'KeygenBlockedForUrls', hal tersebut akan mengganti pengecualian ini. +<translation id="3322771899429619102">Memungkinkan Anda menyetel daftar pola URL guna menentukan situs yang diizinkan untuk menggunakan pembuatan kunci. Jika pola URL ada di dalam 'KeygenBlockedForUrls', maka pola tersebut akan mengganti pengecualian ini. Jika kebijakan ini tidak disetel, nilai default global akan digunakan untuk semua situs dari kebijakan 'DefaultKeygenSetting' jika disetel, atau dari konfigurasi pribadi pengguna.</translation> <translation id="3381968327636295719">Gunakan browser host jika tidak diubah</translation> @@ -823,7 +823,7 @@ Kebijakan ini untuk penggunaan internal oleh <ph name="PRODUCT_NAME" /> itu sendiri.</translation> <translation id="4224610387358583899">Penundaan kunci layar</translation> -<translation id="423797045246308574">Memungkinkan Anda menyetel daftar pola URL yang menentukan situs mana yang diizinkan untuk menggunakan pembuatan kunci. Jika pola URL ada di dalam 'KeygenAllowedForUrls', kebijakan ini akan mengganti pengecualian ini. +<translation id="423797045246308574">Memungkinkan Anda menyetel daftar pola URL guna menentukan situs yang diizinkan untuk menggunakan pembuatan kunci. Jika pola URL ada di dalam 'KeygenAllowedForUrls', maka kebijakan ini akan mengganti pengecualian ini. Jika kebijakan ini tidak disetel, nilai default global akan digunakan untuk semua situs dari kebijakan 'DefaultKeygenSetting' jika disetel, atau dari konfigurasi pribadi pengguna.</translation> <translation id="4250680216510889253">Tidak</translation> @@ -1874,7 +1874,7 @@ <translation id="8300455783946254851">Menonaktifkan sinkronisasi Google Drive di aplikasi File <ph name="PRODUCT_OS_NAME" /> saat menggunakan sambungan seluler jika disetel ke True. Dalam kasus ini, data hanya disinkronkan ke Google Drive saat tersambung melalui Wi-Fi atau Ethernet. Jika tidak disetel atau disetel ke False, pengguna akan dapat mentransfer file ke Google Drive melalui sambungan seluler.</translation> -<translation id="8312129124898414409">Memungkinkan Anda menyetel apakah situs web diizinkan untuk menggunakan pembuatan kunci atau tidak. Menggunakan pembuatan kunci dapat diizinkan untuk semua situs web atau ditolak untuk semua situs web. +<translation id="8312129124898414409">Memungkinkan Anda menyetel apakah situs web diizinkan untuk menggunakan pembuatan kunci atau tidak. Penggunaan pembuatan kunci dapat diizinkan atau ditolak untuk semua situs web. Jika kebijakan ini tidak disetel, 'BlockKeygen' akan digunakan dan pengguna dapat mengubahnya.</translation> <translation id="8329984337216493753">Kebijakan ini aktif dalam mode eceran saja. @@ -2047,7 +2047,6 @@ Nilai kebijakan ini harus ditentukan dalam milidetik. Nilai dijepit menjadi lebih sedikit dari penundaan waktu menganggur.</translation> <translation id="891435090623616439">dienkode sebagai string JSON, untuk detailnya lihat <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Laporkan lokasi perangkat</translation> -<translation id="89493502583189945">Menentukan tanda yang harus diterapkan ke <ph name="PRODUCT_NAME" /> saat dimulai. Tanda yang ditentukan diterapkan sebelum <ph name="PRODUCT_NAME" /> dimulai, bahkan untuk layar masuk.</translation> <translation id="8951350807133946005">Setel direktori cache disk</translation> <translation id="8955719471735800169">Kembali ke atas</translation> <translation id="8960850473856121830">Pola dalam daftar ini akan dicocokan dengan asal
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb index fb56497f..ec543bc4 100644 --- a/components/policy/resources/policy_templates_it.xtb +++ b/components/policy/resources/policy_templates_it.xtb
@@ -1989,7 +1989,6 @@ Il valore della norma deve essere specificato in millisecondi. I valori devono essere inferiori al ritardo di inattività.</translation> <translation id="891435090623616439">codificato sotto forma di stringa JSON; per informazioni dettagliate, visita la pagina <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Segnala posizione del dispositivo</translation> -<translation id="89493502583189945">Consente di specificare i contrassegni da applicare all'avvio di <ph name="PRODUCT_NAME" />. I contrassegni specificati vengono applicati prima che <ph name="PRODUCT_NAME" /> venga avviato, anche per la schermata di accesso.</translation> <translation id="8951350807133946005">Impostazione directory della cache su disco</translation> <translation id="8955719471735800169">Torna all'inizio</translation> <translation id="8960850473856121830">I pattern di questo elenco verranno confrontati con l'origine di sicurezza dell'URL richiedente. Se viene trovata una corrispondenza, l'accesso ai dispositivi di acquisizione audio viene concesso senza richieste.
diff --git a/components/policy/resources/policy_templates_iw.xtb b/components/policy/resources/policy_templates_iw.xtb index 8cb49be3..43f5b29b 100644 --- a/components/policy/resources/policy_templates_iw.xtb +++ b/components/policy/resources/policy_templates_iw.xtb
@@ -2012,7 +2012,6 @@ ערך המדיניות צריך להיות באלפיות שנייה. הערכים מצומצמים כך שיהיו קטנים ממשך ההשהיה לפני מצב לא פעיל.</translation> <translation id="891435090623616439">מקודד כמחרוזת JSON, לפרטים עיין ב-<ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">דווח על מיקום המכשיר</translation> -<translation id="89493502583189945">מציינת את הסימונים שיש להחיל על <ph name="PRODUCT_NAME" /> כשהוא מופעל. הסימונים המצוינים מוחלים אפילו לפני ההפעלה של <ph name="PRODUCT_NAME" /> עבור מסך הכניסה.</translation> <translation id="8951350807133946005">הגדר את ספריית הקובץ השמור של הדיסק</translation> <translation id="8955719471735800169">חזרה למעלה</translation> <translation id="8960850473856121830">דפוסים ברשימה זו יותאמו כנגד מקור האבטחה
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb index 9f70d6f4..fdf9307 100644 --- a/components/policy/resources/policy_templates_ja.xtb +++ b/components/policy/resources/policy_templates_ja.xtb
@@ -639,7 +639,7 @@ この設定が無効な場合、ユーザーはプロキシを有効にできず、パソコンはプリンタを <ph name="CLOUD_PRINT_NAME" /> と共有できません。</translation> <translation id="3322771899429619102">キー生成を使用できるサイトの URL パターンを登録します。URL パターンが「KeygenBlockedForUrls」にも含まれる場合、この例外ポリシーは無視されます。 - このポリシーが未設定の場合は、「DefaultKeygenSetting」ポリシー(設定されている場合)またはユーザー個人の設定で指定されているすべてのサイトに対し、全体向けの既定値が使用されます。</translation> + このポリシーが未設定の場合は、「DefaultKeygenSetting」ポリシー(設定されている場合)またはユーザー個人の設定で指定されているすべてのサイトに対し、共通の既定値が使用されます。</translation> <translation id="3381968327636295719">ホスト ブラウザをデフォルトで使用する</translation> <translation id="3417418267404583991">このポリシーを true に設定した場合または未設定の場合、<ph name="PRODUCT_OS_NAME" /> ではゲスト ログインが有効になります。ゲスト ログインは匿名ユーザーのセッションで、パスワードが不要です。 @@ -819,7 +819,7 @@ <translation id="4224610387358583899">画面ロック遅延時間</translation> <translation id="423797045246308574">キー生成を使用できないサイトの URL パターンを登録します。URL パターンが「KeygenAllowedForUrls」にも含まれる場合は、このブロック ポリシーが優先されます。 - このポリシーが未設定の場合は、「DefaultKeygenSetting」ポリシー(設定されている場合)またはユーザー個人の設定で指定されているすべてのサイトに対し、全体向けの既定値が使用されます。</translation> + このポリシーが未設定の場合は、「DefaultKeygenSetting」ポリシー(設定されている場合)またはユーザー個人の設定で指定されているすべてのサイトに対し、共通の既定値が使用されます。</translation> <translation id="4250680216510889253">いいえ</translation> <translation id="427632463972968153">POST を使って画像検索を行うときに使用するパラメータを指定します。名前と値のペアをカンマで区切って指定します。値がテンプレート パラメータ(上記の例の {imageThumbnail} など)の場合は、実際の画像サムネイルのデータに置き換えられます。 @@ -2041,7 +2041,6 @@ ポリシーの値はミリ秒単位で指定してください。アイドル時間より長い値は指定できません。</translation> <translation id="891435090623616439">JSON 文字列としてのエンコードについて詳しくは、<ph name="COMPLEX_POLICIES_URL" /> をご覧ください</translation> <translation id="8947415621777543415">端末の位置をレポート</translation> -<translation id="89493502583189945"><ph name="PRODUCT_NAME" /> の起動時に適用するフラグを指定します。指定したフラグは、<ph name="PRODUCT_NAME" /> が起動する前のログイン画面にも適用されます。</translation> <translation id="8951350807133946005">ディスクのキャッシュ ディレクトリの設定</translation> <translation id="8955719471735800169">トップへ戻る</translation> <translation id="8960850473856121830">このリストに指定されているパターンと、リクエスト元 URL のセキュリティ オリジンが照合されます。一致するものが見つかった場合は、音声キャプチャ デバイスへのアクセスが確認なしで許可されます。
diff --git a/components/policy/resources/policy_templates_kn.xtb b/components/policy/resources/policy_templates_kn.xtb index 9eeb5c87..1075e9c 100644 --- a/components/policy/resources/policy_templates_kn.xtb +++ b/components/policy/resources/policy_templates_kn.xtb
@@ -2063,7 +2063,6 @@ ನೀತಿ ಮೌಲ್ಯವನ್ನು ಮಿಲಿಸೆಕುಂಡುಗಳಲ್ಲಿ ನಿರ್ದಿಷ್ಟಪಡಿಸಬೇಕು. ನಿಷ್ಪಲ ವಿಳಂಬಕ್ಕಿಂತ ಕಡಿಮೆಗೆ ಅಥವಾ ಸಮನಾಗಿ ನೀತಿ ಮೌಲ್ಯಗಳನ್ನು ಬಂಧಿಸಲಾಗಿದೆ.</translation> <translation id="891435090623616439">JSON ಸ್ಟ್ರಿಂಗ್ ಎಂಬುದಾಗಿ ಎನ್ಕೋಡ್ ಮಾಡಲಾಗಿದೆ, ವಿವರಗಳಿಗೆ <ph name="COMPLEX_POLICIES_URL" /> ನೋಡಿ</translation> <translation id="8947415621777543415">ಸಾಧನದ ಸ್ಥಳವನ್ನು ವರದಿ ಮಾಡಿ</translation> -<translation id="89493502583189945"><ph name="PRODUCT_NAME" /> ಪ್ರಾರಂಭಗೊಂಡಾಗ ಅದಕ್ಕೆ ಅನ್ವಯಿಸುವುದಕ್ಕಾಗಿ ಫ್ಲ್ಯಾಗ್ಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ. <ph name="PRODUCT_NAME" /> ಪ್ರಾರಂಭಿಸುವುದಕ್ಕೂ ಮೊದಲು ಅಂದರೆ ಸೈನ್-ಇನ್ ಪರದೆ ಪ್ರಾರಂಭಕ್ಕೆ ಮೊದಲೇ ನಿರ್ದಿಷ್ಟ ಫ್ಲ್ಯಾಗ್ಗಳನ್ನು ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ.</translation> <translation id="8951350807133946005">ಡಿಸ್ಕ್ ಸಂಗ್ರಹದ ಡೈರೆಕ್ಟರಿಯನ್ನು ಹೊಂದಿಸಿ</translation> <translation id="8955719471735800169">ಮೇಲಕ್ಕೆ ಹಿಂತಿರುಗಿ</translation> <translation id="8960850473856121830">ಈ ಪಟ್ಟಿಯಲ್ಲಿನ ನಮೂನೆಗಳನ್ನು ವಿನಂತಿಸಿರುವ URL ನ ಭದ್ರತೆ ಲಾಗಿನ್ಗೆ ಪ್ರತಿಯಾಗಿ ಹೊಂದಾಣಿಕೆ ಮಾಡಲಾಗುತ್ತದೆ.
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb index 10ff44a9..3e82d82 100644 --- a/components/policy/resources/policy_templates_ko.xtb +++ b/components/policy/resources/policy_templates_ko.xtb
@@ -713,9 +713,9 @@ 이 설정을 사용하거나 설정하지 않으면 사용자는 Google 계정에서 인증한 클라우드 프린트 프록시를 사용할 수 있습니다. 이 설정을 사용중지하면 사용자는 프록시를 사용할 수 없으며 컴퓨터는 <ph name="CLOUD_PRINT_NAME" />와(과)의 프린터 공유를 허용하지 않습니다.</translation> -<translation id="3322771899429619102">키 생성 사용이 허용된 사이트를 지정하는 URL 패턴 목록을 설정할 수 있습니다. URL 패턴이 'KeygenBlockedForUrls'에 있는 경우 이러한 예외를 재정의합니다. +<translation id="3322771899429619102">키 생성 사용이 허용되는 사이트를 지정하는 URL 패턴 목록을 설정할 수 있습니다. URL 패턴이 'KeygenBlockedForUrls'에 있는 경우 이 예외를 무시합니다. - 이 정책을 설정하지 않은 경우 'DefaultKeygenSetting' 정책이 설정되어 있으면 해당 정책의, 그렇지 않으면 사용자 개인 설정의 글로벌 기본값이 모든 사이트에서 사용됩니다.</translation> + 이 정책을 설정하지 않은 경우 'DefaultKeygenSetting' 정책이 설정되어 있으면 해당 정책의 글로벌 기본값이, 그렇지 않으면 사용자 개인 설정의 글로벌 기본값이 모든 사이트에서 사용됩니다.</translation> <translation id="3381968327636295719">호스트 브라우저를 기본으로 사용</translation> <translation id="3417418267404583991">이 정책을 true로 설정하거나 구성하지 않으면 <ph name="PRODUCT_OS_NAME" />은(는) 손님 로그인을 사용합니다. 손님 로그인은 익명 사용자 세션이며 비밀번호가 필요없습니다. @@ -918,9 +918,9 @@ 이 정책은 <ph name="PRODUCT_NAME" />에 한해 내부 용도로만 사용합니다.</translation> <translation id="4224610387358583899">화면 잠금 지연</translation> -<translation id="423797045246308574">키 생성 사용이 허용되지 않는 사이트를 지정하는 URL 패턴 목록을 설정할 수 있습니다. URL 패턴이 'KeygenAllowedForUrls'에 있는 경우 이 정책은 이러한 예외를 재정의합니다. +<translation id="423797045246308574">키 생성 사용이 허용되지 않는 사이트를 지정하는 URL 패턴 목록을 설정할 수 있습니다. URL 패턴이 'KeygenAllowedForUrls'에 있는 경우 이 정책은 이 예외를 무시합니다. - 이 정책을 설정하지 않은 경우 'DefaultKeygenSetting' 정책이 설정되어 있으면 해당 정책의, 그렇지 않으면 사용자 개인 설정의 글로벌 기본값이 모든 사이트에서 사용됩니다.</translation> + 이 정책을 설정하지 않은 경우 'DefaultKeygenSetting' 정책이 설정되어 있으면 해당 정책의 글로벌 기본값이, 그렇지 않으면 사용자 개인 설정의 글로벌 기본값이 모든 사이트에서 사용됩니다.</translation> <translation id="4250680216510889253">아니요</translation> <translation id="427632463972968153">POST로 이미지 검색을 할 때 사용될 매개변수를 지정합니다. 쉼표로 구분된 이름/값 쌍으로 구성됩니다. 값이 위의 예에 있는 {imageThumbnail}과 같은 템플릿 매개변수인 경우 실제 이미지 미리보기 데이터로 대체됩니다. @@ -2115,7 +2115,7 @@ <translation id="8300455783946254851">True로 설정하면 셀룰러 연결을 사용할 때 <ph name="PRODUCT_OS_NAME" /> 파일 앱에서 Google 드라이브 동기화를 사용 중지합니다. 이런 경우 Wi-Fi나 이더넷을 통해 연결되었을 때에만 데이터가 Google 드라이브에 동기화됩니다. 설정하지 않거나 False로 설정한 사용자는 셀룰러 연결을 통해 Google 드라이브에 파일을 전송할 수 있습니다.</translation> -<translation id="8312129124898414409">웹사이트에서 키 생성을 사용하도록 허용할지 여부를 설정할 수 있습니다. 키 생성 사용은 모든 웹사이트에서 허용 또는 거부하도록 할 수 있습니다. +<translation id="8312129124898414409">웹사이트에서 키 생성을 사용하도록 허용할지 여부를 설정할 수 있습니다. 키 생성 사용은 모든 웹사이트를 대상으로 허용 또는 거부하도록 설정합니다. 이 정책을 설정하지 않은 경우 'BlockKeygen'이 사용되며 사용자가 설정을 변경할 수 있습니다.</translation> <translation id="8329984337216493753">이 정책은 판매 모드일 때만 사용할 수 있습니다. @@ -2304,7 +2304,6 @@ 정책 값은 밀리초 단위로 지정해야 하며, 유휴 지연 시간보다 작도록 값이 잘립니다.</translation> <translation id="891435090623616439">JSON 문자열로 인코딩됨, 자세한 내용은 <ph name="COMPLEX_POLICIES_URL" /> 참조</translation> <translation id="8947415621777543415">기기 위치 신고</translation> -<translation id="89493502583189945"><ph name="PRODUCT_NAME" />을(를) 시작할 때 적용할 플래그를 지정합니다. 로그인 화면에서도 <ph name="PRODUCT_NAME" />이(가) 시작하기 전에 지정한 플래그가 적용됩니다.</translation> <translation id="8951350807133946005">디스크 캐시 디렉토리 설정</translation> <translation id="8955719471735800169">맨위로</translation> <translation id="8960850473856121830">이 목록의 패턴을 요청 URL의 보안 출처와 비교합니다.
diff --git a/components/policy/resources/policy_templates_lt.xtb b/components/policy/resources/policy_templates_lt.xtb index e6b4adf..16ae7c77 100644 --- a/components/policy/resources/policy_templates_lt.xtb +++ b/components/policy/resources/policy_templates_lt.xtb
@@ -2325,7 +2325,6 @@ Politikos vertė turėtų būti nurodoma milisekundėmis. Vertės sumažinamos, kad neviršytų neveikos delsos laiko.</translation> <translation id="891435090623616439">koduojama JSON eilute, daugiau informacijos pateikiama apsilankius adresu <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Pranešti įrenginio vietą</translation> -<translation id="89493502583189945">Nurodomos žymos, kurios turėtų būti pritaikytos, kai paleidžiama „<ph name="PRODUCT_NAME" />“. Nurodytos žymos pritaikomos iki „<ph name="PRODUCT_NAME" />“ paleidimo (net ir prisijungimo) ekrane.</translation> <translation id="8951350807133946005">Nustatyti disko talpyklos katalogą</translation> <translation id="8955719471735800169">Į pradžią</translation> <translation id="8960850473856121830">Šiame sąraše pateikti šablonai bus palyginti su užklausą pateikusio
diff --git a/components/policy/resources/policy_templates_lv.xtb b/components/policy/resources/policy_templates_lv.xtb index ec8f195..d996876d 100644 --- a/components/policy/resources/policy_templates_lv.xtb +++ b/components/policy/resources/policy_templates_lv.xtb
@@ -2323,7 +2323,6 @@ Politikas vērtību nedrīkst norādīt milisekundēs. Ir jānorāda vērtības, kas ir mazākas par aizkavi līdz dīkstāvei.</translation> <translation id="891435090623616439">kodēts kā JSON virkne, detalizētu informāciju skatiet vietnē <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Ziņot par ierīces atrašanās vietu</translation> -<translation id="89493502583189945">Tiek norādītas atzīmes, kas jāizmanto pārlūkā <ph name="PRODUCT_NAME" />, kad tas tiek startēts. Norādītās atzīmes tiek izmantotas pirms pārlūka <ph name="PRODUCT_NAME" /> startēšanas, pat attiecībā uz pierakstīšanās ekrānu.</translation> <translation id="8951350807133946005">Iestatīt diska kešatmiņas direktoriju</translation> <translation id="8955719471735800169">Augšup</translation> <translation id="8960850473856121830">Šajā sarakstā pieejamajiem šabloniem tiek meklēta atbilstība pieprasītā URL
diff --git a/components/policy/resources/policy_templates_ml.xtb b/components/policy/resources/policy_templates_ml.xtb index fae0d4f..8dfd2d4 100644 --- a/components/policy/resources/policy_templates_ml.xtb +++ b/components/policy/resources/policy_templates_ml.xtb
@@ -717,7 +717,7 @@ ഈ ക്രമീകരണം പ്രാപ്തമാക്കിയിട്ടുണ്ട് അല്ലെങ്കിൽ കോൺഫിഗർ ചെയ്തില്ലെങ്കിൽ, ഉപയോക്താക്കൾക്ക് അവരുടെ Google അക്കൗണ്ട് ഉപയോഗിച്ചുള്ള പ്രമാണീകരണം വഴി ക്ലൗഡ് പ്രിന്റ് പ്രാപ്തമാക്കാൻ കഴിയും. ഈ ക്രമീകരണം അപ്രാപ്തമാക്കിയിട്ടുണ്ടെങ്കിൽ, ഉപയോക്താക്കൾക്ക് പ്രോക്സി പ്രാപ്തമാക്കാൻ കഴിയില്ല, മെഷീനുകൾ അവയുടെ പ്രിന്ററുകളെ <ph name="CLOUD_PRINT_NAME" /> എന്നതിനോടൊപ്പം പങ്കിടുന്നതിന് അനുവദിക്കില്ല.</translation> -<translation id="3322771899429619102">കീ സൃഷ്ടിക്കലിന് ഉപയോഗിക്കാൻ അനുവദിച്ചിരുന്ന സൈറ്റുകൾ നിർദ്ദേശിക്കുന്ന url പാറ്റേണുകളുടെ ഒരു ലിസ്റ്റ് സജ്ജമാക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു. url പാറ്റേൺ 'KeygenBlockedForUrls'-ൽ ആണെങ്കിൽ, അത് ഈ ഒഴിവാക്കലുകളെ അസാധുവാക്കുന്നു. +<translation id="3322771899429619102">കീ സൃഷ്ടിക്കലിന് ഉപയോഗിക്കാൻ അനുവദിക്കുന്ന സൈറ്റുകൾ വ്യക്തമാക്കുന്ന url പാറ്റേണുകളുടെ ഒരു ലിസ്റ്റ് സജ്ജമാക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു. url പാറ്റേൺ 'KeygenBlockedForUrls'-ൽ ആണെങ്കിൽ, അത് ഈ ഒഴിവാക്കലുകളെ അസാധുവാക്കുന്നു. ഈ നയം സജ്ജമാക്കാത്ത നിലയിലാണെങ്കിൽ എല്ലാ സൈറ്റുകൾക്കുമുള്ള ഗ്ലോബൽ ഡിഫോൾട്ട് മൂല്യം, 'DefaultKeygenSetting' നയം സജ്ജമാക്കിയിട്ടുണ്ടെങ്കിൽ അതിൽ നിന്നോ അല്ലെങ്കിൽ ഉപയോക്താവിന്റെ വ്യക്തിപരമായ കോൺഫിഗറേഷനിൽ നിന്നോ, ഉപയോഗിക്കുന്നതാണ്.</translation> <translation id="3381968327636295719">സ്ഥിരസ്ഥിതിയായി ഹോസ്റ്റ് ബ്രൌസര് ഉപയോഗിക്കുക</translation> @@ -926,7 +926,7 @@ ഈ നയം <ph name="PRODUCT_NAME" />-ന്റെ ആന്തരിക ഉപയോഗത്തിന് മാത്രമുള്ളതാണ്.</translation> <translation id="4224610387358583899">സ്ക്രീൻ ലോക്കുചെയ്യൽ കാലതാമസസമയം</translation> -<translation id="423797045246308574">കീ സൃഷ്ടിക്കലിന് ഉപയോഗിക്കാൻ അനുവദിച്ചിരുന്ന സൈറ്റുകൾ നിർദ്ദേശിക്കുന്ന url പാറ്റേണുകളുടെ ഒരു ലിസ്റ്റ് സജ്ജമാക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു. url പാറ്റേൺ 'KeygenAllowedForUrls',-ൽ ആണെങ്കിൽ, അത് ഈ ഒഴിവാക്കലുകളെ അസാധുവാക്കുന്നു. +<translation id="423797045246308574">കീ സൃഷ്ടിക്കലിന് ഉപയോഗിക്കാൻ അനുവദിച്ചിക്കുന്ന സൈറ്റുകൾ വ്യക്തമാക്കുന്ന url പാറ്റേണുകളുടെ ഒരു ലിസ്റ്റ് സജ്ജമാക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു. url പാറ്റേൺ 'KeygenAllowedForUrls',-ൽ ആണെങ്കിൽ, അത് ഈ ഒഴിവാക്കലുകളെ അസാധുവാക്കുന്നു. ഈ നയം സജ്ജമാക്കാത്ത നിലയിലാണെങ്കിൽ എല്ലാ സൈറ്റുകൾക്കുമുള്ള ഗ്ലോബൽ ഡിഫോൾട്ട് മൂല്യം, 'DefaultKeygenSetting' നയം സജ്ജമാക്കിയിട്ടുണ്ടെങ്കിൽ അതിൽ നിന്നോ അല്ലെങ്കിൽ ഉപയോക്താവിന്റെ വ്യക്തിപരമായ കോൺഫിഗറേഷനിൽ നിന്നോ, ഉപയോഗിക്കുന്നതാണ്.</translation> <translation id="4250680216510889253">ഇല്ല</translation> @@ -2330,7 +2330,6 @@ നയ മൂല്യം മില്ലിസെക്കൻഡുകളിൽ വ്യക്തമാക്കണം. മൂല്യങ്ങൾ നിഷ്ക്രിയ കാലതാമസത്തേക്കാൾ കുറവായി നിശ്ചയിക്കണം.</translation> <translation id="891435090623616439">JSON സ്ട്രിംഗായി എൻകോഡുചെയ്തു, വിശദാംശങ്ങൾക്ക് <ph name="COMPLEX_POLICIES_URL" /> കാണുക</translation> <translation id="8947415621777543415">ഉപകരണ ലൊക്കേഷൻ റിപ്പോർട്ടുചെയ്യുക</translation> -<translation id="89493502583189945"><ph name="PRODUCT_NAME" /> ആരംഭിക്കുമ്പോൾ ബാധകമാക്കേണ്ട ഫ്ലാഗുകൾ വ്യക്തമാക്കുന്നു. <ph name="PRODUCT_NAME" /> ആരംഭിക്കുന്നതിന് മുമ്പ്, വ്യക്തമാക്കിയ ഫ്ലാഗുകൾ സൈൻ ഇൻ സ്ക്രീനിനായും ബാധകമാക്കുന്നു.</translation> <translation id="8951350807133946005">ഡിസ്ക്ക് കാഷെ ഡയറക്ടറി സജ്ജമാക്കുക</translation> <translation id="8955719471735800169">മുകളിലേയ്ക്ക് മടങ്ങുക </translation> <translation id="8960850473856121830">ഈ ലിസ്റ്റിലെ പാറ്റേണുകൾ, അഭ്യർത്ഥിക്കുന്ന URL-ന്റെ സുരക്ഷാ ഉറവിടവുമായി
diff --git a/components/policy/resources/policy_templates_mr.xtb b/components/policy/resources/policy_templates_mr.xtb index 17074d6..412b94a 100644 --- a/components/policy/resources/policy_templates_mr.xtb +++ b/components/policy/resources/policy_templates_mr.xtb
@@ -703,7 +703,7 @@ हे सेटिंग सक्षम असल्यास किंवा कॉन्फिगर नसल्यास, वापरकर्ते त्यांच्या Google खात्यासह प्रमाणीकरणाद्वारे मेघ मुद्रण प्रॉक्सी सक्षम करू शकतात. हे सेटिंग अक्षम झाल्यास, वापरकर्ते प्रॉक्सी सक्षम करू शकत नाहीत आणि मशीनला त्याचे प्रिंटर <ph name="CLOUD_PRINT_NAME" /> सह सामायिक करण्यास अनुमती दिली जाणार नाही.</translation> -<translation id="3322771899429619102">की निर्मिती वापरण्याची अनुमती दिलेल्या साइटना निर्दिष्ट करणार्या url नमुन्यांची सूची सेट करण्याची आपल्याला अनुमती देते. url नमुना 'KeygenBlockedForUrls' मध्ये असल्यास, तो या अपवादांना अधिशून्य करतो. +<translation id="3322771899429619102">की निर्मिती वापरण्याची अनुमती दिलेल्या साइटना निर्दिष्ट करणाऱ्या url नमुन्यांची सूची सेट करण्याची आपल्याला अनुमती देते. url नमुना 'KeygenBlockedForUrls' मध्ये असल्यास, तो या अपवादांना अधिशून्य करतो. हे धोरण सेट न केलेले ठेवल्यास सर्व साइटसाठी जागतिक डीफॉल्ट मूल्य हे 'DefaultKeygenSetting' धोरण सेट केलेले असल्यास त्यामधून किंवा अन्यथा वापरकर्त्याच्या वैयक्तिक कॉन्फिगरेशन मधून वापरले जाईल.</translation> @@ -913,7 +913,7 @@ हे धोरण <ph name="PRODUCT_NAME" /> च्या स्वतःच्या अंतर्गत वापरासाठी आहे.</translation> <translation id="4224610387358583899">स्क्रीन लॉक विलंब</translation> -<translation id="423797045246308574">की निर्मिती वापरण्याची अनुमती नसलेल्या साइटना निर्दिष्ट करणार्या url नमुन्यांची सूची सेट करण्याची आपल्याला अनुमती देते. url नमुना 'KeygenAllowedForUrls' मध्ये असल्यास, तो या अपवादांना अधिशून्य करतो. +<translation id="423797045246308574">की निर्मिती वापरण्याची अनुमती नसलेल्या साइटना निर्दिष्ट करणाऱ्या url नमुन्यांची सूची सेट करण्याची आपल्याला अनुमती देते. url नमुना 'KeygenAllowedForUrls' मध्ये असल्यास, तो या अपवादांना अधिशून्य करतो. हे धोरण सेट न केलेले ठेवल्यास सर्व साइटसाठी जागतिक डीफॉल्ट मूल्य हे 'DefaultKeygenSetting' धोरण सेट केलेले असल्यास त्यामधून किंवा अन्यथा वापरकर्त्याच्या वैयक्तिक कॉन्फिगरेशन मधून वापरले जाईल.</translation> <translation id="4250680216510889253">नाही</translation> @@ -2258,7 +2258,6 @@ धोरण मूल्य मिलिसेकंदांमध्ये निर्दिष्ट केले जावे. मूल्ये निष्क्रिय विलंबापेक्षा कमी करण्यासाठी पकडली जातात.</translation> <translation id="891435090623616439">JSON स्ट्रिंग म्हणून संकेतनात लिहीले, तपशीलासाठी <ph name="COMPLEX_POLICIES_URL" /> पहा</translation> <translation id="8947415621777543415">डिव्हाइस स्थानाचा अहवाल द्या</translation> -<translation id="89493502583189945">जेव्हा <ph name="PRODUCT_NAME" /> प्रारंभ होतो तेव्हा लागू होणारी ध्वजांकने निर्दिष्ट करते. साइन-इन स्क्रीनसाठी देखील <ph name="PRODUCT_NAME" /> चा प्रारंभ होण्यापूर्वी निर्दिष्ट ध्वजांकने लागू केली जातात.</translation> <translation id="8951350807133946005">डिस्क कॅशे निर्देशिका सेट करा</translation> <translation id="8955719471735800169">शीर्षस्थानाकडे परत</translation> <translation id="8960850473856121830">या सूचीमधील नमुने विनंती करणार्या URL च्या सुरक्षितता मूळच्या संबंधात जुळविले जातील.
diff --git a/components/policy/resources/policy_templates_ms.xtb b/components/policy/resources/policy_templates_ms.xtb index 299b8bc..fb8eb7ab 100644 --- a/components/policy/resources/policy_templates_ms.xtb +++ b/components/policy/resources/policy_templates_ms.xtb
@@ -2317,7 +2317,6 @@ Nilai dasar harus dinyatakan dalam milisaat. Nilai diapit supaya kurang daripada kelewatan melahu.</translation> <translation id="891435090623616439">dikodkan sebagai rentetan JSON, untuk mendapatkan butiran lanjut, lihat <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Laporkan lokasi peranti</translation> -<translation id="89493502583189945">Menentukan bendera yang harus digunakan pada <ph name="PRODUCT_NAME" /> apabila dimulakan. Bendera yang dinyatakan digunakan sebelum <ph name="PRODUCT_NAME" /> bermula walaupun untuk skrin log masuk.</translation> <translation id="8951350807133946005">Tetapkan direktori cache cakera</translation> <translation id="8955719471735800169">Kembali ke atas</translation> <translation id="8960850473856121830">Pola dalam senarai ini akan dipadankan dengan keselamatan
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb index 3e827f3..f58f9a5 100644 --- a/components/policy/resources/policy_templates_nl.xtb +++ b/components/policy/resources/policy_templates_nl.xtb
@@ -2298,7 +2298,6 @@ De beleidswaarde moet worden opgegeven in milliseconden. Waarden moeten lager zijn dan de inactieve vertraging.</translation> <translation id="891435090623616439">gecodeerd als een JSON-tekenreeks. Ga voor meer informatie naar <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Apparaatlocatie rapporteren</translation> -<translation id="89493502583189945">Hiermee worden de markeringen gespecificeerd die bij het starten moeten worden toegepast op <ph name="PRODUCT_NAME" />. De opgegeven markeringen worden toegepast voordat <ph name="PRODUCT_NAME" /> wordt gestart, zelfs voor het inlogscherm.</translation> <translation id="8951350807133946005">Directory voor schijfcache instellen</translation> <translation id="8955719471735800169">Bovenkant pagina</translation> <translation id="8960850473856121830">Patronen in deze lijst worden vergeleken met de beveiligingsoorsprong van de aanvragende URL. Als een overeenkomst wordt gevonden, wordt toegang tot apparaten voor het vastleggen van audio zonder prompt toegestaan.
diff --git a/components/policy/resources/policy_templates_no.xtb b/components/policy/resources/policy_templates_no.xtb index 639696b9..5e2d0559 100644 --- a/components/policy/resources/policy_templates_no.xtb +++ b/components/policy/resources/policy_templates_no.xtb
@@ -2228,7 +2228,6 @@ Innstillingsverdien må angis i millisekunder. Verdiene er låst til å være lavere enn inaktivitetsforsinkelsen.</translation> <translation id="891435090623616439">kodet som en JSON-streng – se <ph name="COMPLEX_POLICIES_URL" /> for nærmere informasjon</translation> <translation id="8947415621777543415">Rapportering av enhetsposisjonen</translation> -<translation id="89493502583189945">Spesifiserer flaggene som skal brukes når <ph name="PRODUCT_NAME" /> starter. De spesifiserte flaggene brukes før <ph name="PRODUCT_NAME" /> startes – selv for påloggingsskjermbildet.</translation> <translation id="8951350807133946005">Angi katalog for diskbufring</translation> <translation id="8955719471735800169">Tilbake til toppen</translation> <translation id="8960850473856121830">Mønstrene i denne listen sammenlignes med sikkerhetskilden
diff --git a/components/policy/resources/policy_templates_pl.xtb b/components/policy/resources/policy_templates_pl.xtb index 1d99efc..cab50c32 100644 --- a/components/policy/resources/policy_templates_pl.xtb +++ b/components/policy/resources/policy_templates_pl.xtb
@@ -2032,7 +2032,6 @@ Wartość zasady powinna być określona w milisekundach. Wartości muszą być mniejsze niż opóźnienie bezczynności.</translation> <translation id="891435090623616439">zakodowane jako ciąg JSON – więcej szczegółów znajdziesz na <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Zgłoś lokalizację urządzenia</translation> -<translation id="89493502583189945">Określa flagi stosowane przy uruchamianiu <ph name="PRODUCT_NAME" />. Wybrane flagi zaczynają obowiązywać w <ph name="PRODUCT_NAME" /> jeszcze przed wyświetleniem ekranu logowania.</translation> <translation id="8951350807133946005">Ustaw katalog podręcznej pamięci dyskowej</translation> <translation id="8955719471735800169">Powrót do góry</translation> <translation id="8960850473856121830">Wzorce na tej liście są porównywane ze źródłem zabezpieczeń
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb index 5a851ad..7c586c7f 100644 --- a/components/policy/resources/policy_templates_pt-BR.xtb +++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -2013,7 +2013,6 @@ O valor da política deve ser especificado em milissegundos. Os valores são fixados para serem inferiores ao intervalo de inatividade.</translation> <translation id="891435090623616439">codificado como um string JSON, para ver mais detalhes consulte <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Informar a localização do dispositivo</translation> -<translation id="89493502583189945">Especifica as sinalizações a serem aplicadas ao <ph name="PRODUCT_NAME" />, quando iniciado. As sinalizações especificadas são aplicadas antes de o <ph name="PRODUCT_NAME" /> ser iniciado mesmo para telas em que já o login já tenha sido feito.</translation> <translation id="8951350807133946005">Definir o diretório de cache de disco</translation> <translation id="8955719471735800169">Voltar ao início</translation> <translation id="8960850473856121830">Os padrões desta lista são comparados com a origem de
diff --git a/components/policy/resources/policy_templates_pt-PT.xtb b/components/policy/resources/policy_templates_pt-PT.xtb index 7184c52..e86b24c0 100644 --- a/components/policy/resources/policy_templates_pt-PT.xtb +++ b/components/policy/resources/policy_templates_pt-PT.xtb
@@ -2053,7 +2053,6 @@ O valor da política deve ser especificado em milissegundos. Os valores devem ser inferiores ao atraso de inatividade.</translation> <translation id="891435090623616439">codificado como uma string JSON; para mais detalhes, consulte <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Comunicar localização do dispositivo</translation> -<translation id="89493502583189945">Especifica os sinalizadores que devem ser aplicados ao <ph name="PRODUCT_NAME" /> quando este inicia. Os sinalizadores especificados são aplicados antes de o <ph name="PRODUCT_NAME" /> iniciar, mesmo para o ecrã de início de sessão.</translation> <translation id="8951350807133946005">Definir o diretório de cache do disco</translation> <translation id="8955719471735800169">Voltar ao início</translation> <translation id="8960850473856121830">Os padrões nesta lista vão ser comparados com a origem
diff --git a/components/policy/resources/policy_templates_ro.xtb b/components/policy/resources/policy_templates_ro.xtb index f8b81b6..af74cb7 100644 --- a/components/policy/resources/policy_templates_ro.xtb +++ b/components/policy/resources/policy_templates_ro.xtb
@@ -2072,7 +2072,6 @@ Valoarea politicii trebuie specificată în milisecunde. Valorile trebuie să fie mai mici decât intervalul de inactivitate.</translation> <translation id="891435090623616439">codificat(ă) ca un șir JSON, pentru detalii vezi <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Raportați locația dispozitivului</translation> -<translation id="89493502583189945">Specifică semnalizatoarele care trebuie aplicate pentru <ph name="PRODUCT_NAME" /> la pornirea acestuia. Semnalizatoarele specificate se aplică înainte ca <ph name="PRODUCT_NAME" /> să pornească, chiar și pentru ecranul de conectare.</translation> <translation id="8951350807133946005">Setează directorul pentru memorare în cache pe disc</translation> <translation id="8955719471735800169">Înapoi sus</translation> <translation id="8960850473856121830">Șabloanele din această listă vor fi comparate cu originea
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb index 2eae88f..84a131a 100644 --- a/components/policy/resources/policy_templates_ru.xtb +++ b/components/policy/resources/policy_templates_ru.xtb
@@ -2021,7 +2021,6 @@ Значение правила следует указывать в миллисекундах. Оно должно быть меньше времени задержки перехода в режим ожидания.</translation> <translation id="891435090623616439">кодируется в виде строки JSON, подробнее см. на странице <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Сообщить местоположение устройства</translation> -<translation id="89493502583189945">Определяет, какие настройки будут использоваться при запуске <ph name="PRODUCT_NAME" />. Они применяются ещё до запуска экрана входа <ph name="PRODUCT_NAME" />.</translation> <translation id="8951350807133946005">Установка каталога кеша на диске</translation> <translation id="8955719471735800169">В начало</translation> <translation id="8960850473856121830">Шаблоны, указанные в списке, сверяются с запрашивающим URL. При обнаружении соответствий доступ к аудиоустройствам предоставляется без предварительного запроса.
diff --git a/components/policy/resources/policy_templates_sk.xtb b/components/policy/resources/policy_templates_sk.xtb index e65bd22..df5592c4 100644 --- a/components/policy/resources/policy_templates_sk.xtb +++ b/components/policy/resources/policy_templates_sk.xtb
@@ -2292,7 +2292,6 @@ Hodnota pravidla by mala byť uvedená v milisekundách. Hodnoty musia byť nižšie ako oneskorenie režimu nečinnosti.</translation> <translation id="891435090623616439">kódované ako reťazec JSON, podrobnosti nájdete na adrese <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Nahlasovať polohu zariadenia</translation> -<translation id="89493502583189945">Určuje príznaky, ktoré sa použijú pri spúšťaní prehliadača <ph name="PRODUCT_NAME" />. Určené príznaky sa pred spustením prehliadača <ph name="PRODUCT_NAME" /> použijú aj na prihlasovacej obrazovke.</translation> <translation id="8951350807133946005">Nastaviť adresár diskovej vyrovnávacej pamäte</translation> <translation id="8955719471735800169">Späť na začiatok</translation> <translation id="8960850473856121830">Vzory v tomto zozname sa porovnajú s pôvodom
diff --git a/components/policy/resources/policy_templates_sl.xtb b/components/policy/resources/policy_templates_sl.xtb index e2ce657..b41757f 100644 --- a/components/policy/resources/policy_templates_sl.xtb +++ b/components/policy/resources/policy_templates_sl.xtb
@@ -2323,7 +2323,6 @@ Vrednost pravilnika naj bo navedena v milisekundah. Vrednosti morajo biti manjše od časovnega zamika nedejavnosti.</translation> <translation id="891435090623616439">kodirano kot niz JSON; več informacij je na voljo na <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Prijava lokacije naprave</translation> -<translation id="89493502583189945">Določa zastavice, ki naj se uporabijo za <ph name="PRODUCT_NAME" />, ko se zažene. Izbrane zastavice se pred zagonom brskalnika <ph name="PRODUCT_NAME" /> uporabijo tudi za zaslon za prijavo.</translation> <translation id="8951350807133946005">Nastavi imenik predpomnilnika diska</translation> <translation id="8955719471735800169">Nazaj na vrh</translation> <translation id="8960850473856121830">Vzorci na tem seznamu se bodo primerjali z varnostnim
diff --git a/components/policy/resources/policy_templates_sr.xtb b/components/policy/resources/policy_templates_sr.xtb index d19d142..2671a0c 100644 --- a/components/policy/resources/policy_templates_sr.xtb +++ b/components/policy/resources/policy_templates_sr.xtb
@@ -912,7 +912,7 @@ Ове смернице су намењене за интерно коришћење од стране самог <ph name="PRODUCT_NAME" />-а.</translation> <translation id="4224610387358583899">Време до закључавања екрана</translation> -<translation id="423797045246308574">Омогућава вам да подесите листу образаца URL-ова који наводе сајтове којима није дозвољено да користе генерисање шифара. Ако се URL образац налази у смерницама „KeygenAllowedForUrls“, ове смернице замењују ове изузетке. +<translation id="423797045246308574">Омогућава вам да подесите листу образаца URL-ова који наводе сајтове којима није дозвољено да користе генерисање шифара. Ако се URL образац налази у смерницама „KeygenAllowedForUrls“, те смернице замењују ове изузетке. Ако ове смернице нису подешене, глобална подразумевана вредност ће се користити за све сајтове из смерница „DefaultKeygenSetting“ уколико су оне подешене, а ако нису, из личне конфигурације корисника.</translation> <translation id="4250680216510889253">Не</translation> @@ -2294,7 +2294,6 @@ Вредност смерница треба да буде наведена у милисекундама. Вредности се смањују како би биле краће од времена до мировања.</translation> <translation id="891435090623616439">кодирано је као JSON стринг, детаље потражите на <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Пријављивање локације уређаја</translation> -<translation id="89493502583189945">Наводе ознаке које треба применити на <ph name="PRODUCT_NAME" /> када се покрене. Наведене ознаке се примењују пре него што се <ph name="PRODUCT_NAME" /> покрене чак и на екран за пријављивање.</translation> <translation id="8951350807133946005">Постави директоријум кеша диска</translation> <translation id="8955719471735800169">Назад на врх</translation> <translation id="8960850473856121830">Обрасци на овој листи ће се поредити са безбедносним
diff --git a/components/policy/resources/policy_templates_sv.xtb b/components/policy/resources/policy_templates_sv.xtb index d3f6c34..1997ec83 100644 --- a/components/policy/resources/policy_templates_sv.xtb +++ b/components/policy/resources/policy_templates_sv.xtb
@@ -2329,7 +2329,6 @@ Policyns värde anges i millisekunder. Värdet måste vara mindre än inaktivitetstiden.</translation> <translation id="891435090623616439">kodad som en JSON-sträng. Mer information finns i <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Rapportera enhetsplats</translation> -<translation id="89493502583189945">Anger de flaggor som ska användas i <ph name="PRODUCT_NAME" /> när den startas. De angivna flaggorna används innan <ph name="PRODUCT_NAME" /> startas även för inloggningsskärmen.</translation> <translation id="8951350807133946005">Ange katalog för diskcache</translation> <translation id="8955719471735800169">Tillbaka till början</translation> <translation id="8960850473856121830">Mönster på den här listan kommer att matchas mot
diff --git a/components/policy/resources/policy_templates_sw.xtb b/components/policy/resources/policy_templates_sw.xtb index 74caee2d..53c5ce9f 100644 --- a/components/policy/resources/policy_templates_sw.xtb +++ b/components/policy/resources/policy_templates_sw.xtb
@@ -702,7 +702,7 @@ Iwapo mpangilio huu utawashwa au hutasanidiwa, watumiaji wanaweza kutumia proksi ya kuchipisha ya wingu ili kuthibitisha akaunti ya Google. Iwapo mpangilio huu utafungwa, watumiaji hawawezi kuwasha proksi, na mashine haitaruhusiwa kushiriki printa zake na <ph name="CLOUD_PRINT_NAME" />.</translation> -<translation id="3322771899429619102">Hukuruhusu kuweka orodha ya michoro ya url inayobainisha tovuti zinazoruhusiwa kuunda ufunguo. Ikiwa mchoro wa url uko katika 'KeygenBlockedForUrls', huo unabatilisha vighairi hivi. +<translation id="3322771899429619102">Hukuruhusu kuweka orodha ya ruwaza za url zinazobainisha tovuti zinazoruhusiwa kuunda ufunguo. Ikiwa ruwaza ya url iko katika 'KeygenBlockedForUrls', hiyo hubatilisha vighairi hivi. Sera hii ikiachwa bila kuwekwa, thamani chaguo-msingi ya kote duniani itatumiwa kwenye tovuti zote iwe ni kutoka sera ya 'DefaultKeygenSetting', ikiwa imewekwa, la sivyo mipangilio ya kibinafsi ya mtumiaji itatumika.</translation> <translation id="3381968327636295719">Tumia kivinjari kipangishi kwa chaguo-msingi</translation> @@ -911,7 +911,7 @@ Sera hii ni ya matumizi ya ndani pekee na <ph name="PRODUCT_NAME" /> yenyewe.</translation> <translation id="4224610387358583899">Ucheleweshaji wa kufunga sjrini</translation> -<translation id="423797045246308574">Hukuruhusu kuweka orodha ya michoro ya url inayobainisha tovuti zinazoruhusiwa kuunda ufunguo. Ikiwa mchoro wa url uko katika 'KeygenAllowedForUrls', huo unabatilisha vighairi hivi. +<translation id="423797045246308574">Hukuruhusu kuweka orodha ya ruwaza za url zinazobainisha tovuti zinazoruhusiwa kuunda ufunguo. Ikiwa ruwaza ya url iko katika 'KeygenAllowedForUrls', hiyo hubatilisha vighairi hivi. Sera hii ikiachwa bila kuwekwa, thamani chaguo-msingi ya kote duniani itatumiwa kwa tovuti zote iwe ni kutoka sera ya 'DefaultKeygenSetting' ikiwa imewekwa, la sivyo mipangilio ya kibinafsi ya mtumiaji itatumika.</translation> <translation id="4250680216510889253">La</translation> @@ -2280,7 +2280,6 @@ Sera ya thamani inastahili kubainishwa kwa nukta. Thamani zinabanwa ili kuwa chini ya ucheleweshaji wa kutokuwa na shughuli.</translation> <translation id="891435090623616439">imesimbwa kama mfuatano wa JSON, kwa maelezo angalia <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Ripoti eneo la kifaa</translation> -<translation id="89493502583189945">Hubainisha alama zinazotakiwa kutumika kwenye <ph name="PRODUCT_NAME" /> inapoanza. Alama zinazobainishwa hutumika kabla <ph name="PRODUCT_NAME" /> haijaanzishwa hata kwa skrini ya kuingia katika akaunti.</translation> <translation id="8951350807133946005">Weka saraka ya akiba ya diski</translation> <translation id="8955719471735800169">Rudi juu</translation> <translation id="8960850473856121830">Ruwaza katika orodha hii zitalinganishwa dhidi ya asili ya usalama wa
diff --git a/components/policy/resources/policy_templates_ta.xtb b/components/policy/resources/policy_templates_ta.xtb index 97335af..6e7cf46 100644 --- a/components/policy/resources/policy_templates_ta.xtb +++ b/components/policy/resources/policy_templates_ta.xtb
@@ -2010,7 +2010,6 @@ கொள்கை மதிப்பை மில்லிவினாடிகளில் மட்டுமே குறிப்பிட வேண்டும். மதிப்புகளானது செயலற்ற நிலை தாமதத்தைவிட குறைவாக இருக்குமாறு அமைக்கப்படும்.</translation> <translation id="891435090623616439">JSON எழுத்துச்சரமாகக் குறியாக்கப்பட்டுள்ளது, விவரங்களுக்கு <ph name="COMPLEX_POLICIES_URL" />ஐப் பார்க்கவும்</translation> <translation id="8947415621777543415">சாதனத்தின் இருப்பிடத்தைப் புகாரளி</translation> -<translation id="89493502583189945"><ph name="PRODUCT_NAME" /> தொடங்கும்போது பயன்படுத்தப்பட வேண்டிய கொடிகளைக் குறிப்பிடுகிறது. குறிப்பிடப்பட்ட கொடிகள், <ph name="PRODUCT_NAME" /> தொடங்கும் முன்பாகவே, உள்நுழைவு திரையிலும் பயன்படுத்தப்படும்.</translation> <translation id="8951350807133946005">வட்டு தேக்கக கோப்பகத்தை அமை</translation> <translation id="8955719471735800169">மேலே செல்க</translation> <translation id="8960850473856121830">இந்தப் பட்டியலில் உள்ள வடிவங்கள், கோரப்படும் URLஇன் பாதுகாப்பு மூலத்துடன் ஒப்பிடப்படும். ஏதேனும் பொருத்தம் காணப்பட்டால், எந்த அறிவிப்பும் இல்லாமல் ஆடியோ பதிவுச் சாதனங்களுக்கு அணுகல் வழங்கப்படும்.
diff --git a/components/policy/resources/policy_templates_te.xtb b/components/policy/resources/policy_templates_te.xtb index 6d5ae9e9..a7f1b43 100644 --- a/components/policy/resources/policy_templates_te.xtb +++ b/components/policy/resources/policy_templates_te.xtb
@@ -2066,7 +2066,6 @@ విధానం విలువను మిల్లీసెకన్లలో పేర్కొనాలి. విలువలు నిష్క్రియ ఆలస్యం కంటే తక్కువగా ఉండేలా అమర్చబడతాయి.</translation> <translation id="891435090623616439">JSON స్ట్రింగ్గా ఎన్కోడ్ చేయబడుతుంది, వివరాల కోసం <ph name="COMPLEX_POLICIES_URL" /> చూడండి</translation> <translation id="8947415621777543415">పరికర స్థానాన్ని నివేదించండి</translation> -<translation id="89493502583189945"><ph name="PRODUCT_NAME" />ను ప్రారంభించినప్పుడు దానికి వర్తించబడే ఫ్లాగ్లను పేర్కొంటుంది. పేర్కొన్న ఫ్లాగ్లు <ph name="PRODUCT_NAME" /> ప్రారంభించబడటానికి ముందు సైన్ ఇన్ స్క్రీన్ కోసం కూడా వర్తిస్తాయి.</translation> <translation id="8951350807133946005">డిస్క్ కాష్ డైరెక్టరీని సెట్ చెయ్యి</translation> <translation id="8955719471735800169">ఎగువకు తిరిగి వెళ్ళు</translation> <translation id="8960850473856121830">ఈ జాబితాలోని నమూనాలు అభ్యర్థిస్తున్న URL భద్రతా మూలాధారంతో
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb index 3fac36a..93d41102 100644 --- a/components/policy/resources/policy_templates_th.xtb +++ b/components/policy/resources/policy_templates_th.xtb
@@ -2047,7 +2047,6 @@ ค่านโยบายควรกำหนดในหน่วยมิลลิวินาที ค่าจะถูกบีบให้น้อยกว่าความล่าช้าของการไม่ใช้งาน</translation> <translation id="891435090623616439">เข้ารหัสเป็นสตริง JSON ดูรายละเอียดได้ที่ <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">รายงานตำแหน่งอุปกรณ์</translation> -<translation id="89493502583189945">ระบุการตั้งค่าสถานะที่ควรนำไปใช้กับ <ph name="PRODUCT_NAME" /> เมื่อเริ่มใช้ผลิตภัณฑ์ โดยจะใช้การตั้งค่าสถานะที่ระบุนี้ก่อนที่ <ph name="PRODUCT_NAME" /> จะเริ่มขึ้นแม้เพียงหน้าจอการลงชื่อเข้าใช้</translation> <translation id="8951350807133946005">ตั้งค่าไดเรกทอรีสำหรับแคชของดิสก์</translation> <translation id="8955719471735800169">กลับไปด้านบน</translation> <translation id="8960850473856121830">รูปแบบในรายการนี้จะจับคู่กันกับต้นทาง
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb index 06bf0d9..18062c3 100644 --- a/components/policy/resources/policy_templates_tr.xtb +++ b/components/policy/resources/policy_templates_tr.xtb
@@ -2300,7 +2300,6 @@ Politika değeri milisaniye olarak belirtilmelidir. Değerler boşta kalma gecikmesinden daha az olacak şekilde bir aralığa sıkıştırılır.</translation> <translation id="891435090623616439">JSON dizesi olarak kodlanmıştır, ayrıntılar için <ph name="COMPLEX_POLICIES_URL" /> sayfasına bakın</translation> <translation id="8947415621777543415">Cihaz konumunu bildir</translation> -<translation id="89493502583189945">Başlatıldığında <ph name="PRODUCT_NAME" /> ürününe uygulanacak işaretleri belirtir. Belirtilen işaretler, <ph name="PRODUCT_NAME" /> başlatılmadan önce daha oturum açma ekranı bile gelmeden uygulanır.</translation> <translation id="8951350807133946005">Disk önbellek dizinini ayarla</translation> <translation id="8955719471735800169">Başa dön</translation> <translation id="8960850473856121830">Bu listedeki kalıplar, istek yapan URL'nin güvenlik kaynağı ile karşılaştırılır. Bir eşleşme bulunursa, herhangi bir istemde bulunulmadan ses yakalama cihazlarına erişim izni verilir.
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb index dc35b12..b746395 100644 --- a/components/policy/resources/policy_templates_uk.xtb +++ b/components/policy/resources/policy_templates_uk.xtb
@@ -2047,7 +2047,6 @@ Значення правила має вказуватися в мілісекундах. Також значення мають обов’язково бути меншими за період затримки через неактивність.</translation> <translation id="891435090623616439">зашифровано як рядок JSON. Докладнішу інформацію можна знайти на сторінці <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Повідомляти місцезнаходження пристрою</translation> -<translation id="89493502583189945">Указує позначки, які мають застосовуватися під час запуску <ph name="PRODUCT_NAME" />. Указані позначки застосовуються перед запуском <ph name="PRODUCT_NAME" /> навіть для екрана входу.</translation> <translation id="8951350807133946005">Налаштування каталогу кешу на диску</translation> <translation id="8955719471735800169">На початок</translation> <translation id="8960850473856121830">Зразки в цьому списку зіставлятимуться з джерелом
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index 6be50c0..83eaa22 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb
@@ -2286,7 +2286,6 @@ Phải chỉ định giá trị chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn độ trễ khi không sử dụng.</translation> <translation id="891435090623616439">được mã hóa dưới dạng chuỗi JSON, để biết chi tiết hãy xem <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">Báo cáo vị trí thiết bị</translation> -<translation id="89493502583189945">Chỉ định cờ sẽ được áp dụng cho <ph name="PRODUCT_NAME" /> khi khởi động. Cờ chỉ định được áp dụng trước khi <ph name="PRODUCT_NAME" /> khởi động, ngay cả đối với màn hình đăng nhập.</translation> <translation id="8951350807133946005">Thiết lập thư mục bộ nhớ cache trên đĩa</translation> <translation id="8955719471735800169">Quay lại đầu trang</translation> <translation id="8960850473856121830">Mẫu trong danh sách này sẽ được đối sánh dựa trên nguồn gốc bảo mật
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb index bda40ec8..61fe1244 100644 --- a/components/policy/resources/policy_templates_zh-CN.xtb +++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -673,7 +673,7 @@ 如果您启用了此设置,YouTube 中将始终启用安全模式。 如果您停用了此设置或未指定值,YouTube 中将不会强制启用安全模式。</translation> -<translation id="3750220015372671395">禁止在这些网站上生成密钥</translation> +<translation id="3750220015372671395">禁止在这些网站上使用密钥生成功能</translation> <translation id="3756011779061588474">禁止开发者模式</translation> <translation id="3758249152301468420">停用开发者工具</translation> <translation id="3765260570442823273">待机退出警告讯息的持续时间</translation> @@ -1643,7 +1643,7 @@ 如果此政策未设置或设为True,已注册的设备将定期报告操作系统和固件版本。如果此政策设为False,则不报告版本信息。</translation> <translation id="7511361072385293666">如果此政策设为 true 或未设置,则允许在 <ph name="PRODUCT_NAME" /> 中使用 QUIC 协议。 如果此政策设为 false,则禁止使用 QUIC 协议。</translation> -<translation id="7519251620064708155">允许在这些网站上生成密钥</translation> +<translation id="7519251620064708155">允许在这些网站上使用密钥生成功能</translation> <translation id="7523476810162382273">将监测信息发送到管理服务器</translation> <translation id="7529100000224450960">可让您设置网址格式的列表,这些网址格式用于指定允许打开弹出式窗口的网站。在未设置此政策的情况下,如果设置了“DefaultPopupsSetting”政策,那么将对该政策中的所有网站使用全局默认值,否则将对用户个人配置中的所有网站使用全局默认值。</translation> <translation id="7529144158022474049">自动更新分配因素</translation> @@ -1998,7 +1998,6 @@ 指定的政策值应以毫秒为单位,并且必须少于闲置延迟时间。</translation> <translation id="891435090623616439">已编码为 JSON 字符串。有关详情,请访问 <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">报告设备位置</translation> -<translation id="89493502583189945">指定应在 <ph name="PRODUCT_NAME" /> 启动时应用于它的选项。指定的选项在 <ph name="PRODUCT_NAME" /> 尚未启动进入登录屏幕之前就会应用。</translation> <translation id="8951350807133946005">设置磁盘缓存目录</translation> <translation id="8955719471735800169">返回页首</translation> <translation id="8960850473856121830">如果有网址请求使用音频捕获设备,系统会将此列表中的网址格式与该网址的安全来源进行比对。如果找到了匹配项,系统将允许该网址使用音频捕获设备,并且不会提示用户。
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb index 383e573..3484813 100644 --- a/components/policy/resources/policy_templates_zh-TW.xtb +++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -2029,7 +2029,6 @@ 指定政策值時需以毫秒為單位。該值需小於閒置延遲時間。</translation> <translation id="891435090623616439">以 JSON 字串格式編碼,詳情請參閱 <ph name="COMPLEX_POLICIES_URL" /></translation> <translation id="8947415621777543415">回報裝置位置</translation> -<translation id="89493502583189945">指定要在 <ph name="PRODUCT_NAME" /> 啟動時套用的設定。系統會在 <ph name="PRODUCT_NAME" /> 尚未開始登入畫面之前就套用指定的設定。</translation> <translation id="8951350807133946005">設定磁碟快取目錄</translation> <translation id="8955719471735800169">返回頁首</translation> <translation id="8960850473856121830">系統會將這份清單中的模式與要求網址的安全性
diff --git a/components/resource_provider/resource_provider_app.cc b/components/resource_provider/resource_provider_app.cc index e62438e..6d93f21 100644 --- a/components/resource_provider/resource_provider_app.cc +++ b/components/resource_provider/resource_provider_app.cc
@@ -32,7 +32,7 @@ if (app_path.empty()) return false; // The specified app has no resources. - connection->AddService<ResourceProvider>(this); + connection->AddInterface<ResourceProvider>(this); return true; }
diff --git a/components/resources/components_resources.grd b/components/resources/components_resources.grd index 59cc6de..466ae2e 100644 --- a/components/resources/components_resources.grd +++ b/components/resources/components_resources.grd
@@ -18,6 +18,7 @@ <part file="printing_resources.grdp" /> <part file="proximity_auth_resources.grdp" /> <part file="security_interstitials_resources.grdp" /> + <part file="signin_resources.grdp" /> <part file="sync_driver_resources.grdp" /> <part file="translate_resources.grdp" /> <part file="version_ui_resources.grdp" />
diff --git a/components/resources/signin_resources.grdp b/components/resources/signin_resources.grdp new file mode 100644 index 0000000..37fe757b --- /dev/null +++ b/components/resources/signin_resources.grdp
@@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<grit-part> + <include name="IDR_SIGNIN_INTERNALS_INDEX_HTML" + file="../signin/core/browser/resources/signin_index.html" + flattenhtml="true" allowexternalscript="true" type="BINDATA" /> + <include name="IDR_SIGNIN_INTERNALS_INDEX_JS" + file="../signin/core/browser/resources/signin_internals.js" + type="BINDATA" /> +</grit-part>
diff --git a/components/scheduler/base/task_queue_impl.cc b/components/scheduler/base/task_queue_impl.cc index e013804d..5f0b4a1 100644 --- a/components/scheduler/base/task_queue_impl.cc +++ b/components/scheduler/base/task_queue_impl.cc
@@ -39,9 +39,15 @@ } TaskQueueImpl::~TaskQueueImpl() { +#if DCHECK_IS_ON() base::AutoLock lock(any_thread_lock_); - if (any_thread().time_domain) - any_thread().time_domain->UnregisterQueue(this); + // NOTE this check shouldn't fire because |TaskQueueManager::queues_| + // contains a strong reference to this TaskQueueImpl and the TaskQueueManager + // destructor calls UnregisterTaskQueue on all task queues. + DCHECK(any_thread().task_queue_manager == nullptr) + << "UnregisterTaskQueue must be called first!"; + +#endif } TaskQueueImpl::Task::Task() @@ -109,10 +115,10 @@ void TaskQueueImpl::UnregisterTaskQueue() { base::AutoLock lock(any_thread_lock_); - if (!any_thread().task_queue_manager) - return; if (main_thread_only().time_domain) main_thread_only().time_domain->UnregisterQueue(this); + if (!any_thread().task_queue_manager) + return; any_thread().time_domain = nullptr; main_thread_only().time_domain = nullptr; any_thread().task_queue_manager->UnregisterTaskQueue(this); @@ -607,12 +613,19 @@ void TaskQueueImpl::SetTimeDomain(TimeDomain* time_domain) { base::AutoLock lock(any_thread_lock_); + DCHECK(time_domain); + // NOTE this is similar to checking |any_thread().task_queue_manager| but the + // TaskQueueSelectorTests constructs TaskQueueImpl directly with a null + // task_queue_manager. Instead we check |any_thread().time_domain| which is + // another way of asserting that UnregisterTaskQueue has not been called. + DCHECK(any_thread().time_domain); + if (!any_thread().time_domain) + return; DCHECK(main_thread_checker_.CalledOnValidThread()); if (time_domain == main_thread_only().time_domain) return; - if (time_domain) - main_thread_only().time_domain->MigrateQueue(this, time_domain); + main_thread_only().time_domain->MigrateQueue(this, time_domain); main_thread_only().time_domain = time_domain; any_thread().time_domain = time_domain; }
diff --git a/components/scheduler/base/task_queue_manager_unittest.cc b/components/scheduler/base/task_queue_manager_unittest.cc index e944f9a1..3da5f0d 100644 --- a/components/scheduler/base/task_queue_manager_unittest.cc +++ b/components/scheduler/base/task_queue_manager_unittest.cc
@@ -1511,6 +1511,9 @@ test_task_runner_->RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(4, 5, 6, 1, 2, 3)); + runners_[0]->UnregisterTaskQueue(); + runners_[1]->UnregisterTaskQueue(); + manager_->UnregisterTimeDomain(domain_a.get()); manager_->UnregisterTimeDomain(domain_b.get()); } @@ -1550,6 +1553,8 @@ test_task_runner_->RunUntilIdle(); EXPECT_THAT(run_order, ElementsAre(1, 2, 3, 4)); + runners_[0]->UnregisterTaskQueue(); + manager_->UnregisterTimeDomain(domain_a.get()); manager_->UnregisterTimeDomain(domain_b.get()); }
diff --git a/components/scheduler/base/task_queue_selector_unittest.cc b/components/scheduler/base/task_queue_selector_unittest.cc index c8aa9433..755e97e0 100644 --- a/components/scheduler/base/task_queue_selector_unittest.cc +++ b/components/scheduler/base/task_queue_selector_unittest.cc
@@ -123,6 +123,12 @@ } } + void TearDown() final { + for (scoped_refptr<TaskQueueImpl>& task_queue : task_queues_) { + task_queue->UnregisterTaskQueue(); + } + } + scoped_refptr<TaskQueueImpl> NewTaskQueueWithBlockReporting() { return make_scoped_refptr(new TaskQueueImpl( nullptr, virtual_time_domain_.get(), @@ -382,6 +388,8 @@ WorkQueue* chosen_work_queue; EXPECT_CALL(mock_observer, OnTriedToSelectBlockedWorkQueue(_)).Times(1); EXPECT_FALSE(selector.SelectWorkQueueToService(&chosen_work_queue)); + + task_queue->UnregisterTaskQueue(); } TEST_F(TaskQueueSelectorTest, TestObserverWithTwoBlockedQueues) { @@ -417,6 +425,9 @@ selector.RemoveQueue(task_queue.get()); EXPECT_CALL(mock_observer, OnTriedToSelectBlockedWorkQueue(_)).Times(1); EXPECT_FALSE(selector.SelectWorkQueueToService(&chosen_work_queue)); + + task_queue->UnregisterTaskQueue(); + task_queue2->UnregisterTaskQueue(); } struct ChooseOldestWithPriorityTestParam {
diff --git a/components/scheduler/base/time_domain.cc b/components/scheduler/base/time_domain.cc index 4399755f..6063798 100644 --- a/components/scheduler/base/time_domain.cc +++ b/components/scheduler/base/time_domain.cc
@@ -16,16 +16,19 @@ TimeDomain::TimeDomain(Observer* observer) : observer_(observer) {} TimeDomain::~TimeDomain() { - for (internal::TaskQueueImpl* queue : registered_task_queues_) { - queue->SetTimeDomain(nullptr); - } + DCHECK(main_thread_checker_.CalledOnValidThread()); + DCHECK(registered_task_queues_.empty()); } void TimeDomain::RegisterQueue(internal::TaskQueueImpl* queue) { + DCHECK(main_thread_checker_.CalledOnValidThread()); + DCHECK_EQ(queue->GetTimeDomain(), this); registered_task_queues_.insert(queue); } void TimeDomain::UnregisterQueue(internal::TaskQueueImpl* queue) { + DCHECK(main_thread_checker_.CalledOnValidThread()); + DCHECK_EQ(queue->GetTimeDomain(), this); registered_task_queues_.erase(queue); // We need to remove |task_queue| from delayed_wakeup_multimap_ which is a @@ -50,9 +53,16 @@ void TimeDomain::MigrateQueue(internal::TaskQueueImpl* queue, TimeDomain* destination_time_domain) { + DCHECK(main_thread_checker_.CalledOnValidThread()); + DCHECK(registered_task_queues_.find(queue) != registered_task_queues_.end()); + DCHECK_EQ(queue->GetTimeDomain(), this); DCHECK(destination_time_domain); registered_task_queues_.erase(queue); + // NOTE it's the responsibility of the caller to make sure + // |queue->GetTimeDomain()| is updated. + destination_time_domain->registered_task_queues_.insert(queue); + base::TimeTicks destination_now = destination_time_domain->Now(); // We need to remove |task_queue| from delayed_wakeup_multimap_ which is a // little awkward since it's keyed by time. O(n) running time. @@ -74,14 +84,13 @@ // MoveNewlyUpdatableQueuesIntoUpdatableQueueSet to flush it out. MoveNewlyUpdatableQueuesIntoUpdatableQueueSet(); updatable_queue_set_.erase(queue); - - destination_time_domain->RegisterQueue(queue); } void TimeDomain::ScheduleDelayedWork(internal::TaskQueueImpl* queue, base::TimeTicks delayed_run_time, base::TimeTicks now) { DCHECK(main_thread_checker_.CalledOnValidThread()); + DCHECK(registered_task_queues_.find(queue) != registered_task_queues_.end()); if (delayed_wakeup_multimap_.empty() || delayed_run_time < delayed_wakeup_multimap_.begin()->first) { @@ -95,6 +104,7 @@ } void TimeDomain::RegisterAsUpdatableTaskQueue(internal::TaskQueueImpl* queue) { + DCHECK(registered_task_queues_.find(queue) != registered_task_queues_.end()); { base::AutoLock lock(newly_updatable_lock_); newly_updatable_.push_back(queue); @@ -105,6 +115,7 @@ void TimeDomain::UnregisterAsUpdatableTaskQueue( internal::TaskQueueImpl* queue) { + DCHECK(registered_task_queues_.find(queue) != registered_task_queues_.end()); DCHECK(main_thread_checker_.CalledOnValidThread()); MoveNewlyUpdatableQueuesIntoUpdatableQueueSet(); #ifndef NDEBUG @@ -153,6 +164,7 @@ LazyNow* lazy_now, bool should_trigger_wakeup, const internal::TaskQueueImpl::Task* previous_task) { + DCHECK(main_thread_checker_.CalledOnValidThread()); // Wake up any queues with pending delayed work. Note std::multipmap stores // the elements sorted by key, so the begin() iterator points to the earliest // queue to wakeup. @@ -176,6 +188,7 @@ } void TimeDomain::ClearExpiredWakeups() { + DCHECK(main_thread_checker_.CalledOnValidThread()); LazyNow lazy_now(CreateLazyNow()); while (!delayed_wakeup_multimap_.empty()) { DelayedWakeupMultimap::iterator next_wakeup = @@ -187,6 +200,7 @@ } bool TimeDomain::NextScheduledRunTime(base::TimeTicks* out_time) const { + DCHECK(main_thread_checker_.CalledOnValidThread()); if (delayed_wakeup_multimap_.empty()) return false; @@ -195,6 +209,7 @@ } bool TimeDomain::NextScheduledTaskQueue(TaskQueue** out_task_queue) const { + DCHECK(main_thread_checker_.CalledOnValidThread()); if (delayed_wakeup_multimap_.empty()) return false;
diff --git a/components/scheduler/base/time_domain.h b/components/scheduler/base/time_domain.h index 36ea5828..fe1788c 100644 --- a/components/scheduler/base/time_domain.h +++ b/components/scheduler/base/time_domain.h
@@ -145,7 +145,7 @@ std::set<internal::TaskQueueImpl*> registered_task_queues_; - Observer* observer_; + Observer* observer_; // NOT OWNED. base::ThreadChecker main_thread_checker_;
diff --git a/components/scheduler/base/time_domain_unittest.cc b/components/scheduler/base/time_domain_unittest.cc index 2b94c4a3..c29f0ed 100644 --- a/components/scheduler/base/time_domain_unittest.cc +++ b/components/scheduler/base/time_domain_unittest.cc
@@ -68,6 +68,10 @@ "test.category", "test.category")); } + void TearDown() final { + task_queue_->UnregisterTaskQueue(); + } + virtual MockTimeDomain* CreateMockTimeDomain() { return new MockTimeDomain(nullptr); } @@ -142,39 +146,23 @@ } TEST_F(TimeDomainTest, UpdateWorkQueues) { - scoped_ptr<MockTimeDomain> dummy_delegate(new MockTimeDomain(nullptr)); - base::SimpleTestTickClock dummy_time_source; - scoped_refptr<cc::OrderedSimpleTaskRunner> dummy_task_runner( - new cc::OrderedSimpleTaskRunner(&dummy_time_source, false)); - TaskQueueManager task_queue_manager( - TaskQueueManagerDelegateForTest::Create( - dummy_task_runner, - make_scoped_ptr(new TestTimeSource(&dummy_time_source))), - "test.scheduler", "test.scheduler", "scheduler.debug"); - scoped_refptr<internal::TaskQueueImpl> dummy_queue = - task_queue_manager.NewTaskQueue(TaskQueue::Spec("test_queue")); - - // Post a delayed task on |dummy_queue| and advance the queue's clock so that - // next time MoveReadyDelayedTasksToDelayedWorkQueue is called, the task will - // get moved onto the Incoming queue. - base::TimeDelta dummy_delay = base::TimeDelta::FromMilliseconds(10); - dummy_queue->PostDelayedTask(FROM_HERE, base::Closure(), dummy_delay); - dummy_time_source.Advance(dummy_delay); - - // Now we can test that ScheduleDelayedWork triggers calls to - // MoveReadyDelayedTasksToDelayedWorkQueue as expected. base::TimeDelta delay = base::TimeDelta::FromMilliseconds(50); EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, delay)); base::TimeTicks now = time_domain_->Now(); base::TimeTicks delayed_runtime = now + delay; - time_domain_->ScheduleDelayedWork(dummy_queue.get(), delayed_runtime, now); + time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime, now); + + base::TimeTicks next_run_time; + ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); + EXPECT_EQ(delayed_runtime, next_run_time); time_domain_->UpdateWorkQueues(false, nullptr); - EXPECT_EQ(0UL, dummy_queue->delayed_work_queue()->Size()); + ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); + EXPECT_EQ(delayed_runtime, next_run_time); time_domain_->SetNow(delayed_runtime); time_domain_->UpdateWorkQueues(false, nullptr); - EXPECT_EQ(1UL, dummy_queue->delayed_work_queue()->Size()); + ASSERT_FALSE(time_domain_->NextScheduledRunTime(&next_run_time)); } TEST_F(TimeDomainTest, ClearExpiredWakeups) {
diff --git a/components/scheduler/child/child_scheduler.h b/components/scheduler/child/child_scheduler.h index 87bcf56..113be64 100644 --- a/components/scheduler/child/child_scheduler.h +++ b/components/scheduler/child/child_scheduler.h
@@ -16,13 +16,14 @@ } namespace scheduler { +class TaskQueue; class SCHEDULER_EXPORT ChildScheduler { public: virtual ~ChildScheduler() {} // Returns the default task runner. - virtual scoped_refptr<base::SingleThreadTaskRunner> DefaultTaskRunner() = 0; + virtual scoped_refptr<TaskQueue> DefaultTaskRunner() = 0; // Returns the idle task runner. Tasks posted to this runner may be reordered // relative to other task types and may be starved for an arbitrarily long
diff --git a/components/scheduler/child/compositor_worker_scheduler.cc b/components/scheduler/child/compositor_worker_scheduler.cc index 3b3500ef..33535ce 100644 --- a/components/scheduler/child/compositor_worker_scheduler.cc +++ b/components/scheduler/child/compositor_worker_scheduler.cc
@@ -9,6 +9,100 @@ namespace scheduler { +// TODO(scheduler-dev): Get rid of this asap! +namespace { +class CompositorWorkerTaskRunnerWrapper : public TaskQueue { + public: + explicit CompositorWorkerTaskRunnerWrapper( + scoped_refptr<base::SingleThreadTaskRunner> task_runner) + : task_runner_(task_runner) {} + + // TaskQueue implementation: + void UnregisterTaskQueue() override { NOTREACHED(); } + + bool RunsTasksOnCurrentThread() const override { + return task_runner_->RunsTasksOnCurrentThread(); + } + + bool PostDelayedTask(const tracked_objects::Location& from_here, + const base::Closure& task, + base::TimeDelta delay) override { + return task_runner_->PostDelayedTask(from_here, task, delay); + } + + bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here, + const base::Closure& task, + base::TimeDelta delay) override { + return task_runner_->PostNonNestableDelayedTask(from_here, task, delay); + } + + void SetQueueEnabled(bool enabled) override { NOTREACHED(); } + + bool IsQueueEnabled() const override { + NOTREACHED(); + return true; + } + + bool IsEmpty() const override { + NOTREACHED(); + return false; + }; + + bool HasPendingImmediateWork() const override { + NOTREACHED(); + return false; + }; + + bool NeedsPumping() const override { + NOTREACHED(); + return false; + }; + + const char* GetName() const override { + NOTREACHED(); + return nullptr; + }; + + void SetQueuePriority(QueuePriority priority) override { NOTREACHED(); } + + QueuePriority GetQueuePriority() const override { + NOTREACHED(); + return QueuePriority::NORMAL_PRIORITY; + }; + + void SetPumpPolicy(PumpPolicy pump_policy) override { NOTREACHED(); } + + PumpPolicy GetPumpPolicy() const override { + NOTREACHED(); + return PumpPolicy::AUTO; + }; + + void PumpQueue(bool may_post_dowork) override { NOTREACHED(); } + + void AddTaskObserver( + base::MessageLoop::TaskObserver* task_observer) override { + NOTREACHED(); + } + + void RemoveTaskObserver( + base::MessageLoop::TaskObserver* task_observer) override { + NOTREACHED(); + } + + void SetTimeDomain(TimeDomain* domain) override { NOTREACHED(); } + + TimeDomain* GetTimeDomain() const override { + NOTREACHED(); + return nullptr; + } + + private: + ~CompositorWorkerTaskRunnerWrapper() override {} + + scoped_refptr<base::SingleThreadTaskRunner> task_runner_; +}; +} // namespace + CompositorWorkerScheduler::CompositorWorkerScheduler(base::Thread* thread) : thread_(thread) {} @@ -16,11 +110,11 @@ void CompositorWorkerScheduler::Init() {} -scoped_refptr<base::SingleThreadTaskRunner> -CompositorWorkerScheduler::DefaultTaskRunner() { +scoped_refptr<TaskQueue> CompositorWorkerScheduler::DefaultTaskRunner() { // TODO(sad): Implement a more robust scheduler that can do idle tasks for GC // without regressing performance of the rest of the system. - return thread_->task_runner(); + return make_scoped_refptr( + new CompositorWorkerTaskRunnerWrapper(thread_->task_runner())); } scoped_refptr<scheduler::SingleThreadIdleTaskRunner>
diff --git a/components/scheduler/child/compositor_worker_scheduler.h b/components/scheduler/child/compositor_worker_scheduler.h index 4ab785c6..26cb7a09 100644 --- a/components/scheduler/child/compositor_worker_scheduler.h +++ b/components/scheduler/child/compositor_worker_scheduler.h
@@ -24,7 +24,7 @@ void Init() override; // ChildScheduler: - scoped_refptr<base::SingleThreadTaskRunner> DefaultTaskRunner() override; + scoped_refptr<TaskQueue> DefaultTaskRunner() override; scoped_refptr<scheduler::SingleThreadIdleTaskRunner> IdleTaskRunner() override; bool ShouldYieldForHighPriorityWork() override;
diff --git a/components/scheduler/child/web_scheduler_impl.cc b/components/scheduler/child/web_scheduler_impl.cc index 10a37d4..6c568159 100644 --- a/components/scheduler/child/web_scheduler_impl.cc +++ b/components/scheduler/child/web_scheduler_impl.cc
@@ -16,8 +16,8 @@ WebSchedulerImpl::WebSchedulerImpl( ChildScheduler* child_scheduler, scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner, - scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner, - scoped_refptr<base::SingleThreadTaskRunner> timer_task_runner) + scoped_refptr<TaskQueue> loading_task_runner, + scoped_refptr<TaskQueue> timer_task_runner) : child_scheduler_(child_scheduler), idle_task_runner_(idle_task_runner), timer_task_runner_(timer_task_runner),
diff --git a/components/scheduler/child/web_scheduler_impl.h b/components/scheduler/child/web_scheduler_impl.h index 76c0c217..82c1a2c 100644 --- a/components/scheduler/child/web_scheduler_impl.h +++ b/components/scheduler/child/web_scheduler_impl.h
@@ -12,10 +12,6 @@ #include "third_party/WebKit/public/platform/WebScheduler.h" #include "third_party/WebKit/public/platform/WebThread.h" -namespace base { -class SingleThreadTaskRunner; -} - namespace scheduler { class ChildScheduler; @@ -25,11 +21,10 @@ class SCHEDULER_EXPORT WebSchedulerImpl : public blink::WebScheduler { public: - WebSchedulerImpl( - ChildScheduler* child_scheduler, - scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner, - scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner, - scoped_refptr<base::SingleThreadTaskRunner> timer_task_runner); + WebSchedulerImpl(ChildScheduler* child_scheduler, + scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner, + scoped_refptr<TaskQueue> loading_task_runner, + scoped_refptr<TaskQueue> timer_task_runner); ~WebSchedulerImpl() override; // blink::WebScheduler implementation: @@ -58,7 +53,7 @@ ChildScheduler* child_scheduler_; // NOT OWNED scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_; - scoped_refptr<base::SingleThreadTaskRunner> timer_task_runner_; + scoped_refptr<TaskQueue> timer_task_runner_; scoped_ptr<WebTaskRunnerImpl> loading_web_task_runner_; scoped_ptr<WebTaskRunnerImpl> timer_web_task_runner_; };
diff --git a/components/scheduler/child/web_task_runner_impl.cc b/components/scheduler/child/web_task_runner_impl.cc index 6b1ec23..49b5133 100644 --- a/components/scheduler/child/web_task_runner_impl.cc +++ b/components/scheduler/child/web_task_runner_impl.cc
@@ -6,14 +6,13 @@ #include "base/bind.h" #include "base/location.h" -#include "base/single_thread_task_runner.h" +#include "components/scheduler/base/task_queue.h" #include "third_party/WebKit/public/platform/WebTraceLocation.h" namespace scheduler { -WebTaskRunnerImpl::WebTaskRunnerImpl( - scoped_refptr<base::SingleThreadTaskRunner> task_runner) - : task_runner_(task_runner) {} +WebTaskRunnerImpl::WebTaskRunnerImpl(scoped_refptr<TaskQueue> task_queue) + : task_queue_(task_queue) {} WebTaskRunnerImpl::~WebTaskRunnerImpl() {} @@ -21,7 +20,7 @@ blink::WebTaskRunner::Task* task) { tracked_objects::Location location(web_location.functionName(), web_location.fileName(), -1, nullptr); - task_runner_->PostTask( + task_queue_->PostTask( location, base::Bind(&WebTaskRunnerImpl::runTask, base::Passed(scoped_ptr<blink::WebTaskRunner::Task>(task)))); @@ -34,7 +33,7 @@ DCHECK_GE(delayMs, 0.0); tracked_objects::Location location(web_location.functionName(), web_location.fileName(), -1, nullptr); - task_runner_->PostDelayedTask( + task_queue_->PostDelayedTask( location, base::Bind(&WebTaskRunnerImpl::runTask, base::Passed(scoped_ptr<blink::WebTaskRunner::Task>(task))), @@ -42,7 +41,7 @@ } blink::WebTaskRunner* WebTaskRunnerImpl::clone() { - return new WebTaskRunnerImpl(task_runner_); + return new WebTaskRunnerImpl(task_queue_); } void WebTaskRunnerImpl::runTask(scoped_ptr<blink::WebTaskRunner::Task> task)
diff --git a/components/scheduler/child/web_task_runner_impl.h b/components/scheduler/child/web_task_runner_impl.h index 429e1ec6..ed4a3f88 100644 --- a/components/scheduler/child/web_task_runner_impl.h +++ b/components/scheduler/child/web_task_runner_impl.h
@@ -11,23 +11,15 @@ #include "components/scheduler/scheduler_export.h" #include "third_party/WebKit/public/platform/WebTaskRunner.h" -namespace base { -class SingleThreadTaskRunner; -} // namespace base - namespace scheduler { +class TaskQueue; class SCHEDULER_EXPORT WebTaskRunnerImpl : public blink::WebTaskRunner { public: - explicit WebTaskRunnerImpl( - scoped_refptr<base::SingleThreadTaskRunner> task_runner); + explicit WebTaskRunnerImpl(scoped_refptr<TaskQueue> task_queue); ~WebTaskRunnerImpl() override; - const scoped_refptr<base::SingleThreadTaskRunner>& task_runner() const { - return task_runner_; - } - // blink::WebTaskRunner implementation: void postTask(const blink::WebTraceLocation& web_location, blink::WebTaskRunner::Task* task) override; @@ -44,7 +36,7 @@ static void runTask(scoped_ptr<blink::WebTaskRunner::Task>); private: - scoped_refptr<base::SingleThreadTaskRunner> task_runner_; + scoped_refptr<TaskQueue> task_queue_; DISALLOW_COPY_AND_ASSIGN(WebTaskRunnerImpl); };
diff --git a/components/scheduler/child/webthread_impl_for_worker_scheduler.h b/components/scheduler/child/webthread_impl_for_worker_scheduler.h index 306cbd8..712c4ec4 100644 --- a/components/scheduler/child/webthread_impl_for_worker_scheduler.h +++ b/components/scheduler/child/webthread_impl_for_worker_scheduler.h
@@ -20,6 +20,7 @@ namespace scheduler { class SchedulerTqmDelegate; class SingleThreadIdleTaskRunner; +class TaskQueue; class WebSchedulerImpl; class WebTaskRunnerImpl; class WorkerScheduler; @@ -65,7 +66,7 @@ scoped_ptr<scheduler::WorkerScheduler> worker_scheduler_; scoped_ptr<scheduler::WebSchedulerImpl> web_scheduler_; scoped_refptr<base::SingleThreadTaskRunner> thread_task_runner_; - scoped_refptr<base::SingleThreadTaskRunner> task_runner_; + scoped_refptr<TaskQueue> task_runner_; scoped_refptr<scheduler::SingleThreadIdleTaskRunner> idle_task_runner_; scoped_refptr<SchedulerTqmDelegate> task_runner_delegate_; scoped_ptr<WebTaskRunnerImpl> web_task_runner_;
diff --git a/components/scheduler/child/worker_scheduler_impl.cc b/components/scheduler/child/worker_scheduler_impl.cc index e02bb7ea..e74328d 100644 --- a/components/scheduler/child/worker_scheduler_impl.cc +++ b/components/scheduler/child/worker_scheduler_impl.cc
@@ -39,8 +39,7 @@ idle_helper_.EnableLongIdlePeriod(); } -scoped_refptr<base::SingleThreadTaskRunner> -WorkerSchedulerImpl::DefaultTaskRunner() { +scoped_refptr<TaskQueue> WorkerSchedulerImpl::DefaultTaskRunner() { DCHECK(initialized_); return helper_.DefaultTaskRunner(); }
diff --git a/components/scheduler/child/worker_scheduler_impl.h b/components/scheduler/child/worker_scheduler_impl.h index cb77943f..83446cf 100644 --- a/components/scheduler/child/worker_scheduler_impl.h +++ b/components/scheduler/child/worker_scheduler_impl.h
@@ -29,7 +29,7 @@ ~WorkerSchedulerImpl() override; // WorkerScheduler implementation: - scoped_refptr<base::SingleThreadTaskRunner> DefaultTaskRunner() override; + scoped_refptr<TaskQueue> DefaultTaskRunner() override; scoped_refptr<SingleThreadIdleTaskRunner> IdleTaskRunner() override; bool CanExceedIdleDeadlineIfRequired() const override; bool ShouldYieldForHighPriorityWork() override;
diff --git a/components/scheduler/renderer/auto_advancing_virtual_time_domain_unittest.cc b/components/scheduler/renderer/auto_advancing_virtual_time_domain_unittest.cc index 62437bb..3a81f9f 100644 --- a/components/scheduler/renderer/auto_advancing_virtual_time_domain_unittest.cc +++ b/components/scheduler/renderer/auto_advancing_virtual_time_domain_unittest.cc
@@ -41,6 +41,7 @@ } void TearDown() override { + task_runner_->UnregisterTaskQueue(); manager_->UnregisterTimeDomain(auto_advancing_time_domain_.get()); }
diff --git a/components/scheduler/renderer/renderer_scheduler.h b/components/scheduler/renderer/renderer_scheduler.h index 1360a55..9f9204f1 100644 --- a/components/scheduler/renderer/renderer_scheduler.h +++ b/components/scheduler/renderer/renderer_scheduler.h
@@ -31,8 +31,7 @@ static scoped_ptr<RendererScheduler> Create(); // Returns the compositor task runner. - virtual scoped_refptr<base::SingleThreadTaskRunner> - CompositorTaskRunner() = 0; + virtual scoped_refptr<TaskQueue> CompositorTaskRunner() = 0; // Keep RendererScheduler::UseCaseToString in sync with this enum. enum class UseCase { @@ -53,7 +52,7 @@ // Returns the loading task runner. This queue is intended for tasks related // to resource dispatch, foreground HTML parsing, etc... - virtual scoped_refptr<base::SingleThreadTaskRunner> LoadingTaskRunner() = 0; + virtual scoped_refptr<TaskQueue> LoadingTaskRunner() = 0; // Returns the timer task runner. This queue is intended for DOM Timers. // TODO(alexclarke): Get rid of this default timer queue.
diff --git a/components/scheduler/renderer/renderer_scheduler_impl.cc b/components/scheduler/renderer/renderer_scheduler_impl.cc index 03d0c801..9076b2c 100644 --- a/components/scheduler/renderer/renderer_scheduler_impl.cc +++ b/components/scheduler/renderer/renderer_scheduler_impl.cc
@@ -153,13 +153,11 @@ return make_scoped_ptr(new WebThreadImplForRendererScheduler(this)); } -scoped_refptr<base::SingleThreadTaskRunner> -RendererSchedulerImpl::DefaultTaskRunner() { +scoped_refptr<TaskQueue> RendererSchedulerImpl::DefaultTaskRunner() { return helper_.DefaultTaskRunner(); } -scoped_refptr<base::SingleThreadTaskRunner> -RendererSchedulerImpl::CompositorTaskRunner() { +scoped_refptr<TaskQueue> RendererSchedulerImpl::CompositorTaskRunner() { helper_.CheckOnValidThread(); return compositor_task_runner_; } @@ -169,8 +167,7 @@ return idle_helper_.IdleTaskRunner(); } -scoped_refptr<base::SingleThreadTaskRunner> -RendererSchedulerImpl::LoadingTaskRunner() { +scoped_refptr<TaskQueue> RendererSchedulerImpl::LoadingTaskRunner() { helper_.CheckOnValidThread(); return default_loading_task_runner_; }
diff --git a/components/scheduler/renderer/renderer_scheduler_impl.h b/components/scheduler/renderer/renderer_scheduler_impl.h index 53c7d46..3f3a5ca 100644 --- a/components/scheduler/renderer/renderer_scheduler_impl.h +++ b/components/scheduler/renderer/renderer_scheduler_impl.h
@@ -43,10 +43,10 @@ // RendererScheduler implementation: scoped_ptr<blink::WebThread> CreateMainThread() override; - scoped_refptr<base::SingleThreadTaskRunner> DefaultTaskRunner() override; + scoped_refptr<TaskQueue> DefaultTaskRunner() override; scoped_refptr<SingleThreadIdleTaskRunner> IdleTaskRunner() override; - scoped_refptr<base::SingleThreadTaskRunner> CompositorTaskRunner() override; - scoped_refptr<base::SingleThreadTaskRunner> LoadingTaskRunner() override; + scoped_refptr<TaskQueue> CompositorTaskRunner() override; + scoped_refptr<TaskQueue> LoadingTaskRunner() override; scoped_refptr<TaskQueue> TimerTaskRunner() override; scoped_refptr<TaskQueue> NewLoadingTaskRunner(const char* name) override; scoped_refptr<TaskQueue> NewTimerTaskRunner(const char* name) override;
diff --git a/chrome/browser/resources/signin_internals/signin_index.css b/components/signin/core/browser/resources/signin_index.css similarity index 100% rename from chrome/browser/resources/signin_internals/signin_index.css rename to components/signin/core/browser/resources/signin_index.css
diff --git a/components/signin/core/browser/resources/signin_index.html b/components/signin/core/browser/resources/signin_index.html new file mode 100644 index 0000000..7965ffe6e --- /dev/null +++ b/components/signin/core/browser/resources/signin_index.html
@@ -0,0 +1,93 @@ +<!doctype html> +<html i18n-values="dir:textdirection;lang:language"> +<head> + <meta charset="utf-8"> + <title>Signin Internals</title> + <script src="chrome://resources/js/cr.js"></script> + <script src="chrome://resources/js/util.js"></script> + <script src="chrome://resources/js/load_time_data.js"></script> + <script src="chrome://signin-internals/strings.js"></script> + <if expr="is_ios"> + <!-- TODO(crbug.com/487000): Remove this once injected by the web layer. --> + <script src="chrome://resources/js/ios/web_ui.js"></script> + </if> + <link rel="stylesheet" href="chrome://resources/css/text_defaults.css"> + <link rel="stylesheet" type="text/css" href="signin_index.css"> +</head> +<body> + <div id='signin-info'> + <div class="section" jsselect="signin_info"> + <h2 jscontent="title"></h2> + <table class="signin-details"> + <tr jsselect="data" + jsvalues="class:chrome.signin.setClassFromValue($this.value)" + jseval="chrome.signin.highlightIfChanged(this, + this.children[1].innerText, value)"> + <td jscontent="label"></td> + <td jscontent="status"></td> + <td jscontent="time" jsdisplay="time"></td> + <td jsdisplay="time.length==0"> </td> + </tr> + </table> + </div> + </div> + <div id='token-info'> + <h2>Access Token Details By Account</h2> + <div class="tokenSection" jsselect="token_info"> + <h3 jscontent="title"></h3> + <table class="signin-details"> + <tr class="header"> + <td>Service</td> + <td>Requested Scopes</td> + <td>Request Time</td> + <td>Request Status</td> + </tr> + <tr jsselect="data" + jsvalues="class:chrome.signin.setClassFromValue($this.status)" + jseval="chrome.signin.highlightIfAnyChanged(this, + [[this.children[1].innerText, scopes], + [this.children[2].innerText, request_time], + [this.children[3].innerText, status]])"> + <td jscontent="service"></td> + <td jsvalues=".innerHTML: scopes"></td> + <td jscontent="request_time"></td> + <td jsvalues=".innerHTML: status"></td> + </tr> + </table> + </div> + </div> + <div id='cookie-info'> + <h2>Accounts in Cookie Jar</h2> + <div class="cookieSection"> + <table class="signin-details"> + <tr class="header"> + <td>Email Address</td> + <td>Gaia ID</td> + <td>Validity</td> + </tr> + <tr jsselect="cookie_info"> + <td jscontent="email"></td> + <td jscontent="gaia_id"></td> + <td jscontent="valid"></td> + </tr> + </table> + </div> + </div> + <div id="account-info"> + <h2>Accounts in Token Service</h2> + <div class="account-section"> + <table class="signin-details"> + <tr class="header"> + <td>Accound Id</td> + </tr> + <tr jsselect="accountInfo"> + <td jscontent="accountId"></td> + </tr> + </table> + </div> + </div> + <script src="chrome://resources/js/i18n_template.js"></script> + <script src="chrome://resources/js/jstemplate_compiled.js"></script> + <script src="chrome://signin-internals/signin_internals.js"></script> +</body> +</html>
diff --git a/chrome/browser/resources/signin_internals/signin_internals.js b/components/signin/core/browser/resources/signin_internals.js similarity index 100% rename from chrome/browser/resources/signin_internals/signin_internals.js rename to components/signin/core/browser/resources/signin_internals.js
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb index 3b82fef6..dd577b51 100644 --- a/components/strings/components_strings_am.xtb +++ b/components/strings/components_strings_am.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="am"> <translation id="1015255576907412255">ተጨማሪ መረጃ ለማግኘት የስርዓት አስተዳዳሪዎን ያግኙ።</translation> +<translation id="1015730422737071372">ተጨማሪ ዝርዝሮችን ያቅርቡ</translation> <translation id="1032854598605920125">በሰዓት አቅጣጫ አሽከርክር</translation> <translation id="1055184225775184556">&አክልን ቀልብስ</translation> <translation id="1064422015032085147">ድረ-ገጹን የሚያስተናግደው አገልጋይ ከልክ በላይ ጫና በዝቶበታል ወይም በጥገና ላይ ሊሆን ይችላል። @@ -435,6 +436,7 @@ <translation id="6637478299472506933">ማውረድ አልተሳካም</translation> <translation id="6644283850729428850">ይህ መመሪያ ተቋርጧል።</translation> <translation id="6646897916597483132">በካርድዎ ፊት ላይ ያለውን ባለ4 አኃዝ CVCን ያስገቡ</translation> +<translation id="6660210980321319655"><ph name="CRASH_TIME" /> ላይ በራስ-ሰር ሪፓርት ተደርጓል</translation> <translation id="6671697161687535275">የአስተያየት ጥቆማ ከChromium ይወገድ?</translation> <translation id="6710213216561001401">ቀዳሚ</translation> <translation id="6711464428925977395">በተኪ አገልጋዩ ላይ የሆነ ችግር አለ ወይም አድራሻው ትክክል አይደለም።</translation> @@ -628,6 +630,7 @@ <translation id="8971063699422889582">የአገልጋይ እውቅና ማረጋገጫ ጊዜው አልፎበታል።</translation> <translation id="8987927404178983737">ወር</translation> <translation id="8988760548304185580">የጊዜ ማብቂያ ቀን እና በካርድዎ ጀርባ ላይ ያለው ባለ3 አኃዝ CVCን ያስገቡ</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">ጥሩ ያልሆነ SSL የተገልጋይ ማረጋገጫ ሰርቲፊኬት።</translation> <translation id="901974403500617787">በመላው ስርዓት ላይ የሚተገበሩ ጥቆማዎች በባለቤቱ ብቻ ነው ሊዋቀሩ የሚችሉት፦ <ph name="OWNER_EMAIL" />።</translation> <translation id="9020142588544155172">አገልጋዩ ግንኙነቱን አልተቀበለውም።</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb index 7faab2a1..09d14b6 100644 --- a/components/strings/components_strings_ar.xtb +++ b/components/strings/components_strings_ar.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ar"> <translation id="1015255576907412255">اتصل بمشرف النظام للحصول على المزيد من المعلومات.</translation> +<translation id="1015730422737071372">تقديم تفاصيل إضافية</translation> <translation id="1032854598605920125">تدوير في اتجاه عقارب الساعة</translation> <translation id="1055184225775184556">تراجع عن الإ&ضافة</translation> <translation id="1064422015032085147">قد يكون الخادم الذي يستضيف صفحة الويب زائد التحميل أو قيد الصيانة. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">إخفاق التنزيل</translation> <translation id="6644283850729428850">تم تجاهل هذه السياسة.</translation> <translation id="6646897916597483132">أدخل رمز التحقق من البطاقة (CVC) المكون من أربعة أرقام من الجزء الأمامي من بطاقتك</translation> +<translation id="6660210980321319655">تم الإبلاغ عنه تلقائيًا <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">هل تريد إزالة اقتراح النموذج من Chromium؟</translation> <translation id="6710213216561001401">السابق</translation> <translation id="6711464428925977395">هناك خطأ ما في الخادم الوكيل، أو العنوان غير صحيح.</translation> @@ -632,6 +634,7 @@ <translation id="8971063699422889582">انتهت صلاحية شهادة الخادم.</translation> <translation id="8987927404178983737">شهر</translation> <translation id="8988760548304185580">أدخل تاريخ انتهاء الصلاحية ورمز التحقق من البطاقة (CVC) المكوّن من ثلاثة أرقام من الجزء الخلفي من بطاقتك.</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">شهادة تالفة لمصادقة عميل SSL (طبقة المقابس الآمنة).</translation> <translation id="901974403500617787">لا يمكن تعيين العلامات التي تسري عبر النظام إلا من قِبل المالك: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">رفض الخادم الاتصال.</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb index 2819b31..5474924a 100644 --- a/components/strings/components_strings_bg.xtb +++ b/components/strings/components_strings_bg.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="bg"> <translation id="1015255576907412255">Свържете се със системния си администратор за още информация.</translation> +<translation id="1015730422737071372">Въвеждане на допълнителни подробности</translation> <translation id="1032854598605920125">Завъртане по часовниковата стрелка</translation> <translation id="1055184225775184556">&Отмяна на добавянето</translation> <translation id="1064422015032085147">Сървърът, хостващ уеб страницата, може да е претоварен или в процес на профилактика. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">Неуспешно изтегляне</translation> <translation id="6644283850729428850">Това правило е оттеглено.</translation> <translation id="6646897916597483132">Въведете четирицифрения код за проверка от лицевата страна на картата си</translation> +<translation id="6660210980321319655">Сигналът е подаден автоматично в/ъв <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Предложението за формуляри да се премахне ли от Chromium?</translation> <translation id="6710213216561001401">Предишна</translation> <translation id="6711464428925977395">Нещо не е наред с прокси сървъра или адресът е неправилен.</translation> @@ -633,6 +635,7 @@ <translation id="8971063699422889582">Сертификатът на сървъра е с изтекла валидност.</translation> <translation id="8987927404178983737">Месец</translation> <translation id="8988760548304185580">Въведете датата на валидност и трицифрения код за проверка от гърба на картата си</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Невалиден сертификат за удостоверяване на SSL клиент.</translation> <translation id="901974403500617787">Флаговете, които се прилагат за цялата система, могат да бъдат зададени само от собственика: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Сървърът отказа връзката.</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb index 7af5946d..ddb79c19 100644 --- a/components/strings/components_strings_bn.xtb +++ b/components/strings/components_strings_bn.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="bn"> <translation id="1015255576907412255">আরো তথ্যের জন্য আপনার সিস্টেম প্রশাসকের সাথে যোগাযোগ করুন৷</translation> +<translation id="1015730422737071372">অতিরিক্ত বিবরণ দিন</translation> <translation id="1032854598605920125">ঘড়ির কাঁটার দিকে ঘোরান</translation> <translation id="1055184225775184556">&যোগ করাকে পূর্বাবস্থায় ফেরান</translation> <translation id="1064422015032085147">যে সার্ভার ওয়েবপৃষ্ঠাটি হোস্ট করছে সেটি ওভারলোড হয়ে থাকতে পারে বা সেটি রক্ষণাবেক্ষণাধীন অবস্থায় আছে। @@ -437,6 +438,7 @@ <translation id="6637478299472506933">ডাউনলোড ব্যর্থ হয়েছে</translation> <translation id="6644283850729428850">এই নীতিটি অসমর্থিত হয়েছে৷</translation> <translation id="6646897916597483132">আপনার কার্ডের সামনে থেকে ৪ সংখ্যার CVC লিখুন</translation> +<translation id="6660210980321319655">স্বয়ংক্রিয়ভাবে প্রতিবেদন করা হয়েছে <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Chromium থেকে ফর্ম প্রস্তাবনা সরাবেন?</translation> <translation id="6710213216561001401">পূর্ববর্তী</translation> <translation id="6711464428925977395">প্রক্সী সার্ভারের কোনো সমস্যা হয়েছে, অথবা ঠিকানাটি ভুল।</translation> @@ -633,6 +635,7 @@ <translation id="8971063699422889582">সার্ভারের শংসাপত্রের মেয়াদ ফুরিয়েছে৷</translation> <translation id="8987927404178983737">মাস</translation> <translation id="8988760548304185580">আপনার কার্ডের পিছনে থাকা ৩ সংখ্যার CVC এবং মেয়াদ শেষের তারিখ লিখুন</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">খারাপ SSL ক্লায়েন্ট প্রমাণীকরণ শংসাপত্র৷ </translation> <translation id="901974403500617787">যে ফ্ল্যাগগুলি সমস্ত সিস্টেম জুড়ে প্রয়োগ করা হয় সেগুলি শুধুমাত্র মালিকের দ্বারা সেট করা যেতে পারে: <ph name="OWNER_EMAIL" />৷</translation> <translation id="9020142588544155172">সার্ভার সংযোগ প্রত্যাখ্যান করেছে৷</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb index 207a52d5..069ad624 100644 --- a/components/strings/components_strings_ca.xtb +++ b/components/strings/components_strings_ca.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ca"> <translation id="1015255576907412255">Contacteu amb l'administrador del sistema per obtenir més informació.</translation> +<translation id="1015730422737071372">Proporcioneu més informació</translation> <translation id="1032854598605920125">Gira en el sentit de les agulles del rellotge</translation> <translation id="1055184225775184556">&Desfés l'addició</translation> <translation id="1064422015032085147">Pot ser que el servidor on s'allotja la pàgina web estigui sobrecarregat o bé que s'hi estiguin realitzant tasques de manteniment. Per evitar que es generi massa trànsit i la situació empitjori, no es permet enviar sol·licituds a aquest URL de manera temporal.</translation> @@ -434,6 +435,7 @@ <translation id="6637478299472506933">Ha fallat la baixada</translation> <translation id="6644283850729428850">Aquesta política ha quedat obsoleta.</translation> <translation id="6646897916597483132">Introduïu el CVC de quatre dígits que trobareu a la part davantera de la targeta</translation> +<translation id="6660210980321319655">Data i hora del bloqueig notificat automàticament: <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Voleu suprimir el suggeriment de formulari de Chromium?</translation> <translation id="6710213216561001401">Anterior</translation> <translation id="6711464428925977395">Hi ha hagut algun problema amb el servidor intermediari o l'adreça no és correcta.</translation> @@ -630,6 +632,7 @@ <translation id="8971063699422889582">El certificat del servidor ha caducat.</translation> <translation id="8987927404178983737">Mes</translation> <translation id="8988760548304185580">Introduïu la data de caducitat i el CVC de tres dígits que trobareu a la part posterior de la targeta</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Certificat d'autenticació de client SSL incorrecte.</translation> <translation id="901974403500617787">Les marques que s'apliquen a tot el sistema només les pot definir l'usuari: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">El servidor ha rebutjat la connexió.</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb index af982db..7290e27 100644 --- a/components/strings/components_strings_cs.xtb +++ b/components/strings/components_strings_cs.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="cs"> <translation id="1015255576907412255">Další informace získáte u správce systému.</translation> +<translation id="1015730422737071372">Zadejte další podrobnosti</translation> <translation id="1032854598605920125">Otočit ve směru hodinových ručiček</translation> <translation id="1055184225775184556">&Vrátit přidání zpět</translation> <translation id="1064422015032085147">Server hostující webovou stránku je pravděpodobně přetížen nebo probíhá jeho údržba. Aby bylo zabráněno generování nadměrného provozu, který by situaci dále zhoršil, jsou požadavky na tuto adresu URL dočasně zakázány.</translation> @@ -421,6 +422,7 @@ <translation id="6637478299472506933">Stažení se nezdařilo</translation> <translation id="6644283850729428850">Tato zásada se již nepoužívá.</translation> <translation id="6646897916597483132">Zadejte čtyřmístný kód CVC z přední strany karty</translation> +<translation id="6660210980321319655">Automaticky zaznamenáno <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Odstranit návrh položky formuláře z prohlížeče Chromium?</translation> <translation id="6710213216561001401">Předchozí</translation> <translation id="6711464428925977395">Došlo k chybě proxy serveru nebo jste zadali nesprávnou adresu.</translation> @@ -600,6 +602,7 @@ <translation id="8971063699422889582">Platnost certifikátu serveru vypršela.</translation> <translation id="8987927404178983737">Měsíc</translation> <translation id="8988760548304185580">Zadejte datum vypršení platnosti a třímístný kód CVC ze zadní strany karty</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Špatný ověřovací certifikát klienta SSL</translation> <translation id="901974403500617787">Příznaky, které platí v celém systému, může nastavit pouze vlastník: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Server odmítl připojení.</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb index e6a1ef43..cf5ecce 100644 --- a/components/strings/components_strings_da.xtb +++ b/components/strings/components_strings_da.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="da"> <translation id="1015255576907412255">Kontakt systemadministratoren for at få flere oplysninger.</translation> +<translation id="1015730422737071372">Angiv yderligere oplysninger</translation> <translation id="1032854598605920125">Rotér med uret</translation> <translation id="1055184225775184556">&Fortryd tilføjelse</translation> <translation id="1064422015032085147">Den server, der hoster websiden, kan være overbelastet eller under vedligeholdelse. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">Download mislykkedes</translation> <translation id="6644283850729428850">Denne politik er forældet.</translation> <translation id="6646897916597483132">Indtast den firecifrede kontrolkode, som ses på forsiden af dit kort</translation> +<translation id="6660210980321319655">Rapporteret automatisk <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Vil du fjerne formularforslag fra Chromium?</translation> <translation id="6710213216561001401">Forrige</translation> <translation id="6711464428925977395">Der er noget galt med proxyserveren, eller adressen er forkert.</translation> @@ -633,6 +635,7 @@ <translation id="8971063699422889582">Serverens certifikat er udløbet.</translation> <translation id="8987927404178983737">Måned</translation> <translation id="8988760548304185580">Indtast udløbsdatoen og den trecifrede kontrolkode, som ses på bagsiden af dit kort</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Ugyldigt certifikat til SSL-klientgodkendelse.</translation> <translation id="901974403500617787">Markeringer, der gælder for hele systemet, kan kun indstilles af ejeren: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Serveren afviste forbindelsen.</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb index 704c865..61f78c5 100644 --- a/components/strings/components_strings_de.xtb +++ b/components/strings/components_strings_de.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="de"> <translation id="1015255576907412255">Um weitere Informationen zu erhalten, wenden Sie sich an Ihren Systemadministrator.</translation> +<translation id="1015730422737071372">Weitere Details angeben</translation> <translation id="1032854598605920125">Im Uhrzeigersinn drehen</translation> <translation id="1055184225775184556">&Hinzufügen rückgängig machen</translation> <translation id="1064422015032085147">Der Server, auf dem die Webseite gehostet wird, ist möglicherweise überlastet @@ -438,6 +439,7 @@ <translation id="6637478299472506933">Fehler beim Download</translation> <translation id="6644283850729428850">Diese Richtlinie ist veraltet.</translation> <translation id="6646897916597483132">Geben Sie den vierstelligen CVC-Code auf der Vorderseite Ihrer Karte ein.</translation> +<translation id="6660210980321319655">Automatische Meldung zu folgendem Zeitpunkt: <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Vorschlag für das Formular aus Chromium entfernen?</translation> <translation id="6710213216561001401">Zurück</translation> <translation id="6711464428925977395">Mit dem Proxyserver ist ein Problem aufgetreten oder die Adresse ist falsch.</translation> @@ -634,6 +636,7 @@ <translation id="8971063699422889582">Das Serverzertifikat ist abgelaufen.</translation> <translation id="8987927404178983737">Monat</translation> <translation id="8988760548304185580">Geben Sie das Ablaufdatum und den dreistelligen CVC-Code auf der Rückseite Ihrer Karte ein.</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Ungültiges Zertifikat für SSL-Clientauthentifizierung</translation> <translation id="901974403500617787">Parameter, die systemweit gelten, können nur vom Eigentümer festgelegt werden: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Server hat die Verbindung abgelehnt.</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb index f2e907b4..a3c2814 100644 --- a/components/strings/components_strings_el.xtb +++ b/components/strings/components_strings_el.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="el"> <translation id="1015255576907412255">Για περισσότερες πληροφορίες, επικοινωνήστε με το διαχειριστή του συστήματός σας.</translation> +<translation id="1015730422737071372">Καταχωρίστε επιπλέον λεπτομέρειες</translation> <translation id="1032854598605920125">Περιστροφή προς τα δεξιά</translation> <translation id="1055184225775184556">&Αναίρεση προσθήκης</translation> <translation id="1064422015032085147">O διακομιστής που φιλοξενεί την ιστοσελίδα ενδέχεται να είναι υπερφορτωμένος ή να υποβάλλεται σε συντήρηση. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">Αποτυχία λήψης</translation> <translation id="6644283850729428850">Αυτή η πολιτική έχει αποσυρθεί.</translation> <translation id="6646897916597483132">Εισαγάγετε τον τετραψήφιο κωδικό CVC από το μπροστινό μέρος της κάρτας σας</translation> +<translation id="6660210980321319655">Αυτόματη αναφορά <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Να καταργηθεί η πρόταση φόρμας από το Chromium;</translation> <translation id="6710213216561001401">Προηγούμενο</translation> <translation id="6711464428925977395">Υπάρχει κάποιο πρόβλημα με το διακομιστή μεσολάβησης ή η διεύθυνση είναι εσφαλμένη.</translation> @@ -633,6 +635,7 @@ <translation id="8971063699422889582">Το πιστοποιητικό του διακομιστή έχει λήξει.</translation> <translation id="8987927404178983737">Μήνας</translation> <translation id="8988760548304185580">Εισαγάγετε την ημερομηνία λήξης και τον τριψήφιο κωδικό CVC από το πίσω μέρος της κάρτας σας</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Ακατάλληλο πιστοποιητικό ελέγχου ταυτότητας πελάτη SSL.</translation> <translation id="901974403500617787">Οι επισημάνσεις που ισχύουν για ολόκληρο το σύστημα μπορούν να οριστούν μόνο από τον κάτοχο: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Ο διακομιστής απέρριψε τη σύνδεση.</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb index cde60c3..40b986b 100644 --- a/components/strings/components_strings_en-GB.xtb +++ b/components/strings/components_strings_en-GB.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="en-GB"> <translation id="1015255576907412255">Contact your system administrator for more information.</translation> +<translation id="1015730422737071372">Provide additional details.</translation> <translation id="1032854598605920125">Rotate clockwise</translation> <translation id="1055184225775184556">&Undo Add</translation> <translation id="1064422015032085147">The server hosting the web page might be overloaded or under maintenance. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">Download Failed</translation> <translation id="6644283850729428850">This policy has been deprecated.</translation> <translation id="6646897916597483132">Enter the 4-digit CVC from the front of your card</translation> +<translation id="6660210980321319655">Automatically reported <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Remove form suggestion from Chromium?</translation> <translation id="6710213216561001401">Previous</translation> <translation id="6711464428925977395">There is something wrong with the proxy server or the address is incorrect.</translation> @@ -633,6 +635,7 @@ <translation id="8971063699422889582">Server's certificate has expired.</translation> <translation id="8987927404178983737">Month</translation> <translation id="8988760548304185580">Enter the expiry date and 3-digit CVC from the back of your card</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Bad SSL client-authentication certificate.</translation> <translation id="901974403500617787">Flags that apply system-wide can only be set by the owner: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">The server refused the connection.</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb index 637a6c5e..a89726ed 100644 --- a/components/strings/components_strings_es-419.xtb +++ b/components/strings/components_strings_es-419.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="es-419"> <translation id="1015255576907412255">Comunícate con el administrador del sistema para obtener más información.</translation> +<translation id="1015730422737071372">Proporciona más detalles</translation> <translation id="1032854598605920125">Girar a la derecha</translation> <translation id="1055184225775184556">&Deshacer Agregar</translation> <translation id="1064422015032085147">El servidor que aloja la página web podría estar sobrecargado o en mantenimiento. @@ -435,6 +436,7 @@ <translation id="6637478299472506933">Error en la descarga</translation> <translation id="6644283850729428850">Esta política no ha sido aprobada.</translation> <translation id="6646897916597483132">Ingresa el CVC de 4 dígitos que figura en el frente de la tarjeta.</translation> +<translation id="6660210980321319655">Se denunció automáticamente el <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">¿Confirmas que quieres quitar la sugerencia de formulario de Chromium?</translation> <translation id="6710213216561001401">Anterior</translation> <translation id="6711464428925977395">Hay un error en el servidor proxy o la dirección es incorrecta.</translation> @@ -630,6 +632,7 @@ <translation id="8971063699422889582">El certificado del servidor ha caducado.</translation> <translation id="8987927404178983737">Mes</translation> <translation id="8988760548304185580">Ingresa la fecha de vencimiento y el CVC de 3 dígitos que figura en el dorso de la tarjeta.</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Certificado de autenticación de cliente SSL incorrecto</translation> <translation id="901974403500617787">El propietario es el único que puede especificar las marcas que se aplican a todo el sistema: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">El servidor ha rechazado la conexión.</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb index 86f339d..5e289ec 100644 --- a/components/strings/components_strings_es.xtb +++ b/components/strings/components_strings_es.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="es"> <translation id="1015255576907412255">Ponte en contacto con el administrador del sistema para obtener más información.</translation> +<translation id="1015730422737071372">Proporciónanos más detalles</translation> <translation id="1032854598605920125">Girar hacia la derecha</translation> <translation id="1055184225775184556">&Deshacer acción de añadir</translation> <translation id="1064422015032085147">El servidor que aloja la página web puede estar sobrecargado o en mantenimiento. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">Error de descarga</translation> <translation id="6644283850729428850">Esta política está obsoleta.</translation> <translation id="6646897916597483132">Introduce el código CVC de cuatro dígitos que aparece en el anverso de tu tarjeta</translation> +<translation id="6660210980321319655">Notificado automáticamente el <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">¿Quitar sugerencia de formulario de Chromium?</translation> <translation id="6710213216561001401">Anterior</translation> <translation id="6711464428925977395">Se ha producido un error con el servidor proxy o la dirección es incorrecta.</translation> @@ -633,6 +635,7 @@ <translation id="8971063699422889582">El certificado del servidor ha caducado.</translation> <translation id="8987927404178983737">Mes</translation> <translation id="8988760548304185580">Introduce la fecha de caducidad y el código CVC de tres dígitos que aparece en el reverso de tu tarjeta</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Certificado de autenticación de cliente SSL no válido</translation> <translation id="901974403500617787">Las opciones que se aplican a todo el sistema solo las puede establecer el propietario: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">El servidor ha rechazado la conexión.</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb index b62f296..aa5d00a 100644 --- a/components/strings/components_strings_et.xtb +++ b/components/strings/components_strings_et.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="et"> <translation id="1015255576907412255">Lisateabe saamiseks võtke ühendust oma süsteemiadministraatoriga.</translation> +<translation id="1015730422737071372">Esitage lisateavet</translation> <translation id="1032854598605920125">Pööra päripäeva</translation> <translation id="1055184225775184556">&Võta lisamine tagasi</translation> <translation id="1064422015032085147">Veebilehte hostiv server võib olla üle koormatud või seda hooldatakse. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">Allalaadimine nurjus</translation> <translation id="6644283850729428850">See reegel on aegunud.</translation> <translation id="6646897916597483132">Sisestage 4-kohaline CVC kaardi tagaküljelt</translation> +<translation id="6660210980321319655">Automaatne teavitamine: <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Kas eemaldada Chromiumist vormi soovitus?</translation> <translation id="6710213216561001401">Eelmine</translation> <translation id="6711464428925977395">Puhverserveriga on midagi valesti või aadress on vale.</translation> @@ -633,6 +635,7 @@ <translation id="8971063699422889582">Serveri sertifikaat on aegunud.</translation> <translation id="8987927404178983737">kuu</translation> <translation id="8988760548304185580">Sisestage aegumiskuupäev ja 3-kohaline CVC kaardi tagaküljelt</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Halb SSL-kliendi autentimise sertifikaat.</translation> <translation id="901974403500617787">Kogu süsteemis kehtivaid märgiseid saab määrata ainult omanik: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Server keeldus ühendusest.</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb index 8f8d1d9..f1461ce4 100644 --- a/components/strings/components_strings_fa.xtb +++ b/components/strings/components_strings_fa.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="fa"> <translation id="1015255576907412255">برای کسب اطلاعات بیشتر با سرپرست سیستم خود تماس بگیرید.</translation> +<translation id="1015730422737071372">جزئیات بیشتری ارائه دهید</translation> <translation id="1032854598605920125">چرخش در جهت عقربههای ساعت</translation> <translation id="1055184225775184556">&واگرد افزودن</translation> <translation id="1064422015032085147">سروری که این صفحه وب را میزبانی میکند ممکن است بیش از حد بار داشته باشد یا تحت سرویس و نگهداری باشد. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">بارگیری نشد</translation> <translation id="6644283850729428850">این قانون قدیمی شده است.</translation> <translation id="6646897916597483132">کد تأیید چهار رقمی CVC را از روی کارتتان وارد کنید</translation> +<translation id="6660210980321319655">بهصورت خودکار در <ph name="CRASH_TIME" /> گزارش داده شد</translation> <translation id="6671697161687535275">پیشنهاد فرم از Chromium پاک شود؟</translation> <translation id="6710213216561001401">قبلی</translation> <translation id="6711464428925977395">مشکلی در سرور پروکسی وجود دارد یا این آدرس درست نیست.</translation> @@ -633,6 +635,7 @@ <translation id="8971063699422889582">گواهی سرور منقضی شده است.</translation> <translation id="8987927404178983737">ماه</translation> <translation id="8988760548304185580">تاریخ انقضا و کد تأیید سه رقمی CVC را از پشت کارتتان وارد کنید</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">گواهی تأیید اعتبار سرویس گیرنده SSL نادرست است.</translation> <translation id="901974403500617787">پرچمهایی که در تمام سیستم اعمال میشوند فقط توسط مالک قابل تنظیم هستند: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">سرور اتصال را رد کرد.</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb index fd78978..25cfdd6 100644 --- a/components/strings/components_strings_fi.xtb +++ b/components/strings/components_strings_fi.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="fi"> <translation id="1015255576907412255">Saat lisätietoja ottamalla yhteyttä järjestelmänvalvojaan.</translation> +<translation id="1015730422737071372">Lisätietoja</translation> <translation id="1032854598605920125">Käännä myötäpäivään</translation> <translation id="1055184225775184556">K&umoa lisäys</translation> <translation id="1064422015032085147">Verkkosivua isännöivä palvelin voi olla ylikuormitettu tai huollettavana. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">Lataus epäonnistui</translation> <translation id="6644283850729428850">Tämä käytäntö on vanhentunut.</translation> <translation id="6646897916597483132">Anna nelinumeroinen CVC luottokortin etupuolelta.</translation> +<translation id="6660210980321319655">Ilmoitus tehtiin automaattisesti <ph name="CRASH_TIME" />.</translation> <translation id="6671697161687535275">Poistetaanko lomake-ehdotus Chromiumista?</translation> <translation id="6710213216561001401">Edellinen</translation> <translation id="6711464428925977395">Välityspalvelimessa on jotain vikaa tai osoite on virheellinen.</translation> @@ -631,6 +633,7 @@ <translation id="8971063699422889582">Palvelimen varmenne on vanhentunut.</translation> <translation id="8987927404178983737">Kuukausi</translation> <translation id="8988760548304185580">Anna vanhenemispäivä ja kolminumeroinen CVC luottokortin takapuolelta.</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Virheellinen SSL-asiakkaan todennusvarmenne.</translation> <translation id="901974403500617787">Koko järjestelmään vaikuttavat merkinnät voi tehdä vain omistaja: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Palvelin esti yhteyden.</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb index be378907..32ff3f7 100644 --- a/components/strings/components_strings_fil.xtb +++ b/components/strings/components_strings_fil.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="fil"> <translation id="1015255576907412255">Makipag-ugnay sa iyong system administrator para sa higit pang impormasyon.</translation> +<translation id="1015730422737071372">Magbigay ng mga karagdagang detalye</translation> <translation id="1032854598605920125">I-rotate pakanan</translation> <translation id="1055184225775184556">&I-undo ang Pagdagdag</translation> <translation id="1064422015032085147">Maaaring na-overload o kasalukuyang inaayos ang server na nagho-host sa webpage. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">Nabigo ang Download</translation> <translation id="6644283850729428850">Hindi na ginagamit ang patakarang ito.</translation> <translation id="6646897916597483132">Ilagay ang CVC na may 4 na digit mula sa harap ng iyong card</translation> +<translation id="6660210980321319655">Awtomatikong naiulat noong <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Gusto mo bang alisin ang form para sa suhestyon sa Chromium?</translation> <translation id="6710213216561001401">Nakaraan</translation> <translation id="6711464428925977395">May problema sa proxy server, o mali ang address.</translation> @@ -634,6 +636,7 @@ <translation id="8971063699422889582">Nag-expire na ang certificate ng server.</translation> <translation id="8987927404178983737">Buwan</translation> <translation id="8988760548304185580">Ilagay ang petsa ng pag-expire at ang CVC na may 3 digit mula sa likod ng iyong card</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Bad SSL client authentication certificate.</translation> <translation id="901974403500617787">Ang may-ari lang ang maaaring magtakda ng mga flag na nalalapat sa buong system: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Tinanggihan ng server ang koneksyon.</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb index 09e616c..bc4112e 100644 --- a/components/strings/components_strings_fr.xtb +++ b/components/strings/components_strings_fr.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="fr"> <translation id="1015255576907412255">Pour plus d'informations, contactez votre administrateur système.</translation> +<translation id="1015730422737071372">Fournir des informations supplémentaires</translation> <translation id="1032854598605920125">Faire pivoter vers la droite</translation> <translation id="1055184225775184556">&Annuler l'ajout</translation> <translation id="1064422015032085147">Le serveur qui héberge la page Web peut être surchargé ou en cours de maintenance. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">Échec téléchargement</translation> <translation id="6644283850729428850">Cette règle est obsolète.</translation> <translation id="6646897916597483132">Saisissez le code CVC à quatre chiffres indiqué au recto de votre carte.</translation> +<translation id="6660210980321319655">Signalé automatiquement le <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Supprimer la suggestion de saisie de formulaire de Chromium ?</translation> <translation id="6710213216561001401">Précédent</translation> <translation id="6711464428925977395">Le serveur proxy présente une erreur, ou l'adresse est incorrecte.</translation> @@ -633,6 +635,7 @@ <translation id="8971063699422889582">Le certificat du serveur a expiré.</translation> <translation id="8987927404178983737">Mois</translation> <translation id="8988760548304185580">Saisissez la date d'expiration et le code CVC à trois chiffres figurant au dos de votre carte.</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Certificat d'authentification de client SSL incorrect</translation> <translation id="901974403500617787">Seul le propriétaire suivant peut définir les options qui s'appliquent à tout le système : <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Le serveur a refusé la connexion.</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb index e9c70f8..1471e4a3 100644 --- a/components/strings/components_strings_gu.xtb +++ b/components/strings/components_strings_gu.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="gu"> <translation id="1015255576907412255">વધુ માહિતી માટે તમારા સિસ્ટમ સંચાલકનો સંપર્ક કરો.</translation> +<translation id="1015730422737071372">અતિરિક્ત વિગતો પ્રદાન કરો</translation> <translation id="1032854598605920125">ઘડિયાળની દિશામાં ફેરવો</translation> <translation id="1055184225775184556">&ઉમેરવું પૂર્વવત્ કરો</translation> <translation id="1064422015032085147">વેબપૃષ્ઠને હોસ્ટ કરતું સર્વર ઓવરલોડ થઇ ગયું હોઇ શકે અથવા જાળવણી હેઠળ હોઇ શકે. @@ -436,6 +437,7 @@ <translation id="6637478299472506933">ડાઉનલોડ નિષ્ફળ થયું</translation> <translation id="6644283850729428850">આ નીતિ દૂર કરવામાં આવેલી છે.</translation> <translation id="6646897916597483132">તમારા કાર્ડની આગળની બાજુ પરથી 4-અંકનો CVC દાખલ કરો</translation> +<translation id="6660210980321319655">આપમેળે જાણ કરી <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Chromium માંથી ફોર્મ સૂચન દૂર કરીએ?</translation> <translation id="6710213216561001401">પહેલાનું</translation> <translation id="6711464428925977395">પ્રોક્સી સર્વરમાં કંઈક ખોટું થયું છે અથવા તો સરનામું ખોટું છે.</translation> @@ -631,6 +633,7 @@ <translation id="8971063699422889582">સર્વરના પ્રમાણપત્રની સમયસીમા સમાપ્ત થઈ છે.</translation> <translation id="8987927404178983737">મહિનો</translation> <translation id="8988760548304185580">તમારા કાર્ડની પાછળની બાજુ પરથી સમાપ્તિ તારીખ અને 3-અંકનો CVC દાખલ કરો</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">ખરાબ SSL ક્લાયંટ પ્રમાણીકરણ પ્રમાણપત્ર.</translation> <translation id="901974403500617787">ધ્વજો કે જે સિસ્ટમ-વ્યાપી લાગુ છે તે ફક્ત માલિક દ્વારા જ સેટ કરી શકાય છે: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">સર્વરે કનેક્શનને નકાર્યું.</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb index b875c33..8ae8d47 100644 --- a/components/strings/components_strings_hi.xtb +++ b/components/strings/components_strings_hi.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="hi"> <translation id="1015255576907412255">अधिक जानकारी के लिए अपने सिस्टम व्यवस्थापक से संपर्क करें.</translation> +<translation id="1015730422737071372">अतिरिक्त विवरण प्रदान करें</translation> <translation id="1032854598605920125">घड़ी की दिशा में घुमाएं</translation> <translation id="1055184225775184556">&जोड़ना वापस लाएं</translation> <translation id="1064422015032085147">वेबपृष्ठ को होस्ट करने वाले सर्वर पर अत्यधिक लोड हो सकता है या हो सकता है उसका रखरखाव चल रहा हो. @@ -435,6 +436,7 @@ <translation id="6637478299472506933">डाउनलोड विफल</translation> <translation id="6644283850729428850">यह नीति हटा दी गई है.</translation> <translation id="6646897916597483132">अपने कार्ड के सामने की ओर दिया गया 4 अंकों वाला CVC डालें</translation> +<translation id="6660210980321319655"><ph name="CRASH_TIME" /> बजे अपने आप रिपोर्ट की गई</translation> <translation id="6671697161687535275">क्रोमियम से फ़ॉर्म सुझाव निकालें?</translation> <translation id="6710213216561001401">पिछला</translation> <translation id="6711464428925977395">प्रॉक्सी सर्वर के साथ कुछ गलत है या पता गलत है.</translation> @@ -628,6 +630,7 @@ <translation id="8971063699422889582">सर्वर के प्रमाणपत्र की समय-सीमा समाप्त हो चुकी है.</translation> <translation id="8987927404178983737">माह</translation> <translation id="8988760548304185580">अवधि समाप्ति दिनांक और अपने कार्ड के पीछे दिया गया 3 अंकों वाला CVC डालें</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">ख़राब SSL क्लाइंट प्रमाणीकरण प्रमाणपत्र.</translation> <translation id="901974403500617787">सिस्टम-व्यापी रूप से लागू होने वाले फ़्लैग केवल स्वामी द्वारा ही सेट किए जा सकते हैं: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">सर्वर ने कनेक्शन अस्वीकार कर दिया है.</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb index 21116bb..dbccb8f 100644 --- a/components/strings/components_strings_hr.xtb +++ b/components/strings/components_strings_hr.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="hr"> <translation id="1015255576907412255">Obratite se administratoru sustava za više informacija.</translation> +<translation id="1015730422737071372">Navedite dodatne pojedinosti</translation> <translation id="1032854598605920125">Zakretanje u smjeru kazaljke na satu</translation> <translation id="1055184225775184556">&Poništi dodavanje</translation> <translation id="1064422015032085147">Poslužitelj web-stranice možda je preopterećen ili je u tijeku održavanje. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">Preuzimanje nije uspjelo</translation> <translation id="6644283850729428850">Ovo je pravilo zastarjelo.</translation> <translation id="6646897916597483132">Unesite četveroznamenkasti CVC s prednje strane kartice</translation> +<translation id="6660210980321319655">Automatski prijavljeno <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Želite li ukloniti prijedlog iz Chromiuma?</translation> <translation id="6710213216561001401">Prethodno</translation> <translation id="6711464428925977395">Nešto nije u redu s proxy poslužiteljem ili adresa nije točna.</translation> @@ -633,6 +635,7 @@ <translation id="8971063699422889582">Istekao je certifikat poslužitelja.</translation> <translation id="8987927404178983737">Mjesec</translation> <translation id="8988760548304185580">Unesite datum isteka i troznamenkasti CVC s poleđine kartice</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Loš certifikat SSL klijentske provjere autentičnosti.</translation> <translation id="901974403500617787">Oznake koje se primjenjuju na razini sustava može postaviti samo vlasnik: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Web-poslužitelj uskratio je vezu.</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb index faad398..7c13c416 100644 --- a/components/strings/components_strings_hu.xtb +++ b/components/strings/components_strings_hu.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="hu"> <translation id="1015255576907412255">Ha további információra van szüksége, vegye fel a kapcsolatot rendszergazdájával.</translation> +<translation id="1015730422737071372">További részletek megadása</translation> <translation id="1032854598605920125">Forgatás jobbra</translation> <translation id="1055184225775184556">&Hozzáadás visszavonása</translation> <translation id="1064422015032085147">A weboldalt tároló szerver túlterhelt, vagy javítás alatt lehet. @@ -434,6 +435,7 @@ <translation id="6637478299472506933">Letöltés sikertelen</translation> <translation id="6644283850729428850">Ez a házirend már elavult.</translation> <translation id="6646897916597483132">Adja meg a kártya elején szereplő négyjegyű CVC-kódot</translation> +<translation id="6660210980321319655">Automatikusan jelentve ekkor: <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Eltávolítja az űrlapjavaslatot a Chromiumból?</translation> <translation id="6710213216561001401">Előző</translation> <translation id="6711464428925977395">Valami gond van a proxyszerverrel, vagy a cím nem megfelelő.</translation> @@ -630,6 +632,7 @@ <translation id="8971063699422889582">A szerver tanúsítványa lejárt.</translation> <translation id="8987927404178983737">hónap</translation> <translation id="8988760548304185580">Adja meg a lejárati dátumot, és a kártya hátoldalán szereplő háromjegyű CVC-kódot</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Rossz SSL-ügyfélhitelesítési tanúsítvány.</translation> <translation id="901974403500617787">Rendszerszinten érvényes jelölőket csak a tulajdonos (<ph name="OWNER_EMAIL" />) állíthat be.</translation> <translation id="9020142588544155172">A szerver visszautasította a kapcsolatot.</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb index 7b00c66..c72f27c 100644 --- a/components/strings/components_strings_id.xtb +++ b/components/strings/components_strings_id.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="id"> <translation id="1015255576907412255">Hubungi administrator sistem Anda untuk informasi selengkapnya.</translation> +<translation id="1015730422737071372">Berikan detail tambahan</translation> <translation id="1032854598605920125">Putar searah jarum jam</translation> <translation id="1055184225775184556">&Urungkan Penambahan</translation> <translation id="1064422015032085147">Server yang menghosting laman web mungkin kelebihan muatan atau sedang diperbaiki. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">Unduhan Gagal</translation> <translation id="6644283850729428850">Kebijakan ini telah usang.</translation> <translation id="6646897916597483132">Masukkan 4 digit CVC di depan kartu Anda</translation> +<translation id="6660210980321319655">Otomatis dilaporkan pada <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Hapus saran formulir dari Chromium?</translation> <translation id="6710213216561001401">Sebelumnya</translation> <translation id="6711464428925977395">Ada yang salah dengan server proxy, atau alamat tidak benar.</translation> @@ -633,6 +635,7 @@ <translation id="8971063699422889582">Sertifikat server telah kedaluwarsa.</translation> <translation id="8987927404178983737">Bulan</translation> <translation id="8988760548304185580">Masukkan tanggal masa berlaku habis dan 3 digit CVC di belakang kartu Anda</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Sertifikat autentikasi klien SSL gagal.</translation> <translation id="901974403500617787">Tanda yang berlaku bagi sistem secara luas hanya dapat disetel oleh pemilik: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Server menolak sambungan.</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb index 2d87c5e..9da80d2 100644 --- a/components/strings/components_strings_it.xtb +++ b/components/strings/components_strings_it.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="it"> <translation id="1015255576907412255">Per ulteriori informazioni contatta il tuo amministratore di sistema.</translation> +<translation id="1015730422737071372">Fornisci ulteriori dettagli</translation> <translation id="1032854598605920125">Ruota in senso orario</translation> <translation id="1055184225775184556">&Annulla aggiunta</translation> <translation id="1064422015032085147">Il server che ospita la pagina web potrebbe essere sovraccarico o in fase di manutenzione. Per evitare di generare troppo traffico e di peggiorare la situazione, le richieste relative all'URL in questione sono state temporaneamente disattivate.</translation> @@ -421,6 +422,7 @@ <translation id="6637478299472506933">Download non riuscito</translation> <translation id="6644283850729428850">Questa norma è obsoleta.</translation> <translation id="6646897916597483132">Inserisci il codice CVC di quattro cifre indicato sulla parte anteriore della carta</translation> +<translation id="6660210980321319655">Data/ora arresto anomalo: <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Rimuovere il suggerimento per i moduli da Chromium?</translation> <translation id="6710213216561001401">Indietro</translation> <translation id="6711464428925977395">Si è verificato un problema con il server proxy oppure l'indirizzo non è corretto.</translation> @@ -604,6 +606,7 @@ <translation id="8971063699422889582">Il certificato del server è scaduto.</translation> <translation id="8987927404178983737">Mese</translation> <translation id="8988760548304185580">Inserisci la data di scadenza e il codice CVC di tre cifre indicato sul retro della carta</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Certificato di autenticazione client SSL non corretto.</translation> <translation id="901974403500617787">I contrassegni che si applicano a livello di sistema possono essere impostati solo dal proprietario: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Il server ha rifiutato la connessione.</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb index cae005a..9a19db96e 100644 --- a/components/strings/components_strings_iw.xtb +++ b/components/strings/components_strings_iw.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="iw"> <translation id="1015255576907412255">צור קשר עם מנהל המערכת לקבלת מידע נוסף.</translation> +<translation id="1015730422737071372">ספק פרטים נוספים</translation> <translation id="1032854598605920125">סובב בכיוון השעון</translation> <translation id="1055184225775184556">&ביטול הוספה</translation> <translation id="1064422015032085147">ייתכן שיש עומס יתר בשרת שבו דף האינטרנט מתארח או שמבוצעות בו עבודות תחזוקה. @@ -444,6 +445,7 @@ <translation id="6637478299472506933">ההורדה נכשלה</translation> <translation id="6644283850729428850">מדיניות זו אינה בתוקף.</translation> <translation id="6646897916597483132">הזן את ה-CVC בן ארבע הספרות המופיע בחזית הכרטיס</translation> +<translation id="6660210980321319655">דיווח אוטומטי <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">האם להסיר מ-Chromium הצעות לטפסים?</translation> <translation id="6710213216561001401">הקודם</translation> <translation id="6711464428925977395">משהו אינו תקין בשרת ה-proxy, או שהכתובת שגויה.</translation> @@ -640,6 +642,7 @@ <translation id="8971063699422889582">פג תוקפו של אישור השרת.</translation> <translation id="8987927404178983737">חודש</translation> <translation id="8988760548304185580">הזן את תאריך סיום התוקף ו-CVC בן שלוש ספרות המופיע בגב הכרטיס</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">אישור אימות לקוח SSL פגום.</translation> <translation id="901974403500617787">רק הבעלים יכול להגדיר סימונים החלים על כל המערכת: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">השרת דחה את החיבור.</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb index 8d387fe..b7e7c8f2 100644 --- a/components/strings/components_strings_ja.xtb +++ b/components/strings/components_strings_ja.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ja"> <translation id="1015255576907412255">詳しくは、システム管理者にお問い合わせください。</translation> +<translation id="1015730422737071372">詳細を報告する</translation> <translation id="1032854598605920125">時計回りに回転</translation> <translation id="1055184225775184556">追加の取り消し(&U)</translation> <translation id="1064422015032085147">ウェブページのホストサーバーがビジーであるかメンテナンス中の可能性があります。 @@ -436,6 +437,7 @@ <translation id="6637478299472506933">ダウンロードの失敗</translation> <translation id="6644283850729428850">このポリシーは廃止されました。</translation> <translation id="6646897916597483132">カードの表側に記載されている 4 桁の CVC を入力します</translation> +<translation id="6660210980321319655"><ph name="CRASH_TIME" /> にレポートを自動送信しました</translation> <translation id="6671697161687535275">Chromium から候補を削除してもよろしいですか?</translation> <translation id="6710213216561001401">前へ</translation> <translation id="6711464428925977395">プロキシ サーバーに問題がある、またはアドレスが正しくありません。</translation> @@ -627,6 +629,7 @@ <translation id="8971063699422889582">サーバーの証明書の有効期限が切れています。</translation> <translation id="8987927404178983737">月</translation> <translation id="8988760548304185580">カードの裏面に記載されている有効期限と 3 桁の CVC を入力します</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">SSL クライアント認証証明書が不正です。</translation> <translation id="901974403500617787">システム全体に適用されるフラグは所有者(<ph name="OWNER_EMAIL" />)のみが設定できます。</translation> <translation id="9020142588544155172">サーバーが接続を拒否しました。</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb index bdebf2b1..affb1ab 100644 --- a/components/strings/components_strings_kn.xtb +++ b/components/strings/components_strings_kn.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="kn"> <translation id="1015255576907412255">ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ ನಿಮ್ಮ ಸಿಸ್ಟಂ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation> +<translation id="1015730422737071372">ಹೆಚ್ಚುವರಿ ವಿವರಗಳನ್ನು ಒದಗಿಸಿ</translation> <translation id="1032854598605920125">ಪ್ರದಕ್ಷಿಣಾಕಾರದಲ್ಲಿ ತಿರುಗಿಸು</translation> <translation id="1055184225775184556">&ಸೇರಿಸುವುದನ್ನು ರದ್ದುಗೊಳಿಸಿ</translation> <translation id="1064422015032085147">ವೆಬ್ಪುಟವನ್ನು ಹೋಸ್ಟ್ ಮಾಡುತ್ತಿರುವ ಸರ್ವರ್ ಓವರ್ಲೋಡ್ ಆಗಿರಬಹುದು ಅಥವಾ ನಿರ್ವಹಣೆಯಲ್ಲಿರಬಹುದು. @@ -428,6 +429,7 @@ <translation id="6637478299472506933">ಡೌನ್ಲೋಡ್ ವಿಫಲವಾಗಿದೆ</translation> <translation id="6644283850729428850">ಈ ನೀತಿಯನ್ನು ವಿನಂತಿಸಲಾಗಿದೆ.</translation> <translation id="6646897916597483132">ನಿಮ್ಮ ಕಾರ್ಡ್ ಮುಂಭಾಗದಲ್ಲಿರುವ 4-ಅಂಕಿ CVC ಅನ್ನು ನಮೂದಿಸಿ</translation> +<translation id="6660210980321319655"><ph name="CRASH_TIME" /> ಸಮಯಕ್ಕೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ವರದಿ ಮಾಡಲಾಗಿದೆ</translation> <translation id="6671697161687535275">Chromium ನಿಂದ ಫಾರ್ಮ್ ಸಲಹೆಯನ್ನು ತೆಗೆದುಹಾಕುವುದೇ?</translation> <translation id="6710213216561001401">ಹಿಂದೆ</translation> <translation id="6711464428925977395">ಪ್ರಾಕ್ಸಿ ಸರ್ವರ್ನಲ್ಲಿ ಏನೋ ದೋಷವಿದೆ ಅಥವಾ ವಿಳಾಸವು ತಪ್ಪಾಗಿದೆ.</translation> @@ -621,6 +623,7 @@ <translation id="8971063699422889582">ಸರ್ವರ್ನ ಪ್ರಕಮಾಣಪತ್ರದ ಅವಧಿ ಮುಕ್ತಾಯಗೊಂಡಿದೆ.</translation> <translation id="8987927404178983737">ತಿಂಗಳು</translation> <translation id="8988760548304185580">ನಿಮ್ಮ ಕಾರ್ಡ್ನ ಹಿಂದಿರುವ ಮುಕ್ತಾಯದ ದಿನಾಂಕ ಮತ್ತು 3-ಅಂಕಿಗಳ CVC ಅನ್ನು ನಮೂದಿಸಿ</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">ಕೆಟ್ಟ SSL ಗ್ರಾಹಕ ಪ್ರಮಾಣೀಕರಣ ಪ್ರಮಾಣಪತ್ರ.</translation> <translation id="901974403500617787">ಸಿಸ್ಟಂನಾದ್ಯಂತ ಅನ್ವಯವಾಗುವ ಫ್ಲ್ಯಾಗ್ಗಳನ್ನು ಮಾಲೀಕರಿಂದ ಮಾತ್ರ ಹೊಂದಿಸಲು ಸಾಧ್ಯ: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">ಸರ್ವರ್ ಸಂಪರ್ಕವನ್ನು ನಿರಾಕರಿಸಿದೆ.</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb index f2708b41..eeb2def 100644 --- a/components/strings/components_strings_ko.xtb +++ b/components/strings/components_strings_ko.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ko"> <translation id="1015255576907412255">자세한 내용은 시스템 관리자에게 문의하세요.</translation> +<translation id="1015730422737071372">추가 세부정보 제공</translation> <translation id="1032854598605920125">시계 방향으로 회전</translation> <translation id="1055184225775184556">추가 실행 취소(&U)</translation> <translation id="1064422015032085147">웹페이지를 호스팅하는 서버에 과부하가 발생했거나 보수 중일 수 있습니다. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">다운로드 실패</translation> <translation id="6644283850729428850">이 정책은 사용되지 않습니다.</translation> <translation id="6646897916597483132">카드 앞면의 4자리 CVC를 입력하세요.</translation> +<translation id="6660210980321319655"><ph name="CRASH_TIME" />에 자동으로 신고됨</translation> <translation id="6671697161687535275">Chromium에서 자동완성 항목 추천을 삭제하시겠습니까?</translation> <translation id="6710213216561001401">이전</translation> <translation id="6711464428925977395">프록시 서버에 문제가 발생했거나 주소가 잘못되었습니다.</translation> @@ -632,6 +634,7 @@ <translation id="8971063699422889582">서버 인증서가 만료되었습니다.</translation> <translation id="8987927404178983737">월</translation> <translation id="8988760548304185580">신용카드의 유효기간과 카드 뒷면의 3자리 CVC를 입력하세요.</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">잘못된 SSL 클라이언트 인증서입니다.</translation> <translation id="901974403500617787">시스템 전체에 적용되는 플래그는 소유자(<ph name="OWNER_EMAIL" />)만 설정할 수 있습니다.</translation> <translation id="9020142588544155172">서버에서 연결을 거부했습니다.</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb index f01b1ed..c674fa21 100644 --- a/components/strings/components_strings_lt.xtb +++ b/components/strings/components_strings_lt.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="lt"> <translation id="1015255576907412255">Jei reikia daugiau informacijos, susisiekite su sistemos administratoriumi.</translation> +<translation id="1015730422737071372">Pateikti papildomos išsamios informacijos</translation> <translation id="1032854598605920125">Pasukti pagal laikrodžio rodyklę</translation> <translation id="1055184225775184556">&Anuliuoti pridėjimą</translation> <translation id="1064422015032085147">Serveris, priglobiantis tinklalapį, gali būti perkrautas arba vykdomi jo techninės priežiūros darbai. @@ -438,6 +439,7 @@ <translation id="6637478299472506933">Atsisiun. įv. klaida</translation> <translation id="6644283850729428850">Ši politika nepatvirtinta.</translation> <translation id="6646897916597483132">Įveskite 4 skaitmenų kortelės saugos kodą (CVC), nurodytą kortelės priekyje</translation> +<translation id="6660210980321319655">Automatiškai pranešta <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Pašalinti formos pasiūlymą iš „Chromium“?</translation> <translation id="6710213216561001401">Ankstesnis</translation> <translation id="6711464428925977395">Kažkas negerai su tarpiniu serveriu arba adresas netinkamas.</translation> @@ -635,6 +637,7 @@ <translation id="8971063699422889582">Baigėsi serverio sertifikato galiojimo laikas.</translation> <translation id="8987927404178983737">Mėnuo</translation> <translation id="8988760548304185580">Įveskite galiojimo pabaigos datą ir 3 skaitmenų kortelės saugos kodą (CVC), nurodytą kitoje kortelės pusėje</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Blogas SSL kliento tapatybės nustatymo sertifikatas.</translation> <translation id="901974403500617787">Visoje sistemoje taikomas žymas gali nustatyti tik savininkas: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Serveris atmetė ryšį.</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb index 6e7ab7f..0625bf11 100644 --- a/components/strings/components_strings_lv.xtb +++ b/components/strings/components_strings_lv.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="lv"> <translation id="1015255576907412255">Lai iegūtu plašāku informāciju, sazinieties ar sistēmas administratoru.</translation> +<translation id="1015730422737071372">Sniegt papildu informāciju</translation> <translation id="1032854598605920125">Pagriezt pulksteņrādītāju kustības virzienā</translation> <translation id="1055184225775184556">&Pievienošanas atsaukšana</translation> <translation id="1064422015032085147">Serveris, kurā tiek mitināta tīmekļa lapa, iespējams, ir pārslogots vai notiek tā tehniskā apkope. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">Lejupiel. neizdevās</translation> <translation id="6644283850729428850">Šī politika ir izbeigta.</translation> <translation id="6646897916597483132">Ievadiet 4 ciparu CVC kodu, kas norādīts jūsu kredītkartes priekšpusē.</translation> +<translation id="6660210980321319655">Automātiski ziņots: <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Vai noņemt veidlapas ieteikumu no pārlūka Chromium?</translation> <translation id="6710213216561001401">Iepriekšējais</translation> <translation id="6711464428925977395">Starpniekserverī radās kļūda, vai arī adrese nav pareiza.</translation> @@ -633,6 +635,7 @@ <translation id="8971063699422889582">Servera sertifikātam ir beidzies derīguma termiņš.</translation> <translation id="8987927404178983737">Mēnesis</translation> <translation id="8988760548304185580">Ievadiet derīguma termiņu un 3 ciparu CVC kodu, kas ir norādīts jūsu kredītkartes aizmugurē.</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Slikts SSL klienta autentifikācijas sertifikāts.</translation> <translation id="901974403500617787">Atzīmes, kas attiecas uz visu sistēmu, var iestatīt tikai īpašnieks: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Serveris noraidīja savienojumu.</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb index 1a05e29..a9bb156 100644 --- a/components/strings/components_strings_ml.xtb +++ b/components/strings/components_strings_ml.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ml"> <translation id="1015255576907412255">കൂടുതൽ വിവരങ്ങൾക്കായി നിങ്ങളുടെ സിസ്റ്റം അഡ്മിനിസ്ട്രേറ്ററെ ബന്ധപ്പെടുക.</translation> +<translation id="1015730422737071372">കൂടുതൽ വിശദാംശങ്ങൾ നൽകുക</translation> <translation id="1032854598605920125">ഘടികാരദിശയിൽ തിരിക്കുക</translation> <translation id="1055184225775184556">&ചേർക്കുന്നത് പഴയപടിയാക്കുക</translation> <translation id="1064422015032085147">വെബ്പേജ് ഹോസ്റ്റുചെയ്തിക്കുന്ന സെർവർ ഓവർലോഡായിരിക്കാം അല്ലെങ്കിൽ അറ്റകുറ്റപ്പണിയിലായിരിക്കാം. @@ -436,6 +437,7 @@ <translation id="6637478299472506933">ഡൗൺലോഡ് പരാജയപ്പെട്ടു</translation> <translation id="6644283850729428850">ഈ നയം ഒഴിവാക്കി.</translation> <translation id="6646897916597483132">നിങ്ങളുടെ കാർഡിന്റെ മുന്നിലുള്ള 4 അക്ക CVC നൽകുക</translation> +<translation id="6660210980321319655">സ്വയമേവ റിപ്പോർട്ടുചെയ്തത് <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Chromium-ത്തിൽ നിന്ന് ഫോം നിർദ്ദേശം നീക്കംചെയ്യണോ?</translation> <translation id="6710213216561001401">കഴിഞ്ഞ</translation> <translation id="6711464428925977395">പ്രോക്സി സെർവറിൽ എന്തോ പ്രശ്നമുണ്ട്, അല്ലെങ്കിൽ വിലാസം തെറ്റാണ്.</translation> @@ -497,7 +499,7 @@ ശ്രദ്ധിക്കൂ! ആൾമാറാട്ട മോഡ് <ph name="SHORTCUT_KEY" /> അടുത്ത തവണ കൈകാര്യം ചെയ്യുന്നത് എളുപ്പമുള്ളതാകാനിടയുണ്ട്.</translation> <translation id="7400418766976504921">URL</translation> -<translation id="7419106976560586862">പ്രൊഫൈല് പാത</translation> +<translation id="7419106976560586862">പ്രൊഫൈൽ പാത</translation> <translation id="7424977062513257142">ഈ വെബ്സൈറ്റിലെ ഒരു എംബഡ് ചെയ്ത പേജ് പറയുന്നത്:</translation> <translation id="7441627299479586546">തെറ്റായ നയ വിഷയം</translation> <translation id="7450732239874446337">നെറ്റ്വര്ക്ക് IO താല്ക്കാലികമായി നിര്ത്തിവച്ചിരിക്കുന്നു.</translation> @@ -631,6 +633,7 @@ <translation id="8971063699422889582">സെര്വറിന്റെ സര്ട്ടിഫിക്കറ്റ് കാലഹരണപ്പെട്ടു.</translation> <translation id="8987927404178983737">മാസം</translation> <translation id="8988760548304185580">നിങ്ങളുടെ കാർഡിന്റെ പുറകിലുള്ള കാലഹരണപ്പെടൽ തീയതിയും 3-അക്ക CVC-യും നൽകുക</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">SSL ക്ലയന്റ് പ്രാമാണീകരണ സര്ട്ടിഫിക്കറ്റ് മോശമാണ്.</translation> <translation id="901974403500617787">ഉടമയ്ക്ക് മാത്രമേ സിസ്റ്റത്തിലാകമാനം ബാധകമാക്കാവുന്ന ഫ്ലാഗ് സജ്ജമാക്കാനാകൂ: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">സെര്വര്, കണക്ഷന് നിരസിച്ചു.</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb index 73e3461..def334fe9 100644 --- a/components/strings/components_strings_mr.xtb +++ b/components/strings/components_strings_mr.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="mr"> <translation id="1015255576907412255">अधिक माहितीसाठी आपल्या सिस्टीम प्रशासकाशी संपर्क साधा.</translation> +<translation id="1015730422737071372">अतिरिक्त तपशील प्रदान करा</translation> <translation id="1032854598605920125">घड्याळाच्या दिशेने फिरवा</translation> <translation id="1055184225775184556">&जोडा पूर्ववत करा</translation> <translation id="1064422015032085147">वेबपृष्ठ होस्ट करणार्या सर्व्हरवर कदाचित अत्याधिक भार आहे किंवा त्याची देखरेख केली जात असावी. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">डाउनलोड अयशस्वी</translation> <translation id="6644283850729428850">हे धोरण नापसंत आहे.</translation> <translation id="6646897916597483132">आपल्या कार्डच्या पुढील भागावर असलेले 4-अंकी CVC प्रविष्ट करा</translation> +<translation id="6660210980321319655">स्वयंचलितपणे <ph name="CRASH_TIME" /> वाजता अहवाल दिला</translation> <translation id="6671697161687535275">Chromium वरून फॉर्म सूचना काढायच्या?</translation> <translation id="6710213216561001401">मागील</translation> <translation id="6711464428925977395">प्रॉक्सी सर्व्हरमध्ये काहीतरी चुकीचे आहे किंवा पत्ता चुकीचा आहे.</translation> @@ -630,6 +632,7 @@ <translation id="8971063699422889582">सर्व्हरचे प्रमाणपत्र कालबाह्य झाले आहे.</translation> <translation id="8987927404178983737">महिना</translation> <translation id="8988760548304185580">आपल्या कार्डच्या पाठीमागे असलेली कालबाह्यता तारीख आणि 3-अंकी CVC प्रविष्ट करा</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">खराब SSL क्लायंट प्रमाणीकरण प्रमाणपत्र.</translation> <translation id="901974403500617787">सिस्टीम-व्याप्त लागू होणारी ध्वजांकने केवळ मालकाद्वारे सेट केली जाऊ शकतात: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">सर्व्हरने कनेक्शनला नकार दिला.</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb index 9e67071..6859e57 100644 --- a/components/strings/components_strings_ms.xtb +++ b/components/strings/components_strings_ms.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ms"> <translation id="1015255576907412255">Hubungi pentadbir sistem anda untuk mendapatkan maklumat lanjut.</translation> +<translation id="1015730422737071372">Berikan butiran tambahan</translation> <translation id="1032854598605920125">Putar ikut arah jam</translation> <translation id="1055184225775184556">&Buat Asal Tambahkan</translation> <translation id="1064422015032085147">Pelayan yang mengehos halaman web mungkin sarat atau sedang diselenggara. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">Muat Turun Gagal</translation> <translation id="6644283850729428850">Dasar ini telah dikecam.</translation> <translation id="6646897916597483132">Masukkan CVC 4 digit dari bahagian depan kad anda</translation> +<translation id="6660210980321319655">Dilaporkan secara automatik pada <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Alih keluar cadangan borang daripada Chromium?</translation> <translation id="6710213216561001401">Sebelumnya</translation> <translation id="6711464428925977395">Ada sesuatu yang tidak kena dengan pelayan proksi atau alamat tidak betul.</translation> @@ -633,6 +635,7 @@ <translation id="8971063699422889582">Sijil pelayan telah tamat tempoh.</translation> <translation id="8987927404178983737">Bulan</translation> <translation id="8988760548304185580">Masukkan tarikh tamat tempoh dan CVC 3 digit dari bahagian belakang kad anda</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Sijil pengesahan klien SSL tidak sah.</translation> <translation id="901974403500617787">Bendera yang diguna pakai di seluruh sistem hanya boleh ditetapkan oleh pemilik: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Pelayan menolak sambungan.</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb index 2ffe00d..41c749c 100644 --- a/components/strings/components_strings_nl.xtb +++ b/components/strings/components_strings_nl.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="nl"> <translation id="1015255576907412255">Neem contact op met je systeembeheerder voor meer informatie.</translation> +<translation id="1015730422737071372">Aanvullende gegevens verzenden</translation> <translation id="1032854598605920125">Rechtsom draaien</translation> <translation id="1055184225775184556">&Toevoegen ongedaan maken</translation> <translation id="1064422015032085147">Het is mogelijk dat de server waarop de webpagina wordt gehost, overbelast is of wordt onderhouden. Verzoeken naar deze URL zijn tijdelijk stopgezet, om te voorkomen dat er te veel verkeer wordt gegenereerd en dat het probleem nog erger wordt.</translation> @@ -421,6 +422,7 @@ <translation id="6637478299472506933">Download is mislukt</translation> <translation id="6644283850729428850">Dit beleid is verouderd.</translation> <translation id="6646897916597483132">Geef de viercijferige CVC-code op die op de voorkant van je kaart staat</translation> +<translation id="6660210980321319655">Automatisch gemeld: <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Formuliersuggestie verwijderen uit Chromium?</translation> <translation id="6710213216561001401">Vorige</translation> <translation id="6711464428925977395">Er is iets mis met de proxyserver of het adres is onjuist.</translation> @@ -600,6 +602,7 @@ <translation id="8971063699422889582">Het servercertificaat is verlopen.</translation> <translation id="8987927404178983737">Maand</translation> <translation id="8988760548304185580">Geef de vervaldatum en driecijferige CVC-code op die op de achterkant van je kaart staan</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Ongeldig SSL-certificaat voor clientverificatie.</translation> <translation id="901974403500617787">Markeringen die op het hele systeem van toepassing zijn, kunnen alleen worden ingesteld door de eigenaar: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">De server heeft de verbinding geweigerd.</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb index b215b78..4d46d72 100644 --- a/components/strings/components_strings_no.xtb +++ b/components/strings/components_strings_no.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="no"> <translation id="1015255576907412255">Kontakt systemadministratoren din for mer informasjon.</translation> +<translation id="1015730422737071372">Oppgi flere detaljer</translation> <translation id="1032854598605920125">Rotér med klokken</translation> <translation id="1055184225775184556">&Angre tilleggingen</translation> <translation id="1064422015032085147">Det kan hende tjeneren som er vert for nettsiden, er overbelastet, eller at det utføres vedlikehold på den. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">Nedlastingen mislyktes</translation> <translation id="6644283850729428850">Denne retningslinjen er foreldet.</translation> <translation id="6646897916597483132">Skriv inn den firesifrede CVC-koden du finner på forsiden av kortet ditt.</translation> +<translation id="6660210980321319655">Automatisk rapportert <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Vil du fjerne forslaget fra Chromium?</translation> <translation id="6710213216561001401">Forrige</translation> <translation id="6711464428925977395">Det er noe galt med proxy-tjeneren, eller adressen er feil.</translation> @@ -635,6 +637,7 @@ <translation id="8971063699422889582">Tjenerens sertifikat er utløpt.</translation> <translation id="8987927404178983737">Måned</translation> <translation id="8988760548304185580">Skriv inn utløpsdatoen og den tresifrede CVC-koden du finner på baksiden av kortet ditt.</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Ugyldig autentiseringssertifikat for SSL-klient.</translation> <translation id="901974403500617787">Rapporteringer som gjelder for hele systemet kan bare angis av eieren: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Tjeneren tillot ikke tilkoblingen.</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb index 997e3ca..1deb8ac 100644 --- a/components/strings/components_strings_pl.xtb +++ b/components/strings/components_strings_pl.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="pl"> <translation id="1015255576907412255">Aby uzyskać więcej informacji, skontaktuj się z administratorem systemu.</translation> +<translation id="1015730422737071372">Podaj dodatkowe informacje</translation> <translation id="1032854598605920125">Obróć w prawo</translation> <translation id="1055184225775184556">&Cofnij dodanie</translation> <translation id="1064422015032085147">Serwer hostujący tę stronę może być przeciążony lub w trakcie konserwacji. @@ -436,6 +437,7 @@ <translation id="6637478299472506933">Pobieranie nie powiodło się</translation> <translation id="6644283850729428850">Zasada jest przestarzała.</translation> <translation id="6646897916597483132">Wpisz czterocyfrowy kod CVC widoczny na przodzie karty</translation> +<translation id="6660210980321319655">Automatyczne zgłoszenie: <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Usunąć tę podpowiedź do formularza z Chromium?</translation> <translation id="6710213216561001401">Wstecz</translation> <translation id="6711464428925977395">Serwer proxy działa nieprawidłowo albo adres jest błędny.</translation> @@ -631,6 +633,7 @@ <translation id="8971063699422889582">Ważność certyfikatu serwera wygasła.</translation> <translation id="8987927404178983737">Miesiąc</translation> <translation id="8988760548304185580">Wpisz datę ważności i trzycyfrowy kod CVC widoczny na odwrocie karty</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Błędny certyfikat uwierzytelniania klienta SSL.</translation> <translation id="901974403500617787">Flagi stosowane w całym systemie może ustawić tylko właściciel: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Serwer odrzucił połączenie.</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb index 8470d68..2087848 100644 --- a/components/strings/components_strings_pt-BR.xtb +++ b/components/strings/components_strings_pt-BR.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="pt-BR"> <translation id="1015255576907412255">Entre em contato com o administrador do sistema para mais informações.</translation> +<translation id="1015730422737071372">Forneça detalhes adicionais</translation> <translation id="1032854598605920125">Girar no sentido horário</translation> <translation id="1055184225775184556">&Desfazer adicionar</translation> <translation id="1064422015032085147">O servidor que hospeda a página da Web pode estar sobrecarregado ou em manutenção. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">Falha no download</translation> <translation id="6644283850729428850">Esta política foi encerrada.</translation> <translation id="6646897916597483132">Digite o CVC de quatro dígitos que aparece na parte frontal do seu cartão</translation> +<translation id="6660210980321319655">Denunciada automaticamente às <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Remover sugestão de formulário do Chromium?</translation> <translation id="6710213216561001401">Anterior</translation> <translation id="6711464428925977395">Há algo errado com o servidor proxy, ou o endereço está incorreto.</translation> @@ -633,6 +635,7 @@ <translation id="8971063699422889582">O certificado do servidor expirou.</translation> <translation id="8987927404178983737">Mês</translation> <translation id="8988760548304185580">Insira a data de validade e o CVC de três dígitos que aparece na parte de trás do seu cartão</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Certificado de autenticação de cliente SSL incorreto.</translation> <translation id="901974403500617787">Sinalizações aplicáveis a todo o sistema podem ser definidas apenas pelo proprietário: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">O servidor recusou a conexão.</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb index b9ca1a2..f2ef215b 100644 --- a/components/strings/components_strings_pt-PT.xtb +++ b/components/strings/components_strings_pt-PT.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="pt-PT"> <translation id="1015255576907412255">Para mais informações, contacte o administrador do sistema.</translation> +<translation id="1015730422737071372">Forneça mais detalhes</translation> <translation id="1032854598605920125">Rodar para a direita</translation> <translation id="1055184225775184556">&Anular adição</translation> <translation id="1064422015032085147">O servidor que aloja a página Web pode estar sobrecarregado ou em manutenção. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">A Transferência Falhou</translation> <translation id="6644283850729428850">Esta política está obsoleta.</translation> <translation id="6646897916597483132">Introduza o Código de Segurança/CVC de quatro dígitos que se encontra na parte da frente do cartão</translation> +<translation id="6660210980321319655">Relatório enviado automaticamente no(a) <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Pretende remover a sugestão do formulário do Chromium?</translation> <translation id="6710213216561001401">Anterior</translation> <translation id="6711464428925977395">Existe um problema com o servidor proxy ou o endereço está incorreto.</translation> @@ -633,6 +635,7 @@ <translation id="8971063699422889582">O certificado do servidor expirou.</translation> <translation id="8987927404178983737">Mês</translation> <translation id="8988760548304185580">Introduza a data de validade e o Código de Segurança/CVC de três dígitos no verso do cartão</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Certificado de autenticação de cliente SSL incorrecto.</translation> <translation id="901974403500617787">Os sinalizadores que se aplicam a todo o sistema apenas podem ser definidos pelo proprietário: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">O servidor recusou a ligação.</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb index eb4b2c5b..a9f3f11 100644 --- a/components/strings/components_strings_ro.xtb +++ b/components/strings/components_strings_ro.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ro"> <translation id="1015255576907412255">Contactați administratorul de sistem pentru mai multe informații.</translation> +<translation id="1015730422737071372">Specifică detalii suplimentare</translation> <translation id="1032854598605920125">Rotește în sensul acelor de ceasornic</translation> <translation id="1055184225775184556">&Anulați adăugarea</translation> <translation id="1064422015032085147">Serverul care găzduiește pagina web poate fi supraîncărcat sau în curs de întreținere. @@ -83,7 +84,7 @@ <translation id="1958820272620550857">Blocați elementele</translation> <translation id="1962204205936693436">Marcaje <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Eroare de serializare</translation> -<translation id="1974060860693918893">Avansat</translation> +<translation id="1974060860693918893">Avansate</translation> <translation id="201192063813189384">Eroare la citirea datelor din memoria cache.</translation> <translation id="2025186561304664664">Proxy-ul este setat la Configurat automat.</translation> <translation id="2025623846716345241">Confirmați reîncărcarea</translation> @@ -436,6 +437,7 @@ <translation id="6637478299472506933">Descărc. nu a reușit</translation> <translation id="6644283850729428850">Această politică este învechită.</translation> <translation id="6646897916597483132">Introdu codul CVC alcătuit din 4 cifre înscris pe fața a cardului</translation> +<translation id="6660210980321319655">Raportată automat <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Elimini sugestia pentru formular din Chromium?</translation> <translation id="6710213216561001401">Înapoi</translation> <translation id="6711464428925977395">A apărut o problemă la serverul proxy sau adresa nu este corectă.</translation> @@ -631,6 +633,7 @@ <translation id="8971063699422889582">Certificatul serverului a expirat.</translation> <translation id="8987927404178983737">Lună</translation> <translation id="8988760548304185580">Introdu data de expirare și codul CVC alcătuit din 3 cifre înscris pe spatele cardului</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Certificat de autentificare client SSL nevalid.</translation> <translation id="901974403500617787">Marcajele care se aplică la nivel de sistem pot fi create numai de proprietar: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Serverul a refuzat conexiunea.</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb index d6588644..402663f 100644 --- a/components/strings/components_strings_ru.xtb +++ b/components/strings/components_strings_ru.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ru"> <translation id="1015255576907412255">За дополнительной информацией обращайтесь к системному администратору.</translation> +<translation id="1015730422737071372">Сообщить дополнительную информацию</translation> <translation id="1032854598605920125">Повернуть по часовой стрелке</translation> <translation id="1055184225775184556">&Отменить добавление</translation> <translation id="1064422015032085147">Возможно, сервер, на котором размещена веб-страница, перегружен или на нем ведутся работы. @@ -436,6 +437,7 @@ <translation id="6637478299472506933">Ошибка при скачивании</translation> <translation id="6644283850729428850">Правило устарело.</translation> <translation id="6646897916597483132">Введите четырехзначный CVC-код, указанный на лицевой стороне карты.</translation> +<translation id="6660210980321319655">Отчет о сбое отправлен автоматически. Время возникновения сбоя: <ph name="CRASH_TIME" />.</translation> <translation id="6671697161687535275">Удалить подсказку из Chromium?</translation> <translation id="6710213216561001401">Назад</translation> <translation id="6711464428925977395">На прокси-сервере возникла проблема или адрес указан неверно.</translation> @@ -631,6 +633,7 @@ <translation id="8971063699422889582">Сертификат сервера устарел.</translation> <translation id="8987927404178983737">Месяц</translation> <translation id="8988760548304185580">Введите срок действия и трехзначный CVC-код, указанный на обратной стороне карты.</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Недопустимый сертификат SSL для аутентификации клиента.</translation> <translation id="901974403500617787">Системные флаги может устанавливать только владелец (<ph name="OWNER_EMAIL" />).</translation> <translation id="9020142588544155172">Сервер отказал в подключении.</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb index 9370efe..967b779 100644 --- a/components/strings/components_strings_sk.xtb +++ b/components/strings/components_strings_sk.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="sk"> <translation id="1015255576907412255">Ak chcete získať viac informácií, kontaktujte správcu systému.</translation> +<translation id="1015730422737071372">Poskytnite ďalšie podrobnosti</translation> <translation id="1032854598605920125">Otočiť v smere hodinových ručičiek</translation> <translation id="1055184225775184556">&Vrátiť späť pridanie</translation> <translation id="1064422015032085147">Server, ktorý hostí túto webovú stránku, môže byť preťažený alebo na ňom prebieha údržba. S cieľom zabrániť vytváraniu príliš veľkej návštevnosti, ktorá by situáciu ešte zhoršila, boli žiadosti na túto webovú adresu dočasne zakázané.</translation> @@ -421,6 +422,7 @@ <translation id="6637478299472506933">Stiahnutie zlyhalo</translation> <translation id="6644283850729428850">Toto pravidlo bolo označené ako zastarané.</translation> <translation id="6646897916597483132">Zadajte štvormiestny kód CVC z prednej strany svojej karty</translation> +<translation id="6660210980321319655">Automaticky nahlásené <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Chcete návrh položky formulára odstrániť z prehliadača Chromium?</translation> <translation id="6710213216561001401">Dozadu</translation> <translation id="6711464428925977395">Vyskytol sa problém s proxy serverom alebo je adresa nesprávna.</translation> @@ -600,6 +602,7 @@ <translation id="8971063699422889582">Platnosť certifikátu servera vypršala.</translation> <translation id="8987927404178983737">Mesiac</translation> <translation id="8988760548304185580">Zadajte dátum vypršania platnosti a trojmiestny kód CVC zo zadnej strany svojej karty</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Chybný certifikát SSL overenia klienta.</translation> <translation id="901974403500617787">Príznaky, ktoré platia v celom systéme, môže nastaviť iba vlastník: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Server odmietol spojenie.</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb index 513e086..f75632c 100644 --- a/components/strings/components_strings_sl.xtb +++ b/components/strings/components_strings_sl.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="sl"> <translation id="1015255576907412255">Če želite več informacij, se obrnite na skrbnika sistema.</translation> +<translation id="1015730422737071372">Navedite dodatne podrobnosti</translation> <translation id="1032854598605920125">Sukanje v smeri urnega kazalca</translation> <translation id="1055184225775184556">&Razveljavi dodajanje</translation> <translation id="1064422015032085147">Strežnik, ki gosti spletno stran, je morda preobremenjen ali poteka njegovo vzdrževanje. @@ -438,6 +439,7 @@ <translation id="6637478299472506933">Prenos ni uspel</translation> <translation id="6644283850729428850">Ta pravilnik je zastarel.</translation> <translation id="6646897916597483132">Vnesite štirimestno kodo CVC na sprednji strani kartice</translation> +<translation id="6660210980321319655">Samodejno sporočeno: <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Želite predlog obrazca odstraniti iz Chromiuma?</translation> <translation id="6710213216561001401">Nazaj</translation> <translation id="6711464428925977395">Nekaj je narobe s strežnikom proxy ali pa naslov ni pravilen.</translation> @@ -634,6 +636,7 @@ <translation id="8971063699422889582">Potrdilo strežnika je poteklo.</translation> <translation id="8987927404178983737">Mesec</translation> <translation id="8988760548304185580">Vnesite datum poteka in trimestno kodo CVC na hrbtni strani kartice</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Napačno potrdilo preverjanja pristnosti odjemalca SSL.</translation> <translation id="901974403500617787">Zastavice, ki se uporabijo v celotnem sistemu, lahko nastavi samo lastnik: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Strežnik je zavrnil povezavo.</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb index 6d38672..45a0d5e 100644 --- a/components/strings/components_strings_sr.xtb +++ b/components/strings/components_strings_sr.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="sr"> <translation id="1015255576907412255">Контактирајте администратора система за више информација.</translation> +<translation id="1015730422737071372">Наведите додатне детаље</translation> <translation id="1032854598605920125">Окрените у смеру казаљке на сату</translation> <translation id="1055184225775184556">&Опозови додавање</translation> <translation id="1064422015032085147">Сервер на ком се хостује веб-страница је вероватно преоптерећен или се поправља. @@ -434,6 +435,7 @@ <translation id="6637478299472506933">Преузимање није успело</translation> <translation id="6644283850729428850">Ове смернице су застареле.</translation> <translation id="6646897916597483132">Унесите четвороцифрени CVC који се налази на предњој страни картице</translation> +<translation id="6660210980321319655">Аутоматски пријављено <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Желите ли да уклоните предлог из Chromium-а?</translation> <translation id="6710213216561001401">Претходно</translation> <translation id="6711464428925977395">Нешто није у реду са прокси сервером или је адреса нетачна.</translation> @@ -622,6 +624,7 @@ <translation id="8971063699422889582">Сертификат сервера је истекао.</translation> <translation id="8987927404178983737">Месец</translation> <translation id="8988760548304185580">Унесите датум истека и троцифрени CVC који се налази на полеђини картице</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Неисправaн сертификат за потврду идентитета SSL клијента.</translation> <translation id="901974403500617787">Ознаке које се примењују у целом систему може да подеси само власник: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Сервер је одбио повезивање.</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb index 87c11e9..aeaa9c42 100644 --- a/components/strings/components_strings_sv.xtb +++ b/components/strings/components_strings_sv.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="sv"> <translation id="1015255576907412255">Kontakta systemadministratören om du vill ha mer information.</translation> +<translation id="1015730422737071372">Ange ytterligare information</translation> <translation id="1032854598605920125">Rotera medurs</translation> <translation id="1055184225775184556">&Ångra Lägg till</translation> <translation id="1064422015032085147">Eventuellt pågår underhåll på servern som webbsidan finns på, eller så kan servern vara överbelastad. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">Nedladdningen misslyckades</translation> <translation id="6644283850729428850">Policyn är föråldrad.</translation> <translation id="6646897916597483132">Ange den fyrsiffriga CVC-koden från kortets framsida</translation> +<translation id="6660210980321319655">Rapporterades automatiskt <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Vill du ta bort formulärförslaget från Chromium?</translation> <translation id="6710213216561001401">Föregående</translation> <translation id="6711464428925977395">Något är fel med proxyservern eller så är adressen felaktig.</translation> @@ -633,6 +635,7 @@ <translation id="8971063699422889582">Servercertifikatet har gått ut.</translation> <translation id="8987927404178983737">Månad</translation> <translation id="8988760548304185580">Ange utgångsdatum och den tresiffriga CVC-koden på kreditkortets baksida</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Felaktigt SSL-klientautentiseringscertifikat.</translation> <translation id="901974403500617787">Flaggor som gäller hela systemet kan endast ställas in av ägaren: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Servern vägrade ansluta.</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb index 24956dc..544eb54 100644 --- a/components/strings/components_strings_sw.xtb +++ b/components/strings/components_strings_sw.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="sw"> <translation id="1015255576907412255">Wasiliana na msimamizi wako wa mtandao kwa maelezo zaidi.</translation> +<translation id="1015730422737071372">Toa maelezo ya ziada</translation> <translation id="1032854598605920125">Zungusha kwenye mwendo wa saa</translation> <translation id="1055184225775184556">Tendua Kuongeza</translation> <translation id="1064422015032085147">Huenda seva inayopangisha ukurasa huo wa wavuti imejaa au inakarabatiwa. @@ -436,6 +437,7 @@ <translation id="6637478299472506933">Upakuaji Umeshindwa</translation> <translation id="6644283850729428850">Sera hii imepingwa.</translation> <translation id="6646897916597483132">Weka CVC yenye tarakimu 4 kutoka mbele ya kadi yako</translation> +<translation id="6660210980321319655">Imeripoti kiotomatiki <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Je, ungependa kuondoa pendekezo la fomu kwenye Chromium?</translation> <translation id="6710213216561001401">Iliyotangulia</translation> <translation id="6711464428925977395">Kuna hitilafu katika seva mbadala, au anwani siyo sahihi.</translation> @@ -632,6 +634,7 @@ <translation id="8971063699422889582">Cheti cha seva kimechina.</translation> <translation id="8987927404178983737">Mwezi</translation> <translation id="8988760548304185580">Weka tarehe kuisha muda na CVC yenye tarakimu 3 kutoka nyuma ya kadi yako</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Cheti kibaya cha uthibitishaji wa teja ya SSL</translation> <translation id="901974403500617787">Alama zinazotumika katika mfumo mzima zinaweza kuwekwa na mmiliki pekee: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Seva ilikataa muunganisho.</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb index a298120..ee18ff5 100644 --- a/components/strings/components_strings_ta.xtb +++ b/components/strings/components_strings_ta.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ta"> <translation id="1015255576907412255">மேலும் தகவலுக்கு உங்கள் கணினி நிர்வாகியைத் தொடர்புகொள்ளவும்.</translation> +<translation id="1015730422737071372">கூடுதல் விவரங்களை வழங்கவும்</translation> <translation id="1032854598605920125">கடிகாரத்திசையில் சுழற்று</translation> <translation id="1055184225775184556">&சேர்த்தலைச் செயல்தவிர்</translation> <translation id="1064422015032085147">இணையப்பக்கம் ஹோஸ்ட் செய்யப்பட்டுள்ள சேவையகம் பணிச்சுமையால் பாதிக்கப்பட்டிருக்கலாம் அல்லது பராமரிப்புப் பணி நடைபெற்றுக் கொண்டிருக்கலாம். @@ -428,6 +429,7 @@ <translation id="6637478299472506933">பதிவிறக்கம் தோல்வியானது</translation> <translation id="6644283850729428850">இந்தக் கொள்கை தவிர்க்கப்பட்டது.</translation> <translation id="6646897916597483132">கார்டின் முன்புறமுள்ள, 4 இலக்க CVCஐ உள்ளிடவும்</translation> +<translation id="6660210980321319655">தானாக அறிவிக்கப்பட்டது: <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Chromium இலிருந்து படிவப் பரிந்துரையை அகற்றவா?</translation> <translation id="6710213216561001401">முந்தையது</translation> <translation id="6711464428925977395">ப்ராக்ஸி சர்வரில் ஏதோ தவறு உள்ளது அல்லது முகவரி தவறாக உள்ளது.</translation> @@ -619,6 +621,7 @@ <translation id="8971063699422889582">சேவையகச் சான்றிதழ் காலாவதியானது.</translation> <translation id="8987927404178983737">மாதம்</translation> <translation id="8988760548304185580">காலாவதி தேதி மற்றும் கார்டின் பின்புறமுள்ள மூன்று இலக்க CVCஐ உள்ளிடவும்</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">தவறான SSL கிளையன்ட் அங்கீகாரச் சான்றிதழ்.</translation> <translation id="901974403500617787">கணினி அளவில் பயன்படுத்தப்படும் கொடிகள் பின்வரும் உரிமையாளரால் மட்டுமே அமைக்கப்படும்: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">சேவையகம் இணைப்பை மறுத்துவிட்டது.</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index 10ab879..dc53772 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="te"> <translation id="1015255576907412255">మరింత సమాచారం కోసం మీ సిస్టమ్ నిర్వాహకుడిని సంప్రదించండి.</translation> +<translation id="1015730422737071372">అదనపు వివరాలను అందించండి</translation> <translation id="1032854598605920125">సవ్యదిశలో తిప్పు</translation> <translation id="1055184225775184556">&జోడించడాన్ని రద్దు చేయి</translation> <translation id="1064422015032085147">వెబ్పేజీని హోస్ట్ చేస్తున్న సర్వర్పై అధిక భారం పడి ఉండవచ్చు లేదా నిర్వహణలో భాగంగా దాన్ని తాత్కాలికంగా నిలిపివేసి ఉండవచ్చు. @@ -436,6 +437,7 @@ <translation id="6637478299472506933">డౌన్లోడ్ చేయడం విఫలమైంది</translation> <translation id="6644283850729428850">ఈ విధానం విలువ తగ్గించబడింది.</translation> <translation id="6646897916597483132">మీ కార్డ్ ముందువైపు ఉండే 4 అంకెల CVCని నమోదు చేయండి</translation> +<translation id="6660210980321319655">స్వయంచాలకంగా నివేదించబడిన సమయం <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Chromium నుండి ఫారమ్ సూచనను తీసివేయాలా?</translation> <translation id="6710213216561001401">మునుపటి</translation> <translation id="6711464428925977395">ప్రాక్సీ సర్వర్లో ఏదో తప్పు ఉంది లేదా చిరునామా సరైనది కాదు.</translation> @@ -631,6 +633,7 @@ <translation id="8971063699422889582">సర్వర్ యొక్క ప్రమాణపత్రం గడువు ముగిసింది.</translation> <translation id="8987927404178983737">నెల</translation> <translation id="8988760548304185580">మీ కార్డ్ గడువు ముగింపు తేదీ మరియు దాని వెనుకవైపు ఉండే 3 అంకెల CVCని నమోదు చేయండి</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">తప్పుడు SSL క్లయింట్ ప్రామాణీకరణ సర్టిఫికెట్.</translation> <translation id="901974403500617787">సిస్టమ్ వ్యాప్తంగా వర్తింపజేయబడే ఫ్లాగ్లు యజమాని ద్వారా మాత్రమే సెట్ చేయబడతాయి: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">సర్వర్ కనెక్షన్ని తిరస్కరించింది.</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb index 1bdacd4..dac757e 100644 --- a/components/strings/components_strings_th.xtb +++ b/components/strings/components_strings_th.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="th"> <translation id="1015255576907412255">ติดต่อผู้ดูแลระบบเพื่อขอข้อมูลเพิ่มเติม</translation> +<translation id="1015730422737071372">ให้รายละเอียดเพิ่มเติม</translation> <translation id="1032854598605920125">หมุนตามเข็มนาฬิกา</translation> <translation id="1055184225775184556">&เลิกทำการเพิ่ม</translation> <translation id="1064422015032085147">เซิร์ฟเวอร์ที่โฮสต์หน้าเว็บนี้อาจทำงานหนักเกินไปหรืออยู่ระหว่างการซ่อมบำรุง @@ -437,6 +438,7 @@ <translation id="6637478299472506933">การดาวน์โหลดล้มเหลว</translation> <translation id="6644283850729428850">นโยบายนี้ถูกยกเลิกแล้ว</translation> <translation id="6646897916597483132">ป้อน CVC 4 หลักจากด้านหน้าบัตร</translation> +<translation id="6660210980321319655">รายงานอัตโนมัติเมื่อ<ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">ต้องการนำคำแนะนำสำหรับแบบฟอร์มออกจาก Chromium ใช่ไหม</translation> <translation id="6710213216561001401">ก่อนหน้า</translation> <translation id="6711464428925977395">พร็อกซีเซิร์ฟเวอร์ผิดปกติหรือที่อยู่ไม่ถูกต้อง</translation> @@ -633,6 +635,7 @@ <translation id="8971063699422889582">ใบรับรองของเซิร์ฟเวอร์หมดอายุแล้ว</translation> <translation id="8987927404178983737">เดือน</translation> <translation id="8988760548304185580">ป้อนวันหมดอายุและ CVC 3 หลักจากด้านหลังบัตร</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">ใบรับรองการตรวจสอบสิทธิ์ไคลเอนต์ SSL ใช้ไม่ได้</translation> <translation id="901974403500617787">การตั้งค่าสถานะที่ใช้ทั้งระบบสามารถตั้งค่าได้โดยเจ้าของเท่านั้น: <ph name="OWNER_EMAIL" /></translation> <translation id="9020142588544155172">เซิร์ฟเวอร์ปฏิเสธการเชื่อมต่อ</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb index e0775c8..8cb9962 100644 --- a/components/strings/components_strings_tr.xtb +++ b/components/strings/components_strings_tr.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="tr"> <translation id="1015255576907412255">Daha fazla bilgi için sistem yöneticinizle bağlantı kurun.</translation> +<translation id="1015730422737071372">Diğer ayrıntıları sağlayın</translation> <translation id="1032854598605920125">Saat yönünde döndür</translation> <translation id="1055184225775184556">Eklemeyi &Geri Al</translation> <translation id="1064422015032085147">Web sayfasını barındıran sunucu aşırı yüklenmiş veya bakımda olabilir. @@ -436,6 +437,7 @@ <translation id="6637478299472506933">İndirme İşlemi Başarısız Oldu</translation> <translation id="6644283850729428850">Bu politika uygun bulunmadı.</translation> <translation id="6646897916597483132">Kartınızın önündeki 4 basamaklı CVC'yi girin</translation> +<translation id="6660210980321319655"><ph name="CRASH_TIME" /> tarihinde otomatik olarak rapor edildi</translation> <translation id="6671697161687535275">Form önerisi Chromium'dan kaldırılsın mı?</translation> <translation id="6710213216561001401">Önceki</translation> <translation id="6711464428925977395">Proxy sunucusunda bir sorun var veya adres yanlış.</translation> @@ -632,6 +634,7 @@ <translation id="8971063699422889582">Sunucu sertifikasının süresi doldu.</translation> <translation id="8987927404178983737">Ay</translation> <translation id="8988760548304185580">Son kullanma tarihini ve kartınızın arkasındaki 3 basamaklı CVC'yi girin</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Bozuk SSL istemci kimlik doğrulaması sertifikası.</translation> <translation id="901974403500617787">Tüm sistem için geçerli olan işaretler sadece sahibi <ph name="OWNER_EMAIL" /> tarafından ayarlanabilir.</translation> <translation id="9020142588544155172">Sunucu bağlantıyı reddetti.</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb index 6844026..ad0a4c5 100644 --- a/components/strings/components_strings_uk.xtb +++ b/components/strings/components_strings_uk.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="uk"> <translation id="1015255576907412255">Зв’яжіться зі своїм системним адміністратором, щоб дізнатися більше.</translation> +<translation id="1015730422737071372">Надати додаткову інформацію</translation> <translation id="1032854598605920125">Обернути за годинниковою стрілкою</translation> <translation id="1055184225775184556">&Відмінити додавання</translation> <translation id="1064422015032085147">Сервер, на якому розміщено цю веб-сторінку, перевантажений або проходить технічне обслуговування. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">Помилка завантаження</translation> <translation id="6644283850729428850">Це правило більше не використовується.</translation> <translation id="6646897916597483132">Введіть код CVC з 4 цифр, розташований на звороті вашої картки</translation> +<translation id="6660210980321319655">Автоматичне повідомлення: <ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">Видалити пропозицію автозаповнення форм із Chromium?</translation> <translation id="6710213216561001401">Попереднє</translation> <translation id="6711464428925977395">Помилка проксі-сервера або неправильна адреса.</translation> @@ -632,6 +634,7 @@ <translation id="8971063699422889582">Термін дії сертифіката сервера завершився.</translation> <translation id="8987927404178983737">Місяць</translation> <translation id="8988760548304185580">Введіть дату закінчення терміну дії та код CVC з 3 цифр, розташований на звороті вашої картки</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Неправильний сертифікат перевірки автентичності клієнта SSL.</translation> <translation id="901974403500617787">Позначки, які застосовуються до всієї системи, може встановлювати лише власник: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Сервер відмовив у з’єднанні.</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb index ee52838..818cf08 100644 --- a/components/strings/components_strings_vi.xtb +++ b/components/strings/components_strings_vi.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="vi"> <translation id="1015255576907412255">Liên hệ với quản trị viên hệ thống của bạn để biết thêm thông tin.</translation> +<translation id="1015730422737071372">Cung cấp chi tiết bổ sung</translation> <translation id="1032854598605920125">Xoay theo chiều kim đồng hồ</translation> <translation id="1055184225775184556">&Hoàn tác thêm</translation> <translation id="1064422015032085147">Máy chủ lưu trữ trang web có thể bị quá tải hoặc đang được bảo trì. @@ -437,6 +438,7 @@ <translation id="6637478299472506933">Tải xuống không thành công</translation> <translation id="6644283850729428850">Chính sách này không được chấp thuận.</translation> <translation id="6646897916597483132">Nhập CVC gồm 4 chữ số ở mặt trước thẻ của bạn</translation> +<translation id="6660210980321319655"><ph name="CRASH_TIME" /> được báo cáo tự động</translation> <translation id="6671697161687535275">Bạn muốn xóa đề xuất biểu mẫu khỏi Chromium?</translation> <translation id="6710213216561001401">Trước đó</translation> <translation id="6711464428925977395">Đã xảy ra sự cố với máy chủ proxy hoặc địa chỉ không chính xác.</translation> @@ -633,6 +635,7 @@ <translation id="8971063699422889582">Chứng chỉ của máy chủ đã hết hạn.</translation> <translation id="8987927404178983737">Tháng</translation> <translation id="8988760548304185580">Nhập ngày hết hạn và CVC gồm 3 chữ số ở mặt sau thẻ của bạn</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">Chứng chỉ xác thực ứng dụng khách SSL không hợp lệ.</translation> <translation id="901974403500617787">Chỉ chủ sở hữu mới có thể đặt cờ áp dụng cho toàn hệ thống: <ph name="OWNER_EMAIL" />.</translation> <translation id="9020142588544155172">Máy chủ đã từ chối kết nối.</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb index 68f7a42..9b4239cd 100644 --- a/components/strings/components_strings_zh-CN.xtb +++ b/components/strings/components_strings_zh-CN.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="zh-CN"> <translation id="1015255576907412255">有关详情,请联系您的系统管理员。</translation> +<translation id="1015730422737071372">提供其他详细信息</translation> <translation id="1032854598605920125">顺时针旋转</translation> <translation id="1055184225775184556">撤消添加(&U)</translation> <translation id="1064422015032085147">托管该网页的服务器可能已超负荷或正在维护。 @@ -424,6 +425,7 @@ <translation id="6637478299472506933">下载失败</translation> <translation id="6644283850729428850">此政策已弃用。</translation> <translation id="6646897916597483132">输入信用卡正面显示的 4 位数银行卡验证码 (CVC)</translation> +<translation id="6660210980321319655">自动报告时间:<ph name="CRASH_TIME" /></translation> <translation id="6671697161687535275">要从 Chromium 中移除表单填写建议吗?</translation> <translation id="6710213216561001401">上一个</translation> <translation id="6711464428925977395">代理服务器出现问题,或者地址有误。</translation> @@ -607,6 +609,7 @@ <translation id="8971063699422889582">服务器的证书已过期。</translation> <translation id="8987927404178983737">月</translation> <translation id="8988760548304185580">输入信用卡背面显示的到期日期和 3 位数银行卡验证码 (CVC)</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">SSL 客户端身份验证证书出错。</translation> <translation id="901974403500617787">应用于整个系统的设置只能由以下所有者设定:<ph name="OWNER_EMAIL" />。</translation> <translation id="9020142588544155172">服务器拒绝了连接。</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb index 052644c..341b439f 100644 --- a/components/strings/components_strings_zh-TW.xtb +++ b/components/strings/components_strings_zh-TW.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="zh-TW"> <translation id="1015255576907412255">如需詳細資訊,請與您的系統管理員聯絡。</translation> +<translation id="1015730422737071372">提供其他詳細資訊</translation> <translation id="1032854598605920125">順時針旋轉</translation> <translation id="1055184225775184556">復原新增(&U)</translation> <translation id="1064422015032085147">代管這個網頁的伺服器可能已超載或正在進行維護。 @@ -437,6 +438,7 @@ <translation id="6637478299472506933">下載失敗</translation> <translation id="6644283850729428850">這項政策已遭取代。</translation> <translation id="6646897916597483132">請輸入信用卡正面的四位數信用卡安全碼</translation> +<translation id="6660210980321319655">已自動回報 (<ph name="CRASH_TIME" />)</translation> <translation id="6671697161687535275">要從 Chromium 中移除表單填寫建議嗎?</translation> <translation id="6710213216561001401">返回</translation> <translation id="6711464428925977395">Proxy 伺服器發生錯誤,或是位址不正確。</translation> @@ -633,6 +635,7 @@ <translation id="8971063699422889582">伺服器憑證已過期。</translation> <translation id="8987927404178983737">月</translation> <translation id="8988760548304185580">請輸入有效期限和信用卡背面的三位數信用卡安全碼</translation> +<translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="9013589315497579992">SSL 用戶端授權憑證錯誤。</translation> <translation id="901974403500617787">這些設定會套用至整個系統,只有以下使用者可設定:<ph name="OWNER_EMAIL" />。</translation> <translation id="9020142588544155172">伺服器拒絕連線。</translation>
diff --git a/components/sync_driver/device_info_service.cc b/components/sync_driver/device_info_service.cc index 065ea0a..4f32deb 100644 --- a/components/sync_driver/device_info_service.cc +++ b/components/sync_driver/device_info_service.cc
@@ -8,7 +8,6 @@ #include <vector> #include "base/bind.h" -#include "sync/api/model_type_change_processor.h" #include "sync/api/sync_error.h" #include "sync/protocol/sync.pb.h" #include "sync/util/time.h" @@ -20,14 +19,21 @@ using syncer_v2::EntityData; using syncer_v2::EntityDataList; using syncer_v2::MetadataChangeList; +using syncer_v2::ModelTypeStore; using syncer_v2::SimpleMetadataChangeList; using sync_driver::DeviceInfo; using sync_pb::DeviceInfoSpecifics; +using Record = ModelTypeStore::Record; +using RecordList = ModelTypeStore::RecordList; +using Result = ModelTypeStore::Result; + DeviceInfoService::DeviceInfoService( - sync_driver::LocalDeviceInfoProvider* local_device_info_provider) + sync_driver::LocalDeviceInfoProvider* local_device_info_provider, + const StoreFactoryFunction& callback) : local_device_backup_time_(-1), - local_device_info_provider_(local_device_info_provider) { + local_device_info_provider_(local_device_info_provider), + weak_factory_(this) { DCHECK(local_device_info_provider); // This is not threadsafe, but presuably the provider initializes on the same @@ -39,6 +45,9 @@ local_device_info_provider->RegisterOnInitializedCallback(base::Bind( &DeviceInfoService::OnProviderInitialized, base::Unretained(this))); } + + callback.Run(base::Bind(&DeviceInfoService::OnStoreCreated, + weak_factory_.GetWeakPtr())); } DeviceInfoService::~DeviceInfoService() {} @@ -202,7 +211,49 @@ } void DeviceInfoService::OnProviderInitialized() { - // TODO(skym): crbug.com/582460: Do we need this? + has_provider_initialized_ = true; + TryReconcileLocalAndStored(); +} + +void DeviceInfoService::OnStoreCreated(Result result, + scoped_ptr<ModelTypeStore> store) { + if (result == Result::SUCCESS) { + std::swap(store_, store); + store_->ReadAllData(base::Bind(&DeviceInfoService::OnLoadAllData, + weak_factory_.GetWeakPtr())); + } else { + LOG(WARNING) << "ModelTypeStore creation failed."; + // TODO(skym, crbug.com/582460): Handle unrecoverable initialization + // failure. + } +} + +void DeviceInfoService::OnLoadAllData(Result result, + scoped_ptr<RecordList> record_list) { + if (result == Result::SUCCESS) { + for (const Record& r : *record_list.get()) { + scoped_ptr<DeviceInfoSpecifics> specifics( + make_scoped_ptr(new DeviceInfoSpecifics())); + if (specifics->ParseFromString(r.value)) { + all_data_[r.id] = std::move(specifics); + } else { + LOG(WARNING) << "Failed to deserializable specifics."; + // TODO(skym, crbug.com/582460): Handle unrecoverable initialization + // failure. + } + } + has_data_loaded_ = true; + TryReconcileLocalAndStored(); + } else { + LOG(WARNING) << "Initial load of data failed."; + // TODO(skym, crbug.com/582460): Handle unrecoverable initialization + // failure. + } +} + +void DeviceInfoService::TryReconcileLocalAndStored() { + // TODO(skym, crbug.com/582460): : Implement logic to reconcile provider and + // stored device infos. } } // namespace sync_driver_v2
diff --git a/components/sync_driver/device_info_service.h b/components/sync_driver/device_info_service.h index 6a670d5..d18d3dc 100644 --- a/components/sync_driver/device_info_service.h +++ b/components/sync_driver/device_info_service.h
@@ -13,10 +13,12 @@ #include "base/macros.h" #include "base/memory/scoped_ptr.h" +#include "base/memory/weak_ptr.h" #include "base/observer_list.h" #include "components/sync_driver/device_info_tracker.h" #include "components/sync_driver/local_device_info_provider.h" #include "sync/api/model_type_service.h" +#include "sync/api/model_type_store.h" #include "sync/internal_api/public/simple_metadata_change_list.h" namespace syncer { @@ -39,8 +41,12 @@ class DeviceInfoService : public syncer_v2::ModelTypeService, public sync_driver::DeviceInfoTracker { public: - explicit DeviceInfoService( - sync_driver::LocalDeviceInfoProvider* local_device_info_provider); + typedef base::Callback<void(syncer_v2::ModelTypeStore::InitCallback callback)> + StoreFactoryFunction; + + DeviceInfoService( + sync_driver::LocalDeviceInfoProvider* local_device_info_provider, + const StoreFactoryFunction& callback); ~DeviceInfoService() override; // ModelTypeService implementation. @@ -88,8 +94,22 @@ // Notify all registered observers. void NotifyObservers(); + // Used as callback given to LocalDeviceInfoProvider. void OnProviderInitialized(); + // Methods used as callbacks given to DataTypeStore. + void OnStoreCreated(syncer_v2::ModelTypeStore::Result result, + scoped_ptr<syncer_v2::ModelTypeStore> store); + void OnLoadAllData( + syncer_v2::ModelTypeStore::Result result, + scoped_ptr<syncer_v2::ModelTypeStore::RecordList> record_list); + + // Checks if conditions have been met to perform reconciliation between the + // locally provide device info and the stored device info data. If conditions + // are met and the sets of data differ, than we condier this a local change + // and we send it to the processor. + void TryReconcileLocalAndStored(); + // |local_device_backup_time_| accessors. int64_t local_device_backup_time() const { return local_device_backup_time_; } bool has_local_device_backup_time() const { @@ -116,8 +136,21 @@ // Registered observers, not owned. base::ObserverList<Observer, true> observers_; + // Used to listen for provider initialization. If the provider is already + // initialized during our constructor then the subscription is never used. scoped_ptr<sync_driver::LocalDeviceInfoProvider::Subscription> subscription_; + // In charge of actually persiting changes to disk, or loading previous data. + scoped_ptr<syncer_v2::ModelTypeStore> store_; + + // If |store_| has invoked |LoadAllDataCallback|. + bool has_data_loaded_ = false; + // If |local_device_info_provider_| has initialized. + bool has_provider_initialized_ = false; + + // Should always be last member. + base::WeakPtrFactory<DeviceInfoService> weak_factory_; + DISALLOW_COPY_AND_ASSIGN(DeviceInfoService); };
diff --git a/components/sync_driver/device_info_service_unittest.cc b/components/sync_driver/device_info_service_unittest.cc index 1aa553a9..8d453c8 100644 --- a/components/sync_driver/device_info_service_unittest.cc +++ b/components/sync_driver/device_info_service_unittest.cc
@@ -4,88 +4,194 @@ #include "components/sync_driver/device_info_service.h" +#include <algorithm> #include <string> +#include "base/bind.h" +#include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "components/sync_driver/local_device_info_provider_mock.h" +#include "sync/api/model_type_store.h" +#include "sync/internal_api/public/test/model_type_store_test_util.h" #include "testing/gtest/include/gtest/gtest.h" namespace sync_driver_v2 { using syncer_v2::EntityData; +using syncer_v2::ModelTypeStore; +using syncer_v2::ModelTypeStoreTestUtil; using sync_driver::DeviceInfo; using sync_driver::DeviceInfoTracker; using sync_driver::LocalDeviceInfoProviderMock; +using sync_pb::DeviceInfoSpecifics; using sync_pb::EntitySpecifics; +using Result = ModelTypeStore::Result; +using WriteBatch = ModelTypeStore::WriteBatch; + namespace { +void AssertResultIsSuccess(Result result) { + ASSERT_EQ(Result::SUCCESS, result); +} + +void AssertEqual(const DeviceInfoSpecifics& specifics, + const DeviceInfo& model) { + ASSERT_EQ(specifics.cache_guid(), model.guid()); + ASSERT_EQ(specifics.client_name(), model.client_name()); + ASSERT_EQ(specifics.device_type(), model.device_type()); + ASSERT_EQ(specifics.sync_user_agent(), model.sync_user_agent()); + ASSERT_EQ(specifics.chrome_version(), model.chrome_version()); + ASSERT_EQ(specifics.signin_scoped_device_id(), + model.signin_scoped_device_id()); +} + class DeviceInfoServiceTest : public testing::Test, public DeviceInfoTracker::Observer { protected: - ~DeviceInfoServiceTest() override { service_->RemoveObserver(this); } + ~DeviceInfoServiceTest() override { + // Some tests may never initialize the service. + if (service_) + service_->RemoveObserver(this); + + // Force all remaining (store) tasks to execute so we don't leak memory. + base::RunLoop().RunUntilIdle(); + } void OnDeviceInfoChange() override { num_device_info_changed_callbacks_++; } protected: - DeviceInfoServiceTest() : num_device_info_changed_callbacks_(0) {} + DeviceInfoServiceTest() + : num_device_info_changed_callbacks_(0), + store_(ModelTypeStoreTestUtil::CreateInMemoryStoreForTest()), + local_device_(new LocalDeviceInfoProviderMock( + "guid_1", + "client_1", + "Chromium 10k", + "Chrome 10k", + sync_pb::SyncEnums_DeviceType_TYPE_LINUX, + "device_id")) {} - DeviceInfoService* InitFully() { - local_device_.reset(new LocalDeviceInfoProviderMock( - "guid_1", "client_1", "Chromium 10k", "Chrome 10k", - sync_pb::SyncEnums_DeviceType_TYPE_LINUX, "device_id")); - service_.reset(new DeviceInfoService(local_device_.get())); + // Initialized the service based on the current local device and store. Can + // only be called once per run, as it passes |store_|. + void InitializeService() { + ASSERT_TRUE(store_); + service_.reset(new DeviceInfoService( + local_device_.get(), + base::Bind(&ModelTypeStoreTestUtil::MoveStoreToCallback, + base::Passed(&store_)))); service_->AddObserver(this); - return service_.get(); } - DeviceInfoService* InitPartially() { - local_device_.reset(new LocalDeviceInfoProviderMock()); - service_.reset(new DeviceInfoService(local_device_.get())); - service_->AddObserver(this); - return service_.get(); + // Creates the service and runs any outstanding tasks. This will typically + // cause all initialization callbacks between the sevice and store to fire. + void InitializeAndPump() { + InitializeService(); + base::RunLoop().RunUntilIdle(); } + // Allows access to the store before that will ultimately be used to + // initialize the service. + ModelTypeStore* store() { + EXPECT_TRUE(store_); + return store_.get(); + } + + // Get the number of times the service notifies observers of changes. int num_device_info_changed_callbacks() { return num_device_info_changed_callbacks_; } + + // Allows overriding the provider before the service is initialized. + void set_local_device(scoped_ptr<LocalDeviceInfoProviderMock> provider) { + ASSERT_FALSE(service_); + std::swap(local_device_, provider); + } LocalDeviceInfoProviderMock* local_device() { return local_device_.get(); } + // Allows access to the service after InitializeService() is called. + DeviceInfoService* service() { + EXPECT_TRUE(service_); + return service_.get(); + } + private: int num_device_info_changed_callbacks_; + + // Although we never use this in this class, the in memory model type store + // grabs the current task runner from a static accessor which point at this + // message loop. Must be declared/initilized before we call the synchronous + // CreateInMemoryStoreForTest. + base::MessageLoop message_loop_; + + // Temporarily holds the store before the service is initialized. + scoped_ptr<ModelTypeStore> store_; + scoped_ptr<LocalDeviceInfoProviderMock> local_device_; + + // Not initialized immediately (upon test's constructor). This allows each + // test case to modify the dependencies the service will be constructed with. scoped_ptr<DeviceInfoService> service_; }; -TEST_F(DeviceInfoServiceTest, StartSyncEmptyInitialData) { - DeviceInfoService* service = InitFully(); - EXPECT_FALSE(service->IsSyncing()); +TEST_F(DeviceInfoServiceTest, EmptyDataReconciliation) { + InitializeService(); + ASSERT_EQ(0u, service()->GetAllDeviceInfo().size()); + base::RunLoop().RunUntilIdle(); + // TODO(skym): crbug.com/582460: Verify reconciliation has happened. } -TEST_F(DeviceInfoServiceTest, DelayedProviderInitialization) { - DeviceInfoService* service = InitPartially(); +TEST_F(DeviceInfoServiceTest, LocalProviderSubscription) { + set_local_device(make_scoped_ptr(new LocalDeviceInfoProviderMock())); + InitializeAndPump(); + ASSERT_EQ(0u, service()->GetAllDeviceInfo().size()); local_device()->Initialize(make_scoped_ptr( new DeviceInfo("guid_1", "client_1", "Chromium 10k", "Chrome 10k", sync_pb::SyncEnums_DeviceType_TYPE_LINUX, "device_id"))); - EXPECT_FALSE(service->IsSyncing()); + // TODO(skym): crbug.com/582460: Verify reconciliation has happened. +} + +TEST_F(DeviceInfoServiceTest, NonEmptyStoreLoad) { + // Override the provider so that reconciliation never happens. + set_local_device(make_scoped_ptr(new LocalDeviceInfoProviderMock())); + + scoped_ptr<WriteBatch> batch = store()->CreateWriteBatch(); + DeviceInfoSpecifics specifics; + specifics.set_cache_guid("a"); + specifics.set_client_name("b"); + specifics.set_device_type(sync_pb::SyncEnums_DeviceType_TYPE_LINUX); + specifics.set_sync_user_agent("d"); + specifics.set_chrome_version("e"); + specifics.set_backup_timestamp(6); + store()->WriteData(batch.get(), "tag", specifics.SerializeAsString()); + store()->CommitWriteBatch(std::move(batch), + base::Bind(&AssertResultIsSuccess)); + + InitializeAndPump(); + + ScopedVector<DeviceInfo> all_device_info(service()->GetAllDeviceInfo()); + ASSERT_EQ(1u, all_device_info.size()); + AssertEqual(specifics, *all_device_info[0]); + AssertEqual(specifics, *service()->GetDeviceInfo("tag").get()); } TEST_F(DeviceInfoServiceTest, GetClientTagNormal) { - DeviceInfoService* service = InitFully(); + InitializeAndPump(); const std::string guid = "abc"; EntitySpecifics entity_specifics; entity_specifics.mutable_device_info()->set_cache_guid(guid); EntityData entity_data; entity_data.specifics = entity_specifics; - EXPECT_EQ(guid, service->GetClientTag(entity_data)); + EXPECT_EQ(guid, service()->GetClientTag(entity_data)); } TEST_F(DeviceInfoServiceTest, GetClientTagEmpty) { - DeviceInfoService* service = InitFully(); + InitializeAndPump(); EntitySpecifics entity_specifics; entity_specifics.mutable_device_info(); EntityData entity_data; entity_data.specifics = entity_specifics; - EXPECT_EQ("", service->GetClientTag(entity_data)); + EXPECT_EQ("", service()->GetClientTag(entity_data)); } } // namespace
diff --git a/components/sync_sessions.gypi b/components/sync_sessions.gypi index c5a22b5..b56fb0f 100644 --- a/components/sync_sessions.gypi +++ b/components/sync_sessions.gypi
@@ -60,6 +60,8 @@ 'sync_sessions/synced_window_delegates_getter.h', 'sync_sessions/sync_sessions_client.cc', 'sync_sessions/sync_sessions_client.h', + 'sync_sessions/sync_sessions_metrics.cc', + 'sync_sessions/sync_sessions_metrics.h', 'sync_sessions/tab_node_pool.cc', 'sync_sessions/tab_node_pool.h', ],
diff --git a/components/sync_sessions/BUILD.gn b/components/sync_sessions/BUILD.gn index 669b7fb..c66737c4 100644 --- a/components/sync_sessions/BUILD.gn +++ b/components/sync_sessions/BUILD.gn
@@ -34,6 +34,8 @@ "sessions_sync_manager.h", "sync_sessions_client.cc", "sync_sessions_client.h", + "sync_sessions_metrics.cc", + "sync_sessions_metrics.h", "synced_session.cc", "synced_session.h", "synced_session_tracker.cc", @@ -90,6 +92,7 @@ "revisit/sessions_page_revisit_observer_unittest.cc", "revisit/typed_url_page_revisit_task_unittest.cc", "session_data_type_controller_unittest.cc", + "sync_sessions_metrics_unittest.cc", "synced_session_tracker_unittest.cc", "tab_node_pool_unittest.cc", ]
diff --git a/components/sync_sessions/sync_sessions_metrics.cc b/components/sync_sessions/sync_sessions_metrics.cc new file mode 100644 index 0000000..fb03797 --- /dev/null +++ b/components/sync_sessions/sync_sessions_metrics.cc
@@ -0,0 +1,63 @@ +// Copyright 2016 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/sync_sessions/sync_sessions_metrics.h" + +#include <algorithm> +#include <utility> + +#include "base/logging.h" +#include "base/metrics/histogram_macros.h" +#include "base/metrics/user_metrics.h" +#include "base/time/time.h" +#include "components/sessions/core/session_types.h" +#include "components/sync_sessions/sessions_sync_manager.h" +#include "components/sync_sessions/synced_session.h" + +namespace sync_sessions { + +// static +void SyncSessionsMetrics::RecordYoungestForeignTabAgeOnNTP( + browser_sync::SessionsSyncManager* sessions_sync_manager) { + if (sessions_sync_manager != NULL) { + std::vector<const sync_driver::SyncedSession*> foreign_sessions; + sessions_sync_manager->GetAllForeignSessions(&foreign_sessions); + base::Time best(MaxTabTimestamp(foreign_sessions)); + base::Time now(base::Time::Now()); + // Don't emit metrics if the foreign tab is timestamped in the future. While + // the timestamp is set on a different machine, and we may lose some + // fraction of metrics to clock skew, we don't want the potential to have + // bad machines with clocks many hours off causing lots of seemingly 0 + // second entries. + if (base::Time::UnixEpoch() < best && best <= now) { + UMA_HISTOGRAM_CUSTOM_COUNTS( + "Sync.YoungestForeignTabAgeOnNTP", (now - best).InSeconds(), 1, + base::TimeDelta::FromDays(14).InSeconds(), 100); + } + } +} + +// static +base::Time SyncSessionsMetrics::MaxTabTimestamp( + const std::vector<const sync_driver::SyncedSession*>& sessions) { + // While Sessions are ordered by recency, windows and tabs are not. Because + // the timestamp of sessions are updated when windows/tabs are removed, we + // only need to search until all the remaining sessions are older than the + // most recent tab we've found so far. + base::Time best(base::Time::UnixEpoch()); + for (const sync_driver::SyncedSession* session : sessions) { + if (session->modified_time < best) { + break; + } + for (const std::pair<const SessionID::id_type, sessions::SessionWindow*>& + key_value : session->windows) { + for (const sessions::SessionTab* tab : key_value.second->tabs) { + best = std::max(best, tab->timestamp); + } + } + } + return best; +} + +} // namespace sync_sessions
diff --git a/components/sync_sessions/sync_sessions_metrics.h b/components/sync_sessions/sync_sessions_metrics.h new file mode 100644 index 0000000..6d9b63a --- /dev/null +++ b/components/sync_sessions/sync_sessions_metrics.h
@@ -0,0 +1,47 @@ +// Copyright 2016 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_SYNC_SESSIONS_SYNC_SESSIONS_METRICS_H_ +#define COMPONENTS_SYNC_SESSIONS_SYNC_SESSIONS_METRICS_H_ + +#include <vector> + +namespace base { +class Time; +} // namespace base + +namespace browser_sync { +class SessionsSyncManager; +} // namespace browser_sync + +namespace sync_driver { +struct SyncedSession; +} // namespace sync_driver + +namespace sync_sessions { + +class SyncSessionsMetrics { + public: + // Records via an UMA histogram the age of the youngest foreign tab the given + // manager is aware of. No attempt is made to aquire a more recent version of + // world. If anything goes wrong, such as the manager being null, no foreign + // session present, or a foreign tab with a timestamp in the future then no + // metric is emitted. + static void RecordYoungestForeignTabAgeOnNTP( + browser_sync::SessionsSyncManager* sessions_sync_manager); + + private: + friend class SyncSessionsMetricsTest; + + // Returns the highest timestamp for any tab in the given sessions. Note that + // sessions should be sorted by timestamp, and session timestamps should + // always be greater or equal to children window/tab timestamps. No navigation + // timestamps are checked. + static base::Time MaxTabTimestamp( + const std::vector<const sync_driver::SyncedSession*>& sessions); +}; + +} // namespace sync_sessions + +#endif // COMPONENTS_SYNC_SESSIONS_SYNC_SESSIONS_METRICS_H_
diff --git a/components/sync_sessions/sync_sessions_metrics_unittest.cc b/components/sync_sessions/sync_sessions_metrics_unittest.cc new file mode 100644 index 0000000..3b3cc71 --- /dev/null +++ b/components/sync_sessions/sync_sessions_metrics_unittest.cc
@@ -0,0 +1,205 @@ +// Copyright 2016 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/sync_sessions/sync_sessions_metrics.h" + +#include <algorithm> + +#include "base/test/histogram_tester.h" +#include "base/time/time.h" +#include "components/sessions/core/session_types.h" +#include "components/sync_sessions/fake_sync_sessions_client.h" +#include "components/sync_sessions/sessions_sync_manager.h" +#include "components/sync_sessions/synced_session.h" +#include "testing/gtest/include/gtest/gtest.h" + +using sync_driver::SyncedSession; +using sessions::SessionWindow; +using sessions::SessionTab; +using base::Time; +using base::TimeDelta; + +namespace sync_sessions { + +namespace { + +class FakeSessionsSyncManager : public browser_sync::SessionsSyncManager { + public: + FakeSessionsSyncManager(SyncSessionsClient* sessions_client, + std::vector<scoped_ptr<SyncedSession>>* sessions) + : browser_sync::SessionsSyncManager( + sessions_client, + nullptr, + nullptr, + scoped_ptr<browser_sync::LocalSessionEventRouter>(), + base::Closure(), + base::Closure()), + sessions_(sessions) {} + + bool GetAllForeignSessions( + std::vector<const sync_driver::SyncedSession*>* sessions) override { + for (auto& session : *sessions_) { + sessions->push_back(session.get()); + } + return true; + } + + private: + std::vector<scoped_ptr<SyncedSession>>* sessions_; +}; + +Time SecondsFromEpoch(int seconds) { + return Time::UnixEpoch() + TimeDelta::FromSeconds(seconds); +} + +} // namespace + +class SyncSessionsMetricsTest : public ::testing::Test { + protected: + SyncSessionsMetricsTest() : fake_manager_(&fake_client_, &sessions_) {} + + // Sets the tab/window/session timestamps and creates anything needed. The new + // calls in here are safe because the session/window objects are going to + // delete all their children when their destructors are invoked. + void PushTab(size_t tabIndex, int windowIndex, Time timestamp) { + // First add sessions/windows as necessary. + while (tabIndex >= sessions_.size()) { + sessions_.push_back(make_scoped_ptr(new SyncedSession())); + } + if (sessions_[tabIndex]->windows.find(windowIndex) == + sessions_[tabIndex]->windows.end()) { + sessions_[tabIndex]->windows[windowIndex] = new SessionWindow(); + } + + sessions_[tabIndex]->modified_time = + std::max(sessions_[tabIndex]->modified_time, timestamp); + sessions_[tabIndex]->windows[windowIndex]->timestamp = std::max( + sessions_[tabIndex]->windows[windowIndex]->timestamp, timestamp); + sessions_[tabIndex]->windows[windowIndex]->tabs.push_back(new SessionTab()); + sessions_[tabIndex]->windows[windowIndex]->tabs.back()->timestamp = + timestamp; + } + + // Removes the last tab at the given indexes. The idexes provided should be + // valid for existing data, this method does not check their validity. Windows + // are not cleaned up/removed if they're left with 0 tabs. + void PopTab(size_t tabIndex, int windowIndex, Time timestamp) { + sessions_[tabIndex]->modified_time = + std::max(sessions_[tabIndex]->modified_time, timestamp); + sessions_[tabIndex]->windows[windowIndex]->timestamp = std::max( + sessions_[tabIndex]->windows[windowIndex]->timestamp, timestamp); + delete sessions_[tabIndex]->windows[windowIndex]->tabs.back(); + sessions_[tabIndex]->windows[windowIndex]->tabs.pop_back(); + } + + // Runs MaxTabTimestamp on the current sessions data. + Time MaxTabTimestamp() { + std::vector<const SyncedSession*> typed_sessions; + for (auto& session : sessions_) { + typed_sessions.push_back(session.get()); + } + return SyncSessionsMetrics::MaxTabTimestamp(typed_sessions); + } + + browser_sync::SessionsSyncManager* get_sessions_sync_manager() { + return &fake_manager_; + } + + private: + std::vector<scoped_ptr<SyncedSession>> sessions_; + FakeSyncSessionsClient fake_client_; + FakeSessionsSyncManager fake_manager_; +}; + +TEST_F(SyncSessionsMetricsTest, NoWindows) { + ASSERT_EQ(Time::UnixEpoch(), MaxTabTimestamp()); +} + +TEST_F(SyncSessionsMetricsTest, NoTabs) { + PushTab(0, 0, SecondsFromEpoch(1)); + PopTab(0, 0, SecondsFromEpoch(2)); + ASSERT_EQ(Time::UnixEpoch(), MaxTabTimestamp()); +} + +TEST_F(SyncSessionsMetricsTest, OneTab) { + PushTab(0, 0, SecondsFromEpoch(1)); + ASSERT_EQ(SecondsFromEpoch(1), MaxTabTimestamp()); +} + +TEST_F(SyncSessionsMetricsTest, MultipleTabs) { + PushTab(0, 0, SecondsFromEpoch(1)); + PushTab(0, 0, SecondsFromEpoch(3)); + PushTab(0, 0, SecondsFromEpoch(2)); + ASSERT_EQ(SecondsFromEpoch(3), MaxTabTimestamp()); +} + +TEST_F(SyncSessionsMetricsTest, MultipleWindows) { + PushTab(0, 1, SecondsFromEpoch(1)); + PushTab(0, 2, SecondsFromEpoch(3)); + PushTab(0, 3, SecondsFromEpoch(2)); + ASSERT_EQ(SecondsFromEpoch(3), MaxTabTimestamp()); +} + +TEST_F(SyncSessionsMetricsTest, OrderedSessions) { + PushTab(0, 0, SecondsFromEpoch(3)); + PushTab(1, 0, SecondsFromEpoch(2)); + PushTab(2, 0, SecondsFromEpoch(1)); + ASSERT_EQ(SecondsFromEpoch(3), MaxTabTimestamp()); +} + +TEST_F(SyncSessionsMetricsTest, NonOrderedSessions) { + // While 2 is not the max, it should give up when it sees the tab at index 1. + // This is breaking the assumptions of the logic we're testing, and thus we + // expect to return an incorrect ansewr. What this test is really verifying + // is that the logic that finds the most recent timestamp is is exiting early + // instead of inefficiently examining all foreign tabs. + PushTab(0, 0, SecondsFromEpoch(2)); + PushTab(1, 0, SecondsFromEpoch(1)); + PushTab(2, 0, SecondsFromEpoch(3)); + ASSERT_EQ(SecondsFromEpoch(2), MaxTabTimestamp()); +} + +TEST_F(SyncSessionsMetricsTest, OrderedSessionsWithDeletedTab) { + // Tab/window with index 0 is going to be the most recent, but the recent tab + // was removed. The algorithm should continue on and find the tab in index 1. + PushTab(0, 0, SecondsFromEpoch(1)); + PushTab(0, 0, SecondsFromEpoch(4)); + PopTab(0, 0, SecondsFromEpoch(5)); + PushTab(1, 0, SecondsFromEpoch(3)); + PushTab(2, 0, SecondsFromEpoch(2)); + ASSERT_EQ(SecondsFromEpoch(3), MaxTabTimestamp()); +} + +TEST_F(SyncSessionsMetricsTest, SkipEmitNoManager) { + base::HistogramTester histogram_tester; + PushTab(0, 0, Time::Now() - TimeDelta::FromHours(1)); + SyncSessionsMetrics::RecordYoungestForeignTabAgeOnNTP(nullptr); + histogram_tester.ExpectTotalCount("Sync.YoungestForeignTabAgeOnNTP", 0); +} + +TEST_F(SyncSessionsMetricsTest, SkipEmitNoSessions) { + base::HistogramTester histogram_tester; + SyncSessionsMetrics::RecordYoungestForeignTabAgeOnNTP( + get_sessions_sync_manager()); + histogram_tester.ExpectTotalCount("Sync.YoungestForeignTabAgeOnNTP", 0); +} + +TEST_F(SyncSessionsMetricsTest, SkipEmitInvalidTimestamp) { + base::HistogramTester histogram_tester; + // Foreign session is far in the future, it should be ignored. + PushTab(0, 0, Time::Now() + TimeDelta::FromHours(1)); + SyncSessionsMetrics::RecordYoungestForeignTabAgeOnNTP( + get_sessions_sync_manager()); + histogram_tester.ExpectTotalCount("Sync.YoungestForeignTabAgeOnNTP", 0); +} + +TEST_F(SyncSessionsMetricsTest, EmitNormalCase) { + base::HistogramTester histogram_tester; + PushTab(0, 0, Time::Now() - TimeDelta::FromHours(1)); + SyncSessionsMetrics::RecordYoungestForeignTabAgeOnNTP( + get_sessions_sync_manager()); + histogram_tester.ExpectTotalCount("Sync.YoungestForeignTabAgeOnNTP", 1); +} + +} // namespace sync_sessions
diff --git a/components/test_runner/event_sender.cc b/components/test_runner/event_sender.cc index 838b7720..4a9b09b 100644 --- a/components/test_runner/event_sender.cc +++ b/components/test_runner/event_sender.cc
@@ -2103,7 +2103,7 @@ } void EventSender::SendCurrentTouchEvent(WebInputEvent::Type type, - bool causesScrollingIfUncanceled) { + bool movedBeyondSlopRegion) { DCHECK_GT(static_cast<unsigned>(WebTouchEvent::touchesLengthCap), touch_points_.size()); if (force_layout_on_events_) @@ -2114,7 +2114,7 @@ touch_event.modifiers = touch_modifiers_; touch_event.cancelable = touch_cancelable_; touch_event.timeStampSeconds = GetCurrentEventTimeSec(); - touch_event.causesScrollingIfUncanceled = causesScrollingIfUncanceled; + touch_event.movedBeyondSlopRegion = movedBeyondSlopRegion; touch_event.touchesLength = touch_points_.size(); for (size_t i = 0; i < touch_points_.size(); ++i) touch_event.touches[i] = touch_points_[i];
diff --git a/components/test_runner/layout_dump.cc b/components/test_runner/layout_dump.cc index 9fc7f18..ac5b5d4 100644 --- a/components/test_runner/layout_dump.cc +++ b/components/test_runner/layout_dump.cc
@@ -11,11 +11,13 @@ #include "third_party/WebKit/public/web/WebDocument.h" #include "third_party/WebKit/public/web/WebElement.h" #include "third_party/WebKit/public/web/WebFrame.h" +#include "third_party/WebKit/public/web/WebFrameContentDumper.h" #include "third_party/WebKit/public/web/WebLocalFrame.h" namespace test_runner { using blink::WebFrame; +using blink::WebFrameContentDumper; using blink::WebLocalFrame; using blink::WebSize; @@ -59,8 +61,9 @@ case LayoutDumpMode::DUMP_AS_TEXT: result = DumpFrameHeaderIfNeeded(frame); if (flags.dump_as_printed && frame->document().isHTMLDocument()) { - result += - frame->layoutTreeAsText(WebFrame::LayoutAsTextPrinting).utf8(); + result += WebFrameContentDumper::dumpLayoutTreeAsText( + frame, WebFrameContentDumper::LayoutAsTextPrinting) + .utf8(); } else { result += frame->document().contentAsTextForTesting().utf8(); } @@ -69,20 +72,23 @@ case LayoutDumpMode::DUMP_AS_MARKUP: DCHECK(!flags.dump_as_printed); result = DumpFrameHeaderIfNeeded(frame); - result += frame->contentAsMarkup().utf8(); + result += WebFrameContentDumper::dumpAsMarkup(frame).utf8(); result += "\n"; break; case LayoutDumpMode::DUMP_SCROLL_POSITIONS: if (frame->parent() == nullptr) { - WebFrame::LayoutAsTextControls layout_text_behavior = - WebFrame::LayoutAsTextNormal; + WebFrameContentDumper::LayoutAsTextControls layout_text_behavior = + WebFrameContentDumper::LayoutAsTextNormal; if (flags.dump_as_printed) - layout_text_behavior |= WebFrame::LayoutAsTextPrinting; + layout_text_behavior |= WebFrameContentDumper::LayoutAsTextPrinting; if (flags.debug_render_tree) - layout_text_behavior |= WebFrame::LayoutAsTextDebug; + layout_text_behavior |= WebFrameContentDumper::LayoutAsTextDebug; if (flags.dump_line_box_trees) - layout_text_behavior |= WebFrame::LayoutAsTextWithLineTrees; - result = frame->layoutTreeAsText(layout_text_behavior).utf8(); + layout_text_behavior |= + WebFrameContentDumper::LayoutAsTextWithLineTrees; + result = WebFrameContentDumper::dumpLayoutTreeAsText( + frame, layout_text_behavior) + .utf8(); } result += DumpFrameScrollPosition(frame); break;
diff --git a/components/test_runner/test_runner.cc b/components/test_runner/test_runner.cc index a2c8ac1..f09284ca 100644 --- a/components/test_runner/test_runner.cc +++ b/components/test_runner/test_runner.cc
@@ -296,6 +296,7 @@ void SetPOSIXLocale(const std::string& locale); void SetMIDIAccessorResult(bool result); void SimulateWebNotificationClick(const std::string& title, int action_index); + void SimulateWebNotificationClose(const std::string& title, bool by_user); void AddMockSpeechRecognitionResult(const std::string& transcript, double confidence); void SetMockSpeechRecognitionError(const std::string& error, @@ -572,6 +573,8 @@ &TestRunnerBindings::SetMIDIAccessorResult) .SetMethod("simulateWebNotificationClick", &TestRunnerBindings::SimulateWebNotificationClick) + .SetMethod("simulateWebNotificationClose", + &TestRunnerBindings::SimulateWebNotificationClose) .SetMethod("addMockSpeechRecognitionResult", &TestRunnerBindings::AddMockSpeechRecognitionResult) .SetMethod("setMockSpeechRecognitionError", @@ -1420,6 +1423,13 @@ runner_->SimulateWebNotificationClick(title, action_index); } +void TestRunnerBindings::SimulateWebNotificationClose(const std::string& title, + bool by_user) { + if (!runner_) + return; + runner_->SimulateWebNotificationClose(title, by_user); +} + void TestRunnerBindings::AddMockSpeechRecognitionResult( const std::string& transcript, double confidence) { if (runner_) @@ -2988,6 +2998,11 @@ delegate_->SimulateWebNotificationClick(title, action_index); } +void TestRunner::SimulateWebNotificationClose(const std::string& title, + bool by_user) { + delegate_->SimulateWebNotificationClose(title, by_user); +} + void TestRunner::AddMockSpeechRecognitionResult(const std::string& transcript, double confidence) { proxy_->GetSpeechRecognizerMock()->AddMockResult(
diff --git a/components/test_runner/test_runner.h b/components/test_runner/test_runner.h index a7add70..d9b08a1 100644 --- a/components/test_runner/test_runner.h +++ b/components/test_runner/test_runner.h
@@ -590,6 +590,9 @@ // Simulates a click on a Web Notification. void SimulateWebNotificationClick(const std::string& title, int action_index); + // Simulates closing a Web Notification. + void SimulateWebNotificationClose(const std::string& title, bool by_user); + // Speech recognition related functions. void AddMockSpeechRecognitionResult(const std::string& transcript, double confidence);
diff --git a/components/test_runner/web_test_delegate.h b/components/test_runner/web_test_delegate.h index d5d67e4..9aa5290 100644 --- a/components/test_runner/web_test_delegate.h +++ b/components/test_runner/web_test_delegate.h
@@ -157,6 +157,8 @@ // Controls Web Notifications. virtual void SimulateWebNotificationClick(const std::string& title, int action_index) = 0; + virtual void SimulateWebNotificationClose(const std::string& title, + bool by_user) = 0; // Controls the device scale factor of the main WebView for hidpi tests. virtual void SetDeviceScaleFactor(float factor) = 0;
diff --git a/components/test_runner/web_test_proxy.cc b/components/test_runner/web_test_proxy.cc index 2de04501..3a479af 100644 --- a/components/test_runner/web_test_proxy.cc +++ b/components/test_runner/web_test_proxy.cc
@@ -719,6 +719,9 @@ case blink::WebAXEventChildrenChanged: event_name = "ChildrenChanged"; break; + case blink::WebAXEventClicked: + event_name = "Clicked"; + break; case blink::WebAXEventDocumentSelectionChanged: event_name = "DocumentSelectionChanged"; break;
diff --git a/components/toolbar.gypi b/components/toolbar.gypi index e09b5f29..e15ebcae4 100644 --- a/components/toolbar.gypi +++ b/components/toolbar.gypi
@@ -13,6 +13,7 @@ '../net/net.gyp:net', '../ui/base/ui_base.gyp:ui_base', '../ui/gfx/gfx.gyp:gfx', + '../ui/gfx/gfx.gyp:gfx_vector_icons', '../url/url.gyp:url_lib', 'components_resources.gyp:components_resources', 'components_strings.gyp:components_strings', @@ -38,9 +39,6 @@ 'target_name': 'toolbar_test_support', 'type': 'static_library', 'dependencies': [ - '../base/base.gyp:base', - '../ui/gfx/gfx.gyp:gfx_vector_icons', - 'components_resources.gyp:components_resources', 'toolbar', ], 'include_dirs': [
diff --git a/components/update_client/component_patcher_operation.h b/components/update_client/component_patcher_operation.h index 1cb09e3..43e892c 100644 --- a/components/update_client/component_patcher_operation.h +++ b/components/update_client/component_patcher_operation.h
@@ -8,7 +8,6 @@ #include <string> #include "base/callback.h" -#include "base/compiler_specific.h" #include "base/files/file_path.h" #include "base/macros.h" #include "base/memory/ref_counted.h"
diff --git a/components/update_client/component_patcher_unittest.cc b/components/update_client/component_patcher_unittest.cc index c398abc..d7ce117 100644 --- a/components/update_client/component_patcher_unittest.cc +++ b/components/update_client/component_patcher_unittest.cc
@@ -5,7 +5,6 @@ #include "base/base_paths.h" #include "base/bind.h" #include "base/bind_helpers.h" -#include "base/compiler_specific.h" #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h"
diff --git a/components/update_client/request_sender.h b/components/update_client/request_sender.h index 7b9414354..b6ec23b7 100644 --- a/components/update_client/request_sender.h +++ b/components/update_client/request_sender.h
@@ -9,7 +9,6 @@ #include <vector> #include "base/callback.h" -#include "base/compiler_specific.h" #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h"
diff --git a/components/update_client/request_sender_unittest.cc b/components/update_client/request_sender_unittest.cc index 73fde39..527eb26 100644 --- a/components/update_client/request_sender_unittest.cc +++ b/components/update_client/request_sender_unittest.cc
@@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "base/compiler_specific.h" #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h"
diff --git a/components/update_client/test_installer.h b/components/update_client/test_installer.h index 44a6f28..b6ef182 100644 --- a/components/update_client/test_installer.h +++ b/components/update_client/test_installer.h
@@ -7,7 +7,6 @@ #include <string> -#include "base/compiler_specific.h" #include "base/files/file_path.h" #include "components/update_client/update_client.h"
diff --git a/components/update_client/update_checker.cc b/components/update_client/update_checker.cc index 56de778..16a4a95 100644 --- a/components/update_client/update_checker.cc +++ b/components/update_client/update_checker.cc
@@ -11,7 +11,6 @@ #include "base/bind.h" #include "base/bind_helpers.h" -#include "base/compiler_specific.h" #include "base/location.h" #include "base/logging.h" #include "base/macros.h"
diff --git a/components/update_client/update_checker_unittest.cc b/components/update_client/update_checker_unittest.cc index 727c0d01..0a799c8 100644 --- a/components/update_client/update_checker_unittest.cc +++ b/components/update_client/update_checker_unittest.cc
@@ -4,7 +4,6 @@ #include "base/bind.h" #include "base/bind_helpers.h" -#include "base/compiler_specific.h" #include "base/files/file_util.h" #include "base/macros.h" #include "base/memory/ref_counted.h"
diff --git a/components/update_client/update_client.cc b/components/update_client/update_client.cc index 9f6e9559..ece7cedc 100644 --- a/components/update_client/update_client.cc +++ b/components/update_client/update_client.cc
@@ -13,7 +13,6 @@ #include "base/bind.h" #include "base/bind_helpers.h" #include "base/callback.h" -#include "base/compiler_specific.h" #include "base/location.h" #include "base/logging.h" #include "base/macros.h"
diff --git a/components/update_client/update_query_params.cc b/components/update_client/update_query_params.cc index f2d298d..1cd2073 100644 --- a/components/update_client/update_query_params.cc +++ b/components/update_client/update_query_params.cc
@@ -4,7 +4,6 @@ #include "components/update_client/update_query_params.h" -#include "base/compiler_specific.h" #include "base/logging.h" #include "base/strings/stringprintf.h" #include "base/win/windows_version.h"
diff --git a/components/update_client/update_response.h b/components/update_client/update_response.h index 003474f..8341d28 100644 --- a/components/update_client/update_response.h +++ b/components/update_client/update_response.h
@@ -14,7 +14,7 @@ namespace update_client { // Parses responses for the update protocol version 3. -// (http://code.google.com/p/omaha/wiki/ServerProtocol) +// (https://github.com/google/omaha/blob/wiki/ServerProtocolV3.md) // // An update response looks like this: //
diff --git a/components/web_cache/browser/web_cache_manager.cc b/components/web_cache/browser/web_cache_manager.cc index 4583656..c325a2fe 100644 --- a/components/web_cache/browser/web_cache_manager.cc +++ b/components/web_cache/browser/web_cache_manager.cc
@@ -307,19 +307,18 @@ content::RenderProcessHost::FromID(allocation->first); if (host) { // This is the capacity this renderer has been allocated. - size_t capacity = allocation->second; + uint32_t capacity = allocation->second; // We don't reserve any space for dead objects in the cache. Instead, we // prefer to keep live objects around. There is probably some performance // tuning to be done here. - size_t min_dead_capacity = 0; + uint32_t min_dead_capacity = 0; // We allow the dead objects to consume up to half of the cache capacity. - size_t max_dead_capacity = capacity / 2; - if (base::SysInfo::IsLowEndDevice()) { - max_dead_capacity = std::min(static_cast<size_t>(512 * 1024), - max_dead_capacity); - } + uint32_t max_dead_capacity = capacity / 2; + if (base::SysInfo::IsLowEndDevice()) + max_dead_capacity = std::min(512 * 1024u, max_dead_capacity); + host->Send(new WebCacheMsg_SetCacheCapacities(min_dead_capacity, max_dead_capacity, capacity));
diff --git a/components/web_cache/common/web_cache_messages.h b/components/web_cache/common/web_cache_messages.h index 5ff9f25..58f9c70 100644 --- a/components/web_cache/common/web_cache_messages.h +++ b/components/web_cache/common/web_cache_messages.h
@@ -17,9 +17,9 @@ // Tells the renderer to set its maximum cache size to the supplied value. IPC_MESSAGE_CONTROL3(WebCacheMsg_SetCacheCapacities, - size_t /* min_dead_capacity */, - size_t /* max_dead_capacity */, - size_t /* capacity */) + uint32_t /* min_dead_capacity */, + uint32_t /* max_dead_capacity */, + uint32_t /* capacity */) // Tells the renderer to clear the cache. IPC_MESSAGE_CONTROL1(WebCacheMsg_ClearCache,
diff --git a/components/web_cache/renderer/web_cache_render_process_observer.cc b/components/web_cache/renderer/web_cache_render_process_observer.cc index a273817..a944ba1c 100644 --- a/components/web_cache/renderer/web_cache_render_process_observer.cc +++ b/components/web_cache/renderer/web_cache_render_process_observer.cc
@@ -60,9 +60,9 @@ } void WebCacheRenderProcessObserver::OnSetCacheCapacities( - size_t min_dead_capacity, - size_t max_dead_capacity, - size_t capacity) { + uint32_t min_dead_capacity, + uint32_t max_dead_capacity, + uint32_t capacity) { if (!webkit_initialized_) { pending_cache_min_dead_capacity_ = min_dead_capacity; pending_cache_max_dead_capacity_ = max_dead_capacity;
diff --git a/components/web_cache/renderer/web_cache_render_process_observer.h b/components/web_cache/renderer/web_cache_render_process_observer.h index 6ae6916..b683fa7 100644 --- a/components/web_cache/renderer/web_cache_render_process_observer.h +++ b/components/web_cache/renderer/web_cache_render_process_observer.h
@@ -6,6 +6,7 @@ #define COMPONENTS_WEB_CACHE_RENDERER_WEB_CACHE_RENDER_PROCESS_OBSERVER_H_ #include <stddef.h> +#include <stdint.h> #include "base/compiler_specific.h" #include "base/macros.h" @@ -30,9 +31,9 @@ void OnRenderProcessShutdown() override; // Message handlers. - void OnSetCacheCapacities(size_t min_dead_capacity, - size_t max_dead_capacity, - size_t capacity); + void OnSetCacheCapacities(uint32_t min_dead_capacity, + uint32_t max_dead_capacity, + uint32_t capacity); // If |on_navigation| is true, the clearing is delayed until the next // navigation event. void OnClearCache(bool on_navigation);
diff --git a/components/web_view/frame_apptest.cc b/components/web_view/frame_apptest.cc index cd79680..5dec819 100644 --- a/components/web_view/frame_apptest.cc +++ b/components/web_view/frame_apptest.cc
@@ -354,8 +354,8 @@ // mojo::ShellClient implementation. bool AcceptConnection(mojo::Connection* connection) override { - connection->AddService<mus::mojom::WindowTreeClient>(this); - connection->AddService<mojom::FrameClient>(this); + connection->AddInterface<mus::mojom::WindowTreeClient>(this); + connection->AddInterface<mojom::FrameClient>(this); return true; }
diff --git a/components/web_view/frame_connection.cc b/components/web_view/frame_connection.cc index af40457..7ecd3b8 100644 --- a/components/web_view/frame_connection.cc +++ b/components/web_view/frame_connection.cc
@@ -120,14 +120,14 @@ mojo::Shell::ConnectParams params(std::move(request)); params.set_filter(std::move(filter)); connection_ = shell->Connect(¶ms); - connection_->ConnectToService(&frame_client_); + connection_->GetInterface(&frame_client_); connection_->AddRemoteIDCallback(on_got_id_callback); } mus::mojom::WindowTreeClientPtr FrameConnection::GetWindowTreeClient() { DCHECK(connection_); mus::mojom::WindowTreeClientPtr window_tree_client; - connection_->ConnectToService(&window_tree_client); + connection_->GetInterface(&window_tree_client); return window_tree_client; }
diff --git a/components/web_view/test_runner/BUILD.gn b/components/web_view/test_runner/BUILD.gn index b2ddb84..6acfbe6a 100644 --- a/components/web_view/test_runner/BUILD.gn +++ b/components/web_view/test_runner/BUILD.gn
@@ -18,6 +18,7 @@ deps = [ "//base", + "//base:i18n", "//build/config/sanitizers:deps", "//mojo/common", "//mojo/environment:chromium",
diff --git a/components/web_view/test_runner/launcher.cc b/components/web_view/test_runner/launcher.cc index f54b763..99cc584 100644 --- a/components/web_view/test_runner/launcher.cc +++ b/components/web_view/test_runner/launcher.cc
@@ -5,6 +5,7 @@ #include "components/web_view/test_runner/launcher.h" #include "base/bind.h" +#include "base/i18n/icu_util.h" #include "base/message_loop/message_loop.h" #include "base/path_service.h" #include "mojo/shell/standalone/context.h" @@ -20,6 +21,7 @@ base::MessageLoop message_loop; base::FilePath shell_dir; PathService::Get(base::DIR_MODULE, &shell_dir); + CHECK(base::i18n::InitializeICU()); shell_context.Init(shell_dir); message_loop.PostTask(FROM_HERE,
diff --git a/components/web_view/test_runner/test_runner_application_delegate.cc b/components/web_view/test_runner/test_runner_application_delegate.cc index e470cc38..e2d31cd 100644 --- a/components/web_view/test_runner/test_runner_application_delegate.cc +++ b/components/web_view/test_runner/test_runner_application_delegate.cc
@@ -75,7 +75,7 @@ bool TestRunnerApplicationDelegate::AcceptConnection( mojo::Connection* connection) { - connection->AddService<web_view::LayoutTestRunner>(this); + connection->AddInterface<web_view::LayoutTestRunner>(this); return true; }
diff --git a/components/web_view/web_view_application_delegate.cc b/components/web_view/web_view_application_delegate.cc index 1c9c5c76..b1487bf 100644 --- a/components/web_view/web_view_application_delegate.cc +++ b/components/web_view/web_view_application_delegate.cc
@@ -23,7 +23,7 @@ bool WebViewApplicationDelegate::AcceptConnection( mojo::Connection* connection) { - connection->AddService<mojom::WebViewFactory>(this); + connection->AddInterface<mojom::WebViewFactory>(this); return true; }
diff --git a/components/web_view/web_view_impl.cc b/components/web_view/web_view_impl.cc index 00861b56..1b6a414a 100644 --- a/components/web_view/web_view_impl.cc +++ b/components/web_view/web_view_impl.cc
@@ -80,7 +80,7 @@ Frame::ClientPropertyMap client_properties; if (devtools_agent_) { devtools_service::DevToolsAgentPtr forward_agent; - frame_connection->connection()->ConnectToService(&forward_agent); + frame_connection->connection()->GetInterface(&forward_agent); devtools_agent_->AttachFrame(std::move(forward_agent), &client_properties); }
diff --git a/content/app/strings/content_strings.grd b/content/app/strings/content_strings.grd index e56c685..264704f 100644 --- a/content/app/strings/content_strings.grd +++ b/content/app/strings/content_strings.grd
@@ -39,7 +39,8 @@ <outputs> <!-- TODO add each of your output files. Modify the three below, and add your own for your various languages. See the user's guide - (http://wiki/Main/GritUsersGuide) for more details. + (https://www.chromium.org/developers/tools-we-use-in-chromium/grit/grit-users-guide) + for more details. Note that all output references are relative to the output directory which is specified at build time. --> <output filename="grit/content_strings.h" type="rc_header">
diff --git a/content/browser/accessibility/accessibility_tree_formatter_win.cc b/content/browser/accessibility/accessibility_tree_formatter_win.cc index eab7fd8..6947938 100644 --- a/content/browser/accessibility/accessibility_tree_formatter_win.cc +++ b/content/browser/accessibility/accessibility_tree_formatter_win.cc
@@ -167,8 +167,13 @@ dict->SetString("role", IAccessible2RoleToString(ax_object->ia2_role())); base::win::ScopedBstr temp_bstr; - if (SUCCEEDED(ax_object->get_accName(variant_self, temp_bstr.Receive()))) - dict->SetString("name", base::string16(temp_bstr, temp_bstr.Length())); + if (SUCCEEDED(ax_object->get_accName(variant_self, temp_bstr.Receive()))) { + base::string16 name = base::string16(temp_bstr, temp_bstr.Length()); + + // Ignore a JAWS workaround where the name of a document is " ". + if (name != L" " || ax_object->ia2_role() != ROLE_SYSTEM_DOCUMENT) + dict->SetString("name", name); + } temp_bstr.Reset(); if (SUCCEEDED(ax_object->get_accValue(variant_self, temp_bstr.Receive())))
diff --git a/content/browser/accessibility/browser_accessibility_manager_android.cc b/content/browser/accessibility/browser_accessibility_manager_android.cc index 57dd100c..906b9e01 100644 --- a/content/browser/accessibility/browser_accessibility_manager_android.cc +++ b/content/browser/accessibility/browser_accessibility_manager_android.cc
@@ -153,6 +153,10 @@ Java_BrowserAccessibilityManager_handleCheckStateChanged( env, obj.obj(), node->GetId()); break; + case ui::AX_EVENT_CLICKED: + Java_BrowserAccessibilityManager_handleClicked(env, obj.obj(), + node->GetId()); + break; case ui::AX_EVENT_SCROLL_POSITION_CHANGED: Java_BrowserAccessibilityManager_handleScrollPositionChanged( env, obj.obj(), node->GetId());
diff --git a/content/browser/accessibility/browser_accessibility_win.cc b/content/browser/accessibility/browser_accessibility_win.cc index d8b062cd..0bfe235 100644 --- a/content/browser/accessibility/browser_accessibility_win.cc +++ b/content/browser/accessibility/browser_accessibility_win.cc
@@ -487,8 +487,16 @@ return E_INVALIDARG; base::string16 name_str = target->name(); - if (name_str.empty()) - return S_FALSE; + if (name_str.empty()) { + if (target->ia2_role() == ROLE_SYSTEM_DOCUMENT && GetParent()) { + // Hack: Some versions of JAWS crash if they get an empty name on + // a document that's the child of an iframe, so always return a + // nonempty string for this role. https://crbug.com/583057 + name_str = L" "; + } else { + return S_FALSE; + } + } *name = SysAllocString(name_str.c_str()); @@ -3308,6 +3316,13 @@ BoolAttributeToIA2(ui::AX_ATTR_CONTAINER_LIVE_BUSY, "container-busy"); + // Expose the non-standard explicit-name IA2 attribute. + int name_from; + if (GetIntAttribute(ui::AX_ATTR_NAME_FROM, &name_from) && + name_from != ui::AX_NAME_FROM_CONTENTS) { + win_attributes_->ia2_attributes.push_back(L"explicit-name:true"); + } + // Expose table cell index. if (IsCellOrTableHeaderRole()) { BrowserAccessibility* table = GetParent();
diff --git a/content/browser/android/in_process/synchronous_compositor_factory_impl.cc b/content/browser/android/in_process/synchronous_compositor_factory_impl.cc index 628bfcc..385bb4f 100644 --- a/content/browser/android/in_process/synchronous_compositor_factory_impl.cc +++ b/content/browser/android/in_process/synchronous_compositor_factory_impl.cc
@@ -86,57 +86,7 @@ } // namespace -class SynchronousCompositorFactoryImpl::VideoContextProvider - : public StreamTextureFactorySynchronousImpl::ContextProvider { - public: - VideoContextProvider( - scoped_refptr<cc::ContextProvider> context_provider, - gpu::GLInProcessContext* gl_in_process_context) - : context_provider_(context_provider), - gl_in_process_context_(gl_in_process_context) { - context_provider_->BindToCurrentThread(); - } - - scoped_refptr<gfx::SurfaceTexture> GetSurfaceTexture( - uint32_t stream_id) override { - return gl_in_process_context_->GetSurfaceTexture(stream_id); - } - - uint32_t CreateStreamTexture(uint32_t texture_id) override { - return gl_in_process_context_->CreateStreamTexture(texture_id); - } - - gpu::gles2::GLES2Interface* ContextGL() override { - return context_provider_->ContextGL(); - } - - void AddObserver(StreamTextureFactoryContextObserver* obs) override { - observer_list_.AddObserver(obs); - } - - void RemoveObserver(StreamTextureFactoryContextObserver* obs) override { - observer_list_.RemoveObserver(obs); - } - - void RestoreContext() { - FOR_EACH_OBSERVER(StreamTextureFactoryContextObserver, - observer_list_, - ResetStreamTextureProxy()); - } - - private: - friend class base::RefCountedThreadSafe<VideoContextProvider>; - ~VideoContextProvider() override {} - - scoped_refptr<cc::ContextProvider> context_provider_; - gpu::GLInProcessContext* gl_in_process_context_; - base::ObserverList<StreamTextureFactoryContextObserver> observer_list_; - - DISALLOW_COPY_AND_ASSIGN(VideoContextProvider); -}; - -SynchronousCompositorFactoryImpl::SynchronousCompositorFactoryImpl() - : num_hardware_compositors_(0) { +SynchronousCompositorFactoryImpl::SynchronousCompositorFactoryImpl() { if (base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kSingleProcess)) { // TODO(boliu): Figure out how to deal with this more nicely. @@ -175,47 +125,111 @@ routing_id, SynchronousCompositorRegistryInProc::GetInstance())); } -scoped_refptr<StreamTextureFactory> -SynchronousCompositorFactoryImpl::CreateStreamTextureFactory(int frame_id) { - scoped_refptr<StreamTextureFactorySynchronousImpl> factory( - StreamTextureFactorySynchronousImpl::Create( - base::Bind( - &SynchronousCompositorFactoryImpl::TryCreateStreamTextureFactory, - base::Unretained(this)), - frame_id)); - return factory; +// SynchronousCompositorStreamTextureFactoryImpl. + +class SynchronousCompositorStreamTextureFactoryImpl::VideoContextProvider + : public StreamTextureFactorySynchronousImpl::ContextProvider { + public: + VideoContextProvider(scoped_refptr<cc::ContextProvider> context_provider, + gpu::GLInProcessContext* gl_in_process_context) + : context_provider_(context_provider), + gl_in_process_context_(gl_in_process_context) { + context_provider_->BindToCurrentThread(); + } + + scoped_refptr<gfx::SurfaceTexture> GetSurfaceTexture( + uint32_t stream_id) override { + return gl_in_process_context_->GetSurfaceTexture(stream_id); + } + + uint32_t CreateStreamTexture(uint32_t texture_id) override { + return gl_in_process_context_->CreateStreamTexture(texture_id); + } + + gpu::gles2::GLES2Interface* ContextGL() override { + return context_provider_->ContextGL(); + } + + void AddObserver(StreamTextureFactoryContextObserver* obs) override { + observer_list_.AddObserver(obs); + } + + void RemoveObserver(StreamTextureFactoryContextObserver* obs) override { + observer_list_.RemoveObserver(obs); + } + + void RestoreContext() { + FOR_EACH_OBSERVER(StreamTextureFactoryContextObserver, observer_list_, + ResetStreamTextureProxy()); + } + + private: + friend class base::RefCountedThreadSafe<VideoContextProvider>; + ~VideoContextProvider() override {} + + scoped_refptr<cc::ContextProvider> context_provider_; + gpu::GLInProcessContext* gl_in_process_context_; + base::ObserverList<StreamTextureFactoryContextObserver> observer_list_; + + DISALLOW_COPY_AND_ASSIGN(VideoContextProvider); +}; + +namespace { +base::LazyInstance<SynchronousCompositorStreamTextureFactoryImpl>::Leaky + g_stream_texture_factory = LAZY_INSTANCE_INITIALIZER; +} // namespace + +// static +SynchronousCompositorStreamTextureFactoryImpl* +SynchronousCompositorStreamTextureFactoryImpl::GetInstance() { + return g_stream_texture_factory.Pointer(); } -void SynchronousCompositorFactoryImpl::CompositorInitializedHardwareDraw() { +SynchronousCompositorStreamTextureFactoryImpl:: + SynchronousCompositorStreamTextureFactoryImpl() + : num_hardware_compositors_(0) {} + +scoped_refptr<StreamTextureFactory> +SynchronousCompositorStreamTextureFactoryImpl::CreateStreamTextureFactory() { + return StreamTextureFactorySynchronousImpl::Create( + base::Bind(&SynchronousCompositorStreamTextureFactoryImpl:: + TryCreateStreamTextureFactory, + base::Unretained(this))); +} + +void SynchronousCompositorStreamTextureFactoryImpl:: + CompositorInitializedHardwareDraw() { base::AutoLock lock(num_hardware_compositor_lock_); num_hardware_compositors_++; if (num_hardware_compositors_ == 1 && main_thread_task_runner_.get()) { main_thread_task_runner_->PostTask( - FROM_HERE, - base::Bind( - &SynchronousCompositorFactoryImpl::RestoreContextOnMainThread, - base::Unretained(this))); + FROM_HERE, base::Bind(&SynchronousCompositorStreamTextureFactoryImpl:: + RestoreContextOnMainThread, + base::Unretained(this))); } } -void SynchronousCompositorFactoryImpl::CompositorReleasedHardwareDraw() { +void SynchronousCompositorStreamTextureFactoryImpl:: + CompositorReleasedHardwareDraw() { base::AutoLock lock(num_hardware_compositor_lock_); DCHECK_GT(num_hardware_compositors_, 0u); num_hardware_compositors_--; } -void SynchronousCompositorFactoryImpl::RestoreContextOnMainThread() { +void SynchronousCompositorStreamTextureFactoryImpl:: + RestoreContextOnMainThread() { if (CanCreateMainThreadContext() && video_context_provider_.get()) video_context_provider_->RestoreContext(); } -bool SynchronousCompositorFactoryImpl::CanCreateMainThreadContext() { +bool SynchronousCompositorStreamTextureFactoryImpl:: + CanCreateMainThreadContext() { base::AutoLock lock(num_hardware_compositor_lock_); return num_hardware_compositors_ > 0; } scoped_refptr<StreamTextureFactorySynchronousImpl::ContextProvider> -SynchronousCompositorFactoryImpl::TryCreateStreamTextureFactory() { +SynchronousCompositorStreamTextureFactoryImpl::TryCreateStreamTextureFactory() { { base::AutoLock lock(num_hardware_compositor_lock_); main_thread_task_runner_ = base::ThreadTaskRunnerHandle::Get(); @@ -226,8 +240,8 @@ // |video_context_provider_| to null is also not safe since it makes // synchronous destruction uncontrolled and possibly deadlock. if (!CanCreateMainThreadContext()) { - return - scoped_refptr<StreamTextureFactorySynchronousImpl::ContextProvider>(); + return scoped_refptr< + StreamTextureFactorySynchronousImpl::ContextProvider>(); } if (!video_context_provider_.get()) { @@ -248,10 +262,15 @@ return video_context_provider_; } -void SynchronousCompositorFactoryImpl::SetDeferredGpuService( +void SynchronousCompositorStreamTextureFactoryImpl::SetDeferredGpuService( scoped_refptr<gpu::InProcessCommandBuffer::Service> service) { DCHECK(!android_view_service_.get()); android_view_service_ = service; + + if (base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kSingleProcess)) { + RenderThreadImpl::SetStreamTextureFactory(CreateStreamTextureFactory()); + } } } // namespace content
diff --git a/content/browser/android/in_process/synchronous_compositor_factory_impl.h b/content/browser/android/in_process/synchronous_compositor_factory_impl.h index 03533444a3..be0d978 100644 --- a/content/browser/android/in_process/synchronous_compositor_factory_impl.h +++ b/content/browser/android/in_process/synchronous_compositor_factory_impl.h
@@ -5,6 +5,7 @@ #ifndef CONTENT_BROWSER_ANDROID_IN_PROCESS_SYNCHRONOUS_COMPOSITOR_FACTORY_IMPL_H_ #define CONTENT_BROWSER_ANDROID_IN_PROCESS_SYNCHRONOUS_COMPOSITOR_FACTORY_IMPL_H_ +#include "base/lazy_instance.h" #include "base/synchronization/lock.h" #include "cc/blink/context_provider_web_context.h" #include "content/browser/android/in_process/synchronous_input_event_filter.h" @@ -46,28 +47,37 @@ InputHandlerManagerClient* GetInputHandlerManagerClient() override; scoped_ptr<cc::BeginFrameSource> CreateExternalBeginFrameSource( int routing_id) override; - scoped_refptr<StreamTextureFactory> CreateStreamTextureFactory( - int frame_id) override; SynchronousInputEventFilter* synchronous_input_event_filter() { return &synchronous_input_event_filter_; } + private: + SynchronousInputEventFilter synchronous_input_event_filter_; +}; + +class SynchronousCompositorStreamTextureFactoryImpl { + public: + static SynchronousCompositorStreamTextureFactoryImpl* GetInstance(); + + scoped_refptr<StreamTextureFactory> CreateStreamTextureFactory(); void SetDeferredGpuService( scoped_refptr<gpu::InProcessCommandBuffer::Service> service); void CompositorInitializedHardwareDraw(); void CompositorReleasedHardwareDraw(); - private: - scoped_refptr<cc::ContextProvider> GetSharedWorkerContextProvider(); + friend struct base::DefaultLazyInstanceTraits< + SynchronousCompositorStreamTextureFactoryImpl>; + + SynchronousCompositorStreamTextureFactoryImpl(); + ~SynchronousCompositorStreamTextureFactoryImpl(); + bool CanCreateMainThreadContext(); scoped_refptr<StreamTextureFactorySynchronousImpl::ContextProvider> TryCreateStreamTextureFactory(); void RestoreContextOnMainThread(); - SynchronousInputEventFilter synchronous_input_event_filter_; - scoped_refptr<gpu::InProcessCommandBuffer::Service> android_view_service_; class VideoContextProvider;
diff --git a/content/browser/android/in_process/synchronous_compositor_impl.cc b/content/browser/android/in_process/synchronous_compositor_impl.cc index e179137..a10e608 100644 --- a/content/browser/android/in_process/synchronous_compositor_impl.cc +++ b/content/browser/android/in_process/synchronous_compositor_impl.cc
@@ -108,12 +108,6 @@ synchronous_input_handler_proxy_->SetOnlySynchronouslyAnimateRootFlings(this); } -// static -void SynchronousCompositorImpl::SetGpuServiceInProc( - scoped_refptr<gpu::InProcessCommandBuffer::Service> service) { - g_factory.Get().SetDeferredGpuService(service); -} - void SynchronousCompositorImpl::DidInitializeRendererObjects( SynchronousCompositorOutputSurface* output_surface, SynchronousCompositorExternalBeginFrameSource* begin_frame_source, @@ -221,9 +215,11 @@ output_surface_->SetMemoryPolicy(bytes_limit); if (bytes_limit && !current_bytes_limit) { - g_factory.Get().CompositorInitializedHardwareDraw(); + SynchronousCompositorStreamTextureFactoryImpl::GetInstance() + ->CompositorInitializedHardwareDraw(); } else if (!bytes_limit && current_bytes_limit) { - g_factory.Get().CompositorReleasedHardwareDraw(); + SynchronousCompositorStreamTextureFactoryImpl::GetInstance() + ->CompositorReleasedHardwareDraw(); } }
diff --git a/content/browser/android/in_process/synchronous_compositor_impl.h b/content/browser/android/in_process/synchronous_compositor_impl.h index e5a1461..b7884058 100644 --- a/content/browser/android/in_process/synchronous_compositor_impl.h +++ b/content/browser/android/in_process/synchronous_compositor_impl.h
@@ -43,9 +43,6 @@ // is implicitly that of the in-process renderer. static SynchronousCompositorImpl* FromRoutingID(int routing_id); - static void SetGpuServiceInProc( - scoped_refptr<gpu::InProcessCommandBuffer::Service> service); - ~SynchronousCompositorImpl() override; // Called by SynchronousCompositorRegistry.
diff --git a/content/browser/android/synchronous_compositor_base.cc b/content/browser/android/synchronous_compositor_base.cc index acc5e349..47ceda3 100644 --- a/content/browser/android/synchronous_compositor_base.cc +++ b/content/browser/android/synchronous_compositor_base.cc
@@ -6,6 +6,7 @@ #include "base/command_line.h" #include "base/supports_user_data.h" +#include "content/browser/android/in_process/synchronous_compositor_factory_impl.h" #include "content/browser/android/in_process/synchronous_compositor_impl.h" #include "content/browser/android/synchronous_compositor_host.h" #include "content/browser/gpu/gpu_process_host.h" @@ -36,11 +37,8 @@ g_sync_point_manager = service->sync_point_manager(); GpuProcessHost::RegisterGpuMainThreadFactory( CreateInProcessGpuThreadForSynchronousCompositor); - - if (!base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kIPCSyncCompositing)) { - SynchronousCompositorImpl::SetGpuServiceInProc(service); - } + SynchronousCompositorStreamTextureFactoryImpl::GetInstance() + ->SetDeferredGpuService(service); } // static
diff --git a/content/browser/android/synchronous_compositor_base.h b/content/browser/android/synchronous_compositor_base.h index 6bd41bb..c269ed4e 100644 --- a/content/browser/android/synchronous_compositor_base.h +++ b/content/browser/android/synchronous_compositor_base.h
@@ -24,6 +24,7 @@ namespace content { class RenderWidgetHostViewAndroid; +class SynchronousCompositorStreamTextureFactoryImpl; class WebContents; class SynchronousCompositorBase : public SynchronousCompositor {
diff --git a/content/browser/android/synchronous_compositor_host.cc b/content/browser/android/synchronous_compositor_host.cc index c4292ec..daff4b4 100644 --- a/content/browser/android/synchronous_compositor_host.cc +++ b/content/browser/android/synchronous_compositor_host.cc
@@ -10,6 +10,7 @@ #include "base/memory/shared_memory.h" #include "base/trace_event/trace_event_argument.h" #include "cc/output/compositor_frame_ack.h" +#include "content/browser/android/in_process/synchronous_compositor_factory_impl.h" #include "content/browser/renderer_host/render_widget_host_view_android.h" #include "content/browser/web_contents/web_contents_impl.h" #include "content/common/android/sync_compositor_messages.h" @@ -231,8 +232,17 @@ void SynchronousCompositorHost::SetMemoryPolicy(size_t bytes_limit) { if (bytes_limit_ == bytes_limit) return; + size_t current_bytes_limit = bytes_limit_; bytes_limit_ = bytes_limit; SendAsyncCompositorStateIfNeeded(); + + if (bytes_limit && !current_bytes_limit) { + SynchronousCompositorStreamTextureFactoryImpl::GetInstance() + ->CompositorInitializedHardwareDraw(); + } else if (!bytes_limit && current_bytes_limit) { + SynchronousCompositorStreamTextureFactoryImpl::GetInstance() + ->CompositorReleasedHardwareDraw(); + } } void SynchronousCompositorHost::DidChangeRootLayerScrollOffset(
diff --git a/content/browser/android/web_contents_observer_proxy.cc b/content/browser/android/web_contents_observer_proxy.cc index 22ab07c..4b5b388 100644 --- a/content/browser/android/web_contents_observer_proxy.cc +++ b/content/browser/android/web_contents_observer_proxy.cc
@@ -13,6 +13,7 @@ #include "content/browser/web_contents/web_contents_impl.h" #include "content/public/browser/navigation_details.h" #include "content/public/browser/navigation_entry.h" +#include "content/public/browser/navigation_handle.h" #include "jni/WebContentsObserverProxy_jni.h" using base::android::AttachCurrentThread; @@ -76,6 +77,17 @@ was_oom_protected); } +void WebContentsObserverProxy::DidFinishNavigation( + NavigationHandle* navigation_handle) { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobject> obj(java_observer_); + ScopedJavaLocalRef<jstring> jstring_url( + ConvertUTF8ToJavaString(env, web_contents()->GetVisibleURL().spec())); + Java_WebContentsObserverProxy_didFinishNavigation( + env, obj.obj(), navigation_handle->IsInMainFrame(), + navigation_handle->IsErrorPage(), navigation_handle->HasCommitted()); +} + void WebContentsObserverProxy::DidStartLoading() { JNIEnv* env = AttachCurrentThread(); ScopedJavaLocalRef<jobject> obj(java_observer_); @@ -139,6 +151,7 @@ // that would also be valid for a fragment navigation. bool is_fragment_navigation = urls_same_ignoring_fragment && details.is_in_page; + Java_WebContentsObserverProxy_didNavigateMainFrame( env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(), details.is_navigation_to_different_page(), is_fragment_navigation,
diff --git a/content/browser/android/web_contents_observer_proxy.h b/content/browser/android/web_contents_observer_proxy.h index 23464053..1005a684 100644 --- a/content/browser/android/web_contents_observer_proxy.h +++ b/content/browser/android/web_contents_observer_proxy.h
@@ -32,6 +32,7 @@ private: void RenderViewReady() override; void RenderProcessGone(base::TerminationStatus termination_status) override; + void DidFinishNavigation(NavigationHandle* navigation_handle) override; void DidStartLoading() override; void DidStopLoading() override; void DidFailProvisionalLoad(RenderFrameHost* render_frame_host,
diff --git a/content/browser/background_sync/background_sync_browsertest.cc b/content/browser/background_sync/background_sync_browsertest.cc index 10d5be9..a3b0dcb 100644 --- a/content/browser/background_sync/background_sync_browsertest.cc +++ b/content/browser/background_sync/background_sync_browsertest.cc
@@ -67,12 +67,20 @@ } void RegistrationPendingDidGetSyncRegistration( + const std::string& tag, const base::Callback<void(bool)>& callback, BackgroundSyncStatus error_type, - scoped_ptr<BackgroundSyncRegistrationHandle> registration_handle) { + scoped_ptr<ScopedVector<BackgroundSyncRegistrationHandle>> + registration_handles) { ASSERT_EQ(BACKGROUND_SYNC_STATUS_OK, error_type); - callback.Run(registration_handle->sync_state() == - BackgroundSyncState::PENDING); + // Find the right registration in the list and check its status. + for (const auto& handle : *registration_handles) { + if (handle->options()->tag == tag) { + callback.Run(handle->sync_state() == BackgroundSyncState::PENDING); + return; + } + } + ADD_FAILURE() << "Registration should exist"; } void RegistrationPendingDidGetSWRegistration( @@ -84,9 +92,9 @@ ASSERT_EQ(SERVICE_WORKER_OK, status); int64_t service_worker_id = registration->id(); BackgroundSyncManager* sync_manager = sync_context->background_sync_manager(); - sync_manager->GetRegistration( - service_worker_id, tag, - base::Bind(&RegistrationPendingDidGetSyncRegistration, callback)); + sync_manager->GetRegistrations( + service_worker_id, + base::Bind(&RegistrationPendingDidGetSyncRegistration, tag, callback)); } void RegistrationPendingOnIOThread(
diff --git a/content/browser/background_sync/background_sync_manager.cc b/content/browser/background_sync/background_sync_manager.cc index 30eb828c4..25f95328 100644 --- a/content/browser/background_sync/background_sync_manager.cc +++ b/content/browser/background_sync/background_sync_manager.cc
@@ -203,25 +203,6 @@ MakeStatusAndRegistrationCompletion(callback))); } -void BackgroundSyncManager::GetRegistration( - int64_t sw_registration_id, - const std::string& sync_registration_tag, - const StatusAndRegistrationCallback& callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); - - if (disabled_) { - PostErrorResponse(BACKGROUND_SYNC_STATUS_STORAGE_ERROR, callback); - return; - } - - RegistrationKey registration_key(sync_registration_tag); - - op_scheduler_.ScheduleOperation(base::Bind( - &BackgroundSyncManager::GetRegistrationImpl, - weak_ptr_factory_.GetWeakPtr(), sw_registration_id, registration_key, - MakeStatusAndRegistrationCompletion(callback))); -} - void BackgroundSyncManager::GetRegistrations( int64_t sw_registration_id, const StatusAndRegistrationsCallback& callback) { @@ -920,30 +901,6 @@ FROM_HERE, base::Bind(callback, BACKGROUND_SYNC_STATUS_OK)); } -void BackgroundSyncManager::GetRegistrationImpl( - int64_t sw_registration_id, - const RegistrationKey& registration_key, - const StatusAndRegistrationCallback& callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); - - if (disabled_) { - PostErrorResponse(BACKGROUND_SYNC_STATUS_STORAGE_ERROR, callback); - return; - } - - RefCountedRegistration* registration = - LookupActiveRegistration(sw_registration_id, registration_key); - if (!registration) { - PostErrorResponse(BACKGROUND_SYNC_STATUS_NOT_FOUND, callback); - return; - } - - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::Bind(callback, BACKGROUND_SYNC_STATUS_OK, - base::Passed(CreateRegistrationHandle(registration)))); -} - void BackgroundSyncManager::GetRegistrationsImpl( int64_t sw_registration_id, const StatusAndRegistrationsCallback& callback) {
diff --git a/content/browser/background_sync/background_sync_manager.h b/content/browser/background_sync/background_sync_manager.h index 1bec984f..448b4700 100644 --- a/content/browser/background_sync/background_sync_manager.h +++ b/content/browser/background_sync/background_sync_manager.h
@@ -73,16 +73,6 @@ bool requested_from_service_worker, const StatusAndRegistrationCallback& callback); - // Finds the background sync registration associated with - // |sw_registration_id|, and tag |sync_registration_tag|. Calls |callback| - // with BACKGROUND_SYNC_STATUS_NOT_FOUND if it doesn't exist. Calls |callback| - // with BACKGROUND_SYNC_STATUS_OK on success. If the callback's status is not - // BACKGROUND_SYNC_STATUS_OK then the callback's RegistrationHandle will be - // nullptr. - void GetRegistration(int64_t sw_registration_id, - const std::string& sync_registration_tag, - const StatusAndRegistrationCallback& callback); - // Finds the background sync registrations associated with // |sw_registration_id|. Calls |callback| with BACKGROUND_SYNC_STATUS_OK on // success. @@ -274,11 +264,6 @@ const StatusCallback& callback, ServiceWorkerStatusCode status); - // GetRegistration callbacks - void GetRegistrationImpl(int64_t sw_registration_id, - const RegistrationKey& registration_key, - const StatusAndRegistrationCallback& callback); - // GetRegistrations callbacks void GetRegistrationsImpl(int64_t sw_registration_id, const StatusAndRegistrationsCallback& callback);
diff --git a/content/browser/background_sync/background_sync_manager_unittest.cc b/content/browser/background_sync/background_sync_manager_unittest.cc index 530c17a..c820c36 100644 --- a/content/browser/background_sync/background_sync_manager_unittest.cc +++ b/content/browser/background_sync/background_sync_manager_unittest.cc
@@ -499,26 +499,33 @@ int64_t sw_registration_id, const BackgroundSyncRegistrationOptions& registration_options) { bool was_called = false; - background_sync_manager_->GetRegistration( - sw_registration_id, registration_options.tag, - base::Bind(&BackgroundSyncManagerTest::StatusAndRegistrationCallback, + background_sync_manager_->GetRegistrations( + sw_registration_id, + base::Bind(&BackgroundSyncManagerTest::StatusAndRegistrationsCallback, base::Unretained(this), &was_called)); base::RunLoop().RunUntilIdle(); EXPECT_TRUE(was_called); if (callback_status_ == BACKGROUND_SYNC_STATUS_OK) { - EXPECT_STREQ(registration_options.tag.c_str(), - callback_registration_handle_->options()->tag.c_str()); + for (auto iter = callback_registration_handles_->begin(); + iter < callback_registration_handles_->end(); ++iter) { + if ((*iter)->options()->tag == registration_options.tag) { + // Transfer the matching registration handle out of the vector into + // callback_registration_handle_ for testing. + callback_registration_handle_.reset(*iter); + callback_registration_handles_->weak_erase(iter); + return true; + } + } } - - return callback_status_ == BACKGROUND_SYNC_STATUS_OK; + return false; } bool GetRegistrations() { - return GetRegistrationWithServiceWorkerId(sw_registration_id_1_); + return GetRegistrationsWithServiceWorkerId(sw_registration_id_1_); } - bool GetRegistrationWithServiceWorkerId(int64_t sw_registration_id) { + bool GetRegistrationsWithServiceWorkerId(int64_t sw_registration_id) { bool was_called = false; background_sync_manager_->GetRegistrations( sw_registration_id, @@ -841,34 +848,34 @@ SetupDelayedBackgroundSyncManager(); bool register_called = false; - bool get_registration_called = false; + bool get_registrations_called = false; test_background_sync_manager_->Register( sw_registration_id_1_, sync_options_1_, true /* requested_from_service_worker */, base::Bind(&BackgroundSyncManagerTest::StatusAndRegistrationCallback, base::Unretained(this), ®ister_called)); - test_background_sync_manager_->GetRegistration( - sw_registration_id_1_, sync_options_1_.tag, - base::Bind(&BackgroundSyncManagerTest::StatusAndRegistrationCallback, - base::Unretained(this), &get_registration_called)); + test_background_sync_manager_->GetRegistrations( + sw_registration_id_1_, + base::Bind(&BackgroundSyncManagerTest::StatusAndRegistrationsCallback, + base::Unretained(this), &get_registrations_called)); base::RunLoop().RunUntilIdle(); // Init should be blocked while loading from the backend. EXPECT_FALSE(register_called); - EXPECT_FALSE(get_registration_called); + EXPECT_FALSE(get_registrations_called); test_background_sync_manager_->Continue(); base::RunLoop().RunUntilIdle(); // Register should be blocked while storing to the backend. EXPECT_FALSE(register_called); - EXPECT_FALSE(get_registration_called); + EXPECT_FALSE(get_registrations_called); test_background_sync_manager_->Continue(); base::RunLoop().RunUntilIdle(); EXPECT_TRUE(register_called); EXPECT_EQ(BACKGROUND_SYNC_STATUS_OK, callback_status_); - // GetRegistration should run immediately as it doesn't write to disk. - EXPECT_TRUE(get_registration_called); + // GetRegistrations should run immediately as it doesn't write to disk. + EXPECT_TRUE(get_registrations_called); } TEST_F(BackgroundSyncManagerTest, UnregisterServiceWorker) {
diff --git a/content/browser/background_sync/background_sync_service_impl.cc b/content/browser/background_sync/background_sync_service_impl.cc index a53b01a..28f96da7 100644 --- a/content/browser/background_sync/background_sync_service_impl.cc +++ b/content/browser/background_sync/background_sync_service_impl.cc
@@ -129,20 +129,6 @@ weak_ptr_factory_.GetWeakPtr(), callback)); } -void BackgroundSyncServiceImpl::GetRegistration( - const mojo::String& tag, - int64_t sw_registration_id, - const GetRegistrationCallback& callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); - BackgroundSyncManager* background_sync_manager = - background_sync_context_->background_sync_manager(); - DCHECK(background_sync_manager); - background_sync_manager->GetRegistration( - sw_registration_id, tag.get(), - base::Bind(&BackgroundSyncServiceImpl::OnRegisterResult, - weak_ptr_factory_.GetWeakPtr(), callback)); -} - void BackgroundSyncServiceImpl::GetRegistrations( int64_t sw_registration_id, const GetRegistrationsCallback& callback) {
diff --git a/content/browser/background_sync/background_sync_service_impl.h b/content/browser/background_sync/background_sync_service_impl.h index 9f48959..a52c979 100644 --- a/content/browser/background_sync/background_sync_service_impl.h +++ b/content/browser/background_sync/background_sync_service_impl.h
@@ -39,9 +39,6 @@ void Unregister(BackgroundSyncRegistrationHandle::HandleId handle_id, int64_t sw_registration_id, const UnregisterCallback& callback) override; - void GetRegistration(const mojo::String& tag, - int64_t sw_registration_id, - const GetRegistrationCallback& callback) override; void GetRegistrations(int64_t sw_registration_id, const GetRegistrationsCallback& callback) override; void DuplicateRegistrationHandle(
diff --git a/content/browser/background_sync/background_sync_service_impl_unittest.cc b/content/browser/background_sync/background_sync_service_impl_unittest.cc index 1fdaaa83..f2f341b 100644 --- a/content/browser/background_sync/background_sync_service_impl_unittest.cc +++ b/content/browser/background_sync/background_sync_service_impl_unittest.cc
@@ -196,13 +196,6 @@ base::RunLoop().RunUntilIdle(); } - void GetRegistration( - const mojo::String& tag, - const BackgroundSyncService::RegisterCallback& callback) { - service_impl_->GetRegistration(tag, sw_registration_id_, callback); - base::RunLoop().RunUntilIdle(); - } - void GetRegistrations( const BackgroundSyncService::GetRegistrationsCallback& callback) { service_impl_->GetRegistrations(sw_registration_id_, callback); @@ -262,36 +255,6 @@ EXPECT_EQ(BackgroundSyncError::NONE, unregister_error); } -TEST_F(BackgroundSyncServiceImplTest, GetRegistration) { - bool called = false; - BackgroundSyncError error; - SyncRegistrationPtr reg; - GetRegistration( - "", base::Bind(&ErrorAndRegistrationCallback, &called, &error, ®)); - EXPECT_TRUE(called); - EXPECT_EQ(BackgroundSyncError::NOT_FOUND, error); -} - -TEST_F(BackgroundSyncServiceImplTest, GetRegistrationWithRegisteredSync) { - bool register_called = false; - bool getregistration_called = false; - BackgroundSyncError register_error; - BackgroundSyncError getregistration_error; - SyncRegistrationPtr register_reg; - SyncRegistrationPtr getregistration_reg; - Register(default_sync_registration_.Clone(), - base::Bind(&ErrorAndRegistrationCallback, ®ister_called, - ®ister_error, ®ister_reg)); - EXPECT_TRUE(register_called); - EXPECT_EQ(BackgroundSyncError::NONE, register_error); - GetRegistration( - register_reg->tag, - base::Bind(&ErrorAndRegistrationCallback, &getregistration_called, - &getregistration_error, &getregistration_reg)); - EXPECT_TRUE(getregistration_called); - EXPECT_EQ(BackgroundSyncError::NONE, getregistration_error); -} - TEST_F(BackgroundSyncServiceImplTest, GetRegistrations) { bool called = false; BackgroundSyncError error;
diff --git a/content/browser/bad_message.h b/content/browser/bad_message.h index ff86048..a9b5efa8 100644 --- a/content/browser/bad_message.h +++ b/content/browser/bad_message.h
@@ -131,6 +131,8 @@ RDHI_WRONG_STORAGE_PARTITION = 107, RDH_INVALID_REQUEST_ID = 108, BDH_SERVICE_NOT_ALLOWED_FOR_ORIGIN = 109, + WSH_SEND_BLOB_DURING_BLOB_SEND = 110, + WSH_SEND_FRAME_DURING_BLOB_SEND = 111, // Please add new elements here. The naming convention is abbreviated class // name (e.g. RenderFrameHost becomes RFH) plus a unique description of the
diff --git a/content/browser/fileapi/fileapi_message_filter.cc b/content/browser/fileapi/fileapi_message_filter.cc index bf8109d9..e52a4b25 100644 --- a/content/browser/fileapi/fileapi_message_filter.cc +++ b/content/browser/fileapi/fileapi_message_filter.cc
@@ -547,7 +547,7 @@ void FileAPIMessageFilter::OnAppendSharedMemoryToBlob( const std::string& uuid, base::SharedMemoryHandle handle, - size_t buffer_size) { + uint32_t buffer_size) { DCHECK(base::SharedMemory::IsHandleValid(handle)); if (!buffer_size) { bad_message::ReceivedBadMessage( @@ -634,7 +634,8 @@ } void FileAPIMessageFilter::OnAppendSharedMemoryToStream( - const GURL& url, base::SharedMemoryHandle handle, size_t buffer_size) { + const GURL& url, base::SharedMemoryHandle handle, + uint32_t buffer_size) { DCHECK(base::SharedMemory::IsHandleValid(handle)); if (!buffer_size) { bad_message::ReceivedBadMessage(
diff --git a/content/browser/fileapi/fileapi_message_filter.h b/content/browser/fileapi/fileapi_message_filter.h index 74d056fe..25eb8f69 100644 --- a/content/browser/fileapi/fileapi_message_filter.h +++ b/content/browser/fileapi/fileapi_message_filter.h
@@ -135,7 +135,7 @@ const storage::DataElement& item); void OnAppendSharedMemoryToBlob(const std::string& uuid, base::SharedMemoryHandle handle, - size_t buffer_size); + uint32_t buffer_size); void OnFinishBuildingBlob(const std::string& uuid, const std::string& content_type); void OnIncrementBlobRefCount(const std::string& uuid); @@ -155,7 +155,7 @@ void OnAppendBlobDataItemToStream(const GURL& url, const storage::DataElement& item); void OnAppendSharedMemoryToStream( - const GURL& url, base::SharedMemoryHandle handle, size_t buffer_size); + const GURL& url, base::SharedMemoryHandle handle, uint32_t buffer_size); void OnFlushStream(const GURL& url); void OnFinishBuildingStream(const GURL& url); void OnAbortBuildingStream(const GURL& url);
diff --git a/content/browser/fileapi/fileapi_message_filter_unittest.cc b/content/browser/fileapi/fileapi_message_filter_unittest.cc index 1fe224e3..b7d61e3 100644 --- a/content/browser/fileapi/fileapi_message_filter_unittest.cc +++ b/content/browser/fileapi/fileapi_message_filter_unittest.cc
@@ -249,7 +249,7 @@ ASSERT_TRUE(shared_memory->CreateAndMapAnonymous(kFakeData.size())); memcpy(shared_memory->memory(), kFakeData.data(), kFakeData.size()); StreamHostMsg_SyncAppendSharedMemory append_message( - kUrl, shared_memory->handle(), kFakeData.size()); + kUrl, shared_memory->handle(), static_cast<uint32_t>(kFakeData.size())); EXPECT_TRUE(filter_->OnMessageReceived(append_message)); StreamHostMsg_FinishBuilding finish_message(kUrl);
diff --git a/content/browser/frame_host/navigation_controller_impl.cc b/content/browser/frame_host/navigation_controller_impl.cc index 408314a..82260cc 100644 --- a/content/browser/frame_host/navigation_controller_impl.cc +++ b/content/browser/frame_host/navigation_controller_impl.cc
@@ -847,12 +847,19 @@ // If this is an error load, we may have already removed the pending entry // when we got the notice of the load failure. If so, look at the copy of the // pending parameters that were saved. + // + // TODO(creis): This block should be unnecessary now that we pass + // params.should_replace_current_entry. Remove it once we verify with the + // check below. if (params.url_is_unreachable && failed_pending_entry_id_ != 0) { details->did_replace_entry = failed_pending_entry_should_replace_; } else { details->did_replace_entry = pending_entry_ && pending_entry_->should_replace_entry(); } + CHECK(!details->did_replace_entry || params.should_replace_current_entry); + if (params.should_replace_current_entry) + details->did_replace_entry = true; // Do navigation-type specific actions. These will make and commit an entry. details->type = ClassifyNavigation(rfh, params); @@ -997,6 +1004,18 @@ return NAVIGATION_TYPE_NEW_SUBFRAME; } + // Cross-process location.replace navigations should be classified as New with + // replacement rather than ExistingPage, since it is not safe to reuse the + // NavigationEntry. + // TODO(creis): Have the renderer classify location.replace as + // did_create_new_entry for all cases and eliminate this special case. This + // requires updating several test expectations. See https://crbug.com/317872. + if (!rfh->GetParent() && GetLastCommittedEntry() && + GetLastCommittedEntry()->site_instance() != rfh->GetSiteInstance() && + params.should_replace_current_entry) { + return NAVIGATION_TYPE_NEW_PAGE; + } + // We only clear the session history when navigating to a new page. DCHECK(!params.history_list_was_cleared); @@ -1586,21 +1605,25 @@ browser_context_, instance->GetSiteURL()); } - SessionStorageNamespaceMap::const_iterator it = - session_storage_namespace_map_.find(partition_id); - if (it != session_storage_namespace_map_.end()) - return it->second.get(); - - // Create one if no one has accessed session storage for this partition yet. - // // TODO(ajwong): Should this use the |partition_id| directly rather than // re-lookup via |instance|? http://crbug.com/142685 StoragePartition* partition = - BrowserContext::GetStoragePartition(browser_context_, instance); + BrowserContext::GetStoragePartition(browser_context_, instance); + DOMStorageContextWrapper* context_wrapper = + static_cast<DOMStorageContextWrapper*>(partition->GetDOMStorageContext()); + + SessionStorageNamespaceMap::const_iterator it = + session_storage_namespace_map_.find(partition_id); + if (it != session_storage_namespace_map_.end()) { + // Ensure that this namespace actually belongs to this partition. + DCHECK(static_cast<SessionStorageNamespaceImpl*>(it->second.get())-> + IsFromContext(context_wrapper)); + return it->second.get(); + } + + // Create one if no one has accessed session storage for this partition yet. SessionStorageNamespaceImpl* session_storage_namespace = - new SessionStorageNamespaceImpl( - static_cast<DOMStorageContextWrapper*>( - partition->GetDOMStorageContext())); + new SessionStorageNamespaceImpl(context_wrapper); session_storage_namespace_map_[partition_id] = session_storage_namespace; return session_storage_namespace;
diff --git a/content/browser/frame_host/navigation_controller_impl_browsertest.cc b/content/browser/frame_host/navigation_controller_impl_browsertest.cc index 4e7c85c..5d1715e 100644 --- a/content/browser/frame_host/navigation_controller_impl_browsertest.cc +++ b/content/browser/frame_host/navigation_controller_impl_browsertest.cc
@@ -653,15 +653,15 @@ NavigateToURL(shell(), GURL(url::kAboutBlankURL)); EXPECT_EQ(3, controller.GetEntryCount()); - // ... and replace it with a failed load. (Note that when you set the - // should_replace_current_entry flag, the navigation is classified as NEW_PAGE - // because that is a classification of the renderer's behavior, and the flag - // is a browser-side flag.) + // ... and replace it with a failed load. + // TODO(creis): Make this be NEW_PAGE along with the other location.replace + // cases. There isn't much impact to having this be EXISTING_PAGE for now. + // See https://crbug.com/317872. { FrameNavigateParamsCapturer capturer(root); NavigateToURLAndReplace(shell(), error_url); capturer.Wait(); - EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); + EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); NavigationEntry* entry = controller.GetLastCommittedEntry(); EXPECT_EQ(PAGE_TYPE_ERROR, entry->GetPageType()); EXPECT_EQ(3, controller.GetEntryCount()); @@ -761,6 +761,20 @@ EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); EXPECT_TRUE(capturer.details().is_in_page); } + + if (AreAllSitesIsolatedForTesting()) { + // Cross-process location.replace(). + FrameNavigateParamsCapturer capturer(root); + GURL frame_url(embedded_test_server()->GetURL( + "foo.com", "/navigation_controller/simple_page_1.html")); + std::string script = "location.replace('" + frame_url.spec() + "')"; + EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); + capturer.Wait(); + EXPECT_EQ(ui::PAGE_TRANSITION_LINK | ui::PAGE_TRANSITION_CLIENT_REDIRECT, + capturer.params().transition); + EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); + EXPECT_FALSE(capturer.details().is_in_page); + } } // Verify that navigations for NAVIGATION_TYPE_EXISTING_PAGE are correctly @@ -884,6 +898,8 @@ { // location.replace(). + // TODO(creis): Change this to be NEW_PAGE with replacement in + // https://crbug.com/317872. FrameNavigateParamsCapturer capturer(root); GURL frame_url(embedded_test_server()->GetURL( "/navigation_controller/simple_page_1.html"));
diff --git a/content/browser/frame_host/navigation_controller_impl_unittest.cc b/content/browser/frame_host/navigation_controller_impl_unittest.cc index e0f6144..f6224ec 100644 --- a/content/browser/frame_host/navigation_controller_impl_unittest.cc +++ b/content/browser/frame_host/navigation_controller_impl_unittest.cc
@@ -1466,7 +1466,7 @@ // Fake a commit response. main_test_rfh()->PrepareForCommit(); - main_test_rfh()->SendNavigate(1, entry_id, true, url1); + main_test_rfh()->SendNavigateWithReplacement(1, entry_id, true, url1); // Certain values that are only used for pending entries get reset after // commit. @@ -3354,7 +3354,7 @@ navigator->DidStartProvisionalLoad(main_test_rfh(), url2, base::TimeTicks::Now()); EXPECT_TRUE(controller.GetPendingEntry()->should_replace_entry()); - main_test_rfh()->SendNavigate(0, 0, false, url2); + main_test_rfh()->SendNavigateWithReplacement(0, 0, false, url2); EXPECT_EQ(url2, controller.GetLastCommittedEntry()->GetURL()); }
diff --git a/content/browser/frame_host/navigation_handle_impl.cc b/content/browser/frame_host/navigation_handle_impl.cc index 7cec5bf..5637532 100644 --- a/content/browser/frame_host/navigation_handle_impl.cc +++ b/content/browser/frame_host/navigation_handle_impl.cc
@@ -311,11 +311,6 @@ RunCompleteCallback(result); } -void NavigationHandleImpl::DidRedirectNavigation(const GURL& new_url) { - url_ = new_url; - GetDelegate()->DidRedirectNavigation(this); -} - void NavigationHandleImpl::ReadyToCommitNavigation( RenderFrameHostImpl* render_frame_host, scoped_refptr<net::HttpResponseHeaders> response_headers) { @@ -406,6 +401,11 @@ } next_index_ = 0; state_ = WILL_REDIRECT_REQUEST; + + // Notify the delegate that a redirect was encountered and will be followed. + if (GetDelegate()) + GetDelegate()->DidRedirectNavigation(this); + return NavigationThrottle::PROCEED; }
diff --git a/content/browser/frame_host/navigation_handle_impl.h b/content/browser/frame_host/navigation_handle_impl.h index f5ce726..d363361 100644 --- a/content/browser/frame_host/navigation_handle_impl.h +++ b/content/browser/frame_host/navigation_handle_impl.h
@@ -154,6 +154,7 @@ // Called when the URLRequest will be redirected in the network stack. // |callback| will be called when all throttles check have completed. This // will allow the caller to cancel the navigation or let it proceed. + // This will also inform the delegate that the request was redirected. void WillRedirectRequest( const GURL& new_url, bool new_method_is_post, @@ -177,10 +178,6 @@ // Returns the FrameTreeNode this navigation is happening in. FrameTreeNode* frame_tree_node() { return frame_tree_node_; } - // Called when the navigation was redirected. This will update the |url_| and - // inform the delegate. - void DidRedirectNavigation(const GURL& new_url); - // Called when the navigation is ready to be committed in // |render_frame_host|. This will update the |state_| and inform the // delegate.
diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc index df0f7a1..397b16d4bd 100644 --- a/content/browser/frame_host/navigation_request.cc +++ b/content/browser/frame_host/navigation_request.cc
@@ -327,7 +327,6 @@ } loader_->FollowRedirect(); - navigation_handle_->DidRedirectNavigation(common_params_.url); } void NavigationRequest::InitializeServiceWorkerHandleIfNeeded() {
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc index 4499835..9f8ead4 100644 --- a/content/browser/frame_host/render_frame_host_impl.cc +++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -1396,8 +1396,8 @@ void RenderFrameHostImpl::OnTextSurroundingSelectionResponse( const base::string16& content, - size_t start_offset, - size_t end_offset) { + uint32_t start_offset, + uint32_t end_offset) { render_view_host_->OnTextSurroundingSelectionResponse( content, start_offset, end_offset); }
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h index d51b1a5..9767a4a 100644 --- a/content/browser/frame_host/render_frame_host_impl.h +++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -593,8 +593,8 @@ bool is_reload, IPC::Message* reply_msg); void OnTextSurroundingSelectionResponse(const base::string16& content, - size_t start_offset, - size_t end_offset); + uint32_t start_offset, + uint32_t end_offset); void OnDidAccessInitialDocument(); void OnDidChangeOpener(int32_t opener_routing_id); void OnDidChangeName(const std::string& name);
diff --git a/content/browser/frame_host/render_frame_host_manager_browsertest.cc b/content/browser/frame_host/render_frame_host_manager_browsertest.cc index afb1ca06..1fb3bfd 100644 --- a/content/browser/frame_host/render_frame_host_manager_browsertest.cc +++ b/content/browser/frame_host/render_frame_host_manager_browsertest.cc
@@ -1693,8 +1693,17 @@ // Ensure that renderer-side debug URLs don't take effect on crashed renderers, // even when going back/forward. // See https://crbug.com/477606. + +// This test is flaky on Android. crbug.com/585327 +#if defined(OS_ANDROID) +#define MAYBE_IgnoreForwardToRendererDebugURLsWhenCrashed \ + DISABLED_IgnoreForwardToRendererDebugURLsWhenCrashed +#else +#define MAYBE_IgnoreForwardToRendererDebugURLsWhenCrashed \ + IgnoreForwardToRendererDebugURLsWhenCrashed +#endif IN_PROC_BROWSER_TEST_F(RenderFrameHostManagerTest, - IgnoreForwardToRendererDebugURLsWhenCrashed) { + MAYBE_IgnoreForwardToRendererDebugURLsWhenCrashed) { // Visit a WebUI page with bindings. GURL webui_url = GURL(std::string(kChromeUIScheme) + "://" + std::string(kChromeUIGpuHost));
diff --git a/content/browser/gpu/gpu_process_host_ui_shim.cc b/content/browser/gpu/gpu_process_host_ui_shim.cc index 083c99d..f50db21 100644 --- a/content/browser/gpu/gpu_process_host_ui_shim.cc +++ b/content/browser/gpu/gpu_process_host_ui_shim.cc
@@ -223,10 +223,12 @@ #if defined(OS_MACOSX) void GpuProcessHostUIShim::OnAcceleratedSurfaceBuffersSwapped( const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params) { - TRACE_EVENT0("renderer", + TRACE_EVENT0("browser", "GpuProcessHostUIShim::OnAcceleratedSurfaceBuffersSwapped"); if (!ui::LatencyInfo::Verify(params.latency_info, "GpuHostMsg_AcceleratedSurfaceBuffersSwapped")) { + + TRACE_EVENT0("browser", "ui::LatencyInfo::Verify failed"); return; } @@ -257,6 +259,8 @@ params.size, params.scale_factor, &ack_params.vsync_timebase, &ack_params.vsync_interval); + } else { + TRACE_EVENT0("browser", "Skipping recycled surface frame"); } content::ImageTransportFactory::GetInstance()->OnGpuSwapBuffersCompleted(
diff --git a/content/browser/indexed_db/indexed_db_transaction_unittest.cc b/content/browser/indexed_db/indexed_db_transaction_unittest.cc index 9842968..dbe63ac 100644 --- a/content/browser/indexed_db/indexed_db_transaction_unittest.cc +++ b/content/browser/indexed_db/indexed_db_transaction_unittest.cc
@@ -43,7 +43,7 @@ void CreateDB() { // DB is created here instead of the constructor to workaround a // "peculiarity of C++". More info at - // https://code.google.com/p/googletest/wiki/FAQ#My_compiler_complains_that_a_constructor_(or_destructor)_cannot + // https://github.com/google/googletest/blob/master/googletest/docs/FAQ.md#my-compiler-complains-that-a-constructor-or-destructor-cannot-return-a-value-whats-going-on leveldb::Status s; db_ = IndexedDBDatabase::Create(base::ASCIIToUTF16("db"), backing_store_.get(),
diff --git a/content/browser/media/media_browsertest.cc b/content/browser/media/media_browsertest.cc index 43db9ad..c90be2e 100644 --- a/content/browser/media/media_browsertest.cc +++ b/content/browser/media/media_browsertest.cc
@@ -131,6 +131,10 @@ PlayVideo("bear.mp4", GetParam()); } +IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearHighBitDepthMp4) { + PlayVideo("bear-320x180-hi10p.mp4", GetParam()); +} + IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearSilentMp4) { PlayVideo("bear_silent.mp4", GetParam()); } @@ -259,6 +263,10 @@ RunColorFormatTest("yuv420p_rec709.mp4", kEnded); } +IN_PROC_BROWSER_TEST_F(MediaTest, Yuv420pHighBitDepth) { + RunColorFormatTest("yuv420p_hi10p.mp4", kEnded); +} + IN_PROC_BROWSER_TEST_F(MediaTest, Yuvj420pH264) { RunColorFormatTest("yuvj420p.mp4", kEnded); }
diff --git a/content/browser/media/webrtc_internals.cc b/content/browser/media/webrtc_internals.cc index 40aa91ba..d7d5a97 100644 --- a/content/browser/media/webrtc_internals.cc +++ b/content/browser/media/webrtc_internals.cc
@@ -39,10 +39,36 @@ } // namespace -WebRTCInternals::WebRTCInternals() +WebRTCInternals::PendingUpdate::PendingUpdate( + const std::string& command, scoped_ptr<base::Value> value) + : command_(command), value_(std::move(value)) {} + +WebRTCInternals::PendingUpdate::PendingUpdate(PendingUpdate&& other) + : command_(std::move(other.command_)), + value_(std::move(other.value_)) {} + +WebRTCInternals::PendingUpdate::~PendingUpdate() { + DCHECK(thread_checker_.CalledOnValidThread()); +} + +const std::string& WebRTCInternals::PendingUpdate::command() const { + DCHECK(thread_checker_.CalledOnValidThread()); + return command_; +} + +const base::Value* WebRTCInternals::PendingUpdate::value() const { + DCHECK(thread_checker_.CalledOnValidThread()); + return value_.get(); +} + +WebRTCInternals::WebRTCInternals() : WebRTCInternals(500) {} + +WebRTCInternals::WebRTCInternals(int aggregate_updates_ms) : audio_debug_recordings_(false), event_log_recordings_(false), - selecting_event_log_(false) { + selecting_event_log_(false), + aggregate_updates_ms_(aggregate_updates_ms), + weak_factory_(this) { // TODO(grunell): Shouldn't all the webrtc_internals* files be excluded from the // build if WebRTC is disabled? #if defined(ENABLE_WEBRTC) @@ -82,9 +108,6 @@ DCHECK_CURRENTLY_ON(BrowserThread::UI); base::DictionaryValue* dict = new base::DictionaryValue(); - if (!dict) - return; - dict->SetInteger("rid", render_process_id); dict->SetInteger("pid", static_cast<int>(pid)); dict->SetInteger("lid", lid); @@ -95,7 +118,7 @@ CreateOrReleasePowerSaveBlocker(); if (observers_.might_have_observers()) - SendUpdate("addPeerConnection", dict); + SendUpdate("addPeerConnection", dict->CreateDeepCopy()); if (render_process_id_set_.insert(render_process_id).second) { RenderProcessHost* host = RenderProcessHost::FromID(render_process_id); @@ -122,10 +145,10 @@ CreateOrReleasePowerSaveBlocker(); if (observers_.might_have_observers()) { - base::DictionaryValue id; - id.SetInteger("pid", static_cast<int>(pid)); - id.SetInteger("lid", lid); - SendUpdate("removePeerConnection", &id); + scoped_ptr<base::DictionaryValue> id(new base::DictionaryValue()); + id->SetInteger("pid", static_cast<int>(pid)); + id->SetInteger("lid", lid); + SendUpdate("removePeerConnection", std::move(id)); } break; } @@ -163,12 +186,12 @@ log->Append(log_entry); if (observers_.might_have_observers()) { - base::DictionaryValue update; - update.SetInteger("pid", static_cast<int>(pid)); - update.SetInteger("lid", lid); - update.MergeDictionary(log_entry); + scoped_ptr<base::DictionaryValue> update(new base::DictionaryValue()); + update->SetInteger("pid", static_cast<int>(pid)); + update->SetInteger("lid", lid); + update->MergeDictionary(log_entry); - SendUpdate("updatePeerConnection", &update); + SendUpdate("updatePeerConnection", std::move(update)); } return; } @@ -179,17 +202,13 @@ if (!observers_.might_have_observers()) return; - base::DictionaryValue dict; - dict.SetInteger("pid", static_cast<int>(pid)); - dict.SetInteger("lid", lid); + scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); + dict->SetInteger("pid", static_cast<int>(pid)); + dict->SetInteger("lid", lid); - base::ListValue* list = value.DeepCopy(); - if (!list) - return; + dict->Set("reports", value.CreateDeepCopy()); - dict.Set("reports", list); - - SendUpdate("addStats", &dict); + SendUpdate("addStats", std::move(dict)); } void WebRTCInternals::OnGetUserMedia(int rid, @@ -213,7 +232,7 @@ get_user_media_requests_.Append(dict); if (observers_.might_have_observers()) - SendUpdate("addGetUserMedia", dict); + SendUpdate("addGetUserMedia", dict->CreateDeepCopy()); if (render_process_id_set_.insert(rid).second) { RenderProcessHost* host = RenderProcessHost::FromID(rid); @@ -222,12 +241,12 @@ } } -void WebRTCInternals::AddObserver(WebRTCInternalsUIObserver *observer) { +void WebRTCInternals::AddObserver(WebRTCInternalsUIObserver* observer) { DCHECK_CURRENTLY_ON(BrowserThread::UI); observers_.AddObserver(observer); } -void WebRTCInternals::RemoveObserver(WebRTCInternalsUIObserver *observer) { +void WebRTCInternals::RemoveObserver(WebRTCInternalsUIObserver* observer) { DCHECK_CURRENTLY_ON(BrowserThread::UI); observers_.RemoveObserver(observer); @@ -251,8 +270,8 @@ void WebRTCInternals::EnableAudioDebugRecordings( content::WebContents* web_contents) { -#if defined(ENABLE_WEBRTC) DCHECK_CURRENTLY_ON(BrowserThread::UI); +#if defined(ENABLE_WEBRTC) #if defined(OS_ANDROID) EnableAudioDebugRecordingsOnAllRenderProcessHosts(); #else @@ -273,8 +292,8 @@ } void WebRTCInternals::DisableAudioDebugRecordings() { -#if defined(ENABLE_WEBRTC) DCHECK_CURRENTLY_ON(BrowserThread::UI); +#if defined(ENABLE_WEBRTC) audio_debug_recordings_ = false; // Tear down the dialog since the user has unchecked the audio debug @@ -343,21 +362,20 @@ return event_log_recordings_file_path_; } -void WebRTCInternals::ResetForTesting() { +void WebRTCInternals::SendUpdate(const string& command, + scoped_ptr<base::Value> value) { DCHECK_CURRENTLY_ON(BrowserThread::UI); - observers_.Clear(); - peer_connection_data_.Clear(); - CreateOrReleasePowerSaveBlocker(); - get_user_media_requests_.Clear(); - audio_debug_recordings_ = false; -} - -void WebRTCInternals::SendUpdate(const string& command, base::Value* value) { DCHECK(observers_.might_have_observers()); - FOR_EACH_OBSERVER(WebRTCInternalsUIObserver, - observers_, - OnUpdate(command, value)); + bool queue_was_empty = pending_updates_.empty(); + pending_updates_.push(PendingUpdate(command, std::move(value))); + + if (queue_was_empty) { + BrowserThread::PostDelayedTask(BrowserThread::UI, FROM_HERE, + base::Bind(&WebRTCInternals::ProcessPendingUpdates, + weak_factory_.GetWeakPtr()), + base::TimeDelta::FromMilliseconds(aggregate_updates_ms_)); + } } void WebRTCInternals::RenderProcessHostDestroyed(RenderProcessHost* host) { @@ -412,10 +430,10 @@ record->GetInteger("lid", &lid); record->GetInteger("pid", &pid); - base::DictionaryValue update; - update.SetInteger("lid", lid); - update.SetInteger("pid", pid); - SendUpdate("removePeerConnection", &update); + scoped_ptr<base::DictionaryValue> update(new base::DictionaryValue()); + update->SetInteger("lid", lid); + update->SetInteger("pid", pid); + SendUpdate("removePeerConnection", std::move(update)); } peer_connection_data_.Remove(i, NULL); } @@ -439,9 +457,9 @@ } if (found_any && observers_.might_have_observers()) { - base::DictionaryValue update; - update.SetInteger("rid", render_process_id); - SendUpdate("removeGetUserMediaForRenderer", &update); + scoped_ptr<base::DictionaryValue> update(new base::DictionaryValue()); + update->SetInteger("rid", render_process_id); + SendUpdate("removeGetUserMediaForRenderer", std::move(update)); } } @@ -487,4 +505,15 @@ } } +void WebRTCInternals::ProcessPendingUpdates() { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + while (!pending_updates_.empty()) { + const auto& update = pending_updates_.front(); + FOR_EACH_OBSERVER(WebRTCInternalsUIObserver, + observers_, + OnUpdate(update.command(), update.value())); + pending_updates_.pop(); + } +} + } // namespace content
diff --git a/content/browser/media/webrtc_internals.h b/content/browser/media/webrtc_internals.h index f647000..7b64ebc 100644 --- a/content/browser/media/webrtc_internals.h +++ b/content/browser/media/webrtc_internals.h
@@ -5,12 +5,16 @@ #ifndef CONTENT_BROWSER_MEDIA_WEBRTC_INTERNALS_H_ #define CONTENT_BROWSER_MEDIA_WEBRTC_INTERNALS_H_ +#include <queue> + #include "base/containers/hash_tables.h" #include "base/gtest_prod_util.h" #include "base/lazy_instance.h" #include "base/memory/scoped_ptr.h" +#include "base/memory/weak_ptr.h" #include "base/observer_list.h" #include "base/process/process.h" +#include "base/threading/thread_checker.h" #include "base/values.h" #include "content/common/content_export.h" #include "content/public/browser/render_process_host_observer.h" @@ -81,8 +85,8 @@ const std::string& video_constraints); // Methods for adding or removing WebRTCInternalsUIObserver. - void AddObserver(WebRTCInternalsUIObserver *observer); - void RemoveObserver(WebRTCInternalsUIObserver *observer); + void AddObserver(WebRTCInternalsUIObserver* observer); + void RemoveObserver(WebRTCInternalsUIObserver* observer); // Sends all update data to |observer|. void UpdateObserver(WebRTCInternalsUIObserver* observer); @@ -100,7 +104,14 @@ bool IsEventLogRecordingsEnabled() const; const base::FilePath& GetEventLogRecordingsFilePath() const; - void ResetForTesting(); + protected: + // Constructor/Destructor are protected to allow tests to derive from the + // class and do per-instance testing without having to use the global + // instance. + // The default ctor sets |aggregate_updates_ms| to 500ms. + WebRTCInternals(); + explicit WebRTCInternals(int aggregate_updates_ms); + ~WebRTCInternals() override; private: friend struct base::DefaultLazyInstanceTraits<WebRTCInternals>; @@ -113,10 +124,7 @@ FRIEND_TEST_ALL_PREFIXES(WebRtcInternalsTest, AudioDebugRecordingsFileSelectionCanceled); - WebRTCInternals(); - ~WebRTCInternals() override; - - void SendUpdate(const std::string& command, base::Value* value); + void SendUpdate(const std::string& command, scoped_ptr<base::Value> value); // RenderProcessHostObserver implementation. void RenderProcessHostDestroyed(RenderProcessHost* host) override; @@ -145,6 +153,12 @@ // application for power-saving. void CreateOrReleasePowerSaveBlocker(); + // Called on a timer to deliver updates to javascript. + // We throttle and bulk together updates to avoid DOS like scenarios where + // a page uses a lot of peerconnection instances with many event + // notifications. + void ProcessPendingUpdates(); + base::ObserverList<WebRTCInternalsUIObserver> observers_; // |peer_connection_data_| is a list containing all the PeerConnection @@ -191,6 +205,36 @@ // Set of render process hosts that |this| is registered as an observer on. base::hash_set<int> render_process_id_set_; + + // Used to bulk up updates that we send to javascript. + // The class owns the value/dictionary and command name of an update. + // For each update, a PendingUpdate is stored in the |pending_updates_| queue + // and deleted as soon as the update has been delivered. + // The class is moveble and not copyable to avoid copying while still allowing + // us to use an stl container without needing scoped_ptr or similar. + // The class is single threaded, so all operations must occur on the same + // thread. + class PendingUpdate { + public: + PendingUpdate(const std::string& command, scoped_ptr<base::Value> value); + PendingUpdate(PendingUpdate&& other); + ~PendingUpdate(); + + const std::string& command() const; + const base::Value* value() const; + + private: + base::ThreadChecker thread_checker_; + std::string command_; + scoped_ptr<base::Value> value_; + DISALLOW_COPY_AND_ASSIGN(PendingUpdate); + }; + + std::queue<PendingUpdate> pending_updates_; + const int aggregate_updates_ms_; + + // Weak factory for this object that we use for bulking up updates. + base::WeakPtrFactory<WebRTCInternals> weak_factory_; }; } // namespace content
diff --git a/content/browser/media/webrtc_internals_unittest.cc b/content/browser/media/webrtc_internals_unittest.cc index 197107f..6ef2137 100644 --- a/content/browser/media/webrtc_internals_unittest.cc +++ b/content/browser/media/webrtc_internals_unittest.cc
@@ -4,6 +4,7 @@ #include "base/memory/scoped_ptr.h" #include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "base/values.h" #include "content/browser/media/webrtc_internals.h" #include "content/browser/media/webrtc_internals_ui_observer.h" @@ -20,13 +21,10 @@ class MockWebRtcInternalsProxy : public WebRTCInternalsUIObserver { public: - void OnUpdate(const std::string& command, const base::Value* value) override { - command_ = command; - if (value) - value_.reset(value->DeepCopy()); - } + MockWebRtcInternalsProxy() : loop_(nullptr) {} + explicit MockWebRtcInternalsProxy(base::RunLoop* loop) : loop_(loop) {} - std::string command() { + const std::string& command() const { return command_; } @@ -35,15 +33,32 @@ } private: - std::string command_; - scoped_ptr<base::Value> value_; + void OnUpdate(const std::string& command, const base::Value* value) override { + command_ = command; + value_.reset(value ? value->DeepCopy() : nullptr); + if (loop_) + loop_->Quit(); + } + + std::string command_; + scoped_ptr<base::Value> value_; + base::RunLoop* loop_; }; +// Derived class for testing only. Allows the tests to have their own instance +// for testing and control the period for which WebRTCInternals will bulk up +// updates (changes down from 500ms to 1ms). +class WebRTCInternalsForTest : public NON_EXPORTED_BASE(WebRTCInternals) { + public: + WebRTCInternalsForTest() : WebRTCInternals(1) {} + ~WebRTCInternalsForTest() override {} +}; + +} // namespace + class WebRtcInternalsTest : public testing::Test { public: - WebRtcInternalsTest() : io_thread_(BrowserThread::UI, &io_loop_) { - WebRTCInternals::GetInstance()->ResetForTesting(); - } + WebRtcInternalsTest() : io_thread_(BrowserThread::UI, &io_loop_) {} protected: void VerifyString(const base::DictionaryValue* dict, @@ -90,30 +105,41 @@ TestBrowserThread io_thread_; }; -} // namespace - TEST_F(WebRtcInternalsTest, AddRemoveObserver) { - scoped_ptr<MockWebRtcInternalsProxy> observer( - new MockWebRtcInternalsProxy()); - WebRTCInternals::GetInstance()->AddObserver(observer.get()); - WebRTCInternals::GetInstance()->RemoveObserver(observer.get()); - WebRTCInternals::GetInstance()->OnAddPeerConnection( - 0, 3, 4, kUrl, kRtcConfiguration, kContraints); - EXPECT_EQ("", observer->command()); + base::RunLoop loop; + MockWebRtcInternalsProxy observer(&loop); + WebRTCInternalsForTest webrtc_internals; + webrtc_internals.AddObserver(&observer); - WebRTCInternals::GetInstance()->OnRemovePeerConnection(3, 4); + webrtc_internals.RemoveObserver(&observer); + // The observer should not get notified of this activity. + webrtc_internals.OnAddPeerConnection( + 0, 3, 4, kUrl, kRtcConfiguration, kContraints); + + BrowserThread::PostDelayedTask(BrowserThread::UI, FROM_HERE, + loop.QuitClosure(), + base::TimeDelta::FromMilliseconds(5)); + loop.Run(); + + EXPECT_EQ("", observer.command()); + + webrtc_internals.OnRemovePeerConnection(3, 4); } TEST_F(WebRtcInternalsTest, SendAddPeerConnectionUpdate) { - scoped_ptr<MockWebRtcInternalsProxy> observer( - new MockWebRtcInternalsProxy()); - WebRTCInternals::GetInstance()->AddObserver(observer.get()); - WebRTCInternals::GetInstance()->OnAddPeerConnection( + base::RunLoop loop; + MockWebRtcInternalsProxy observer(&loop); + WebRTCInternalsForTest webrtc_internals; + webrtc_internals.AddObserver(&observer); + webrtc_internals.OnAddPeerConnection( 0, 1, 2, kUrl, kRtcConfiguration, kContraints); - EXPECT_EQ("addPeerConnection", observer->command()); + + loop.Run(); + + ASSERT_EQ("addPeerConnection", observer.command()); base::DictionaryValue* dict = NULL; - EXPECT_TRUE(observer->value()->GetAsDictionary(&dict)); + EXPECT_TRUE(observer.value()->GetAsDictionary(&dict)); VerifyInt(dict, "pid", 1); VerifyInt(dict, "lid", 2); @@ -121,44 +147,51 @@ VerifyString(dict, "rtcConfiguration", kRtcConfiguration); VerifyString(dict, "constraints", kContraints); - WebRTCInternals::GetInstance()->RemoveObserver(observer.get()); - WebRTCInternals::GetInstance()->OnRemovePeerConnection(1, 2); + webrtc_internals.RemoveObserver(&observer); + webrtc_internals.OnRemovePeerConnection(1, 2); } TEST_F(WebRtcInternalsTest, SendRemovePeerConnectionUpdate) { - scoped_ptr<MockWebRtcInternalsProxy> observer( - new MockWebRtcInternalsProxy()); - WebRTCInternals::GetInstance()->AddObserver(observer.get()); - WebRTCInternals::GetInstance()->OnAddPeerConnection( + base::RunLoop loop; + MockWebRtcInternalsProxy observer(&loop); + WebRTCInternalsForTest webrtc_internals; + webrtc_internals.AddObserver(&observer); + webrtc_internals.OnAddPeerConnection( 0, 1, 2, kUrl, kRtcConfiguration, kContraints); - WebRTCInternals::GetInstance()->OnRemovePeerConnection(1, 2); - EXPECT_EQ("removePeerConnection", observer->command()); + webrtc_internals.OnRemovePeerConnection(1, 2); + + loop.Run(); + + ASSERT_EQ("removePeerConnection", observer.command()); base::DictionaryValue* dict = NULL; - EXPECT_TRUE(observer->value()->GetAsDictionary(&dict)); + EXPECT_TRUE(observer.value()->GetAsDictionary(&dict)); VerifyInt(dict, "pid", 1); VerifyInt(dict, "lid", 2); - WebRTCInternals::GetInstance()->RemoveObserver(observer.get()); + webrtc_internals.RemoveObserver(&observer); } TEST_F(WebRtcInternalsTest, SendUpdatePeerConnectionUpdate) { - scoped_ptr<MockWebRtcInternalsProxy> observer( - new MockWebRtcInternalsProxy()); - WebRTCInternals::GetInstance()->AddObserver(observer.get()); - WebRTCInternals::GetInstance()->OnAddPeerConnection( + base::RunLoop loop; + MockWebRtcInternalsProxy observer(&loop); + WebRTCInternalsForTest webrtc_internals; + webrtc_internals.AddObserver(&observer); + webrtc_internals.OnAddPeerConnection( 0, 1, 2, kUrl, kRtcConfiguration, kContraints); const std::string update_type = "fakeType"; const std::string update_value = "fakeValue"; - WebRTCInternals::GetInstance()->OnUpdatePeerConnection( + webrtc_internals.OnUpdatePeerConnection( 1, 2, update_type, update_value); - EXPECT_EQ("updatePeerConnection", observer->command()); + loop.Run(); + + ASSERT_EQ("updatePeerConnection", observer.command()); base::DictionaryValue* dict = NULL; - EXPECT_TRUE(observer->value()->GetAsDictionary(&dict)); + EXPECT_TRUE(observer.value()->GetAsDictionary(&dict)); VerifyInt(dict, "pid", 1); VerifyInt(dict, "lid", 2); @@ -169,28 +202,32 @@ EXPECT_TRUE(dict->GetString("time", &time)); EXPECT_FALSE(time.empty()); - WebRTCInternals::GetInstance()->OnRemovePeerConnection(1, 2); - WebRTCInternals::GetInstance()->RemoveObserver(observer.get()); + webrtc_internals.OnRemovePeerConnection(1, 2); + webrtc_internals.RemoveObserver(&observer); } TEST_F(WebRtcInternalsTest, AddGetUserMedia) { - scoped_ptr<MockWebRtcInternalsProxy> observer(new MockWebRtcInternalsProxy()); + base::RunLoop loop; + MockWebRtcInternalsProxy observer(&loop); + WebRTCInternalsForTest webrtc_internals; // Add one observer before "getUserMedia". - WebRTCInternals::GetInstance()->AddObserver(observer.get()); + webrtc_internals.AddObserver(&observer); const int rid = 1; const int pid = 2; const std::string audio_constraint = "aaa"; const std::string video_constraint = "vvv"; - WebRTCInternals::GetInstance()->OnGetUserMedia( + webrtc_internals.OnGetUserMedia( rid, pid, kUrl, true, true, audio_constraint, video_constraint); - EXPECT_EQ("addGetUserMedia", observer->command()); - VerifyGetUserMediaData( - observer->value(), rid, pid, kUrl, audio_constraint, video_constraint); + loop.Run(); - WebRTCInternals::GetInstance()->RemoveObserver(observer.get()); + ASSERT_EQ("addGetUserMedia", observer.command()); + VerifyGetUserMediaData( + observer.value(), rid, pid, kUrl, audio_constraint, video_constraint); + + webrtc_internals.RemoveObserver(&observer); } TEST_F(WebRtcInternalsTest, SendAllUpdateWithGetUserMedia) { @@ -198,19 +235,20 @@ const int pid = 2; const std::string audio_constraint = "aaa"; const std::string video_constraint = "vvv"; - WebRTCInternals::GetInstance()->OnGetUserMedia( + WebRTCInternalsForTest webrtc_internals; + webrtc_internals.OnGetUserMedia( rid, pid, kUrl, true, true, audio_constraint, video_constraint); - scoped_ptr<MockWebRtcInternalsProxy> observer(new MockWebRtcInternalsProxy()); + MockWebRtcInternalsProxy observer; // Add one observer after "getUserMedia". - WebRTCInternals::GetInstance()->AddObserver(observer.get()); - WebRTCInternals::GetInstance()->UpdateObserver(observer.get()); + webrtc_internals.AddObserver(&observer); + webrtc_internals.UpdateObserver(&observer); - EXPECT_EQ("addGetUserMedia", observer->command()); + EXPECT_EQ("addGetUserMedia", observer.command()); VerifyGetUserMediaData( - observer->value(), rid, pid, kUrl, audio_constraint, video_constraint); + observer.value(), rid, pid, kUrl, audio_constraint, video_constraint); - WebRTCInternals::GetInstance()->RemoveObserver(observer.get()); + webrtc_internals.RemoveObserver(&observer); } TEST_F(WebRtcInternalsTest, SendAllUpdatesWithPeerConnectionUpdate) { @@ -218,20 +256,23 @@ const std::string update_type = "fakeType"; const std::string update_value = "fakeValue"; - WebRTCInternals::GetInstance()->OnAddPeerConnection( + WebRTCInternalsForTest webrtc_internals; + + webrtc_internals.OnAddPeerConnection( rid, pid, lid, kUrl, kRtcConfiguration, kContraints); - WebRTCInternals::GetInstance()->OnUpdatePeerConnection( + webrtc_internals.OnUpdatePeerConnection( pid, lid, update_type, update_value); - scoped_ptr<MockWebRtcInternalsProxy> observer(new MockWebRtcInternalsProxy()); - WebRTCInternals::GetInstance()->AddObserver(observer.get()); + MockWebRtcInternalsProxy observer; + webrtc_internals.AddObserver(&observer); - WebRTCInternals::GetInstance()->UpdateObserver(observer.get()); + webrtc_internals.UpdateObserver(&observer); - EXPECT_EQ("updateAllPeerConnections", observer->command()); + EXPECT_EQ("updateAllPeerConnections", observer.command()); + ASSERT_TRUE(observer.value()); base::ListValue* list = NULL; - EXPECT_TRUE(observer->value()->GetAsList(&list)); + EXPECT_TRUE(observer.value()->GetAsList(&list)); EXPECT_EQ(1U, list->GetSize()); base::DictionaryValue* dict = NULL; @@ -258,19 +299,25 @@ TEST_F(WebRtcInternalsTest, OnAddStats) { const int rid = 0, pid = 1, lid = 2; - scoped_ptr<MockWebRtcInternalsProxy> observer(new MockWebRtcInternalsProxy()); - WebRTCInternals::GetInstance()->AddObserver(observer.get()); - WebRTCInternals::GetInstance()->OnAddPeerConnection( + base::RunLoop loop; + MockWebRtcInternalsProxy observer(&loop); + WebRTCInternalsForTest webrtc_internals; + webrtc_internals.AddObserver(&observer); + webrtc_internals.OnAddPeerConnection( rid, pid, lid, kUrl, kRtcConfiguration, kContraints); base::ListValue list; list.AppendString("xxx"); list.AppendString("yyy"); - WebRTCInternals::GetInstance()->OnAddStats(pid, lid, list); + webrtc_internals.OnAddStats(pid, lid, list); - EXPECT_EQ("addStats", observer->command()); + loop.Run(); + + EXPECT_EQ("addStats", observer.command()); + ASSERT_TRUE(observer.value()); + base::DictionaryValue* dict = NULL; - EXPECT_TRUE(observer->value()->GetAsDictionary(&dict)); + EXPECT_TRUE(observer.value()->GetAsDictionary(&dict)); VerifyInt(dict, "pid", pid); VerifyInt(dict, "lid", lid); @@ -278,11 +325,18 @@ } TEST_F(WebRtcInternalsTest, AudioDebugRecordingsFileSelectionCanceled) { - scoped_ptr<MockWebRtcInternalsProxy> observer(new MockWebRtcInternalsProxy()); - WebRTCInternals::GetInstance()->AddObserver(observer.get()); - WebRTCInternals::GetInstance()->FileSelectionCanceled(NULL); - EXPECT_EQ("audioDebugRecordingsFileSelectionCancelled", observer->command()); - EXPECT_EQ(NULL, observer->value()); + base::RunLoop loop; + + MockWebRtcInternalsProxy observer(&loop); + WebRTCInternalsForTest webrtc_internals; + + webrtc_internals.AddObserver(&observer); + webrtc_internals.FileSelectionCanceled(nullptr); + + loop.Run(); + + EXPECT_EQ("audioDebugRecordingsFileSelectionCancelled", observer.command()); + EXPECT_EQ(nullptr, observer.value()); } } // namespace content
diff --git a/content/browser/mojo/mojo_shell_context.cc b/content/browser/mojo/mojo_shell_context.cc index f9a1f1c..4e5e70e 100644 --- a/content/browser/mojo/mojo_shell_context.cc +++ b/content/browser/mojo/mojo_shell_context.cc
@@ -67,7 +67,7 @@ private: // mojo::shell::ApplicationLoader: void Load(const GURL& url, - mojo::InterfaceRequest<mojo::shell::mojom::Application> request) + mojo::InterfaceRequest<mojo::shell::mojom::ShellClient> request) override {} DISALLOW_COPY_AND_ASSIGN(DefaultApplicationLoader); @@ -85,7 +85,7 @@ private: // mojo::shell::ApplicationLoader: void Load(const GURL& url, - mojo::InterfaceRequest<mojo::shell::mojom::Application> request) + mojo::InterfaceRequest<mojo::shell::mojom::ShellClient> request) override { ProcessControlPtr process_control; auto process_request = mojo::GetProxy(&process_control); @@ -130,7 +130,7 @@ private: // mojo::shell::ApplicationLoader: void Load(const GURL& url, - mojo::InterfaceRequest<mojo::shell::mojom::Application> request) + mojo::InterfaceRequest<mojo::shell::mojom::ShellClient> request) override { ProcessControlPtr process_control; auto process_request = mojo::GetProxy(&process_control);
diff --git a/content/browser/renderer_host/input/touch_emulator.cc b/content/browser/renderer_host/input/touch_emulator.cc index af8e603..f52fadb 100644 --- a/content/browser/renderer_host/input/touch_emulator.cc +++ b/content/browser/renderer_host/input/touch_emulator.cc
@@ -250,7 +250,7 @@ if (is_sequence_start) emulated_stream_active_sequence_count_++; - event.causesScrollingIfUncanceled = result.did_generate_scroll; + event.movedBeyondSlopRegion = result.moved_beyond_slop_region; client_->ForwardEmulatedTouchEvent(event); }
diff --git a/content/browser/renderer_host/input/touch_event_queue.cc b/content/browser/renderer_host/input/touch_event_queue.cc index a351dfd3..0e5b3cef 100644 --- a/content/browser/renderer_host/input/touch_event_queue.cc +++ b/content/browser/renderer_host/input/touch_event_queue.cc
@@ -310,7 +310,7 @@ if (suppressing_touchmoves_) { if (event.touchesLength > 1) { suppressing_touchmoves_ = false; - } else if (event.causesScrollingIfUncanceled) { + } else if (event.movedBeyondSlopRegion) { suppressing_touchmoves_ = false; } else { // No sane slop region should be larger than 60 DIPs.
diff --git a/content/browser/renderer_host/input/touch_event_queue_unittest.cc b/content/browser/renderer_host/input/touch_event_queue_unittest.cc index f1091d48..57b9760 100644 --- a/content/browser/renderer_host/input/touch_event_queue_unittest.cc +++ b/content/browser/renderer_host/input/touch_event_queue_unittest.cc
@@ -105,17 +105,16 @@ void SendTouchEvent(WebTouchEvent event) { if (slop_length_dips_) { - event.causesScrollingIfUncanceled = false; + event.movedBeyondSlopRegion = false; if (WebTouchEventTraits::IsTouchSequenceStart(event)) anchor_ = event.touches[0].position; if (event.type == WebInputEvent::TouchMove) { gfx::Vector2dF delta = anchor_ - event.touches[0].position; if (delta.LengthSquared() > slop_length_dips_ * slop_length_dips_) - event.causesScrollingIfUncanceled = true; + event.movedBeyondSlopRegion = true; } } else { - event.causesScrollingIfUncanceled = - event.type == WebInputEvent::TouchMove; + event.movedBeyondSlopRegion = event.type == WebInputEvent::TouchMove; } queue_->QueueEvent(TouchEventWithLatencyInfo(event, ui::LatencyInfo())); } @@ -190,7 +189,7 @@ point.radiusX = radius_x; point.radiusY = radius_y; touch_event_.touches[index].state = WebTouchPoint::StateMoved; - touch_event_.causesScrollingIfUncanceled = true; + touch_event_.movedBeyondSlopRegion = true; WebTouchEventTraits::ResetType(WebInputEvent::TouchMove, touch_event_.timeStampSeconds, &touch_event_); @@ -203,7 +202,7 @@ WebTouchPoint& point = touch_event_.touches[index]; point.rotationAngle = rotation_angle; touch_event_.touches[index].state = WebTouchPoint::StateMoved; - touch_event_.causesScrollingIfUncanceled = true; + touch_event_.movedBeyondSlopRegion = true; WebTouchEventTraits::ResetType(WebInputEvent::TouchMove, touch_event_.timeStampSeconds, &touch_event_); @@ -216,7 +215,7 @@ WebTouchPoint& point = touch_event_.touches[index]; point.force = force; touch_event_.touches[index].state = WebTouchPoint::StateMoved; - touch_event_.causesScrollingIfUncanceled = true; + touch_event_.movedBeyondSlopRegion = true; WebTouchEventTraits::ResetType(WebInputEvent::TouchMove, touch_event_.timeStampSeconds, &touch_event_);
diff --git a/content/browser/renderer_host/media/video_capture_device_client_unittest.cc b/content/browser/renderer_host/media/video_capture_device_client_unittest.cc index 56c0a120..1463b26 100644 --- a/content/browser/renderer_host/media/video_capture_device_client_unittest.cc +++ b/content/browser/renderer_host/media/video_capture_device_client_unittest.cc
@@ -154,11 +154,17 @@ format == media::PIXEL_FORMAT_ARGB || format == media::PIXEL_FORMAT_XRGB || format == media::PIXEL_FORMAT_MJPEG || - format == media::PIXEL_FORMAT_MT21) { + format == media::PIXEL_FORMAT_MT21 || + format == media::PIXEL_FORMAT_YUV420P9 || + format == media::PIXEL_FORMAT_YUV420P10 || + format == media::PIXEL_FORMAT_YUV422P9 || + format == media::PIXEL_FORMAT_YUV422P10 || + format == media::PIXEL_FORMAT_YUV444P9 || + format == media::PIXEL_FORMAT_YUV444P10) { continue; } #if !defined(OS_LINUX) && !defined(OS_WIN) - if (format == media::PIXEL_FORMAT_RGB24){ + if (format == media::PIXEL_FORMAT_RGB24) { continue; } #endif
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index b333139b..8ba39939 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -899,10 +899,14 @@ base::Bind(&GetContexts, browser_context->GetResourceContext(), request_context, media_request_context)); + // Several filters need the Blob storage context, so fetch it in advance. + scoped_refptr<ChromeBlobStorageContext> blob_storage_context = + ChromeBlobStorageContext::GetFor(browser_context); + ResourceMessageFilter* resource_message_filter = new ResourceMessageFilter( GetID(), PROCESS_TYPE_RENDERER, storage_partition_impl_->GetAppCacheService(), - ChromeBlobStorageContext::GetFor(browser_context), + blob_storage_context.get(), storage_partition_impl_->GetFileSystemContext(), storage_partition_impl_->GetServiceWorkerContext(), storage_partition_impl_->GetHostZoomLevelContext(), @@ -934,7 +938,7 @@ AddFilter(new IndexedDBDispatcherHost( GetID(), storage_partition_impl_->GetURLRequestContext(), storage_partition_impl_->GetIndexedDBContext(), - ChromeBlobStorageContext::GetFor(browser_context))); + blob_storage_context.get())); gpu_message_filter_ = new GpuMessageFilter(GetID()); AddFilter(gpu_message_filter_); @@ -957,8 +961,7 @@ AddFilter(new FileAPIMessageFilter( GetID(), storage_partition_impl_->GetURLRequestContext(), storage_partition_impl_->GetFileSystemContext(), - ChromeBlobStorageContext::GetFor(browser_context), - StreamContext::GetFor(browser_context))); + blob_storage_context.get(), StreamContext::GetFor(browser_context))); AddFilter(new FileUtilitiesMessageFilter(GetID())); AddFilter(new MimeRegistryMessageFilter()); AddFilter( @@ -986,8 +989,9 @@ base::Bind(&GetRequestContext, request_context, media_request_context, RESOURCE_TYPE_SUB_RESOURCE)); - AddFilter( - new WebSocketDispatcherHost(GetID(), websocket_request_context_callback)); + AddFilter(new WebSocketDispatcherHost( + GetID(), websocket_request_context_callback, blob_storage_context.get(), + storage_partition_impl_)); message_port_message_filter_ = new MessagePortMessageFilter( base::Bind(&RenderWidgetHelper::GetNextRoutingID,
diff --git a/content/browser/renderer_host/render_process_host_impl.h b/content/browser/renderer_host/render_process_host_impl.h index 7eae497..78190a50 100644 --- a/content/browser/renderer_host/render_process_host_impl.h +++ b/content/browser/renderer_host/render_process_host_impl.h
@@ -13,6 +13,7 @@ #include <string> #include "base/macros.h" +#include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "base/observer_list.h" #include "base/process/process.h"
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc index 197e58a..ae1ef2e 100644 --- a/content/browser/renderer_host/render_widget_host_impl.cc +++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -1301,10 +1301,10 @@ } void RenderWidgetHostImpl::OnSelectionChanged(const base::string16& text, - size_t offset, + uint32_t offset, const gfx::Range& range) { if (view_) - view_->SelectionChanged(text, offset, range); + view_->SelectionChanged(text, static_cast<size_t>(offset), range); } void RenderWidgetHostImpl::OnSelectionBoundsChanged(
diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h index 820f0e2..f14edda8 100644 --- a/content/browser/renderer_host/render_widget_host_impl.h +++ b/content/browser/renderer_host/render_widget_host_impl.h
@@ -592,7 +592,7 @@ gfx::NativeViewId dummy_activation_window); #endif void OnSelectionChanged(const base::string16& text, - size_t offset, + uint32_t offset, const gfx::Range& range); void OnSelectionBoundsChanged( const ViewHostMsg_SelectionBounds_Params& params);
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc index e41aa3e4..ddb0f0c 100644 --- a/content/browser/renderer_host/render_widget_host_view_android.cc +++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -730,15 +730,15 @@ if (!result.succeeded) return false; - blink::WebTouchEvent web_event = - ui::CreateWebTouchEventFromMotionEvent(event, result.did_generate_scroll); + blink::WebTouchEvent web_event = ui::CreateWebTouchEventFromMotionEvent( + event, result.moved_beyond_slop_region); host_->ForwardTouchEventWithLatencyInfo(web_event, ui::LatencyInfo()); // Send a proactive BeginFrame for this vsync to reduce scroll latency for // scroll-inducing touch events. Note that Android's Choreographer ensures // that BeginFrame requests made during ACTION_MOVE dispatch will be honored // in the same vsync phase. - if (observing_root_window_ && result.did_generate_scroll) + if (observing_root_window_ && result.moved_beyond_slop_region) RequestVSyncUpdate(BEGIN_FRAME); return true;
diff --git a/content/browser/renderer_host/sandbox_ipc_linux.h b/content/browser/renderer_host/sandbox_ipc_linux.h index a11a878..5a487ef 100644 --- a/content/browser/renderer_host/sandbox_ipc_linux.h +++ b/content/browser/renderer_host/sandbox_ipc_linux.h
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// http://code.google.com/p/chromium/wiki/LinuxSandboxIPC +// https://chromium.googlesource.com/chromium/src/+/master/docs/linux_sandbox_ipc.md #ifndef CONTENT_BROWSER_RENDERER_HOST_SANDBOX_IPC_LINUX_H_ #define CONTENT_BROWSER_RENDERER_HOST_SANDBOX_IPC_LINUX_H_
diff --git a/content/browser/renderer_host/text_input_client_mac_unittest.mm b/content/browser/renderer_host/text_input_client_mac_unittest.mm index aa265fca..51cb7893 100644 --- a/content/browser/renderer_host/text_input_client_mac_unittest.mm +++ b/content/browser/renderer_host/text_input_client_mac_unittest.mm
@@ -148,7 +148,6 @@ TEST_F(TextInputClientMacTest, NotFoundCharacterIndex) { ScopedTestingThread thread(this); const NSUInteger kPreviousValue = 42; - const size_t kNotFoundValue = static_cast<size_t>(-1); // Set an arbitrary value to ensure the index is not |NSNotFound|. PostTask(FROM_HERE, @@ -159,7 +158,7 @@ new TextInputClientMessageFilter(widget()->GetProcess()->GetID())); scoped_ptr<IPC::Message> message( new TextInputClientReplyMsg_GotCharacterIndexForPoint( - widget()->GetRoutingID(), kNotFoundValue)); + widget()->GetRoutingID(), UINT32_MAX)); // Set |WTF::notFound| to the index |kTaskDelayMs| after the previous // setting. PostTask(FROM_HERE,
diff --git a/content/browser/renderer_host/text_input_client_message_filter.h b/content/browser/renderer_host/text_input_client_message_filter.h index 9400065..95780b0 100644 --- a/content/browser/renderer_host/text_input_client_message_filter.h +++ b/content/browser/renderer_host/text_input_client_message_filter.h
@@ -38,7 +38,7 @@ void OnGotStringAtPoint( const mac::AttributedStringCoder::EncodedString& encoded_string, const gfx::Point& point); - void OnGotCharacterIndexForPoint(size_t index); + void OnGotCharacterIndexForPoint(uint32_t index); void OnGotFirstRectForRange(const gfx::Rect& rect); void OnGotStringFromRange( const mac::AttributedStringCoder::EncodedString& string,
diff --git a/content/browser/renderer_host/text_input_client_message_filter.mm b/content/browser/renderer_host/text_input_client_message_filter.mm index 34e9467..56dba28 100644 --- a/content/browser/renderer_host/text_input_client_message_filter.mm +++ b/content/browser/renderer_host/text_input_client_message_filter.mm
@@ -48,14 +48,17 @@ service->GetStringAtPointReply(string, NSPointFromCGPoint(point.ToCGPoint())); } -void TextInputClientMessageFilter::OnGotCharacterIndexForPoint(size_t index) { +void TextInputClientMessageFilter::OnGotCharacterIndexForPoint(uint32_t index) { TextInputClientMac* service = TextInputClientMac::GetInstance(); // |index| could be WTF::notFound (-1) and its value is different from // NSNotFound so we need to convert it. - if (index == static_cast<size_t>(-1)) { - index = NSNotFound; + size_t char_index; + if (index == UINT32_MAX) { + char_index = NSNotFound; + } else { + char_index = index; } - service->SetCharacterIndexAndSignal(index); + service->SetCharacterIndexAndSignal(char_index); } void TextInputClientMessageFilter::OnGotFirstRectForRange(
diff --git a/content/browser/renderer_host/web_input_event_aura.cc b/content/browser/renderer_host/web_input_event_aura.cc index c4ed4615..59bc129 100644 --- a/content/browser/renderer_host/web_input_event_aura.cc +++ b/content/browser/renderer_host/web_input_event_aura.cc
@@ -399,11 +399,11 @@ break; } - webkit_event.tiltX = roundf(event.pointer_details().tilt_x()); - webkit_event.tiltY = roundf(event.pointer_details().tilt_y()); - webkit_event.force = event.pointer_details().force(); + webkit_event.tiltX = roundf(event.pointer_details().tilt_x); + webkit_event.tiltY = roundf(event.pointer_details().tilt_y); + webkit_event.force = event.pointer_details().force; webkit_event.pointerType = - EventPointerTypeToWebPointerType(event.pointer_details().pointer_type()); + EventPointerTypeToWebPointerType(event.pointer_details().pointer_type); return webkit_event; } @@ -428,11 +428,11 @@ webkit_event.wheelTicksX = webkit_event.deltaX / kPixelsPerTick; webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick; - webkit_event.tiltX = roundf(event.pointer_details().tilt_x()); - webkit_event.tiltY = roundf(event.pointer_details().tilt_y()); - webkit_event.force = event.pointer_details().force(); + webkit_event.tiltX = roundf(event.pointer_details().tilt_x); + webkit_event.tiltY = roundf(event.pointer_details().tilt_y); + webkit_event.force = event.pointer_details().force; webkit_event.pointerType = - EventPointerTypeToWebPointerType(event.pointer_details().pointer_type()); + EventPointerTypeToWebPointerType(event.pointer_details().pointer_type); return webkit_event; }
diff --git a/content/browser/renderer_host/websocket_blob_sender.cc b/content/browser/renderer_host/websocket_blob_sender.cc new file mode 100644 index 0000000..8fe56fd --- /dev/null +++ b/content/browser/renderer_host/websocket_blob_sender.cc
@@ -0,0 +1,284 @@ +// Copyright 2016 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 "content/browser/renderer_host/websocket_blob_sender.h" + +#include <algorithm> +#include <ostream> +#include <utility> + +#include "base/bind.h" +#include "base/bind_helpers.h" +#include "base/callback_helpers.h" +#include "base/logging.h" +#include "base/numerics/safe_conversions.h" +#include "content/browser/renderer_host/websocket_dispatcher_host.h" +#include "content/browser/renderer_host/websocket_host.h" +#include "net/base/io_buffer.h" +#include "net/base/net_errors.h" +#include "net/websockets/websocket_channel.h" +#include "net/websockets/websocket_frame.h" +#include "storage/browser/blob/blob_data_handle.h" +#include "storage/browser/blob/blob_reader.h" +#include "storage/browser/blob/blob_storage_context.h" + +namespace content { + +namespace { + +using storage::BlobReader; +using storage::BlobDataHandle; +using storage::BlobStorageContext; + +// This must be smaller than the send quota high water mark or this class will +// never send anything. +const int kMinimumNonFinalFrameSize = 8 * 1024; + +// The IOBuffer has a fixed size for simplicity. +const size_t kBufferSize = 128 * 1024; + +} // namespace + +// This is needed to make DCHECK_EQ(), etc. compile. +std::ostream& operator<<(std::ostream& os, WebSocketBlobSender::State state) { + static const char* const kStateStrings[] = { + "NONE", + "READ_SIZE", + "READ_SIZE_COMPLETE", + "WAIT_FOR_QUOTA", + "WAIT_FOR_QUOTA_COMPLETE", + "READ", + "READ_COMPLETE", + }; + if (state < WebSocketBlobSender::State::NONE || + state > WebSocketBlobSender::State::READ_COMPLETE) { + return os << "Bad State (" << static_cast<int>(state) << ")"; + } + return os << kStateStrings[static_cast<int>(state)]; +} + +WebSocketBlobSender::WebSocketBlobSender(scoped_ptr<Channel> channel) + : channel_(std::move(channel)) {} + +WebSocketBlobSender::~WebSocketBlobSender() {} + +int WebSocketBlobSender::Start( + const std::string& uuid, + uint64_t expected_size, + BlobStorageContext* context, + storage::FileSystemContext* file_system_context, + base::SingleThreadTaskRunner* file_task_runner, + net::WebSocketEventInterface::ChannelState* channel_state, + const net::CompletionCallback& callback) { + DCHECK(context); + DCHECK(channel_state); + DCHECK(!reader_); + scoped_ptr<storage::BlobDataHandle> data_handle( + context->GetBlobDataFromUUID(uuid)); + if (!data_handle) + return net::ERR_INVALID_HANDLE; + reader_ = data_handle->CreateReader(file_system_context, file_task_runner); + expected_size_ = expected_size; + next_state_ = State::READ_SIZE; + int rv = DoLoop(net::OK, channel_state); + if (*channel_state == net::WebSocketEventInterface::CHANNEL_ALIVE && + rv == net::ERR_IO_PENDING) { + callback_ = callback; + } + return rv; +} + +void WebSocketBlobSender::OnNewSendQuota() { + if (next_state_ == State::WAIT_FOR_QUOTA) + DoLoopAsync(net::OK); + // |this| may be deleted. +} + +uint64_t WebSocketBlobSender::ActualSize() const { + return reader_->total_size(); +} + +void WebSocketBlobSender::OnReadComplete(int rv) { + DCHECK_EQ(State::READ_COMPLETE, next_state_); + DoLoopAsync(rv); + // |this| may be deleted. +} + +void WebSocketBlobSender::OnSizeCalculated(int rv) { + DCHECK_EQ(State::READ_SIZE_COMPLETE, next_state_); + DoLoopAsync(rv); + // |this| may be deleted. +} + +int WebSocketBlobSender::DoLoop(int result, + Channel::ChannelState* channel_state) { + DCHECK_NE(State::NONE, next_state_); + int rv = result; + do { + State state = next_state_; + next_state_ = State::NONE; + switch (state) { + case State::READ_SIZE: + DCHECK_EQ(net::OK, rv); + rv = DoReadSize(); + break; + + case State::READ_SIZE_COMPLETE: + rv = DoReadSizeComplete(rv); + break; + + case State::WAIT_FOR_QUOTA: + DCHECK_EQ(net::OK, rv); + rv = DoWaitForQuota(); + break; + + case State::WAIT_FOR_QUOTA_COMPLETE: + DCHECK_EQ(net::OK, rv); + rv = DoWaitForQuotaComplete(); + break; + + case State::READ: + DCHECK_EQ(net::OK, rv); + rv = DoRead(); + break; + + case State::READ_COMPLETE: + rv = DoReadComplete(rv, channel_state); + break; + + default: + NOTREACHED(); + break; + } + } while (*channel_state != net::WebSocketEventInterface::CHANNEL_DELETED && + rv != net::ERR_IO_PENDING && next_state_ != State::NONE); + return rv; +} + +void WebSocketBlobSender::DoLoopAsync(int result) { + Channel::ChannelState channel_state = + net::WebSocketEventInterface::CHANNEL_ALIVE; + int rv = DoLoop(result, &channel_state); + if (channel_state == net::WebSocketEventInterface::CHANNEL_ALIVE && + rv != net::ERR_IO_PENDING) { + ResetAndReturn(&callback_).Run(rv); + } + // |this| may be deleted. +} + +int WebSocketBlobSender::DoReadSize() { + next_state_ = State::READ_SIZE_COMPLETE; + // This use of base::Unretained() is safe because BlobReader cannot call the + // callback after it has been destroyed, and it is owned by this object. + BlobReader::Status status = reader_->CalculateSize(base::Bind( + &WebSocketBlobSender::OnSizeCalculated, base::Unretained(this))); + switch (status) { + case BlobReader::Status::NET_ERROR: + return reader_->net_error(); + + case BlobReader::Status::IO_PENDING: + return net::ERR_IO_PENDING; + + case BlobReader::Status::DONE: + return net::OK; + } + NOTREACHED(); + return net::ERR_UNEXPECTED; +} + +int WebSocketBlobSender::DoReadSizeComplete(int result) { + if (result < 0) + return result; + if (reader_->total_size() != expected_size_) + return net::ERR_UPLOAD_FILE_CHANGED; + bytes_left_ = expected_size_; + // The result of the call to std::min() must fit inside a size_t because + // kBufferSize is type size_t. + size_t buffer_size = static_cast<size_t>( + std::min(bytes_left_, base::strict_cast<uint64_t>(kBufferSize))); + buffer_ = new net::IOBuffer(buffer_size); + next_state_ = State::WAIT_FOR_QUOTA; + return net::OK; +} + +// The WAIT_FOR_QUOTA state has a self-edge; it will wait in this state until +// there is enough quota to send some data. +int WebSocketBlobSender::DoWaitForQuota() { + size_t quota = channel_->GetSendQuota(); + if (kMinimumNonFinalFrameSize <= quota || bytes_left_ <= quota) { + next_state_ = State::WAIT_FOR_QUOTA_COMPLETE; + return net::OK; + } + next_state_ = State::WAIT_FOR_QUOTA; + return net::ERR_IO_PENDING; +} + +// State::WAIT_FOR_QUOTA_COMPLETE exists just to give the state machine the +// expected shape. It should be mostly optimised out. +int WebSocketBlobSender::DoWaitForQuotaComplete() { + next_state_ = State::READ; + return net::OK; +} + +int WebSocketBlobSender::DoRead() { + next_state_ = State::READ_COMPLETE; + size_t quota = channel_->GetSendQuota(); + // |desired_bytes| must fit in a size_t because |quota| is of type + // size_t and so cannot be larger than its maximum value. + size_t desired_bytes = + static_cast<size_t>(std::min(bytes_left_, static_cast<uint64_t>(quota))); + + // For simplicity this method only reads as many bytes as are currently + // needed. + size_t bytes_to_read = std::min(desired_bytes, kBufferSize); + int bytes_read = 0; + DCHECK(reader_); + DCHECK(buffer_); + + // This use of base::Unretained is safe because the BlobReader object won't + // call the callback after it has been destroyed, and it belongs to this + // object. + BlobReader::Status status = reader_->Read( + buffer_.get(), bytes_to_read, &bytes_read, + base::Bind(&WebSocketBlobSender::OnReadComplete, base::Unretained(this))); + + switch (status) { + case BlobReader::Status::NET_ERROR: + return reader_->net_error(); + + case BlobReader::Status::IO_PENDING: + return net::ERR_IO_PENDING; + + case BlobReader::Status::DONE: + return bytes_read; + } + NOTREACHED(); + return net::ERR_UNEXPECTED; +} + +int WebSocketBlobSender::DoReadComplete(int result, + Channel::ChannelState* channel_state) { + if (result < 0) + return result; + DCHECK_GE(channel_->GetSendQuota(), static_cast<size_t>(result)); + uint64_t bytes_read = static_cast<uint64_t>(result); + DCHECK_GE(bytes_left_, bytes_read); + bytes_left_ -= bytes_read; + bool fin = bytes_left_ == 0; + std::vector<char> data(buffer_->data(), buffer_->data() + bytes_read); + DCHECK(fin || data.size() > 0u) << "Non-final frames should be non-empty"; + *channel_state = channel_->SendFrame(fin, data); + if (*channel_state == net::WebSocketEventInterface::CHANNEL_DELETED) { + // |this| is deleted. + return net::ERR_CONNECTION_RESET; + } + + // It is important not to set next_state_ until after the call to SendFrame() + // because SendFrame() will sometimes call OnNewSendQuota() synchronously. + if (!fin) + next_state_ = State::WAIT_FOR_QUOTA; + return net::OK; +} + +} // namespace content
diff --git a/content/browser/renderer_host/websocket_blob_sender.h b/content/browser/renderer_host/websocket_blob_sender.h new file mode 100644 index 0000000..6dcfe732 --- /dev/null +++ b/content/browser/renderer_host/websocket_blob_sender.h
@@ -0,0 +1,139 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CONTENT_BROWSER_RENDERER_HOST_WEBSOCKET_BLOB_SENDER_H_ +#define CONTENT_BROWSER_RENDERER_HOST_WEBSOCKET_BLOB_SENDER_H_ + +#include <stddef.h> +#include <stdint.h> +#include <iosfwd> +#include <string> +#include <vector> + +#include "base/macros.h" +#include "base/memory/ref_counted.h" +#include "base/memory/scoped_ptr.h" +#include "content/common/content_export.h" +#include "net/base/completion_callback.h" +#include "net/websockets/websocket_event_interface.h" + +namespace base { +class SingleThreadTaskRunner; +} + +namespace net { +class IOBuffer; +} + +namespace storage { +class BlobReader; +class BlobStorageContext; +class FileSystemContext; +} + +namespace content { + +class WebSocketHost; + +// Read the contents of a Blob and write it to a WebSocket. Single-use: a new +// object must be created each time a Blob is sent. Destroying the object +// cancels all pending operations. +class CONTENT_EXPORT WebSocketBlobSender final { + public: + // An abstraction of the WebSocketChannel this object will send frames to. + class Channel { + public: + using ChannelState = net::WebSocketEventInterface::ChannelState; + + Channel() {} + virtual ~Channel() {} + + // The currently available quota for sending. It must not decrease without + // SendFrame() being called. + virtual size_t GetSendQuota() const = 0; + + // Send a binary frame. |fin| is true for the final frame of the message. + // |data| is the contents of the frame. data.size() must be less than + // GetSendQuota(). If this call returns CHANNEL_DELETED, WebSocketBlobSender + // will assume that it has been deleted and return without calling any + // callbacks or accessing any other member data. + virtual ChannelState SendFrame(bool fin, const std::vector<char>& data) = 0; + + private: + DISALLOW_COPY_AND_ASSIGN(Channel); + }; + + // |channel| will be destroyed when this object is. + explicit WebSocketBlobSender(scoped_ptr<Channel> channel); + ~WebSocketBlobSender(); + + // Checks that the blob identified by |uuid| exists, has the size + // |expected_size| and then starts sending it via |channel_|. Returns + // ERR_IO_PENDING to indicate that |callback| will be called later with the + // result. net::OK indicates synchronous success. Any other net error code + // indicates synchronous failure. This method may result in the destruction of + // the channel, in which case |*channel_state| will be set to CHANNEL_DELETED. + int Start(const std::string& uuid, + uint64_t expected_size, + storage::BlobStorageContext* context, + storage::FileSystemContext* file_system_context, + base::SingleThreadTaskRunner* file_task_runner, + net::WebSocketEventInterface::ChannelState* channel_state, + const net::CompletionCallback& callback); + + // Sends more data if the object was waiting for quota and the new value of + // GetSendQuota() is large enough. + void OnNewSendQuota(); + + uint64_t expected_size() const { return expected_size_; } + + // ActualSize() should only be called after completion: ie. Start() returned a + // value other than ERR_IO_PENDING or |callback_| has been called. + uint64_t ActualSize() const; + + private: + // State proceeds through READ_SIZE and READ_SIZE_COMPLETE, then + // loops WAIT_FOR_QUOTA -> WAIT_FOR_QUOTA_COMPLETE -> READ + // -> READ_COMPLETE -> WAIT_FOR_QUOTA until the Blob is completely + // sent. + enum class State { + NONE = 0, + READ_SIZE, + READ_SIZE_COMPLETE, + WAIT_FOR_QUOTA, + WAIT_FOR_QUOTA_COMPLETE, + READ, + READ_COMPLETE, + }; + + // This is needed to make DCHECK_EQ(), etc. compile. + friend std::ostream& operator<<(std::ostream& os, State state); + + void OnReadComplete(int rv); + void OnSizeCalculated(int rv); + // |channel_state| should point to CHANNEL_ALIVE when called. If it is + // CHANNEL_DELETED on return, the object has been deleted. + int DoLoop(int result, Channel::ChannelState* channel_state); + void DoLoopAsync(int result); + int DoReadSize(); + int DoReadSizeComplete(int result); + int DoWaitForQuota(); + int DoWaitForQuotaComplete(); + int DoRead(); + int DoReadComplete(int result, Channel::ChannelState* channel_state); + + State next_state_ = State::NONE; + uint64_t expected_size_ = 0; + uint64_t bytes_left_ = 0; + net::CompletionCallback callback_; + scoped_refptr<net::IOBuffer> buffer_; + scoped_ptr<storage::BlobReader> reader_; + const scoped_ptr<Channel> channel_; + + DISALLOW_COPY_AND_ASSIGN(WebSocketBlobSender); +}; + +} // namespace content + +#endif // CONTENT_BROWSER_RENDERER_HOST_WEBSOCKET_BLOB_SENDER_H_
diff --git a/content/browser/renderer_host/websocket_blob_sender_unittest.cc b/content/browser/renderer_host/websocket_blob_sender_unittest.cc new file mode 100644 index 0000000..fe2f936 --- /dev/null +++ b/content/browser/renderer_host/websocket_blob_sender_unittest.cc
@@ -0,0 +1,446 @@ +// Copyright 2016 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 "content/browser/renderer_host/websocket_blob_sender.h" + +#include <string.h> + +#include "base/bind.h" +#include "base/bind_helpers.h" +#include "base/callback.h" +#include "base/files/file.h" +#include "base/files/file_path.h" +#include "base/files/file_util.h" +#include "base/files/scoped_temp_dir.h" +#include "base/location.h" +#include "base/memory/weak_ptr.h" +#include "base/message_loop/message_loop.h" +#include "base/run_loop.h" +#include "base/task_runner.h" +#include "base/time/time.h" +#include "content/browser/fileapi/chrome_blob_storage_context.h" +#include "content/public/browser/blob_handle.h" +#include "content/public/browser/browser_thread.h" +#include "content/public/browser/storage_partition.h" +#include "content/public/test/test_browser_context.h" +#include "content/public/test/test_browser_thread_bundle.h" +#include "net/base/completion_callback.h" +#include "net/base/net_errors.h" +#include "net/base/test_completion_callback.h" +#include "storage/common/fileapi/file_system_types.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "url/gurl.h" + +namespace content { + +namespace { + +const char kDummyUrl[] = "http://www.example.com/"; +const char kBanana[] = "banana"; + +// This is small so that the tests do not waste too much time just copying bytes +// around. But it has to be larger than kMinimumNonFinalFrameSize defined in +// websocket_blob_sender.cc. +const size_t kInitialQuota = 16 * 1024; + +using net::TestCompletionCallback; + +// A fake channel for testing. Records the contents of the message that was sent +// through it. Quota is restricted, and is refreshed asynchronously in response +// to calls to SendFrame(). +class FakeChannel : public WebSocketBlobSender::Channel { + public: + // |notify_new_quota| will be run asynchronously on the current MessageLoop + // every time GetSendQuota() increases. + FakeChannel() : weak_factory_(this) {} + + // This method must be called before SendFrame() is. + void set_notify_new_quota(const base::Closure& notify_new_quota) { + notify_new_quota_ = notify_new_quota; + } + + size_t GetSendQuota() const override { return current_send_quota_; } + + ChannelState SendFrame(bool fin, const std::vector<char>& data) override { + ++frames_sent_; + EXPECT_FALSE(got_fin_); + if (fin) + got_fin_ = true; + EXPECT_LE(data.size(), current_send_quota_); + message_.insert(message_.end(), data.begin(), data.end()); + current_send_quota_ -= data.size(); + base::MessageLoop::current()->PostTask( + FROM_HERE, + base::Bind(&FakeChannel::RefreshQuota, weak_factory_.GetWeakPtr())); + return net::WebSocketEventInterface::CHANNEL_ALIVE; + } + + bool got_fin() const { return got_fin_; } + + int frames_sent() const { return frames_sent_; } + + const std::vector<char>& message() const { return message_; } + + private: + void RefreshQuota() { + if (current_send_quota_ == kInitialQuota) + return; + current_send_quota_ = kInitialQuota; + DCHECK(!notify_new_quota_.is_null()); + notify_new_quota_.Run(); + } + + base::Closure notify_new_quota_; + size_t current_send_quota_ = kInitialQuota; + int frames_sent_ = 0; + bool got_fin_ = false; + std::vector<char> message_; + base::WeakPtrFactory<FakeChannel> weak_factory_; +}; + +class WebSocketBlobSenderTest : public ::testing::Test { + protected: + // The Windows implementation of net::FileStream::Context requires a real IO + // MessageLoop. + WebSocketBlobSenderTest() + : threads_(TestBrowserThreadBundle::IO_MAINLOOP), + chrome_blob_storage_context_( + ChromeBlobStorageContext::GetFor(&browser_context_)), + fake_channel_(nullptr), + sender_() {} + ~WebSocketBlobSenderTest() override {} + + void SetUp() override { + // ChromeBlobStorageContext::GetFor() does some work asynchronously. + base::RunLoop().RunUntilIdle(); + SetUpSender(); + } + + // This method can be overriden to use a different channel implementation. + virtual void SetUpSender() { + fake_channel_ = new FakeChannel; + sender_.reset(new WebSocketBlobSender(make_scoped_ptr(fake_channel_))); + fake_channel_->set_notify_new_quota(base::Bind( + &WebSocketBlobSender::OnNewSendQuota, base::Unretained(sender_.get()))); + } + + storage::BlobStorageContext* context() { + return chrome_blob_storage_context_->context(); + } + + storage::FileSystemContext* GetFileSystemContext() { + StoragePartition* partition = BrowserContext::GetStoragePartitionForSite( + &browser_context_, GURL(kDummyUrl)); + return partition->GetFileSystemContext(); + } + + // |string| is copied. + scoped_ptr<BlobHandle> CreateMemoryBackedBlob(const char* string) { + scoped_ptr<BlobHandle> handle = + chrome_blob_storage_context_->CreateMemoryBackedBlob(string, + strlen(string)); + EXPECT_TRUE(handle); + return handle; + } + + // Call sender_.Start() with the other parameters filled in appropriately for + // this test fixture. + int Start(const std::string& uuid, + uint64_t expected_size, + const net::CompletionCallback& callback) { + net::WebSocketEventInterface::ChannelState channel_state = + net::WebSocketEventInterface::CHANNEL_ALIVE; + return sender_->Start( + uuid, expected_size, context(), GetFileSystemContext(), + BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE).get(), + &channel_state, callback); + } + + void NotCalledCallbackImpl(int rv) { + ADD_FAILURE() + << "Callback that should not be called was called with argument " << rv; + } + + net::CompletionCallback NotCalled() { + return base::Bind(&WebSocketBlobSenderTest::NotCalledCallbackImpl, + base::Unretained(this)); + } + + void ExpectOkAndQuit(base::RunLoop* run_loop, int result) { + EXPECT_EQ(net::OK, result); + run_loop->Quit(); + } + + net::CompletionCallback ExpectOkAndQuitCallback(base::RunLoop* run_loop) { + return base::Bind(&WebSocketBlobSenderTest::ExpectOkAndQuit, + base::Unretained(this), run_loop); + } + + TestBrowserThreadBundle threads_; + TestBrowserContext browser_context_; + scoped_refptr<ChromeBlobStorageContext> chrome_blob_storage_context_; + // |fake_channel_| is owned by |sender_|. + FakeChannel* fake_channel_; + scoped_ptr<WebSocketBlobSender> sender_; +}; + +TEST_F(WebSocketBlobSenderTest, Construction) {} + +TEST_F(WebSocketBlobSenderTest, EmptyBlob) { + scoped_ptr<BlobHandle> handle = CreateMemoryBackedBlob(""); + + // The APIs allow for this to be asynchronous but that is unlikely in + // practice. + int result = Start(handle->GetUUID(), UINT64_C(0), NotCalled()); + // If this fails with result == -1, someone has changed the code to be + // asynchronous and this test should be adapted to match. + EXPECT_EQ(net::OK, result); + EXPECT_TRUE(fake_channel_->got_fin()); + EXPECT_EQ(0U, fake_channel_->message().size()); +} + +TEST_F(WebSocketBlobSenderTest, SmallBlob) { + scoped_ptr<BlobHandle> handle = CreateMemoryBackedBlob(kBanana); + + EXPECT_EQ(net::OK, Start(handle->GetUUID(), UINT64_C(6), NotCalled())); + EXPECT_TRUE(fake_channel_->got_fin()); + EXPECT_EQ(1, fake_channel_->frames_sent()); + EXPECT_EQ(std::vector<char>(kBanana, kBanana + 6), fake_channel_->message()); +} + +TEST_F(WebSocketBlobSenderTest, SizeMismatch) { + scoped_ptr<BlobHandle> handle = CreateMemoryBackedBlob(kBanana); + + EXPECT_EQ(net::ERR_UPLOAD_FILE_CHANGED, + Start(handle->GetUUID(), UINT64_C(5), NotCalled())); + EXPECT_EQ(0, fake_channel_->frames_sent()); +} + +TEST_F(WebSocketBlobSenderTest, InvalidUUID) { + EXPECT_EQ(net::ERR_INVALID_HANDLE, + Start("sandwich", UINT64_C(0), NotCalled())); +} + +TEST_F(WebSocketBlobSenderTest, LargeMessage) { + std::string message(kInitialQuota + 10, 'a'); + scoped_ptr<BlobHandle> handle = CreateMemoryBackedBlob(message.c_str()); + + base::RunLoop run_loop; + int rv = Start(handle->GetUUID(), message.size(), + ExpectOkAndQuitCallback(&run_loop)); + EXPECT_EQ(net::ERR_IO_PENDING, rv); + EXPECT_EQ(1, fake_channel_->frames_sent()); + run_loop.Run(); + EXPECT_EQ(2, fake_channel_->frames_sent()); + EXPECT_TRUE(fake_channel_->got_fin()); + std::vector<char> expected_message(message.begin(), message.end()); + EXPECT_EQ(expected_message, fake_channel_->message()); +} + +// A message exactly equal to the available quota should be sent in one frame. +TEST_F(WebSocketBlobSenderTest, ExactSizeMessage) { + std::string message(kInitialQuota, 'a'); + scoped_ptr<BlobHandle> handle = CreateMemoryBackedBlob(message.c_str()); + + EXPECT_EQ(net::OK, Start(handle->GetUUID(), message.size(), NotCalled())); + EXPECT_EQ(1, fake_channel_->frames_sent()); + EXPECT_TRUE(fake_channel_->got_fin()); + std::vector<char> expected_message(message.begin(), message.end()); + EXPECT_EQ(expected_message, fake_channel_->message()); +} + +// If the connection is closed while sending a message, the WebSocketBlobSender +// object will be destroyed. It needs to handle this case without error. +TEST_F(WebSocketBlobSenderTest, AbortedSend) { + std::string message(kInitialQuota + 10, 'a'); + scoped_ptr<BlobHandle> handle = CreateMemoryBackedBlob(message.c_str()); + + int rv = Start(handle->GetUUID(), message.size(), NotCalled()); + EXPECT_EQ(net::ERR_IO_PENDING, rv); + sender_.reset(); +} + +// Invalid file-backed blob. +TEST_F(WebSocketBlobSenderTest, InvalidFileBackedBlob) { + base::FilePath path(FILE_PATH_LITERAL( + "WebSocketBlobSentTest.InvalidFileBackedBlob.NonExistentFile")); + scoped_ptr<BlobHandle> handle = + chrome_blob_storage_context_->CreateFileBackedBlob(path, 0u, 32u, + base::Time::Now()); + EXPECT_TRUE(handle); + + TestCompletionCallback callback; + int rv = + callback.GetResult(Start(handle->GetUUID(), 5u, callback.callback())); + EXPECT_EQ(net::ERR_FILE_NOT_FOUND, rv); +} + +// A test fixture that does the additional work necessary to create working +// file-backed blobs. +class WebSocketFileBackedBlobSenderTest : public WebSocketBlobSenderTest { + protected: + void SetUp() override { + WebSocketBlobSenderTest::SetUp(); + // temp_dir_ is recursively deleted on destruction. + ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); + } + + void CreateFile(const std::string& contents, + const base::FilePath& path, + base::File::Info* info) { + ASSERT_EQ(contents.size(), static_cast<size_t>(base::WriteFile( + path, contents.data(), contents.size()))); + ASSERT_TRUE(base::GetFileInfo(path, info)); + } + + scoped_ptr<BlobHandle> CreateFileBackedBlob(const std::string& contents) { + base::FilePath path = temp_dir_.path().AppendASCII("blob.dat"); + base::File::Info info; + CreateFile(contents, path, &info); + if (HasFatalFailure()) + return nullptr; + return chrome_blob_storage_context_->CreateFileBackedBlob( + path, 0u, contents.size(), info.last_modified); + } + + base::ScopedTempDir temp_dir_; +}; + +TEST_F(WebSocketFileBackedBlobSenderTest, EmptyBlob) { + scoped_ptr<BlobHandle> handle = CreateFileBackedBlob(""); + ASSERT_TRUE(handle); + + TestCompletionCallback callback; + int result = callback.GetResult( + Start(handle->GetUUID(), UINT64_C(0), callback.callback())); + EXPECT_EQ(net::OK, result); + EXPECT_TRUE(fake_channel_->got_fin()); + EXPECT_EQ(0U, fake_channel_->message().size()); +} + +TEST_F(WebSocketFileBackedBlobSenderTest, SizeMismatch) { + scoped_ptr<BlobHandle> handle = CreateFileBackedBlob(kBanana); + ASSERT_TRUE(handle); + + TestCompletionCallback callback; + int result = Start(handle->GetUUID(), UINT64_C(8), callback.callback()); + // This test explicitly aims to test the asynchronous code path, otherwise it + // would be identical to the other SizeMismatch test above. + EXPECT_EQ(net::ERR_IO_PENDING, result); + EXPECT_EQ(net::ERR_UPLOAD_FILE_CHANGED, callback.WaitForResult()); + EXPECT_EQ(0, fake_channel_->frames_sent()); +} + +TEST_F(WebSocketFileBackedBlobSenderTest, LargeMessage) { + std::string message = "the green potato had lunch with the angry cat. "; + while (message.size() <= kInitialQuota) { + message = message + message; + } + scoped_ptr<BlobHandle> handle = CreateFileBackedBlob(message); + ASSERT_TRUE(handle); + + TestCompletionCallback callback; + int result = Start(handle->GetUUID(), message.size(), callback.callback()); + EXPECT_EQ(net::OK, callback.GetResult(result)); + std::vector<char> expected_message(message.begin(), message.end()); + EXPECT_EQ(expected_message, fake_channel_->message()); +} + +// The WebSocketBlobSender needs to handle a connection close while doing file +// IO cleanly. +TEST_F(WebSocketFileBackedBlobSenderTest, Aborted) { + scoped_ptr<BlobHandle> handle = CreateFileBackedBlob(kBanana); + + int rv = Start(handle->GetUUID(), UINT64_C(6), NotCalled()); + EXPECT_EQ(net::ERR_IO_PENDING, rv); + sender_.reset(); +} + +class DeletingFakeChannel : public WebSocketBlobSender::Channel { + public: + explicit DeletingFakeChannel( + scoped_ptr<WebSocketBlobSender>* sender_to_delete) + : sender_(sender_to_delete) {} + + size_t GetSendQuota() const override { return kInitialQuota; } + + ChannelState SendFrame(bool fin, const std::vector<char>& data) override { + sender_->reset(); + // |this| is deleted here. + return net::WebSocketEventInterface::CHANNEL_DELETED; + } + + private: + scoped_ptr<WebSocketBlobSender>* sender_; +}; + +class WebSocketBlobSenderDeletingTest : public WebSocketBlobSenderTest { + protected: + void SetUpSender() override { + sender_.reset(new WebSocketBlobSender( + make_scoped_ptr(new DeletingFakeChannel(&sender_)))); + } +}; + +// This test only does something useful when run under AddressSanitizer or a +// similar tool that can detect use-after-free bugs. +TEST_F(WebSocketBlobSenderDeletingTest, SenderDeleted) { + scoped_ptr<BlobHandle> handle = CreateMemoryBackedBlob(kBanana); + + EXPECT_EQ(net::ERR_CONNECTION_RESET, + Start(handle->GetUUID(), UINT64_C(6), NotCalled())); + EXPECT_FALSE(sender_); +} + +// SendFrame() calls OnSendNewQuota() synchronously while filling the operating +// system's socket write buffer. The purpose of this Channel implementation is +// to verify that the synchronous case works correctly. +class SynchronousFakeChannel : public WebSocketBlobSender::Channel { + public: + // This method must be called before SendFrame() is. + void set_notify_new_quota(const base::Closure& notify_new_quota) { + notify_new_quota_ = notify_new_quota; + } + + size_t GetSendQuota() const override { return kInitialQuota; } + + ChannelState SendFrame(bool fin, const std::vector<char>& data) override { + message_.insert(message_.end(), data.begin(), data.end()); + notify_new_quota_.Run(); + return net::WebSocketEventInterface::CHANNEL_ALIVE; + } + + const std::vector<char>& message() const { return message_; } + + private: + base::Closure notify_new_quota_; + std::vector<char> message_; +}; + +class WebSocketBlobSenderSynchronousTest : public WebSocketBlobSenderTest { + protected: + void SetUpSender() override { + synchronous_fake_channel_ = new SynchronousFakeChannel; + sender_.reset( + new WebSocketBlobSender(make_scoped_ptr(synchronous_fake_channel_))); + synchronous_fake_channel_->set_notify_new_quota(base::Bind( + &WebSocketBlobSender::OnNewSendQuota, base::Unretained(sender_.get()))); + } + + SynchronousFakeChannel* synchronous_fake_channel_ = nullptr; +}; + +TEST_F(WebSocketBlobSenderSynchronousTest, LargeMessage) { + std::string message(kInitialQuota + 10, 'a'); + scoped_ptr<BlobHandle> handle = CreateMemoryBackedBlob(message.c_str()); + + int rv = Start(handle->GetUUID(), message.size(), NotCalled()); + EXPECT_EQ(net::OK, rv); + std::vector<char> expected_message(message.begin(), message.end()); + EXPECT_EQ(expected_message, synchronous_fake_channel_->message()); +} + +} // namespace + +} // namespace content
diff --git a/content/browser/renderer_host/websocket_dispatcher_host.cc b/content/browser/renderer_host/websocket_dispatcher_host.cc index 0cdf6638..e704900 100644 --- a/content/browser/renderer_host/websocket_dispatcher_host.cc +++ b/content/browser/renderer_host/websocket_dispatcher_host.cc
@@ -6,6 +6,7 @@ #include <stddef.h> +#include <algorithm> #include <string> #include <vector> @@ -15,6 +16,7 @@ #include "base/rand_util.h" #include "base/stl_util.h" #include "content/browser/child_process_security_policy_impl.h" +#include "content/browser/fileapi/chrome_blob_storage_context.h" #include "content/browser/renderer_host/websocket_host.h" #include "content/common/websocket_messages.h" @@ -35,7 +37,9 @@ WebSocketDispatcherHost::WebSocketDispatcherHost( int process_id, - const GetRequestContextCallback& get_context_callback) + const GetRequestContextCallback& get_context_callback, + ChromeBlobStorageContext* blob_storage_context, + StoragePartition* storage_partition) : BrowserMessageFilter(WebSocketMsgStart), process_id_(process_id), get_context_callback_(get_context_callback), @@ -46,7 +50,9 @@ num_current_succeeded_connections_(0), num_previous_succeeded_connections_(0), num_current_failed_connections_(0), - num_previous_failed_connections_(0) {} + num_previous_failed_connections_(0), + blob_storage_context_(blob_storage_context), + storage_partition_(storage_partition) {} WebSocketDispatcherHost::WebSocketDispatcherHost( int process_id, @@ -60,7 +66,8 @@ num_current_succeeded_connections_(0), num_previous_succeeded_connections_(0), num_current_failed_connections_(0), - num_previous_failed_connections_(0) {} + num_previous_failed_connections_(0), + storage_partition_(nullptr) {} WebSocketHost* WebSocketDispatcherHost::CreateWebSocketHost( int routing_id, @@ -72,6 +79,7 @@ bool WebSocketDispatcherHost::OnMessageReceived(const IPC::Message& message) { switch (message.type()) { case WebSocketHostMsg_AddChannelRequest::ID: + case WebSocketHostMsg_SendBlob::ID: case WebSocketMsg_SendFrame::ID: case WebSocketMsg_FlowControl::ID: case WebSocketMsg_DropChannel::ID: @@ -95,9 +103,10 @@ return true; // We handled the message (by ignoring it). } if (num_pending_connections_ >= kMaxPendingWebSocketConnections) { - if(!Send(new WebSocketMsg_NotifyFailure(routing_id, - "Error in connection establishment: net::ERR_INSUFFICIENT_RESOURCES" - ))) { + if (!Send(new WebSocketMsg_NotifyFailure( + routing_id, + "Error in connection establishment: " + "net::ERR_INSUFFICIENT_RESOURCES"))) { DVLOG(1) << "Sending of message type " << "WebSocketMsg_NotifyFailure failed."; } @@ -127,6 +136,12 @@ return policy->CanReadRawCookies(process_id_); } +storage::BlobStorageContext* WebSocketDispatcherHost::blob_storage_context() + const { + DCHECK(blob_storage_context_); + return blob_storage_context_->context(); +} + WebSocketHost* WebSocketDispatcherHost::GetHost(int routing_id) const { WebSocketHostTable::const_iterator it = hosts_.find(routing_id); return it == hosts_.end() ? NULL : it->second; @@ -202,6 +217,10 @@ return WEBSOCKET_HOST_DELETED; } +WebSocketHostState WebSocketDispatcherHost::BlobSendComplete(int routing_id) { + return SendOrDrop(new WebSocketMsg_BlobSendComplete(routing_id)); +} + WebSocketHostState WebSocketDispatcherHost::DoDropChannel( int routing_id, bool was_clean,
diff --git a/content/browser/renderer_host/websocket_dispatcher_host.h b/content/browser/renderer_host/websocket_dispatcher_host.h index 56c5f3a..5d5c804 100644 --- a/content/browser/renderer_host/websocket_dispatcher_host.h +++ b/content/browser/renderer_host/websocket_dispatcher_host.h
@@ -13,6 +13,7 @@ #include "base/compiler_specific.h" #include "base/containers/hash_tables.h" #include "base/macros.h" +#include "base/memory/ref_counted.h" #include "base/time/time.h" #include "base/timer/timer.h" #include "content/common/content_export.h" @@ -23,8 +24,14 @@ class URLRequestContext; } // namespace net +namespace storage { +class BlobStorageContext; +} + namespace content { +class ChromeBlobStorageContext; +class StoragePartition; struct WebSocketHandshakeRequest; struct WebSocketHandshakeResponse; class WebSocketHost; @@ -49,9 +56,10 @@ WEBSOCKET_HOST_DELETED }; - WebSocketDispatcherHost( - int process_id, - const GetRequestContextCallback& get_context_callback); + WebSocketDispatcherHost(int process_id, + const GetRequestContextCallback& get_context_callback, + ChromeBlobStorageContext* blob_storage_context, + StoragePartition* storage_partition); // BrowserMessageFilter: bool OnMessageReceived(const IPC::Message& message) override; @@ -96,6 +104,8 @@ int routing_id, const std::string& message) WARN_UNUSED_RESULT; + WebSocketHostState BlobSendComplete(int routing_id); + // Sends a WebSocketMsg_DropChannel IPC and deletes and unregisters the // channel. WebSocketHostState DoDropChannel(int routing_id, @@ -109,6 +119,13 @@ int render_process_id() const { return process_id_; } + // Returns a BlobStorageContext associated with this object's render process. + // The pointer will be valid for as long this object is. + storage::BlobStorageContext* blob_storage_context() const; + + // Returns the StoragePartition associated with this render process. + StoragePartition* storage_partition() const { return storage_partition_; } + protected: // For testing. Specify a factory method that creates mock version of // WebSocketHost. @@ -181,6 +198,12 @@ int64_t num_current_failed_connections_; int64_t num_previous_failed_connections_; + // Needed to read from blobs for browser-side blob sending. + const scoped_refptr<const ChromeBlobStorageContext> blob_storage_context_; + + // Needed to access to the StoragePartition for browser-side blob sending. + StoragePartition* const storage_partition_; + DISALLOW_COPY_AND_ASSIGN(WebSocketDispatcherHost); };
diff --git a/content/browser/renderer_host/websocket_host.cc b/content/browser/renderer_host/websocket_host.cc index d578145..88c333a 100644 --- a/content/browser/renderer_host/websocket_host.cc +++ b/content/browser/renderer_host/websocket_host.cc
@@ -4,20 +4,29 @@ #include "content/browser/renderer_host/websocket_host.h" +#include <inttypes.h> #include <utility> +#include "base/bind.h" +#include "base/bind_helpers.h" #include "base/location.h" +#include "base/logging.h" #include "base/macros.h" -#include "base/memory/weak_ptr.h" #include "base/single_thread_task_runner.h" #include "base/strings/string_util.h" +#include "base/strings/stringprintf.h" #include "base/thread_task_runner_handle.h" +#include "content/browser/bad_message.h" +#include "content/browser/renderer_host/websocket_blob_sender.h" #include "content/browser/renderer_host/websocket_dispatcher_host.h" #include "content/browser/ssl/ssl_error_handler.h" #include "content/browser/ssl/ssl_manager.h" #include "content/common/websocket_messages.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/render_frame_host.h" +#include "content/public/browser/storage_partition.h" #include "ipc/ipc_message_macros.h" +#include "net/base/net_errors.h" #include "net/http/http_request_headers.h" #include "net/http/http_response_headers.h" #include "net/http/http_util.h" @@ -86,12 +95,41 @@ return static_cast<ChannelState>(host_state); } +// Implementation of WebSocketBlobSender::Channel +class SendChannelImpl final : public WebSocketBlobSender::Channel { + public: + explicit SendChannelImpl(net::WebSocketChannel* channel) + : channel_(channel) {} + + // Implementation of WebSocketBlobSender::Channel + size_t GetSendQuota() const override { + return static_cast<size_t>(channel_->current_send_quota()); + } + + ChannelState SendFrame(bool fin, const std::vector<char>& data) override { + int opcode = first_frame_ ? net::WebSocketFrameHeader::kOpCodeBinary + : net::WebSocketFrameHeader::kOpCodeContinuation; + first_frame_ = false; + return channel_->SendFrame(fin, opcode, data); + } + + private: + net::WebSocketChannel* channel_; + bool first_frame_ = true; + + DISALLOW_COPY_AND_ASSIGN(SendChannelImpl); +}; + +} // namespace + // Implementation of net::WebSocketEventInterface. Receives events from our // WebSocketChannel object. Each event is translated to an IPC and sent to the // renderer or child process via WebSocketDispatcherHost. -class WebSocketEventHandler : public net::WebSocketEventInterface { +class WebSocketHost::WebSocketEventHandler final + : public net::WebSocketEventInterface { public: WebSocketEventHandler(WebSocketDispatcherHost* dispatcher, + WebSocketHost* host, int routing_id, int render_frame_id); ~WebSocketEventHandler() override; @@ -120,7 +158,7 @@ bool fatal) override; private: - class SSLErrorHandlerDelegate : public SSLErrorHandler::Delegate { + class SSLErrorHandlerDelegate final : public SSLErrorHandler::Delegate { public: SSLErrorHandlerDelegate( scoped_ptr<net::WebSocketEventInterface::SSLErrorCallbacks> callbacks); @@ -140,6 +178,7 @@ }; WebSocketDispatcherHost* const dispatcher_; + WebSocketHost* const host_; const int routing_id_; const int render_frame_id_; scoped_ptr<SSLErrorHandlerDelegate> ssl_error_handler_delegate_; @@ -147,20 +186,21 @@ DISALLOW_COPY_AND_ASSIGN(WebSocketEventHandler); }; -WebSocketEventHandler::WebSocketEventHandler( +WebSocketHost::WebSocketEventHandler::WebSocketEventHandler( WebSocketDispatcherHost* dispatcher, + WebSocketHost* host, int routing_id, int render_frame_id) : dispatcher_(dispatcher), + host_(host), routing_id_(routing_id), - render_frame_id_(render_frame_id) { -} + render_frame_id_(render_frame_id) {} -WebSocketEventHandler::~WebSocketEventHandler() { +WebSocketHost::WebSocketEventHandler::~WebSocketEventHandler() { DVLOG(1) << "WebSocketEventHandler destroyed routing_id=" << routing_id_; } -ChannelState WebSocketEventHandler::OnAddChannelResponse( +ChannelState WebSocketHost::WebSocketEventHandler::OnAddChannelResponse( const std::string& selected_protocol, const std::string& extensions) { DVLOG(3) << "WebSocketEventHandler::OnAddChannelResponse" @@ -172,7 +212,7 @@ routing_id_, selected_protocol, extensions)); } -ChannelState WebSocketEventHandler::OnDataFrame( +ChannelState WebSocketHost::WebSocketEventHandler::OnDataFrame( bool fin, net::WebSocketFrameHeader::OpCode type, const std::vector<char>& data) { @@ -180,27 +220,31 @@ << " routing_id=" << routing_id_ << " fin=" << fin << " type=" << type << " data is " << data.size() << " bytes"; - return StateCast(dispatcher_->SendFrame( - routing_id_, fin, OpCodeToMessageType(type), data)); + return StateCast(dispatcher_->SendFrame(routing_id_, fin, + OpCodeToMessageType(type), data)); } -ChannelState WebSocketEventHandler::OnClosingHandshake() { +ChannelState WebSocketHost::WebSocketEventHandler::OnClosingHandshake() { DVLOG(3) << "WebSocketEventHandler::OnClosingHandshake" << " routing_id=" << routing_id_; return StateCast(dispatcher_->NotifyClosingHandshake(routing_id_)); } -ChannelState WebSocketEventHandler::OnFlowControl(int64_t quota) { +ChannelState WebSocketHost::WebSocketEventHandler::OnFlowControl( + int64_t quota) { DVLOG(3) << "WebSocketEventHandler::OnFlowControl" << " routing_id=" << routing_id_ << " quota=" << quota; + if (host_->blob_sender_) + host_->blob_sender_->OnNewSendQuota(); return StateCast(dispatcher_->SendFlowControl(routing_id_, quota)); } -ChannelState WebSocketEventHandler::OnDropChannel(bool was_clean, - uint16_t code, - const std::string& reason) { +ChannelState WebSocketHost::WebSocketEventHandler::OnDropChannel( + bool was_clean, + uint16_t code, + const std::string& reason) { DVLOG(3) << "WebSocketEventHandler::OnDropChannel" << " routing_id=" << routing_id_ << " was_clean=" << was_clean << " code=" << code << " reason=\"" << reason << "\""; @@ -209,15 +253,15 @@ dispatcher_->DoDropChannel(routing_id_, was_clean, code, reason)); } -ChannelState WebSocketEventHandler::OnFailChannel(const std::string& message) { +ChannelState WebSocketHost::WebSocketEventHandler::OnFailChannel( + const std::string& message) { DVLOG(3) << "WebSocketEventHandler::OnFailChannel" - << " routing_id=" << routing_id_ - << " message=\"" << message << "\""; + << " routing_id=" << routing_id_ << " message=\"" << message << "\""; return StateCast(dispatcher_->NotifyFailure(routing_id_, message)); } -ChannelState WebSocketEventHandler::OnStartOpeningHandshake( +ChannelState WebSocketHost::WebSocketEventHandler::OnStartOpeningHandshake( scoped_ptr<net::WebSocketHandshakeRequestInfo> request) { bool should_send = dispatcher_->CanReadRawCookies(); DVLOG(3) << "WebSocketEventHandler::OnStartOpeningHandshake " @@ -237,11 +281,11 @@ request->headers.ToString(); request_to_pass.request_time = request->request_time; - return StateCast(dispatcher_->NotifyStartOpeningHandshake(routing_id_, - request_to_pass)); + return StateCast( + dispatcher_->NotifyStartOpeningHandshake(routing_id_, request_to_pass)); } -ChannelState WebSocketEventHandler::OnFinishOpeningHandshake( +ChannelState WebSocketHost::WebSocketEventHandler::OnFinishOpeningHandshake( scoped_ptr<net::WebSocketHandshakeResponseInfo> response) { bool should_send = dispatcher_->CanReadRawCookies(); DVLOG(3) << "WebSocketEventHandler::OnFinishOpeningHandshake " @@ -263,11 +307,11 @@ response->headers->raw_headers()); response_to_pass.response_time = response->response_time; - return StateCast(dispatcher_->NotifyFinishOpeningHandshake(routing_id_, - response_to_pass)); + return StateCast( + dispatcher_->NotifyFinishOpeningHandshake(routing_id_, response_to_pass)); } -ChannelState WebSocketEventHandler::OnSSLCertificateError( +ChannelState WebSocketHost::WebSocketEventHandler::OnSSLCertificateError( scoped_ptr<net::WebSocketEventInterface::SSLErrorCallbacks> callbacks, const GURL& url, const net::SSLInfo& ssl_info, @@ -284,20 +328,21 @@ return WebSocketEventInterface::CHANNEL_ALIVE; } -WebSocketEventHandler::SSLErrorHandlerDelegate::SSLErrorHandlerDelegate( - scoped_ptr<net::WebSocketEventInterface::SSLErrorCallbacks> callbacks) +WebSocketHost::WebSocketEventHandler::SSLErrorHandlerDelegate:: + SSLErrorHandlerDelegate( + scoped_ptr<net::WebSocketEventInterface::SSLErrorCallbacks> callbacks) : callbacks_(std::move(callbacks)), weak_ptr_factory_(this) {} -WebSocketEventHandler::SSLErrorHandlerDelegate::~SSLErrorHandlerDelegate() {} +WebSocketHost::WebSocketEventHandler::SSLErrorHandlerDelegate:: + ~SSLErrorHandlerDelegate() {} base::WeakPtr<SSLErrorHandler::Delegate> -WebSocketEventHandler::SSLErrorHandlerDelegate::GetWeakPtr() { +WebSocketHost::WebSocketEventHandler::SSLErrorHandlerDelegate::GetWeakPtr() { return weak_ptr_factory_.GetWeakPtr(); } -void WebSocketEventHandler::SSLErrorHandlerDelegate::CancelSSLRequest( - int error, - const net::SSLInfo* ssl_info) { +void WebSocketHost::WebSocketEventHandler::SSLErrorHandlerDelegate:: + CancelSSLRequest(int error, const net::SSLInfo* ssl_info) { DVLOG(3) << "SSLErrorHandlerDelegate::CancelSSLRequest" << " error=" << error << " cert_status=" << (ssl_info ? ssl_info->cert_status @@ -305,13 +350,12 @@ callbacks_->CancelSSLRequest(error, ssl_info); } -void WebSocketEventHandler::SSLErrorHandlerDelegate::ContinueSSLRequest() { +void WebSocketHost::WebSocketEventHandler::SSLErrorHandlerDelegate:: + ContinueSSLRequest() { DVLOG(3) << "SSLErrorHandlerDelegate::ContinueSSLRequest"; callbacks_->ContinueSSLRequest(); } -} // namespace - WebSocketHost::WebSocketHost(int routing_id, WebSocketDispatcherHost* dispatcher, net::URLRequestContext* url_request_context, @@ -337,6 +381,7 @@ bool handled = true; IPC_BEGIN_MESSAGE_MAP(WebSocketHost, message) IPC_MESSAGE_HANDLER(WebSocketHostMsg_AddChannelRequest, OnAddChannelRequest) + IPC_MESSAGE_HANDLER(WebSocketHostMsg_SendBlob, OnSendBlob) IPC_MESSAGE_HANDLER(WebSocketMsg_SendFrame, OnSendFrame) IPC_MESSAGE_HANDLER(WebSocketMsg_FlowControl, OnFlowControl) IPC_MESSAGE_HANDLER(WebSocketMsg_DropChannel, OnDropChannel) @@ -383,7 +428,8 @@ DCHECK(!channel_); scoped_ptr<net::WebSocketEventInterface> event_interface( - new WebSocketEventHandler(dispatcher_, routing_id_, render_frame_id)); + new WebSocketEventHandler(dispatcher_, this, routing_id_, + render_frame_id)); channel_.reset(new net::WebSocketChannel(std::move(event_interface), url_request_context_)); @@ -404,6 +450,41 @@ // |this| may have been deleted here. } +void WebSocketHost::OnSendBlob(const std::string& uuid, + uint64_t expected_size) { + DVLOG(3) << "WebSocketHost::OnSendBlob" + << " routing_id=" << routing_id_ << " uuid=" << uuid + << " expected_size=" << expected_size; + + DCHECK(channel_); + if (blob_sender_) { + bad_message::ReceivedBadMessage( + dispatcher_, bad_message::WSH_SEND_BLOB_DURING_BLOB_SEND); + return; + } + blob_sender_.reset(new WebSocketBlobSender( + make_scoped_ptr(new SendChannelImpl(channel_.get())))); + StoragePartition* partition = dispatcher_->storage_partition(); + storage::FileSystemContext* file_system_context = + partition->GetFileSystemContext(); + + net::WebSocketEventInterface::ChannelState channel_state = + net::WebSocketEventInterface::CHANNEL_ALIVE; + + // This use of base::Unretained is safe because the WebSocketBlobSender object + // is owned by this object and will not call it back after destruction. + int rv = blob_sender_->Start( + uuid, expected_size, dispatcher_->blob_storage_context(), + file_system_context, + BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE).get(), + &channel_state, + base::Bind(&WebSocketHost::BlobSendComplete, base::Unretained(this))); + if (channel_state == net::WebSocketEventInterface::CHANNEL_ALIVE && + rv != net::ERR_IO_PENDING) + BlobSendComplete(rv); + // |this| may be destroyed here. +} + void WebSocketHost::OnSendFrame(bool fin, WebSocketMessageType type, const std::vector<char>& data) { @@ -412,6 +493,11 @@ << " type=" << type << " data is " << data.size() << " bytes"; DCHECK(channel_); + if (blob_sender_) { + bad_message::ReceivedBadMessage( + dispatcher_, bad_message::WSH_SEND_FRAME_DURING_BLOB_SEND); + return; + } channel_->SendFrame(fin, MessageTypeToOpCode(type), data); } @@ -441,16 +527,52 @@ // WebSocketChannel is not yet created due to the delay introduced by // per-renderer WebSocket throttling. WebSocketDispatcherHost::WebSocketHostState result = - dispatcher_->DoDropChannel(routing_id_, - false, - net::kWebSocketErrorAbnormalClosure, - ""); + dispatcher_->DoDropChannel(routing_id_, false, + net::kWebSocketErrorAbnormalClosure, ""); DCHECK_EQ(WebSocketDispatcherHost::WEBSOCKET_HOST_DELETED, result); return; } + blob_sender_.reset(); // TODO(yhirano): Handle |was_clean| appropriately. channel_->StartClosingHandshake(code, reason); } +void WebSocketHost::BlobSendComplete(int result) { + DVLOG(3) << "WebSocketHost::BlobSendComplete" + << " routing_id=" << routing_id_ + << " result=" << net::ErrorToString(result); + + // All paths through this method must reset blob_sender_, so take ownership + // at the beginning. + scoped_ptr<WebSocketBlobSender> blob_sender(std::move(blob_sender_)); + switch (result) { + case net::OK: + ignore_result(dispatcher_->BlobSendComplete(routing_id_)); + // |this| may be destroyed here. + return; + + case net::ERR_UPLOAD_FILE_CHANGED: { + uint64_t expected_size = blob_sender->expected_size(); + uint64_t actual_size = blob_sender->ActualSize(); + if (expected_size != actual_size) { + ignore_result(dispatcher_->NotifyFailure( + routing_id_, + base::StringPrintf("Blob size mismatch; renderer size = %" PRIu64 + ", browser size = %" PRIu64, + expected_size, actual_size))); + // |this| is destroyed here. + return; + } // else fallthrough + } + + default: + ignore_result(dispatcher_->NotifyFailure( + routing_id_, + "Failed to load Blob: error code = " + net::ErrorToString(result))); + // |this| is destroyed here. + return; + } +} + } // namespace content
diff --git a/content/browser/renderer_host/websocket_host.h b/content/browser/renderer_host/websocket_host.h index efdc9d1..e95f65c 100644 --- a/content/browser/renderer_host/websocket_host.h +++ b/content/browser/renderer_host/websocket_host.h
@@ -34,6 +34,7 @@ namespace content { +class WebSocketBlobSender; class WebSocketDispatcherHost; // Host of net::WebSocketChannel. The lifetime of an instance of this class is @@ -60,6 +61,8 @@ void OnHandshakeSucceeded() { handshake_succeeded_ = true; } private: + class WebSocketEventHandler; + // Handlers for each message type, dispatched by OnMessageReceived(), as // defined in content/common/websocket_messages.h @@ -73,6 +76,8 @@ const url::Origin& origin, int render_frame_id); + void OnSendBlob(const std::string& uuid, uint64_t expected_size); + void OnSendFrame(bool fin, WebSocketMessageType type, const std::vector<char>& data); @@ -81,6 +86,11 @@ void OnDropChannel(bool was_clean, uint16_t code, const std::string& reason); + void BlobSendComplete(int result); + + // non-NULL if and only if this object is currently in "blob sending mode". + scoped_ptr<WebSocketBlobSender> blob_sender_; + // The channel we use to send events to the network. scoped_ptr<net::WebSocketChannel> channel_;
diff --git a/content/browser/resources/service_worker/serviceworker_internals.html b/content/browser/resources/service_worker/serviceworker_internals.html index 5196126..fcc23b4 100644 --- a/content/browser/resources/service_worker/serviceworker_internals.html +++ b/content/browser/resources/service_worker/serviceworker_internals.html
@@ -50,7 +50,7 @@ jsvalues=".cmdArgs:{partition_id:$partition_id,version_id:version_id}" jsdisplay="$this.running_status == 'RUNNING'">Stop</button> <button href="#" class="inspect" - jsvalues=".cmdArgs:{process_id:process_id,devtools_agent_route_id:devtools_agent_route_id}" + jsvalues=".cmdArgs:{process_host_id:process_host_id,devtools_agent_route_id:devtools_agent_route_id}" jsdisplay="$this.running_status == 'RUNNING'">Inspect</button> <span class="operation-status" style="display: none">Running...</span> </div>
diff --git a/content/browser/service_worker/service_worker_internals_ui.cc b/content/browser/service_worker/service_worker_internals_ui.cc index 217e1f1d..a585415 100644 --- a/content/browser/service_worker/service_worker_internals_ui.cc +++ b/content/browser/service_worker/service_worker_internals_ui.cc
@@ -151,6 +151,7 @@ info->SetString("version_id", base::Int64ToString(version.version_id)); info->SetInteger("process_id", static_cast<int>(GetRealProcessId(version.process_id))); + info->SetInteger("process_host_id", version.process_id); info->SetInteger("thread_id", version.thread_id); info->SetInteger("devtools_agent_route_id", version.devtools_agent_route_id); } @@ -507,11 +508,11 @@ DCHECK_CURRENTLY_ON(BrowserThread::UI); int callback_id; const DictionaryValue* cmd_args = NULL; - int process_id = 0; + int process_host_id = 0; int devtools_agent_route_id = 0; if (!args->GetInteger(0, &callback_id) || !args->GetDictionary(1, &cmd_args) || - !cmd_args->GetInteger("process_id", &process_id) || + !cmd_args->GetInteger("process_host_id", &process_host_id) || !cmd_args->GetInteger("devtools_agent_route_id", &devtools_agent_route_id)) { return; @@ -520,7 +521,8 @@ base::Bind(OperationCompleteCallback, AsWeakPtr(), callback_id); scoped_refptr<DevToolsAgentHostImpl> agent_host( ServiceWorkerDevToolsManager::GetInstance() - ->GetDevToolsAgentHostForWorker(process_id, devtools_agent_route_id)); + ->GetDevToolsAgentHostForWorker(process_host_id, + devtools_agent_route_id)); if (!agent_host.get()) { callback.Run(SERVICE_WORKER_ERROR_NOT_FOUND); return;
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index 2d47132..61bddb1 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc
@@ -2697,14 +2697,6 @@ NOTIFICATION_RESOURCE_RECEIVED_REDIRECT, Source<WebContents>(this), Details<const ResourceRedirectDetails>(&details)); - - if (IsResourceTypeFrame(details.resource_type)) { - NavigationHandleImpl* navigation_handle = - static_cast<RenderFrameHostImpl*>(render_frame_host) - ->navigation_handle(); - if (navigation_handle) - navigation_handle->DidRedirectNavigation(details.new_url); - } } void WebContentsImpl::NotifyWebContentsFocused() {
diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc index 30db92b..3cae1cc 100644 --- a/content/browser/web_contents/web_contents_view_aura.cc +++ b/content/browser/web_contents/web_contents_view_aura.cc
@@ -238,7 +238,7 @@ void WriteFileSystemFilesToPickle( const std::vector<DropData::FileSystemFileInfo>& file_system_files, base::Pickle* pickle) { - pickle->WriteSizeT(file_system_files.size()); + pickle->WriteUInt32(file_system_files.size()); for (size_t i = 0; i < file_system_files.size(); ++i) { pickle->WriteString(file_system_files[i].url.spec()); pickle->WriteInt64(file_system_files[i].size); @@ -251,12 +251,12 @@ std::vector<DropData::FileSystemFileInfo>* file_system_files) { base::PickleIterator iter(pickle); - size_t num_files = 0; - if (!iter.ReadSizeT(&num_files)) + uint32_t num_files = 0; + if (!iter.ReadUInt32(&num_files)) return false; file_system_files->resize(num_files); - for (size_t i = 0; i < num_files; ++i) { + for (uint32_t i = 0; i < num_files; ++i) { std::string url_string; int64_t size = 0; if (!iter.ReadString(&url_string) || !iter.ReadInt64(&size))
diff --git a/content/child/background_sync/background_sync_provider.cc b/content/child/background_sync/background_sync_provider.cc index d209f98..23d8b45 100644 --- a/content/child/background_sync/background_sync_provider.cc +++ b/content/child/background_sync/background_sync_provider.cc
@@ -125,25 +125,6 @@ base::Passed(std::move(callbacksPtr)))); } -void BackgroundSyncProvider::getRegistration( - const blink::WebString& tag, - blink::WebServiceWorkerRegistration* service_worker_registration, - blink::WebSyncRegistrationCallbacks* callbacks) { - DCHECK(service_worker_registration); - DCHECK(callbacks); - int64_t service_worker_registration_id = - GetServiceWorkerRegistrationId(service_worker_registration); - scoped_ptr<blink::WebSyncRegistrationCallbacks> callbacksPtr(callbacks); - - // base::Unretained is safe here, as the mojo channel will be deleted (and - // will wipe its callbacks) before 'this' is deleted. - GetBackgroundSyncServicePtr()->GetRegistration( - tag.utf8(), service_worker_registration_id, - base::Bind(&BackgroundSyncProvider::GetRegistrationCallback, - base::Unretained(this), - base::Passed(std::move(callbacksPtr)))); -} - void BackgroundSyncProvider::getRegistrations( blink::WebServiceWorkerRegistration* service_worker_registration, blink::WebSyncGetRegistrationsCallbacks* callbacks) { @@ -242,40 +223,6 @@ } } -void BackgroundSyncProvider::GetRegistrationCallback( - scoped_ptr<blink::WebSyncRegistrationCallbacks> callbacks, - BackgroundSyncError error, - const SyncRegistrationPtr& options) { - // TODO(iclelland): Determine the correct error message to return in each case - scoped_ptr<blink::WebSyncRegistration> result; - switch (error) { - case BackgroundSyncError::NONE: - if (!options.is_null()) - result = - mojo::ConvertTo<scoped_ptr<blink::WebSyncRegistration>>(options); - callbacks->onSuccess(blink::adoptWebPtr(result.release())); - break; - case BackgroundSyncError::NOT_FOUND: - callbacks->onSuccess(nullptr); - break; - case BackgroundSyncError::STORAGE: - callbacks->onError( - blink::WebSyncError(blink::WebSyncError::ErrorTypeUnknown, - "Background Sync is disabled.")); - break; - case BackgroundSyncError::NOT_ALLOWED: - // This error should never be returned from - // BackgroundSyncManager::GetRegistration - NOTREACHED(); - break; - case BackgroundSyncError::NO_SERVICE_WORKER: - callbacks->onError( - blink::WebSyncError(blink::WebSyncError::ErrorTypeUnknown, - "No service worker is active.")); - break; - } -} - void BackgroundSyncProvider::GetRegistrationsCallback( scoped_ptr<blink::WebSyncGetRegistrationsCallbacks> callbacks, BackgroundSyncError error,
diff --git a/content/child/background_sync/background_sync_provider.h b/content/child/background_sync/background_sync_provider.h index 3b9ba2a..fc76d9d 100644 --- a/content/child/background_sync/background_sync_provider.h +++ b/content/child/background_sync/background_sync_provider.h
@@ -54,10 +54,6 @@ int64_t handle_id, blink::WebServiceWorkerRegistration* service_worker_registration, blink::WebSyncUnregistrationCallbacks* callbacks) override; - void getRegistration( - const blink::WebString& tag, - blink::WebServiceWorkerRegistration* service_worker_registration, - blink::WebSyncRegistrationCallbacks* callbacks) override; void getRegistrations( blink::WebServiceWorkerRegistration* service_worker_registration, blink::WebSyncGetRegistrationsCallbacks* callbacks) override; @@ -81,10 +77,6 @@ void UnregisterCallback( scoped_ptr<blink::WebSyncUnregistrationCallbacks> callbacks, BackgroundSyncError error); - void GetRegistrationCallback( - scoped_ptr<blink::WebSyncRegistrationCallbacks> callbacks, - BackgroundSyncError error, - const SyncRegistrationPtr& options); void GetRegistrationsCallback( scoped_ptr<blink::WebSyncGetRegistrationsCallbacks> callbacks, BackgroundSyncError error,
diff --git a/content/child/blink_platform_impl.cc b/content/child/blink_platform_impl.cc index c08802d..4250879 100644 --- a/content/child/blink_platform_impl.cc +++ b/content/child/blink_platform_impl.cc
@@ -439,8 +439,7 @@ // data URLs to bypass the ResourceDispatcher. return new WebURLLoaderImpl( child_thread ? child_thread->resource_dispatcher() : NULL, - make_scoped_ptr(new scheduler::WebTaskRunnerImpl( - base::ThreadTaskRunnerHandle::Get()))); + make_scoped_ptr(currentThread()->taskRunner()->clone())); } blink::WebSocketHandle* BlinkPlatformImpl::createWebSocketHandle() { @@ -804,12 +803,6 @@ {"InspectorOverlayPage.html", IDR_INSPECTOR_OVERLAY_PAGE_HTML, ui::SCALE_FACTOR_NONE}, - {"InjectedScriptSource.js", - IDR_INSPECTOR_INJECTED_SCRIPT_SOURCE_JS, - ui::SCALE_FACTOR_NONE}, - {"DebuggerScriptSource.js", - IDR_INSPECTOR_DEBUGGER_SCRIPT_SOURCE_JS, - ui::SCALE_FACTOR_NONE}, {"DocumentExecCommand.js", IDR_PRIVATE_SCRIPT_DOCUMENTEXECCOMMAND_JS, ui::SCALE_FACTOR_NONE},
diff --git a/content/child/process_control_impl.cc b/content/child/process_control_impl.cc index f4cae6b..9f4b474 100644 --- a/content/child/process_control_impl.cc +++ b/content/child/process_control_impl.cc
@@ -22,7 +22,7 @@ void ProcessControlImpl::LoadApplication( const mojo::String& url, - mojo::InterfaceRequest<mojo::shell::mojom::Application> request, + mojo::InterfaceRequest<mojo::shell::mojom::ShellClient> request, const LoadApplicationCallback& callback) { // Only register loaders when we need it. if (!has_registered_loaders_) {
diff --git a/content/child/process_control_impl.h b/content/child/process_control_impl.h index 3b732f45..2fc8339 100644 --- a/content/child/process_control_impl.h +++ b/content/child/process_control_impl.h
@@ -10,7 +10,7 @@ #include "base/macros.h" #include "content/common/process_control.mojom.h" #include "mojo/public/cpp/bindings/interface_request.h" -#include "mojo/shell/public/interfaces/application.mojom.h" +#include "mojo/shell/public/interfaces/shell_client.mojom.h" class GURL; @@ -37,7 +37,7 @@ // ProcessControl: void LoadApplication( const mojo::String& url, - mojo::InterfaceRequest<mojo::shell::mojom::Application> request, + mojo::InterfaceRequest<mojo::shell::mojom::ShellClient> request, const LoadApplicationCallback& callback) override; private:
diff --git a/content/child/resource_dispatcher_unittest.cc b/content/child/resource_dispatcher_unittest.cc index c026295..c599773b 100644 --- a/content/child/resource_dispatcher_unittest.cc +++ b/content/child/resource_dispatcher_unittest.cc
@@ -22,7 +22,9 @@ #include "content/common/appcache_interfaces.h" #include "content/common/resource_messages.h" #include "content/common/service_worker/service_worker_types.h" +#include "content/public/child/fixed_received_data.h" #include "content/public/child/request_peer.h" +#include "content/public/child/resource_dispatcher_delegate.h" #include "content/public/common/resource_response.h" #include "net/base/net_errors.h" #include "net/http/http_response_headers.h" @@ -52,6 +54,7 @@ bool OnReceivedRedirect(const net::RedirectInfo& redirect_info, const ResourceResponseInfo& info) override { + EXPECT_FALSE(context_->cancelled); ++context_->seen_redirects; if (context_->defer_on_redirect) dispatcher_->SetDefersLoading(context_->request_id, true); @@ -59,18 +62,24 @@ } void OnReceivedResponse(const ResourceResponseInfo& info) override { + EXPECT_FALSE(context_->cancelled); EXPECT_FALSE(context_->received_response); context_->received_response = true; - if (context_->cancel_on_receive_response) + if (context_->cancel_on_receive_response) { dispatcher_->Cancel(context_->request_id); + context_->cancelled = true; + } } void OnDownloadedData(int len, int encoded_data_length) override { + EXPECT_FALSE(context_->cancelled); context_->total_downloaded_data_length += len; context_->total_encoded_data_length += encoded_data_length; } void OnReceivedData(scoped_ptr<ReceivedData> data) override { + if (context_->cancelled) + return; EXPECT_TRUE(context_->received_response); EXPECT_FALSE(context_->complete); context_->data.append(data->payload(), data->length()); @@ -83,28 +92,13 @@ const std::string& security_info, const base::TimeTicks& completion_time, int64_t total_transfer_size) override { + if (context_->cancelled) + return; EXPECT_TRUE(context_->received_response); EXPECT_FALSE(context_->complete); context_->complete = true; } - void OnReceivedCompletedResponse(const ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) override { - OnReceivedResponse(info); - if (context_->cancel_on_receive_response) - return; - if (data) - OnReceivedData(std::move(data)); - OnCompletedRequest(error_code, was_ignored_by_handler, stale_copy_in_cache, - security_info, completion_time, total_transfer_size); - } - struct Context { // True if should follow redirects, false if should cancel them. bool follow_redirects = true; @@ -127,6 +121,7 @@ int total_downloaded_data_length = 0; bool complete = false; + bool cancelled = false; int request_id = -1; }; @@ -467,6 +462,155 @@ EXPECT_FALSE(peer_context.complete); } +class TestResourceDispatcherDelegate : public ResourceDispatcherDelegate { + public: + TestResourceDispatcherDelegate() {} + ~TestResourceDispatcherDelegate() override {} + + scoped_ptr<RequestPeer> OnRequestComplete( + scoped_ptr<RequestPeer> current_peer, + ResourceType resource_type, + int error_code) override { + return current_peer; + } + + scoped_ptr<RequestPeer> OnReceivedResponse( + scoped_ptr<RequestPeer> current_peer, + const std::string& mime_type, + const GURL& url) override { + return make_scoped_ptr(new WrapperPeer(std::move(current_peer))); + } + + class WrapperPeer : public RequestPeer { + public: + explicit WrapperPeer(scoped_ptr<RequestPeer> original_peer) + : original_peer_(std::move(original_peer)) {} + + void OnUploadProgress(uint64_t position, uint64_t size) override {} + + bool OnReceivedRedirect(const net::RedirectInfo& redirect_info, + const ResourceResponseInfo& info) override { + return false; + } + + void OnReceivedResponse(const ResourceResponseInfo& info) override { + response_info_ = info; + } + + void OnDownloadedData(int len, int encoded_data_length) override {} + + void OnReceivedData(scoped_ptr<ReceivedData> data) override { + data_.append(data->payload(), data->length()); + } + + void OnCompletedRequest(int error_code, + bool was_ignored_by_handler, + bool stale_copy_in_cache, + const std::string& security_info, + const base::TimeTicks& completion_time, + int64_t total_transfer_size) override { + original_peer_->OnReceivedResponse(response_info_); + if (!data_.empty()) { + original_peer_->OnReceivedData(make_scoped_ptr( + new FixedReceivedData(data_.data(), data_.size(), -1))); + } + original_peer_->OnCompletedRequest(error_code, was_ignored_by_handler, + stale_copy_in_cache, security_info, + completion_time, total_transfer_size); + } + + private: + scoped_ptr<RequestPeer> original_peer_; + ResourceResponseInfo response_info_; + std::string data_; + + DISALLOW_COPY_AND_ASSIGN(WrapperPeer); + }; + + private: + DISALLOW_COPY_AND_ASSIGN(TestResourceDispatcherDelegate); +}; + +TEST_F(ResourceDispatcherTest, DelegateTest) { + scoped_ptr<RequestInfo> request_info(CreateRequestInfo(false)); + TestRequestPeer::Context peer_context; + StartAsync(*request_info.get(), nullptr, &peer_context); + + // Set the delegate that inserts a new peer in OnReceivedResponse. + TestResourceDispatcherDelegate delegate; + dispatcher()->set_delegate(&delegate); + + // Run a simple round-trip. + const size_t kFirstReceiveSize = 2; + ASSERT_LT(kFirstReceiveSize, strlen(kTestPageContents)); + + int id = ConsumeRequestResource(); + EXPECT_EQ(0u, queued_messages()); + + // The wrapper eats all messages until RequestComplete message is sent. + NotifyReceivedResponse(id); + NotifySetDataBuffer(id, strlen(kTestPageContents)); + NotifyDataReceived(id, std::string(kTestPageContents, kFirstReceiveSize)); + ConsumeDataReceived_ACK(id); + NotifyDataReceived(id, kTestPageContents + kFirstReceiveSize); + ConsumeDataReceived_ACK(id); + + EXPECT_FALSE(peer_context.received_response); + EXPECT_EQ(0u, queued_messages()); + + // This lets the wrapper peer pass all the messages to the original + // peer at once. + NotifyRequestComplete(id, strlen(kTestPageContents)); + + EXPECT_TRUE(peer_context.received_response); + EXPECT_EQ(kTestPageContents, peer_context.data); + EXPECT_TRUE(peer_context.complete); + EXPECT_EQ(0u, queued_messages()); +} + +TEST_F(ResourceDispatcherTest, CancelDuringCallbackWithWrapperPeer) { + scoped_ptr<RequestInfo> request_info(CreateRequestInfo(false)); + TestRequestPeer::Context peer_context; + StartAsync(*request_info.get(), nullptr, &peer_context); + peer_context.cancel_on_receive_response = true; + + // Set the delegate that inserts a new peer in OnReceivedResponse. + TestResourceDispatcherDelegate delegate; + dispatcher()->set_delegate(&delegate); + + int id = ConsumeRequestResource(); + EXPECT_EQ(0u, queued_messages()); + + // The wrapper eats all messages until RequestComplete message is sent. + NotifyReceivedResponse(id); + NotifySetDataBuffer(id, strlen(kTestPageContents)); + NotifyDataReceived(id, kTestPageContents); + ConsumeDataReceived_ACK(id); + + EXPECT_FALSE(peer_context.received_response); + EXPECT_EQ(0u, queued_messages()); + + // This lets the wrapper peer pass all the messages to the original + // peer at once, but the original peer cancels right after it receives + // the response. (This will remove pending request info from + // ResourceDispatcher while the wrapper peer is still running + // OnCompletedRequest, but it should not lead to crashes.) + NotifyRequestComplete(id, strlen(kTestPageContents)); + + EXPECT_TRUE(peer_context.received_response); + // Request should have been cancelled. + ConsumeCancelRequest(id); + EXPECT_TRUE(peer_context.cancelled); + + // Any future messages related to the request should be ignored. + NotifyDataReceived(id, kTestPageContents); + NotifyRequestComplete(id, strlen(kTestPageContents)); + + EXPECT_EQ(0u, queued_messages()); + EXPECT_EQ("", peer_context.data); + EXPECT_FALSE(peer_context.complete); +} + // Checks that redirects work as expected. TEST_F(ResourceDispatcherTest, Redirect) { scoped_ptr<RequestInfo> request_info(CreateRequestInfo(false));
diff --git a/content/child/web_url_loader_impl.cc b/content/child/web_url_loader_impl.cc index 8665166..d380c1f 100644 --- a/content/child/web_url_loader_impl.cc +++ b/content/child/web_url_loader_impl.cc
@@ -316,14 +316,6 @@ const std::string& security_info, const base::TimeTicks& completion_time, int64_t total_transfer_size); - void OnReceivedCompletedResponse(const ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size); private: friend class base::RefCounted<Context>; @@ -385,16 +377,6 @@ const base::TimeTicks& completion_time, int64_t total_transfer_size) override; - // TODO(kinuko): Deprecate this method. (crbug.com/507170) - void OnReceivedCompletedResponse(const ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) override; - private: scoped_refptr<Context> context_; DISALLOW_COPY_AND_ASSIGN(RequestPeerImpl); @@ -798,26 +780,9 @@ } } -void WebURLLoaderImpl::Context::OnReceivedCompletedResponse( - const ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) { - OnReceivedResponse(info); - if (data) - OnReceivedData(std::move(data)); - OnCompletedRequest(error_code, was_ignored_by_handler, stale_copy_in_cache, - security_info, completion_time, total_transfer_size); -} - WebURLLoaderImpl::Context::~Context() { // We must be already cancelled at this point. - // TODO(kinuko): Replace this with DCHECK once we make sure this is safe. - CHECK_LT(request_id_, 0); + DCHECK_LT(request_id_, 0); } void WebURLLoaderImpl::Context::CancelBodyStreaming() { @@ -962,20 +927,6 @@ completion_time, total_transfer_size); } -void WebURLLoaderImpl::RequestPeerImpl::OnReceivedCompletedResponse( - const ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) { - context_->OnReceivedCompletedResponse( - info, std::move(data), error_code, was_ignored_by_handler, - stale_copy_in_cache, security_info, completion_time, total_transfer_size); -} - // WebURLLoaderImpl ----------------------------------------------------------- WebURLLoaderImpl::WebURLLoaderImpl(
diff --git a/content/child/web_url_loader_impl_unittest.cc b/content/child/web_url_loader_impl_unittest.cc index 139544b2..da22c38 100644 --- a/content/child/web_url_loader_impl_unittest.cc +++ b/content/child/web_url_loader_impl_unittest.cc
@@ -14,8 +14,11 @@ #include "base/memory/weak_ptr.h" #include "base/message_loop/message_loop.h" #include "base/single_thread_task_runner.h" +#include "base/time/default_tick_clock.h" #include "base/time/time.h" +#include "components/scheduler/child/scheduler_tqm_delegate_impl.h" #include "components/scheduler/child/web_task_runner_impl.h" +#include "components/scheduler/child/worker_scheduler.h" #include "content/child/request_extra_data.h" #include "content/child/request_info.h" #include "content/child/resource_dispatcher.h" @@ -105,13 +108,11 @@ class TestWebURLLoaderClient : public blink::WebURLLoaderClient { public: - TestWebURLLoaderClient( - ResourceDispatcher* dispatcher, - scoped_refptr<base::SingleThreadTaskRunner> task_runner) - : loader_( - new WebURLLoaderImpl( - dispatcher, - make_scoped_ptr(new scheduler::WebTaskRunnerImpl(task_runner)))), + TestWebURLLoaderClient(ResourceDispatcher* dispatcher, + scoped_refptr<scheduler::TaskQueue> task_runner) + : loader_(new WebURLLoaderImpl( + dispatcher, + make_scoped_ptr(new scheduler::WebTaskRunnerImpl(task_runner)))), expect_multipart_response_(false), delete_on_receive_redirect_(false), delete_on_receive_response_(false), @@ -260,7 +261,15 @@ class WebURLLoaderImplTest : public testing::Test { public: explicit WebURLLoaderImplTest() - : client_(&dispatcher_, message_loop_.task_runner()) {} + : worker_scheduler_(scheduler::WorkerScheduler::Create( + scheduler::SchedulerTqmDelegateImpl::Create( + &message_loop_, + make_scoped_ptr(new base::DefaultTickClock())))) { + worker_scheduler_->Init(); + client_.reset(new TestWebURLLoaderClient( + &dispatcher_, worker_scheduler_->DefaultTaskRunner())); + } + ~WebURLLoaderImplTest() override {} void DoStartAsyncRequest() { @@ -307,23 +316,6 @@ EXPECT_EQ("", client()->error().domain.utf8()); } - void DoReceiveCompletedResponse() { - EXPECT_FALSE(client()->did_receive_response()); - EXPECT_EQ("", client()->received_data()); - EXPECT_FALSE(client()->did_finish()); - - peer()->OnReceivedCompletedResponse( - content::ResourceResponseInfo(), - make_scoped_ptr(new FixedReceivedData(kTestData, strlen(kTestData), - strlen(kTestData))), - net::OK, false, false, "", base::TimeTicks(), strlen(kTestData)); - - EXPECT_TRUE(client()->did_receive_response()); - EXPECT_EQ(kTestData, client()->received_data()); - EXPECT_EQ(net::OK, client()->error().reason); - EXPECT_EQ("", client()->error().domain.utf8()); - } - void DoFailRequest() { EXPECT_FALSE(client()->did_finish()); peer()->OnCompletedRequest(net::ERR_FAILED, false, false, "", @@ -367,15 +359,18 @@ EXPECT_NE(kMultipartResponse, client()->received_data()); } - TestWebURLLoaderClient* client() { return &client_; } + TestWebURLLoaderClient* client() { return client_.get(); } TestResourceDispatcher* dispatcher() { return &dispatcher_; } RequestPeer* peer() { return dispatcher()->peer(); } base::MessageLoop* message_loop() { return &message_loop_; } private: base::MessageLoop message_loop_; + // WorkerScheduler is needed because WebURLLoaderImpl needs a + // scheduler::TaskQueue. + scoped_ptr<scheduler::WorkerScheduler> worker_scheduler_; TestResourceDispatcher dispatcher_; - TestWebURLLoaderClient client_; + scoped_ptr<TestWebURLLoaderClient> client_; }; TEST_F(WebURLLoaderImplTest, Success) { @@ -405,13 +400,6 @@ EXPECT_FALSE(dispatcher()->canceled()); } -TEST_F(WebURLLoaderImplTest, ReceiveCompletedResponse) { - DoStartAsyncRequest(); - DoReceiveCompletedResponse(); - EXPECT_FALSE(dispatcher()->canceled()); - EXPECT_EQ(kTestData, client()->received_data()); -} - // The client may delete the WebURLLoader during any callback from the loader. // These tests make sure that doesn't result in a crash. TEST_F(WebURLLoaderImplTest, DeleteOnReceiveRedirect) {
diff --git a/content/child/webblobregistry_impl.cc b/content/child/webblobregistry_impl.cc index ecdc0fc..48a5739 100644 --- a/content/child/webblobregistry_impl.cc +++ b/content/child/webblobregistry_impl.cc
@@ -300,7 +300,7 @@ consolidation_.ReadMemory(consolidated_item_index, offset, chunk_size, shared_memory->memory()); sender_->Send(new BlobHostMsg_SyncAppendSharedMemory( - uuid_, shared_memory->handle(), chunk_size)); + uuid_, shared_memory->handle(), static_cast<uint32_t>(chunk_size))); data_size -= chunk_size; offset += chunk_size; }
diff --git a/content/common/OWNERS b/content/common/OWNERS index df1d46c5..566803fa 100644 --- a/content/common/OWNERS +++ b/content/common/OWNERS
@@ -72,8 +72,17 @@ # Changes to Mojo interfaces require a security review to avoid # introducing new sandbox escapes. per-file *.mojom=set noparent +per-file *.mojom=dcheng@chromium.org +per-file *.mojom=inferno@chromium.org +per-file *.mojom=jln@chromium.org +per-file *.mojom=jschuh@chromium.org +per-file *.mojom=kenrb@chromium.org +per-file *.mojom=mkwst@chromium.org +per-file *.mojom=nasko@chromium.org per-file *.mojom=palmer@chromium.org per-file *.mojom=tsepez@chromium.org +per-file *.mojom=wfh@chromium.org + # Accessibility per-file accessibility_node_data.*=dmazzoni@chromium.org
diff --git a/content/common/android/sync_compositor_messages.h b/content/common/android/sync_compositor_messages.h index f0381e5..d3a3f996 100644 --- a/content/common/android/sync_compositor_messages.h +++ b/content/common/android/sync_compositor_messages.h
@@ -25,7 +25,7 @@ SyncCompositorCommonBrowserParams(); ~SyncCompositorCommonBrowserParams(); - size_t bytes_limit; + uint32_t bytes_limit; cc::CompositorFrameAck ack; gfx::ScrollOffset root_scroll_offset; bool update_root_scroll_offset; @@ -54,7 +54,7 @@ struct SyncCompositorSetSharedMemoryParams { SyncCompositorSetSharedMemoryParams(); - size_t buffer_size; + uint32_t buffer_size; base::SharedMemoryHandle shm_handle; };
diff --git a/content/common/background_sync_service.mojom b/content/common/background_sync_service.mojom index 83b9b85..3251d45 100644 --- a/content/common/background_sync_service.mojom +++ b/content/common/background_sync_service.mojom
@@ -32,8 +32,6 @@ Register(SyncRegistration options, int64 service_worker_registration_id, bool requested_from_service_worker) => (BackgroundSyncError err, SyncRegistration options); - GetRegistration(string tag, int64 service_worker_registration_id) - => (BackgroundSyncError err, SyncRegistration? registration); GetRegistrations(int64 service_worker_registration_id) => (BackgroundSyncError err, array<SyncRegistration> registrations); Unregister(int64 handle_id, int64 service_worker_registration_id)
diff --git a/content/common/cc_messages.cc b/content/common/cc_messages.cc index ff1bfc44..df69edd 100644 --- a/content/common/cc_messages.cc +++ b/content/common/cc_messages.cc
@@ -7,6 +7,7 @@ #include <stddef.h> #include <utility> +#include "base/numerics/safe_conversions.h" #include "cc/output/compositor_frame.h" #include "cc/output/filter_operations.h" #include "cc/quads/draw_quad.h" @@ -186,7 +187,7 @@ void ParamTraits<cc::FilterOperations>::Write(base::Pickle* m, const param_type& p) { - WriteParam(m, p.size()); + WriteParam(m, base::checked_cast<uint32_t>(p.size())); for (std::size_t i = 0; i < p.size(); ++i) { WriteParam(m, p.at(i)); } @@ -195,7 +196,7 @@ bool ParamTraits<cc::FilterOperations>::Read(const base::Pickle* m, base::PickleIterator* iter, param_type* r) { - size_t count; + uint32_t count; if (!ReadParam(m, iter, &count)) return false; @@ -301,7 +302,7 @@ WriteParam(m, p.damage_rect); WriteParam(m, p.transform_to_root_target); WriteParam(m, p.has_transparent_background); - WriteParam(m, p.quad_list.size()); + WriteParam(m, base::checked_cast<uint32_t>(p.quad_list.size())); cc::SharedQuadStateList::ConstIterator shared_quad_state_iter = p.shared_quad_state_list.begin(); @@ -405,7 +406,7 @@ gfx::Rect damage_rect; gfx::Transform transform_to_root_target; bool has_transparent_background; - size_t quad_list_size; + uint32_t quad_list_size; if (!ReadParam(m, iter, &id) || !ReadParam(m, iter, &output_rect) || !ReadParam(m, iter, &damage_rect) || @@ -420,7 +421,7 @@ transform_to_root_target, has_transparent_background); - for (size_t i = 0; i < quad_list_size; ++i) { + for (uint32_t i = 0; i < quad_list_size; ++i) { cc::DrawQuad::Material material; base::PickleIterator temp_iter = *iter; if (!ReadParam(m, &temp_iter, &material)) @@ -679,10 +680,11 @@ WriteParam(m, p.device_scale_factor); WriteParam(m, p.resource_list); - WriteParam(m, p.render_pass_list.size()); + WriteParam(m, base::checked_cast<uint32_t>(p.render_pass_list.size())); for (const auto& pass : p.render_pass_list) { - WriteParam(m, pass->quad_list.size()); - WriteParam(m, pass->shared_quad_state_list.size()); + WriteParam(m, base::checked_cast<uint32_t>(pass->quad_list.size())); + WriteParam(m, base::checked_cast<uint32_t>( + pass->shared_quad_state_list.size())); WriteParam(m, *pass); } } @@ -699,21 +701,23 @@ std::set<cc::RenderPassId> pass_set; - size_t num_render_passes; + uint32_t num_render_passes; if (!ReadParam(m, iter, &p->resource_list) || !ReadParam(m, iter, &num_render_passes) || num_render_passes > kMaxRenderPasses || num_render_passes == 0) return false; - for (size_t i = 0; i < num_render_passes; ++i) { - size_t quad_list_size; - size_t shared_quad_state_list_size; + for (uint32_t i = 0; i < num_render_passes; ++i) { + uint32_t quad_list_size; + uint32_t shared_quad_state_list_size; if (!ReadParam(m, iter, &quad_list_size) || !ReadParam(m, iter, &shared_quad_state_list_size) || quad_list_size > kMaxQuadListSize || shared_quad_state_list_size > kMaxSharedQuadStateListSize) return false; scoped_ptr<cc::RenderPass> render_pass = - cc::RenderPass::Create(shared_quad_state_list_size, quad_list_size); + cc::RenderPass::Create( + static_cast<size_t>(shared_quad_state_list_size), + static_cast<size_t>(quad_list_size)); if (!ReadParam(m, iter, render_pass.get())) return false; // Validate that each RenderPassDrawQuad points at a valid RenderPass
diff --git a/content/common/cc_messages.h b/content/common/cc_messages.h index e7358e6..8870a1b 100644 --- a/content/common/cc_messages.h +++ b/content/common/cc_messages.h
@@ -268,6 +268,8 @@ IPC_STRUCT_TRAITS_MEMBER(ya_tex_size) IPC_STRUCT_TRAITS_MEMBER(uv_tex_size) IPC_STRUCT_TRAITS_MEMBER(color_space) + IPC_STRUCT_TRAITS_MEMBER(resource_offset) + IPC_STRUCT_TRAITS_MEMBER(resource_multiplier) IPC_STRUCT_TRAITS_END() IPC_STRUCT_TRAITS_BEGIN(cc::SharedQuadState)
diff --git a/content/common/cc_messages_unittest.cc b/content/common/cc_messages_unittest.cc index 288e369..35218e7 100644 --- a/content/common/cc_messages_unittest.cc +++ b/content/common/cc_messages_unittest.cc
@@ -433,7 +433,7 @@ arbitrary_rect1_inside_rect1, arbitrary_bool1, arbitrary_rectf1, arbitrary_rectf2, arbitrary_size1, arbitrary_size2, arbitrary_resourceid1, arbitrary_resourceid2, arbitrary_resourceid3, arbitrary_resourceid4, - arbitrary_color_space); + arbitrary_color_space, arbitrary_float1, arbitrary_float2); pass_cmp->CopyFromAndAppendDrawQuad(yuvvideo_in, yuvvideo_in->shared_quad_state);
diff --git a/content/common/fileapi/webblob_messages.h b/content/common/fileapi/webblob_messages.h index a836fd4..0dd3141 100644 --- a/content/common/fileapi/webblob_messages.h +++ b/content/common/fileapi/webblob_messages.h
@@ -26,7 +26,7 @@ IPC_SYNC_MESSAGE_CONTROL3_0(BlobHostMsg_SyncAppendSharedMemory, std::string /*uuid*/, base::SharedMemoryHandle, - size_t /* buffer size */) + uint32_t /* buffer size */) IPC_MESSAGE_CONTROL2(BlobHostMsg_FinishBuilding, std::string /* uuid */, std::string /* content_type */) @@ -57,7 +57,7 @@ IPC_SYNC_MESSAGE_CONTROL3_0(StreamHostMsg_SyncAppendSharedMemory, GURL /* url */, base::SharedMemoryHandle, - size_t /* buffer size */) + uint32_t /* buffer size */) // Flushes contents buffered in the stream. IPC_MESSAGE_CONTROL1(StreamHostMsg_Flush,
diff --git a/content/common/font_config_ipc_linux.h b/content/common/font_config_ipc_linux.h index 472c2f1..1fcee654b 100644 --- a/content/common/font_config_ipc_linux.h +++ b/content/common/font_config_ipc_linux.h
@@ -31,7 +31,7 @@ // FontConfig implementation for Skia that proxies out of process to get out -// of the sandbox. See http://code.google.com/p/chromium/wiki/LinuxSandboxIPC +// of the sandbox. See https://chromium.googlesource.com/chromium/src/+/master/docs/linux_sandbox_ipc.md class FontConfigIPC : public SkFontConfigInterface { public: explicit FontConfigIPC(int fd);
diff --git a/content/common/frame_messages.h b/content/common/frame_messages.h index 96ecbf4..4c3c4ec 100644 --- a/content/common/frame_messages.h +++ b/content/common/frame_messages.h
@@ -221,6 +221,9 @@ // Whether this commit created a new entry. IPC_STRUCT_MEMBER(bool, did_create_new_entry) + // Whether this commit should replace the current entry. + IPC_STRUCT_MEMBER(bool, should_replace_current_entry) + // Information regarding the security of the connection (empty if the // connection was not secure). IPC_STRUCT_MEMBER(std::string, security_info) @@ -724,7 +727,7 @@ // Request the text surrounding the selection with a |max_length|. The response // will be sent via FrameHostMsg_TextSurroundingSelectionResponse. IPC_MESSAGE_ROUTED1(FrameMsg_TextSurroundingSelectionRequest, - size_t /* max_length */) + uint32_t /* max_length */) // Tells the renderer to insert a link to the specified stylesheet. This is // needed to support navigation transitions. @@ -1277,8 +1280,8 @@ // |endOffset| are the offsets of the selection in the returned |content|. IPC_MESSAGE_ROUTED3(FrameHostMsg_TextSurroundingSelectionResponse, base::string16, /* content */ - size_t, /* startOffset */ - size_t /* endOffset */) + uint32_t, /* startOffset */ + uint32_t/* endOffset */) // Register a new handler for URL requests with the given scheme. IPC_MESSAGE_ROUTED4(FrameHostMsg_RegisterProtocolHandler,
diff --git a/content/common/gpu/ca_layer_partial_damage_tree_mac.mm b/content/common/gpu/ca_layer_partial_damage_tree_mac.mm index ee94726..6c5c2207 100644 --- a/content/common/gpu/ca_layer_partial_damage_tree_mac.mm +++ b/content/common/gpu/ca_layer_partial_damage_tree_mac.mm
@@ -7,6 +7,7 @@ #include "base/command_line.h" #include "base/mac/scoped_nsobject.h" #include "base/mac/sdk_forward_declarations.h" +#include "base/trace_event/trace_event.h" #include "ui/base/ui_base_switches.h" #include "ui/gfx/transform.h" @@ -273,6 +274,7 @@ scoped_ptr<CALayerPartialDamageTree> old_tree, float scale_factor, const gfx::Rect& pixel_damage_rect) { + TRACE_EVENT0("gpu", "CALayerPartialDamageTree::CommitCALayers"); UpdateRootAndPartialDamagePlanes(std::move(old_tree), pixel_damage_rect); UpdateCALayers(superlayer, scale_factor); }
diff --git a/content/common/gpu/ca_layer_tree_mac.mm b/content/common/gpu/ca_layer_tree_mac.mm index 0861ae6f..8c7d938 100644 --- a/content/common/gpu/ca_layer_tree_mac.mm +++ b/content/common/gpu/ca_layer_tree_mac.mm
@@ -6,6 +6,7 @@ #include "base/command_line.h" #include "base/mac/sdk_forward_declarations.h" +#include "base/trace_event/trace_event.h" #include "gpu/GLES2/gl2extchromium.h" #include "third_party/skia/include/core/SkColor.h" #include "ui/base/cocoa/animation_utils.h" @@ -28,8 +29,10 @@ unsigned background_color, unsigned edge_aa_mask, float opacity) { + // Excessive logging to debug white screens (crbug.com/583805). + // TODO(ccameron): change this back to a DLOG. if (has_committed_) { - DLOG(ERROR) << "ScheduleCALayer called after CommitScheduledCALayers."; + LOG(ERROR) << "ScheduleCALayer called after CommitScheduledCALayers."; return false; } return root_layer_.AddContentLayer(is_clipped, clip_rect, sorting_context_id, @@ -40,6 +43,7 @@ void CALayerTree::CommitScheduledCALayers(CALayer* superlayer, scoped_ptr<CALayerTree> old_tree, float scale_factor) { + TRACE_EVENT0("gpu", "CALayerTree::CommitScheduledCALayers"); RootLayer* old_root_layer = nullptr; if (old_tree) { DCHECK(old_tree->has_committed_); @@ -204,7 +208,9 @@ current_layer.sorting_context_id == sorting_context_id && (current_layer.is_clipped != is_clipped || current_layer.clip_rect != clip_rect)) { - DLOG(ERROR) << "CALayer changed clip inside non-zero sorting context."; + // Excessive logging to debug white screens (crbug.com/583805). + // TODO(ccameron): change this back to a DLOG. + LOG(ERROR) << "CALayer changed clip inside non-zero sorting context."; return false; } if (!is_singleton_sorting_context && @@ -271,7 +277,11 @@ [superlayer addSublayer:ca_layer]; [superlayer setBorderWidth:0]; } - DCHECK_EQ([ca_layer superlayer], superlayer); + // Excessive logging to debug white screens (crbug.com/583805). + // TODO(ccameron): change this back to a DCHECK. + if ([ca_layer superlayer] != superlayer) { + LOG(ERROR) << "CALayerTree root layer not attached to tree."; + } for (size_t i = 0; i < clip_and_sorting_layers.size(); ++i) { ClipAndSortingLayer* old_clip_and_sorting_layer = nullptr; @@ -299,7 +309,11 @@ [ca_layer setAnchorPoint:CGPointZero]; [superlayer addSublayer:ca_layer]; } - DCHECK_EQ([ca_layer superlayer], superlayer); + // Excessive logging to debug white screens (crbug.com/583805). + // TODO(ccameron): change this back to a DCHECK. + if ([ca_layer superlayer] != superlayer) { + LOG(ERROR) << "CALayerTree root layer not attached to tree."; + } if (update_is_clipped) [ca_layer setMasksToBounds:is_clipped];
diff --git a/content/common/gpu/child_window_surface_win.cc b/content/common/gpu/child_window_surface_win.cc index 738caea..d44297d 100644 --- a/content/common/gpu/child_window_surface_win.cc +++ b/content/common/gpu/child_window_surface_win.cc
@@ -73,7 +73,8 @@ HWND parent_window) : gfx::NativeViewGLSurfaceEGL(0), parent_window_(parent_window), - manager_(manager) { + manager_(manager), + alpha_(true) { // Don't use EGL_ANGLE_window_fixed_size so that we can avoid recreating the // window surface, which can cause flicker on DirectComposition. enable_fixed_size_angle_ = false; @@ -136,6 +137,7 @@ if (!MoveWindow(window_, 0, 0, size.width(), size.height(), FALSE)) { return false; } + alpha_ = has_alpha; return gfx::NativeViewGLSurfaceEGL::Resize(size, scale_factor, has_alpha); } else { if (size == GetSize() && has_alpha == alpha_)
diff --git a/content/common/gpu/child_window_surface_win.h b/content/common/gpu/child_window_surface_win.h index 83acd88a..16b2703 100644 --- a/content/common/gpu/child_window_surface_win.h +++ b/content/common/gpu/child_window_surface_win.h
@@ -36,6 +36,7 @@ HWND parent_window_; GpuChannelManager* manager_; gfx::Rect rect_to_clear_; + bool alpha_; DISALLOW_COPY_AND_ASSIGN(ChildWindowSurfaceWin); };
diff --git a/content/common/gpu/gpu_memory_uma_stats.h b/content/common/gpu/gpu_memory_uma_stats.h index 15d874f..16c8813 100644 --- a/content/common/gpu/gpu_memory_uma_stats.h +++ b/content/common/gpu/gpu_memory_uma_stats.h
@@ -19,13 +19,13 @@ } // The number of bytes currently allocated. - size_t bytes_allocated_current; + uint32_t bytes_allocated_current; // The maximum number of bytes ever allocated at once. - size_t bytes_allocated_max; + uint32_t bytes_allocated_max; // The number of context groups. - size_t context_group_count; + uint32_t context_group_count; }; } // namespace content
diff --git a/content/common/gpu/image_transport_surface_overlay_mac.mm b/content/common/gpu/image_transport_surface_overlay_mac.mm index 16b1ccb..a31100a 100644 --- a/content/common/gpu/image_transport_surface_overlay_mac.mm +++ b/content/common/gpu/image_transport_surface_overlay_mac.mm
@@ -21,6 +21,7 @@ #endif #include "base/mac/scoped_cftyperef.h" +#include "base/trace_event/trace_event.h" #include "content/common/gpu/ca_layer_partial_damage_tree_mac.h" #include "content/common/gpu/ca_layer_tree_mac.h" #include "content/common/gpu/gpu_messages.h" @@ -288,6 +289,7 @@ current_partial_damage_tree_.swap(swap->partial_damage_tree); current_ca_layer_tree_.reset(); } else { + TRACE_EVENT0("gpu", "Blank frame: No overlays or CALayers"); [ca_root_layer_ setSublayers:nil]; } swap->ca_layer_tree.reset();
diff --git a/content/common/gpu/media/vt_video_decode_accelerator_mac.cc b/content/common/gpu/media/vt_video_decode_accelerator_mac.cc index e74e6f6..e7e6b5a 100644 --- a/content/common/gpu/media/vt_video_decode_accelerator_mac.cc +++ b/content/common/gpu/media/vt_video_decode_accelerator_mac.cc
@@ -46,7 +46,11 @@ media::H264PROFILE_MAIN, media::H264PROFILE_EXTENDED, media::H264PROFILE_HIGH, - media::H264PROFILE_HIGH10PROFILE, + // TODO(hubbe): Try to re-enable this again somehow. Currently it seems + // that some codecs fail to check the profile during initialization and + // then fail on the first frame decode, which currently results in a + // pipeline failure. + // media::H264PROFILE_HIGH10PROFILE, media::H264PROFILE_SCALABLEBASELINE, media::H264PROFILE_SCALABLEHIGH, media::H264PROFILE_STEREOHIGH,
diff --git a/content/common/input/synthetic_web_input_event_builders.cc b/content/common/input/synthetic_web_input_event_builders.cc index e2e17fe..4ba93d31 100644 --- a/content/common/input/synthetic_web_input_event_builders.cc +++ b/content/common/input/synthetic_web_input_event_builders.cc
@@ -171,7 +171,7 @@ } touchesLength = point; type = WebInputEvent::Undefined; - causesScrollingIfUncanceled = false; + movedBeyondSlopRegion = false; uniqueTouchEventId = ui::GetNextTouchEventId(); } @@ -198,7 +198,7 @@ CHECK_LT(index, touchesLengthCap); // Always set this bit to avoid otherwise unexpected touchmove suppression. // The caller can opt-out explicitly, if necessary. - causesScrollingIfUncanceled = true; + movedBeyondSlopRegion = true; WebTouchPoint& point = touches[index]; point.position.x = point.screenPosition.x = x; point.position.y = point.screenPosition.y = y;
diff --git a/content/common/input/web_input_event_traits.cc b/content/common/input/web_input_event_traits.cc index 1008c54..5ba7d7b8 100644 --- a/content/common/input/web_input_event_traits.cc +++ b/content/common/input/web_input_event_traits.cc
@@ -114,7 +114,7 @@ "{\n Touches: %u, Cancelable: %d, CausesScrolling: %d," " uniqueTouchEventId: %u\n[\n", event.touchesLength, event.cancelable, - event.causesScrollingIfUncanceled, event.uniqueTouchEventId); + event.movedBeyondSlopRegion, event.uniqueTouchEventId); for (unsigned i = 0; i < event.touchesLength; ++i) ApppendTouchPointDetails(event.touches[i], result); result->append(" ]\n}"); @@ -240,7 +240,7 @@ if (old_event.touches[i_old].state == blink::WebTouchPoint::StateMoved) event->touches[i].state = blink::WebTouchPoint::StateMoved; } - event->causesScrollingIfUncanceled |= old_event.causesScrollingIfUncanceled; + event->movedBeyondSlopRegion |= old_event.movedBeyondSlopRegion; } bool CanCoalesce(const WebGestureEvent& event_to_coalesce,
diff --git a/content/common/mojo/mojo_shell_connection_impl.cc b/content/common/mojo/mojo_shell_connection_impl.cc index 36004514..79256c8 100644 --- a/content/common/mojo/mojo_shell_connection_impl.cc +++ b/content/common/mojo/mojo_shell_connection_impl.cc
@@ -11,8 +11,8 @@ #include "base/stl_util.h" #include "base/threading/thread_local.h" #include "mojo/converters/network/network_type_converters.h" -#include "mojo/shell/public/cpp/application_impl.h" #include "mojo/shell/public/cpp/shell_client.h" +#include "mojo/shell/public/cpp/shell_connection.h" #include "mojo/shell/runner/child/runner_connection.h" namespace content { @@ -64,12 +64,11 @@ void MojoShellConnectionImpl::WaitForShell( mojo::ScopedMessagePipeHandle handle) { - mojo::ApplicationRequest application_request; + mojo::ShellClientRequest request; runner_connection_.reset(mojo::shell::RunnerConnection::ConnectToRunner( - &application_request, std::move(handle))); - application_impl_.reset( - new mojo::ApplicationImpl(this, std::move(application_request))); - application_impl_->WaitForInitialize(); + &request, std::move(handle))); + shell_connection_.reset(new mojo::ShellConnection(this, std::move(request))); + shell_connection_->WaitForInitialize(); } void MojoShellConnectionImpl::Initialize(mojo::Shell* shell, @@ -87,7 +86,7 @@ mojo::Shell* MojoShellConnectionImpl::GetShell() { DCHECK(initialized_); - return application_impl_.get(); + return shell_connection_.get(); } void MojoShellConnectionImpl::AddListener(Listener* listener) {
diff --git a/content/common/mojo/mojo_shell_connection_impl.h b/content/common/mojo/mojo_shell_connection_impl.h index d85fe0e4..dfd94901 100644 --- a/content/common/mojo/mojo_shell_connection_impl.h +++ b/content/common/mojo/mojo_shell_connection_impl.h
@@ -11,8 +11,8 @@ #include "base/memory/scoped_ptr.h" #include "content/public/common/mojo_shell_connection.h" #include "mojo/public/cpp/system/message_pipe.h" -#include "mojo/shell/public/cpp/application_impl.h" #include "mojo/shell/public/cpp/shell_client.h" +#include "mojo/shell/public/cpp/shell_connection.h" namespace mojo { namespace shell { @@ -67,7 +67,7 @@ bool initialized_; scoped_ptr<mojo::shell::RunnerConnection> runner_connection_; - scoped_ptr<mojo::ApplicationImpl> application_impl_; + scoped_ptr<mojo::ShellConnection> shell_connection_; std::vector<Listener*> listeners_; DISALLOW_COPY_AND_ASSIGN(MojoShellConnectionImpl);
diff --git a/content/common/origin_trials/trial_token.cc b/content/common/origin_trials/trial_token.cc index 5c64bcb..224641f3 100644 --- a/content/common/origin_trials/trial_token.cc +++ b/content/common/origin_trials/trial_token.cc
@@ -103,7 +103,7 @@ } bool TrialToken::ValidateFeatureName(const std::string& feature_name) const { - return base::EqualsCaseInsensitiveASCII(feature_name, feature_name_); + return feature_name == feature_name_; } bool TrialToken::ValidateDate(const base::Time& now) const {
diff --git a/content/common/origin_trials/trial_token_unittest.cc b/content/common/origin_trials/trial_token_unittest.cc index c4426fd0..4519d2e 100644 --- a/content/common/origin_trials/trial_token_unittest.cc +++ b/content/common/origin_trials/trial_token_unittest.cc
@@ -146,6 +146,10 @@ EXPECT_FALSE(ValidateOrigin(token.get(), kInsecureOrigin)); EXPECT_TRUE(ValidateFeatureName(token.get(), kExpectedFeatureName)); EXPECT_FALSE(ValidateFeatureName(token.get(), kInvalidFeatureName)); + EXPECT_FALSE(ValidateFeatureName( + token.get(), base::ToUpperASCII(kExpectedFeatureName).c_str())); + EXPECT_FALSE(ValidateFeatureName( + token.get(), base::ToLowerASCII(kExpectedFeatureName).c_str())); EXPECT_TRUE( ValidateDate(token.get(), base::Time::FromDoubleT(kValidTimestamp))); EXPECT_FALSE( @@ -156,10 +160,10 @@ scoped_ptr<TrialToken> token = TrialToken::Parse(kSampleToken); ASSERT_TRUE(token); EXPECT_TRUE(token->IsAppropriate(kExpectedOrigin, kExpectedFeatureName)); - EXPECT_TRUE(token->IsAppropriate(kExpectedOrigin, - base::ToUpperASCII(kExpectedFeatureName))); - EXPECT_TRUE(token->IsAppropriate(kExpectedOrigin, - base::ToLowerASCII(kExpectedFeatureName))); + EXPECT_FALSE(token->IsAppropriate(kExpectedOrigin, + base::ToUpperASCII(kExpectedFeatureName))); + EXPECT_FALSE(token->IsAppropriate(kExpectedOrigin, + base::ToLowerASCII(kExpectedFeatureName))); EXPECT_FALSE(token->IsAppropriate(kInvalidOrigin, kExpectedFeatureName)); EXPECT_FALSE(token->IsAppropriate(kInsecureOrigin, kExpectedFeatureName)); EXPECT_FALSE(token->IsAppropriate(kExpectedOrigin, kInvalidFeatureName));
diff --git a/content/common/process_control.mojom b/content/common/process_control.mojom index c9ed0dd5..8e70a94 100644 --- a/content/common/process_control.mojom +++ b/content/common/process_control.mojom
@@ -4,10 +4,10 @@ module content; -import "mojo/shell/public/interfaces/application.mojom"; +import "mojo/shell/public/interfaces/shell_client.mojom"; interface ProcessControl { LoadApplication(string url, - mojo.shell.mojom.Application& request) => (bool success); + mojo.shell.mojom.ShellClient& request) => (bool success); };
diff --git a/content/common/sandbox_linux/android/sandbox_bpf_base_policy_android.cc b/content/common/sandbox_linux/android/sandbox_bpf_base_policy_android.cc index dd7d1c5..f517ae2 100644 --- a/content/common/sandbox_linux/android/sandbox_bpf_base_policy_android.cc +++ b/content/common/sandbox_linux/android/sandbox_bpf_base_policy_android.cc
@@ -62,6 +62,10 @@ case __NR_clone: case __NR_epoll_pwait: case __NR_flock: + case __NR_ftruncate: +#if defined(__i386__) || defined(__arm__) || defined(__mips__) + case __NR_ftruncate64: +#endif #if defined(__x86_64__) || defined(__aarch64__) case __NR_newfstatat: case __NR_getdents64:
diff --git a/content/common/sandbox_linux/sandbox_linux.h b/content/common/sandbox_linux/sandbox_linux.h index 0a80479..7ce723b3 100644 --- a/content/common/sandbox_linux/sandbox_linux.h +++ b/content/common/sandbox_linux/sandbox_linux.h
@@ -42,7 +42,7 @@ class LinuxSandbox { public: // This is a list of sandbox IPC methods which the renderer may send to the - // sandbox host. See http://code.google.com/p/chromium/wiki/LinuxSandboxIPC + // sandbox host. See https://chromium.googlesource.com/chromium/src/+/master/docs/linux_sandbox_ipc.md // This isn't the full list, values < 32 are reserved for methods called from // Skia. enum LinuxSandboxIPCMethods {
diff --git a/content/common/text_input_client_messages.h b/content/common/text_input_client_messages.h index 70da1d8..f66196cc 100644 --- a/content/common/text_input_client_messages.h +++ b/content/common/text_input_client_messages.h
@@ -48,7 +48,7 @@ // Reply message for TextInputClientMsg_CharacterIndexForPoint. IPC_MESSAGE_ROUTED1(TextInputClientReplyMsg_GotCharacterIndexForPoint, - size_t /* character index */) + uint32_t /* character index */) // Reply message for TextInputClientMsg_FirstRectForCharacterRange. IPC_MESSAGE_ROUTED1(TextInputClientReplyMsg_GotFirstRectForRange,
diff --git a/content/common/view_messages.h b/content/common/view_messages.h index b1b8109..42a6e042 100644 --- a/content/common/view_messages.h +++ b/content/common/view_messages.h
@@ -1163,7 +1163,7 @@ // text in the document. IPC_MESSAGE_ROUTED3(ViewHostMsg_SelectionChanged, base::string16 /* text covers the selection range */, - size_t /* the offset of the text in the document */, + uint32_t /* the offset of the text in the document */, gfx::Range /* selection range in the document */) // Notification that the selection bounds have changed.
diff --git a/content/common/websocket_messages.h b/content/common/websocket_messages.h index e0af254..383eb5a1 100644 --- a/content/common/websocket_messages.h +++ b/content/common/websocket_messages.h
@@ -73,6 +73,23 @@ url::Origin /* origin */, int /* render_frame_id */) +// Send a complete binary WebSocket message consisting of the Blob identified by +// |uuid|. The message will be split into frames as necessary. |expected_size| +// must match the browser's idea of the size of the Blob to prevent flow control +// from becoming desynchronised. If it does not match the connection will be +// terminated with a WebSocketMsg_NotifyFailure message. On success, the browser +// will have consumed |expected_size| bytes of flow control send quota and the +// renderer needs to subtract that from its running total of flow control send +// quota. See the design doc at +// https://docs.google.com/document/d/1CDiXB9pBumhFVVfmIn1CRI6v6byxyqWu2urEE9xp714/edit +// SendFrame or SendBlob IPCs must not be sent by the renderer until the +// BlobSendComplete message has been received from the browser. The renderer +// should retain a reference to the Blob until either a BlobSendComplete or +// NotifyFailure IPC is received. +IPC_MESSAGE_ROUTED2(WebSocketHostMsg_SendBlob, + std::string /* uuid */, + uint64_t /* expected_size */) + // WebSocket messages sent from the browser to the renderer. // Respond to an AddChannelRequest. |selected_protocol| is the sub-protocol the @@ -111,6 +128,11 @@ IPC_MESSAGE_ROUTED1(WebSocketMsg_NotifyFailure, std::string /* message */) +// Indicates tbat the current Blob has finished sending. The renderer can +// release its reference on the Blob, and may now use SendFrame or SendBlob to +// send more messages. +IPC_MESSAGE_ROUTED0(WebSocketMsg_BlobSendComplete) + // WebSocket messages that can be sent in either direction. // Send a non-control frame to the channel. @@ -136,6 +158,14 @@ // Both sides start a new channel with a quota of 0, and must wait for a // FlowControl message before calling SendFrame. The total available quota on // one side must never exceed 0x7FFFFFFFFFFFFFFF tokens. +// +// During "blob sending mode", ie. between the renderer sending a +// WebSocketHostMsg_SendBlob IPC and receiving a WebSocketMsg_BlobSendComplete +// IPC, quota is used up in the browser process to send the blob, but +// FlowControl IPCs for that quota are still sent to the renderer. The render +// process needs to take into account that quota equal to the size of the Blob +// has already been used when calculating how much send quota it has left after +// receiving BlobSendComplete. IPC_MESSAGE_ROUTED1(WebSocketMsg_FlowControl, int64_t /* quota */) // Drop the channel.
diff --git a/content/content_browser.gypi b/content/content_browser.gypi index 18e9558..79ccbeb 100644 --- a/content/content_browser.gypi +++ b/content/content_browser.gypi
@@ -1327,6 +1327,8 @@ 'browser/renderer_host/web_input_event_aurawin.cc', 'browser/renderer_host/webmenurunner_mac.h', 'browser/renderer_host/webmenurunner_mac.mm', + 'browser/renderer_host/websocket_blob_sender.cc', + 'browser/renderer_host/websocket_blob_sender.h', 'browser/renderer_host/websocket_dispatcher_host.cc', 'browser/renderer_host/websocket_dispatcher_host.h', 'browser/renderer_host/websocket_host.cc',
diff --git a/content/content_tests.gypi b/content/content_tests.gypi index 5f91387..9041d2a 100644 --- a/content/content_tests.gypi +++ b/content/content_tests.gypi
@@ -574,6 +574,7 @@ 'browser/renderer_host/render_widget_host_view_mac_unittest.mm', 'browser/renderer_host/text_input_client_mac_unittest.mm', 'browser/renderer_host/web_input_event_aura_unittest.cc', + 'browser/renderer_host/websocket_blob_sender_unittest.cc', 'browser/renderer_host/websocket_dispatcher_host_unittest.cc', 'browser/resolve_proxy_msg_helper_unittest.cc', 'browser/service_worker/embedded_worker_instance_unittest.cc', @@ -847,6 +848,7 @@ '../ui/base/ime/ui_base_ime.gyp:ui_base_ime', '../ui/base/ui_base.gyp:ui_base', '../ui/base/ui_base.gyp:ui_base_test_support', + '../ui/base/ui_base.gyp:ui_data_pack', '../ui/events/events.gyp:dom_keycode_converter', '../ui/events/events.gyp:events_base', '../ui/events/events.gyp:events_test_support', @@ -1207,6 +1209,7 @@ '../third_party/libjingle/libjingle.gyp:libjingle_webrtc', '../third_party/libjingle/libjingle.gyp:libpeerconnection', '../third_party/webrtc/modules/modules.gyp:video_capture_module', + '../ui/shell_dialogs/shell_dialogs.gyp:shell_dialogs', ], }], ['enable_webrtc==1 and enable_plugins==1', {
diff --git a/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java b/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java index ce9eccc..54dc6e62f 100644 --- a/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java +++ b/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java
@@ -23,10 +23,10 @@ import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.SuppressFBWarnings; import org.chromium.base.library_loader.LibraryLoader; -import org.chromium.base.library_loader.LibraryProcessType; import org.chromium.base.library_loader.Linker; import org.chromium.base.library_loader.ProcessInitException; import org.chromium.content.browser.ChildProcessConstants; +import org.chromium.content.browser.ChildProcessLauncher; import org.chromium.content.browser.FileDescriptorInfo; import org.chromium.content.common.ContentSwitches; import org.chromium.content.common.IChildProcessCallback; @@ -64,6 +64,8 @@ private FileDescriptorInfo[] mFdInfos; // Linker-specific parameters for this child process service. private ChromiumLinkerParams mLinkerParams; + // Child library process type. + private int mLibraryProcessType; private static AtomicReference<Context> sContext = new AtomicReference<Context>(null); private boolean mLibraryInitialized = false; @@ -151,8 +153,7 @@ boolean loadAtFixedAddressFailed = false; try { - LibraryLoader.get(LibraryProcessType.PROCESS_CHILD) - .loadNow(getApplicationContext()); + LibraryLoader.get(mLibraryProcessType).loadNow(getApplicationContext()); isLoaded = true; } catch (ProcessInitException e) { if (requestedSharedRelro) { @@ -166,8 +167,7 @@ if (!isLoaded && requestedSharedRelro) { linker.disableSharedRelros(); try { - LibraryLoader.get(LibraryProcessType.PROCESS_CHILD) - .loadNow(getApplicationContext()); + LibraryLoader.get(mLibraryProcessType).loadNow(getApplicationContext()); isLoaded = true; } catch (ProcessInitException e) { Log.e(TAG, "Failed to load native library on retry", e); @@ -176,10 +176,10 @@ if (!isLoaded) { System.exit(-1); } - LibraryLoader.get(LibraryProcessType.PROCESS_CHILD) + LibraryLoader.get(mLibraryProcessType) .registerRendererProcessHistogram(requestedSharedRelro, loadAtFixedAddressFailed); - LibraryLoader.get(LibraryProcessType.PROCESS_CHILD).initialize(); + LibraryLoader.get(mLibraryProcessType).initialize(); synchronized (mMainThread) { mLibraryInitialized = true; mMainThread.notifyAll(); @@ -258,6 +258,8 @@ // mLinkerParams is never used if Linker.isUsed() returns false. // See onCreate(). mLinkerParams = new ChromiumLinkerParams(intent); + mLibraryProcessType = + ChildProcessLauncher.ChildProcessCreationParams.getLibraryProcessType(intent); mIsBound = true; mMainThread.notifyAll(); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionImpl.java b/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionImpl.java index 257ebb7c..994d3e7 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionImpl.java
@@ -8,6 +8,8 @@ import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; +import android.content.pm.PackageManager; +import android.content.pm.ServiceInfo; import android.os.Bundle; import android.os.DeadObjectException; import android.os.IBinder; @@ -33,6 +35,7 @@ private final boolean mInSandbox; private final ChildProcessConnection.DeathCallback mDeathCallback; private final Class<? extends ChildProcessService> mServiceClass; + private final ComponentName mServiceName; // Synchronization: While most internal flow occurs on the UI thread, the public API // (specifically start and stop) may be called from any thread, hence all entry point methods @@ -70,8 +73,14 @@ private ChromiumLinkerParams mLinkerParams = null; private final boolean mAlwaysInForeground; + private final ChildProcessLauncher.ChildProcessCreationParams mCreationParams; - private static final String TAG = "cr.ChildProcessConnect"; + // Caches whether non-sandboxed and sandboxed services require an extra + // binding flag provided via ChildProcessCreationParams. + // TODO(mnaganov): Get rid of it after the release of the next Android SDK. + private static Boolean sNeedsExtrabindFlags[] = new Boolean[2]; + + private static final String TAG = "ChildProcessConnect"; private static class ConnectionParams { final String[] mCommandLine; @@ -102,24 +111,21 @@ private boolean mBound = false; private final int mBindFlags; - private final ChildProcessLauncher.ChildProcessCreationParams mCreationParams; private Intent createServiceBindIntent() { - final String packageName = mCreationParams != null - ? mCreationParams.getPackageName() : mContext.getPackageName(); Intent intent = new Intent(); - intent.setComponent( - new ComponentName(packageName, mServiceClass.getName() + mServiceNumber)); + if (mCreationParams != null) { + mCreationParams.addIntentExtras(intent); + } + intent.setComponent(mServiceName); return intent; } - public ChildServiceConnection(int bindFlags, - ChildProcessLauncher.ChildProcessCreationParams creationParams) { - if (creationParams != null) { - bindFlags = creationParams.addExtraBindFlags(bindFlags); + public ChildServiceConnection(int bindFlags, boolean needsExtraBindFlags) { + if (needsExtraBindFlags && mCreationParams != null) { + bindFlags = mCreationParams.addExtraBindFlags(bindFlags); } mBindFlags = bindFlags; - mCreationParams = creationParams; } boolean bind(String[] commandLine) { @@ -214,16 +220,44 @@ mInSandbox = inSandbox; mDeathCallback = deathCallback; mServiceClass = serviceClass; + String packageName = + creationParams != null ? creationParams.getPackageName() : context.getPackageName(); + mServiceName = new ComponentName(packageName, mServiceClass.getName() + mServiceNumber); mLinkerParams = chromiumLinkerParams; mAlwaysInForeground = alwaysInForeground; + mCreationParams = creationParams; int initialFlags = Context.BIND_AUTO_CREATE; if (mAlwaysInForeground) initialFlags |= Context.BIND_IMPORTANT; - mInitialBinding = new ChildServiceConnection(initialFlags, creationParams); + // "external service" attribute is approximated by "exported" attribute. + // TODO(mnaganov): Update after the release of the next Android SDK. + final boolean needsExtraBindFlags = isExportedService(inSandbox, mContext, mServiceName); + mInitialBinding = new ChildServiceConnection(initialFlags, needsExtraBindFlags); mStrongBinding = new ChildServiceConnection( - Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT, creationParams); + Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT, needsExtraBindFlags); mWaivedBinding = new ChildServiceConnection( - Context.BIND_AUTO_CREATE | Context.BIND_WAIVE_PRIORITY, creationParams); - mModerateBinding = new ChildServiceConnection(Context.BIND_AUTO_CREATE, creationParams); + Context.BIND_AUTO_CREATE | Context.BIND_WAIVE_PRIORITY, needsExtraBindFlags); + mModerateBinding = new ChildServiceConnection( + Context.BIND_AUTO_CREATE, needsExtraBindFlags); + } + + private static boolean isExportedService(boolean inSandbox, Context context, + ComponentName serviceName) { + // Check for the cached value first. It is assumed that all pooled child services + // have identical attributes in the manifest. + final int arrayIndex = inSandbox ? 1 : 0; + if (sNeedsExtrabindFlags[arrayIndex] != null) { + return sNeedsExtrabindFlags[arrayIndex].booleanValue(); + } + boolean result = false; + try { + PackageManager packageManager = context.getPackageManager(); + ServiceInfo serviceInfo = packageManager.getServiceInfo(serviceName, 0); + result = serviceInfo.exported; + } catch (PackageManager.NameNotFoundException e) { + Log.e(TAG, "Could not retrieve info about service %s", serviceName, e); + } + sNeedsExtrabindFlags[arrayIndex] = Boolean.valueOf(result); + return result; } @Override
diff --git a/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java b/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java index 6a300d9..75d0c2e9 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java +++ b/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java
@@ -26,6 +26,7 @@ import org.chromium.base.VisibleForTesting; import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; +import org.chromium.base.library_loader.LibraryProcessType; import org.chromium.base.library_loader.Linker; import org.chromium.content.app.ChildProcessService; import org.chromium.content.app.ChromiumLinkerParams; @@ -65,10 +66,15 @@ public static class ChildProcessCreationParams { private final String mPackageName; private final int mExtraBindFlags; + private final int mLibraryProcessType; + private static final String EXTRA_LIBRARY_PROCESS_TYPE = + "org.chromium.content.common.child_service_params.library_process_type"; - public ChildProcessCreationParams(String packageName, int extraBindFlags) { + public ChildProcessCreationParams(String packageName, int extraBindFlags, + int libraryProcessType) { mPackageName = packageName; mExtraBindFlags = extraBindFlags; + mLibraryProcessType = libraryProcessType; } public String getPackageName() { @@ -85,6 +91,15 @@ public int addExtraBindFlags(int bindFlags) { return bindFlags | mExtraBindFlags; } + + public void addIntentExtras(Intent intent) { + intent.putExtra(EXTRA_LIBRARY_PROCESS_TYPE, mLibraryProcessType); + } + + public static int getLibraryProcessType(Intent intent) { + return intent.getIntExtra(EXTRA_LIBRARY_PROCESS_TYPE, + LibraryProcessType.PROCESS_CHILD); + } } /**
diff --git a/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java b/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java index fbab3c0..2d4a4c7 100644 --- a/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java +++ b/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java
@@ -13,7 +13,6 @@ import android.os.HandlerThread; import org.chromium.base.CollectionUtil; -import org.chromium.base.CommandLine; import org.chromium.base.Log; import org.chromium.base.ThreadUtils; import org.chromium.base.VisibleForTesting; @@ -100,19 +99,12 @@ boolean mDeviceOrientationAbsoluteIsActive = false; boolean mOrientationNotAvailable = false; - protected DeviceSensors(Context context, boolean relativeByDefault) { + protected DeviceSensors(Context context) { mAppContext = context.getApplicationContext(); - // TODO(timvolodine): make the first option the default once support for absolute device - // orientation events is implemented see crbug.com/520546. - if (relativeByDefault) { - mOrientationSensorSets = CollectionUtil.newArrayList(DEVICE_ORIENTATION_SENSORS_A, - DEVICE_ORIENTATION_SENSORS_B, - DEVICE_ORIENTATION_SENSORS_C); - } else { - mOrientationSensorSets = CollectionUtil.newArrayList(DEVICE_ORIENTATION_SENSORS_B, - DEVICE_ORIENTATION_SENSORS_C); - } + mOrientationSensorSets = CollectionUtil.newArrayList(DEVICE_ORIENTATION_SENSORS_A, + DEVICE_ORIENTATION_SENSORS_B, + DEVICE_ORIENTATION_SENSORS_C); } // For orientation we use a 3-way fallback approach where up to 3 different sets of sensors @@ -612,11 +604,7 @@ static DeviceSensors getInstance(Context appContext) { synchronized (sSingletonLock) { if (sSingleton == null) { - // If experimental features are enabled use 'relative' sensor first, - // see crbug.com/520546. - boolean relativeByDefault = - CommandLine.getInstance().hasSwitch(EXPERIMENTAL_WEB_PLAFTORM_FEATURES); - sSingleton = new DeviceSensors(appContext, relativeByDefault); + sSingleton = new DeviceSensors(appContext); } return sSingleton; }
diff --git a/content/public/android/java/src/org/chromium/content/browser/LocationProviderAdapter.java b/content/public/android/java/src/org/chromium/content/browser/LocationProviderAdapter.java index 3fcc675..da8be141f 100644 --- a/content/public/android/java/src/org/chromium/content/browser/LocationProviderAdapter.java +++ b/content/public/android/java/src/org/chromium/content/browser/LocationProviderAdapter.java
@@ -18,7 +18,7 @@ * Delegates all real functionality to the implementation * returned from LocationProviderFactory. * See detailed documentation on - * content/browser/geolocation/android_location_api_adapter.h. + * content/browser/geolocation/location_api_adapter_android.h. * Based on android.webkit.GeolocationService.java */ @MainDex
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java index 1f1a5f8..4af941e8 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java
@@ -234,8 +234,6 @@ return true; case AccessibilityNodeInfo.ACTION_CLICK: nativeClick(mNativeObj, virtualViewId); - sendAccessibilityEvent(virtualViewId, - AccessibilityEvent.TYPE_VIEW_CLICKED); return true; case AccessibilityNodeInfo.ACTION_FOCUS: nativeFocus(mNativeObj, virtualViewId); @@ -631,6 +629,11 @@ } @CalledByNative + private void handleClicked(int id) { + sendAccessibilityEvent(id, AccessibilityEvent.TYPE_VIEW_CLICKED); + } + + @CalledByNative private void handleTextSelectionChanged(int id) { sendAccessibilityEvent(id, AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsObserverProxy.java b/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsObserverProxy.java index 9521812..6a0ed1f 100644 --- a/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsObserverProxy.java +++ b/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsObserverProxy.java
@@ -88,6 +88,15 @@ @Override @CalledByNative + public void didFinishNavigation( + boolean isMainFrame, boolean isErrorPage, boolean hasCommitted) { + for (mObserversIterator.rewind(); mObserversIterator.hasNext();) { + mObserversIterator.next().didFinishNavigation(isMainFrame, isErrorPage, hasCommitted); + } + } + + @Override + @CalledByNative public void didStartLoading(String url) { for (mObserversIterator.rewind(); mObserversIterator.hasNext();) { mObserversIterator.next().didStartLoading(url);
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/WebContentsObserver.java b/content/public/android/java/src/org/chromium/content_public/browser/WebContentsObserver.java index b5cdb8bc..158ddf9 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/WebContentsObserver.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/WebContentsObserver.java
@@ -30,6 +30,19 @@ public void renderProcessGone(boolean wasOomProtected) {} /** + * Called when the current navigation finishes. + * + * @param isMainFrame Whether the navigation is for the main frame. + * @param isErrorPage Whether the navigation shows an error page. + * @param hasCommitted Whether the navigation has committed. This returns true for either + * successful commits or error pages that replace the previous page + * (distinguished by |isErrorPage|), and false for errors that leave the + * user on the previous page. + */ + public void didFinishNavigation( + boolean isMainFrame, boolean isErrorPage, boolean hasCommitted) {} + + /** * Called when the a page starts loading. * @param url The validated url for the loading page. */
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/DeviceSensorsTest.java b/content/public/android/javatests/src/org/chromium/content/browser/DeviceSensorsTest.java index 9f491a2e..49042f2 100644 --- a/content/public/android/javatests/src/org/chromium/content/browser/DeviceSensorsTest.java +++ b/content/public/android/javatests/src/org/chromium/content/browser/DeviceSensorsTest.java
@@ -528,7 +528,7 @@ private String mCalls = ""; private DeviceSensorsForTests(Context context) { - super(context, true); + super(context); } static DeviceSensorsForTests getInstance(Context context) {
diff --git a/content/public/browser/zygote_host_linux.h b/content/public/browser/zygote_host_linux.h index e12f8db2..537d6d3f 100644 --- a/content/public/browser/zygote_host_linux.h +++ b/content/public/browser/zygote_host_linux.h
@@ -12,7 +12,7 @@ namespace content { -// http://code.google.com/p/chromium/wiki/LinuxZygote +// https://chromium.googlesource.com/chromium/src/+/master/docs/linux_zygote.md // The zygote host is an interface, in the browser process, to the zygote // process.
diff --git a/content/public/child/request_peer.h b/content/public/child/request_peer.h index 7ca6649f..cda0c71 100644 --- a/content/public/child/request_peer.h +++ b/content/public/child/request_peer.h
@@ -97,26 +97,6 @@ const base::TimeTicks& completion_time, int64_t total_transfer_size) = 0; - // This is a combined notification of - // - OnReceivedResponse, - // - OnReceivedData and - // - OnCompletedRequest. - // Unlike OnReceivedData, |data| can be null. - // This method is introduced to avoid repetitive method calls which might - // lead to use-after-free issues. See https://crbug.com/485413, - // https://crbug.com/507170. - // TODO(yhirano): Fix the RequestPeer lifecycle problem and remove this - // function. - virtual void OnReceivedCompletedResponse( - const ResourceResponseInfo& info, - scoped_ptr<ReceivedData> data, - int error_code, - bool was_ignored_by_handler, - bool stale_copy_in_cache, - const std::string& security_info, - const base::TimeTicks& completion_time, - int64_t total_transfer_size) = 0; - virtual ~RequestPeer() {} };
diff --git a/content/public/common/content_descriptors.h b/content/public/common/content_descriptors.h index 17d160e3..a3077cd 100644 --- a/content/public/common/content_descriptors.h +++ b/content/public/common/content_descriptors.h
@@ -12,7 +12,7 @@ // base::GlobalDescriptors object (see base/posix/global_descriptors.h) enum { kCrashDumpSignal = kIPCDescriptorMax, - kSandboxIPCChannel, // http://code.google.com/p/chromium/LinuxSandboxIPC + kSandboxIPCChannel, // https://chromium.googlesource.com/chromium/src/+/master/docs/linux_sandbox_ipc.md #if defined(V8_USE_EXTERNAL_STARTUP_DATA) kV8NativesDataDescriptor,
diff --git a/content/public/common/gpu_memory_stats.h b/content/public/common/gpu_memory_stats.h index cb28b23..09bda3f 100644 --- a/content/public/common/gpu_memory_stats.h +++ b/content/public/common/gpu_memory_stats.h
@@ -26,7 +26,7 @@ ~ProcessStats(); // The bytes of GPU resources accessible by this process - size_t video_memory; + uint32_t video_memory; // Set to true if this process' GPU resource count is inflated because // it is counting other processes' resources (e.g, the GPU process has @@ -39,10 +39,10 @@ ProcessMap process_map; // The total amount of GPU memory allocated at the time of the request. - size_t bytes_allocated; + uint32_t bytes_allocated; // The maximum amount of GPU memory ever allocated at once. - size_t bytes_allocated_historical_max; + uint32_t bytes_allocated_historical_max; }; } // namespace content
diff --git a/content/public/common/mojo_shell_connection.h b/content/public/common/mojo_shell_connection.h index 4f8d759b..da9bb177 100644 --- a/content/public/common/mojo_shell_connection.h +++ b/content/public/common/mojo_shell_connection.h
@@ -45,7 +45,7 @@ virtual mojo::Shell* GetShell() = 0; // [De]Register an impl of Listener that will be consulted when the wrapped - // ApplicationImpl exposes services to inbound connections. + // ShellConnection exposes services to inbound connections. // Registered listeners are owned by this MojoShellConnection. virtual void AddListener(Listener* listener) = 0; virtual void RemoveListener(Listener* listener) = 0;
diff --git a/content/public/renderer/render_frame_observer.h b/content/public/renderer/render_frame_observer.h index 43182a6..ea2ba2b 100644 --- a/content/public/renderer/render_frame_observer.h +++ b/content/public/renderer/render_frame_observer.h
@@ -96,7 +96,7 @@ virtual void DetailedConsoleMessageAdded(const base::string16& message, const base::string16& source, const base::string16& stack_trace, - int32_t line_number, + uint32_t line_number, int32_t severity_level) {} // Called when an interesting (from document lifecycle perspective),
diff --git a/content/public/test/test_mojo_app.cc b/content/public/test/test_mojo_app.cc index 20a83f7..f2b117f 100644 --- a/content/public/test/test_mojo_app.cc +++ b/content/public/test/test_mojo_app.cc
@@ -27,7 +27,7 @@ bool TestMojoApp::AcceptConnection(mojo::Connection* connection) { requestor_url_ = GURL(connection->GetRemoteApplicationURL()); - connection->AddService<TestMojoService>(this); + connection->AddInterface<TestMojoService>(this); return true; }
diff --git a/content/public/test/test_web_ui.cc b/content/public/test/test_web_ui.cc index 0c1b21a..03c4d7b 100644 --- a/content/public/test/test_web_ui.cc +++ b/content/public/test/test_web_ui.cc
@@ -73,7 +73,10 @@ const base::Value& arg1, const base::Value& arg2, const base::Value& arg3) { - NOTREACHED(); + call_data_.push_back(new CallData(function_name)); + call_data_.back()->TakeAsArg1(arg1.DeepCopy()); + call_data_.back()->TakeAsArg2(arg2.DeepCopy()); + call_data_.back()->TakeAsArg3(arg3.DeepCopy()); } void TestWebUI::CallJavascriptFunction(const std::string& function_name, @@ -105,4 +108,8 @@ arg2_.reset(arg); } +void TestWebUI::CallData::TakeAsArg3(base::Value* arg) { + arg3_.reset(arg); +} + } // namespace content
diff --git a/content/public/test/test_web_ui.h b/content/public/test/test_web_ui.h index bfdcef83..5cb04d3 100644 --- a/content/public/test/test_web_ui.h +++ b/content/public/test/test_web_ui.h
@@ -70,15 +70,18 @@ void TakeAsArg1(base::Value* arg); void TakeAsArg2(base::Value* arg); + void TakeAsArg3(base::Value* arg); const std::string& function_name() const { return function_name_; } const base::Value* arg1() const { return arg1_.get(); } const base::Value* arg2() const { return arg2_.get(); } + const base::Value* arg3() const { return arg3_.get(); } private: std::string function_name_; scoped_ptr<base::Value> arg1_; scoped_ptr<base::Value> arg2_; + scoped_ptr<base::Value> arg3_; }; const ScopedVector<CallData>& call_data() const { return call_data_; }
diff --git a/content/renderer/accessibility/blink_ax_enum_conversion.cc b/content/renderer/accessibility/blink_ax_enum_conversion.cc index 88f0fff..ac99237 100644 --- a/content/renderer/accessibility/blink_ax_enum_conversion.cc +++ b/content/renderer/accessibility/blink_ax_enum_conversion.cc
@@ -357,6 +357,8 @@ return ui::AX_EVENT_CHECKED_STATE_CHANGED; case blink::WebAXEventChildrenChanged: return ui::AX_EVENT_CHILDREN_CHANGED; + case blink::WebAXEventClicked: + return ui::AX_EVENT_CLICKED; case blink::WebAXEventDocumentSelectionChanged: return ui::AX_EVENT_DOCUMENT_SELECTION_CHANGED; case blink::WebAXEventFocus:
diff --git a/content/renderer/android/synchronous_compositor_factory.cc b/content/renderer/android/synchronous_compositor_factory.cc index 550b76b..e2724be 100644 --- a/content/renderer/android/synchronous_compositor_factory.cc +++ b/content/renderer/android/synchronous_compositor_factory.cc
@@ -9,13 +9,13 @@ namespace content { namespace { -SynchronousCompositorFactory* g_instance = NULL; +SynchronousCompositorFactory* g_instance = nullptr; } // namespace // static void SynchronousCompositorFactory::SetInstance( SynchronousCompositorFactory* instance) { - DCHECK(g_instance == NULL); + DCHECK(g_instance == nullptr); g_instance = instance; }
diff --git a/content/renderer/android/synchronous_compositor_factory.h b/content/renderer/android/synchronous_compositor_factory.h index 0f001fb..c8fece9 100644 --- a/content/renderer/android/synchronous_compositor_factory.h +++ b/content/renderer/android/synchronous_compositor_factory.h
@@ -58,14 +58,12 @@ virtual scoped_ptr<cc::BeginFrameSource> CreateExternalBeginFrameSource( int routing_id) = 0; - virtual scoped_refptr<StreamTextureFactory> CreateStreamTextureFactory( - int frame_id) = 0; protected: SynchronousCompositorFactory() {} virtual ~SynchronousCompositorFactory() {} }; -} +} // namespace content #endif // CONTENT_RENDERER_ANDROID_SYNCHRONOUS_COMPOSITOR_FACTORY_H_
diff --git a/content/renderer/child_frame_compositing_helper.cc b/content/renderer/child_frame_compositing_helper.cc index 6909d12..74e7eaa 100644 --- a/content/renderer/child_frame_compositing_helper.cc +++ b/content/renderer/child_frame_compositing_helper.cc
@@ -7,7 +7,6 @@ #include <utility> #include "cc/blink/web_layer_impl.h" -#include "cc/layers/delegated_renderer_layer.h" #include "cc/layers/solid_color_layer.h" #include "cc/layers/surface_layer.h" #include "cc/output/context_provider.h"
diff --git a/content/renderer/child_frame_compositing_helper.h b/content/renderer/child_frame_compositing_helper.h index 2f2e3c3..fda84a7 100644 --- a/content/renderer/child_frame_compositing_helper.h +++ b/content/renderer/child_frame_compositing_helper.h
@@ -14,7 +14,7 @@ #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "base/memory/shared_memory.h" -#include "cc/layers/delegated_frame_resource_collection.h" +#include "base/memory/weak_ptr.h" #include "cc/surfaces/surface_id.h" #include "content/common/content_export.h" #include "ui/gfx/geometry/size.h"
diff --git a/content/renderer/input/input_event_filter.cc b/content/renderer/input/input_event_filter.cc index c855862..927a402 100644 --- a/content/renderer/input/input_event_filter.cc +++ b/content/renderer/input/input_event_filter.cc
@@ -26,8 +26,9 @@ #include "ipc/ipc_message_null_macros.h" #undef IPC_MESSAGE_DECL -#define IPC_MESSAGE_DECL(kind, type, name, in, out, ilist, olist) \ - case name::ID: return #name; +#define IPC_MESSAGE_DECL(name, ...) \ + case name::ID: \ + return #name; const char* GetInputMessageTypeName(const IPC::Message& message) { switch (message.type()) {
diff --git a/content/renderer/media/android/stream_texture_factory_synchronous_impl.cc b/content/renderer/media/android/stream_texture_factory_synchronous_impl.cc index 44ae072b..b4b80d0 100644 --- a/content/renderer/media/android/stream_texture_factory_synchronous_impl.cc +++ b/content/renderer/media/android/stream_texture_factory_synchronous_impl.cc
@@ -151,18 +151,14 @@ // static scoped_refptr<StreamTextureFactorySynchronousImpl> StreamTextureFactorySynchronousImpl::Create( - const CreateContextProviderCallback& try_create_callback, - int frame_id) { - return new StreamTextureFactorySynchronousImpl(try_create_callback, frame_id); + const CreateContextProviderCallback& try_create_callback) { + return new StreamTextureFactorySynchronousImpl(try_create_callback); } StreamTextureFactorySynchronousImpl::StreamTextureFactorySynchronousImpl( - const CreateContextProviderCallback& try_create_callback, - int frame_id) + const CreateContextProviderCallback& try_create_callback) : create_context_provider_callback_(try_create_callback), - context_provider_(create_context_provider_callback_.Run()), - frame_id_(frame_id), - observer_(NULL) {} + context_provider_(create_context_provider_callback_.Run()) {} StreamTextureFactorySynchronousImpl::~StreamTextureFactorySynchronousImpl() {} @@ -174,8 +170,10 @@ if (!context_provider_.get()) return NULL; - if (observer_ && !had_proxy) - context_provider_->AddObserver(observer_); + if (!observers_.empty() && !had_proxy) { + for (auto& observer : observers_) + context_provider_->AddObserver(observer); + } return new StreamTextureProxyImpl(context_provider_.get()); } @@ -189,7 +187,7 @@ SurfaceTexturePeer::GetInstance()->EstablishSurfaceTexturePeer( base::GetCurrentProcessHandle(), surface_texture, - frame_id_, + frame_id, player_id); } } @@ -221,16 +219,16 @@ void StreamTextureFactorySynchronousImpl::AddObserver( StreamTextureFactoryContextObserver* obs) { - DCHECK(!observer_); - observer_ = obs; + DCHECK(observers_.find(obs) == observers_.end()); + observers_.insert(obs); if (context_provider_.get()) context_provider_->AddObserver(obs); } void StreamTextureFactorySynchronousImpl::RemoveObserver( StreamTextureFactoryContextObserver* obs) { - DCHECK_EQ(observer_, obs); - observer_ = NULL; + DCHECK(observers_.find(obs) != observers_.end()); + observers_.erase(obs); if (context_provider_.get()) context_provider_->RemoveObserver(obs); }
diff --git a/content/renderer/media/android/stream_texture_factory_synchronous_impl.h b/content/renderer/media/android/stream_texture_factory_synchronous_impl.h index cca38a8..a8b759a 100644 --- a/content/renderer/media/android/stream_texture_factory_synchronous_impl.h +++ b/content/renderer/media/android/stream_texture_factory_synchronous_impl.h
@@ -7,6 +7,8 @@ #include <stdint.h> +#include <set> + #include "base/callback.h" #include "base/macros.h" #include "base/memory/ref_counted.h" @@ -49,8 +51,7 @@ CreateContextProviderCallback; static scoped_refptr<StreamTextureFactorySynchronousImpl> Create( - const CreateContextProviderCallback& try_create_callback, - int frame_id); + const CreateContextProviderCallback& try_create_callback); StreamTextureProxy* CreateProxy() override; void EstablishPeer(int32_t stream_id, int player_id, int frame_id) override; @@ -65,14 +66,12 @@ private: friend class base::RefCounted<StreamTextureFactorySynchronousImpl>; StreamTextureFactorySynchronousImpl( - const CreateContextProviderCallback& try_create_callback, - int frame_id); + const CreateContextProviderCallback& try_create_callback); ~StreamTextureFactorySynchronousImpl() override; CreateContextProviderCallback create_context_provider_callback_; scoped_refptr<ContextProvider> context_provider_; - int frame_id_; - StreamTextureFactoryContextObserver* observer_; + std::set<StreamTextureFactoryContextObserver*> observers_; DISALLOW_IMPLICIT_CONSTRUCTORS(StreamTextureFactorySynchronousImpl); };
diff --git a/content/renderer/media/peer_connection_tracker.cc b/content/renderer/media/peer_connection_tracker.cc index 63d6f56..787315f 100644 --- a/content/renderer/media/peer_connection_tracker.cc +++ b/content/renderer/media/peer_connection_tracker.cc
@@ -347,7 +347,7 @@ const scoped_refptr<base::SingleThreadTaskRunner> main_thread_; }; -PeerConnectionTracker::PeerConnectionTracker() : next_lid_(1) { +PeerConnectionTracker::PeerConnectionTracker() : next_local_id_(1) { } PeerConnectionTracker::~PeerConnectionTracker() { @@ -395,6 +395,7 @@ const RTCMediaConstraints& constraints, const blink::WebFrame* frame) { DCHECK(main_thread_.CalledOnValidThread()); + DCHECK_EQ(GetLocalIDForHandler(pc_handler), -1); DVLOG(1) << "PeerConnectionTracker::RegisterPeerConnection()"; PeerConnectionInfo info; @@ -410,9 +411,7 @@ RenderThreadImpl::current()->Send( new PeerConnectionTrackerHost_AddPeerConnection(info)); - DCHECK(peer_connection_id_map_.find(pc_handler) == - peer_connection_id_map_.end()); - peer_connection_id_map_[pc_handler] = info.lid; + peer_connection_id_map_.insert(std::make_pair(pc_handler, info.lid)); } void PeerConnectionTracker::UnregisterPeerConnection( @@ -439,8 +438,11 @@ RTCPeerConnectionHandler* pc_handler, const RTCMediaConstraints& constraints) { DCHECK(main_thread_.CalledOnValidThread()); + int id = GetLocalIDForHandler(pc_handler); + if (id == -1) + return; SendPeerConnectionUpdate( - pc_handler, "createOffer", + id, "createOffer", "constraints: {" + SerializeMediaConstraints(constraints) + "}"); } @@ -448,8 +450,11 @@ RTCPeerConnectionHandler* pc_handler, const RTCMediaConstraints& constraints) { DCHECK(main_thread_.CalledOnValidThread()); + int id = GetLocalIDForHandler(pc_handler); + if (id == -1) + return; SendPeerConnectionUpdate( - pc_handler, "createAnswer", + id, "createAnswer", "constraints: {" + SerializeMediaConstraints(constraints) + "}"); } @@ -457,9 +462,12 @@ RTCPeerConnectionHandler* pc_handler, const std::string& sdp, const std::string& type, Source source) { DCHECK(main_thread_.CalledOnValidThread()); + int id = GetLocalIDForHandler(pc_handler); + if (id == -1) + return; string value = "type: " + type + ", sdp: " + sdp; SendPeerConnectionUpdate( - pc_handler, + id, source == SOURCE_LOCAL ? "setLocalDescription" : "setRemoteDescription", value); } @@ -469,6 +477,9 @@ const webrtc::PeerConnectionInterface::RTCConfiguration& config, const RTCMediaConstraints& options) { DCHECK(main_thread_.CalledOnValidThread()); + int id = GetLocalIDForHandler(pc_handler); + if (id == -1) + return; string servers_string = "servers: " + SerializeServers(config.servers); string transport_type = @@ -484,7 +495,7 @@ "constraints: {" + SerializeMediaConstraints(options) + "}"; SendPeerConnectionUpdate( - pc_handler, + id, "updateIce", servers_string + ", " + transport_type + ", " + bundle_policy + ", " + rtcp_mux_policy + ", " + @@ -497,6 +508,9 @@ Source source, bool succeeded) { DCHECK(main_thread_.CalledOnValidThread()); + int id = GetLocalIDForHandler(pc_handler); + if (id == -1) + return; string value = "sdpMid: " + base::UTF16ToUTF8(base::StringPiece16(candidate.sdpMid())) + ", " + @@ -507,12 +521,12 @@ // OnIceCandidate always succeeds as it's a callback from the browser. DCHECK(source != SOURCE_LOCAL || succeeded); - string event = + const char* event = (source == SOURCE_LOCAL) ? "onIceCandidate" : (succeeded ? "addIceCandidate" : "addIceCandidateFailed"); - SendPeerConnectionUpdate(pc_handler, event, value); + SendPeerConnectionUpdate(id, event, value); } void PeerConnectionTracker::TrackAddStream( @@ -520,8 +534,11 @@ const blink::WebMediaStream& stream, Source source) { DCHECK(main_thread_.CalledOnValidThread()); + int id = GetLocalIDForHandler(pc_handler); + if (id == -1) + return; SendPeerConnectionUpdate( - pc_handler, source == SOURCE_LOCAL ? "addStream" : "onAddStream", + id, source == SOURCE_LOCAL ? "addStream" : "onAddStream", SerializeMediaDescriptor(stream)); } @@ -530,8 +547,11 @@ const blink::WebMediaStream& stream, Source source){ DCHECK(main_thread_.CalledOnValidThread()); + int id = GetLocalIDForHandler(pc_handler); + if (id == -1) + return; SendPeerConnectionUpdate( - pc_handler, source == SOURCE_LOCAL ? "removeStream" : "onRemoveStream", + id, source == SOURCE_LOCAL ? "removeStream" : "onRemoveStream", SerializeMediaDescriptor(stream)); } @@ -540,33 +560,45 @@ const webrtc::DataChannelInterface* data_channel, Source source) { DCHECK(main_thread_.CalledOnValidThread()); + int id = GetLocalIDForHandler(pc_handler); + if (id == -1) + return; string value = "label: " + data_channel->label() + ", reliable: " + (data_channel->reliable() ? "true" : "false"); SendPeerConnectionUpdate( - pc_handler, + id, source == SOURCE_LOCAL ? "createLocalDataChannel" : "onRemoteDataChannel", value); } void PeerConnectionTracker::TrackStop(RTCPeerConnectionHandler* pc_handler) { DCHECK(main_thread_.CalledOnValidThread()); - SendPeerConnectionUpdate(pc_handler, "stop", std::string()); + int id = GetLocalIDForHandler(pc_handler); + if (id == -1) + return; + SendPeerConnectionUpdate(id, "stop", std::string()); } void PeerConnectionTracker::TrackSignalingStateChange( RTCPeerConnectionHandler* pc_handler, WebRTCPeerConnectionHandlerClient::SignalingState state) { DCHECK(main_thread_.CalledOnValidThread()); + int id = GetLocalIDForHandler(pc_handler); + if (id == -1) + return; SendPeerConnectionUpdate( - pc_handler, "signalingStateChange", GetSignalingStateString(state)); + id, "signalingStateChange", GetSignalingStateString(state)); } void PeerConnectionTracker::TrackIceConnectionStateChange( RTCPeerConnectionHandler* pc_handler, WebRTCPeerConnectionHandlerClient::ICEConnectionState state) { DCHECK(main_thread_.CalledOnValidThread()); + int id = GetLocalIDForHandler(pc_handler); + if (id == -1) + return; SendPeerConnectionUpdate( - pc_handler, "iceConnectionStateChange", + id, "iceConnectionStateChange", GetIceConnectionStateString(state)); } @@ -574,8 +606,11 @@ RTCPeerConnectionHandler* pc_handler, WebRTCPeerConnectionHandlerClient::ICEGatheringState state) { DCHECK(main_thread_.CalledOnValidThread()); + int id = GetLocalIDForHandler(pc_handler); + if (id == -1) + return; SendPeerConnectionUpdate( - pc_handler, "iceGatheringStateChange", + id, "iceGatheringStateChange", GetIceGatheringStateString(state)); } @@ -583,6 +618,9 @@ RTCPeerConnectionHandler* pc_handler, Action action, const string& callback_type, const string& value) { DCHECK(main_thread_.CalledOnValidThread()); + int id = GetLocalIDForHandler(pc_handler); + if (id == -1) + return; string update_type; switch (action) { case ACTION_SET_LOCAL_DESCRIPTION: @@ -603,20 +641,26 @@ } update_type += callback_type; - SendPeerConnectionUpdate(pc_handler, update_type, value); + SendPeerConnectionUpdate(id, update_type.c_str(), value); } void PeerConnectionTracker::TrackOnRenegotiationNeeded( RTCPeerConnectionHandler* pc_handler) { DCHECK(main_thread_.CalledOnValidThread()); - SendPeerConnectionUpdate(pc_handler, "onRenegotiationNeeded", std::string()); + int id = GetLocalIDForHandler(pc_handler); + if (id == -1) + return; + SendPeerConnectionUpdate(id, "onRenegotiationNeeded", std::string()); } void PeerConnectionTracker::TrackCreateDTMFSender( RTCPeerConnectionHandler* pc_handler, const blink::WebMediaStreamTrack& track) { DCHECK(main_thread_.CalledOnValidThread()); - SendPeerConnectionUpdate(pc_handler, "createDTMFSender", + int id = GetLocalIDForHandler(pc_handler); + if (id == -1) + return; + SendPeerConnectionUpdate(id, "createDTMFSender", base::UTF16ToUTF8(base::StringPiece16(track.id()))); } @@ -638,20 +682,29 @@ int PeerConnectionTracker::GetNextLocalID() { DCHECK(main_thread_.CalledOnValidThread()); - return next_lid_++; + if (next_local_id_< 0) + next_local_id_ = 1; + return next_local_id_++; +} + +int PeerConnectionTracker::GetLocalIDForHandler( + RTCPeerConnectionHandler* handler) const { + DCHECK(main_thread_.CalledOnValidThread()); + const auto found = peer_connection_id_map_.find(handler); + if (found == peer_connection_id_map_.end()) + return -1; + DCHECK_NE(found->second, -1); + return found->second; } void PeerConnectionTracker::SendPeerConnectionUpdate( - RTCPeerConnectionHandler* pc_handler, - const std::string& type, + int local_id, + const char* callback_type, const std::string& value) { DCHECK(main_thread_.CalledOnValidThread()); - if (peer_connection_id_map_.find(pc_handler) == peer_connection_id_map_.end()) - return; - RenderThreadImpl::current()->Send( new PeerConnectionTrackerHost_UpdatePeerConnection( - peer_connection_id_map_[pc_handler], type, value)); + local_id, std::string(callback_type), value)); } } // namespace content
diff --git a/content/renderer/media/peer_connection_tracker.h b/content/renderer/media/peer_connection_tracker.h index 63c55145..2181ca8 100644 --- a/content/renderer/media/peer_connection_tracker.h +++ b/content/renderer/media/peer_connection_tracker.h
@@ -163,16 +163,32 @@ private: // Assign a local ID to a peer connection so that the browser process can // uniquely identify a peer connection in the renderer process. + // The return value will always be positive. int GetNextLocalID(); + // Looks up a handler in our map and if found, returns its ID. If the handler + // is not registered, the return value will be -1. + int GetLocalIDForHandler(RTCPeerConnectionHandler* handler) const; + // IPC Message handler for getting all stats. void OnGetAllStats(); // Called when the browser process reports a suspend event from the OS. void OnSuspend(); - void SendPeerConnectionUpdate(RTCPeerConnectionHandler* pc_handler, - const std::string& callback_type, + // Called to deliver an update to the host (PeerConnectionTrackerHost). + // |local_id| - The id of the registered RTCPeerConnectionHandler. + // Using an id instead of the hander pointer is done on purpose + // to force doing the lookup before building the callback data + // in case the handler isn't registered. + // |callback_type| - A string, most often static, that represents the type + // of operation that the data stored in |value| comes from. + // E.g. "createOffer", "createAnswer", + // "setRemoteDescription" etc. + // |value| - A json serialized string containing all the information for the + // update event. + void SendPeerConnectionUpdate(int local_id, + const char* callback_type, const std::string& value); // This map stores the local ID assigned to each RTCPeerConnectionHandler. @@ -180,7 +196,7 @@ PeerConnectionIdMap peer_connection_id_map_; // This keeps track of the next available local ID. - int next_lid_; + int next_local_id_; base::ThreadChecker main_thread_; DISALLOW_COPY_AND_ASSIGN(PeerConnectionTracker);
diff --git a/content/renderer/mus/render_widget_window_tree_client_factory.cc b/content/renderer/mus/render_widget_window_tree_client_factory.cc index c2ed7483..7383c7a 100644 --- a/content/renderer/mus/render_widget_window_tree_client_factory.cc +++ b/content/renderer/mus/render_widget_window_tree_client_factory.cc
@@ -38,7 +38,7 @@ private: // MojoShellConnection::Listener implementation: bool AcceptConnection(mojo::Connection* connection) override { - connection->AddService<mojom::RenderWidgetWindowTreeClientFactory>(this); + connection->AddInterface<mojom::RenderWidgetWindowTreeClientFactory>(this); return true; }
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 1d26e59..08a54e3e 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -198,7 +198,6 @@ #include <cpu-features.h> #include "content/common/gpu/client/context_provider_command_buffer.h" -#include "content/renderer/android/synchronous_compositor_factory.h" #include "content/renderer/java/gin_java_bridge_dispatcher.h" #include "content/renderer/media/android/renderer_media_player_manager.h" #include "content/renderer/media/android/renderer_media_session_manager.h" @@ -429,15 +428,30 @@ std::string crash_type(url.path()); if (crash_type == kHeapOverflow) { + LOG(ERROR) + << "Intentionally causing ASAN heap overflow" + << " because user navigated to " << url.spec(); base::debug::AsanHeapOverflow(); } else if (crash_type == kHeapUnderflow) { + LOG(ERROR) + << "Intentionally causing ASAN heap underflow" + << " because user navigated to " << url.spec(); base::debug::AsanHeapUnderflow(); } else if (crash_type == kUseAfterFree) { + LOG(ERROR) + << "Intentionally causing ASAN heap use-after-free" + << " because user navigated to " << url.spec(); base::debug::AsanHeapUseAfterFree(); #if defined(SYZYASAN) } else if (crash_type == kCorruptHeapBlock) { + LOG(ERROR) + << "Intentionally causing ASAN corrupt heap block" + << " because user navigated to " << url.spec(); base::debug::AsanCorruptHeapBlock(); } else if (crash_type == kCorruptHeap) { + LOG(ERROR) + << "Intentionally causing ASAN corrupt heap" + << " because user navigated to " << url.spec(); base::debug::AsanCorruptHeap(); #endif } @@ -448,8 +462,13 @@ if (!url.SchemeIs(kChromeUIScheme)) return; if (url == GURL(kChromeUIBadCastCrashURL)) { + LOG(ERROR) + << "Intentionally crashing (with bad cast)" + << " because user navigated to " << url.spec(); BadCastCrashIntentionally(); } else if (url == GURL(kChromeUICrashURL)) { + LOG(ERROR) << "Intentionally crashing (with null pointer dereference)" + << " because user navigated to " << url.spec(); CrashIntentionally(); } else if (url == GURL(kChromeUIDumpURL)) { // This URL will only correctly create a crash dump file if content is @@ -458,12 +477,18 @@ // of base::debug::DumpWithoutCrashing for more details. base::debug::DumpWithoutCrashing(); } else if (url == GURL(kChromeUIKillURL)) { + LOG(ERROR) << "Intentionally issuing kill signal to current process" + << " because user navigated to " << url.spec(); base::Process::Current().Terminate(1, false); } else if (url == GURL(kChromeUIHangURL)) { + LOG(ERROR) << "Intentionally hanging ourselves with sleep infinite loop" + << " because user navigated to " << url.spec(); for (;;) { base::PlatformThread::Sleep(base::TimeDelta::FromSeconds(1)); } } else if (url == GURL(kChromeUIShorthangURL)) { + LOG(ERROR) << "Intentionally sleeping renderer for 20 seconds" + << " because user navigated to " << url.spec(); base::PlatformThread::Sleep(base::TimeDelta::FromSeconds(20)); } @@ -2134,7 +2159,7 @@ GetWebFrame()->reloadLoFiImages(); } -void RenderFrameImpl::OnTextSurroundingSelectionRequest(size_t max_length) { +void RenderFrameImpl::OnTextSurroundingSelectionRequest(uint32_t max_length) { blink::WebSurroundingText surroundingText; surroundingText.initialize(frame_->selectionRange(), max_length); @@ -2347,7 +2372,7 @@ // Use the routing id of Render Widget Host. Send(new ViewHostMsg_SelectionChanged(GetRenderWidget()->routing_id(), selection_text, - offset, + static_cast<uint32_t>(offset), range)); } @@ -2825,7 +2850,7 @@ FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DetailedConsoleMessageAdded( message.text, source_name, stack_trace, source_line, - static_cast<int32_t>(log_severity))); + static_cast<uint32_t>(log_severity))); } Send(new FrameHostMsg_AddMessageToConsole( @@ -3791,10 +3816,11 @@ // If the navigation is browser-initiated, the NavigationState contains the // correct value instead of the WebDataSource. // - // TODO(davidben): Avoid this awkward duplication of state. See comment on - // NavigationState::should_replace_current_entry(). - should_replace_current_entry = - navigation_state->common_params().should_replace_current_entry; + // TODO(creis): Remove should_replace_current_entry from NavigationState + // once we verify this is a safe change. + CHECK(!navigation_state->common_params().should_replace_current_entry || + data_source->replacesCurrentHistoryItem()); + should_replace_current_entry = data_source->replacesCurrentHistoryItem(); } int provider_id = kInvalidServiceWorkerProviderId; @@ -4452,6 +4478,7 @@ params.intended_as_new_entry = navigation_state->request_params().intended_as_new_entry; params.did_create_new_entry = commit_type == blink::WebStandardCommit; + params.should_replace_current_entry = ds->replacesCurrentHistoryItem(); params.post_id = -1; params.page_id = render_view_->page_id_; params.nav_entry_id = navigation_state->request_params().nav_entry_id; @@ -5057,10 +5084,11 @@ // Start searching in the focused frame. WebLocalFrame* search_frame = focused_frame; - bool multi_frame = (main_frame->traverseNext(true) != main_frame); + // Check for multiple searchable frames. + bool multi_frame = (main_frame->traverseNextLocal(true) != main_frame); // If we have multiple frames, we don't want to wrap the search within the - // frame, so we check here if we only have main_frame in the chain. + // frame, so we check here if we only have |main_frame| in the chain. bool wrap_within_frame = !multi_frame; WebRect selection_rect; @@ -5083,10 +5111,9 @@ do { // What is the next frame to search (we might be going backwards)? Note // that we specify wrap=true so that search_frame never becomes NULL. - search_frame = - options.forward - ? search_frame->traverseNext(true)->toWebLocalFrame() - : search_frame->traversePrevious(true)->toWebLocalFrame(); + search_frame = options.forward + ? search_frame->traverseNextLocal(true) + : search_frame->traversePreviousLocal(true); } while (!search_frame->hasVisibleContent() && search_frame != focused_frame); @@ -5146,7 +5173,7 @@ // Iterate to the next frame. The frame will not necessarily scope, for // example if it is not visible. - search_frame = search_frame->traverseNext(true)->toWebLocalFrame(); + search_frame = search_frame->traverseNextLocal(true); } while (search_frame != main_frame); } } @@ -5175,10 +5202,10 @@ GetFocusedElement()); } - WebFrame* frame = GetWebFrame(); + WebLocalFrame* frame = GetWebFrame(); while (frame) { - frame->toWebLocalFrame()->stopFinding(clear_selection); - frame = frame->traverseNext(false); + frame->stopFinding(clear_selection); + frame = frame->traverseNextLocal(false); } if (action == STOP_FIND_ACTION_ACTIVATE_SELECTION) { @@ -5266,10 +5293,17 @@ // This is necessary to preserve the should_replace_current_entry value on // cross-process redirects, in the event it was set by a previous process. // - // TODO(davidben): Avoid this awkward duplication of state. See comment on - // NavigationState::should_replace_current_entry(). - params.should_replace_current_entry = - pending_navigation_params_->common_params.should_replace_current_entry; + // TODO(creis): Remove should_replace_current_entry from NavigationState + // once we verify this is correct, since the WebDataSource should now be + // correct. + WebDataSource* ds = frame_->provisionalDataSource(); + CHECK(ds); + DocumentState* document_state = DocumentState::FromDataSource(ds); + NavigationStateImpl* navigation_state = + static_cast<NavigationStateImpl*>(document_state->navigation_state()); + CHECK_EQ(navigation_state->common_params().should_replace_current_entry, + ds->replacesCurrentHistoryItem()); + params.should_replace_current_entry = ds->replacesCurrentHistoryItem(); } else { params.should_replace_current_entry = should_replace_current_entry && render_view_->history_list_length_; @@ -5346,8 +5380,12 @@ pending_navigation_params_->common_params.navigation_start = base::TimeTicks(); - // Create parameters for a standard navigation. - blink::WebFrameLoadType load_type = blink::WebFrameLoadType::Standard; + // Create parameters for a standard navigation, indicating whether it should + // replace the current NavigationEntry. + blink::WebFrameLoadType load_type = + common_params.should_replace_current_entry + ? blink::WebFrameLoadType::ReplaceCurrentItem + : blink::WebFrameLoadType::Standard; blink::WebHistoryLoadType history_load_type = blink::WebHistoryDifferentDocumentLoad; bool should_load_request = false; @@ -5474,15 +5512,6 @@ SanitizeNavigationTiming(load_type, common_params.navigation_start, renderer_navigation_start); - // PlzNavigate: Check if the load should replace the current item. - // TODO(clamy): Remove this when - // https://codereview.chromium.org/1250163002/ lands and makes it default - // for the current architecture. - if (browser_side_navigation && common_params.should_replace_current_entry) { - DCHECK(load_type == blink::WebFrameLoadType::Standard); - load_type = blink::WebFrameLoadType::ReplaceCurrentItem; - } - // Perform a navigation to a data url if needed. if (!common_params.base_url_for_data_url.is_empty() || (browser_side_navigation && @@ -5930,23 +5959,15 @@ WebMediaPlayerClient* client, WebMediaPlayerEncryptedMediaClient* encrypted_client, const media::WebMediaPlayerParams& params) { - scoped_refptr<StreamTextureFactory> stream_texture_factory; - bool enable_texture_copy = false; - if (SynchronousCompositorFactory* factory = - SynchronousCompositorFactory::GetInstance()) { - stream_texture_factory = factory->CreateStreamTextureFactory(routing_id_); - } else { - stream_texture_factory = - RenderThreadImpl::current()->GetStreamTexureFactory(); - enable_texture_copy = - RenderThreadImpl::current()->sync_compositor_message_filter() != - nullptr; - if (!stream_texture_factory.get()) { - LOG(ERROR) << "Failed to get stream texture factory!"; - return NULL; - } + scoped_refptr<StreamTextureFactory> stream_texture_factory = + RenderThreadImpl::current()->GetStreamTexureFactory(); + if (!stream_texture_factory.get()) { + LOG(ERROR) << "Failed to get stream texture factory!"; + return NULL; } + bool enable_texture_copy = + RenderThreadImpl::current()->EnableStreamTextureCopy(); return new WebMediaPlayerAndroid(frame_, client, encrypted_client, GetWebMediaPlayerDelegate()->AsWeakPtr(), GetMediaPlayerManager(), GetCdmFactory(),
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h index 243066be..b8b55a3 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h
@@ -771,7 +771,7 @@ void OnExtendSelectionAndDelete(int before, int after); void OnReload(bool ignore_cache); void OnReloadLoFiImages(); - void OnTextSurroundingSelectionRequest(size_t max_length); + void OnTextSurroundingSelectionRequest(uint32_t max_length); void OnSetAccessibilityMode(AccessibilityMode new_mode); void OnSnapshotAccessibilityTree(int callback_id); void OnUpdateOpener(int opener_routing_id);
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc index 473d5a0..ef3f392f 100644 --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc
@@ -1544,11 +1544,25 @@ } #if defined(OS_ANDROID) + +namespace { +base::LazyInstance<scoped_refptr<StreamTextureFactory>> + g_stream_texture_factory_override; +} + +// static +void RenderThreadImpl::SetStreamTextureFactory( + scoped_refptr<StreamTextureFactory> factory) { + g_stream_texture_factory_override.Get() = factory; +} + scoped_refptr<StreamTextureFactory> RenderThreadImpl::GetStreamTexureFactory() { DCHECK(IsMainThread()); - if (!stream_texture_factory_.get() || - stream_texture_factory_->ContextGL()->GetGraphicsResetStatusKHR() != - GL_NO_ERROR) { + if (g_stream_texture_factory_override.Get()) { + stream_texture_factory_ = g_stream_texture_factory_override.Get(); + } else if (!stream_texture_factory_.get() || + stream_texture_factory_->ContextGL() + ->GetGraphicsResetStatusKHR() != GL_NO_ERROR) { if (!SharedMainThreadContextProvider().get()) { stream_texture_factory_ = NULL; return NULL; @@ -1565,6 +1579,12 @@ } return stream_texture_factory_; } + +bool RenderThreadImpl::EnableStreamTextureCopy() { + return !g_stream_texture_factory_override.Get() && + sync_compositor_message_filter_.get(); +} + #endif AudioRendererMixerManager* RenderThreadImpl::GetAudioRendererMixerManager() {
diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h index b2ea2ff..c3e56f51 100644 --- a/content/renderer/render_thread_impl.h +++ b/content/renderer/render_thread_impl.h
@@ -294,7 +294,11 @@ return sync_compositor_message_filter_.get(); } + static void SetStreamTextureFactory( + scoped_refptr<StreamTextureFactory> factory); + scoped_refptr<StreamTextureFactory> GetStreamTexureFactory(); + bool EnableStreamTextureCopy(); #endif // Creates the embedder implementation of WebMediaStreamCenter.
diff --git a/content/renderer/render_thread_impl_browsertest.cc b/content/renderer/render_thread_impl_browsertest.cc index 95556d8..dd884d8 100644 --- a/content/renderer/render_thread_impl_browsertest.cc +++ b/content/renderer/render_thread_impl_browsertest.cc
@@ -32,8 +32,13 @@ // IPC messages for testing ---------------------------------------------------- +// TODO(mdempsky): Fix properly by moving into a separate +// browsertest_message_generator.cc file. +#undef IPC_IPC_MESSAGE_MACROS_H_ +#undef IPC_MESSAGE_EXTRA #define IPC_MESSAGE_IMPL #include "ipc/ipc_message_macros.h" +#include "ipc/ipc_message_templates_impl.h" #undef IPC_MESSAGE_START #define IPC_MESSAGE_START TestMsgStart
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc index 4902d50..7b0e511 100644 --- a/content/renderer/render_view_browsertest.cc +++ b/content/renderer/render_view_browsertest.cc
@@ -59,6 +59,7 @@ #include "third_party/WebKit/public/platform/WebURLResponse.h" #include "third_party/WebKit/public/web/WebDataSource.h" #include "third_party/WebKit/public/web/WebDeviceEmulationParams.h" +#include "third_party/WebKit/public/web/WebFrameContentDumper.h" #include "third_party/WebKit/public/web/WebHistoryCommitType.h" #include "third_party/WebKit/public/web/WebHistoryItem.h" #include "third_party/WebKit/public/web/WebLocalFrame.h" @@ -87,6 +88,7 @@ #include "url/url_constants.h" using blink::WebFrame; +using blink::WebFrameContentDumper; using blink::WebInputEvent; using blink::WebLocalFrame; using blink::WebMouseEvent; @@ -1348,8 +1350,8 @@ // Retrieve the content of this page and compare it with the expected // result. const int kMaxOutputCharacters = 128; - base::string16 output = - GetMainFrame()->contentAsText(kMaxOutputCharacters); + base::string16 output = WebFrameContentDumper::dumpFrameTreeAsText( + GetMainFrame(), kMaxOutputCharacters); EXPECT_EQ(base::WideToUTF16(ime_message->result), output); } } @@ -1398,7 +1400,8 @@ // Copy the document content to std::wstring and compare with the // expected result. const int kMaxOutputCharacters = 16; - base::string16 output = GetMainFrame()->contentAsText(kMaxOutputCharacters); + base::string16 output = WebFrameContentDumper::dumpFrameTreeAsText( + GetMainFrame(), kMaxOutputCharacters); EXPECT_EQ(base::WideToUTF16(kTextDirection[i].expected_result), output); } } @@ -1538,8 +1541,9 @@ // text created from a virtual-key code, a character code, and the // modifier-key status. const int kMaxOutputCharacters = 1024; - std::string output = base::UTF16ToUTF8(base::StringPiece16( - GetMainFrame()->contentAsText(kMaxOutputCharacters))); + std::string output = base::UTF16ToUTF8( + base::StringPiece16(WebFrameContentDumper::dumpFrameTreeAsText( + GetMainFrame(), kMaxOutputCharacters))); EXPECT_EQ(expected_result, output); } } @@ -1770,7 +1774,8 @@ // text created from a virtual-key code, a character code, and the // modifier-key status. const int kMaxOutputCharacters = 4096; - base::string16 output = GetMainFrame()->contentAsText(kMaxOutputCharacters); + base::string16 output = WebFrameContentDumper::dumpFrameTreeAsText( + GetMainFrame(), kMaxOutputCharacters); EXPECT_EQ(base::WideToUTF16(kLayouts[i].expected_result), output); } #else @@ -2105,8 +2110,9 @@ // Copy the document content to std::wstring and compare with the // expected result. const int kMaxOutputCharacters = 256; - std::string output = base::UTF16ToUTF8(base::StringPiece16( - GetMainFrame()->contentAsText(kMaxOutputCharacters))); + std::string output = base::UTF16ToUTF8( + base::StringPiece16(WebFrameContentDumper::dumpFrameTreeAsText( + GetMainFrame(), kMaxOutputCharacters))); EXPECT_EQ(output, "hello \n\nworld"); } @@ -2226,8 +2232,9 @@ main_frame->didFailProvisionalLoad(web_frame, error, blink::WebStandardCommit); const int kMaxOutputCharacters = 22; - EXPECT_EQ("", base::UTF16ToASCII( - base::StringPiece16(web_frame->contentAsText(kMaxOutputCharacters)))); + EXPECT_EQ("", base::UTF16ToASCII(base::StringPiece16( + WebFrameContentDumper::dumpFrameTreeAsText( + web_frame, kMaxOutputCharacters)))); } #if defined(OS_ANDROID) @@ -2261,8 +2268,9 @@ FrameLoadWaiter(main_frame).Wait(); const int kMaxOutputCharacters = 22; EXPECT_EQ("A suffusion of yellow.", - base::UTF16ToASCII(base::StringPiece16( - web_frame->contentAsText(kMaxOutputCharacters)))); + base::UTF16ToASCII( + base::StringPiece16(WebFrameContentDumper::dumpFrameTreeAsText( + web_frame, kMaxOutputCharacters)))); } #if defined(OS_ANDROID) @@ -2295,8 +2303,9 @@ FrameLoadWaiter(main_frame).Wait(); const int kMaxOutputCharacters = 22; EXPECT_EQ("A suffusion of yellow.", - base::UTF16ToASCII(base::StringPiece16( - web_frame->contentAsText(kMaxOutputCharacters)))); + base::UTF16ToASCII( + base::StringPiece16(WebFrameContentDumper::dumpFrameTreeAsText( + web_frame, kMaxOutputCharacters)))); } // Ensure the render view sends favicon url update events correctly.
diff --git a/content/renderer/render_view_browsertest_mac.mm b/content/renderer/render_view_browsertest_mac.mm index a973c31..2b89084 100644 --- a/content/renderer/render_view_browsertest_mac.mm +++ b/content/renderer/render_view_browsertest_mac.mm
@@ -10,11 +10,14 @@ #include "content/public/test/render_view_test.h" #include "content/renderer/render_view_impl.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/WebKit/public/web/WebFrameContentDumper.h" #include "third_party/WebKit/public/web/WebLocalFrame.h" #include <Carbon/Carbon.h> // for the kVK_* constants. #include <Cocoa/Cocoa.h> +using blink::WebFrameContentDumper; + namespace content { NSEvent* CmdDeadKeyEvent(NSEventType type, unsigned short code) { @@ -104,7 +107,8 @@ SendNativeKeyEvent(NativeWebKeyboardEvent(arrowDownKeyDown)); ProcessPendingMessages(); ExecuteJavaScriptForTests("scroll.textContent = window.pageYOffset"); - output = GetMainFrame()->contentAsText(kMaxOutputCharacters); + output = WebFrameContentDumper::dumpFrameTreeAsText(GetMainFrame(), + kMaxOutputCharacters); EXPECT_EQ(kArrowDownScrollDown, base::UTF16ToASCII(output)); const char* kArrowUpScrollUp = "38,false,false,true,false\n0\np1"; @@ -113,7 +117,8 @@ SendNativeKeyEvent(NativeWebKeyboardEvent(arrowUpKeyDown)); ProcessPendingMessages(); ExecuteJavaScriptForTests("scroll.textContent = window.pageYOffset"); - output = GetMainFrame()->contentAsText(kMaxOutputCharacters); + output = WebFrameContentDumper::dumpFrameTreeAsText(GetMainFrame(), + kMaxOutputCharacters); EXPECT_EQ(kArrowUpScrollUp, base::UTF16ToASCII(output)); // Now let javascript eat the key events -- no scrolling should happen. @@ -127,7 +132,8 @@ SendNativeKeyEvent(NativeWebKeyboardEvent(arrowDownKeyDown)); ProcessPendingMessages(); ExecuteJavaScriptForTests("scroll.textContent = window.pageYOffset"); - output = GetMainFrame()->contentAsText(kMaxOutputCharacters); + output = WebFrameContentDumper::dumpFrameTreeAsText(GetMainFrame(), + kMaxOutputCharacters); EXPECT_EQ(kArrowDownNoScroll, base::UTF16ToASCII(output)); const char* kArrowUpNoScroll = "38,false,false,true,false\n100\np1"; @@ -136,7 +142,8 @@ SendNativeKeyEvent(NativeWebKeyboardEvent(arrowUpKeyDown)); ProcessPendingMessages(); ExecuteJavaScriptForTests("scroll.textContent = window.pageYOffset"); - output = GetMainFrame()->contentAsText(kMaxOutputCharacters); + output = WebFrameContentDumper::dumpFrameTreeAsText(GetMainFrame(), + kMaxOutputCharacters); EXPECT_EQ(kArrowUpNoScroll, base::UTF16ToASCII(output)); }
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index be895605..61639235 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc
@@ -141,6 +141,7 @@ #include "third_party/WebKit/public/web/WebFormControlElement.h" #include "third_party/WebKit/public/web/WebFormElement.h" #include "third_party/WebKit/public/web/WebFrame.h" +#include "third_party/WebKit/public/web/WebFrameContentDumper.h" #include "third_party/WebKit/public/web/WebHistoryItem.h" #include "third_party/WebKit/public/web/WebHitTestResult.h" #include "third_party/WebKit/public/web/WebInputElement.h" @@ -220,6 +221,7 @@ using blink::WebFormControlElement; using blink::WebFormElement; using blink::WebFrame; +using blink::WebFrameContentDumper; using blink::WebGestureEvent; using blink::WebHistoryItem; using blink::WebHTTPBody; @@ -1237,13 +1239,23 @@ void RenderViewImpl::OnGetRenderedText() { if (!webview()) return; + + if (!webview()->mainFrame()->isWebLocalFrame()) + return; + // Get rendered text from WebLocalFrame. // TODO: Currently IPC truncates any data that has a // size > kMaximumMessageSize. May be split the text into smaller chunks and // send back using multiple IPC. See http://crbug.com/393444. static const size_t kMaximumMessageSize = 8 * 1024 * 1024; - std::string text = webview()->mainFrame()->contentAsText( - kMaximumMessageSize).utf8(); + // TODO(dglazkov): Using this API is wrong. It's not OOPIF-compatible and + // sends text in the wrong order. See http://crbug.com/584798. + // TODO(dglazkov): WebFrameContentDumper should only be used for + // testing purposes. See http://crbug.com/585164. + std::string text = + WebFrameContentDumper::dumpFrameTreeAsText( + webview()->mainFrame()->toWebLocalFrame(), kMaximumMessageSize) + .utf8(); Send(new ViewMsg_GetRenderedTextCompleted(routing_id(), text)); }
diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc index bf4afb7..5033ec6 100644 --- a/content/renderer/renderer_blink_platform_impl.cc +++ b/content/renderer/renderer_blink_platform_impl.cc
@@ -292,13 +292,9 @@ ChildThreadImpl* child_thread = ChildThreadImpl::current(); // There may be no child thread in RenderViewTests. These tests can still use // data URLs to bypass the ResourceDispatcher. - scoped_ptr<scheduler::WebTaskRunnerImpl> task_runner( - new scheduler::WebTaskRunnerImpl( - loading_task_runner_->BelongsToCurrentThread() - ? loading_task_runner_ : base::ThreadTaskRunnerHandle::Get())); return new content::WebURLLoaderImpl( child_thread ? child_thread->resource_dispatcher() : NULL, - std::move(task_runner)); + make_scoped_ptr(currentThread()->taskRunner()->clone())); } blink::WebThread* RendererBlinkPlatformImpl::currentThread() {
diff --git a/content/renderer/renderer_main_platform_delegate_linux.cc b/content/renderer/renderer_main_platform_delegate_linux.cc index 4a632b3..5743abd 100644 --- a/content/renderer/renderer_main_platform_delegate_linux.cc +++ b/content/renderer/renderer_main_platform_delegate_linux.cc
@@ -30,7 +30,7 @@ bool RendererMainPlatformDelegate::EnableSandbox() { // The setuid sandbox is started in the zygote process: zygote_main_linux.cc - // http://code.google.com/p/chromium/wiki/LinuxSUIDSandbox + // https://chromium.googlesource.com/chromium/src/+/master/docs/linux_suid_sandbox.md // // Anything else is started in InitializeSandbox(). LinuxSandbox::InitializeSandbox();
diff --git a/content/renderer/text_input_client_observer.cc b/content/renderer/text_input_client_observer.cc index eda58f2..b97be4a3 100644 --- a/content/renderer/text_input_client_observer.cc +++ b/content/renderer/text_input_client_observer.cc
@@ -65,7 +65,8 @@ void TextInputClientObserver::OnCharacterIndexForPoint(gfx::Point point) { blink::WebPoint web_point(point); - size_t index = webview()->focusedFrame()->characterIndexForPoint(web_point); + uint32_t index = static_cast<uint32_t>( + webview()->focusedFrame()->characterIndexForPoint(web_point)); Send(new TextInputClientReplyMsg_GotCharacterIndexForPoint(routing_id(), index)); }
diff --git a/content/shell/browser/layout_test/layout_test_message_filter.cc b/content/shell/browser/layout_test/layout_test_message_filter.cc index aa7ce795..74f1c03 100644 --- a/content/shell/browser/layout_test/layout_test_message_filter.cc +++ b/content/shell/browser/layout_test/layout_test_message_filter.cc
@@ -50,6 +50,7 @@ if (message.type() == LayoutTestHostMsg_ClearAllDatabases::ID) *thread = BrowserThread::FILE; if (message.type() == LayoutTestHostMsg_SimulateWebNotificationClick::ID || + message.type() == LayoutTestHostMsg_SimulateWebNotificationClose::ID || message.type() == LayoutTestHostMsg_SetPermission::ID || message.type() == LayoutTestHostMsg_ResetPermissions::ID || message.type() == LayoutTestHostMsg_SetBluetoothAdapter::ID) @@ -67,6 +68,8 @@ IPC_MESSAGE_HANDLER(LayoutTestHostMsg_SetDatabaseQuota, OnSetDatabaseQuota) IPC_MESSAGE_HANDLER(LayoutTestHostMsg_SimulateWebNotificationClick, OnSimulateWebNotificationClick) + IPC_MESSAGE_HANDLER(LayoutTestHostMsg_SimulateWebNotificationClose, + OnSimulateWebNotificationClose) IPC_MESSAGE_HANDLER(LayoutTestHostMsg_AcceptAllCookies, OnAcceptAllCookies) IPC_MESSAGE_HANDLER(LayoutTestHostMsg_DeleteAllCookies, OnDeleteAllCookies) IPC_MESSAGE_HANDLER(LayoutTestHostMsg_SetPermission, OnSetPermission) @@ -121,6 +124,14 @@ manager->SimulateClick(title, action_index); } +void LayoutTestMessageFilter::OnSimulateWebNotificationClose( + const std::string& title, bool by_user) { + LayoutTestNotificationManager* manager = + LayoutTestContentBrowserClient::Get()->GetLayoutTestNotificationManager(); + if (manager) + manager->SimulateClose(title, by_user); +} + void LayoutTestMessageFilter::OnAcceptAllCookies(bool accept) { ShellNetworkDelegate::SetAcceptAllCookies(accept); }
diff --git a/content/shell/browser/layout_test/layout_test_message_filter.h b/content/shell/browser/layout_test/layout_test_message_filter.h index 1a0909cd..8c4bb5d8 100644 --- a/content/shell/browser/layout_test/layout_test_message_filter.h +++ b/content/shell/browser/layout_test/layout_test_message_filter.h
@@ -56,6 +56,7 @@ void OnClearWebNotificationPermissions(); void OnSimulateWebNotificationClick(const std::string& title, int action_index); + void OnSimulateWebNotificationClose(const std::string& title, bool by_user); void OnSetPushMessagingPermission(const GURL& origin, bool allowed); void OnClearPushMessagingPermissions(); void OnAcceptAllCookies(bool accept);
diff --git a/content/shell/browser/layout_test/layout_test_notification_manager.cc b/content/shell/browser/layout_test/layout_test_notification_manager.cc index f4f1864..701b24b 100644 --- a/content/shell/browser/layout_test/layout_test_notification_manager.cc +++ b/content/shell/browser/layout_test/layout_test_notification_manager.cc
@@ -134,6 +134,24 @@ base::Bind(&OnEventDispatchComplete)); } +void LayoutTestNotificationManager::SimulateClose(const std::string& title, + bool by_user) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + + const auto& persistent_iterator = persistent_notifications_.find(title); + if (persistent_iterator == persistent_notifications_.end()) + return; + + const PersistentNotification& notification = persistent_iterator->second; + content::NotificationEventDispatcher::GetInstance() + ->DispatchNotificationCloseEvent( + notification.browser_context, + notification.persistent_id, + notification.origin, + by_user, + base::Bind(&OnEventDispatchComplete)); +} + blink::WebNotificationPermission LayoutTestNotificationManager::CheckPermissionOnUIThread( BrowserContext* browser_context,
diff --git a/content/shell/browser/layout_test/layout_test_notification_manager.h b/content/shell/browser/layout_test/layout_test_notification_manager.h index 8856a4b..786bf007 100644 --- a/content/shell/browser/layout_test/layout_test_notification_manager.h +++ b/content/shell/browser/layout_test/layout_test_notification_manager.h
@@ -34,6 +34,10 @@ // clicked. Must be called on the UI thread. void SimulateClick(const std::string& title, int action_index); + // Simulates the closing a notification titled |title|. Must be called on + // the UI thread. + void SimulateClose(const std::string& title, bool by_user); + // PlatformNotificationService implementation. blink::WebNotificationPermission CheckPermissionOnUIThread( BrowserContext* browser_context,
diff --git a/content/shell/common/layout_test/layout_test_messages.h b/content/shell/common/layout_test/layout_test_messages.h index a67b872..b81b0bc9 100644 --- a/content/shell/common/layout_test/layout_test_messages.h +++ b/content/shell/common/layout_test/layout_test_messages.h
@@ -30,6 +30,9 @@ IPC_MESSAGE_ROUTED2(LayoutTestHostMsg_SimulateWebNotificationClick, std::string /* title */, int /* action_index */) +IPC_MESSAGE_ROUTED2(LayoutTestHostMsg_SimulateWebNotificationClose, + std::string /* title */, + bool /* by_user */) IPC_MESSAGE_ROUTED1(LayoutTestHostMsg_AcceptAllCookies, bool /* accept */) IPC_MESSAGE_ROUTED0(LayoutTestHostMsg_DeleteAllCookies)
diff --git a/content/shell/renderer/layout_test/blink_test_runner.cc b/content/shell/renderer/layout_test/blink_test_runner.cc index b72f981..1f6b855 100644 --- a/content/shell/renderer/layout_test/blink_test_runner.cc +++ b/content/shell/renderer/layout_test/blink_test_runner.cc
@@ -517,6 +517,12 @@ action_index)); } +void BlinkTestRunner::SimulateWebNotificationClose(const std::string& title, + bool by_user) { + Send(new LayoutTestHostMsg_SimulateWebNotificationClose(routing_id(), title, + by_user)); +} + void BlinkTestRunner::SetDeviceScaleFactor(float factor) { content::SetDeviceScaleFactor(render_view(), factor); }
diff --git a/content/shell/renderer/layout_test/blink_test_runner.h b/content/shell/renderer/layout_test/blink_test_runner.h index 2a0270b..0354eb39 100644 --- a/content/shell/renderer/layout_test/blink_test_runner.h +++ b/content/shell/renderer/layout_test/blink_test_runner.h
@@ -99,6 +99,8 @@ void SetDatabaseQuota(int quota) override; void SimulateWebNotificationClick(const std::string& title, int action_index) override; + void SimulateWebNotificationClose(const std::string& title, + bool by_user) override; void SetDeviceScaleFactor(float factor) override; void SetDeviceColorProfile(const std::string& name) override; void EnableUseZoomForDSF() override;
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index 5317f6c..91a9cfc 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -43,6 +43,7 @@ "//ui/accessibility:ax_gen", "//ui/base", "//ui/base:test_support", + "//ui/base:ui_data_pack", "//ui/base/ime", "//ui/events:dom_keycode_converter", "//ui/events:events_base", @@ -677,6 +678,7 @@ "//third_party/libjingle:libjingle_webrtc", "//third_party/libjingle:libpeerconnection", "//third_party/webrtc/modules/video_capture", + "//ui/shell_dialogs:shell_dialogs", ] if (is_linux || is_mac || is_win) {
diff --git a/content/test/data/accessibility/html/a-name-calc.html b/content/test/data/accessibility/html/a-name-calc.html index 3161ae6..a637b124 100644 --- a/content/test/data/accessibility/html/a-name-calc.html +++ b/content/test/data/accessibility/html/a-name-calc.html
@@ -1,5 +1,6 @@ <!-- @WIN-ALLOW:description* +@WIN-ALLOW:explicit-name* @MAC-ALLOW:AXDescription* @MAC-ALLOW:AXHelp* @MAC-DENY:AXValue*
diff --git a/content/test/data/accessibility/html/button-name-calc-expected-win.txt b/content/test/data/accessibility/html/button-name-calc-expected-win.txt index 0a8524f..82480dc7 100644 --- a/content/test/data/accessibility/html/button-name-calc-expected-win.txt +++ b/content/test/data/accessibility/html/button-name-calc-expected-win.txt
@@ -2,7 +2,7 @@ ++IA2_ROLE_SECTION ++++ROLE_SYSTEM_PUSHBUTTON name='InnerText0' FOCUSABLE ++++ROLE_SYSTEM_PUSHBUTTON name='InnerText1' FOCUSABLE description='Title1' -++++ROLE_SYSTEM_PUSHBUTTON name='AriaLabel2' FOCUSABLE description='Title2' -++++ROLE_SYSTEM_PUSHBUTTON name='LabelledBy3' FOCUSABLE description='Title3' -++++ROLE_SYSTEM_PUSHBUTTON name='LabelledBy4' FOCUSABLE description='DescribedBy4' +++++ROLE_SYSTEM_PUSHBUTTON name='AriaLabel2' FOCUSABLE explicit-name:true description='Title2' +++++ROLE_SYSTEM_PUSHBUTTON name='LabelledBy3' FOCUSABLE explicit-name:true description='Title3' +++++ROLE_SYSTEM_PUSHBUTTON name='LabelledBy4' FOCUSABLE explicit-name:true description='DescribedBy4' ++++ROLE_SYSTEM_PUSHBUTTON name='InnerText5' FOCUSABLE description='DescribedBy5'
diff --git a/content/test/data/accessibility/html/button-name-calc.html b/content/test/data/accessibility/html/button-name-calc.html index 4eace79..cf97c791 100644 --- a/content/test/data/accessibility/html/button-name-calc.html +++ b/content/test/data/accessibility/html/button-name-calc.html
@@ -1,5 +1,6 @@ <!-- @WIN-ALLOW:description* +@WIN-ALLOW:explicit-name* @MAC-ALLOW:AXDescription* @MAC-ALLOW:AXHelp* @MAC-DENY:AXValue*
diff --git a/content/test/data/accessibility/html/checkbox-name-calc-expected-win.txt b/content/test/data/accessibility/html/checkbox-name-calc-expected-win.txt index 10eaf57..634f507 100644 --- a/content/test/data/accessibility/html/checkbox-name-calc-expected-win.txt +++ b/content/test/data/accessibility/html/checkbox-name-calc-expected-win.txt
@@ -1,8 +1,8 @@ ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE ++IA2_ROLE_SECTION -++++ROLE_SYSTEM_CHECKBUTTON name='Title0' FOCUSABLE -++++ROLE_SYSTEM_CHECKBUTTON name='Label1' FOCUSABLE description='Title1' -++++ROLE_SYSTEM_CHECKBUTTON name='AriaLabel2' FOCUSABLE description='Title2' -++++ROLE_SYSTEM_CHECKBUTTON name='LabelledBy3' FOCUSABLE description='Title3' -++++ROLE_SYSTEM_CHECKBUTTON name='LabelledBy4' FOCUSABLE description='DescribedBy4' +++++ROLE_SYSTEM_CHECKBUTTON name='Title0' FOCUSABLE explicit-name:true +++++ROLE_SYSTEM_CHECKBUTTON name='Label1' FOCUSABLE explicit-name:true description='Title1' +++++ROLE_SYSTEM_CHECKBUTTON name='AriaLabel2' FOCUSABLE explicit-name:true description='Title2' +++++ROLE_SYSTEM_CHECKBUTTON name='LabelledBy3' FOCUSABLE explicit-name:true description='Title3' +++++ROLE_SYSTEM_CHECKBUTTON name='LabelledBy4' FOCUSABLE explicit-name:true description='DescribedBy4' ++++ROLE_SYSTEM_CHECKBUTTON FOCUSABLE description='DescribedBy5'
diff --git a/content/test/data/accessibility/html/checkbox-name-calc.html b/content/test/data/accessibility/html/checkbox-name-calc.html index c9aa59f..c1c96d3b 100644 --- a/content/test/data/accessibility/html/checkbox-name-calc.html +++ b/content/test/data/accessibility/html/checkbox-name-calc.html
@@ -1,5 +1,6 @@ <!-- @WIN-ALLOW:description* +@WIN-ALLOW:explicit-name* @MAC-ALLOW:AXDescription* @MAC-ALLOW:AXHelp* @MAC-DENY:AXValue*
diff --git a/content/test/data/accessibility/html/input-text-name-calc-expected-win.txt b/content/test/data/accessibility/html/input-text-name-calc-expected-win.txt index a5362ce3..a5ff360 100644 --- a/content/test/data/accessibility/html/input-text-name-calc-expected-win.txt +++ b/content/test/data/accessibility/html/input-text-name-calc-expected-win.txt
@@ -1,9 +1,9 @@ ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE ++IA2_ROLE_SECTION -++++ROLE_SYSTEM_TEXT name='Title0' FOCUSABLE -++++ROLE_SYSTEM_TEXT name='Label1' FOCUSABLE description='Title1' -++++ROLE_SYSTEM_TEXT name='AriaLabel2' FOCUSABLE description='Title2' -++++ROLE_SYSTEM_TEXT name='LabelledBy3' FOCUSABLE description='Title3' -++++ROLE_SYSTEM_TEXT name='Placeholder4' FOCUSABLE -++++ROLE_SYSTEM_TEXT name='Placeholder5' FOCUSABLE description='Title5' -++++ROLE_SYSTEM_TEXT name='LabelledBy6' FOCUSABLE description='DescribedBy6' +++++ROLE_SYSTEM_TEXT name='Title0' FOCUSABLE explicit-name:true +++++ROLE_SYSTEM_TEXT name='Label1' FOCUSABLE explicit-name:true description='Title1' +++++ROLE_SYSTEM_TEXT name='AriaLabel2' FOCUSABLE explicit-name:true description='Title2' +++++ROLE_SYSTEM_TEXT name='LabelledBy3' FOCUSABLE explicit-name:true description='Title3' +++++ROLE_SYSTEM_TEXT name='Placeholder4' FOCUSABLE explicit-name:true +++++ROLE_SYSTEM_TEXT name='Placeholder5' FOCUSABLE explicit-name:true description='Title5' +++++ROLE_SYSTEM_TEXT name='LabelledBy6' FOCUSABLE explicit-name:true description='DescribedBy6'
diff --git a/content/test/data/accessibility/html/input-text-name-calc.html b/content/test/data/accessibility/html/input-text-name-calc.html index 5843b8c..a08d03d8 100644 --- a/content/test/data/accessibility/html/input-text-name-calc.html +++ b/content/test/data/accessibility/html/input-text-name-calc.html
@@ -1,5 +1,6 @@ <!-- @WIN-ALLOW:description* +@WIN-ALLOW:explicit-name* --> <html> <body>
diff --git a/content/test/data/media/mediarecorder_test.html b/content/test/data/media/mediarecorder_test.html index bd242c6..b5db523 100644 --- a/content/test/data/media/mediarecorder_test.html +++ b/content/test/data/media/mediarecorder_test.html
@@ -49,6 +49,8 @@ remotePeerConnection.createAnswer(function(description) { remotePeerConnection.setLocalDescription(description); localPeerConnection.setRemoteDescription(description); + }, function(error) { + failTest('Error: ' + error); }); } @@ -77,6 +79,8 @@ localPeerConnection.setLocalDescription(description); remotePeerConnection.setRemoteDescription(description); createAnswer(description); + }, function(error) { + failTest('Error: ' + error); }); document.getElementById("video").src = URL.createObjectURL(localStream);
diff --git a/content/test/data/media/peerconnection-call.html b/content/test/data/media/peerconnection-call.html index bf2459c0..30e35f4 100644 --- a/content/test/data/media/peerconnection-call.html +++ b/content/test/data/media/peerconnection-call.html
@@ -812,9 +812,11 @@ connectOnIceCandidate(caller, callee); caller.createOffer( - function (offer) { - onOfferCreated(offer, caller, callee); - }); + function (offer) { + onOfferCreated(offer, caller, callee); + }, + function(error) { failTest(error); } + ); } function iceCandidateIsLoopback(candidate) { @@ -902,7 +904,9 @@ callee.createAnswer( function (answer) { onAnswerCreated(answer, caller, callee); - }); + }, + function(error) { failTest(error); } + ); }, onRemoteDescriptionError); }
diff --git a/content/test/fake_renderer_scheduler.cc b/content/test/fake_renderer_scheduler.cc index 8fc9dee0..9725341 100644 --- a/content/test/fake_renderer_scheduler.cc +++ b/content/test/fake_renderer_scheduler.cc
@@ -18,18 +18,16 @@ return nullptr; } -scoped_refptr<base::SingleThreadTaskRunner> -FakeRendererScheduler::DefaultTaskRunner() { +scoped_refptr<scheduler::TaskQueue> FakeRendererScheduler::DefaultTaskRunner() { return nullptr; } -scoped_refptr<base::SingleThreadTaskRunner> +scoped_refptr<scheduler::TaskQueue> FakeRendererScheduler::CompositorTaskRunner() { return nullptr; } -scoped_refptr<base::SingleThreadTaskRunner> -FakeRendererScheduler::LoadingTaskRunner() { +scoped_refptr<scheduler::TaskQueue> FakeRendererScheduler::LoadingTaskRunner() { return nullptr; }
diff --git a/content/test/fake_renderer_scheduler.h b/content/test/fake_renderer_scheduler.h index a92c086e..2e08700 100644 --- a/content/test/fake_renderer_scheduler.h +++ b/content/test/fake_renderer_scheduler.h
@@ -17,9 +17,9 @@ // RendererScheduler implementation. scoped_ptr<blink::WebThread> CreateMainThread() override; - scoped_refptr<base::SingleThreadTaskRunner> DefaultTaskRunner() override; - scoped_refptr<base::SingleThreadTaskRunner> CompositorTaskRunner() override; - scoped_refptr<base::SingleThreadTaskRunner> LoadingTaskRunner() override; + scoped_refptr<scheduler::TaskQueue> DefaultTaskRunner() override; + scoped_refptr<scheduler::TaskQueue> CompositorTaskRunner() override; + scoped_refptr<scheduler::TaskQueue> LoadingTaskRunner() override; scoped_refptr<scheduler::SingleThreadIdleTaskRunner> IdleTaskRunner() override; scoped_refptr<scheduler::TaskQueue> TimerTaskRunner() override;
diff --git a/content/test/gpu/generate_buildbot_json.py b/content/test/gpu/generate_buildbot_json.py index 59c594d3..fd8e1dc 100755 --- a/content/test/gpu/generate_buildbot_json.py +++ b/content/test/gpu/generate_buildbot_json.py
@@ -601,19 +601,42 @@ '--use-angle=d3d9', ], }, - # TODO(jmadill): run this on the optional tryservers once AMD/Win is fixed. 'webgl_conformance_gl_tests': { 'tester_configs': [ { 'fyi_only': True, + 'run_on_optional': True, 'os_types': ['win'] } ], + 'disabled_tester_configs': [ + { + # BUG 555545: Disable webgl_conformance_gl_tests on Win/AMD + 'swarming_dimension_sets': [ + { + 'gpu': '1002:6779', + 'os': 'Windows-2008ServerR2-SP1' + }, + ], + } + ], 'target_name': 'webgl_conformance', 'extra_browser_args': [ '--use-angle=gl', ], }, + 'webgl_conformance_angle_tests': { + 'tester_configs': [ + { + 'fyi_only': True, + 'os_types': ['linux'] + } + ], + 'target_name': 'webgl_conformance', + 'extra_browser_args': [ + '--use-gl=angle', + ], + }, 'webgl2_conformance_tests': { 'tester_configs': [ { @@ -645,7 +668,7 @@ return True return False -def should_run_on_tester_impl(tester_name, tester_config, tc, is_fyi): +def tester_config_matches_tester(tester_name, tester_config, tc, is_fyi): if tc.get('fyi_only', False) and not is_fyi: return False # Handle the optional tryservers with the 'run_on_optional' flag. @@ -676,8 +699,13 @@ return False # Otherwise, if unspecified, run on all testers. return True + # Check if this config is disabled on this tester + if 'disabled_tester_configs' in test_config: + for dtc in test_config['disabled_tester_configs']: + if tester_config_matches_tester(tester_name, tester_config, dtc, is_fyi): + return False for tc in test_config['tester_configs']: - if should_run_on_tester_impl(tester_name, tester_config, tc, is_fyi): + if tester_config_matches_tester(tester_name, tester_config, tc, is_fyi): return True return False
diff --git a/content/test/gpu/gpu_tests/webgl_conformance_expectations.py b/content/test/gpu/gpu_tests/webgl_conformance_expectations.py index 70ab7ac..cc9ce730 100644 --- a/content/test/gpu/gpu_tests/webgl_conformance_expectations.py +++ b/content/test/gpu/gpu_tests/webgl_conformance_expectations.py
@@ -227,6 +227,21 @@ ['android', ('qualcomm', 'Adreno (TM) 420')], bug=499555) self.Fail('conformance/extensions/oes-texture-float-with-image.html', ['android', ('qualcomm', 'Adreno (TM) 420')], bug=499555) + self.Fail('conformance/textures/image_bitmap/tex-image-and-sub-image-2d-' + + 'with-image-bitmap-rgb-rgb-unsigned_byte.html', + ['android', ('qualcomm', 'Adreno (TM) 420')], bug=585108) + self.Fail('conformance/textures/image_bitmap/tex-image-and-sub-image-2d-' + + 'with-image-bitmap-rgba-rgba-unsigned_byte.html', + ['android', ('qualcomm', 'Adreno (TM) 420')], bug=585108) + self.Fail('conformance/textures/image_bitmap/tex-image-and-sub-image-2d-' + + 'with-image-bitmap-rgb-rgb-unsigned_short_5_6_5.html', + ['android', ('qualcomm', 'Adreno (TM) 420')], bug=585108) + self.Fail('conformance/textures/image_bitmap/tex-image-and-sub-image-2d-' + + 'with-image-bitmap-rgba-rgba-unsigned_short_4_4_4_4.html', + ['android', ('qualcomm', 'Adreno (TM) 420')], bug=585108) + self.Fail('conformance/textures/image_bitmap/tex-image-and-sub-image-2d-' + + 'with-image-bitmap-rgba-rgba-unsigned_short_5_5_5_1.html', + ['android', ('qualcomm', 'Adreno (TM) 420')], bug=585108) self.Fail('conformance/textures/video/tex-image-and-sub-image-2d-with-' + 'video-rgb-rgb-unsigned_byte.html', ['android', 'android-content-shell',
diff --git a/content/test/test_render_frame_host.cc b/content/test/test_render_frame_host.cc index 932dbf7..d827ced 100644 --- a/content/test/test_render_frame_host.cc +++ b/content/test/test_render_frame_host.cc
@@ -110,10 +110,8 @@ return; } - // Note that this does not simulate - // WebContentsImpl::DidGetRedirectForResourceRequest due to the difficulty in - // creating fake ResourceRequestDetails on the UI thread. - navigation_handle()->DidRedirectNavigation(new_url); + navigation_handle()->CallWillRedirectRequestForTesting(new_url, false, GURL(), + false); } void TestRenderFrameHost::SimulateNavigationCommit(const GURL& url) { @@ -224,8 +222,8 @@ int nav_entry_id, bool did_create_new_entry, const GURL& url) { - SendNavigateWithParameters(page_id, nav_entry_id, did_create_new_entry, url, - ui::PAGE_TRANSITION_LINK, 200, + SendNavigateWithParameters(page_id, nav_entry_id, did_create_new_entry, false, + url, ui::PAGE_TRANSITION_LINK, 200, ModificationCallback()); } @@ -233,8 +231,8 @@ int nav_entry_id, bool did_create_new_entry, const GURL& url) { - SendNavigateWithParameters(page_id, nav_entry_id, did_create_new_entry, url, - ui::PAGE_TRANSITION_RELOAD, 500, + SendNavigateWithParameters(page_id, nav_entry_id, did_create_new_entry, false, + url, ui::PAGE_TRANSITION_RELOAD, 500, ModificationCallback()); } @@ -244,8 +242,17 @@ bool did_create_new_entry, const GURL& url, ui::PageTransition transition) { - SendNavigateWithParameters(page_id, nav_entry_id, did_create_new_entry, url, - transition, 200, ModificationCallback()); + SendNavigateWithParameters(page_id, nav_entry_id, did_create_new_entry, false, + url, transition, 200, ModificationCallback()); +} + +void TestRenderFrameHost::SendNavigateWithReplacement(int page_id, + int nav_entry_id, + bool did_create_new_entry, + const GURL& url) { + SendNavigateWithParameters(page_id, nav_entry_id, did_create_new_entry, true, + url, ui::PAGE_TRANSITION_LINK, 200, + ModificationCallback()); } void TestRenderFrameHost::SendNavigateWithModificationCallback( @@ -254,14 +261,15 @@ bool did_create_new_entry, const GURL& url, const ModificationCallback& callback) { - SendNavigateWithParameters(page_id, nav_entry_id, did_create_new_entry, url, - ui::PAGE_TRANSITION_LINK, 200, callback); + SendNavigateWithParameters(page_id, nav_entry_id, did_create_new_entry, false, + url, ui::PAGE_TRANSITION_LINK, 200, callback); } void TestRenderFrameHost::SendNavigateWithParameters( int page_id, int nav_entry_id, bool did_create_new_entry, + bool should_replace_entry, const GURL& url, ui::PageTransition transition, int response_code, @@ -279,6 +287,7 @@ params.transition = transition; params.should_update_history = true; params.did_create_new_entry = did_create_new_entry; + params.should_replace_current_entry = should_replace_entry; params.gesture = NavigationGestureUser; params.contents_mime_type = contents_mime_type_; params.is_post = false;
diff --git a/content/test/test_render_frame_host.h b/content/test/test_render_frame_host.h index f29a895..6453a17 100644 --- a/content/test/test_render_frame_host.h +++ b/content/test/test_render_frame_host.h
@@ -79,6 +79,11 @@ void SendBeforeUnloadACK(bool proceed) override; void SimulateSwapOutACK() override; + void SendNavigateWithReplacement(int page_id, + int nav_entry_id, + bool did_create_new_entry, + const GURL& url); + using ModificationCallback = base::Callback<void(FrameHostMsg_DidCommitProvisionalLoad_Params*)>; @@ -134,6 +139,7 @@ void SendNavigateWithParameters(int page_id, int nav_entry_id, bool did_create_new_entry, + bool should_replace_entry, const GURL& url, ui::PageTransition transition, int response_code,
diff --git a/content/zygote/zygote_linux.cc b/content/zygote/zygote_linux.cc index c40538a..cab4722 100644 --- a/content/zygote/zygote_linux.cc +++ b/content/zygote/zygote_linux.cc
@@ -46,7 +46,7 @@ #include "sandbox/linux/services/credentials.h" #include "sandbox/linux/services/namespace_sandbox.h" -// See http://code.google.com/p/chromium/wiki/LinuxZygote +// See https://chromium.googlesource.com/chromium/src/+/master/docs/linux_zygote.md namespace content { @@ -108,7 +108,7 @@ // A SOCK_SEQPACKET socket is installed in fd 3. We get commands from the // browser on it. // A SOCK_DGRAM is installed in fd 5. This is the sandbox IPC channel. - // See http://code.google.com/p/chromium/wiki/LinuxSandboxIPC + // See https://chromium.googlesource.com/chromium/src/+/master/docs/linux_sandbox_ipc.md // We need to accept SIGCHLD, even though our handler is a no-op because // otherwise we cannot wait on children. (According to POSIX 2001.)
diff --git a/content/zygote/zygote_main_linux.cc b/content/zygote/zygote_main_linux.cc index 8a3221a..c30e108 100644 --- a/content/zygote/zygote_main_linux.cc +++ b/content/zygote/zygote_main_linux.cc
@@ -84,7 +84,7 @@ } // namespace -// See http://code.google.com/p/chromium/wiki/LinuxZygote +// See https://chromium.googlesource.com/chromium/src/+/master/docs/linux_zygote.md static void ProxyLocaltimeCallToBrowser(time_t input, struct tm* output, char* timezone_out, @@ -148,7 +148,7 @@ // // Our replacement functions can check this global and either proxy // the call to the browser over the sandbox IPC -// (http://code.google.com/p/chromium/wiki/LinuxSandboxIPC) or they can use +// (https://chromium.googlesource.com/chromium/src/+/master/docs/linux_sandbox_ipc.md) or they can use // dlsym with RTLD_NEXT to resolve the symbol, ignoring any symbols in the // current module. //
diff --git a/device/bluetooth/android/java/src/org/chromium/device/bluetooth/ChromeBluetoothAdapter.java b/device/bluetooth/android/java/src/org/chromium/device/bluetooth/ChromeBluetoothAdapter.java index 0774ea2..0a54a0bd 100644 --- a/device/bluetooth/android/java/src/org/chromium/device/bluetooth/ChromeBluetoothAdapter.java +++ b/device/bluetooth/android/java/src/org/chromium/device/bluetooth/ChromeBluetoothAdapter.java
@@ -111,6 +111,16 @@ return isPresent() && mAdapter.isEnabled(); } + // Implements BluetoothAdapterAndroid::SetPowered. + @CalledByNative + private boolean setPowered(boolean powered) { + if (powered) { + return isPresent() && mAdapter.enable(); + } else { + return isPresent() && mAdapter.disable(); + } + } + // Implements BluetoothAdapterAndroid::IsDiscoverable. @CalledByNative private boolean isDiscoverable() { @@ -184,6 +194,10 @@ private boolean startScan() { Wrappers.BluetoothLeScannerWrapper scanner = mAdapter.getBluetoothLeScanner(); + if (scanner == null) { + return false; + } + if (!canScan()) { return false; } @@ -199,6 +213,11 @@ scanner.startScan(null /* filters */, scanMode, mScanCallback); } catch (IllegalArgumentException e) { Log.e(TAG, "Cannot start scan: " + e); + mScanCallback = null; + return false; + } catch (IllegalStateException e) { + Log.e(TAG, "Adapter is off. Cannot start scan: " + e); + mScanCallback = null; return false; } return true; @@ -212,12 +231,16 @@ if (mScanCallback == null) { return false; } + try { - mAdapter.getBluetoothLeScanner().stopScan(mScanCallback); + Wrappers.BluetoothLeScannerWrapper scanner = mAdapter.getBluetoothLeScanner(); + if (scanner != null) { + scanner.stopScan(mScanCallback); + } } catch (IllegalArgumentException e) { Log.e(TAG, "Cannot stop scan: " + e); - mScanCallback = null; - return false; + } catch (IllegalStateException e) { + Log.e(TAG, "Adapter is off. Cannot stop scan: " + e); } mScanCallback = null; return true;
diff --git a/device/bluetooth/android/java/src/org/chromium/device/bluetooth/Wrappers.java b/device/bluetooth/android/java/src/org/chromium/device/bluetooth/Wrappers.java index 2ccdaae..9287f85 100644 --- a/device/bluetooth/android/java/src/org/chromium/device/bluetooth/Wrappers.java +++ b/device/bluetooth/android/java/src/org/chromium/device/bluetooth/Wrappers.java
@@ -46,13 +46,15 @@ class Wrappers { private static final String TAG = "Bluetooth"; + public static final int DEVICE_CLASS_UNSPECIFIED = 0x1F00; + /** * Wraps android.bluetooth.BluetoothAdapter. */ static class BluetoothAdapterWrapper { private final BluetoothAdapter mAdapter; protected final ContextWrapper mContext; - protected final BluetoothLeScannerWrapper mScanner; + protected BluetoothLeScannerWrapper mScannerWrapper; /** * Creates a BluetoothAdapterWrapper using the default @@ -94,34 +96,42 @@ Log.i(TAG, "BluetoothAdapterWrapper.create failed: Default adapter not found."); return null; } else { - return new BluetoothAdapterWrapper(adapter, new ContextWrapper(context), - new BluetoothLeScannerWrapper(adapter.getBluetoothLeScanner())); + return new BluetoothAdapterWrapper(adapter, new ContextWrapper(context)); } } - public BluetoothAdapterWrapper(BluetoothAdapter adapter, ContextWrapper context, - BluetoothLeScannerWrapper scanner) { + public BluetoothAdapterWrapper(BluetoothAdapter adapter, ContextWrapper context) { mAdapter = adapter; mContext = context; - mScanner = scanner; } - public ContextWrapper getContext() { - return mContext; + public boolean disable() { + return mAdapter.disable(); } - public BluetoothLeScannerWrapper getBluetoothLeScanner() { - return mScanner; - } - - public boolean isEnabled() { - return mAdapter.isEnabled(); + public boolean enable() { + return mAdapter.enable(); } public String getAddress() { return mAdapter.getAddress(); } + public BluetoothLeScannerWrapper getBluetoothLeScanner() { + BluetoothLeScanner scanner = mAdapter.getBluetoothLeScanner(); + if (scanner == null) { + return null; + } + if (mScannerWrapper == null) { + mScannerWrapper = new BluetoothLeScannerWrapper(scanner); + } + return mScannerWrapper; + } + + public ContextWrapper getContext() { + return mContext; + } + public String getName() { return mAdapter.getName(); } @@ -133,6 +143,10 @@ public boolean isDiscovering() { return mAdapter.isDiscovering(); } + + public boolean isEnabled() { + return mAdapter.isEnabled(); + } } /** @@ -155,7 +169,7 @@ * Wraps android.bluetooth.BluetoothLeScanner. */ static class BluetoothLeScannerWrapper { - private final BluetoothLeScanner mScanner; + protected final BluetoothLeScanner mScanner; private final HashMap<ScanCallbackWrapper, ForwardScanCallbackToWrapper> mCallbacks; public BluetoothLeScannerWrapper(BluetoothLeScanner scanner) { @@ -276,6 +290,11 @@ } public int getBluetoothClass_getDeviceClass() { + if (mDevice == null || mDevice.getBluetoothClass() == null) { + // BluetoothDevice.getBluetoothClass() returns null if adapter has been powered off. + // Return DEVICE_CLASS_UNSPECIFIED in these cases. + return DEVICE_CLASS_UNSPECIFIED; + } return mDevice.getBluetoothClass().getDeviceClass(); }
diff --git a/device/bluetooth/bluetooth_adapter_android.cc b/device/bluetooth/bluetooth_adapter_android.cc index 144ad520b..00cead7 100644 --- a/device/bluetooth/bluetooth_adapter_android.cc +++ b/device/bluetooth/bluetooth_adapter_android.cc
@@ -77,7 +77,12 @@ void BluetoothAdapterAndroid::SetPowered(bool powered, const base::Closure& callback, const ErrorCallback& error_callback) { - NOTIMPLEMENTED(); + if (Java_ChromeBluetoothAdapter_setPowered(AttachCurrentThread(), + j_adapter_.obj(), powered)) { + callback.Run(); + } else { + error_callback.Run(); + } } bool BluetoothAdapterAndroid::IsDiscoverable() const {
diff --git a/device/bluetooth/bluetooth_adapter_unittest.cc b/device/bluetooth/bluetooth_adapter_unittest.cc index 12351c9..91bd19a 100644 --- a/device/bluetooth/bluetooth_adapter_unittest.cc +++ b/device/bluetooth/bluetooth_adapter_unittest.cc
@@ -479,6 +479,43 @@ } #endif // defined(OS_ANDROID) +// Android only: this test is specific for Android and should not be +// enabled for other platforms. +#if defined(OS_ANDROID) +TEST_F(BluetoothTest, AdapterIllegalStateBeforeStartScan) { + if (!PlatformSupportsLowEnergy()) { + LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; + return; + } + InitWithFakeAdapter(); + ForceIllegalStateException(); + StartLowEnergyDiscoverySessionExpectedToFail(); + EXPECT_EQ(0, callback_count_); + EXPECT_EQ(1, error_callback_count_); + EXPECT_FALSE(adapter_->IsDiscovering()); +} +#endif // defined(OS_ANDROID) + +// Android only: this test is specific for Android and should not be +// enabled for other platforms. +#if defined(OS_ANDROID) +TEST_F(BluetoothTest, AdapterIllegalStateBeforeStopScan) { + if (!PlatformSupportsLowEnergy()) { + LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; + return; + } + InitWithFakeAdapter(); + StartLowEnergyDiscoverySession(); + EXPECT_EQ(1, callback_count_); + EXPECT_EQ(0, error_callback_count_); + EXPECT_TRUE(adapter_->IsDiscovering()); + ForceIllegalStateException(); + discovery_sessions_[0]->Stop(GetCallback(Call::EXPECTED), + GetErrorCallback(Call::NOT_EXPECTED)); + EXPECT_FALSE(adapter_->IsDiscovering()); +} +#endif // defined(OS_ANDROID) + #if defined(OS_ANDROID) || defined(OS_MACOSX) // Checks that discovery fails (instead of hanging) when permissions are denied. TEST_F(BluetoothTest, NoPermissions) { @@ -501,7 +538,7 @@ } #endif // defined(OS_ANDROID) || defined(OS_MACOSX) -#if defined(OS_ANDROID) || defined(OS_MACOSX) +#if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) // Discovers a device. TEST_F(BluetoothTest, DiscoverLowEnergyDevice) { if (!PlatformSupportsLowEnergy()) { @@ -518,9 +555,9 @@ BluetoothDevice* device = adapter_->GetDevice(observer.last_device_address()); EXPECT_TRUE(device); } -#endif // defined(OS_ANDROID) || defined(OS_MACOSX) +#endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) -#if defined(OS_ANDROID) || defined(OS_MACOSX) +#if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) // Discovers the same device multiple times. TEST_F(BluetoothTest, DiscoverLowEnergyDeviceTwice) { if (!PlatformSupportsLowEnergy()) { @@ -544,7 +581,7 @@ EXPECT_EQ(0, observer.device_added_count()); EXPECT_EQ(1u, adapter_->GetDevices().size()); } -#endif // defined(OS_ANDROID) || defined(OS_MACOSX) +#endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) #if defined(OS_ANDROID) || defined(OS_MACOSX) // Discovers a device, and then again with new Service UUIDs. @@ -597,7 +634,7 @@ } #endif // defined(OS_ANDROID) || defined(OS_MACOSX) -#if defined(OS_ANDROID) || defined(OS_MACOSX) +#if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) // Discovers multiple devices when addresses vary. TEST_F(BluetoothTest, DiscoverMultipleLowEnergyDevices) { if (!PlatformSupportsLowEnergy()) { @@ -614,6 +651,54 @@ EXPECT_EQ(2, observer.device_added_count()); EXPECT_EQ(2u, adapter_->GetDevices().size()); } -#endif // defined(OS_ANDROID) || defined(OS_MACOSX) +#endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) + +#if defined(OS_ANDROID) +TEST_F(BluetoothTest, TogglePowerFakeAdapter) { + InitWithFakeAdapter(); + ASSERT_TRUE(adapter_->IsPresent()); + ASSERT_TRUE(adapter_->IsPowered()); + + // Check if power can be turned off. + adapter_->SetPowered(false, GetCallback(Call::EXPECTED), + GetErrorCallback(Call::NOT_EXPECTED)); + EXPECT_FALSE(adapter_->IsPowered()); + + // Check if power can be turned on again. + adapter_->SetPowered(true, GetCallback(Call::EXPECTED), + GetErrorCallback(Call::NOT_EXPECTED)); + EXPECT_TRUE(adapter_->IsPowered()); +} +#endif // defined(OS_ANDROID) + +#if defined(OS_ANDROID) +TEST_F(BluetoothTest, TogglePowerBeforeScan) { + InitWithFakeAdapter(); + ASSERT_TRUE(adapter_->IsPresent()); + ASSERT_TRUE(adapter_->IsPowered()); + + // Turn off adapter. + adapter_->SetPowered(false, GetCallback(Call::EXPECTED), + GetErrorCallback(Call::NOT_EXPECTED)); + ASSERT_FALSE(adapter_->IsPowered()); + + // Try to perform a scan. + StartLowEnergyDiscoverySessionExpectedToFail(); + + // Turn on adapter. + adapter_->SetPowered(true, GetCallback(Call::EXPECTED), + GetErrorCallback(Call::NOT_EXPECTED)); + ASSERT_TRUE(adapter_->IsPowered()); + + // Try to perform a scan again. + ResetEventCounts(); + StartLowEnergyDiscoverySession(); + EXPECT_EQ(1, callback_count_); + EXPECT_EQ(0, error_callback_count_); + EXPECT_TRUE(adapter_->IsDiscovering()); + ASSERT_EQ((size_t)1, discovery_sessions_.size()); + EXPECT_TRUE(discovery_sessions_[0]->IsActive()); +} +#endif // defined(OS_ANDROID) } // namespace device
diff --git a/device/bluetooth/bluetooth_classic_win.cc b/device/bluetooth/bluetooth_classic_win.cc index 2f19cb1..b4e4eac56 100644 --- a/device/bluetooth/bluetooth_classic_win.cc +++ b/device/bluetooth/bluetooth_classic_win.cc
@@ -35,7 +35,14 @@ HBLUETOOTH_RADIO_FIND BluetoothClassicWrapper::FindFirstRadio( const BLUETOOTH_FIND_RADIO_PARAMS* params, HANDLE* out_handle) { - return BluetoothFindFirstRadio(params, out_handle); + HANDLE radio_handle = NULL; + HBLUETOOTH_RADIO_FIND radio_find_handle = + BluetoothFindFirstRadio(params, &radio_handle); + if (radio_find_handle) { + opened_radio_handle_.Set(radio_handle); + *out_handle = opened_radio_handle_.Get(); + } + return radio_find_handle; } DWORD BluetoothClassicWrapper::GetRadioInfo( @@ -77,5 +84,9 @@ return BluetoothEnableIncomingConnections(handle, is_enable); } +DWORD BluetoothClassicWrapper::LastError() { + return GetLastError(); +} + } // namespace win } // namespace device
diff --git a/device/bluetooth/bluetooth_classic_win.h b/device/bluetooth/bluetooth_classic_win.h index 8e330e4c..e909db35 100644 --- a/device/bluetooth/bluetooth_classic_win.h +++ b/device/bluetooth/bluetooth_classic_win.h
@@ -5,6 +5,7 @@ #ifndef DEVICE_BLUETOOTH_BLUETOOTH_CLASSIC_WIN_H_ #define DEVICE_BLUETOOTH_BLUETOOTH_CLASSIC_WIN_H_ +#include "base/win/scoped_handle.h" #include "device/bluetooth/bluetooth_export.h" #include "device/bluetooth/bluetooth_init_win.h" @@ -35,10 +36,14 @@ virtual BOOL FindDeviceClose(HBLUETOOTH_DEVICE_FIND handle); virtual BOOL EnableDiscovery(HANDLE handle, BOOL is_enable); virtual BOOL EnableIncomingConnections(HANDLE handle, BOOL is_enable); + virtual DWORD LastError(); protected: BluetoothClassicWrapper(); virtual ~BluetoothClassicWrapper(); + + private: + base::win::ScopedHandle opened_radio_handle_; }; } // namespace win
diff --git a/device/bluetooth/bluetooth_classic_win_fake.cc b/device/bluetooth/bluetooth_classic_win_fake.cc index 920acef..013711f53 100644 --- a/device/bluetooth/bluetooth_classic_win_fake.cc +++ b/device/bluetooth/bluetooth_classic_win_fake.cc
@@ -9,37 +9,51 @@ namespace device { namespace win { -BluetoothClassicWrapperFake::BluetoothClassicWrapperFake() {} +BluetoothClassicWrapperFake::BluetoothClassicWrapperFake() + : last_error_(ERROR_SUCCESS) {} BluetoothClassicWrapperFake::~BluetoothClassicWrapperFake() {} HBLUETOOTH_RADIO_FIND BluetoothClassicWrapperFake::FindFirstRadio( const BLUETOOTH_FIND_RADIO_PARAMS* params, HANDLE* out_handle) { - NOTIMPLEMENTED(); + if (simulated_radios_) { + *out_handle = (PVOID)simulated_radios_.get(); + last_error_ = ERROR_SUCCESS; + return *out_handle; + } + last_error_ = ERROR_NO_MORE_ITEMS; return NULL; } DWORD BluetoothClassicWrapperFake::GetRadioInfo( HANDLE handle, PBLUETOOTH_RADIO_INFO out_radio_info) { - NOTIMPLEMENTED(); - return ERROR_SUCCESS; + if (simulated_radios_) { + *out_radio_info = simulated_radios_->radio_info; + last_error_ = ERROR_SUCCESS; + return last_error_; + } + last_error_ = ERROR_INVALID_HANDLE; + return last_error_; } BOOL BluetoothClassicWrapperFake::FindRadioClose(HBLUETOOTH_RADIO_FIND handle) { - NOTIMPLEMENTED(); return TRUE; } BOOL BluetoothClassicWrapperFake::IsConnectable(HANDLE handle) { - NOTIMPLEMENTED(); - return TRUE; + if (simulated_radios_) { + last_error_ = ERROR_SUCCESS; + return simulated_radios_->is_connectable; + } + last_error_ = ERROR_INVALID_HANDLE; + return FALSE; } HBLUETOOTH_DEVICE_FIND BluetoothClassicWrapperFake::FindFirstDevice( const BLUETOOTH_DEVICE_SEARCH_PARAMS* params, BLUETOOTH_DEVICE_INFO* out_device_info) { - NOTIMPLEMENTED(); + last_error_ = ERROR_NO_MORE_ITEMS; return NULL; } @@ -52,20 +66,35 @@ BOOL BluetoothClassicWrapperFake::FindDeviceClose( HBLUETOOTH_DEVICE_FIND handle) { - NOTIMPLEMENTED(); return TRUE; } BOOL BluetoothClassicWrapperFake::EnableDiscovery(HANDLE handle, BOOL is_enable) { - NOTIMPLEMENTED(); return TRUE; } BOOL BluetoothClassicWrapperFake::EnableIncomingConnections(HANDLE handle, BOOL is_enable) { - NOTIMPLEMENTED(); return TRUE; } + +DWORD BluetoothClassicWrapperFake::LastError() { + return last_error_; +} + +BluetoothRadio* BluetoothClassicWrapperFake::SimulateARadio( + base::string16 name, + BLUETOOTH_ADDRESS address) { + BluetoothRadio* radio = new BluetoothRadio(); + radio->is_connectable = true; // set it connectable by default. + size_t length = + ((name.size() > BLUETOOTH_MAX_NAME_SIZE) ? BLUETOOTH_MAX_NAME_SIZE + : name.size()); + wcsncpy(radio->radio_info.szName, name.c_str(), length); + radio->radio_info.address = address; + simulated_radios_.reset(radio); + return radio; +} } // namespace device } // namespace win
diff --git a/device/bluetooth/bluetooth_classic_win_fake.h b/device/bluetooth/bluetooth_classic_win_fake.h index 9c1a1b9..4627224 100644 --- a/device/bluetooth/bluetooth_classic_win_fake.h +++ b/device/bluetooth/bluetooth_classic_win_fake.h
@@ -7,8 +7,17 @@ #include "device/bluetooth/bluetooth_classic_win.h" +#include "base/memory/scoped_ptr.h" +#include "base/strings/string16.h" + namespace device { namespace win { + +struct BluetoothRadio { + BLUETOOTH_RADIO_INFO radio_info; + BOOL is_connectable; +}; + // Fake implementation of BluetoothClassicWrapper. Used for BluetoothTestWin. class BluetoothClassicWrapperFake : public BluetoothClassicWrapper { public: @@ -30,6 +39,14 @@ BOOL FindDeviceClose(HBLUETOOTH_DEVICE_FIND handle) override; BOOL EnableDiscovery(HANDLE handle, BOOL is_enable) override; BOOL EnableIncomingConnections(HANDLE handle, BOOL is_enable) override; + DWORD LastError() override; + + BluetoothRadio* SimulateARadio(base::string16 name, + BLUETOOTH_ADDRESS address); + + private: + scoped_ptr<BluetoothRadio> simulated_radios_; + DWORD last_error_; }; } // namespace device
diff --git a/device/bluetooth/bluetooth_low_energy_win.h b/device/bluetooth/bluetooth_low_energy_win.h index 9abdf34..9d92435 100644 --- a/device/bluetooth/bluetooth_low_energy_win.h +++ b/device/bluetooth/bluetooth_low_energy_win.h
@@ -77,7 +77,7 @@ // Returns true only on Windows platforms supporting Bluetooth Low Energy. bool DEVICE_BLUETOOTH_EXPORT IsBluetoothLowEnergySupported(); -struct BluetoothLowEnergyServiceInfo { +struct DEVICE_BLUETOOTH_EXPORT BluetoothLowEnergyServiceInfo { BluetoothLowEnergyServiceInfo(); ~BluetoothLowEnergyServiceInfo(); @@ -86,7 +86,7 @@ USHORT attribute_handle = 0; }; -struct BluetoothLowEnergyDeviceInfo { +struct DEVICE_BLUETOOTH_EXPORT BluetoothLowEnergyDeviceInfo { BluetoothLowEnergyDeviceInfo(); ~BluetoothLowEnergyDeviceInfo();
diff --git a/device/bluetooth/bluetooth_low_energy_win_fake.cc b/device/bluetooth/bluetooth_low_energy_win_fake.cc index d1ef1df..6db6444d 100644 --- a/device/bluetooth/bluetooth_low_energy_win_fake.cc +++ b/device/bluetooth/bluetooth_low_energy_win_fake.cc
@@ -4,33 +4,235 @@ #include "device/bluetooth/bluetooth_low_energy_win_fake.h" +#include "base/strings/stringprintf.h" + +namespace { +const char kPlatformNotSupported[] = + "Bluetooth Low energy is only supported on Windows 8 and later."; +} // namespace + namespace device { namespace win { +BLEDevice::BLEDevice() {} +BLEDevice::~BLEDevice() {} + +BLEGattService::BLEGattService() {} +BLEGattService::~BLEGattService() {} + +BLEGattCharacteristic::BLEGattCharacteristic() {} +BLEGattCharacteristic::~BLEGattCharacteristic() {} + +BLEGattDescriptor::BLEGattDescriptor() {} +BLEGattDescriptor::~BLEGattDescriptor() {} + BluetoothLowEnergyWrapperFake::BluetoothLowEnergyWrapperFake() {} BluetoothLowEnergyWrapperFake::~BluetoothLowEnergyWrapperFake() {} bool BluetoothLowEnergyWrapperFake::EnumerateKnownBluetoothLowEnergyDevices( ScopedVector<BluetoothLowEnergyDeviceInfo>* devices, std::string* error) { - NOTIMPLEMENTED(); - return false; + if (!IsBluetoothLowEnergySupported()) { + *error = kPlatformNotSupported; + return false; + } + + for (auto& device : simulated_devices_) { + BluetoothLowEnergyDeviceInfo* device_info = + new BluetoothLowEnergyDeviceInfo(); + *device_info = *(device.second->device_info); + devices->push_back(device_info); + } + return true; } bool BluetoothLowEnergyWrapperFake:: EnumerateKnownBluetoothLowEnergyGattServiceDevices( ScopedVector<BluetoothLowEnergyDeviceInfo>* devices, std::string* error) { - NOTIMPLEMENTED(); - return false; + if (!IsBluetoothLowEnergySupported()) { + *error = kPlatformNotSupported; + return false; + } + + for (auto& device : simulated_devices_) { + for (auto& service : device.second->primary_services) { + BluetoothLowEnergyDeviceInfo* device_info = + new BluetoothLowEnergyDeviceInfo(); + *device_info = *(device.second->device_info); + base::string16 path = GenerateBLEGattServiceDevicePath( + device.second->device_info->path.value(), + service.second->service_info->AttributeHandle); + device_info->path = base::FilePath(path); + devices->push_back(device_info); + } + } + return true; } bool BluetoothLowEnergyWrapperFake::EnumerateKnownBluetoothLowEnergyServices( const base::FilePath& device_path, ScopedVector<BluetoothLowEnergyServiceInfo>* services, std::string* error) { - NOTIMPLEMENTED(); - return false; + if (!IsBluetoothLowEnergySupported()) { + *error = kPlatformNotSupported; + return false; + } + + base::string16 device_address = + ExtractDeviceAddressFromDevicePath(device_path.value()); + base::string16 service_attribute_handle = + ExtractServiceAttributeHandleFromDevicePath(device_path.value()); + + BLEDevicesMap::iterator it_d = simulated_devices_.find( + std::string(device_address.begin(), device_address.end())); + CHECK(it_d != simulated_devices_.end()); + + // |service_attribute_handle| is empty means |device_path| is a BLE device + // path, otherwise it is a BLE GATT service device path. + if (service_attribute_handle.empty()) { + // Return all primary services for BLE device. + for (auto& primary_service : it_d->second->primary_services) { + BluetoothLowEnergyServiceInfo* service_info = + new BluetoothLowEnergyServiceInfo(); + service_info->uuid = primary_service.second->service_info->ServiceUuid; + service_info->attribute_handle = + primary_service.second->service_info->AttributeHandle; + services->push_back(service_info); + } + } else { + // Return corresponding GATT service for BLE GATT service device. + BLEGattServicesMap::iterator it_s = + it_d->second->primary_services.find(std::string( + service_attribute_handle.begin(), service_attribute_handle.end())); + CHECK(it_s != it_d->second->primary_services.end()); + BluetoothLowEnergyServiceInfo* service_info = + new BluetoothLowEnergyServiceInfo(); + service_info->uuid = it_s->second->service_info->ServiceUuid; + service_info->attribute_handle = + it_s->second->service_info->AttributeHandle; + services->push_back(service_info); + } + + return true; +} + +BLEDevice* BluetoothLowEnergyWrapperFake::SimulateBLEDevice( + std::string device_name, + BLUETOOTH_ADDRESS device_address) { + BLEDevice* device = new BLEDevice(); + BluetoothLowEnergyDeviceInfo* device_info = + new BluetoothLowEnergyDeviceInfo(); + std::string string_device_address = + BluetoothAddressToCanonicalString(device_address); + device_info->path = + base::FilePath(GenerateBLEDevicePath(string_device_address)); + device_info->friendly_name = device_name; + device_info->address = device_address; + device->device_info.reset(device_info); + simulated_devices_[string_device_address] = make_scoped_ptr(device); + return device; +} + +BLEGattService* BluetoothLowEnergyWrapperFake::SimulateBLEGattService( + BLEDevice* device, + std::string uuid) { + CHECK(device); + + BLEGattService* service = new BLEGattService(); + PBTH_LE_GATT_SERVICE service_info = new BTH_LE_GATT_SERVICE[1]; + std::string string_device_address = + BluetoothAddressToCanonicalString(device->device_info->address); + service_info->AttributeHandle = + GenerateAUniqueAttributeHandle(string_device_address); + service_info->ServiceUuid = CanonicalStringToBTH_LE_UUID(uuid); + service->service_info.reset(service_info); + device->primary_services[std::to_string(service_info->AttributeHandle)] = + make_scoped_ptr(service); + return service; +} + +USHORT BluetoothLowEnergyWrapperFake::GenerateAUniqueAttributeHandle( + std::string device_address) { + scoped_ptr<std::set<USHORT>>& set_of_ushort = + attribute_handle_table_[device_address]; + if (set_of_ushort) { + USHORT max_attribute_handle = *set_of_ushort->rbegin(); + if (max_attribute_handle < 0xFFFF) { + USHORT new_attribute_handle = max_attribute_handle + 1; + set_of_ushort->insert(new_attribute_handle); + return new_attribute_handle; + } else { + USHORT i = 1; + for (; i < 0xFFFF; i++) { + if (set_of_ushort->find(i) == set_of_ushort->end()) + break; + } + if (i >= 0xFFFF) + return 0; + set_of_ushort->insert(i); + return i; + } + } + + USHORT smallest_att_handle = 1; + std::set<USHORT>* new_set = new std::set<USHORT>(); + new_set->insert(smallest_att_handle); + set_of_ushort.reset(new_set); + return smallest_att_handle; +} + +base::string16 BluetoothLowEnergyWrapperFake::GenerateBLEDevicePath( + std::string device_address) { + return base::string16(device_address.begin(), device_address.end()); +} + +base::string16 BluetoothLowEnergyWrapperFake::GenerateBLEGattServiceDevicePath( + base::string16 resident_device_path, + USHORT service_attribute_handle) { + std::string sub_path = std::to_string(service_attribute_handle); + return resident_device_path + L"/" + + base::string16(sub_path.begin(), sub_path.end()); +} + +base::string16 +BluetoothLowEnergyWrapperFake::ExtractDeviceAddressFromDevicePath( + base::string16 path) { + std::size_t found = path.find('/'); + if (found != base::string16::npos) { + return path.substr(0, found - 1); + } + return path; +} + +base::string16 +BluetoothLowEnergyWrapperFake::ExtractServiceAttributeHandleFromDevicePath( + base::string16 path) { + std::size_t found = path.find('/'); + if (found == base::string16::npos) + return base::string16(); + return path.substr(found + 1); +} + +BTH_LE_UUID BluetoothLowEnergyWrapperFake::CanonicalStringToBTH_LE_UUID( + std::string uuid) { + BTH_LE_UUID win_uuid; + // Only short UUIDs (4 hex digits) have beened used in BluetoothTest right + // now. Need fix after using long UUIDs. + win_uuid.IsShortUuid = true; + unsigned int data[1]; + int result = sscanf_s(uuid.c_str(), "%04x", &data[0]); + CHECK(result == 1); + win_uuid.Value.ShortUuid = data[0]; + return win_uuid; +} + +std::string BluetoothLowEnergyWrapperFake::BluetoothAddressToCanonicalString( + const BLUETOOTH_ADDRESS& btha) { + std::string result = base::StringPrintf( + "%02X:%02X:%02X:%02X:%02X:%02X", btha.rgBytes[5], btha.rgBytes[4], + btha.rgBytes[3], btha.rgBytes[2], btha.rgBytes[1], btha.rgBytes[0]); + return result; } } // namespace win
diff --git a/device/bluetooth/bluetooth_low_energy_win_fake.h b/device/bluetooth/bluetooth_low_energy_win_fake.h index a22d5cb..d2a9ca2 100644 --- a/device/bluetooth/bluetooth_low_energy_win_fake.h +++ b/device/bluetooth/bluetooth_low_energy_win_fake.h
@@ -7,9 +7,61 @@ #include "device/bluetooth/bluetooth_low_energy_win.h" +#include <set> +#include <unordered_map> + namespace device { namespace win { +struct BLEDevice; +struct BLEGattService; +struct BLEGattCharacteristic; +struct BLEGattDescriptor; + +// The key of BLEDevicesMap is the string of the BLE device address. +typedef std::unordered_map<std::string, scoped_ptr<BLEDevice>> BLEDevicesMap; +// The key of BLEGattServicesMap, BLEGattCharacteristicsMap and +// BLEGattDescriptorsMap is the string of the attribute handle. +typedef std::unordered_map<std::string, scoped_ptr<BLEGattService>> + BLEGattServicesMap; +typedef std::unordered_map<std::string, scoped_ptr<BLEGattCharacteristic>> + BLEGattCharacteristicsMap; +typedef std::unordered_map<std::string, scoped_ptr<BLEGattDescriptor>> + BLEGattDescriptorsMap; +// The key of BLEAttributeHandleTable is the string of the BLE device address. +typedef std::unordered_map<std::string, scoped_ptr<std::set<USHORT>>> + BLEAttributeHandleTable; + +struct BLEDevice { + BLEDevice(); + ~BLEDevice(); + scoped_ptr<BluetoothLowEnergyDeviceInfo> device_info; + BLEGattServicesMap primary_services; +}; + +struct BLEGattService { + BLEGattService(); + ~BLEGattService(); + scoped_ptr<BTH_LE_GATT_SERVICE> service_info; + BLEGattServicesMap included_services; + BLEGattCharacteristicsMap included_characteristics; +}; + +struct BLEGattCharacteristic { + BLEGattCharacteristic(); + ~BLEGattCharacteristic(); + scoped_ptr<BTH_LE_GATT_CHARACTERISTIC> characteristic_info; + scoped_ptr<BTH_LE_GATT_CHARACTERISTIC_VALUE> value; + BLEGattDescriptorsMap included_descriptors; +}; + +struct BLEGattDescriptor { + BLEGattDescriptor(); + ~BLEGattDescriptor(); + scoped_ptr<BTH_LE_GATT_DESCRIPTOR> descriptor_info; + scoped_ptr<BTH_LE_GATT_DESCRIPTOR_VALUE> value; +}; + // Fake implementation of BluetoothLowEnergyWrapper. Used for BluetoothTestWin. class BluetoothLowEnergyWrapperFake : public BluetoothLowEnergyWrapper { public: @@ -26,6 +78,44 @@ const base::FilePath& device_path, ScopedVector<BluetoothLowEnergyServiceInfo>* services, std::string* error) override; + + BLEDevice* SimulateBLEDevice(std::string device_name, + BLUETOOTH_ADDRESS device_address); + BLEGattService* SimulateBLEGattService(BLEDevice* device, std::string uuid); + + private: + // Generate an unique attribute handle on |device_address|. + USHORT GenerateAUniqueAttributeHandle(std::string device_address); + + // Generate device path for the BLE device with |device_address|. + base::string16 GenerateBLEDevicePath(std::string device_address); + + // Generate GATT service device path of the service with + // |service_attribute_handle|. |resident_device_path| is the BLE device this + // GATT service belongs to. + base::string16 GenerateBLEGattServiceDevicePath( + base::string16 resident_device_path, + USHORT service_attribute_handle); + + // Extract device address from the device |path| generated by + // GenerateBLEDevicePath or GenerateBLEGattServiceDevicePath. + base::string16 ExtractDeviceAddressFromDevicePath(base::string16 path); + + // Extract service attribute handle from the |path| generated by + // GenerateBLEGattServiceDevicePath. + base::string16 ExtractServiceAttributeHandleFromDevicePath( + base::string16 path); + + // The canonical BLE device address string format is the + // BluetoothDevice::CanonicalizeAddress. + std::string BluetoothAddressToCanonicalString(const BLUETOOTH_ADDRESS& btha); + + // The canonical UUID string format is device::BluetoothUUID.value(). + BTH_LE_UUID CanonicalStringToBTH_LE_UUID(std::string uuid); + + // Table to store allocated attribute handle for a device. + BLEAttributeHandleTable attribute_handle_table_; + BLEDevicesMap simulated_devices_; }; } // namespace win
diff --git a/device/bluetooth/bluetooth_task_manager_win.cc b/device/bluetooth/bluetooth_task_manager_win.cc index 96c03cb3..0419637 100644 --- a/device/bluetooth/bluetooth_task_manager_win.cc +++ b/device/bluetooth/bluetooth_task_manager_win.cc
@@ -16,7 +16,6 @@ #include "base/strings/stringprintf.h" #include "base/strings/sys_string_conversions.h" #include "base/threading/sequenced_worker_pool.h" -#include "base/win/scoped_handle.h" #include "device/bluetooth/bluetooth_classic_win.h" #include "device/bluetooth/bluetooth_device.h" #include "device/bluetooth/bluetooth_init_win.h" @@ -141,9 +140,9 @@ BluetoothTaskManagerWin::BluetoothTaskManagerWin( scoped_refptr<base::SequencedTaskRunner> ui_task_runner) : ui_task_runner_(ui_task_runner), + adapter_handle_(NULL), discovering_(false), - current_logging_batch_count_(0) { -} + current_logging_batch_count_(0) {} BluetoothTaskManagerWin::~BluetoothTaskManagerWin() { win::BluetoothLowEnergyWrapper::DeleteInstance(); @@ -297,15 +296,13 @@ if (!discovering_) { const BLUETOOTH_FIND_RADIO_PARAMS adapter_param = { sizeof(BLUETOOTH_FIND_RADIO_PARAMS) }; - if (adapter_handle_.IsValid()) - adapter_handle_.Close(); HANDLE temp_adapter_handle; HBLUETOOTH_RADIO_FIND handle = win::BluetoothClassicWrapper::GetInstance()->FindFirstRadio( &adapter_param, &temp_adapter_handle); if (handle) { - adapter_handle_.Set(temp_adapter_handle); + adapter_handle_ = temp_adapter_handle; GetKnownDevices(); win::BluetoothClassicWrapper::GetInstance()->FindRadioClose(handle); } @@ -324,7 +321,7 @@ void BluetoothTaskManagerWin::PostAdapterStateToUi() { DCHECK(bluetooth_task_runner_->RunsTasksOnCurrentThread()); AdapterState* state = new AdapterState(); - GetAdapterState(adapter_handle_.Get(), state); + GetAdapterState(adapter_handle_, state); ui_task_runner_->PostTask( FROM_HERE, base::Bind(&BluetoothTaskManagerWin::OnAdapterStateChanged, @@ -338,13 +335,13 @@ const BluetoothAdapter::ErrorCallback& error_callback) { DCHECK(bluetooth_task_runner_->RunsTasksOnCurrentThread()); bool success = false; - if (adapter_handle_.IsValid()) { + if (adapter_handle_) { if (!powered) { win::BluetoothClassicWrapper::GetInstance()->EnableDiscovery( - adapter_handle_.Get(), false); + adapter_handle_, false); } success = !!win::BluetoothClassicWrapper::GetInstance() - ->EnableIncomingConnections(adapter_handle_.Get(), powered); + ->EnableIncomingConnections(adapter_handle_, powered); } if (success) { @@ -358,11 +355,9 @@ void BluetoothTaskManagerWin::StartDiscovery() { DCHECK(bluetooth_task_runner_->RunsTasksOnCurrentThread()); ui_task_runner_->PostTask( - FROM_HERE, - base::Bind(&BluetoothTaskManagerWin::OnDiscoveryStarted, - this, - adapter_handle_.IsValid())); - if (!adapter_handle_.IsValid()) + FROM_HERE, base::Bind(&BluetoothTaskManagerWin::OnDiscoveryStarted, this, + !!adapter_handle_)); + if (!adapter_handle_) return; discovering_ = true; @@ -379,7 +374,7 @@ void BluetoothTaskManagerWin::DiscoverDevices(int timeout_multiplier) { DCHECK(bluetooth_task_runner_->RunsTasksOnCurrentThread()); - if (!discovering_ || !adapter_handle_.IsValid()) { + if (!discovering_ || !adapter_handle_) { ui_task_runner_->PostTask( FROM_HERE, base::Bind(&BluetoothTaskManagerWin::OnDiscoveryStopped, this)); @@ -448,7 +443,7 @@ win::BluetoothClassicWrapper::GetInstance()->FindFirstDevice( &device_search_params, &device_info); if (!handle) { - int last_error = GetLastError(); + int last_error = win::BluetoothClassicWrapper::GetInstance()->LastError(); if (last_error == ERROR_NO_MORE_ITEMS) { return true; // No devices is not an error. } @@ -466,7 +461,7 @@ device_info.dwSize = sizeof(BLUETOOTH_DEVICE_INFO); if (!win::BluetoothClassicWrapper::GetInstance()->FindNextDevice( handle, &device_info)) { - int last_error = GetLastError(); + int last_error = win::BluetoothClassicWrapper::GetInstance()->LastError(); if (last_error == ERROR_NO_MORE_ITEMS) { break; // No more items is expected error when done enumerating. } @@ -477,7 +472,8 @@ } if (!win::BluetoothClassicWrapper::GetInstance()->FindDeviceClose(handle)) { - LogPollingError("Error calling BluetoothFindDeviceClose", GetLastError()); + LogPollingError("Error calling BluetoothFindDeviceClose", + win::BluetoothClassicWrapper::GetInstance()->LastError()); return false; } return true;
diff --git a/device/bluetooth/bluetooth_task_manager_win.h b/device/bluetooth/bluetooth_task_manager_win.h index 4cde9e6..56ecbef0 100644 --- a/device/bluetooth/bluetooth_task_manager_win.h +++ b/device/bluetooth/bluetooth_task_manager_win.h
@@ -217,8 +217,9 @@ // List of observers interested in event notifications. base::ObserverList<Observer> observers_; - // Adapter handle owned by bluetooth task runner. - base::win::ScopedHandle adapter_handle_; + // Weak reference of the adapter handle, let BluetoothClassicWrapper handle + // the close of |adapter_handle_|. + HANDLE adapter_handle_; // indicates whether the adapter is in discovery mode or not. bool discovering_;
diff --git a/device/bluetooth/test/android/java/src/org/chromium/device/bluetooth/Fakes.java b/device/bluetooth/test/android/java/src/org/chromium/device/bluetooth/Fakes.java index 65705fa..538f618 100644 --- a/device/bluetooth/test/android/java/src/org/chromium/device/bluetooth/Fakes.java +++ b/device/bluetooth/test/android/java/src/org/chromium/device/bluetooth/Fakes.java
@@ -43,6 +43,7 @@ static class FakeBluetoothAdapter extends Wrappers.BluetoothAdapterWrapper { private final FakeContext mFakeContext; private final FakeBluetoothLeScanner mFakeScanner; + private boolean mPowered = true; final long mNativeBluetoothTestAndroid; /** @@ -55,10 +56,10 @@ } private FakeBluetoothAdapter(long nativeBluetoothTestAndroid) { - super(null, new FakeContext(), new FakeBluetoothLeScanner()); + super(null, new FakeContext()); mNativeBluetoothTestAndroid = nativeBluetoothTestAndroid; mFakeContext = (FakeContext) mContext; - mFakeScanner = (FakeBluetoothLeScanner) mScanner; + mFakeScanner = new FakeBluetoothLeScanner(); } @CalledByNative("FakeBluetoothAdapter") @@ -71,6 +72,10 @@ */ @CalledByNative("FakeBluetoothAdapter") public void discoverLowEnergyDevice(int deviceOrdinal) { + if (mFakeScanner == null) { + return; + } + switch (deviceOrdinal) { case 1: { ArrayList<ParcelUuid> uuids = new ArrayList<ParcelUuid>(2); @@ -115,11 +120,25 @@ } } + @CalledByNative("FakeBluetoothAdapter") + public void forceIllegalStateException() { + if (mFakeScanner != null) { + mFakeScanner.forceIllegalStateException(); + } + } + // ----------------------------------------------------------------------------------------- // BluetoothAdapterWrapper overrides: @Override - public boolean isEnabled() { + public boolean disable() { + mPowered = false; + return true; + } + + @Override + public boolean enable() { + mPowered = true; return true; } @@ -129,6 +148,14 @@ } @Override + public Wrappers.BluetoothLeScannerWrapper getBluetoothLeScanner() { + if (isEnabled()) { + return mFakeScanner; + } + return null; + } + + @Override public String getName() { return "FakeBluetoothAdapter"; } @@ -139,6 +166,11 @@ } @Override + public boolean isEnabled() { + return mPowered; + } + + @Override public boolean isDiscovering() { return false; } @@ -166,6 +198,7 @@ */ static class FakeBluetoothLeScanner extends Wrappers.BluetoothLeScannerWrapper { public Wrappers.ScanCallbackWrapper mScanCallback; + private boolean mThrowException; private FakeBluetoothLeScanner() { super(null); @@ -178,6 +211,9 @@ throw new IllegalArgumentException( "FakeBluetoothLeScanner does not support multiple scans."); } + if (mThrowException) { + throw new IllegalStateException("Adapter is off."); + } mScanCallback = callback; } @@ -186,8 +222,15 @@ if (mScanCallback != callback) { throw new IllegalArgumentException("No scan in progress."); } + if (mThrowException) { + throw new IllegalStateException("Adapter is off."); + } mScanCallback = null; } + + void forceIllegalStateException() { + mThrowException = true; + } } /** @@ -288,7 +331,7 @@ @Override public int getBluetoothClass_getDeviceClass() { - return 0x1F00; // Unspecified Device Class + return Wrappers.DEVICE_CLASS_UNSPECIFIED; } @Override
diff --git a/device/bluetooth/test/bluetooth_test.h b/device/bluetooth/test/bluetooth_test.h index 7191345..5e34d909 100644 --- a/device/bluetooth/test/bluetooth_test.h +++ b/device/bluetooth/test/bluetooth_test.h
@@ -58,7 +58,7 @@ // Calls adapter_->StartDiscoverySessionWithFilter with Low Energy transport, // and this fixture's callbacks expecting success. // Then RunLoop().RunUntilIdle(). - void StartLowEnergyDiscoverySession(); + virtual void StartLowEnergyDiscoverySession(); // Calls adapter_->StartDiscoverySessionWithFilter with Low Energy transport, // and this fixture's callbacks expecting error.
diff --git a/device/bluetooth/test/bluetooth_test_android.cc b/device/bluetooth/test/bluetooth_test_android.cc index b31f5df1..43299bcf 100644 --- a/device/bluetooth/test/bluetooth_test_android.cc +++ b/device/bluetooth/test/bluetooth_test_android.cc
@@ -81,6 +81,11 @@ return observer.last_device(); } +void BluetoothTestAndroid::ForceIllegalStateException() { + Java_FakeBluetoothAdapter_forceIllegalStateException( + AttachCurrentThread(), j_fake_bluetooth_adapter_.obj()); +} + void BluetoothTestAndroid::SimulateGattConnection(BluetoothDevice* device) { BluetoothDeviceAndroid* device_android = static_cast<BluetoothDeviceAndroid*>(device);
diff --git a/device/bluetooth/test/bluetooth_test_android.h b/device/bluetooth/test/bluetooth_test_android.h index 7f39099..3fb3a33 100644 --- a/device/bluetooth/test/bluetooth_test_android.h +++ b/device/bluetooth/test/bluetooth_test_android.h
@@ -71,6 +71,10 @@ void SimulateGattDescriptorWriteWillFailSynchronouslyOnce( BluetoothGattDescriptor* descriptor) override; + // Instruct the fake adapter to throw an IllegalStateException for + // startScan and stopScan. + void ForceIllegalStateException(); + // Records that Java FakeBluetoothDevice connectGatt was called. void OnFakeBluetoothDeviceConnectGattCalled( JNIEnv* env,
diff --git a/device/bluetooth/test/bluetooth_test_win.cc b/device/bluetooth/test/bluetooth_test_win.cc index 13464937..2bbaeee6 100644 --- a/device/bluetooth/test/bluetooth_test_win.cc +++ b/device/bluetooth/test/bluetooth_test_win.cc
@@ -5,9 +5,28 @@ #include "device/bluetooth/test/bluetooth_test_win.h" #include "base/bind.h" +#include "base/strings/sys_string_conversions.h" #include "device/bluetooth/bluetooth_adapter_win.h" #include "device/bluetooth/bluetooth_low_energy_win.h" +namespace { + +BLUETOOTH_ADDRESS CanonicalStringToBLUETOOTH_ADDRESS( + std::string device_address) { + BLUETOOTH_ADDRESS win_addr; + unsigned int data[6]; + int result = + sscanf_s(device_address.c_str(), "%02X:%02X:%02X:%02X:%02X:%02X", + &data[5], &data[4], &data[3], &data[2], &data[1], &data[0]); + CHECK(result == 6); + for (int i = 0; i < 6; i++) { + win_addr.rgBytes[i] = data[i]; + } + return win_addr; +} + +} // namespace + namespace device { BluetoothTestWin::BluetoothTestWin() : ui_task_runner_(new base::TestSimpleTaskRunner()), @@ -35,19 +54,78 @@ } void BluetoothTestWin::InitWithFakeAdapter() { + fake_bt_classic_wrapper_ = new win::BluetoothClassicWrapperFake(); + fake_bt_le_wrapper_ = new win::BluetoothLowEnergyWrapperFake(); + win::BluetoothClassicWrapper::SetInstanceForTest(fake_bt_classic_wrapper_); + win::BluetoothLowEnergyWrapper::SetInstanceForTest(fake_bt_le_wrapper_); + fake_bt_classic_wrapper_->SimulateARadio( + base::SysUTF8ToWide(kTestAdapterName), + CanonicalStringToBLUETOOTH_ADDRESS(kTestAdapterAddress)); + adapter_ = new BluetoothAdapterWin(base::Bind( &BluetoothTestWin::AdapterInitCallback, base::Unretained(this))); adapter_win_ = static_cast<BluetoothAdapterWin*>(adapter_.get()); adapter_win_->InitForTest(ui_task_runner_, bluetooth_task_runner_); - BluetoothTaskManagerWin::AdapterState* adapter_state = - new BluetoothTaskManagerWin::AdapterState(); - adapter_state->name = kTestAdapterName; - adapter_state->address = kTestAdapterAddress; - adapter_state->powered = true; - adapter_win_->AdapterStateChanged(*adapter_state); + bluetooth_task_runner_->RunPendingTasks(); + ui_task_runner_->RunPendingTasks(); } bool BluetoothTestWin::DenyPermission() { return false; } + +void BluetoothTestWin::StartLowEnergyDiscoverySession() { + __super ::StartLowEnergyDiscoverySession(); + bluetooth_task_runner_->RunPendingTasks(); + ui_task_runner_->RunPendingTasks(); +} + +BluetoothDevice* BluetoothTestWin::DiscoverLowEnergyDevice(int device_ordinal) { + if (device_ordinal > 4 || device_ordinal < 1) + return nullptr; + + std::string device_name = kTestDeviceName; + std::string device_address = kTestDeviceAddress1; + std::string service_uuid_1; + std::string service_uuid_2; + + switch (device_ordinal) { + case 1: { + service_uuid_1 = kTestUUIDGenericAccess; + service_uuid_2 = kTestUUIDGenericAttribute; + } break; + case 2: { + service_uuid_1 = kTestUUIDImmediateAlert; + service_uuid_2 = kTestUUIDLinkLoss; + } break; + case 3: { + device_name = kTestDeviceNameEmpty; + } break; + case 4: { + device_name = kTestDeviceNameEmpty; + device_address = kTestDeviceAddress2; + } break; + } + + win::BLEDevice* simulated_device = fake_bt_le_wrapper_->SimulateBLEDevice( + device_name, CanonicalStringToBLUETOOTH_ADDRESS(device_address)); + if (simulated_device != nullptr) { + if (!service_uuid_1.empty()) + fake_bt_le_wrapper_->SimulateBLEGattService(simulated_device, + service_uuid_1); + if (!service_uuid_2.empty()) + fake_bt_le_wrapper_->SimulateBLEGattService(simulated_device, + service_uuid_2); + } + bluetooth_task_runner_->RunPendingTasks(); + ui_task_runner_->RunPendingTasks(); + + std::vector<BluetoothDevice*> devices = adapter_win_->GetDevices(); + for (auto device : devices) { + if (device->GetAddress() == device_address) + return device; + } + + return nullptr; +} }
diff --git a/device/bluetooth/test/bluetooth_test_win.h b/device/bluetooth/test/bluetooth_test_win.h index ead01f2..2fea2aca 100644 --- a/device/bluetooth/test/bluetooth_test_win.h +++ b/device/bluetooth/test/bluetooth_test_win.h
@@ -10,6 +10,8 @@ #include "base/memory/ref_counted.h" #include "base/test/test_pending_task.h" #include "base/test/test_simple_task_runner.h" +#include "device/bluetooth/bluetooth_classic_win_fake.h" +#include "device/bluetooth/bluetooth_low_energy_win_fake.h" namespace device { class BluetoothAdapterWin; @@ -26,12 +28,17 @@ void InitWithoutDefaultAdapter() override; void InitWithFakeAdapter() override; bool DenyPermission() override; + void StartLowEnergyDiscoverySession() override; + BluetoothDevice* DiscoverLowEnergyDevice(int device_ordinal) override; private: scoped_refptr<base::TestSimpleTaskRunner> ui_task_runner_; scoped_refptr<base::TestSimpleTaskRunner> bluetooth_task_runner_; BluetoothAdapterWin* adapter_win_; + win::BluetoothClassicWrapperFake* fake_bt_classic_wrapper_; + win::BluetoothLowEnergyWrapperFake* fake_bt_le_wrapper_; + void AdapterInitCallback(); };
diff --git a/device/devices_app/devices_app.cc b/device/devices_app/devices_app.cc index a3406440..8bb9ab9 100644 --- a/device/devices_app/devices_app.cc +++ b/device/devices_app/devices_app.cc
@@ -89,7 +89,7 @@ } bool DevicesApp::AcceptConnection(mojo::Connection* connection) { - connection->AddService<usb::DeviceManager>(this); + connection->AddInterface<usb::DeviceManager>(this); return true; } @@ -103,7 +103,7 @@ // Bind the new device manager to the connecting application's permission // provider. usb::PermissionProviderPtr permission_provider; - connection->ConnectToService(&permission_provider); + connection->GetInterface(&permission_provider); // Owned by its message pipe. usb::DeviceManagerImpl* device_manager = new usb::DeviceManagerImpl(
diff --git a/docs/layout_tests_linux.md b/docs/layout_tests_linux.md index 154e3342..d113043e 100644 --- a/docs/layout_tests_linux.md +++ b/docs/layout_tests_linux.md
@@ -1,6 +1,6 @@ # Running layout tests on Linux -1. Build `blink_tests` (see LinuxBuildInstructions) +1. Build `blink_tests` (see [Linux-specific build instructions](https://chromium.googlesource.com/chromium/src/+/master/docs/linux_build_instructions.md)) 1. Checkout the layout tests * If you have an entry in your `.gclient` file that includes "LayoutTests", you may need to comment it out and sync.
diff --git a/docs/linux_sandboxing.md b/docs/linux_sandboxing.md index cb6ea15..9d9db39 100644 --- a/docs/linux_sandboxing.md +++ b/docs/linux_sandboxing.md
@@ -148,4 +148,4 @@ ## See also * [LinuxSandboxIPC](linux_sandbox_ipc.md) -* [How Chromium's Linux sandbox affects Native Client](https://code.google.com/p/nativeclient/wiki/LinuxOuterSandbox) +* [How Chromium's Linux sandbox affects Native Client](https://chromium.googlesource.com/native_client/src/native_client.git/+/master/docs/linux_outer_sandbox.md)
diff --git a/extensions/browser/user_script_loader.cc b/extensions/browser/user_script_loader.cc index 4e0b9f670..91af052 100644 --- a/extensions/browser/user_script_loader.cc +++ b/extensions/browser/user_script_loader.cc
@@ -279,7 +279,7 @@ scoped_ptr<base::SharedMemory> UserScriptLoader::Serialize( const UserScriptList& scripts) { base::Pickle pickle; - pickle.WriteSizeT(scripts.size()); + pickle.WriteUInt32(scripts.size()); for (const UserScript& script : scripts) { // TODO(aa): This can be replaced by sending content script metadata to // renderers along with other extension data in ExtensionMsg_Loaded.
diff --git a/extensions/common/api/declarative_web_request.json b/extensions/common/api/declarative_web_request.json index bfb7082e..f504070 100644 --- a/extensions/common/api/declarative_web_request.json +++ b/extensions/common/api/declarative_web_request.json
@@ -184,7 +184,7 @@ }, { "id": "declarativeWebRequest.RedirectByRegEx", - "description": "Redirects a request by applying a regular expression on the URL. The regular expressions use the <a href=\"http://code.google.com/p/re2/wiki/Syntax\">RE2 syntax</a>.", + "description": "Redirects a request by applying a regular expression on the URL. The regular expressions use the <a href=\"https://github.com/google/re2/blob/master/doc/syntax.txt\">RE2 syntax</a>.", "type": "object", "properties": { "instanceType": {
diff --git a/extensions/common/api/events.json b/extensions/common/api/events.json index d3ab8713..ba31dea 100644 --- a/extensions/common/api/events.json +++ b/extensions/common/api/events.json
@@ -292,12 +292,12 @@ }, "urlMatches": { "type": "string", - "description": "Matches if the URL (without fragment identifier) matches a specified regular expression. Port numbers are stripped from the URL if they match the default port number. The regular expressions use the <a href=\"http://code.google.com/p/re2/wiki/Syntax\">RE2 syntax</a>.", + "description": "Matches if the URL (without fragment identifier) matches a specified regular expression. Port numbers are stripped from the URL if they match the default port number. The regular expressions use the <a href=\"https://github.com/google/re2/blob/master/doc/syntax.txt\">RE2 syntax</a>.", "optional": true }, "originAndPathMatches": { "type": "string", - "description": "Matches if the URL without query segment and fragment identifier matches a specified regular expression. Port numbers are stripped from the URL if they match the default port number. The regular expressions use the <a href=\"http://code.google.com/p/re2/wiki/Syntax\">RE2 syntax</a>.", + "description": "Matches if the URL without query segment and fragment identifier matches a specified regular expression. Port numbers are stripped from the URL if they match the default port number. The regular expressions use the <a href=\"https://github.com/google/re2/blob/master/doc/syntax.txt\">RE2 syntax</a>.", "optional": true }, "urlPrefix": {
diff --git a/extensions/common/extension_messages.cc b/extensions/common/extension_messages.cc index 5cccc11..d6ab4f28 100644 --- a/extensions/common/extension_messages.cc +++ b/extensions/common/extension_messages.cc
@@ -187,7 +187,7 @@ const param_type& p) { APIPermissionSet::const_iterator it = p.begin(); const APIPermissionSet::const_iterator end = p.end(); - WriteParam(m, p.size()); + WriteParam(m, static_cast<uint32_t>(p.size())); for (; it != end; ++it) { WriteParam(m, it->id()); it->Write(m); @@ -197,10 +197,10 @@ bool ParamTraits<APIPermissionSet>::Read(const base::Pickle* m, base::PickleIterator* iter, param_type* r) { - size_t size; + uint32_t size; if (!ReadParam(m, iter, &size)) return false; - for (size_t i = 0; i < size; ++i) { + for (uint32_t i = 0; i < size; ++i) { APIPermission::ID id; if (!ReadParam(m, iter, &id)) return false; @@ -225,7 +225,7 @@ const param_type& p) { ManifestPermissionSet::const_iterator it = p.begin(); const ManifestPermissionSet::const_iterator end = p.end(); - WriteParam(m, p.size()); + WriteParam(m, static_cast<uint32_t>(p.size())); for (; it != end; ++it) { WriteParam(m, it->name()); it->Write(m); @@ -235,10 +235,10 @@ bool ParamTraits<ManifestPermissionSet>::Read(const base::Pickle* m, base::PickleIterator* iter, param_type* r) { - size_t size; + uint32_t size; if (!ReadParam(m, iter, &size)) return false; - for (size_t i = 0; i < size; ++i) { + for (uint32_t i = 0; i < size; ++i) { std::string name; if (!ReadParam(m, iter, &name)) return false;
diff --git a/extensions/common/manifest_handlers/kiosk_mode_info.cc b/extensions/common/manifest_handlers/kiosk_mode_info.cc index 5ab5656..d625bfd 100644 --- a/extensions/common/manifest_handlers/kiosk_mode_info.cc +++ b/extensions/common/manifest_handlers/kiosk_mode_info.cc
@@ -13,17 +13,6 @@ #include "extensions/common/api/extensions_manifest_types.h" #include "extensions/common/manifest_constants.h" -namespace { - -// Whether the given |version_string| is a valid ChromeOS platform version. -// The acceptable format is major[.minor[.micro]]. -bool IsValidPlatformVersion(const std::string& version_string) { - const base::Version version(version_string); - return version.IsValid() && version.components().size() <= 3u; -} - -} // namespace - namespace extensions { namespace keys = manifest_keys; @@ -64,6 +53,12 @@ return info && !info->secondary_app_ids.empty(); } +// static +bool KioskModeInfo::IsValidPlatformVersion(const std::string& version_string) { + const base::Version version(version_string); + return version.IsValid() && version.components().size() <= 3u; +} + KioskModeHandler::KioskModeHandler() { supported_keys_.push_back(keys::kKiosk); supported_keys_.push_back(keys::kKioskEnabled); @@ -135,7 +130,7 @@ if (manifest->HasPath(keys::kKioskRequiredPlatformVersion) && (!manifest->GetString(keys::kKioskRequiredPlatformVersion, &required_platform_version) || - !IsValidPlatformVersion(required_platform_version))) { + !KioskModeInfo::IsValidPlatformVersion(required_platform_version))) { *error = base::ASCIIToUTF16( manifest_errors::kInvalidKioskRequiredPlatformVersion); return false;
diff --git a/extensions/common/manifest_handlers/kiosk_mode_info.h b/extensions/common/manifest_handlers/kiosk_mode_info.h index 514e78e..bd37f96 100644 --- a/extensions/common/manifest_handlers/kiosk_mode_info.h +++ b/extensions/common/manifest_handlers/kiosk_mode_info.h
@@ -41,6 +41,10 @@ // Returns true if |extension| declares kiosk secondary apps. static bool HasSecondaryApps(const Extension* extension); + // Whether the given |version_string| is a valid ChromeOS platform version. + // The acceptable format is major[.minor[.micro]]. + static bool IsValidPlatformVersion(const std::string& version_string); + KioskStatus kiosk_status; // The IDs of the kiosk secondary apps.
diff --git a/extensions/common/stack_frame.cc b/extensions/common/stack_frame.cc index 0286c5b..046a265 100644 --- a/extensions/common/stack_frame.cc +++ b/extensions/common/stack_frame.cc
@@ -25,16 +25,15 @@ function(frame.function) { } -StackFrame::StackFrame(size_t line_number, - size_t column_number, +StackFrame::StackFrame(uint32_t line_number, + uint32_t column_number, const base::string16& source, const base::string16& function) : line_number(line_number), column_number(column_number), source(source), function(function.empty() ? base::UTF8ToUTF16(kAnonymousFunction) - : function) { -} + : function) {} StackFrame::~StackFrame() { }
diff --git a/extensions/common/stack_frame.h b/extensions/common/stack_frame.h index 671f564..b174ffc 100644 --- a/extensions/common/stack_frame.h +++ b/extensions/common/stack_frame.h
@@ -17,8 +17,8 @@ struct StackFrame { StackFrame(); StackFrame(const StackFrame& frame); - StackFrame(size_t line_number, - size_t column_number, + StackFrame(uint32_t line_number, + uint32_t column_number, const base::string16& source, const base::string16& function); ~StackFrame(); @@ -29,8 +29,8 @@ bool operator==(const StackFrame& rhs) const; - size_t line_number; - size_t column_number; + uint32_t line_number; + uint32_t column_number; base::string16 source; base::string16 function; // optional };
diff --git a/extensions/common/user_script.cc b/extensions/common/user_script.cc index 08adfbc..0bb3c8de 100644 --- a/extensions/common/user_script.cc +++ b/extensions/common/user_script.cc
@@ -163,7 +163,7 @@ void UserScript::PickleGlobs(base::Pickle* pickle, const std::vector<std::string>& globs) const { - pickle->WriteSizeT(globs.size()); + pickle->WriteUInt32(globs.size()); for (std::vector<std::string>::const_iterator glob = globs.begin(); glob != globs.end(); ++glob) { pickle->WriteString(*glob); @@ -178,7 +178,7 @@ void UserScript::PickleURLPatternSet(base::Pickle* pickle, const URLPatternSet& pattern_list) const { - pickle->WriteSizeT(pattern_list.patterns().size()); + pickle->WriteUInt32(pattern_list.patterns().size()); for (URLPatternSet::const_iterator pattern = pattern_list.begin(); pattern != pattern_list.end(); ++pattern) { pickle->WriteInt(pattern->valid_schemes()); @@ -188,7 +188,7 @@ void UserScript::PickleScripts(base::Pickle* pickle, const FileList& scripts) const { - pickle->WriteSizeT(scripts.size()); + pickle->WriteUInt32(scripts.size()); for (FileList::const_iterator file = scripts.begin(); file != scripts.end(); ++file) { file->Pickle(pickle); @@ -227,10 +227,10 @@ void UserScript::UnpickleGlobs(const base::Pickle& pickle, base::PickleIterator* iter, std::vector<std::string>* globs) { - size_t num_globs = 0; - CHECK(iter->ReadSizeT(&num_globs)); + uint32_t num_globs = 0; + CHECK(iter->ReadUInt32(&num_globs)); globs->clear(); - for (size_t i = 0; i < num_globs; ++i) { + for (uint32_t i = 0; i < num_globs; ++i) { std::string glob; CHECK(iter->ReadString(&glob)); globs->push_back(glob); @@ -250,11 +250,11 @@ void UserScript::UnpickleURLPatternSet(const base::Pickle& pickle, base::PickleIterator* iter, URLPatternSet* pattern_list) { - size_t num_patterns = 0; - CHECK(iter->ReadSizeT(&num_patterns)); + uint32_t num_patterns = 0; + CHECK(iter->ReadUInt32(&num_patterns)); pattern_list->ClearPatterns(); - for (size_t i = 0; i < num_patterns; ++i) { + for (uint32_t i = 0; i < num_patterns; ++i) { int valid_schemes; CHECK(iter->ReadInt(&valid_schemes)); @@ -274,10 +274,10 @@ void UserScript::UnpickleScripts(const base::Pickle& pickle, base::PickleIterator* iter, FileList* scripts) { - size_t num_files = 0; - CHECK(iter->ReadSizeT(&num_files)); + uint32_t num_files = 0; + CHECK(iter->ReadUInt32(&num_files)); scripts->clear(); - for (size_t i = 0; i < num_files; ++i) { + for (uint32_t i = 0; i < num_files; ++i) { File file; file.Unpickle(pickle, iter); scripts->push_back(file);
diff --git a/extensions/renderer/extensions_render_frame_observer.cc b/extensions/renderer/extensions_render_frame_observer.cc index dd94caf..3f66f46 100644 --- a/extensions/renderer/extensions_render_frame_observer.cc +++ b/extensions/renderer/extensions_render_frame_observer.cc
@@ -85,7 +85,7 @@ const base::string16& message, const base::string16& source, const base::string16& stack_trace_string, - int32_t line_number, + uint32_t line_number, int32_t severity_level) { base::string16 trimmed_message = message; StackTrace stack_trace = GetStackTraceFromMessage(
diff --git a/extensions/renderer/extensions_render_frame_observer.h b/extensions/renderer/extensions_render_frame_observer.h index 391a33f..55521b2b 100644 --- a/extensions/renderer/extensions_render_frame_observer.h +++ b/extensions/renderer/extensions_render_frame_observer.h
@@ -26,7 +26,7 @@ void DetailedConsoleMessageAdded(const base::string16& message, const base::string16& source, const base::string16& stack_trace, - int32_t line_number, + uint32_t line_number, int32_t severity_level) override; DISALLOW_COPY_AND_ASSIGN(ExtensionsRenderFrameObserver);
diff --git a/extensions/renderer/user_script_set.cc b/extensions/renderer/user_script_set.cc index 200f84c2..e289f3f 100644 --- a/extensions/renderer/user_script_set.cc +++ b/extensions/renderer/user_script_set.cc
@@ -109,15 +109,15 @@ return false; // Unpickle scripts. - size_t num_scripts = 0; + uint32_t num_scripts = 0; base::Pickle pickle(reinterpret_cast<char*>(shared_memory_->memory()), pickle_size); base::PickleIterator iter(pickle); - CHECK(iter.ReadSizeT(&num_scripts)); + CHECK(iter.ReadUInt32(&num_scripts)); scripts_.clear(); scripts_.reserve(num_scripts); - for (size_t i = 0; i < num_scripts; ++i) { + for (uint32_t i = 0; i < num_scripts; ++i) { scoped_ptr<UserScript> script(new UserScript()); script->Unpickle(pickle, &iter);
diff --git a/extensions/strings/extensions_strings_ml.xtb b/extensions/strings/extensions_strings_ml.xtb index b0599d0..afc10a06 100644 --- a/extensions/strings/extensions_strings_ml.xtb +++ b/extensions/strings/extensions_strings_ml.xtb
@@ -14,7 +14,7 @@ <translation id="2988488679308982380">പാക്കേജ് ഇന്സ്റ്റാള് ചെയ്യാന് കഴിഞ്ഞില്ല: '<ph name="ERROR_CODE" />'</translation> <translation id="3115238746683532089"><ph name="VENDOR_ID" /> വെൻഡറിൽ നിന്നുള്ള അജ്ഞാത ഉൽപ്പന്നം <ph name="PRODUCT_ID" /> (സീരിയൽ നമ്പർ <ph name="SERIAL_NUMBER" />)</translation> <translation id="3163201441334626963"><ph name="VENDOR_ID" /> വെൻഡറിൽ നിന്നുള്ള അജ്ഞാത ഉൽപ്പന്നം <ph name="PRODUCT_ID" /></translation> -<translation id="3369521687965833290">വിപുലീകരണം അണ്പാക്ക് ചെയ്യാന് കഴിയുന്നില്ല. ഒരു വിപുലീകരണം സുരക്ഷിതമായി അണ്പാക്ക് ചെയ്യുന്നതിന്, ഡ്രൈവ് പ്രതീകം ഉപയോഗിച്ച് ആരംഭിക്കുന്ന നിങ്ങളുടെ പ്രൊഫൈല് ഡയറക്ടറിയിലേക്കുള്ള പാത്ത് ഉണ്ടായിരിക്കണം മാത്രമല്ല ജംഗ്ഷന്, മൌണ്ട് പോയിന്റ് അല്ലെങ്കില് സിംലിങ്ക് എന്നിവ അടങ്ങിയിരിക്കരുത്. നിങ്ങളുടെ പ്രൊഫൈലിനായി അത്തരം പാത്തൊന്നും നിലവിലുണ്ടായിരിക്കരുത്.</translation> +<translation id="3369521687965833290">വിപുലീകരണം അണ്പാക്ക് ചെയ്യാന് കഴിയുന്നില്ല. ഒരു വിപുലീകരണം സുരക്ഷിതമായി അണ്പാക്ക് ചെയ്യുന്നതിന്, ഡ്രൈവ് പ്രതീകം ഉപയോഗിച്ച് ആരംഭിക്കുന്ന നിങ്ങളുടെ പ്രൊഫൈൽ ഡയറക്ടറിയിലേക്കുള്ള പാത്ത് ഉണ്ടായിരിക്കണം മാത്രമല്ല ജംഗ്ഷന്, മൌണ്ട് പോയിന്റ് അല്ലെങ്കില് സിംലിങ്ക് എന്നിവ അടങ്ങിയിരിക്കരുത്. നിങ്ങളുടെ പ്രൊഫൈലിനായി അത്തരം പാത്തൊന്നും നിലവിലുണ്ടായിരിക്കരുത്.</translation> <translation id="3393440416772303020"><ph name="PRODUCT_NAME" /> (സീരിയൽ നമ്പർ <ph name="SERIAL_NUMBER" />)</translation> <translation id="3466070586188012397"><ph name="VENDOR_ID" /> വെൻഡറിൽ നിന്നുള്ള <ph name="PRODUCT_NAME" /> (സീരിയൽ നമ്പർ <ph name="SERIAL_NUMBER" />)</translation> <translation id="3624204664103857160">ലോഞ്ചർ പേജ് '<ph name="PAGE" />' ലോഡുചെയ്യാനായില്ല.</translation> @@ -32,7 +32,7 @@ <translation id="5972529113578162692">ഈ മെഷീനിന്റെ അഡ്മിനിസ്ട്രേറ്ററിന് <ph name="EXTENSION_NAME" /> ഇൻസ്റ്റാളുചെയ്യേണ്ടതുണ്ട്. ഇത് അൺഇൻസ്റ്റാളുചെയ്യാനാകില്ല.</translation> <translation id="6027032947578871493"><ph name="VENDOR_NAME" /> എന്നതിൽ നിന്നുള്ള അജ്ഞാത ഉൽപ്പന്നം <ph name="PRODUCT_ID" /> (സീരിയൽ നമ്പർ <ph name="SERIAL_NUMBER" />)</translation> <translation id="6068932090455285721"><ph name="VENDOR_ID" /> വെൻഡറിൽ നിന്നുള്ള <ph name="PRODUCT_NAME" /></translation> -<translation id="6143635259298204954">വിപുലീകരണം അണ്പാക്ക് ചെയ്യാന് കഴിയില്ല. വിപുലീകരണം സുരക്ഷിതമായി അണ്പാക്ക് ചെയ്യുന്നതിന്, നിങ്ങളുടെ പ്രൊഫൈല് ഡയറക്ടറിയിലേക്ക് ഒരു സിംലിങ്ക് അടങ്ങിയിട്ടില്ലാത്ത ഒരു പാത്ത് ഉണ്ടായിരിക്കണം. നിങ്ങളുടെ പ്രൊഫൈലിനായി അത്തരം പാത്തൊന്നും നിലവിലുണ്ടായിരിക്കരുത്.</translation> +<translation id="6143635259298204954">വിപുലീകരണം അണ്പാക്ക് ചെയ്യാന് കഴിയില്ല. വിപുലീകരണം സുരക്ഷിതമായി അണ്പാക്ക് ചെയ്യുന്നതിന്, നിങ്ങളുടെ പ്രൊഫൈൽ ഡയറക്ടറിയിലേക്ക് ഒരു സിംലിങ്ക് അടങ്ങിയിട്ടില്ലാത്ത ഒരു പാത്ത് ഉണ്ടായിരിക്കണം. നിങ്ങളുടെ പ്രൊഫൈലിനായി അത്തരം പാത്തൊന്നും നിലവിലുണ്ടായിരിക്കരുത്.</translation> <translation id="616804573177634438">{0,select, single{"<ph name="APP_NAME" />" അപ്ലിക്കേഷൻ നിങ്ങളുടെ ഉപകരണങ്ങളിലൊന്നിലേക്ക് ആക്സസ്സ് അഭ്യർത്ഥിക്കുന്നു.}multiple{"<ph name="APP_NAME" />" അപ്ലിക്കേഷൻ നിങ്ങളുടെ ഒന്നോ അതിലധികമോ ഉപകരണങ്ങളിലേക്ക് ആക്സസ്സ് അഭ്യർത്ഥിക്കുന്നു.}other{UNUSED}}</translation> <translation id="641087317769093025">വിപുലീകരണം അൺസിപ്പ് ചെയ്യാൻ കഴിഞ്ഞില്ല</translation> <translation id="657064425229075395">പശ്ചാത്തല സ്ക്രിപ്റ്റ് '<ph name="BACKGROUND_SCRIPT" />' ലോഡുചെയ്യാൻ കഴിഞ്ഞില്ല.</translation>
diff --git a/gpu/PRESUBMIT.py b/gpu/PRESUBMIT.py new file mode 100644 index 0000000..aed2fd9c --- /dev/null +++ b/gpu/PRESUBMIT.py
@@ -0,0 +1,38 @@ +# Copyright (c) 2016 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. + +"""Top-level presubmit script for gpu. + +See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts +for more details about the presubmit API built into depot_tools. +""" + +import re + +def PostUploadHook(cl, change, output_api): + """git cl upload will call this hook after the issue is created/modified. + + This hook adds extra try bots list to the CL description in order to run + Blink tests in addition to CQ try bots. + """ + rietveld_obj = cl.RpcServer() + issue = cl.issue + description = rietveld_obj.get_description(issue) + if re.search(r'^CQ_INCLUDE_TRYBOTS=.*', description, re.M | re.I): + return [] + + bots = [ + 'tryserver.chromium.win:win_optional_gpu_tests_rel', + ] + + results = [] + new_description = description + new_description += '\nCQ_INCLUDE_TRYBOTS=%s' % ';'.join(bots) + results.append(output_api.PresubmitNotifyResult( + 'Automatically added optional GPU tests to run on CQ.')) + + if new_description != description: + rietveld_obj.update_description(issue, new_description) + + return results
diff --git a/gpu/command_buffer/common/BUILD.gn b/gpu/command_buffer/common/BUILD.gn index 0783191c..c04d5d2 100644 --- a/gpu/command_buffer/common/BUILD.gn +++ b/gpu/command_buffer/common/BUILD.gn
@@ -6,6 +6,8 @@ # "command_buffer_common" just forwarding) and goes into a static library in # non-component build. This needs to match the GYP build which was likely an # attempt to make larger components to help with loading. +import("//mojo/public/tools/bindings/mojom.gni") + group("common") { if (is_component_build) { public_deps = [ @@ -74,3 +76,17 @@ all_dependent_configs = [ "//third_party/khronos:khronos_headers" ] } + +mojom("interfaces") { + sources = [ + "capabilities.mojom", + "command_buffer.mojom", + "mailbox.mojom", + "mailbox_holder.mojom", + "sync_token.mojom", + "value_state.mojom", + ] + + typemaps = [ "mojo.typemap" ] + typemap_deps = [ "//gpu/ipc" ] +}
diff --git a/gpu/command_buffer/common/capabilities.cc b/gpu/command_buffer/common/capabilities.cc index 7fb21deb..51c1590 100644 --- a/gpu/command_buffer/common/capabilities.cc +++ b/gpu/command_buffer/common/capabilities.cc
@@ -75,6 +75,7 @@ blend_equation_advanced(false), blend_equation_advanced_coherent(false), texture_rg(false), + texture_half_float_linear(false), image_ycbcr_422(false), image_ycbcr_420v(false), render_buffer_format_bgra8888(false),
diff --git a/gpu/command_buffer/common/capabilities.h b/gpu/command_buffer/common/capabilities.h index b7a3af2..5605cc8ce 100644 --- a/gpu/command_buffer/common/capabilities.h +++ b/gpu/command_buffer/common/capabilities.h
@@ -134,6 +134,7 @@ bool blend_equation_advanced; bool blend_equation_advanced_coherent; bool texture_rg; + bool texture_half_float_linear; bool image_ycbcr_422; bool image_ycbcr_420v; bool render_buffer_format_bgra8888;
diff --git a/gpu/command_buffer/common/capabilities.mojom b/gpu/command_buffer/common/capabilities.mojom new file mode 100644 index 0000000..fd35409 --- /dev/null +++ b/gpu/command_buffer/common/capabilities.mojom
@@ -0,0 +1,8 @@ +// Copyright 2016 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. + +module gpu.mojom; + +[Native] +struct Capabilities;
diff --git a/gpu/command_buffer/common/command_buffer.mojom b/gpu/command_buffer/common/command_buffer.mojom new file mode 100644 index 0000000..e3677b7d --- /dev/null +++ b/gpu/command_buffer/common/command_buffer.mojom
@@ -0,0 +1,9 @@ +// Copyright 2016 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. + +module gpu.mojom; + +// Native struct CommandBuffer::State; +[Native] +struct CommandBufferState;
diff --git a/gpu/command_buffer/common/mailbox.mojom b/gpu/command_buffer/common/mailbox.mojom new file mode 100644 index 0000000..43df62b --- /dev/null +++ b/gpu/command_buffer/common/mailbox.mojom
@@ -0,0 +1,8 @@ +// Copyright 2016 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. + +module gpu.mojom; + +[Native] +struct Mailbox;
diff --git a/gpu/command_buffer/common/mailbox_holder.mojom b/gpu/command_buffer/common/mailbox_holder.mojom new file mode 100644 index 0000000..773f4025 --- /dev/null +++ b/gpu/command_buffer/common/mailbox_holder.mojom
@@ -0,0 +1,8 @@ +// Copyright 2016 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. + +module gpu.mojom; + +[Native] +struct MailboxHolder;
diff --git a/gpu/command_buffer/common/mojo.typemap b/gpu/command_buffer/common/mojo.typemap new file mode 100644 index 0000000..4e27856 --- /dev/null +++ b/gpu/command_buffer/common/mojo.typemap
@@ -0,0 +1,50 @@ +// Copyright 2016 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. + +{ + "c++": { + "gpu.mojom.Capabilities": { + "typename": "gpu::Capabilities", + "headers": [ + "gpu/command_buffer/common/capabilities.h", + "gpu/ipc/gpu_command_buffer_traits.h" + ] + }, + "gpu.mojom.CommandBufferState": { + "typename": "gpu::CommandBuffer::State", + "headers": [ + "gpu/command_buffer/common/command_buffer.h", + "gpu/ipc/gpu_command_buffer_traits.h" + ] + }, + "gpu.mojom.Mailbox": { + "typename": "gpu::Mailbox", + "headers": [ + "gpu/command_buffer/common/mailbox.h", + "gpu/ipc/gpu_command_buffer_traits.h" + ] + }, + "gpu.mojom.MailboxHolder": { + "typename": "gpu::MailboxHolder", + "headers": [ + "gpu/command_buffer/common/mailbox_holder.h", + "gpu/ipc/gpu_command_buffer_traits.h" + ] + }, + "gpu.mojom.SyncToken": { + "typename": "gpu::SyncToken", + "headers": [ + "gpu/command_buffer/common/sync_token.h", + "gpu/ipc/gpu_command_buffer_traits.h" + ] + }, + "gpu.mojom.ValueState": { + "typename": "gpu::ValueState", + "headers": [ + "gpu/command_buffer/common/value_state.h", + "gpu/ipc/gpu_command_buffer_traits.h" + ] + } + } +}
diff --git a/gpu/command_buffer/common/sync_token.mojom b/gpu/command_buffer/common/sync_token.mojom new file mode 100644 index 0000000..248ad315 --- /dev/null +++ b/gpu/command_buffer/common/sync_token.mojom
@@ -0,0 +1,8 @@ +// Copyright 2016 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. + +module gpu.mojom; + +[Native] +struct SyncToken;
diff --git a/gpu/command_buffer/common/value_state.mojom b/gpu/command_buffer/common/value_state.mojom new file mode 100644 index 0000000..53b0d568 --- /dev/null +++ b/gpu/command_buffer/common/value_state.mojom
@@ -0,0 +1,8 @@ +// Copyright 2016 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. + +module gpu.mojom; + +[Native] +struct ValueState;
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index 6ebd283..2faa621 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -3145,6 +3145,8 @@ caps.blend_equation_advanced_coherent = feature_info_->feature_flags().blend_equation_advanced_coherent; caps.texture_rg = feature_info_->feature_flags().ext_texture_rg; + caps.texture_half_float_linear = + feature_info_->feature_flags().enable_texture_half_float_linear; caps.image_ycbcr_422 = feature_info_->feature_flags().chromium_image_ycbcr_422; caps.image_ycbcr_420v =
diff --git a/gpu/config/gpu_control_list_format.txt b/gpu/config/gpu_control_list_format.txt index ae812bb..4e2df42 100644 --- a/gpu/config/gpu_control_list_format.txt +++ b/gpu/config/gpu_control_list_format.txt
@@ -79,4 +79,4 @@ // INT is very much like FLOAT, except that the values need to be integers. // // String pattern syntax can be found at -// https://code.google.com/p/re2/wiki/Syntax. +// https://github.com/google/re2/blob/master/doc/syntax.txt
diff --git a/gpu/ipc/gpu_command_buffer_traits.cc b/gpu/ipc/gpu_command_buffer_traits.cc index eecc1374..fdf2e15 100644 --- a/gpu/ipc/gpu_command_buffer_traits.cc +++ b/gpu/ipc/gpu_command_buffer_traits.cc
@@ -11,6 +11,12 @@ #include "gpu/command_buffer/common/sync_token.h" #include "gpu/command_buffer/common/value_state.h" +// Generate param traits size methods. +#include "ipc/param_traits_size_macros.h" +namespace IPC { +#include "gpu/ipc/gpu_command_buffer_traits_multi.h" +} // namespace IPC + // Generate param traits write methods. #include "ipc/param_traits_write_macros.h" namespace IPC { @@ -31,6 +37,14 @@ namespace IPC { +void ParamTraits<gpu::CommandBuffer::State>::GetSize(base::PickleSizer* s, + const param_type& p) { + GetParamSize(s, p.get_offset); + GetParamSize(s, p.token); + GetParamSize(s, p.error); + GetParamSize(s, p.generation); +} + void ParamTraits<gpu::CommandBuffer::State>::Write(base::Pickle* m, const param_type& p) { WriteParam(m, p.get_offset); @@ -57,6 +71,15 @@ l->append("<CommandBuffer::State>"); } +void ParamTraits<gpu::SyncToken>::GetSize(base::PickleSizer* s, + const param_type& p) { + DCHECK(!p.HasData() || p.verified_flush()); + GetParamSize(s, p.verified_flush()); + GetParamSize(s, p.namespace_id()); + GetParamSize(s, p.command_buffer_id()); + GetParamSize(s, p.release_count()); +} + void ParamTraits<gpu::SyncToken>::Write(base::Pickle* m, const param_type& p) { DCHECK(!p.HasData() || p.verified_flush()); @@ -99,6 +122,11 @@ static_cast<unsigned long long>(p.release_count())); } +void ParamTraits<gpu::Mailbox>::GetSize(base::PickleSizer* s, + const param_type& p) { + s->AddBytes(sizeof(p.name)); +} + void ParamTraits<gpu::Mailbox>::Write(base::Pickle* m, const param_type& p) { m->WriteBytes(p.name, sizeof(p.name)); } @@ -119,6 +147,13 @@ *l += base::StringPrintf("%02x", p.name[i]); } +void ParamTraits<gpu::MailboxHolder>::GetSize(base::PickleSizer* s, + const param_type& p) { + GetParamSize(s, p.mailbox); + GetParamSize(s, p.sync_token); + GetParamSize(s, p.texture_target); +} + void ParamTraits<gpu::MailboxHolder>::Write(base::Pickle* m, const param_type& p) { WriteParam(m, p.mailbox); @@ -141,6 +176,11 @@ *l += base::StringPrintf(":%04x@", p.texture_target); } +void ParamTraits<gpu::ValueState>::GetSize(base::PickleSizer* s, + const param_type& p) { + s->AddData(sizeof(gpu::ValueState)); +} + void ParamTraits<gpu::ValueState>::Write(base::Pickle* m, const param_type& p) { m->WriteData(reinterpret_cast<const char*>(&p), sizeof(gpu::ValueState));
diff --git a/gpu/ipc/gpu_command_buffer_traits.h b/gpu/ipc/gpu_command_buffer_traits.h index f66a8cf..7951297 100644 --- a/gpu/ipc/gpu_command_buffer_traits.h +++ b/gpu/ipc/gpu_command_buffer_traits.h
@@ -22,6 +22,7 @@ template <> struct GPU_EXPORT ParamTraits<gpu::CommandBuffer::State> { typedef gpu::CommandBuffer::State param_type; + static void GetSize(base::PickleSizer* s, const param_type& p); static void Write(base::Pickle* m, const param_type& p); static bool Read(const base::Pickle* m, base::PickleIterator* iter, @@ -32,6 +33,7 @@ template <> struct GPU_EXPORT ParamTraits<gpu::SyncToken> { typedef gpu::SyncToken param_type; + static void GetSize(base::PickleSizer* s, const param_type& p); static void Write(base::Pickle* m, const param_type& p); static bool Read(const base::Pickle* m, base::PickleIterator* iter, @@ -42,6 +44,7 @@ template<> struct GPU_EXPORT ParamTraits<gpu::Mailbox> { typedef gpu::Mailbox param_type; + static void GetSize(base::PickleSizer* s, const param_type& p); static void Write(base::Pickle* m, const param_type& p); static bool Read(const base::Pickle* m, base::PickleIterator* iter, @@ -52,6 +55,7 @@ template <> struct GPU_EXPORT ParamTraits<gpu::MailboxHolder> { typedef gpu::MailboxHolder param_type; + static void GetSize(base::PickleSizer* s, const param_type& p); static void Write(base::Pickle* m, const param_type& p); static bool Read(const base::Pickle* m, base::PickleIterator* iter, @@ -62,6 +66,7 @@ template <> struct GPU_EXPORT ParamTraits<gpu::ValueState> { typedef gpu::ValueState param_type; + static void GetSize(base::PickleSizer* s, const param_type& p); static void Write(base::Pickle* m, const param_type& p); static bool Read(const base::Pickle* m, base::PickleIterator* iter,
diff --git a/gpu/ipc/gpu_command_buffer_traits_multi.h b/gpu/ipc/gpu_command_buffer_traits_multi.h index ae62b67..09a3fb3e 100644 --- a/gpu/ipc/gpu_command_buffer_traits_multi.h +++ b/gpu/ipc/gpu_command_buffer_traits_multi.h
@@ -102,6 +102,7 @@ IPC_STRUCT_TRAITS_MEMBER(blend_equation_advanced) IPC_STRUCT_TRAITS_MEMBER(blend_equation_advanced_coherent) IPC_STRUCT_TRAITS_MEMBER(texture_rg) + IPC_STRUCT_TRAITS_MEMBER(texture_half_float_linear) IPC_STRUCT_TRAITS_MEMBER(image_ycbcr_422) IPC_STRUCT_TRAITS_MEMBER(image_ycbcr_420v) IPC_STRUCT_TRAITS_MEMBER(render_buffer_format_bgra8888)
diff --git a/gpu/skia_bindings/gl_bindings_skia_cmd_buffer.cc b/gpu/skia_bindings/gl_bindings_skia_cmd_buffer.cc index 0f63eb8..e0ff4df 100644 --- a/gpu/skia_bindings/gl_bindings_skia_cmd_buffer.cc +++ b/gpu/skia_bindings/gl_bindings_skia_cmd_buffer.cc
@@ -19,7 +19,7 @@ interface->fStandard = kGLES_GrGLStandard; interface->fExtensions.init(kGLES_GrGLStandard, glGetString, - NULL, + nullptr, glGetIntegerv); GrGLInterface::Functions* functions = &interface->fFunctions;
diff --git a/ios/chrome/browser/geolocation/omnibox_geolocation_authorization_alert.mm b/ios/chrome/browser/geolocation/omnibox_geolocation_authorization_alert.mm index 352bd53b9..56af2623c 100644 --- a/ios/chrome/browser/geolocation/omnibox_geolocation_authorization_alert.mm +++ b/ios/chrome/browser/geolocation/omnibox_geolocation_authorization_alert.mm
@@ -16,11 +16,10 @@ #include "ios/public/provider/chrome/browser/chrome_browser_provider.h" #include "ui/base/l10n/l10n_util_mac.h" -@interface OmniboxGeolocationAuthorizationAlert () <UIAlertViewDelegate> { +@interface OmniboxGeolocationAuthorizationAlert () { base::WeakNSProtocol<id<OmniboxGeolocationAuthorizationAlertDelegate>> delegate_; } - @end @implementation OmniboxGeolocationAuthorizationAlert @@ -52,32 +51,44 @@ NSString* cancel = l10n_util::GetNSString(IDS_IOS_LOCATION_USAGE_CANCEL); NSString* ok = l10n_util::GetNSString(IDS_OK); - // Use a UIAlertView to match the style of the iOS system location alert. - base::scoped_nsobject<UIAlertView> alertView( - [[UIAlertView alloc] initWithTitle:nil - message:message - delegate:self - cancelButtonTitle:cancel - otherButtonTitles:ok, nil]); + // Use a UIAlertController to match the style of the iOS system location + // alert. + base::WeakNSObject<OmniboxGeolocationAuthorizationAlert> weakSelf(self); + UIAlertController* alert = + [UIAlertController alertControllerWithTitle:nil + message:message + preferredStyle:UIAlertControllerStyleAlert]; - [alertView show]; -} + UIAlertAction* defaultAction = [UIAlertAction + actionWithTitle:ok + style:UIAlertActionStyleDefault + handler:^(UIAlertAction* action) { + base::scoped_nsobject<OmniboxGeolocationAuthorizationAlert> + strongSelf([weakSelf retain]); + if (strongSelf) { + [[strongSelf delegate] + authorizationAlertDidAuthorize:strongSelf]; + } + }]; + [alert addAction:defaultAction]; -#pragma mark - UIAlertViewDelegate + UIAlertAction* cancelAction = [UIAlertAction + actionWithTitle:cancel + style:UIAlertActionStyleCancel + handler:^(UIAlertAction* action) { + base::scoped_nsobject<OmniboxGeolocationAuthorizationAlert> + strongSelf([weakSelf retain]); + if (strongSelf) { + [[strongSelf delegate] + authorizationAlertDidCancel:strongSelf]; + } + }]; + [alert addAction:cancelAction]; -- (void)alertView:(UIAlertView*)alertView - clickedButtonAtIndex:(NSInteger)buttonIndex { - switch (buttonIndex) { - case 0: - [delegate_ authorizationAlertDidCancel:self]; - break; - case 1: - [delegate_ authorizationAlertDidAuthorize:self]; - break; - default: - NOTREACHED(); - break; - } + [[[[UIApplication sharedApplication] keyWindow] rootViewController] + presentViewController:alert + animated:YES + completion:nil]; } @end
diff --git a/ios/chrome/browser/ios_chrome_io_thread.cc b/ios/chrome/browser/ios_chrome_io_thread.cc index e2376f2..fea44a0 100644 --- a/ios/chrome/browser/ios_chrome_io_thread.cc +++ b/ios/chrome/browser/ios_chrome_io_thread.cc
@@ -630,14 +630,8 @@ globals.enable_tcp_fast_open_for_ssl.CopyToIfSet( ¶ms->enable_tcp_fast_open_for_ssl); - globals.initial_max_spdy_concurrent_streams.CopyToIfSet( - ¶ms->spdy_initial_max_concurrent_streams); - globals.enable_spdy_compression.CopyToIfSet(¶ms->enable_spdy_compression); - globals.enable_spdy_ping_based_connection_checking.CopyToIfSet( - ¶ms->enable_spdy_ping_based_connection_checking); globals.enable_spdy31.CopyToIfSet(¶ms->enable_spdy31); globals.enable_http2.CopyToIfSet(¶ms->enable_http2); - params->forced_spdy_exclusions = globals.forced_spdy_exclusions; globals.parse_alternative_services.CopyToIfSet( ¶ms->parse_alternative_services); globals.enable_alternative_service_with_different_host.CopyToIfSet(
diff --git a/ios/chrome/browser/ios_chrome_io_thread.h b/ios/chrome/browser/ios_chrome_io_thread.h index e0b481d..67faf2d0 100644 --- a/ios/chrome/browser/ios_chrome_io_thread.h +++ b/ios/chrome/browser/ios_chrome_io_thread.h
@@ -134,12 +134,8 @@ uint16_t testing_fixed_https_port; Optional<bool> enable_tcp_fast_open_for_ssl; - Optional<size_t> initial_max_spdy_concurrent_streams; - Optional<bool> enable_spdy_compression; - Optional<bool> enable_spdy_ping_based_connection_checking; Optional<bool> enable_spdy31; Optional<bool> enable_http2; - std::set<net::HostPortPair> forced_spdy_exclusions; Optional<bool> parse_alternative_services; Optional<bool> enable_alternative_service_with_different_host; Optional<double> alternative_service_probability_threshold;
diff --git a/ios/chrome/browser/memory/memory_debugger.mm b/ios/chrome/browser/memory/memory_debugger.mm index 13c04a0e..b37625a 100644 --- a/ios/chrome/browser/memory/memory_debugger.mm +++ b/ios/chrome/browser/memory/memory_debugger.mm
@@ -591,12 +591,17 @@ // Shows an alert with the given |errorMessage|. - (void)alert:(NSString*)errorMessage { - UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Error" - message:errorMessage - delegate:self - cancelButtonTitle:@"OK" - otherButtonTitles:nil, nil]; - [alert show]; + UIAlertController* alert = + [UIAlertController alertControllerWithTitle:@"Error" + message:errorMessage + preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"OK" + style:UIAlertActionStyleDefault + handler:nil]]; + [[[[UIApplication sharedApplication] keyWindow] rootViewController] + presentViewController:alert + animated:YES + completion:nil]; } @end
diff --git a/ios/web/web_state/error_translation_util.h b/ios/web/web_state/error_translation_util.h index 723cdbb..8f8769cf 100644 --- a/ios/web/web_state/error_translation_util.h +++ b/ios/web/web_state/error_translation_util.h
@@ -9,10 +9,10 @@ namespace web { -// Translates iOS-specific errors into their net error equivalent. If a valid -// translation is found, a copy of |error| is returned with the translation as -// its final underlying error. If there is no viable translation, the original -// error is returned. +// Translates an iOS-specific error into its net error equivalent and returns +// a copy of |error| with the translation as its final underlying error. The +// underlying net error will have an error code of net::ERR_FAILED if no +// specific translation of the iOS error is found. NSError* NetErrorFromError(NSError* error); } // namespace web
diff --git a/ios/web/web_state/error_translation_util.mm b/ios/web/web_state/error_translation_util.mm index d939ee0..85986d46 100644 --- a/ios/web/web_state/error_translation_util.mm +++ b/ios/web/web_state/error_translation_util.mm
@@ -148,23 +148,22 @@ DCHECK(error); NSError* underlying_error = base::ios::GetFinalUnderlyingErrorFromError(error); - NSError* translated_error = error; + + NSInteger net_error_code = net::ERR_FAILED; if ([underlying_error.domain isEqualToString:NSURLErrorDomain] || [underlying_error.domain isEqualToString:static_cast<NSString*>(kCFErrorDomainCFNetwork)]) { // Attempt to translate NSURL and CFNetwork error codes into their // corresponding net error codes. - NSInteger net_error_code = net::OK; - if (GetNetErrorFromIOSErrorCode(underlying_error.code, &net_error_code)) { - NSString* net_error_domain = - [NSString stringWithUTF8String:net::kErrorDomain]; - NSError* net_error = [NSError errorWithDomain:net_error_domain - code:net_error_code - userInfo:nil]; - translated_error = - base::ios::ErrorWithAppendedUnderlyingError(error, net_error); - } + GetNetErrorFromIOSErrorCode(underlying_error.code, &net_error_code); } - return translated_error; + + NSString* net_error_domain = + [NSString stringWithUTF8String:net::kErrorDomain]; + NSError* net_error = [NSError errorWithDomain:net_error_domain + code:net_error_code + userInfo:nil]; + return base::ios::ErrorWithAppendedUnderlyingError(error, net_error); } + } // namespace web
diff --git a/ipc/BUILD.gn b/ipc/BUILD.gn index 8c7a351..2451d6f 100644 --- a/ipc/BUILD.gn +++ b/ipc/BUILD.gn
@@ -26,6 +26,7 @@ "brokerable_attachment.h", "brokerable_attachment_mac.cc", "brokerable_attachment_win.cc", + "export_template.h", "handle_attachment_win.cc", "handle_attachment_win.h", "handle_win.cc", @@ -65,6 +66,8 @@ "ipc_message_generator.h", "ipc_message_macros.h", "ipc_message_start.h", + "ipc_message_templates.h", + "ipc_message_templates_impl.h", "ipc_message_utils.cc", "ipc_message_utils.h", "ipc_platform_file.cc",
diff --git a/ipc/export_template.h b/ipc/export_template.h new file mode 100644 index 0000000..e743e19 --- /dev/null +++ b/ipc/export_template.h
@@ -0,0 +1,163 @@ +// Copyright 2015 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 IPC_EXPORT_TEMPLATE_H_ +#define IPC_EXPORT_TEMPLATE_H_ + +// Synopsis +// +// This header provides macros for using FOO_EXPORT macros with explicit +// template instantiation declarations and definitions. +// Generally, the FOO_EXPORT macros are used at declarations, +// and GCC requires them to be used at explicit instantiation declarations, +// but MSVC requires __declspec(dllexport) to be used at the explicit +// instantiation definitions instead. + +// Usage +// +// In a header file, write: +// +// extern template class EXPORT_TEMPLATE_DECLARE(FOO_EXPORT) foo<bar>; +// +// In a source file, write: +// +// template class EXPORT_TEMPLATE_DEFINE(FOO_EXPORT) foo<bar>; + +// Implementation notes +// +// The implementation of this header uses some subtle macro semantics to +// detect what the provided FOO_EXPORT value was defined as and then +// to dispatch to appropriate macro definitions. Unfortunately, +// MSVC's C preprocessor is rather non-compliant and requires special +// care to make it work. +// +// Issue 1. +// +// #define F(x) +// F() +// +// MSVC emits warning C4003 ("not enough actual parameters for macro +// 'F'), even though it's a valid macro invocation. This affects the +// macros below that take just an "export" parameter, because export +// may be empty. +// +// As a workaround, we can add a dummy parameter and arguments: +// +// #define F(x,_) +// F(,) +// +// Issue 2. +// +// #define F(x) G##x +// #define Gj() ok +// F(j()) +// +// The correct replacement for "F(j())" is "ok", but MSVC replaces it +// with "Gj()". As a workaround, we can pass the result to an +// identity macro to force MSVC to look for replacements again. (This +// is why EXPORT_TEMPLATE_STYLE_3 exists.) + +#define EXPORT_TEMPLATE_DECLARE(export) \ + EXPORT_TEMPLATE_INVOKE(DECLARE, EXPORT_TEMPLATE_STYLE(export, ), export) +#define EXPORT_TEMPLATE_DEFINE(export) \ + EXPORT_TEMPLATE_INVOKE(DEFINE, EXPORT_TEMPLATE_STYLE(export, ), export) + +// INVOKE is an internal helper macro to perform parameter replacements +// and token pasting to chain invoke another macro. E.g., +// EXPORT_TEMPLATE_INVOKE(DECLARE, DEFAULT, FOO_EXPORT) +// will export to call +// EXPORT_TEMPLATE_DECLARE_DEFAULT(FOO_EXPORT, ) +// (but with FOO_EXPORT expanded too). +#define EXPORT_TEMPLATE_INVOKE(which, style, export) \ + EXPORT_TEMPLATE_INVOKE_2(which, style, export) +#define EXPORT_TEMPLATE_INVOKE_2(which, style, export) \ + EXPORT_TEMPLATE_##which##_##style(export, ) + +// Default style is to apply the FOO_EXPORT macro at declaration sites. +#define EXPORT_TEMPLATE_DECLARE_DEFAULT(export, _) export +#define EXPORT_TEMPLATE_DEFINE_DEFAULT(export, _) + +// The "MSVC hack" style is used when FOO_EXPORT is defined +// as __declspec(dllexport), which MSVC requires to be used at +// definition sites instead. +#define EXPORT_TEMPLATE_DECLARE_MSVC_HACK(export, _) +#define EXPORT_TEMPLATE_DEFINE_MSVC_HACK(export, _) export + +// EXPORT_TEMPLATE_STYLE is an internal helper macro that identifies which +// export style needs to be used for the provided FOO_EXPORT macro definition. +// "", "__attribute__(...)", and "__declspec(dllimport)" are mapped +// to "DEFAULT"; while "__declspec(dllexport)" is mapped to "MSVC_HACK". +// +// It's implemented with token pasting to transform the __attribute__ and +// __declspec annotations into macro invocations. E.g., if FOO_EXPORT is +// defined as "__declspec(dllimport)", it undergoes the following sequence of +// macro substitutions: +// EXPORT_TEMPLATE_STYLE(FOO_EXPORT, ) +// EXPORT_TEMPLATE_STYLE_2(__declspec(dllimport), ) +// EXPORT_TEMPLATE_STYLE_3(EXPORT_TEMPLATE_STYLE_MATCH__declspec(dllimport)) +// EXPORT_TEMPLATE_STYLE_MATCH__declspec(dllimport) +// EXPORT_TEMPLATE_STYLE_MATCH_DECLSPEC_dllimport +// DEFAULT +#define EXPORT_TEMPLATE_STYLE(export, _) EXPORT_TEMPLATE_STYLE_2(export, ) +#define EXPORT_TEMPLATE_STYLE_2(export, _) \ + EXPORT_TEMPLATE_STYLE_3( \ + EXPORT_TEMPLATE_STYLE_MATCH_foj3FJo5StF0OvIzl7oMxA##export) +#define EXPORT_TEMPLATE_STYLE_3(style) style + +// Internal helper macros for EXPORT_TEMPLATE_STYLE. +// +// XXX: C++ reserves all identifiers containing "__" for the implementation, +// but "__attribute__" and "__declspec" already contain "__" and the token-paste +// operator can only add characters; not remove them. To minimize the risk of +// conflict with implementations, we include "foj3FJo5StF0OvIzl7oMxA" (a random +// 128-bit string, encoded in Base64) in the macro name. +#define EXPORT_TEMPLATE_STYLE_MATCH_foj3FJo5StF0OvIzl7oMxA DEFAULT +#define EXPORT_TEMPLATE_STYLE_MATCH_foj3FJo5StF0OvIzl7oMxA__attribute__(...) \ + DEFAULT +#define EXPORT_TEMPLATE_STYLE_MATCH_foj3FJo5StF0OvIzl7oMxA__declspec(arg) \ + EXPORT_TEMPLATE_STYLE_MATCH_DECLSPEC_##arg + +// Internal helper macros for EXPORT_TEMPLATE_STYLE. +#define EXPORT_TEMPLATE_STYLE_MATCH_DECLSPEC_dllexport MSVC_HACK +#define EXPORT_TEMPLATE_STYLE_MATCH_DECLSPEC_dllimport DEFAULT + +// Sanity checks. +// +// EXPORT_TEMPLATE_TEST uses the same macro invocation pattern as +// EXPORT_TEMPLATE_DECLARE and EXPORT_TEMPLATE_DEFINE do to check that they're +// working correctly. When they're working correctly, the sequence of macro +// replacements should go something like: +// +// EXPORT_TEMPLATE_TEST(DEFAULT, __declspec(dllimport)); +// +// static_assert(EXPORT_TEMPLATE_INVOKE(TEST_DEFAULT, +// EXPORT_TEMPLATE_STYLE(__declspec(dllimport), ), +// __declspec(dllimport)), "__declspec(dllimport)"); +// +// static_assert(EXPORT_TEMPLATE_INVOKE(TEST_DEFAULT, +// DEFAULT, __declspec(dllimport)), "__declspec(dllimport)"); +// +// static_assert(EXPORT_TEMPLATE_TEST_DEFAULT_DEFAULT( +// __declspec(dllimport)), "__declspec(dllimport)"); +// +// static_assert(true, "__declspec(dllimport)"); +// +// When they're not working correctly, a syntax error should occur instead. +#define EXPORT_TEMPLATE_TEST(want, export) \ + static_assert(EXPORT_TEMPLATE_INVOKE( \ + TEST_##want, EXPORT_TEMPLATE_STYLE(export, ), export), \ + #export) +#define EXPORT_TEMPLATE_TEST_DEFAULT_DEFAULT(...) true +#define EXPORT_TEMPLATE_TEST_MSVC_HACK_MSVC_HACK(...) true + +EXPORT_TEMPLATE_TEST(DEFAULT, ); +EXPORT_TEMPLATE_TEST(DEFAULT, __attribute__((visibility("default")))); +EXPORT_TEMPLATE_TEST(MSVC_HACK, __declspec(dllexport)); +EXPORT_TEMPLATE_TEST(DEFAULT, __declspec(dllimport)); + +#undef EXPORT_TEMPLATE_TEST +#undef EXPORT_TEMPLATE_TEST_DEFAULT_DEFAULT +#undef EXPORT_TEMPLATE_TEST_MSVC_HACK_MSVC_HACK + +#endif // IPC_EXPORT_TEMPLATE_H_
diff --git a/ipc/ipc.gypi b/ipc/ipc.gypi index dbd2099..6b7cf93 100644 --- a/ipc/ipc.gypi +++ b/ipc/ipc.gypi
@@ -30,6 +30,7 @@ 'brokerable_attachment.h', 'brokerable_attachment_mac.cc', 'brokerable_attachment_win.cc', + 'export_template.h', 'handle_attachment_win.cc', 'handle_attachment_win.h', 'handle_win.cc', @@ -69,6 +70,8 @@ 'ipc_message_generator.h', 'ipc_message_macros.h', 'ipc_message_start.h', + 'ipc_message_templates.h', + 'ipc_message_templates_impl.h', 'ipc_message_utils.cc', 'ipc_message_utils.h', 'ipc_param_traits.h',
diff --git a/ipc/ipc_message_macros.h b/ipc/ipc_message_macros.h index 9e9b3e0..a573265b 100644 --- a/ipc/ipc_message_macros.h +++ b/ipc/ipc_message_macros.h
@@ -202,13 +202,12 @@ #include <stdint.h> #include "base/profiler/scoped_profile.h" +#include "base/tuple.h" +#include "ipc/export_template.h" +#include "ipc/ipc_message_templates.h" #include "ipc/ipc_message_utils.h" #include "ipc/param_traits_macros.h" -#if defined(IPC_MESSAGE_IMPL) -#include "ipc/ipc_message_utils_impl.h" -#endif - // Convenience macro for defining structs without inheritance. Should not need // to be subsequently redefined. #define IPC_STRUCT_BEGIN(struct_name) \ @@ -227,566 +226,63 @@ #define IPC_STRUCT_MEMBER(type, name, ...) type name; #define IPC_STRUCT_END() }; -// Message macros collect specific numbers of arguments and funnel them into -// the common message generation macro. These should never be redefined. -#define IPC_MESSAGE_CONTROL0(msg_class) \ - IPC_MESSAGE_DECL(EMPTY, CONTROL, msg_class, 0, 0, (), ()) +// Message macros collect arguments and funnel them into the common message +// generation macro. These should never be redefined. -#define IPC_MESSAGE_CONTROL1(msg_class, type1) \ - IPC_MESSAGE_DECL(ASYNC, CONTROL, msg_class, 1, 0, (type1), ()) +// Asynchronous messages have only in parameters and are declared like: +// IPC_MESSAGE_CONTROL(FooMsg, int, float) +#define IPC_MESSAGE_CONTROL(msg_class, ...) \ + IPC_MESSAGE_DECL(msg_class, CONTROL, IPC_TUPLE(__VA_ARGS__), void) +#define IPC_MESSAGE_ROUTED(msg_class, ...) \ + IPC_MESSAGE_DECL(msg_class, ROUTED, IPC_TUPLE(__VA_ARGS__), void) -#define IPC_MESSAGE_CONTROL2(msg_class, type1, type2) \ - IPC_MESSAGE_DECL(ASYNC, CONTROL, msg_class, 2, 0, (type1, type2), ()) +// Synchronous messages have both in and out parameters, so the lists need to +// be parenthesized to disambiguate: +// IPC_SYNC_MESSAGE_CONTROL(BarMsg, (int, int), (bool)) +// +// Implementation detail: The parentheses supplied by the caller for +// disambiguation are also used to trigger the IPC_TUPLE invocations below, +// so "IPC_TUPLE in" and "IPC_TUPLE out" are intentional. +#define IPC_SYNC_MESSAGE_CONTROL(msg_class, in, out) \ + IPC_MESSAGE_DECL(msg_class, CONTROL, IPC_TUPLE in, IPC_TUPLE out) +#define IPC_SYNC_MESSAGE_ROUTED(msg_class, in, out) \ + IPC_MESSAGE_DECL(msg_class, ROUTED, IPC_TUPLE in, IPC_TUPLE out) -#define IPC_MESSAGE_CONTROL3(msg_class, type1, type2, type3) \ - IPC_MESSAGE_DECL(ASYNC, CONTROL, msg_class, 3, 0, (type1, type2, type3), ()) +#define IPC_TUPLE(...) base::Tuple<__VA_ARGS__> -#define IPC_MESSAGE_CONTROL4(msg_class, type1, type2, type3, type4) \ - IPC_MESSAGE_DECL(ASYNC, CONTROL, msg_class, 4, 0, (type1, type2, type3, type4), ()) - -#define IPC_MESSAGE_CONTROL5(msg_class, type1, type2, type3, type4, type5) \ - IPC_MESSAGE_DECL(ASYNC, CONTROL, msg_class, 5, 0, (type1, type2, type3, type4, type5), ()) - -#define IPC_MESSAGE_ROUTED0(msg_class) \ - IPC_MESSAGE_DECL(EMPTY, ROUTED, msg_class, 0, 0, (), ()) - -#define IPC_MESSAGE_ROUTED1(msg_class, type1) \ - IPC_MESSAGE_DECL(ASYNC, ROUTED, msg_class, 1, 0, (type1), ()) - -#define IPC_MESSAGE_ROUTED2(msg_class, type1, type2) \ - IPC_MESSAGE_DECL(ASYNC, ROUTED, msg_class, 2, 0, (type1, type2), ()) - -#define IPC_MESSAGE_ROUTED3(msg_class, type1, type2, type3) \ - IPC_MESSAGE_DECL(ASYNC, ROUTED, msg_class, 3, 0, (type1, type2, type3), ()) - -#define IPC_MESSAGE_ROUTED4(msg_class, type1, type2, type3, type4) \ - IPC_MESSAGE_DECL(ASYNC, ROUTED, msg_class, 4, 0, (type1, type2, type3, type4), ()) - -#define IPC_MESSAGE_ROUTED5(msg_class, type1, type2, type3, type4, type5) \ - IPC_MESSAGE_DECL(ASYNC, ROUTED, msg_class, 5, 0, (type1, type2, type3, type4, type5), ()) - -#define IPC_SYNC_MESSAGE_CONTROL0_0(msg_class) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 0, 0, (), ()) - -#define IPC_SYNC_MESSAGE_CONTROL0_1(msg_class, type1_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 0, 1, (), (type1_out)) - -#define IPC_SYNC_MESSAGE_CONTROL0_2(msg_class, type1_out, type2_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 0, 2, (), (type1_out, type2_out)) - -#define IPC_SYNC_MESSAGE_CONTROL0_3(msg_class, type1_out, type2_out, type3_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 0, 3, (), (type1_out, type2_out, type3_out)) - -#define IPC_SYNC_MESSAGE_CONTROL0_4(msg_class, type1_out, type2_out, type3_out, type4_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 0, 4, (), (type1_out, type2_out, type3_out, type4_out)) - -#define IPC_SYNC_MESSAGE_CONTROL1_0(msg_class, type1_in) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 1, 0, (type1_in), ()) - -#define IPC_SYNC_MESSAGE_CONTROL1_1(msg_class, type1_in, type1_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 1, 1, (type1_in), (type1_out)) - -#define IPC_SYNC_MESSAGE_CONTROL1_2(msg_class, type1_in, type1_out, type2_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 1, 2, (type1_in), (type1_out, type2_out)) - -#define IPC_SYNC_MESSAGE_CONTROL1_3(msg_class, type1_in, type1_out, type2_out, type3_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 1, 3, (type1_in), (type1_out, type2_out, type3_out)) - -#define IPC_SYNC_MESSAGE_CONTROL1_4(msg_class, type1_in, type1_out, type2_out, type3_out, type4_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 1, 4, (type1_in), (type1_out, type2_out, type3_out, type4_out)) - -#define IPC_SYNC_MESSAGE_CONTROL2_0(msg_class, type1_in, type2_in) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 2, 0, (type1_in, type2_in), ()) - -#define IPC_SYNC_MESSAGE_CONTROL2_1(msg_class, type1_in, type2_in, type1_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 2, 1, (type1_in, type2_in), (type1_out)) - -#define IPC_SYNC_MESSAGE_CONTROL2_2(msg_class, type1_in, type2_in, type1_out, type2_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 2, 2, (type1_in, type2_in), (type1_out, type2_out)) - -#define IPC_SYNC_MESSAGE_CONTROL2_3(msg_class, type1_in, type2_in, type1_out, type2_out, type3_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 2, 3, (type1_in, type2_in), (type1_out, type2_out, type3_out)) - -#define IPC_SYNC_MESSAGE_CONTROL2_4(msg_class, type1_in, type2_in, type1_out, type2_out, type3_out, type4_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 2, 4, (type1_in, type2_in), (type1_out, type2_out, type3_out, type4_out)) - -#define IPC_SYNC_MESSAGE_CONTROL3_0(msg_class, type1_in, type2_in, type3_in) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 3, 0, (type1_in, type2_in, type3_in), ()) - -#define IPC_SYNC_MESSAGE_CONTROL3_1(msg_class, type1_in, type2_in, type3_in, type1_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 3, 1, (type1_in, type2_in, type3_in), (type1_out)) - -#define IPC_SYNC_MESSAGE_CONTROL3_2(msg_class, type1_in, type2_in, type3_in, type1_out, type2_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 3, 2, (type1_in, type2_in, type3_in), (type1_out, type2_out)) - -#define IPC_SYNC_MESSAGE_CONTROL3_3(msg_class, type1_in, type2_in, type3_in, type1_out, type2_out, type3_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 3, 3, (type1_in, type2_in, type3_in), (type1_out, type2_out, type3_out)) - -#define IPC_SYNC_MESSAGE_CONTROL3_4(msg_class, type1_in, type2_in, type3_in, type1_out, type2_out, type3_out, type4_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 3, 4, (type1_in, type2_in, type3_in), (type1_out, type2_out, type3_out, type4_out)) - -#define IPC_SYNC_MESSAGE_CONTROL4_0(msg_class, type1_in, type2_in, type3_in, type4_in) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 4, 0, (type1_in, type2_in, type3_in, type4_in), ()) - -#define IPC_SYNC_MESSAGE_CONTROL4_1(msg_class, type1_in, type2_in, type3_in, type4_in, type1_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 4, 1, (type1_in, type2_in, type3_in, type4_in), (type1_out)) - -#define IPC_SYNC_MESSAGE_CONTROL4_2(msg_class, type1_in, type2_in, type3_in, type4_in, type1_out, type2_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 4, 2, (type1_in, type2_in, type3_in, type4_in), (type1_out, type2_out)) - -#define IPC_SYNC_MESSAGE_CONTROL4_3(msg_class, type1_in, type2_in, type3_in, type4_in, type1_out, type2_out, type3_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 4, 3, (type1_in, type2_in, type3_in, type4_in), (type1_out, type2_out, type3_out)) - -#define IPC_SYNC_MESSAGE_CONTROL4_4(msg_class, type1_in, type2_in, type3_in, type4_in, type1_out, type2_out, type3_out, type4_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 4, 4, (type1_in, type2_in, type3_in, type4_in), (type1_out, type2_out, type3_out, type4_out)) - -#define IPC_SYNC_MESSAGE_CONTROL5_0(msg_class, type1_in, type2_in, type3_in, type4_in, type5_in) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 5, 0, (type1_in, type2_in, type3_in, type4_in, type5_in), ()) - -#define IPC_SYNC_MESSAGE_CONTROL5_1(msg_class, type1_in, type2_in, type3_in, type4_in, type5_in, type1_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 5, 1, (type1_in, type2_in, type3_in, type4_in, type5_in), (type1_out)) - -#define IPC_SYNC_MESSAGE_CONTROL5_2(msg_class, type1_in, type2_in, type3_in, type4_in, type5_in, type1_out, type2_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 5, 2, (type1_in, type2_in, type3_in, type4_in, type5_in), (type1_out, type2_out)) - -#define IPC_SYNC_MESSAGE_CONTROL5_3(msg_class, type1_in, type2_in, type3_in, type4_in, type5_in, type1_out, type2_out, type3_out) \ - IPC_MESSAGE_DECL(SYNC, CONTROL, msg_class, 5, 3, (type1_in, type2_in, type3_in, type4_in, type5_in), (type1_out, type2_out, type3_out)) - -#define IPC_SYNC_MESSAGE_ROUTED0_0(msg_class) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 0, 0, (), ()) - -#define IPC_SYNC_MESSAGE_ROUTED0_1(msg_class, type1_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 0, 1, (), (type1_out)) - -#define IPC_SYNC_MESSAGE_ROUTED0_2(msg_class, type1_out, type2_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 0, 2, (), (type1_out, type2_out)) - -#define IPC_SYNC_MESSAGE_ROUTED0_3(msg_class, type1_out, type2_out, type3_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 0, 3, (), (type1_out, type2_out, type3_out)) - -#define IPC_SYNC_MESSAGE_ROUTED0_4(msg_class, type1_out, type2_out, type3_out, type4_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 0, 4, (), (type1_out, type2_out, type3_out, type4_out)) - -#define IPC_SYNC_MESSAGE_ROUTED1_0(msg_class, type1_in) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 1, 0, (type1_in), ()) - -#define IPC_SYNC_MESSAGE_ROUTED1_1(msg_class, type1_in, type1_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 1, 1, (type1_in), (type1_out)) - -#define IPC_SYNC_MESSAGE_ROUTED1_2(msg_class, type1_in, type1_out, type2_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 1, 2, (type1_in), (type1_out, type2_out)) - -#define IPC_SYNC_MESSAGE_ROUTED1_3(msg_class, type1_in, type1_out, type2_out, type3_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 1, 3, (type1_in), (type1_out, type2_out, type3_out)) - -#define IPC_SYNC_MESSAGE_ROUTED1_4(msg_class, type1_in, type1_out, type2_out, type3_out, type4_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 1, 4, (type1_in), (type1_out, type2_out, type3_out, type4_out)) - -#define IPC_SYNC_MESSAGE_ROUTED2_0(msg_class, type1_in, type2_in) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 2, 0, (type1_in, type2_in), ()) - -#define IPC_SYNC_MESSAGE_ROUTED2_1(msg_class, type1_in, type2_in, type1_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 2, 1, (type1_in, type2_in), (type1_out)) - -#define IPC_SYNC_MESSAGE_ROUTED2_2(msg_class, type1_in, type2_in, type1_out, type2_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 2, 2, (type1_in, type2_in), (type1_out, type2_out)) - -#define IPC_SYNC_MESSAGE_ROUTED2_3(msg_class, type1_in, type2_in, type1_out, type2_out, type3_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 2, 3, (type1_in, type2_in), (type1_out, type2_out, type3_out)) - -#define IPC_SYNC_MESSAGE_ROUTED2_4(msg_class, type1_in, type2_in, type1_out, type2_out, type3_out, type4_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 2, 4, (type1_in, type2_in), (type1_out, type2_out, type3_out, type4_out)) - -#define IPC_SYNC_MESSAGE_ROUTED3_0(msg_class, type1_in, type2_in, type3_in) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 3, 0, (type1_in, type2_in, type3_in), ()) - -#define IPC_SYNC_MESSAGE_ROUTED3_1(msg_class, type1_in, type2_in, type3_in, type1_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 3, 1, (type1_in, type2_in, type3_in), (type1_out)) - -#define IPC_SYNC_MESSAGE_ROUTED3_2(msg_class, type1_in, type2_in, type3_in, type1_out, type2_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 3, 2, (type1_in, type2_in, type3_in), (type1_out, type2_out)) - -#define IPC_SYNC_MESSAGE_ROUTED3_3(msg_class, type1_in, type2_in, type3_in, type1_out, type2_out, type3_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 3, 3, (type1_in, type2_in, type3_in), (type1_out, type2_out, type3_out)) - -#define IPC_SYNC_MESSAGE_ROUTED3_4(msg_class, type1_in, type2_in, type3_in, type1_out, type2_out, type3_out, type4_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 3, 4, (type1_in, type2_in, type3_in), (type1_out, type2_out, type3_out, type4_out)) - -#define IPC_SYNC_MESSAGE_ROUTED4_0(msg_class, type1_in, type2_in, type3_in, type4_in) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 4, 0, (type1_in, type2_in, type3_in, type4_in), ()) - -#define IPC_SYNC_MESSAGE_ROUTED4_1(msg_class, type1_in, type2_in, type3_in, type4_in, type1_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 4, 1, (type1_in, type2_in, type3_in, type4_in), (type1_out)) - -#define IPC_SYNC_MESSAGE_ROUTED4_2(msg_class, type1_in, type2_in, type3_in, type4_in, type1_out, type2_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 4, 2, (type1_in, type2_in, type3_in, type4_in), (type1_out, type2_out)) - -#define IPC_SYNC_MESSAGE_ROUTED4_3(msg_class, type1_in, type2_in, type3_in, type4_in, type1_out, type2_out, type3_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 4, 3, (type1_in, type2_in, type3_in, type4_in), (type1_out, type2_out, type3_out)) - -#define IPC_SYNC_MESSAGE_ROUTED4_4(msg_class, type1_in, type2_in, type3_in, type4_in, type1_out, type2_out, type3_out, type4_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 4, 4, (type1_in, type2_in, type3_in, type4_in), (type1_out, type2_out, type3_out, type4_out)) - -#define IPC_SYNC_MESSAGE_ROUTED5_0(msg_class, type1_in, type2_in, type3_in, type4_in, type5_in) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 5, 0, (type1_in, type2_in, type3_in, type4_in, type5_in), ()) - -#define IPC_SYNC_MESSAGE_ROUTED5_1(msg_class, type1_in, type2_in, type3_in, type4_in, type5_in, type1_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 5, 1, (type1_in, type2_in, type3_in, type4_in, type5_in), (type1_out)) - -#define IPC_SYNC_MESSAGE_ROUTED5_2(msg_class, type1_in, type2_in, type3_in, type4_in, type5_in, type1_out, type2_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 5, 2, (type1_in, type2_in, type3_in, type4_in, type5_in), (type1_out, type2_out)) - -#define IPC_SYNC_MESSAGE_ROUTED5_3(msg_class, type1_in, type2_in, type3_in, type4_in, type5_in, type1_out, type2_out, type3_out) \ - IPC_MESSAGE_DECL(SYNC, ROUTED, msg_class, 5, 3, (type1_in, type2_in, type3_in, type4_in, type5_in), (type1_out, type2_out, type3_out)) - -// The following macros define the common set of methods provided by ASYNC -// message classes. -// This macro is for all the async IPCs that don't pass an extra parameter using -// IPC_BEGIN_MESSAGE_MAP_WITH_PARAM. -#define IPC_ASYNC_MESSAGE_METHODS_GENERIC \ - template<class T, class S, class P, class Method> \ - static bool Dispatch(const Message* msg, T* obj, S* sender, P* parameter, \ - Method func) { \ - Schema::Param p; \ - if (Read(msg, &p)) { \ - base::DispatchToMethod(obj, func, p); \ - return true; \ - } \ - return false; \ - } - -// The following macros are for for async IPCs which have a dispatcher with an -// extra parameter specified using IPC_BEGIN_MESSAGE_MAP_WITH_PARAM. -#define IPC_ASYNC_MESSAGE_METHODS_1 \ - IPC_ASYNC_MESSAGE_METHODS_GENERIC \ - template<class T, class S, class P, typename TA> \ - static bool Dispatch(const Message* msg, T* obj, S* sender, P* parameter, \ - void (T::*func)(P*, TA)) { \ - Schema::Param p; \ - if (Read(msg, &p)) { \ - (obj->*func)(parameter, base::get<0>(p)); \ - return true; \ - } \ - return false; \ - } -#define IPC_ASYNC_MESSAGE_METHODS_2 \ - IPC_ASYNC_MESSAGE_METHODS_GENERIC \ - template<class T, class S, class P, typename TA, typename TB> \ - static bool Dispatch(const Message* msg, T* obj, S* sender, P* parameter, \ - void (T::*func)(P*, TA, TB)) { \ - Schema::Param p; \ - if (Read(msg, &p)) { \ - (obj->*func)(parameter, base::get<0>(p), base::get<1>(p)); \ - return true; \ - } \ - return false; \ - } -#define IPC_ASYNC_MESSAGE_METHODS_3 \ - IPC_ASYNC_MESSAGE_METHODS_GENERIC \ - template<class T, class S, class P, typename TA, typename TB, typename TC> \ - static bool Dispatch(const Message* msg, T* obj, S* sender, P* parameter, \ - void (T::*func)(P*, TA, TB, TC)) { \ - Schema::Param p; \ - if (Read(msg, &p)) { \ - (obj->*func)(parameter, base::get<0>(p), base::get<1>(p), \ - base::get<2>(p)); \ - return true; \ - } \ - return false; \ - } -#define IPC_ASYNC_MESSAGE_METHODS_4 \ - IPC_ASYNC_MESSAGE_METHODS_GENERIC \ - template<class T, class S, class P, typename TA, typename TB, typename TC, \ - typename TD> \ - static bool Dispatch(const Message* msg, T* obj, S* sender, P* parameter, \ - void (T::*func)(P*, TA, TB, TC, TD)) { \ - Schema::Param p; \ - if (Read(msg, &p)) { \ - (obj->*func)(parameter, base::get<0>(p), base::get<1>(p), \ - base::get<2>(p), base::get<3>(p)); \ - return true; \ - } \ - return false; \ - } -#define IPC_ASYNC_MESSAGE_METHODS_5 \ - IPC_ASYNC_MESSAGE_METHODS_GENERIC \ - template<class T, class S, class P, typename TA, typename TB, typename TC, \ - typename TD, typename TE> \ - static bool Dispatch(const Message* msg, T* obj, S* sender, P* parameter, \ - void (T::*func)(P*, TA, TB, TC, TD, TE)) { \ - Schema::Param p; \ - if (Read(msg, &p)) { \ - (obj->*func)(parameter, base::get<0>(p), base::get<1>(p), \ - base::get<2>(p), base::get<3>(p), base::get<4>(p)); \ - return true; \ - } \ - return false; \ - } - -// The following macros define the common set of methods provided by SYNC -// message classes. -#define IPC_SYNC_MESSAGE_METHODS_GENERIC \ - template<class T, class S, class P, class Method> \ - static bool Dispatch(const Message* msg, T* obj, S* sender, P* parameter, \ - Method func) { \ - Schema::SendParam send_params; \ - bool ok = ReadSendParam(msg, &send_params); \ - return Schema::DispatchWithSendParams(ok, send_params, msg, obj, sender, \ - func); \ - } \ - template<class T, class P, class Method> \ - static bool DispatchDelayReply(const Message* msg, T* obj, P* parameter, \ - Method func) { \ - Schema::SendParam send_params; \ - bool ok = ReadSendParam(msg, &send_params); \ - return Schema::DispatchDelayReplyWithSendParams(ok, send_params, msg, \ - obj, func); \ - } -#define IPC_SYNC_MESSAGE_METHODS_0 \ - IPC_SYNC_MESSAGE_METHODS_GENERIC -#define IPC_SYNC_MESSAGE_METHODS_1 \ - IPC_SYNC_MESSAGE_METHODS_GENERIC \ - template<typename TA> \ - static void WriteReplyParams(Message* reply, TA a) { \ - Schema::WriteReplyParams(reply, a); \ - } -#define IPC_SYNC_MESSAGE_METHODS_2 \ - IPC_SYNC_MESSAGE_METHODS_GENERIC \ - template<typename TA, typename TB> \ - static void WriteReplyParams(Message* reply, TA a, TB b) { \ - Schema::WriteReplyParams(reply, a, b); \ - } -#define IPC_SYNC_MESSAGE_METHODS_3 \ - IPC_SYNC_MESSAGE_METHODS_GENERIC \ - template<typename TA, typename TB, typename TC> \ - static void WriteReplyParams(Message* reply, TA a, TB b, TC c) { \ - Schema::WriteReplyParams(reply, a, b, c); \ - } -#define IPC_SYNC_MESSAGE_METHODS_4 \ - IPC_SYNC_MESSAGE_METHODS_GENERIC \ - template<typename TA, typename TB, typename TC, typename TD> \ - static void WriteReplyParams(Message* reply, TA a, TB b, TC c, TD d) { \ - Schema::WriteReplyParams(reply, a, b, c, d); \ - } -#define IPC_SYNC_MESSAGE_METHODS_5 \ - IPC_SYNC_MESSAGE_METHODS_GENERIC \ - template<typename TA, typename TB, typename TC, typename TD, typename TE> \ - static void WriteReplyParams(Message* reply, TA a, TB b, TC c, TD d, TE e) { \ - Schema::WriteReplyParams(reply, a, b, c, d, e); \ - } - -// Common message macro which dispatches into one of the 6 (sync x kind) -// routines. There is a way that these 6 cases can be lumped together, -// but the macros get very complicated in that case. -// Note: intended be redefined to generate other information. -#define IPC_MESSAGE_DECL(sync, kind, msg_class, \ - in_cnt, out_cnt, in_list, out_list) \ - IPC_##sync##_##kind##_DECL(msg_class, in_cnt, out_cnt, in_list, out_list) \ - IPC_MESSAGE_EXTRA(sync, kind, msg_class, in_cnt, out_cnt, in_list, out_list) - -#define IPC_EMPTY_CONTROL_DECL(msg_class, in_cnt, out_cnt, in_list, out_list) \ - class IPC_MESSAGE_EXPORT msg_class : public IPC::Message { \ - public: \ - typedef IPC::Message Schema; \ - enum { ID = IPC_MESSAGE_ID() }; \ - msg_class() : IPC::Message(MSG_ROUTING_CONTROL, ID, PRIORITY_NORMAL) {} \ - static void Log(std::string* name, const Message* msg, std::string* l); \ - }; - -#define IPC_EMPTY_ROUTED_DECL(msg_class, in_cnt, out_cnt, in_list, out_list) \ - class IPC_MESSAGE_EXPORT msg_class : public IPC::Message { \ - public: \ - typedef IPC::Message Schema; \ - enum { ID = IPC_MESSAGE_ID() }; \ - msg_class(int32_t routing_id) \ - : IPC::Message(routing_id, ID, PRIORITY_NORMAL) {} \ - static void Log(std::string* name, const Message* msg, std::string* l); \ - }; - -#define IPC_ASYNC_CONTROL_DECL(msg_class, in_cnt, out_cnt, in_list, out_list) \ - class IPC_MESSAGE_EXPORT msg_class : public IPC::Message { \ - public: \ - typedef IPC::MessageSchema<IPC_TUPLE_IN_##in_cnt in_list> Schema; \ - typedef Schema::Param Param; \ - enum { ID = IPC_MESSAGE_ID() }; \ - msg_class(IPC_TYPE_IN_##in_cnt in_list); \ - ~msg_class() override; \ - static bool Read(const Message* msg, Schema::Param* p); \ - static void Log(std::string* name, const Message* msg, std::string* l); \ - IPC_ASYNC_MESSAGE_METHODS_##in_cnt \ - }; - -#define IPC_ASYNC_ROUTED_DECL(msg_class, in_cnt, out_cnt, in_list, out_list) \ - class IPC_MESSAGE_EXPORT msg_class : public IPC::Message { \ - public: \ - typedef IPC::MessageSchema<IPC_TUPLE_IN_##in_cnt in_list> Schema; \ - typedef Schema::Param Param; \ - enum { ID = IPC_MESSAGE_ID() }; \ - msg_class(int32_t routing_id IPC_COMMA_##in_cnt \ - IPC_TYPE_IN_##in_cnt in_list); \ - ~msg_class() override; \ - static bool Read(const Message* msg, Schema::Param* p); \ - static void Log(std::string* name, const Message* msg, std::string* l); \ - IPC_ASYNC_MESSAGE_METHODS_##in_cnt \ - }; - -#define IPC_SYNC_CONTROL_DECL(msg_class, in_cnt, out_cnt, in_list, out_list) \ - class IPC_MESSAGE_EXPORT msg_class : public IPC::SyncMessage { \ - public: \ - typedef IPC::SyncMessageSchema<IPC_TUPLE_IN_##in_cnt in_list, \ - IPC_TUPLE_OUT_##out_cnt out_list> Schema; \ - typedef Schema::ReplyParam ReplyParam; \ - typedef Schema::SendParam SendParam; \ - enum { ID = IPC_MESSAGE_ID() }; \ - msg_class(IPC_TYPE_IN_##in_cnt in_list \ - IPC_COMMA_AND_##in_cnt(IPC_COMMA_##out_cnt) \ - IPC_TYPE_OUT_##out_cnt out_list); \ - ~msg_class() override; \ - static bool ReadSendParam(const Message* msg, Schema::SendParam* p); \ - static bool ReadReplyParam( \ - const Message* msg, \ - base::TupleTypes<ReplyParam>::ValueTuple* p); \ - static void Log(std::string* name, const Message* msg, std::string* l); \ - IPC_SYNC_MESSAGE_METHODS_##out_cnt \ - }; - -#define IPC_SYNC_ROUTED_DECL(msg_class, in_cnt, out_cnt, in_list, out_list) \ - class IPC_MESSAGE_EXPORT msg_class : public IPC::SyncMessage { \ - public: \ - typedef IPC::SyncMessageSchema<IPC_TUPLE_IN_##in_cnt in_list, \ - IPC_TUPLE_OUT_##out_cnt out_list> Schema; \ - typedef Schema::ReplyParam ReplyParam; \ - typedef Schema::SendParam SendParam; \ - enum { ID = IPC_MESSAGE_ID() }; \ - msg_class(int32_t routing_id \ - IPC_COMMA_OR_##in_cnt(IPC_COMMA_##out_cnt) \ - IPC_TYPE_IN_##in_cnt in_list \ - IPC_COMMA_AND_##in_cnt(IPC_COMMA_##out_cnt) \ - IPC_TYPE_OUT_##out_cnt out_list); \ - ~msg_class() override; \ - static bool ReadSendParam(const Message* msg, Schema::SendParam* p); \ - static bool ReadReplyParam( \ - const Message* msg, \ - base::TupleTypes<ReplyParam>::ValueTuple* p); \ - static void Log(std::string* name, const Message* msg, std::string* l); \ - IPC_SYNC_MESSAGE_METHODS_##out_cnt \ - }; +#define IPC_MESSAGE_DECL(msg_name, kind, in_tuple, out_tuple) \ + struct IPC_MESSAGE_EXPORT msg_name##_Meta { \ + using InTuple = in_tuple; \ + using OutTuple = out_tuple; \ + enum { ID = IPC_MESSAGE_ID() }; \ + static const IPC::MessageKind kKind = IPC::MessageKind::kind; \ + static const char kName[]; \ + }; \ + extern template class EXPORT_TEMPLATE_DECLARE(IPC_MESSAGE_EXPORT) \ + IPC::MessageT<msg_name##_Meta>; \ + using msg_name = IPC::MessageT<msg_name##_Meta>; \ + IPC_MESSAGE_EXTRA(msg_name) #if defined(IPC_MESSAGE_IMPL) -// "Implementation" inclusion produces constructors, destructors, and -// logging functions, except for the no-arg special cases, where the -// implementation occurs in the declaration, and there is no special -// logging function. -#define IPC_MESSAGE_EXTRA(sync, kind, msg_class, \ - in_cnt, out_cnt, in_list, out_list) \ - IPC_##sync##_##kind##_IMPL(msg_class, in_cnt, out_cnt, in_list, out_list) \ - IPC_##sync##_MESSAGE_LOG(msg_class) +// "Implementation" inclusion provides the explicit template definition +// for msg_name. +#define IPC_MESSAGE_EXTRA(msg_name) \ + const char msg_name##_Meta::kName[] = #msg_name; \ + IPC_MESSAGE_DEFINE_KIND(msg_name) \ + template class EXPORT_TEMPLATE_DEFINE(IPC_MESSAGE_EXPORT) \ + IPC::MessageT<msg_name##_Meta>; -#define IPC_EMPTY_CONTROL_IMPL(msg_class, in_cnt, out_cnt, in_list, out_list) -#define IPC_EMPTY_ROUTED_IMPL(msg_class, in_cnt, out_cnt, in_list, out_list) - -#define IPC_ASYNC_CONTROL_IMPL(msg_class, in_cnt, out_cnt, in_list, out_list) \ - msg_class::msg_class(IPC_TYPE_IN_##in_cnt in_list) : \ - IPC::Message(MSG_ROUTING_CONTROL, ID, PRIORITY_NORMAL) { \ - Schema::Write(this, IPC_NAME_IN_##in_cnt in_list); \ - } \ - msg_class::~msg_class() {} \ - bool msg_class::Read(const Message* msg, Schema::Param* p) { \ - return Schema::Read(msg, p); \ - } - -#define IPC_ASYNC_ROUTED_IMPL(msg_class, in_cnt, out_cnt, in_list, out_list) \ - msg_class::msg_class(int32_t routing_id IPC_COMMA_##in_cnt \ - IPC_TYPE_IN_##in_cnt in_list) : \ - IPC::Message(routing_id, ID, PRIORITY_NORMAL) { \ - Schema::Write(this, IPC_NAME_IN_##in_cnt in_list); \ - } \ - msg_class::~msg_class() {} \ - bool msg_class::Read(const Message* msg, Schema::Param* p) { \ - return Schema::Read(msg, p); \ - } - -#define IPC_SYNC_CONTROL_IMPL(msg_class, in_cnt, out_cnt, in_list, out_list) \ - msg_class::msg_class(IPC_TYPE_IN_##in_cnt in_list \ - IPC_COMMA_AND_##in_cnt(IPC_COMMA_##out_cnt) \ - IPC_TYPE_OUT_##out_cnt out_list) : \ - IPC::SyncMessage(MSG_ROUTING_CONTROL, ID, PRIORITY_NORMAL, \ - new IPC::ParamDeserializer<Schema::ReplyParam>( \ - IPC_NAME_OUT_##out_cnt out_list)) { \ - Schema::Write(this, IPC_NAME_IN_##in_cnt in_list); \ - } \ - msg_class::~msg_class() {} \ - bool msg_class::ReadSendParam(const Message* msg, Schema::SendParam* p) { \ - return Schema::ReadSendParam(msg, p); \ - } \ - bool msg_class::ReadReplyParam( \ - const Message* msg, \ - base::TupleTypes<ReplyParam>::ValueTuple* p) { \ - return Schema::ReadReplyParam(msg, p); \ - } - -#define IPC_SYNC_ROUTED_IMPL(msg_class, in_cnt, out_cnt, in_list, out_list) \ - msg_class::msg_class(int32_t routing_id \ - IPC_COMMA_OR_##in_cnt(IPC_COMMA_##out_cnt) \ - IPC_TYPE_IN_##in_cnt in_list \ - IPC_COMMA_AND_##in_cnt(IPC_COMMA_##out_cnt) \ - IPC_TYPE_OUT_##out_cnt out_list) : \ - IPC::SyncMessage(routing_id, ID, PRIORITY_NORMAL, \ - new IPC::ParamDeserializer<Schema::ReplyParam>( \ - IPC_NAME_OUT_##out_cnt out_list)) { \ - Schema::Write(this, IPC_NAME_IN_##in_cnt in_list); \ - } \ - msg_class::~msg_class() {} \ - bool msg_class::ReadSendParam(const Message* msg, Schema::SendParam* p) { \ - return Schema::ReadSendParam(msg, p); \ - } \ - bool msg_class::ReadReplyParam( \ - const Message* msg, \ - base::TupleTypes<ReplyParam>::ValueTuple* p) { \ - return Schema::ReadReplyParam(msg, p); \ - } - -#define IPC_EMPTY_MESSAGE_LOG(msg_class) \ - void msg_class::Log(std::string* name, \ - const Message* msg, \ - std::string* l) { \ - if (name) \ - *name = #msg_class; \ - } - -#define IPC_ASYNC_MESSAGE_LOG(msg_class) \ - void msg_class::Log(std::string* name, \ - const Message* msg, \ - std::string* l) { \ - if (name) \ - *name = #msg_class; \ - if (!msg || !l) \ - return; \ - Schema::Param p; \ - if (Schema::Read(msg, &p)) \ - IPC::LogParam(p, l); \ - } - -#define IPC_SYNC_MESSAGE_LOG(msg_class) \ - void msg_class::Log(std::string* name, \ - const Message* msg, \ - std::string* l) { \ - if (name) \ - *name = #msg_class; \ - if (!msg || !l) \ - return; \ - if (msg->is_sync()) { \ - base::TupleTypes<Schema::SendParam>::ValueTuple p; \ - if (Schema::ReadSendParam(msg, &p)) \ - IPC::LogParam(p, l); \ - AddOutputParamsToLog(msg, l); \ - } else { \ - base::TupleTypes<Schema::ReplyParam>::ValueTuple p; \ - if (Schema::ReadReplyParam(msg, &p)) \ - IPC::LogParam(p, l); \ - } \ - } +// MSVC has an intentionally non-compliant "feature" that results in LNK2005 +// ("symbol already defined") errors if we provide an out-of-line definition +// for kKind. Microsoft's official response is to test for _MSC_EXTENSIONS: +// https://connect.microsoft.com/VisualStudio/feedback/details/786583/ +#if defined(_MSC_EXTENSIONS) +#define IPC_MESSAGE_DEFINE_KIND(msg_name) +#else +#define IPC_MESSAGE_DEFINE_KIND(msg_name) \ + const IPC::MessageKind msg_name##_Meta::kKind; +#endif #elif defined(IPC_MESSAGE_MACROS_LOG_ENABLED) @@ -795,95 +291,22 @@ #endif // "Log table" inclusion produces extra logging registration code. -#define IPC_MESSAGE_EXTRA(sync, kind, msg_class, \ - in_cnt, out_cnt, in_list, out_list) \ - class LoggerRegisterHelper##msg_class { \ - public: \ - LoggerRegisterHelper##msg_class() { \ - const uint32_t msg_id = static_cast<uint32_t>(msg_class::ID); \ - IPC_LOG_TABLE_ADD_ENTRY(msg_id, msg_class::Log); \ - } \ - }; \ - LoggerRegisterHelper##msg_class g_LoggerRegisterHelper##msg_class; +#define IPC_MESSAGE_EXTRA(msg_name) \ + class LoggerRegisterHelper##msg_name { \ + public: \ + LoggerRegisterHelper##msg_name() { \ + const uint32_t msg_id = static_cast<uint32_t>(msg_name::ID); \ + IPC_LOG_TABLE_ADD_ENTRY(msg_id, msg_name::Log); \ + } \ + }; \ + LoggerRegisterHelper##msg_name g_LoggerRegisterHelper##msg_name; #else // Normal inclusion produces nothing extra. -#define IPC_MESSAGE_EXTRA(sync, kind, msg_class, \ - in_cnt, out_cnt, in_list, out_list) +#define IPC_MESSAGE_EXTRA(msg_name) -#endif // defined(IPC_MESSAGE_IMPL) - -// Handle variable sized argument lists. These are usually invoked by token -// pasting against the argument counts. -#define IPC_TYPE_IN_0() -#define IPC_TYPE_IN_1(t1) const t1& arg1 -#define IPC_TYPE_IN_2(t1, t2) const t1& arg1, const t2& arg2 -#define IPC_TYPE_IN_3(t1, t2, t3) const t1& arg1, const t2& arg2, const t3& arg3 -#define IPC_TYPE_IN_4(t1, t2, t3, t4) const t1& arg1, const t2& arg2, const t3& arg3, const t4& arg4 -#define IPC_TYPE_IN_5(t1, t2, t3, t4, t5) const t1& arg1, const t2& arg2, const t3& arg3, const t4& arg4, const t5& arg5 - -#define IPC_TYPE_OUT_0() -#define IPC_TYPE_OUT_1(t1) t1* arg6 -#define IPC_TYPE_OUT_2(t1, t2) t1* arg6, t2* arg7 -#define IPC_TYPE_OUT_3(t1, t2, t3) t1* arg6, t2* arg7, t3* arg8 -#define IPC_TYPE_OUT_4(t1, t2, t3, t4) t1* arg6, t2* arg7, t3* arg8, \ - t4* arg9 - -#define IPC_TUPLE_IN_0() base::Tuple<> -#define IPC_TUPLE_IN_1(t1) base::Tuple<t1> -#define IPC_TUPLE_IN_2(t1, t2) base::Tuple<t1, t2> -#define IPC_TUPLE_IN_3(t1, t2, t3) base::Tuple<t1, t2, t3> -#define IPC_TUPLE_IN_4(t1, t2, t3, t4) base::Tuple<t1, t2, t3, t4> -#define IPC_TUPLE_IN_5(t1, t2, t3, t4, t5) base::Tuple<t1, t2, t3, t4, t5> - -#define IPC_TUPLE_OUT_0() base::Tuple<> -#define IPC_TUPLE_OUT_1(t1) base::Tuple<t1&> -#define IPC_TUPLE_OUT_2(t1, t2) base::Tuple<t1&, t2&> -#define IPC_TUPLE_OUT_3(t1, t2, t3) base::Tuple<t1&, t2&, t3&> -#define IPC_TUPLE_OUT_4(t1, t2, t3, t4) base::Tuple<t1&, t2&, t3&, t4&> - -#define IPC_NAME_IN_0() base::MakeTuple() -#define IPC_NAME_IN_1(t1) base::MakeRefTuple(arg1) -#define IPC_NAME_IN_2(t1, t2) base::MakeRefTuple(arg1, arg2) -#define IPC_NAME_IN_3(t1, t2, t3) base::MakeRefTuple(arg1, arg2, arg3) -#define IPC_NAME_IN_4(t1, t2, t3, t4) base::MakeRefTuple(arg1, arg2, \ - arg3, arg4) -#define IPC_NAME_IN_5(t1, t2, t3, t4, t5) base::MakeRefTuple(arg1, arg2, \ - arg3, arg4, arg5) - -#define IPC_NAME_OUT_0() base::MakeTuple() -#define IPC_NAME_OUT_1(t1) base::MakeRefTuple(*arg6) -#define IPC_NAME_OUT_2(t1, t2) base::MakeRefTuple(*arg6, *arg7) -#define IPC_NAME_OUT_3(t1, t2, t3) base::MakeRefTuple(*arg6, *arg7, \ - *arg8) -#define IPC_NAME_OUT_4(t1, t2, t3, t4) base::MakeRefTuple(*arg6, *arg7, \ - *arg8, *arg9) - -// There are places where the syntax requires a comma if there are input args, -// if there are input args and output args, or if there are input args or -// output args. These macros allow generation of the comma as needed; invoke -// by token pasting against the argument counts. -#define IPC_COMMA_0 -#define IPC_COMMA_1 , -#define IPC_COMMA_2 , -#define IPC_COMMA_3 , -#define IPC_COMMA_4 , -#define IPC_COMMA_5 , - -#define IPC_COMMA_AND_0(x) -#define IPC_COMMA_AND_1(x) x -#define IPC_COMMA_AND_2(x) x -#define IPC_COMMA_AND_3(x) x -#define IPC_COMMA_AND_4(x) x -#define IPC_COMMA_AND_5(x) x - -#define IPC_COMMA_OR_0(x) x -#define IPC_COMMA_OR_1(x) , -#define IPC_COMMA_OR_2(x) , -#define IPC_COMMA_OR_3(x) , -#define IPC_COMMA_OR_4(x) , -#define IPC_COMMA_OR_5(x) , +#endif // defined(IPC_MESSAGE_IMPL) // Message IDs // Note: we currently use __LINE__ to give unique IDs to messages within @@ -982,6 +405,144 @@ #define IPC_MESSAGE_CLASS(message) \ IPC_MESSAGE_ID_CLASS(message.type()) +// Deprecated legacy macro names. +// TODO(mdempsky): Replace uses with generic names. + +#define IPC_MESSAGE_CONTROL0(msg) IPC_MESSAGE_CONTROL(msg) +#define IPC_MESSAGE_CONTROL1(msg, a) IPC_MESSAGE_CONTROL(msg, a) +#define IPC_MESSAGE_CONTROL2(msg, a, b) IPC_MESSAGE_CONTROL(msg, a, b) +#define IPC_MESSAGE_CONTROL3(msg, a, b, c) IPC_MESSAGE_CONTROL(msg, a, b, c) +#define IPC_MESSAGE_CONTROL4(msg, a, b, c, d) \ + IPC_MESSAGE_CONTROL(msg, a, b, c, d) +#define IPC_MESSAGE_CONTROL5(msg, a, b, c, d, e) \ + IPC_MESSAGE_CONTROL(msg, a, b, c, d, e) + +#define IPC_MESSAGE_ROUTED0(msg) IPC_MESSAGE_ROUTED(msg) +#define IPC_MESSAGE_ROUTED1(msg, a) IPC_MESSAGE_ROUTED(msg, a) +#define IPC_MESSAGE_ROUTED2(msg, a, b) IPC_MESSAGE_ROUTED(msg, a, b) +#define IPC_MESSAGE_ROUTED3(msg, a, b, c) IPC_MESSAGE_ROUTED(msg, a, b, c) +#define IPC_MESSAGE_ROUTED4(msg, a, b, c, d) IPC_MESSAGE_ROUTED(msg, a, b, c, d) +#define IPC_MESSAGE_ROUTED5(msg, a, b, c, d, e) \ + IPC_MESSAGE_ROUTED(msg, a, b, c, d, e) + +#define IPC_SYNC_MESSAGE_CONTROL0_0(msg) IPC_SYNC_MESSAGE_CONTROL(msg, (), ()) +#define IPC_SYNC_MESSAGE_CONTROL0_1(msg, a) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (), (a)) +#define IPC_SYNC_MESSAGE_CONTROL0_2(msg, a, b) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (), (a, b)) +#define IPC_SYNC_MESSAGE_CONTROL0_3(msg, a, b, c) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (), (a, b, c)) +#define IPC_SYNC_MESSAGE_CONTROL0_4(msg, a, b, c, d) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (), (a, b, c, d)) +#define IPC_SYNC_MESSAGE_CONTROL1_0(msg, a) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a), ()) +#define IPC_SYNC_MESSAGE_CONTROL1_1(msg, a, b) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a), (b)) +#define IPC_SYNC_MESSAGE_CONTROL1_2(msg, a, b, c) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a), (b, c)) +#define IPC_SYNC_MESSAGE_CONTROL1_3(msg, a, b, c, d) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a), (b, c, d)) +#define IPC_SYNC_MESSAGE_CONTROL1_4(msg, a, b, c, d, e) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a), (b, c, d, e)) +#define IPC_SYNC_MESSAGE_CONTROL2_0(msg, a, b) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a, b), ()) +#define IPC_SYNC_MESSAGE_CONTROL2_1(msg, a, b, c) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a, b), (c)) +#define IPC_SYNC_MESSAGE_CONTROL2_2(msg, a, b, c, d) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a, b), (c, d)) +#define IPC_SYNC_MESSAGE_CONTROL2_3(msg, a, b, c, d, e) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a, b), (c, d, e)) +#define IPC_SYNC_MESSAGE_CONTROL2_4(msg, a, b, c, d, e, f) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a, b), (c, d, e, f)) +#define IPC_SYNC_MESSAGE_CONTROL3_0(msg, a, b, c) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a, b, c), ()) +#define IPC_SYNC_MESSAGE_CONTROL3_1(msg, a, b, c, d) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a, b, c), (d)) +#define IPC_SYNC_MESSAGE_CONTROL3_2(msg, a, b, c, d, e) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a, b, c), (d, e)) +#define IPC_SYNC_MESSAGE_CONTROL3_3(msg, a, b, c, d, e, f) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a, b, c), (d, e, f)) +#define IPC_SYNC_MESSAGE_CONTROL3_4(msg, a, b, c, d, e, f, g) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a, b, c), (d, e, f, g)) +#define IPC_SYNC_MESSAGE_CONTROL4_0(msg, a, b, c, d) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a, b, c, d), ()) +#define IPC_SYNC_MESSAGE_CONTROL4_1(msg, a, b, c, d, e) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a, b, c, d), (e)) +#define IPC_SYNC_MESSAGE_CONTROL4_2(msg, a, b, c, d, e, f) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a, b, c, d), (e, f)) +#define IPC_SYNC_MESSAGE_CONTROL4_3(msg, a, b, c, d, e, f, g) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a, b, c, d), (e, f, g)) +#define IPC_SYNC_MESSAGE_CONTROL4_4(msg, a, b, c, d, e, f, g, h) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a, b, c, d), (e, f, g, h)) +#define IPC_SYNC_MESSAGE_CONTROL5_0(msg, a, b, c, d, e) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a, b, c, d, e), ()) +#define IPC_SYNC_MESSAGE_CONTROL5_1(msg, a, b, c, d, e, f) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a, b, c, d, e), (f)) +#define IPC_SYNC_MESSAGE_CONTROL5_2(msg, a, b, c, d, e, f, g) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a, b, c, d, e), (f, g)) +#define IPC_SYNC_MESSAGE_CONTROL5_3(msg, a, b, c, d, e, f, g, h) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a, b, c, d, e), (f, g, h)) +#define IPC_SYNC_MESSAGE_CONTROL5_4(msg, a, b, c, d, e, f, g, h, i) \ + IPC_SYNC_MESSAGE_CONTROL(msg, (a, b, c, d, e), (f, g, h, i)) + +#define IPC_SYNC_MESSAGE_ROUTED0_0(msg) IPC_SYNC_MESSAGE_ROUTED(msg, (), ()) +#define IPC_SYNC_MESSAGE_ROUTED0_1(msg, a) IPC_SYNC_MESSAGE_ROUTED(msg, (), (a)) +#define IPC_SYNC_MESSAGE_ROUTED0_2(msg, a, b) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (), (a, b)) +#define IPC_SYNC_MESSAGE_ROUTED0_3(msg, a, b, c) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (), (a, b, c)) +#define IPC_SYNC_MESSAGE_ROUTED0_4(msg, a, b, c, d) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (), (a, b, c, d)) +#define IPC_SYNC_MESSAGE_ROUTED1_0(msg, a) IPC_SYNC_MESSAGE_ROUTED(msg, (a), ()) +#define IPC_SYNC_MESSAGE_ROUTED1_1(msg, a, b) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a), (b)) +#define IPC_SYNC_MESSAGE_ROUTED1_2(msg, a, b, c) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a), (b, c)) +#define IPC_SYNC_MESSAGE_ROUTED1_3(msg, a, b, c, d) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a), (b, c, d)) +#define IPC_SYNC_MESSAGE_ROUTED1_4(msg, a, b, c, d, e) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a), (b, c, d, e)) +#define IPC_SYNC_MESSAGE_ROUTED2_0(msg, a, b) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a, b), ()) +#define IPC_SYNC_MESSAGE_ROUTED2_1(msg, a, b, c) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a, b), (c)) +#define IPC_SYNC_MESSAGE_ROUTED2_2(msg, a, b, c, d) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a, b), (c, d)) +#define IPC_SYNC_MESSAGE_ROUTED2_3(msg, a, b, c, d, e) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a, b), (c, d, e)) +#define IPC_SYNC_MESSAGE_ROUTED2_4(msg, a, b, c, d, e, f) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a, b), (c, d, e, f)) +#define IPC_SYNC_MESSAGE_ROUTED3_0(msg, a, b, c) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a, b, c), ()) +#define IPC_SYNC_MESSAGE_ROUTED3_1(msg, a, b, c, d) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a, b, c), (d)) +#define IPC_SYNC_MESSAGE_ROUTED3_2(msg, a, b, c, d, e) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a, b, c), (d, e)) +#define IPC_SYNC_MESSAGE_ROUTED3_3(msg, a, b, c, d, e, f) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a, b, c), (d, e, f)) +#define IPC_SYNC_MESSAGE_ROUTED3_4(msg, a, b, c, d, e, f, g) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a, b, c), (d, e, f, g)) +#define IPC_SYNC_MESSAGE_ROUTED4_0(msg, a, b, c, d) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a, b, c, d), ()) +#define IPC_SYNC_MESSAGE_ROUTED4_1(msg, a, b, c, d, e) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a, b, c, d), (e)) +#define IPC_SYNC_MESSAGE_ROUTED4_2(msg, a, b, c, d, e, f) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a, b, c, d), (e, f)) +#define IPC_SYNC_MESSAGE_ROUTED4_3(msg, a, b, c, d, e, f, g) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a, b, c, d), (e, f, g)) +#define IPC_SYNC_MESSAGE_ROUTED4_4(msg, a, b, c, d, e, f, g, h) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a, b, c, d), (e, f, g, h)) +#define IPC_SYNC_MESSAGE_ROUTED5_0(msg, a, b, c, d, e) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a, b, c, d, e), ()) +#define IPC_SYNC_MESSAGE_ROUTED5_1(msg, a, b, c, d, e, f) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a, b, c, d, e), (f)) +#define IPC_SYNC_MESSAGE_ROUTED5_2(msg, a, b, c, d, e, f, g) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a, b, c, d, e), (f, g)) +#define IPC_SYNC_MESSAGE_ROUTED5_3(msg, a, b, c, d, e, f, g, h) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a, b, c, d, e), (f, g, h)) +#define IPC_SYNC_MESSAGE_ROUTED5_4(msg, a, b, c, d, e, f, g, h, i) \ + IPC_SYNC_MESSAGE_ROUTED(msg, (a, b, c, d, e), (f, g, h, i)) + #endif // IPC_IPC_MESSAGE_MACROS_H_ // Clean up IPC_MESSAGE_START in this unguarded section so that the
diff --git a/ipc/ipc_message_null_macros.h b/ipc/ipc_message_null_macros.h index 5a1ff4f..6eab784 100644 --- a/ipc/ipc_message_null_macros.h +++ b/ipc/ipc_message_null_macros.h
@@ -24,6 +24,4 @@ #define IPC_STRUCT_TRAITS_PARENT(type) #define IPC_STRUCT_TRAITS_END() #define IPC_ENUM_TRAITS_VALIDATE(enum_name, validation_expression) -#define IPC_MESSAGE_DECL(sync, kind, msg_class, \ - in_cnt, out_cnt, in_list, out_list) - +#define IPC_MESSAGE_DECL(...)
diff --git a/ipc/ipc_message_templates.h b/ipc/ipc_message_templates.h new file mode 100644 index 0000000..17dfc1b --- /dev/null +++ b/ipc/ipc_message_templates.h
@@ -0,0 +1,210 @@ +// Copyright 2015 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 IPC_IPC_MESSAGE_TEMPLATES_H_ +#define IPC_IPC_MESSAGE_TEMPLATES_H_ + +#include <stdint.h> + +#include <type_traits> + +#include "base/logging.h" +#include "base/tuple.h" +#include "build/build_config.h" +#include "ipc/ipc_message.h" +#include "ipc/ipc_message_utils.h" + +namespace IPC { + +// This function is for all the async IPCs that don't pass an extra parameter +// using IPC_BEGIN_MESSAGE_MAP_WITH_PARAM. +template <typename ObjT, typename Method, typename P, typename Tuple> +void DispatchToMethod(ObjT* obj, Method method, P*, const Tuple& tuple) { + base::DispatchToMethod(obj, method, tuple); +} + +template <typename ObjT, + typename Method, + typename P, + typename Tuple, + size_t... Ns> +void DispatchToMethodImpl(ObjT* obj, + Method method, + P* parameter, + const Tuple& tuple, + base::IndexSequence<Ns...>) { + // TODO(mdempsky): Apply UnwrapTraits like base::DispatchToMethod? + (obj->*method)(parameter, base::get<Ns>(tuple)...); +} + +// The following function is for async IPCs which have a dispatcher with an +// extra parameter specified using IPC_BEGIN_MESSAGE_MAP_WITH_PARAM. +template <typename ObjT, typename P, typename... Args, typename... Ts> +typename std::enable_if<sizeof...(Args) == sizeof...(Ts)>::type +DispatchToMethod(ObjT* obj, + void (ObjT::*method)(P*, Args...), + P* parameter, + const base::Tuple<Ts...>& tuple) { + DispatchToMethodImpl(obj, method, parameter, tuple, + base::MakeIndexSequence<sizeof...(Ts)>()); +} + +enum class MessageKind { + CONTROL, + ROUTED, +}; + +// Routing is a helper struct so MessageT's private common constructor has a +// different type signature than the public "int32_t routing_id" one. +struct Routing { + explicit Routing(int32_t id) : id(id) {} + int32_t id; +}; + +// We want to restrict MessageT's constructors so that a routing_id is always +// provided for ROUTED messages and never provided for CONTROL messages, so +// use the SFINAE technique from N4387's "Implementation Hint" section. +#if defined(COMPILER_MSVC) +// MSVC 2013 doesn't support default arguments for template member functions +// of templated classes, so there we have to rely on the DCHECKs instead. +// TODO(mdempsky): Reevaluate once MSVC 2015. +#define IPC_MESSAGET_SFINAE(x) +#else +#define IPC_MESSAGET_SFINAE(x) \ + template <bool X = (x), typename std::enable_if<X, bool>::type = false> +#endif + +// MessageT is the common template used for all user-defined message types. +// It's intended to be used via the macros defined in ipc_message_macros.h. +template <typename Meta, + typename InTuple = typename Meta::InTuple, + typename OutTuple = typename Meta::OutTuple> +class MessageT; + +// Asynchronous message partial specialization. +template <typename Meta, typename... Ins> +class MessageT<Meta, base::Tuple<Ins...>, void> : public Message { + public: + using Param = base::Tuple<Ins...>; + enum { ID = Meta::ID }; + + // TODO(mdempsky): Remove. Uses of MyMessage::Schema::Param can be replaced + // with just MyMessage::Param. + using Schema = MessageT; + + IPC_MESSAGET_SFINAE(Meta::kKind == MessageKind::CONTROL) + MessageT(const Ins&... ins) : MessageT(Routing(MSG_ROUTING_CONTROL), ins...) { + DCHECK(Meta::kKind == MessageKind::CONTROL) << Meta::kName; + } + + IPC_MESSAGET_SFINAE(Meta::kKind == MessageKind::ROUTED) + MessageT(int32_t routing_id, const Ins&... ins) + : MessageT(Routing(routing_id), ins...) { + DCHECK(Meta::kKind == MessageKind::ROUTED) << Meta::kName; + } + + static bool Read(const Message* msg, Param* p); + static void Log(std::string* name, const Message* msg, std::string* l); + + template <class T, class S, class P, class Method> + static bool Dispatch(const Message* msg, + T* obj, + S* sender, + P* parameter, + Method func) { + Param p; + if (Read(msg, &p)) { + DispatchToMethod(obj, func, parameter, p); + return true; + } + return false; + } + + private: + MessageT(Routing routing, const Ins&... ins); +}; + +// Synchronous message partial specialization. +template <typename Meta, typename... Ins, typename... Outs> +class MessageT<Meta, base::Tuple<Ins...>, base::Tuple<Outs...>> + : public SyncMessage { + public: + using SendParam = base::Tuple<Ins...>; + using ReplyParam = base::Tuple<Outs...>; + enum { ID = Meta::ID }; + + // TODO(mdempsky): Remove. Uses of MyMessage::Schema::{Send,Reply}Param can + // be replaced with just MyMessage::{Send,Reply}Param. + using Schema = MessageT; + + IPC_MESSAGET_SFINAE(Meta::kKind == MessageKind::CONTROL) + MessageT(const Ins&... ins, Outs*... outs) + : MessageT(Routing(MSG_ROUTING_CONTROL), ins..., outs...) { + DCHECK(Meta::kKind == MessageKind::CONTROL) << Meta::kName; + } + + IPC_MESSAGET_SFINAE(Meta::kKind == MessageKind::ROUTED) + MessageT(int32_t routing_id, const Ins&... ins, Outs*... outs) + : MessageT(Routing(routing_id), ins..., outs...) { + DCHECK(Meta::kKind == MessageKind::ROUTED) << Meta::kName; + } + + static bool ReadSendParam(const Message* msg, SendParam* p); + static bool ReadReplyParam(const Message* msg, ReplyParam* p); + static void WriteReplyParams(Message* reply, const Outs&... outs); + static void Log(std::string* name, const Message* msg, std::string* l); + + template <class T, class S, class P, class Method> + static bool Dispatch(const Message* msg, + T* obj, + S* sender, + P* parameter, + Method func) { + SendParam send_params; + bool ok = ReadSendParam(msg, &send_params); + Message* reply = SyncMessage::GenerateReply(msg); + if (ok) { + ReplyParam reply_params; + base::DispatchToMethod(obj, func, send_params, &reply_params); + WriteParam(reply, reply_params); + LogReplyParamsToMessage(reply_params, msg); + } else { + NOTREACHED() << "Error deserializing message " << msg->type(); + reply->set_reply_error(); + } + sender->Send(reply); + return ok; + } + + template <class T, class P, class Method> + static bool DispatchDelayReply(const Message* msg, + T* obj, + P* parameter, + Method func) { + SendParam send_params; + bool ok = ReadSendParam(msg, &send_params); + Message* reply = SyncMessage::GenerateReply(msg); + if (ok) { + base::Tuple<Message&> t = base::MakeRefTuple(*reply); + ConnectMessageAndReply(msg, reply); + base::DispatchToMethod(obj, func, send_params, &t); + } else { + NOTREACHED() << "Error deserializing message " << msg->type(); + reply->set_reply_error(); + obj->Send(reply); + } + return ok; + } + + private: + MessageT(Routing routing, const Ins&... ins, Outs*... outs); +}; + +} // namespace IPC + +#if defined(IPC_MESSAGE_IMPL) +#include "ipc/ipc_message_templates_impl.h" +#endif + +#endif // IPC_IPC_MESSAGE_TEMPLATES_H_
diff --git a/ipc/ipc_message_templates_impl.h b/ipc/ipc_message_templates_impl.h new file mode 100644 index 0000000..bfcdad0 --- /dev/null +++ b/ipc/ipc_message_templates_impl.h
@@ -0,0 +1,110 @@ +// Copyright 2015 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 IPC_IPC_MESSAGE_TEMPLATES_IMPL_H_ +#define IPC_IPC_MESSAGE_TEMPLATES_IMPL_H_ + +namespace IPC { + +template <typename... Ts> +class ParamDeserializer : public MessageReplyDeserializer { + public: + explicit ParamDeserializer(const base::Tuple<Ts&...>& out) : out_(out) {} + + bool SerializeOutputParameters(const IPC::Message& msg, + base::PickleIterator iter) override { + return ReadParam(&msg, &iter, &out_); + } + + base::Tuple<Ts&...> out_; +}; + +template <typename Meta, typename... Ins> +MessageT<Meta, base::Tuple<Ins...>, void>::MessageT(Routing routing, + const Ins&... ins) + : Message(routing.id, ID, PRIORITY_NORMAL) { + WriteParam(this, base::MakeRefTuple(ins...)); +} + +template <typename Meta, typename... Ins> +bool MessageT<Meta, base::Tuple<Ins...>, void>::Read(const Message* msg, + Param* p) { + base::PickleIterator iter(*msg); + return ReadParam(msg, &iter, p); +} + +template <typename Meta, typename... Ins> +void MessageT<Meta, base::Tuple<Ins...>, void>::Log(std::string* name, + const Message* msg, + std::string* l) { + if (name) + *name = Meta::kName; + if (!msg || !l) + return; + Param p; + if (Read(msg, &p)) + LogParam(p, l); +} + +template <typename Meta, typename... Ins, typename... Outs> +MessageT<Meta, base::Tuple<Ins...>, base::Tuple<Outs...>>::MessageT( + Routing routing, + const Ins&... ins, + Outs*... outs) + : SyncMessage( + routing.id, + ID, + PRIORITY_NORMAL, + new ParamDeserializer<Outs...>(base::MakeRefTuple(*outs...))) { + WriteParam(this, base::MakeRefTuple(ins...)); +} + +template <typename Meta, typename... Ins, typename... Outs> +bool MessageT<Meta, base::Tuple<Ins...>, base::Tuple<Outs...>>::ReadSendParam( + const Message* msg, + SendParam* p) { + base::PickleIterator iter = SyncMessage::GetDataIterator(msg); + return ReadParam(msg, &iter, p); +} + +template <typename Meta, typename... Ins, typename... Outs> +bool MessageT<Meta, base::Tuple<Ins...>, base::Tuple<Outs...>>::ReadReplyParam( + const Message* msg, + ReplyParam* p) { + base::PickleIterator iter = SyncMessage::GetDataIterator(msg); + return ReadParam(msg, &iter, p); +} + +template <typename Meta, typename... Ins, typename... Outs> +void MessageT<Meta, + base::Tuple<Ins...>, + base::Tuple<Outs...>>::WriteReplyParams(Message* reply, + const Outs&... outs) { + WriteParam(reply, base::MakeRefTuple(outs...)); +} + +template <typename Meta, typename... Ins, typename... Outs> +void MessageT<Meta, base::Tuple<Ins...>, base::Tuple<Outs...>>::Log( + std::string* name, + const Message* msg, + std::string* l) { + if (name) + *name = Meta::kName; + if (!msg || !l) + return; + if (msg->is_sync()) { + SendParam p; + if (ReadSendParam(msg, &p)) + LogParam(p, l); + AddOutputParamsToLog(msg, l); + } else { + ReplyParam p; + if (ReadReplyParam(msg, &p)) + LogParam(p, l); + } +} + +} // namespace IPC + +#endif // IPC_IPC_MESSAGE_TEMPLATES_IMPL_H_
diff --git a/ipc/ipc_message_utils.h b/ipc/ipc_message_utils.h index d8b66074..9ae39c2 100644 --- a/ipc/ipc_message_utils.h +++ b/ipc/ipc_message_utils.h
@@ -31,29 +31,6 @@ #include "ipc/ipc_param_traits.h" #include "ipc/ipc_sync_message.h" -#if defined(COMPILER_GCC) -// GCC "helpfully" tries to inline template methods in release mode. Except we -// want the majority of the template junk being expanded once in the -// implementation file (and only provide the definitions in -// ipc_message_utils_impl.h in those files) and exported, instead of expanded -// at every call site. Special note: GCC happily accepts the attribute before -// the method declaration, but only acts on it if it is after. -#if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100) >= 40500 -// Starting in gcc 4.5, the noinline no longer implies the concept covered by -// the introduced noclone attribute, which will create specialized versions of -// functions/methods when certain types are constant. -// www.gnu.org/software/gcc/gcc-4.5/changes.html -#define IPC_MSG_NOINLINE __attribute__((noinline, noclone)); -#else -#define IPC_MSG_NOINLINE __attribute__((noinline)); -#endif -#elif defined(COMPILER_MSVC) -// MSVC++ doesn't do this. -#define IPC_MSG_NOINLINE -#else -#error "Please add the noinline property for your new compiler here." -#endif - namespace base { class DictionaryValue; class FilePath; @@ -1051,17 +1028,6 @@ //----------------------------------------------------------------------------- // Generic message subclasses -// Used for asynchronous messages. -template <class ParamType> -class MessageSchema { - public: - typedef ParamType Param; - typedef typename base::TupleTypes<ParamType>::ParamTuple RefParam; - - static void Write(Message* msg, const RefParam& p) IPC_MSG_NOINLINE; - static bool Read(const Message* msg, Param* p) IPC_MSG_NOINLINE; -}; - // defined in ipc_logging.cc IPC_EXPORT void GenerateLogData(const std::string& channel, const Message& message, @@ -1108,79 +1074,6 @@ inline void ConnectMessageAndReply(const Message* msg, Message* reply) {} #endif -// This class assumes that its template argument is a RefTuple (a Tuple with -// reference elements). This would go into ipc_message_utils_impl.h, but it is -// also used by chrome_frame. -template <class RefTuple> -class ParamDeserializer : public MessageReplyDeserializer { - public: - explicit ParamDeserializer(const RefTuple& out) : out_(out) { } - - bool SerializeOutputParameters(const IPC::Message& msg, - base::PickleIterator iter) override { - return ReadParam(&msg, &iter, &out_); - } - - RefTuple out_; -}; - -// Used for synchronous messages. -template <class SendParamType, class ReplyParamType> -class SyncMessageSchema { - public: - typedef SendParamType SendParam; - typedef typename base::TupleTypes<SendParam>::ParamTuple RefSendParam; - typedef ReplyParamType ReplyParam; - - static void Write(Message* msg, const RefSendParam& send) IPC_MSG_NOINLINE; - static bool ReadSendParam(const Message* msg, SendParam* p) IPC_MSG_NOINLINE; - static bool ReadReplyParam( - const Message* msg, - typename base::TupleTypes<ReplyParam>::ValueTuple* p) IPC_MSG_NOINLINE; - - template<class T, class S, class Method> - static bool DispatchWithSendParams(bool ok, const SendParam& send_params, - const Message* msg, T* obj, S* sender, - Method func) { - Message* reply = SyncMessage::GenerateReply(msg); - if (ok) { - typename base::TupleTypes<ReplyParam>::ValueTuple reply_params; - base::DispatchToMethod(obj, func, send_params, &reply_params); - WriteParam(reply, reply_params); - LogReplyParamsToMessage(reply_params, msg); - } else { - NOTREACHED() << "Error deserializing message " << msg->type(); - reply->set_reply_error(); - } - sender->Send(reply); - return ok; - } - - template<class T, class Method> - static bool DispatchDelayReplyWithSendParams(bool ok, - const SendParam& send_params, - const Message* msg, T* obj, - Method func) { - Message* reply = SyncMessage::GenerateReply(msg); - if (ok) { - base::Tuple<Message&> t = base::MakeRefTuple(*reply); - ConnectMessageAndReply(msg, reply); - base::DispatchToMethod(obj, func, send_params, &t); - } else { - NOTREACHED() << "Error deserializing message " << msg->type(); - reply->set_reply_error(); - obj->Send(reply); - } - return ok; - } - - template <typename... Ts> - static void WriteReplyParams(Message* reply, Ts... args) { - ReplyParam p(args...); - WriteParam(reply, p); - } -}; - } // namespace IPC #endif // IPC_IPC_MESSAGE_UTILS_H_
diff --git a/ipc/ipc_message_utils_impl.h b/ipc/ipc_message_utils_impl.h deleted file mode 100644 index 485dca5..0000000 --- a/ipc/ipc_message_utils_impl.h +++ /dev/null
@@ -1,51 +0,0 @@ -// Copyright (c) 2012 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. -// -// This file contains templates forward declared (but not defined) in -// ipc_message_utils.h so that they are only instantiated in certain files, -// notably a few IPC unit tests. - -#ifndef IPC_IPC_MESSAGE_UTILS_IMPL_H_ -#define IPC_IPC_MESSAGE_UTILS_IMPL_H_ - -namespace IPC { - -template <class ParamType> -void MessageSchema<ParamType>::Write(Message* msg, const RefParam& p) { - WriteParam(msg, p); -} - -template <class ParamType> -bool MessageSchema<ParamType>::Read(const Message* msg, Param* p) { - base::PickleIterator iter(*msg); - if (ReadParam(msg, &iter, p)) - return true; - NOTREACHED() << "Error deserializing message " << msg->type(); - return false; -} - -template <class SendParamType, class ReplyParamType> -void SyncMessageSchema<SendParamType, ReplyParamType>::Write( - Message* msg, - const RefSendParam& send) { - WriteParam(msg, send); -} - -template <class SendParamType, class ReplyParamType> -bool SyncMessageSchema<SendParamType, ReplyParamType>::ReadSendParam( - const Message* msg, SendParam* p) { - base::PickleIterator iter = SyncMessage::GetDataIterator(msg); - return ReadParam(msg, &iter, p); -} - -template <class SendParamType, class ReplyParamType> -bool SyncMessageSchema<SendParamType, ReplyParamType>::ReadReplyParam( - const Message* msg, typename base::TupleTypes<ReplyParam>::ValueTuple* p) { - base::PickleIterator iter = SyncMessage::GetDataIterator(msg); - return ReadParam(msg, &iter, p); -} - -} // namespace IPC - -#endif // IPC_IPC_MESSAGE_UTILS_IMPL_H_
diff --git a/ipc/unix_domain_socket_util.cc b/ipc/unix_domain_socket_util.cc index bfc7399..86367998 100644 --- a/ipc/unix_domain_socket_util.cc +++ b/ipc/unix_domain_socket_util.cc
@@ -77,9 +77,7 @@ int* server_listen_fd) { DCHECK(server_listen_fd); - std::string socket_name = socket_path.value(); - base::FilePath socket_dir = socket_path.DirName(); - + const std::string socket_name = socket_path.value(); struct sockaddr_un unix_addr; size_t unix_addr_len; base::ScopedFD fd( @@ -88,6 +86,7 @@ return false; // Make sure the path we need exists. + base::FilePath socket_dir = socket_path.DirName(); if (!base::CreateDirectory(socket_dir)) { LOG(ERROR) << "Couldn't create directory: " << socket_dir.value(); return false; @@ -102,13 +101,13 @@ // Bind the socket. if (bind(fd.get(), reinterpret_cast<const sockaddr*>(&unix_addr), unix_addr_len) < 0) { - PLOG(ERROR) << "bind " << socket_path.value(); + PLOG(ERROR) << "bind " << socket_name; return false; } // Start listening on the socket. if (listen(fd.get(), SOMAXCONN) < 0) { - PLOG(ERROR) << "listen " << socket_path.value(); + PLOG(ERROR) << "listen " << socket_name; unlink(socket_name.c_str()); return false; }
diff --git a/jingle/glue/proxy_resolving_client_socket.cc b/jingle/glue/proxy_resolving_client_socket.cc index a932399..92f9e5e 100644 --- a/jingle/glue/proxy_resolving_client_socket.cc +++ b/jingle/glue/proxy_resolving_client_socket.cc
@@ -85,8 +85,6 @@ reference_params->testing_fixed_https_port; session_params.enable_spdy31 = reference_params->enable_spdy31; session_params.enable_http2 = reference_params->enable_http2; - session_params.forced_spdy_exclusions = - reference_params->forced_spdy_exclusions; session_params.parse_alternative_services = reference_params->parse_alternative_services; session_params.enable_alternative_service_with_different_host =
diff --git a/mandoline/services/core_services/core_services_application_delegate.cc b/mandoline/services/core_services/core_services_application_delegate.cc index f20b7df6..e9aee2b3 100644 --- a/mandoline/services/core_services/core_services_application_delegate.cc +++ b/mandoline/services/core_services/core_services_application_delegate.cc
@@ -25,7 +25,7 @@ namespace core_services { -// A helper class for hosting a mojo::ApplicationImpl on its own thread. +// A helper class for hosting a mojo::ShellConnection on its own thread. class ApplicationThread : public base::SimpleThread { public: ApplicationThread( @@ -33,7 +33,7 @@ core_services_application, const std::string& url, scoped_ptr<mojo::ShellClient> delegate, - mojo::InterfaceRequest<mojo::shell::mojom::Application> request, + mojo::InterfaceRequest<mojo::shell::mojom::ShellClient> request, const mojo::Callback<void()>& destruct_callback) : base::SimpleThread(url), core_services_application_(core_services_application), @@ -73,7 +73,7 @@ core_services_application_task_runner_; std::string url_; scoped_ptr<mojo::ShellClient> delegate_; - mojo::InterfaceRequest<mojo::shell::mojom::Application> request_; + mojo::InterfaceRequest<mojo::shell::mojom::ShellClient> request_; mojo::Callback<void()> destruct_callback_; DISALLOW_COPY_AND_ASSIGN(ApplicationThread); @@ -106,7 +106,7 @@ bool CoreServicesApplicationDelegate::AcceptConnection( mojo::Connection* connection) { - connection->AddService(this); + connection->AddInterface(this); return true; } @@ -124,7 +124,7 @@ } void CoreServicesApplicationDelegate::StartApplication( - mojo::InterfaceRequest<mojo::shell::mojom::Application> request, + mojo::InterfaceRequest<mojo::shell::mojom::ShellClient> request, mojo::URLResponsePtr response, const mojo::Callback<void()>& destruct_callback) { const std::string url = response->url;
diff --git a/mandoline/services/core_services/core_services_application_delegate.h b/mandoline/services/core_services/core_services_application_delegate.h index 55f53879..bb2cff1 100644 --- a/mandoline/services/core_services/core_services_application_delegate.h +++ b/mandoline/services/core_services/core_services_application_delegate.h
@@ -46,7 +46,7 @@ // Overridden from mojo::shell::mojom::ContentHandler: void StartApplication( - mojo::InterfaceRequest<mojo::shell::mojom::Application> request, + mojo::InterfaceRequest<mojo::shell::mojom::ShellClient> request, mojo::URLResponsePtr response, const mojo::Callback<void()>& destruct_callback) override;
diff --git a/mandoline/services/updater/updater_app.cc b/mandoline/services/updater/updater_app.cc index ffb9493..4db09e15 100644 --- a/mandoline/services/updater/updater_app.cc +++ b/mandoline/services/updater/updater_app.cc
@@ -27,7 +27,7 @@ } bool UpdaterApp::AcceptConnection(mojo::Connection* connection) { - connection->AddService<Updater>(this); + connection->AddInterface<Updater>(this); return true; }
diff --git a/mandoline/services/updater/updater_impl.cc b/mandoline/services/updater/updater_impl.cc index 478722b7..573bf7d 100644 --- a/mandoline/services/updater/updater_impl.cc +++ b/mandoline/services/updater/updater_impl.cc
@@ -9,7 +9,7 @@ #include "base/files/file_util.h" #include "base/path_service.h" #include "mandoline/services/updater/updater_app.h" -#include "mojo/shell/public/cpp/application_impl.h" +#include "mojo/shell/public/cpp/shell_connection.h" #include "url/gurl.h" namespace updater {
diff --git a/mandoline/services/updater/updater_impl.h b/mandoline/services/updater/updater_impl.h index b7154cd..4a7a257 100644 --- a/mandoline/services/updater/updater_impl.h +++ b/mandoline/services/updater/updater_impl.h
@@ -8,7 +8,7 @@ #include "base/macros.h" #include "mojo/public/cpp/bindings/strong_binding.h" #include "mojo/services/updater/updater.mojom.h" -#include "mojo/shell/public/cpp/application_impl.h" +#include "mojo/shell/public/cpp/shell_connection.h" namespace updater {
diff --git a/mandoline/ui/desktop_ui/browser_manager.cc b/mandoline/ui/desktop_ui/browser_manager.cc index b43b18e..391d18d 100644 --- a/mandoline/ui/desktop_ui/browser_manager.cc +++ b/mandoline/ui/desktop_ui/browser_manager.cc
@@ -71,7 +71,7 @@ } bool BrowserManager::AcceptConnection(mojo::Connection* connection) { - connection->AddService<LaunchHandler>(this); + connection->AddInterface<LaunchHandler>(this); return true; }
diff --git a/mandoline/ui/desktop_ui/browser_window.cc b/mandoline/ui/desktop_ui/browser_window.cc index 6b4f15e..92d59e7 100644 --- a/mandoline/ui/desktop_ui/browser_window.cc +++ b/mandoline/ui/desktop_ui/browser_window.cc
@@ -152,8 +152,8 @@ TRACE_EVENT0("desktop_ui", "BrowserWindow::ShowOmnibox"); if (!omnibox_.get()) { omnibox_connection_ = shell_->Connect("mojo:omnibox"); - omnibox_connection_->AddService<ViewEmbedder>(this); - omnibox_connection_->ConnectToService(&omnibox_); + omnibox_connection_->AddInterface<ViewEmbedder>(this); + omnibox_connection_->GetInterface(&omnibox_); omnibox_connection_->SetRemoteServiceProviderConnectionErrorHandler( [this]() { // This will cause the connection to be re-established the next time
diff --git a/mandoline/ui/omnibox/omnibox_application.cc b/mandoline/ui/omnibox/omnibox_application.cc index 0ee9c5b8..9a9727f2 100644 --- a/mandoline/ui/omnibox/omnibox_application.cc +++ b/mandoline/ui/omnibox/omnibox_application.cc
@@ -90,7 +90,7 @@ } bool OmniboxApplication::AcceptConnection(mojo::Connection* connection) { - connection->AddService<Omnibox>(this); + connection->AddInterface<Omnibox>(this); return true; } @@ -112,7 +112,7 @@ root_(nullptr), edit_(nullptr), binding_(this, std::move(request)) { - connection->ConnectToService(&view_embedder_); + connection->GetInterface(&view_embedder_); } OmniboxImpl::~OmniboxImpl() {}
diff --git a/mandoline/ui/phone_ui/phone_browser_application_delegate.cc b/mandoline/ui/phone_ui/phone_browser_application_delegate.cc index 4cafb3c..6a7e0ae 100644 --- a/mandoline/ui/phone_ui/phone_browser_application_delegate.cc +++ b/mandoline/ui/phone_ui/phone_browser_application_delegate.cc
@@ -54,7 +54,7 @@ bool PhoneBrowserApplicationDelegate::AcceptConnection( mojo::Connection* connection) { - connection->AddService<LaunchHandler>(this); + connection->AddInterface<LaunchHandler>(this); return true; }
diff --git a/mash/example/common/mus_views_init.h b/mash/example/common/mus_views_init.h index 43da4f4..aff5dc7 100644 --- a/mash/example/common/mus_views_init.h +++ b/mash/example/common/mus_views_init.h
@@ -13,7 +13,7 @@ #include "ui/views/views_delegate.h" namespace mojo { -class ApplicationImpl; +class ShellConnection; } namespace views { @@ -24,7 +24,7 @@ class MUSViewsInit : public views::ViewsDelegate, public mus::WindowTreeDelegate { public: - explicit MUSViewsInit(mojo::ApplicationImpl* app); + explicit MUSViewsInit(mojo::ShellConnection* app); ~MUSViewsInit() override; private: @@ -44,7 +44,7 @@ HICON GetSmallWindowIcon() const override; #endif - mojo::ApplicationImpl* app_; + mojo::ShellConnection* app_; scoped_ptr<views::AuraInit> aura_init_; mus::mojom::WindowManagerPtr window_manager_;
diff --git a/mash/example/window_type_launcher/main.cc b/mash/example/window_type_launcher/main.cc index 53d6257..289b56c9 100644 --- a/mash/example/window_type_launcher/main.cc +++ b/mash/example/window_type_launcher/main.cc
@@ -15,8 +15,8 @@ #include "build/build_config.h" #include "mash/example/window_type_launcher/window_type_launcher.h" #include "mojo/message_pump/message_pump_mojo.h" -#include "mojo/shell/public/cpp/application_impl.h" -#include "mojo/shell/public/interfaces/application.mojom.h" +#include "mojo/shell/public/cpp/shell_connection.h" +#include "mojo/shell/public/interfaces/shell_client.mojom.h" #include "mojo/shell/runner/child/runner_connection.h" #include "mojo/shell/runner/init.h" #include "third_party/mojo/src/mojo/edk/embedder/embedder.h" @@ -65,13 +65,13 @@ io_thread.task_runner().get(), mojo::embedder::ScopedPlatformHandle()); - mojo::ApplicationRequest application_request; + mojo::ShellClientRequest request; scoped_ptr<mojo::shell::RunnerConnection> connection( mojo::shell::RunnerConnection::ConnectToRunner( - &application_request, mojo::ScopedMessagePipeHandle())); + &request, mojo::ScopedMessagePipeHandle())); base::MessageLoop loop(mojo::common::MessagePumpMojo::Create()); WindowTypeLauncher delegate; - mojo::ApplicationImpl impl(&delegate, std::move(application_request)); + mojo::ShellConnection impl(&delegate, std::move(request)); loop.Run(); mojo::embedder::ShutdownIPCSupport();
diff --git a/mash/shell/shell_application_delegate.cc b/mash/shell/shell_application_delegate.cc index 68c01fd..032ad13 100644 --- a/mash/shell/shell_application_delegate.cc +++ b/mash/shell/shell_application_delegate.cc
@@ -28,7 +28,7 @@ } bool ShellApplicationDelegate::AcceptConnection(mojo::Connection* connection) { - connection->AddService<mash::shell::mojom::Shell>(this); + connection->AddInterface<mash::shell::mojom::Shell>(this); return true; }
diff --git a/mash/wm/window_manager_application.cc b/mash/wm/window_manager_application.cc index 5a0a5ab..704811d 100644 --- a/mash/wm/window_manager_application.cc +++ b/mash/wm/window_manager_application.cc
@@ -121,8 +121,8 @@ } bool WindowManagerApplication::AcceptConnection(mojo::Connection* connection) { - connection->AddService<mash::wm::mojom::UserWindowController>(this); - connection->AddService<mus::mojom::AcceleratorRegistrar>(this); + connection->AddInterface<mash::wm::mojom::UserWindowController>(this); + connection->AddInterface<mus::mojom::AcceleratorRegistrar>(this); return true; }
diff --git a/media/audio/audio_manager.cc b/media/audio/audio_manager.cc index 5074bbfa..5d5f3b3a 100644 --- a/media/audio/audio_manager.cc +++ b/media/audio/audio_manager.cc
@@ -340,7 +340,12 @@ // static std::string AudioManager::GetDefaultDeviceName() { +#if !defined(OS_IOS) return GetLocalizedStringUTF8(DEFAULT_AUDIO_DEVICE_NAME); +#else + NOTREACHED(); + return ""; +#endif } // static
diff --git a/media/base/android/java/src/org/chromium/media/VideoCaptureAndroid.java b/media/base/android/java/src/org/chromium/media/VideoCaptureAndroid.java index d45e6736..35ec09f 100644 --- a/media/base/android/java/src/org/chromium/media/VideoCaptureAndroid.java +++ b/media/base/android/java/src/org/chromium/media/VideoCaptureAndroid.java
@@ -28,6 +28,10 @@ private static final String[] COLORSPACE_BUGGY_DEVICE_LIST = { "SAMSUNG-SGH-I747", "ODROID-U2", + // See https://crbug.com/577435 for more info. + "XT1092", + "XT1095", + "XT1096", }; static int getImageFormat() {
diff --git a/media/base/container_names.cc b/media/base/container_names.cc index 8bcb3c0..6a95d92 100644 --- a/media/base/container_names.cc +++ b/media/base/container_names.cc
@@ -11,6 +11,7 @@ #include "base/logging.h" #include "base/macros.h" +#include "base/numerics/safe_conversions.h" #include "media/base/bit_reader.h" namespace media { @@ -1257,13 +1258,15 @@ RCHECK(GetElementId(&reader) == 0x1a45dfa3); // Get the header size, and ensure there are enough bits to check. - int header_size = GetVint(&reader); + // Using saturated_cast<> in case the size read is really large + // (in which case the bits_available() check will fail). + int header_size = base::saturated_cast<int>(GetVint(&reader)); RCHECK(reader.bits_available() / 8 >= header_size); // Loop through the header. while (reader.bits_available() > 0) { int tag = GetElementId(&reader); - int tagsize = GetVint(&reader); + int tagsize = base::saturated_cast<int>(GetVint(&reader)); switch (tag) { case 0x4286: // EBMLVersion case 0x42f7: // EBMLReadVersion @@ -1273,6 +1276,7 @@ case 0x4285: // DocTypeReadVersion case 0xec: // void case 0xbf: // CRC32 + RCHECK(reader.bits_available() / 8 >= tagsize); RCHECK(reader.SkipBits(tagsize * 8)); break;
diff --git a/media/base/container_names_unittest.cc b/media/base/container_names_unittest.cc index 4b71c32..18531d1e 100644 --- a/media/base/container_names_unittest.cc +++ b/media/base/container_names_unittest.cc
@@ -82,6 +82,29 @@ 0x00, 0x00, 0x00, 0xaa, 0x2e, 0x22, 0xcf, 0x00, 0x00, 0x00, 0x37, 0x67, 0x64, 0x00, 0x28, 0xac, 0x2c, 0xa4, 0x01, 0xe0, 0x08, 0x9f, 0x97, 0x01, 0x52, 0x02, 0x02, 0x02, 0x80, 0x00, 0x01}; +uint8_t kBug584401Buffer[] = { + 0x1a, 0x45, 0xdf, 0xa3, 0x01, 0x00, 0x3b, 0x00, 0xb1, 0x00, 0x00, 0x1f, + 0x42, 0x86, 0x81, 0x01, 0x42, 0xf7, 0x81, 0x01, 0x42, 0xf2, 0x0b, 0x77, + 0x01, 0xb2, 0x74, 0x87, 0xc0, 0x00, 0x20, 0x84, 0x21, 0x08, 0x23, 0x00, + 0xae, 0x06, 0x06, 0x01, 0x81, 0x87, 0xbb, 0x8e, 0x0f, 0x9f, 0x3e, 0x7c, + 0xfa, 0x61, 0xeb, 0x8e, 0x97, 0x74, 0x37, 0xd0, 0x5f, 0x5c, 0x75, 0x1e, + 0x71, 0x30, 0xfe, 0x7c, 0xe0, 0xf9, 0xf3, 0xe7, 0xcf, 0x9f, 0x3e, 0x7c, + 0xf8, 0x00, 0xc7, 0x32, 0xe2, 0x31, 0xb9, 0x58, 0x1a, 0xe7, 0xf9, 0x98, + 0x0c, 0xdd, 0x6f, 0xd4, 0x20, 0xb7, 0xe4, 0xb4, 0x7e, 0xaa, 0xdf, 0x29, + 0xd6, 0x9d, 0x2b, 0x37, 0x2f, 0x7a, 0xc2, 0x5f, 0x52, 0x44, 0x01, 0xdc, + 0x32, 0x96, 0xbb, 0xcb, 0x25, 0x52, 0x52, 0xac, 0x6f, 0xb1, 0xbd, 0x85, + 0x02, 0x83, 0x7f, 0x5e, 0x43, 0x98, 0xa6, 0x81, 0x04, 0x42, 0xf3, 0x9b, + 0x81, 0x30, 0x26, 0xb2, 0x75, 0x8e, 0x66, 0xcf, 0x11, 0xa6, 0xd9, 0x00, + 0xaa, 0x00, 0x62, 0xce, 0x6c, 0x6d, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x02, 0xa1, 0xdc, 0xab, 0x8c, 0x47, + 0xa9, 0xcf, 0x11, 0x8e, 0xe4, 0x00, 0xc0, 0x0c, 0x20, 0x53, 0x65, 0x68, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x42, 0x82, 0x84, 0x77, 0x2a, + 0x65, 0x62, 0x6d, 0x42, 0xbe, 0x4c, 0xda, 0xc9, 0x4c, 0xa5, 0x0f, 0x15, + 0xe8, 0xfd, 0x5b, 0x09, 0x8c, 0x38, 0xd7, 0x18, 0x0a, 0x68, 0x41, 0x46, + 0x63, 0x18, 0xf9, 0xf4, 0xcb, 0xc7, 0x57, 0x95, 0xd8, 0x0b, 0x2c, 0x91, + 0x70, 0x1b, 0x81, 0xd3, 0xda, 0xa0, 0x62, 0x87, 0x2d, 0x03, 0x50, 0x6d, + 0x26, 0xb1, 0xcc, 0xb8, 0x8c, 0x81, 0x6e, 0x56}; // Test that containers that start with fixed strings are handled correctly. // This is to verify that the TAG matches the first 4 characters of the string. @@ -100,6 +123,7 @@ VERIFY(kRm2Buffer, CONTAINER_RM); VERIFY(kWtvBuffer, CONTAINER_WTV); VERIFY(kBug263073Buffer, CONTAINER_MOV); + VERIFY(kBug584401Buffer, CONTAINER_EAC3); } // Determine the container type of a specified file.
diff --git a/media/base/video_frame.cc b/media/base/video_frame.cc index 0ad4ac0f..4dedd82 100644 --- a/media/base/video_frame.cc +++ b/media/base/video_frame.cc
@@ -112,9 +112,13 @@ case VideoFrame::kVPlane: switch (format) { case PIXEL_FORMAT_YV24: + case PIXEL_FORMAT_YUV444P9: + case PIXEL_FORMAT_YUV444P10: return gfx::Size(1, 1); case PIXEL_FORMAT_YV16: + case PIXEL_FORMAT_YUV422P9: + case PIXEL_FORMAT_YUV422P10: return gfx::Size(2, 1); case PIXEL_FORMAT_YV12: @@ -123,6 +127,8 @@ case PIXEL_FORMAT_NV12: case PIXEL_FORMAT_NV21: case PIXEL_FORMAT_MT21: + case PIXEL_FORMAT_YUV420P9: + case PIXEL_FORMAT_YUV420P10: return gfx::Size(2, 2); case PIXEL_FORMAT_UNKNOWN: @@ -165,6 +171,12 @@ return 3; case PIXEL_FORMAT_UYVY: case PIXEL_FORMAT_YUY2: + case PIXEL_FORMAT_YUV420P9: + case PIXEL_FORMAT_YUV422P9: + case PIXEL_FORMAT_YUV444P9: + case PIXEL_FORMAT_YUV420P10: + case PIXEL_FORMAT_YUV422P10: + case PIXEL_FORMAT_YUV444P10: return 2; case PIXEL_FORMAT_NV12: case PIXEL_FORMAT_NV21: @@ -214,7 +226,7 @@ return true; // Make sure new formats are properly accounted for in the method. - static_assert(PIXEL_FORMAT_MAX == 15, + static_assert(PIXEL_FORMAT_MAX == 21, "Added pixel format, please review IsValidConfig()"); if (format == PIXEL_FORMAT_UNKNOWN) { @@ -617,6 +629,12 @@ case PIXEL_FORMAT_YV12: case PIXEL_FORMAT_YV16: case PIXEL_FORMAT_YV24: + case PIXEL_FORMAT_YUV420P9: + case PIXEL_FORMAT_YUV422P9: + case PIXEL_FORMAT_YUV444P9: + case PIXEL_FORMAT_YUV420P10: + case PIXEL_FORMAT_YUV422P10: + case PIXEL_FORMAT_YUV444P10: return 3; case PIXEL_FORMAT_YV12A: return 4;
diff --git a/media/base/video_types.cc b/media/base/video_types.cc index e2f137d..f8eeb3e 100644 --- a/media/base/video_types.cc +++ b/media/base/video_types.cc
@@ -42,6 +42,18 @@ return "PIXEL_FORMAT_MJPEG"; case PIXEL_FORMAT_MT21: return "PIXEL_FORMAT_MT21"; + case PIXEL_FORMAT_YUV420P9: + return "PIXEL_FORMAT_YUV420P9"; + case PIXEL_FORMAT_YUV420P10: + return "PIXEL_FORMAT_YUV420P10"; + case PIXEL_FORMAT_YUV422P9: + return "PIXEL_FORMAT_YUV422P9"; + case PIXEL_FORMAT_YUV422P10: + return "PIXEL_FORMAT_YUV422P10"; + case PIXEL_FORMAT_YUV444P9: + return "PIXEL_FORMAT_YUV444P9"; + case PIXEL_FORMAT_YUV444P10: + return "PIXEL_FORMAT_YUV444P10"; } NOTREACHED() << "Invalid VideoPixelFormat provided: " << format; return ""; @@ -57,6 +69,12 @@ case PIXEL_FORMAT_NV12: case PIXEL_FORMAT_NV21: case PIXEL_FORMAT_MT21: + case PIXEL_FORMAT_YUV420P9: + case PIXEL_FORMAT_YUV420P10: + case PIXEL_FORMAT_YUV422P9: + case PIXEL_FORMAT_YUV422P10: + case PIXEL_FORMAT_YUV444P9: + case PIXEL_FORMAT_YUV444P10: return true; case PIXEL_FORMAT_UNKNOWN: @@ -87,6 +105,12 @@ case PIXEL_FORMAT_RGB24: case PIXEL_FORMAT_MJPEG: case PIXEL_FORMAT_MT21: + case PIXEL_FORMAT_YUV420P9: + case PIXEL_FORMAT_YUV420P10: + case PIXEL_FORMAT_YUV422P9: + case PIXEL_FORMAT_YUV422P10: + case PIXEL_FORMAT_YUV444P9: + case PIXEL_FORMAT_YUV444P10: return true; case PIXEL_FORMAT_YV12A: case PIXEL_FORMAT_ARGB:
diff --git a/media/base/video_types.h b/media/base/video_types.h index 7cf196e6..7590b1b3 100644 --- a/media/base/video_types.h +++ b/media/base/video_types.h
@@ -46,9 +46,17 @@ // Row pitch = ((width+15)/16) * 16. // Plane size = Row pitch * (((height+31)/32)*32) PIXEL_FORMAT_MT21 = 15, + + PIXEL_FORMAT_YUV420P9 = 16, + PIXEL_FORMAT_YUV420P10 = 17, + PIXEL_FORMAT_YUV422P9 = 18, + PIXEL_FORMAT_YUV422P10 = 19, + PIXEL_FORMAT_YUV444P9 = 20, + PIXEL_FORMAT_YUV444P10 = 21, + // Please update UMA histogram enumeration when adding new formats here. PIXEL_FORMAT_MAX = - PIXEL_FORMAT_MT21, // Must always be equal to largest entry logged. + PIXEL_FORMAT_YUV444P10, // Must always be equal to largest entry logged. }; // Color space or color range used for the pixels.
diff --git a/media/cast/logging/logging_defines.h b/media/cast/logging/logging_defines.h index 455f85d..7d17507 100644 --- a/media/cast/logging/logging_defines.h +++ b/media/cast/logging/logging_defines.h
@@ -64,7 +64,7 @@ int height; // Size of encoded frame in bytes. Only set for FRAME_ENCODED event. - size_t size; + uint32_t size; // Time of event logged. base::TimeTicks timestamp; @@ -100,7 +100,7 @@ uint32_t frame_id; uint16_t max_packet_id; uint16_t packet_id; - size_t size; + uint32_t size; // Time of event logged. base::TimeTicks timestamp;
diff --git a/media/ffmpeg/ffmpeg_common.cc b/media/ffmpeg/ffmpeg_common.cc index 9261b1f..1f0cc92 100644 --- a/media/ffmpeg/ffmpeg_common.cc +++ b/media/ffmpeg/ffmpeg_common.cc
@@ -629,6 +629,10 @@ } } +#if !defined(ARCH_CPU_LITTLE_ENDIAN) +#error The code below assumes little-endianness. +#endif + VideoPixelFormat AVPixelFormatToVideoPixelFormat(AVPixelFormat pixel_format) { // The YUVJ alternatives are FFmpeg's (deprecated, but still in use) way to // specify a pixel format and full range color combination. @@ -644,6 +648,22 @@ return PIXEL_FORMAT_YV12; case AV_PIX_FMT_YUVA420P: return PIXEL_FORMAT_YV12A; + + case AV_PIX_FMT_YUV420P9LE: + return PIXEL_FORMAT_YUV420P9; + case AV_PIX_FMT_YUV420P10LE: + return PIXEL_FORMAT_YUV420P10; + + case AV_PIX_FMT_YUV422P9LE: + return PIXEL_FORMAT_YUV422P9; + case AV_PIX_FMT_YUV422P10LE: + return PIXEL_FORMAT_YUV422P10; + + case AV_PIX_FMT_YUV444P9LE: + return PIXEL_FORMAT_YUV444P9; + case AV_PIX_FMT_YUV444P10LE: + return PIXEL_FORMAT_YUV444P10; + default: DVLOG(1) << "Unsupported AVPixelFormat: " << pixel_format; } @@ -660,6 +680,19 @@ return AV_PIX_FMT_YUVA420P; case PIXEL_FORMAT_YV24: return AV_PIX_FMT_YUV444P; + case PIXEL_FORMAT_YUV420P9: + return AV_PIX_FMT_YUV420P9LE; + case PIXEL_FORMAT_YUV420P10: + return AV_PIX_FMT_YUV420P10LE; + case PIXEL_FORMAT_YUV422P9: + return AV_PIX_FMT_YUV422P9LE; + case PIXEL_FORMAT_YUV422P10: + return AV_PIX_FMT_YUV422P10LE; + case PIXEL_FORMAT_YUV444P9: + return AV_PIX_FMT_YUV444P9LE; + case PIXEL_FORMAT_YUV444P10: + return AV_PIX_FMT_YUV444P10LE; + default: DVLOG(1) << "Unsupported Format: " << video_format; }
diff --git a/media/filters/ffmpeg_video_decoder.cc b/media/filters/ffmpeg_video_decoder.cc index 38d4405e..79e5396 100644 --- a/media/filters/ffmpeg_video_decoder.cc +++ b/media/filters/ffmpeg_video_decoder.cc
@@ -94,7 +94,10 @@ if (format == PIXEL_FORMAT_UNKNOWN) return AVERROR(EINVAL); DCHECK(format == PIXEL_FORMAT_YV12 || format == PIXEL_FORMAT_YV16 || - format == PIXEL_FORMAT_YV24); + format == PIXEL_FORMAT_YV24 || format == PIXEL_FORMAT_YUV420P9 || + format == PIXEL_FORMAT_YUV420P10 || format == PIXEL_FORMAT_YUV422P9 || + format == PIXEL_FORMAT_YUV422P10 || format == PIXEL_FORMAT_YUV444P9 || + format == PIXEL_FORMAT_YUV444P10); gfx::Size size(codec_context->width, codec_context->height); const int ret = av_image_check_size(size.width(), size.height(), 0, NULL);
diff --git a/media/filters/source_buffer_range.cc b/media/filters/source_buffer_range.cc index 562e14e09..bd99bc01 100644 --- a/media/filters/source_buffer_range.cc +++ b/media/filters/source_buffer_range.cc
@@ -98,7 +98,8 @@ KeyframeMap::iterator result = GetFirstKeyframeAtOrBefore(timestamp); next_buffer_index_ = result->second - keyframe_map_index_base_; - DCHECK_LT(next_buffer_index_, static_cast<int>(buffers_.size())); + CHECK_LT(next_buffer_index_, static_cast<int>(buffers_.size())) + << next_buffer_index_ << ", size = " << buffers_.size(); } void SourceBufferRange::SeekAheadTo(DecodeTimestamp timestamp) { @@ -127,7 +128,7 @@ } void SourceBufferRange::SeekToStart() { - DCHECK(!buffers_.empty()); + CHECK(!buffers_.empty()); next_buffer_index_ = 0; } @@ -173,6 +174,8 @@ // this range and |split_range| accordingly. if (next_buffer_index_ >= static_cast<int>(buffers_.size())) { split_range->next_buffer_index_ = next_buffer_index_ - keyframe_index; + CHECK_GE(split_range->next_buffer_index_, 0) + << split_range->next_buffer_index_; ResetNextBufferPosition(); } @@ -263,7 +266,8 @@ if (next_buffer_index_ > -1) { next_buffer_index_ -= buffers_deleted; - DCHECK_GE(next_buffer_index_, 0); + CHECK_GE(next_buffer_index_, 0) << next_buffer_index_ << ", deleted " + << buffers_deleted; } // Invalidate media segment start time if we've deleted the first buffer of @@ -443,15 +447,16 @@ } int SourceBufferRange::GetNextConfigId() const { - DCHECK(HasNextBuffer()); + CHECK(HasNextBuffer()) << next_buffer_index_; // If the next buffer is an audio splice frame, the next effective config id // comes from the first fade out preroll buffer. return buffers_[next_buffer_index_]->GetSpliceBufferConfigId(0); } DecodeTimestamp SourceBufferRange::GetNextTimestamp() const { - DCHECK(!buffers_.empty()); - DCHECK(HasNextBufferPosition()); + CHECK(!buffers_.empty()) << next_buffer_index_; + CHECK(HasNextBufferPosition()) << next_buffer_index_ + << ", size=" << buffers_.size(); if (next_buffer_index_ >= static_cast<int>(buffers_.size())) { return kNoDecodeTimestamp();
diff --git a/media/media_options.gni b/media/media_options.gni index 19067b1..5918237 100644 --- a/media/media_options.gni +++ b/media/media_options.gni
@@ -30,22 +30,6 @@ # Override to dynamically link the cras (ChromeOS audio) library. use_cras = false - # Enables runtime selection of PulseAudio library. - use_pulseaudio = false - - # Enables runtime selection of ALSA library for audio. - use_alsa = false - - # Alsa should be used on non-Android, non-Mac POSIX systems, and Chromecast - # builds for desktop Linux. - if (is_posix && !is_headless && !is_android && !is_mac && - (!is_chromecast || is_cast_desktop_build)) { - use_alsa = true - if (!use_cras) { - use_pulseaudio = true - } - } - # Use low-memory buffers on non-Android builds of Chromecast. use_low_memory_buffer = is_chromecast && !is_android @@ -71,3 +55,21 @@ # TODO(GYP): This should be a platform define. is_openbsd = false } + +declare_args() { + # Enables runtime selection of PulseAudio library. + use_pulseaudio = false + + # Enables runtime selection of ALSA library for audio. + use_alsa = false + + # Alsa should be used on non-Android, non-Mac POSIX systems, and Chromecast + # builds for desktop Linux. + if (is_posix && !is_headless && !is_android && !is_mac && + (!is_chromecast || is_cast_desktop_build)) { + use_alsa = true + if (!use_cras) { + use_pulseaudio = true + } + } +}
diff --git a/media/mojo/interfaces/media_types.mojom b/media/mojo/interfaces/media_types.mojom index 91f1619..085256e 100644 --- a/media/mojo/interfaces/media_types.mojom +++ b/media/mojo/interfaces/media_types.mojom
@@ -108,7 +108,13 @@ RGB32, MJPEG, MT21, - FORMAT_MAX = MT21, + YUV420P9, + YUV420P10, + YUV422P9, + YUV422P10, + YUV444P9, + YUV444P10, + FORMAT_MAX = YUV444P10, }; // Kept in sync with media::ColorSpace via static_asserts.
diff --git a/media/mojo/services/media_apptest.cc b/media/mojo/services/media_apptest.cc index eb6dbd6..32ddda5 100644 --- a/media/mojo/services/media_apptest.cc +++ b/media/mojo/services/media_apptest.cc
@@ -63,7 +63,7 @@ connection_->SetRemoteServiceProviderConnectionErrorHandler( base::Bind(&MediaAppTest::ConnectionClosed, base::Unretained(this))); - connection_->ConnectToService(&service_factory_); + connection_->GetInterface(&service_factory_); service_factory_->CreateCdm(mojo::GetProxy(&cdm_)); service_factory_->CreateRenderer(mojo::GetProxy(&renderer_));
diff --git a/media/mojo/services/media_type_converters.cc b/media/mojo/services/media_type_converters.cc index a498710..ac49e11 100644 --- a/media/mojo/services/media_type_converters.cc +++ b/media/mojo/services/media_type_converters.cc
@@ -154,6 +154,24 @@ ASSERT_ENUM_EQ_RAW(VideoPixelFormat, PIXEL_FORMAT_RGB32, VideoFormat::RGB32); ASSERT_ENUM_EQ_RAW(VideoPixelFormat, PIXEL_FORMAT_MJPEG, VideoFormat::MJPEG); ASSERT_ENUM_EQ_RAW(VideoPixelFormat, PIXEL_FORMAT_MT21, VideoFormat::MT21); +ASSERT_ENUM_EQ_RAW(VideoPixelFormat, + PIXEL_FORMAT_YUV420P9, + VideoFormat::YUV420P9); +ASSERT_ENUM_EQ_RAW(VideoPixelFormat, + PIXEL_FORMAT_YUV422P9, + VideoFormat::YUV422P9); +ASSERT_ENUM_EQ_RAW(VideoPixelFormat, + PIXEL_FORMAT_YUV444P9, + VideoFormat::YUV444P9); +ASSERT_ENUM_EQ_RAW(VideoPixelFormat, + PIXEL_FORMAT_YUV420P10, + VideoFormat::YUV420P10); +ASSERT_ENUM_EQ_RAW(VideoPixelFormat, + PIXEL_FORMAT_YUV422P10, + VideoFormat::YUV422P10); +ASSERT_ENUM_EQ_RAW(VideoPixelFormat, + PIXEL_FORMAT_YUV444P10, + VideoFormat::YUV444P10); ASSERT_ENUM_EQ_RAW(VideoPixelFormat, PIXEL_FORMAT_MAX, VideoFormat::FORMAT_MAX); // ColorSpace.
diff --git a/media/mojo/services/mojo_media_application.cc b/media/mojo/services/mojo_media_application.cc index a84ef88..74c0df5 100644 --- a/media/mojo/services/mojo_media_application.cc +++ b/media/mojo/services/mojo_media_application.cc
@@ -38,7 +38,7 @@ } bool MojoMediaApplication::AcceptConnection(mojo::Connection* connection) { - connection->AddService<interfaces::ServiceFactory>(this); + connection->AddInterface<interfaces::ServiceFactory>(this); return true; } @@ -46,7 +46,7 @@ mojo::Connection* connection, mojo::InterfaceRequest<interfaces::ServiceFactory> request) { // The created object is owned by the pipe. - new ServiceFactoryImpl(std::move(request), connection->GetServiceProvider(), + new ServiceFactoryImpl(std::move(request), connection->GetRemoteInterfaces(), media_log_, shell_->CreateAppRefCount(), mojo_media_client_.get()); }
diff --git a/media/renderers/skcanvas_video_renderer.cc b/media/renderers/skcanvas_video_renderer.cc index 0740f47..483953e0 100644 --- a/media/renderers/skcanvas_video_renderer.cc +++ b/media/renderers/skcanvas_video_renderer.cc
@@ -448,6 +448,62 @@ SkXfermode::kSrc_Mode, media::VIDEO_ROTATION_0, context_3d); } +namespace { + +// libyuv doesn't support 9- and 10-bit video frames yet. This function +// creates a regular 8-bit video frame which we can give to libyuv. +scoped_refptr<VideoFrame> DownShiftHighbitVideoFrame( + const VideoFrame* video_frame) { + VideoPixelFormat format; + int shift = 1; + switch (video_frame->format()) { + case PIXEL_FORMAT_YUV420P10: + shift = 2; + case PIXEL_FORMAT_YUV420P9: + format = PIXEL_FORMAT_I420; + break; + case PIXEL_FORMAT_YUV422P10: + shift = 2; + case PIXEL_FORMAT_YUV422P9: + format = PIXEL_FORMAT_YV16; + break; + case PIXEL_FORMAT_YUV444P10: + shift = 2; + case PIXEL_FORMAT_YUV444P9: + format = PIXEL_FORMAT_YV24; + break; + + default: + NOTREACHED(); + return nullptr; + } + scoped_refptr<VideoFrame> ret = VideoFrame::CreateFrame( + format, video_frame->coded_size(), video_frame->visible_rect(), + video_frame->natural_size(), video_frame->timestamp()); + + // Copy all metadata. + // (May be enough to copy color space) + base::DictionaryValue tmp; + video_frame->metadata()->MergeInternalValuesInto(&tmp); + ret->metadata()->MergeInternalValuesFrom(tmp); + + for (int plane = VideoFrame::kYPlane; plane <= VideoFrame::kVPlane; ++plane) { + int width = ret->row_bytes(plane); + const uint16_t* src = + reinterpret_cast<const uint16_t*>(video_frame->data(plane)); + uint8_t* dst = ret->data(plane); + for (int row = 0; row < video_frame->rows(plane); row++) { + for (int x = 0; x < width; x++) { + dst[x] = src[x] >> shift; + } + src += video_frame->stride(plane) / 2; + dst += ret->stride(plane); + } + } + return ret; +} +} + // static void SkCanvasVideoRenderer::ConvertVideoFrameToRGBPixels( const VideoFrame* video_frame, @@ -461,8 +517,6 @@ NOTREACHED() << "Non YUV formats are not supported"; return; } - DCHECK_EQ(video_frame->stride(VideoFrame::kUPlane), - video_frame->stride(VideoFrame::kVPlane)); switch (video_frame->format()) { case PIXEL_FORMAT_YV12: @@ -538,6 +592,20 @@ video_frame->visible_rect().width(), video_frame->visible_rect().height()); break; + + case PIXEL_FORMAT_YUV420P9: + case PIXEL_FORMAT_YUV422P9: + case PIXEL_FORMAT_YUV444P9: + case PIXEL_FORMAT_YUV420P10: + case PIXEL_FORMAT_YUV422P10: + case PIXEL_FORMAT_YUV444P10: { + scoped_refptr<VideoFrame> temporary_frame = + DownShiftHighbitVideoFrame(video_frame); + ConvertVideoFrameToRGBPixels(temporary_frame.get(), rgb_pixels, + row_bytes); + break; + } + case PIXEL_FORMAT_NV12: case PIXEL_FORMAT_NV21: case PIXEL_FORMAT_UYVY: @@ -584,7 +652,6 @@ // "flip_y == false" means to keep the intrinsic orientation. gl->CopyTextureCHROMIUM(source_texture, texture, internal_format, type, flip_y, premultiply_alpha, false); - gl->DeleteTextures(1, &source_texture); gl->Flush();
diff --git a/media/renderers/skcanvas_video_renderer_unittest.cc b/media/renderers/skcanvas_video_renderer_unittest.cc index b77650d8..df82f27 100644 --- a/media/renderers/skcanvas_video_renderer_unittest.cc +++ b/media/renderers/skcanvas_video_renderer_unittest.cc
@@ -467,6 +467,44 @@ EXPECT_EQ(SK_ColorBLACK, GetColorAt(&canvas, kWidth / 2, kHeight - 1)); } +TEST_F(SkCanvasVideoRendererTest, HighBits) { + // Copy cropped_frame into a highbit frame. + scoped_refptr<VideoFrame> frame(VideoFrame::CreateFrame( + PIXEL_FORMAT_YUV420P10, cropped_frame()->coded_size(), + cropped_frame()->visible_rect(), cropped_frame()->natural_size(), + cropped_frame()->timestamp())); + for (int plane = VideoFrame::kYPlane; plane <= VideoFrame::kVPlane; ++plane) { + int width = cropped_frame()->row_bytes(plane); + uint16_t* dst = reinterpret_cast<uint16_t*>(frame->data(plane)); + uint8_t* src = cropped_frame()->data(plane); + for (int row = 0; row < cropped_frame()->rows(plane); row++) { + for (int col = 0; col < width; col++) { + dst[col] = src[col] << 2; + } + src += cropped_frame()->stride(plane); + dst += frame->stride(plane) / 2; + } + } + + Paint(frame, target_canvas(), kNone); + // Check the corners. + EXPECT_EQ(SK_ColorBLACK, GetColorAt(target_canvas(), 0, 0)); + EXPECT_EQ(SK_ColorRED, GetColorAt(target_canvas(), kWidth - 1, 0)); + EXPECT_EQ(SK_ColorGREEN, GetColorAt(target_canvas(), 0, kHeight - 1)); + EXPECT_EQ(SK_ColorBLUE, GetColorAt(target_canvas(), kWidth - 1, kHeight - 1)); + // Check the interior along the border between color regions. Note that we're + // bilinearly upscaling, so we'll need to take care to pick sample points that + // are just outside the "zone of resampling". + EXPECT_EQ(SK_ColorBLACK, GetColorAt(target_canvas(), kWidth * 1 / 8 - 1, + kHeight * 1 / 6 - 1)); + EXPECT_EQ(SK_ColorRED, + GetColorAt(target_canvas(), kWidth * 3 / 8, kHeight * 1 / 6 - 1)); + EXPECT_EQ(SK_ColorGREEN, + GetColorAt(target_canvas(), kWidth * 1 / 8 - 1, kHeight * 3 / 6)); + EXPECT_EQ(SK_ColorBLUE, + GetColorAt(target_canvas(), kWidth * 3 / 8, kHeight * 3 / 6)); +} + namespace { class TestGLES2Interface : public gpu::gles2::GLES2InterfaceStub { public:
diff --git a/media/test/data/README b/media/test/data/README index 8ab8273..4b85fe39 100644 --- a/media/test/data/README +++ b/media/test/data/README
@@ -43,6 +43,9 @@ vorbis-packet-2 - timestamp: 0ms, duration: 0ms vorbis-packet-3 - timestamp: 2902ms, duration: 0ms +// 10-bit test file(s) +bear-320x180-hi10p.mp4 + // Encrypted Files bear-1280x720-a_frag-cenc.mp4 - A fragmented MP4 version of the audio track of bear-1280x720.mp4 encrypted (ISO CENC) using key ID [1] and key [2]. bear-1280x720-a_frag-cenc-key_rotation.mp4 - A fragmented MP4 version of the audio track of bear-1280x720.mp4 encrypted (ISO CENC) using key ID [1] and key [2] with key rotation [3].
diff --git a/media/test/data/bear-320x180-hi10p.mp4 b/media/test/data/bear-320x180-hi10p.mp4 new file mode 100644 index 0000000..725b4ac3 --- /dev/null +++ b/media/test/data/bear-320x180-hi10p.mp4 Binary files differ
diff --git a/media/test/data/blackwhite_yuv420p_hi10p.mp4 b/media/test/data/blackwhite_yuv420p_hi10p.mp4 new file mode 100644 index 0000000..c23aabb --- /dev/null +++ b/media/test/data/blackwhite_yuv420p_hi10p.mp4 Binary files differ
diff --git a/media/test/pipeline_integration_test.cc b/media/test/pipeline_integration_test.cc index 4e8c953..e4ef262b 100644 --- a/media/test/pipeline_integration_test.cc +++ b/media/test/pipeline_integration_test.cc
@@ -1258,6 +1258,15 @@ } #if defined(USE_PROPRIETARY_CODECS) + +TEST_F(PipelineIntegrationTest, BasicPlaybackHi10P) { + ASSERT_EQ(PIPELINE_OK, Start("bear-320x180-hi10p.mp4", kClockless)); + + Play(); + + ASSERT_TRUE(WaitUntilOnEnded()); +} + TEST_F(PipelineIntegrationTest, MediaSource_ADTS) { MockMediaSource source("sfx.adts", kADTS, kAppendWholeFile); StartPipelineWithMediaSource(&source); @@ -1767,6 +1776,7 @@ source.Shutdown(); Stop(); } + #endif // defined(USE_PROPRIETARY_CODECS) TEST_F(PipelineIntegrationTest, SeekWhilePaused) {
diff --git a/media/video/gpu_memory_buffer_video_frame_pool.cc b/media/video/gpu_memory_buffer_video_frame_pool.cc index d6ed4d5..7ac0cd7 100644 --- a/media/video/gpu_memory_buffer_video_frame_pool.cc +++ b/media/video/gpu_memory_buffer_video_frame_pool.cc
@@ -385,6 +385,12 @@ case PIXEL_FORMAT_RGB32: case PIXEL_FORMAT_MJPEG: case PIXEL_FORMAT_MT21: + case PIXEL_FORMAT_YUV420P9: + case PIXEL_FORMAT_YUV422P9: + case PIXEL_FORMAT_YUV444P9: + case PIXEL_FORMAT_YUV420P10: + case PIXEL_FORMAT_YUV422P10: + case PIXEL_FORMAT_YUV444P10: case PIXEL_FORMAT_UNKNOWN: frame_ready_cb.Run(video_frame); return;
diff --git a/mojo/converters/input_events/input_events_type_converters.cc b/mojo/converters/input_events/input_events_type_converters.cc index 1751a6e..ce704ef 100644 --- a/mojo/converters/input_events/input_events_type_converters.cc +++ b/mojo/converters/input_events/input_events_type_converters.cc
@@ -240,10 +240,10 @@ mus::mojom::BrushDataPtr brush_data(mus::mojom::BrushData::New()); // TODO(rjk): this is in the wrong coordinate system - brush_data->width = touch_event->pointer_details().radius_x(); - brush_data->height = touch_event->pointer_details().radius_y(); + brush_data->width = touch_event->pointer_details().radius_x; + brush_data->height = touch_event->pointer_details().radius_y; // TODO(rjk): update for touch_event->rotation_angle(); - brush_data->pressure = touch_event->pointer_details().force(); + brush_data->pressure = touch_event->pointer_details().force; brush_data->tilt_y = 0; brush_data->tilt_z = 0; pointer_data->brush_data = std::move(brush_data);
diff --git a/mojo/converters/surfaces/surfaces_type_converters.cc b/mojo/converters/surfaces/surfaces_type_converters.cc index bff1f701..ba512e41 100644 --- a/mojo/converters/surfaces/surfaces_type_converters.cc +++ b/mojo/converters/surfaces/surfaces_type_converters.cc
@@ -30,17 +30,12 @@ using mus::mojom::Color; using mus::mojom::ColorPtr; -using mus::mojom::CommandBufferNamespace; using mus::mojom::CompositorFrame; using mus::mojom::CompositorFramePtr; using mus::mojom::CompositorFrameMetadata; using mus::mojom::CompositorFrameMetadataPtr; using mus::mojom::DebugBorderQuadState; using mus::mojom::DebugBorderQuadStatePtr; -using mus::mojom::Mailbox; -using mus::mojom::MailboxPtr; -using mus::mojom::MailboxHolder; -using mus::mojom::MailboxHolderPtr; using mus::mojom::Pass; using mus::mojom::PassPtr; using mus::mojom::Quad; @@ -60,8 +55,6 @@ using mus::mojom::SurfaceIdPtr; using mus::mojom::SurfaceQuadState; using mus::mojom::SurfaceQuadStatePtr; -using mus::mojom::SyncToken; -using mus::mojom::SyncTokenPtr; using mus::mojom::TextureQuadState; using mus::mojom::TextureQuadStatePtr; using mus::mojom::TileQuadState; @@ -245,7 +238,9 @@ yuv_state->y_plane_resource_id, yuv_state->u_plane_resource_id, yuv_state->v_plane_resource_id, yuv_state->a_plane_resource_id, static_cast<cc::YUVVideoDrawQuad::ColorSpace>( - yuv_state->color_space)); + yuv_state->color_space), + yuv_state->resource_offset, + yuv_state->resource_multiplier); break; } default: @@ -411,6 +406,8 @@ yuv_state->a_plane_resource_id = yuv_quad->a_plane_resource_id(); yuv_state->color_space = static_cast<YUVColorSpace>(yuv_quad->color_space); + yuv_state->resource_offset = yuv_quad->resource_offset; + yuv_state->resource_multiplier = yuv_quad->resource_multiplier; quad->yuv_video_quad_state = std::move(yuv_state); break; } @@ -514,74 +511,6 @@ } // static -MailboxPtr TypeConverter<MailboxPtr, gpu::Mailbox>::Convert( - const gpu::Mailbox& input) { - Array<int8_t> name(64); - for (int i = 0; i < 64; ++i) { - name[i] = input.name[i]; - } - MailboxPtr mailbox(Mailbox::New()); - mailbox->name = std::move(name); - return mailbox; -} - -// static -gpu::Mailbox TypeConverter<gpu::Mailbox, MailboxPtr>::Convert( - const MailboxPtr& input) { - gpu::Mailbox mailbox; - if (!input->name.is_null()) - mailbox.SetName(&input->name.storage()[0]); - return mailbox; -} - -// static -SyncTokenPtr TypeConverter<SyncTokenPtr, gpu::SyncToken>::Convert( - const gpu::SyncToken& input) { - DCHECK(!input.HasData() || input.verified_flush()); - SyncTokenPtr sync_token(SyncToken::New()); - sync_token->verified_flush = input.verified_flush(); - sync_token->namespace_id = - static_cast<CommandBufferNamespace>(input.namespace_id()); - sync_token->extra_data_field = input.extra_data_field(); - sync_token->command_buffer_id = input.command_buffer_id(); - sync_token->release_count = input.release_count(); - return sync_token; -} - -// static -gpu::SyncToken TypeConverter<gpu::SyncToken, SyncTokenPtr>::Convert( - const SyncTokenPtr& input) { - const gpu::CommandBufferNamespace namespace_id = - static_cast<gpu::CommandBufferNamespace>(input->namespace_id); - gpu::SyncToken sync_token(namespace_id, input->extra_data_field, - input->command_buffer_id, input->release_count); - if (input->verified_flush) - sync_token.SetVerifyFlush(); - - return sync_token; -} - -// static -MailboxHolderPtr TypeConverter<MailboxHolderPtr, gpu::MailboxHolder>::Convert( - const gpu::MailboxHolder& input) { - MailboxHolderPtr holder(MailboxHolder::New()); - holder->mailbox = Mailbox::From<gpu::Mailbox>(input.mailbox); - holder->sync_token = SyncToken::From<gpu::SyncToken>(input.sync_token); - holder->texture_target = input.texture_target; - return holder; -} - -// static -gpu::MailboxHolder TypeConverter<gpu::MailboxHolder, MailboxHolderPtr>::Convert( - const MailboxHolderPtr& input) { - gpu::MailboxHolder holder; - holder.mailbox = input->mailbox.To<gpu::Mailbox>(); - holder.sync_token = input->sync_token.To<gpu::SyncToken>(); - holder.texture_target = input->texture_target; - return holder; -} - -// static TransferableResourcePtr TypeConverter<TransferableResourcePtr, cc::TransferableResource>::Convert( const cc::TransferableResource& input) { @@ -590,7 +519,7 @@ transferable->format = static_cast<ResourceFormat>(input.format); transferable->filter = input.filter; transferable->size = Size::From(input.size); - transferable->mailbox_holder = MailboxHolder::From(input.mailbox_holder); + transferable->mailbox_holder = input.mailbox_holder; transferable->read_lock_fences_enabled = input.read_lock_fences_enabled; transferable->is_software = input.is_software; transferable->is_overlay_candidate = input.is_overlay_candidate; @@ -606,7 +535,7 @@ transferable.format = static_cast<cc::ResourceFormat>(input->format); transferable.filter = input->filter; transferable.size = input->size.To<gfx::Size>(); - transferable.mailbox_holder = input->mailbox_holder.To<gpu::MailboxHolder>(); + transferable.mailbox_holder = input->mailbox_holder; transferable.read_lock_fences_enabled = input->read_lock_fences_enabled; transferable.is_software = input->is_software; transferable.is_overlay_candidate = input->is_overlay_candidate; @@ -619,7 +548,7 @@ const cc::ReturnedResource& input) { ReturnedResourcePtr returned = ReturnedResource::New(); returned->id = input.id; - returned->sync_token = SyncToken::From<gpu::SyncToken>(input.sync_token); + returned->sync_token = input.sync_token; returned->count = input.count; returned->lost = input.lost; return returned; @@ -631,7 +560,7 @@ const ReturnedResourcePtr& input) { cc::ReturnedResource returned; returned.id = input->id; - returned.sync_token = input->sync_token.To<gpu::SyncToken>(); + returned.sync_token = input->sync_token; returned.count = input->count; returned.lost = input->lost; return returned;
diff --git a/mojo/converters/surfaces/surfaces_type_converters.h b/mojo/converters/surfaces/surfaces_type_converters.h index c4cc021e..e24a55c1e 100644 --- a/mojo/converters/surfaces/surfaces_type_converters.h +++ b/mojo/converters/surfaces/surfaces_type_converters.h
@@ -95,39 +95,6 @@ // Types from compositor_frame.mojom template <> -struct MOJO_SURFACES_EXPORT - TypeConverter<mus::mojom::MailboxPtr, gpu::Mailbox> { - static mus::mojom::MailboxPtr Convert(const gpu::Mailbox& input); -}; -template <> -struct MOJO_SURFACES_EXPORT - TypeConverter<gpu::Mailbox, mus::mojom::MailboxPtr> { - static gpu::Mailbox Convert(const mus::mojom::MailboxPtr& input); -}; - -template <> -struct MOJO_SURFACES_EXPORT - TypeConverter<mus::mojom::SyncTokenPtr, gpu::SyncToken> { - static mus::mojom::SyncTokenPtr Convert(const gpu::SyncToken& input); -}; -template <> -struct MOJO_SURFACES_EXPORT - TypeConverter<gpu::SyncToken, mus::mojom::SyncTokenPtr> { - static gpu::SyncToken Convert(const mus::mojom::SyncTokenPtr& input); -}; - -template <> -struct MOJO_SURFACES_EXPORT - TypeConverter<mus::mojom::MailboxHolderPtr, gpu::MailboxHolder> { - static mus::mojom::MailboxHolderPtr Convert(const gpu::MailboxHolder& input); -}; -template <> -struct MOJO_SURFACES_EXPORT - TypeConverter<gpu::MailboxHolder, mus::mojom::MailboxHolderPtr> { - static gpu::MailboxHolder Convert(const mus::mojom::MailboxHolderPtr& input); -}; - -template <> struct MOJO_SURFACES_EXPORT TypeConverter<mus::mojom::TransferableResourcePtr, cc::TransferableResource> { static mus::mojom::TransferableResourcePtr Convert(
diff --git a/mojo/converters/surfaces/tests/surface_unittest.cc b/mojo/converters/surfaces/tests/surface_unittest.cc index f43b4269..9617062 100644 --- a/mojo/converters/surfaces/tests/surface_unittest.cc +++ b/mojo/converters/surfaces/tests/surface_unittest.cc
@@ -30,10 +30,6 @@ using mus::mojom::CompositorFrameMetadataPtr; using mus::mojom::DebugBorderQuadState; using mus::mojom::DebugBorderQuadStatePtr; -using mus::mojom::Mailbox; -using mus::mojom::MailboxPtr; -using mus::mojom::MailboxHolder; -using mus::mojom::MailboxHolderPtr; using mus::mojom::Pass; using mus::mojom::PassPtr; using mus::mojom::Quad; @@ -385,41 +381,6 @@ EXPECT_EQ(y_flipped, round_trip_texture_quad->y_flipped); } -TEST(SurfaceLibTest, Mailbox) { - gpu::Mailbox mailbox; - mailbox.Generate(); - - MailboxPtr mus_mailbox = Mailbox::From(mailbox); - EXPECT_EQ(0, memcmp(mailbox.name, &mus_mailbox->name.storage()[0], 64)); - - gpu::Mailbox round_trip_mailbox = mus_mailbox.To<gpu::Mailbox>(); - EXPECT_EQ(mailbox, round_trip_mailbox); -} - -TEST(SurfaceLibTest, MailboxEmptyName) { - MailboxPtr mus_mailbox = Mailbox::New(); - - gpu::Mailbox converted_mailbox = mus_mailbox.To<gpu::Mailbox>(); - EXPECT_TRUE(converted_mailbox.IsZero()); -} - -TEST(SurfaceLibTest, MailboxHolder) { - gpu::Mailbox mailbox; - mailbox.Generate(); - uint32_t texture_target = GL_TEXTURE_2D; - gpu::SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, 0, 1, 7u); - sync_token.SetVerifyFlush(); - gpu::MailboxHolder holder(mailbox, sync_token, texture_target); - - MailboxHolderPtr mus_holder = MailboxHolder::From(holder); - EXPECT_EQ(texture_target, mus_holder->texture_target); - EXPECT_EQ(sync_token, mus_holder->sync_token.To<gpu::SyncToken>()); - - gpu::MailboxHolder round_trip_holder = mus_holder.To<gpu::MailboxHolder>(); - EXPECT_EQ(mailbox, round_trip_holder.mailbox); - EXPECT_EQ(texture_target, round_trip_holder.texture_target); - EXPECT_EQ(sync_token, round_trip_holder.sync_token); -} TEST(SurfaceLibTest, TransferableResource) { uint32_t id = 7u; @@ -471,7 +432,7 @@ ReturnedResourcePtr mus_resource = ReturnedResource::From(resource); EXPECT_EQ(id, mus_resource->id); - EXPECT_EQ(sync_token, mus_resource->sync_token.To<gpu::SyncToken>()); + EXPECT_EQ(sync_token, mus_resource->sync_token); EXPECT_EQ(count, mus_resource->count); EXPECT_EQ(lost, mus_resource->lost);
diff --git a/mojo/edk/embedder/BUILD.gn b/mojo/edk/embedder/BUILD.gn index 845266a..620d1c90 100644 --- a/mojo/edk/embedder/BUILD.gn +++ b/mojo/edk/embedder/BUILD.gn
@@ -70,9 +70,6 @@ "scoped_platform_handle.h", "simple_platform_shared_buffer.cc", "simple_platform_shared_buffer.h", - "simple_platform_shared_buffer_android.cc", - "simple_platform_shared_buffer_posix.cc", - "simple_platform_shared_buffer_win.cc", "simple_platform_support.cc", "simple_platform_support.h", ]
diff --git a/mojo/edk/embedder/simple_platform_shared_buffer.cc b/mojo/edk/embedder/simple_platform_shared_buffer.cc index 7467c79..caa926c 100644 --- a/mojo/edk/embedder/simple_platform_shared_buffer.cc +++ b/mojo/edk/embedder/simple_platform_shared_buffer.cc
@@ -9,11 +9,32 @@ #include <utility> #include "base/logging.h" +#include "base/memory/shared_memory.h" +#include "base/process/process_handle.h" +#include "base/sys_info.h" #include "mojo/edk/embedder/platform_handle_utils.h" namespace mojo { namespace edk { +namespace { + +// Takes ownership of |memory_handle|. +ScopedPlatformHandle SharedMemoryToPlatformHandle( + base::SharedMemoryHandle memory_handle) { +#if defined(OS_POSIX) && !(defined(OS_MACOSX) && !defined(OS_IOS)) + return ScopedPlatformHandle(PlatformHandle(memory_handle.fd)); +#elif defined(OS_WIN) + return ScopedPlatformHandle(PlatformHandle(memory_handle.GetHandle())); +#else + CHECK_EQ(memory_handle.GetType(), base::SharedMemoryHandle::POSIX); + return ScopedPlatformHandle(PlatformHandle( + memory_handle.GetFileDescriptor().fd)); +#endif +} + +} // namespace + // static SimplePlatformSharedBuffer* SimplePlatformSharedBuffer::Create( size_t num_bytes) { @@ -77,16 +98,46 @@ size_t offset, size_t length) { DCHECK(IsValidMap(offset, length)); - return MapImpl(offset, length); + DCHECK(shared_memory_); + base::SharedMemoryHandle handle; + { + base::AutoLock locker(lock_); + handle = base::SharedMemory::DuplicateHandle(shared_memory_->handle()); + } + if (handle == base::SharedMemory::NULLHandle()) + return nullptr; + + scoped_ptr<SimplePlatformSharedBufferMapping> mapping( + new SimplePlatformSharedBufferMapping(handle, offset, length)); + if (mapping->Map()) + return make_scoped_ptr(mapping.release()); + + return nullptr; } ScopedPlatformHandle SimplePlatformSharedBuffer::DuplicatePlatformHandle() { - return mojo::edk::DuplicatePlatformHandle(handle_.get()); + DCHECK(shared_memory_); + base::SharedMemoryHandle handle; + { + base::AutoLock locker(lock_); + handle = base::SharedMemory::DuplicateHandle(shared_memory_->handle()); + } + if (handle == base::SharedMemory::NULLHandle()) + return ScopedPlatformHandle(); + + return SharedMemoryToPlatformHandle(handle); } ScopedPlatformHandle SimplePlatformSharedBuffer::PassPlatformHandle() { DCHECK(HasOneRef()); - return std::move(handle_); + + // The only way to pass a handle from base::SharedMemory is to duplicate it + // and close the original. + ScopedPlatformHandle handle = DuplicatePlatformHandle(); + + base::AutoLock locker(lock_); + shared_memory_->Close(); + return handle; } SimplePlatformSharedBuffer::SimplePlatformSharedBuffer(size_t num_bytes) @@ -96,6 +147,35 @@ SimplePlatformSharedBuffer::~SimplePlatformSharedBuffer() { } +bool SimplePlatformSharedBuffer::Init() { + DCHECK(!shared_memory_); + + base::SharedMemoryCreateOptions options; + options.size = num_bytes_; +#if defined(OS_MACOSX) && !defined(OS_IOS) + // TODO(crbug.com/582468): Support Mach shared memory. + options.type = base::SharedMemoryHandle::POSIX; +#endif + + shared_memory_.reset(new base::SharedMemory); + return shared_memory_->Create(options); +} + +bool SimplePlatformSharedBuffer::InitFromPlatformHandle( + ScopedPlatformHandle platform_handle) { + DCHECK(!shared_memory_); + +#if defined(OS_WIN) + base::SharedMemoryHandle handle(platform_handle.release().handle, + base::GetCurrentProcId()); +#else + base::SharedMemoryHandle handle(platform_handle.release().handle, false); +#endif + + shared_memory_.reset(new base::SharedMemory(handle, false)); + return true; +} + SimplePlatformSharedBufferMapping::~SimplePlatformSharedBufferMapping() { Unmap(); } @@ -108,5 +188,24 @@ return length_; } +bool SimplePlatformSharedBufferMapping::Map() { + // Mojo shared buffers can be mapped at any offset. However, + // base::SharedMemory must be mapped at a page boundary. So calculate what the + // nearest whole page offset is, and build a mapping that's offset from that. + size_t offset_rounding = offset_ % base::SysInfo::VMAllocationGranularity(); + size_t real_offset = offset_ - offset_rounding; + size_t real_length = length_ + offset_rounding; + + if (!shared_memory_.MapAt(static_cast<off_t>(real_offset), real_length)) + return false; + + base_ = static_cast<char*>(shared_memory_.memory()) + offset_rounding; + return true; +} + +void SimplePlatformSharedBufferMapping::Unmap() { + shared_memory_.Unmap(); +} + } // namespace edk } // namespace mojo
diff --git a/mojo/edk/embedder/simple_platform_shared_buffer.h b/mojo/edk/embedder/simple_platform_shared_buffer.h index 798bc3a..068f668 100644 --- a/mojo/edk/embedder/simple_platform_shared_buffer.h +++ b/mojo/edk/embedder/simple_platform_shared_buffer.h
@@ -7,6 +7,9 @@ #include <stddef.h> +#include "base/memory/scoped_ptr.h" +#include "base/memory/shared_memory.h" +#include "base/synchronization/lock.h" #include "mojo/edk/embedder/platform_shared_buffer.h" #include "mojo/edk/system/system_impl_export.h" #include "mojo/public/cpp/system/macros.h" @@ -14,7 +17,8 @@ namespace mojo { namespace edk { -// A simple implementation of |PlatformSharedBuffer|. +// A simple implementation of |PlatformSharedBuffer| that uses +// |base::SharedMemory|. class MOJO_SYSTEM_IMPL_EXPORT SimplePlatformSharedBuffer final : public PlatformSharedBuffer { public: @@ -40,8 +44,6 @@ explicit SimplePlatformSharedBuffer(size_t num_bytes); ~SimplePlatformSharedBuffer() override; - // Implemented in simple_platform_shared_buffer_{posix,win}.cc: - // This is called by |Create()| before this object is given to anyone. bool Init(); @@ -50,15 +52,10 @@ // claimed |num_bytes_|.) bool InitFromPlatformHandle(ScopedPlatformHandle platform_handle); - // The platform-dependent part of |Map()|; doesn't check arguments. - scoped_ptr<PlatformSharedBufferMapping> MapImpl(size_t offset, size_t length); - const size_t num_bytes_; - // This is set in |Init()|/|InitFromPlatformHandle()| and never modified - // (except by |PassPlatformHandle()|; see the comments above its declaration), - // hence does not need to be protected by a lock. - ScopedPlatformHandle handle_; + base::Lock lock_; + scoped_ptr<base::SharedMemory> shared_memory_; MOJO_DISALLOW_COPY_AND_ASSIGN(SimplePlatformSharedBuffer); }; @@ -76,21 +73,25 @@ private: friend class SimplePlatformSharedBuffer; - SimplePlatformSharedBufferMapping(void* base, - size_t length, - void* real_base, - size_t real_length) - : base_(base), + SimplePlatformSharedBufferMapping(base::SharedMemoryHandle handle, + size_t offset, + size_t length) + : offset_(offset), length_(length), - real_base_(real_base), - real_length_(real_length) {} + base_(nullptr), + shared_memory_(handle, false) {} + + bool Map(); void Unmap(); - void* const base_; + const size_t offset_; const size_t length_; + void* base_; - void* const real_base_; - const size_t real_length_; + // Since mapping life cycles are separate from PlatformSharedBuffer and a + // buffer can be mapped multiple times, we have our own SharedMemory object + // created from a duplicate handle. + base::SharedMemory shared_memory_; MOJO_DISALLOW_COPY_AND_ASSIGN(SimplePlatformSharedBufferMapping); };
diff --git a/mojo/edk/embedder/simple_platform_shared_buffer_android.cc b/mojo/edk/embedder/simple_platform_shared_buffer_android.cc deleted file mode 100644 index 97ec976..0000000 --- a/mojo/edk/embedder/simple_platform_shared_buffer_android.cc +++ /dev/null
@@ -1,73 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "mojo/edk/embedder/simple_platform_shared_buffer.h" - -#include <stddef.h> -#include <stdint.h> -#include <sys/mman.h> // For |PROT_...|. -#include <sys/types.h> // For |off_t|. -#include <limits> -#include <utility> - -#include "base/files/scoped_file.h" -#include "base/logging.h" -#include "mojo/edk/embedder/platform_handle.h" -#include "third_party/ashmem/ashmem.h" - -namespace mojo { -namespace edk { - -// SimplePlatformSharedBuffer -------------------------------------------------- - -bool SimplePlatformSharedBuffer::Init() { - DCHECK(!handle_.is_valid()); - - if (static_cast<uint64_t>(num_bytes_) > - static_cast<uint64_t>(std::numeric_limits<off_t>::max())) { - return false; - } - - base::ScopedFD fd(ashmem_create_region(nullptr, num_bytes_)); - if (!fd.is_valid()) { - DPLOG(ERROR) << "ashmem_create_region()"; - return false; - } - - if (ashmem_set_prot_region(fd.get(), PROT_READ | PROT_WRITE) < 0) { - DPLOG(ERROR) << "ashmem_set_prot_region()"; - return false; - } - - handle_.reset(PlatformHandle(fd.release())); - return true; -} - -bool SimplePlatformSharedBuffer::InitFromPlatformHandle( - ScopedPlatformHandle platform_handle) { - DCHECK(!handle_.is_valid()); - - if (static_cast<uint64_t>(num_bytes_) > - static_cast<uint64_t>(std::numeric_limits<off_t>::max())) { - return false; - } - - int size = ashmem_get_size_region(platform_handle.get().handle); - - if (size < 0) { - DPLOG(ERROR) << "ashmem_get_size_region()"; - return false; - } - - if (static_cast<size_t>(size) != num_bytes_) { - LOG(ERROR) << "Shared memory region has the wrong size"; - return false; - } - - handle_ = std::move(platform_handle); - return true; -} - -} // namespace edk -} // namespace mojo
diff --git a/mojo/edk/embedder/simple_platform_shared_buffer_posix.cc b/mojo/edk/embedder/simple_platform_shared_buffer_posix.cc deleted file mode 100644 index f105c011..0000000 --- a/mojo/edk/embedder/simple_platform_shared_buffer_posix.cc +++ /dev/null
@@ -1,159 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "mojo/edk/embedder/simple_platform_shared_buffer.h" - -#include <stddef.h> -#include <stdint.h> -#include <stdio.h> // For |fileno()|. -#include <sys/mman.h> // For |mmap()|/|munmap()|. -#include <sys/stat.h> -#include <sys/types.h> // For |off_t|. -#include <unistd.h> -#include <limits> -#include <utility> - -#include "base/files/file_path.h" -#include "base/files/file_util.h" -#include "base/files/scoped_file.h" -#include "base/logging.h" -#include "base/posix/eintr_wrapper.h" -#include "base/sys_info.h" -#include "base/threading/thread_restrictions.h" -#include "mojo/edk/embedder/platform_handle.h" - -// We assume that |size_t| and |off_t| (type for |ftruncate()|) fits in a -// |uint64_t|. -static_assert(sizeof(size_t) <= sizeof(uint64_t), "size_t too big"); -static_assert(sizeof(off_t) <= sizeof(uint64_t), "off_t too big"); - -namespace mojo { -namespace edk { - -// SimplePlatformSharedBuffer -------------------------------------------------- - -// The implementation for android uses ashmem to generate the file descriptor -// for the shared memory. See simple_platform_shared_buffer_android.cc -#if !defined(OS_ANDROID) - -bool SimplePlatformSharedBuffer::Init() { - DCHECK(!handle_.is_valid()); - - base::ThreadRestrictions::ScopedAllowIO allow_io; - - if (static_cast<uint64_t>(num_bytes_) > - static_cast<uint64_t>(std::numeric_limits<off_t>::max())) { - return false; - } - - // TODO(vtl): This is stupid. The implementation of - // |CreateAndOpenTemporaryFileInDir()| starts with an FD, |fdopen()|s to get a - // |FILE*|, and then we have to |dup(fileno(fp))| to get back to an FD that we - // can own. (base/memory/shared_memory_posix.cc does this too, with more - // |fstat()|s thrown in for good measure.) - base::FilePath shared_buffer_dir; - if (!base::GetShmemTempDir(false, &shared_buffer_dir)) { - LOG(ERROR) << "Failed to get temporary directory for shared memory"; - return false; - } - base::FilePath shared_buffer_file; - base::ScopedFILE fp(base::CreateAndOpenTemporaryFileInDir( - shared_buffer_dir, &shared_buffer_file)); - if (!fp) { - LOG(ERROR) << "Failed to create/open temporary file for shared memory"; - return false; - } - // Note: |unlink()| is not interruptible. - if (unlink(shared_buffer_file.value().c_str()) != 0) { - PLOG(WARNING) << "unlink"; - // This isn't "fatal" (e.g., someone else may have unlinked the file first), - // so we may as well continue. - } - - // Note: |dup()| is not interruptible (but |dup2()|/|dup3()| are). - base::ScopedFD fd(dup(fileno(fp.get()))); - if (!fd.is_valid()) { - PLOG(ERROR) << "dup"; - return false; - } - - if (HANDLE_EINTR(ftruncate(fd.get(), static_cast<off_t>(num_bytes_))) != 0) { - PLOG(ERROR) << "ftruncate"; - return false; - } - - handle_.reset(PlatformHandle(fd.release())); - return true; -} - -bool SimplePlatformSharedBuffer::InitFromPlatformHandle( - ScopedPlatformHandle platform_handle) { - DCHECK(!handle_.is_valid()); - - if (static_cast<uint64_t>(num_bytes_) > - static_cast<uint64_t>(std::numeric_limits<off_t>::max())) { - return false; - } - - struct stat sb = {}; - // Note: |fstat()| isn't interruptible. - if (fstat(platform_handle.get().handle, &sb) != 0) { - PLOG(ERROR) << "fstat"; - return false; - } - - if (!S_ISREG(sb.st_mode)) { - LOG(ERROR) << "Platform handle not to a regular file"; - return false; - } - - if (sb.st_size != static_cast<off_t>(num_bytes_)) { - LOG(ERROR) << "Shared memory file has the wrong size"; - return false; - } - - // TODO(vtl): More checks? - - handle_ = std::move(platform_handle); - return true; -} - -#endif // !defined(OS_ANDROID) - -scoped_ptr<PlatformSharedBufferMapping> SimplePlatformSharedBuffer::MapImpl( - size_t offset, - size_t length) { - size_t offset_rounding = offset % base::SysInfo::VMAllocationGranularity(); - size_t real_offset = offset - offset_rounding; - size_t real_length = length + offset_rounding; - - // This should hold (since we checked |num_bytes| versus the maximum value of - // |off_t| on creation, but it never hurts to be paranoid. - DCHECK_LE(static_cast<uint64_t>(real_offset), - static_cast<uint64_t>(std::numeric_limits<off_t>::max())); - - void* real_base = - mmap(nullptr, real_length, PROT_READ | PROT_WRITE, MAP_SHARED, - handle_.get().handle, static_cast<off_t>(real_offset)); - // |mmap()| should return |MAP_FAILED| (a.k.a. -1) on error. But it shouldn't - // return null either. - if (real_base == MAP_FAILED || !real_base) { - PLOG(ERROR) << "mmap"; - return nullptr; - } - - void* base = static_cast<char*>(real_base) + offset_rounding; - return make_scoped_ptr(new SimplePlatformSharedBufferMapping( - base, length, real_base, real_length)); -} - -// SimplePlatformSharedBufferMapping ------------------------------------------- - -void SimplePlatformSharedBufferMapping::Unmap() { - int result = munmap(real_base_, real_length_); - PLOG_IF(ERROR, result != 0) << "munmap"; -} - -} // namespace edk -} // namespace mojo
diff --git a/mojo/edk/embedder/simple_platform_shared_buffer_win.cc b/mojo/edk/embedder/simple_platform_shared_buffer_win.cc deleted file mode 100644 index b9664a2..0000000 --- a/mojo/edk/embedder/simple_platform_shared_buffer_win.cc +++ /dev/null
@@ -1,90 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "mojo/edk/embedder/simple_platform_shared_buffer.h" - -#include <windows.h> -#include <stddef.h> -#include <stdint.h> - -#include <limits> - -#include "base/logging.h" -#include "base/sys_info.h" -#include "mojo/edk/embedder/platform_handle.h" -#include "mojo/edk/embedder/scoped_platform_handle.h" - -namespace mojo { -namespace edk { - -// SimplePlatformSharedBuffer -------------------------------------------------- - -bool SimplePlatformSharedBuffer::Init() { - DCHECK(!handle_.is_valid()); - - // TODO(vtl): Currently, we only support mapping up to 2^32-1 bytes. - if (static_cast<uint64_t>(num_bytes_) > - static_cast<uint64_t>(std::numeric_limits<DWORD>::max())) { - return false; - } - - // IMPORTANT NOTE: Unnamed objects are NOT SECURABLE. Thus if we ever want to - // share read-only to other processes, we'll have to name our file mapping - // object. - // TODO(vtl): Unlike |base::SharedMemory|, we don't round up the size (to a - // multiple of 64 KB). This may cause problems with NaCl. Cross this bridge - // when we get there. crbug.com/210609 - handle_.reset(PlatformHandle( - CreateFileMapping(INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, 0, - static_cast<DWORD>(num_bytes_), nullptr))); - if (!handle_.is_valid()) { - PLOG(ERROR) << "CreateFileMapping"; - return false; - } - - return true; -} - -bool SimplePlatformSharedBuffer::InitFromPlatformHandle( - ScopedPlatformHandle platform_handle) { - DCHECK(!handle_.is_valid()); - - handle_ = platform_handle.Pass(); - return true; -} - -scoped_ptr<PlatformSharedBufferMapping> SimplePlatformSharedBuffer::MapImpl( - size_t offset, - size_t length) { - size_t offset_rounding = offset % base::SysInfo::VMAllocationGranularity(); - size_t real_offset = offset - offset_rounding; - size_t real_length = length + offset_rounding; - - // This should hold (since we checked |num_bytes| versus the maximum value of - // |off_t| on creation, but it never hurts to be paranoid. - DCHECK_LE(static_cast<uint64_t>(real_offset), - static_cast<uint64_t>(std::numeric_limits<DWORD>::max())); - - void* real_base = - MapViewOfFile(handle_.get().handle, FILE_MAP_READ | FILE_MAP_WRITE, 0, - static_cast<DWORD>(real_offset), real_length); - if (!real_base) { - PLOG(ERROR) << "MapViewOfFile"; - return nullptr; - } - - void* base = static_cast<char*>(real_base) + offset_rounding; - return make_scoped_ptr(new SimplePlatformSharedBufferMapping( - base, length, real_base, real_length)); -} - -// SimplePlatformSharedBufferMapping ------------------------------------------- - -void SimplePlatformSharedBufferMapping::Unmap() { - BOOL result = UnmapViewOfFile(real_base_); - PLOG_IF(ERROR, !result) << "UnmapViewOfFile"; -} - -} // namespace edk -} // namespace mojo
diff --git a/mojo/edk/system/channel.cc b/mojo/edk/system/channel.cc index ab138b9..2d6142e 100644 --- a/mojo/edk/system/channel.cc +++ b/mojo/edk/system/channel.cc
@@ -27,7 +27,9 @@ const size_t kMaxUnusedReadBufferCapacity = 256 * 1024; const size_t kMaxChannelMessageSize = 256 * 1024 * 1024; -Channel::Message::Message(size_t payload_size, size_t num_handles) { +Channel::Message::Message(size_t payload_size, + size_t num_handles, + Header::MessageType message_type) { size_ = payload_size + sizeof(Header); #if defined(OS_WIN) // On Windows we serialize platform handles directly into the message buffer. @@ -45,7 +47,7 @@ DCHECK_LE(num_handles, std::numeric_limits<uint16_t>::max()); header_->num_handles = static_cast<uint16_t>(num_handles); - header_->padding = 0; + header_->message_type = message_type; #if defined(OS_WIN) if (num_handles > 0) { @@ -158,6 +160,29 @@ #endif } +#if defined(OS_WIN) +// static +bool Channel::Message::RewriteHandles(base::ProcessHandle from_process, + base::ProcessHandle to_process, + PlatformHandle* handles, + size_t num_handles) { + bool success = true; + for (size_t i = 0; i < num_handles; ++i) { + if (!handles[i].is_valid()) { + DLOG(ERROR) << "Refusing to duplicate invalid handle."; + continue; + } + BOOL result = DuplicateHandle( + from_process, handles[i].handle, to_process, + reinterpret_cast<HANDLE*>(handles + i), 0, FALSE, + DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE); + if (!result) + success = false; + } + return success; +} +#endif + // Helper class for managing a Channel's read buffer allocations. This maintains // a single contiguous buffer with the layout: // @@ -319,7 +344,11 @@ } // We've got a complete message! Dispatch it and try another. - if (delegate_) { + if (header->message_type != Message::Header::MessageType::NORMAL) { + OnControlMessage(header->message_type, payload, payload_size, + std::move(handles)); + did_dispatch_message = true; + } else if (delegate_) { delegate_->OnChannelMessage(payload, payload_size, std::move(handles)); did_dispatch_message = true; }
diff --git a/mojo/edk/system/channel.h b/mojo/edk/system/channel.h index 52e8b1e..bfc1232 100644 --- a/mojo/edk/system/channel.h +++ b/mojo/edk/system/channel.h
@@ -8,6 +8,7 @@ #include "base/logging.h" #include "base/macros.h" #include "base/memory/ref_counted.h" +#include "base/process/process_handle.h" #include "base/task_runner.h" #include "mojo/edk/embedder/platform_handle_vector.h" #include "mojo/edk/embedder/scoped_platform_handle.h" @@ -29,20 +30,32 @@ // A message to be written to a channel. struct Message { struct Header { + enum class MessageType : uint16_t { + // A normal message. + NORMAL = 0, +#if defined(OS_MACOSX) + // A control message containing handles to echo back. + HANDLES_SENT, + // A control message containing handles that can now be closed. + HANDLES_SENT_ACK, +#endif + }; + // Message size in bytes, including the header. uint32_t num_bytes; // Number of attached handles. uint16_t num_handles; - // Zero - uint16_t padding; + MessageType message_type; }; // Allocates and owns a buffer for message data with enough capacity for // |payload_size| bytes plus a header. Takes ownership of |handles|, which // may be null. - Message(size_t payload_size, size_t num_handles); + Message(size_t payload_size, + size_t num_handles, + Header::MessageType message_type = Header::MessageType::NORMAL); ~Message(); @@ -67,6 +80,18 @@ void SetHandles(ScopedPlatformHandleVectorPtr new_handles); ScopedPlatformHandleVectorPtr TakeHandles(); +#if defined(OS_WIN) + // Prepares the handles in this message for use in a different process. + // Upon calling this the handles should belong to |from_process|; after the + // call they'll belong to |to_process|. The source handles are always + // closed by this call. Returns false iff one or more handles failed + // duplication. + static bool RewriteHandles(base::ProcessHandle from_process, + base::ProcessHandle to_process, + PlatformHandle* handles, + size_t num_handles); +#endif + private: size_t size_; char* data_; @@ -162,6 +187,11 @@ void** payload, size_t* payload_size) = 0; + virtual void OnControlMessage(Message::Header::MessageType message_type, + const void* payload, + size_t payload_size, + ScopedPlatformHandleVectorPtr handles) {} + private: friend class base::RefCountedThreadSafe<Channel>;
diff --git a/mojo/edk/system/channel_posix.cc b/mojo/edk/system/channel_posix.cc index 8abe4c5..d09c0bc5 100644 --- a/mojo/edk/system/channel_posix.cc +++ b/mojo/edk/system/channel_posix.cc
@@ -84,7 +84,12 @@ : Channel(delegate), self_(this), handle_(std::move(handle)), - io_task_runner_(io_task_runner) { + io_task_runner_(io_task_runner) +#if defined(OS_MACOSX) + , + handles_to_close_(new PlatformHandleVector) +#endif + { } void Start() override { @@ -184,6 +189,9 @@ read_watcher_.reset(); write_watcher_.reset(); handle_.reset(); +#if defined(OS_MACOSX) + handles_to_close_.reset(); +#endif // May destroy the |this| if it was the last reference. self_ = nullptr; @@ -269,7 +277,33 @@ // TODO: Handle lots of handles. result = PlatformChannelSendmsgWithHandles( handle_.get(), &iov, 1, handles->data(), handles->size()); +#if defined(OS_MACOSX) + // There is a bug on OSX which makes it dangerous to close + // a file descriptor while it is in transit. So instead we + // store the file descriptor in a set and send a message to + // the recipient, which is queued AFTER the message that + // sent the FD. The recipient will reply to the message, + // letting us know that it is now safe to close the file + // descriptor. For more information, see: + // http://crbug.com/298276 + std::vector<int> fds; + for (auto& handle : *handles) + fds.push_back(handle.handle); + { + base::AutoLock l(handles_to_close_lock_); + for (auto& handle : *handles) + handles_to_close_->push_back(handle); + } + MessagePtr fds_message( + new Channel::Message(sizeof(fds[0]) * fds.size(), 0, + Message::Header::MessageType::HANDLES_SENT)); + memcpy(fds_message->mutable_payload(), fds.data(), + sizeof(fds[0]) * fds.size()); + outgoing_messages_.emplace_back(std::move(fds_message), 0); handles->clear(); +#else + handles.reset(); +#endif // defined(OS_MACOSX) } else { result = PlatformChannelWrite(handle_.get(), message_view.data(), message_view.data_num_bytes()); @@ -278,7 +312,7 @@ if (result < 0) { if (errno != EAGAIN && errno != EWOULDBLOCK) return false; - outgoing_messages_.emplace_back(std::move(message_view)); + outgoing_messages_.emplace_front(std::move(message_view)); WaitForWriteOnIOThreadNoLock(); return true; } @@ -286,7 +320,7 @@ bytes_written = static_cast<size_t>(result); } while (bytes_written < message_view.data_num_bytes()); - return true; + return FlushOutgoingMessagesNoLock(); } bool FlushOutgoingMessagesNoLock() { @@ -301,10 +335,14 @@ if (!outgoing_messages_.empty()) { // The message was requeued by WriteNoLock(), so we have to wait for // pipe to become writable again. Repopulate the message queue and exit. - DCHECK_EQ(outgoing_messages_.size(), 1u); - MessageView message_view = std::move(outgoing_messages_.front()); + // If sending the message triggered any control messages, they may be + // in |outgoing_messages_| in addition to or instead of the message + // being sent. std::swap(messages, outgoing_messages_); - outgoing_messages_.push_front(std::move(message_view)); + while (!messages.empty()) { + outgoing_messages_.push_front(std::move(messages.back())); + messages.pop_back(); + } return true; } } @@ -312,6 +350,66 @@ return true; } +#if defined(OS_MACOSX) + void OnControlMessage(Message::Header::MessageType message_type, + const void* payload, + size_t payload_size, + ScopedPlatformHandleVectorPtr handles) override { + switch (message_type) { + case Message::Header::MessageType::HANDLES_SENT: { + MessagePtr message(new Channel::Message( + payload_size, 0, Message::Header::MessageType::HANDLES_SENT_ACK)); + memcpy(message->mutable_payload(), payload, payload_size); + Write(std::move(message)); + break; + } + case Message::Header::MessageType::HANDLES_SENT_ACK: { + const int* fds = reinterpret_cast<const int*>(payload); + size_t num_fds = payload_size / sizeof(*fds); + if (payload_size % sizeof(*fds) != 0 || !CloseHandles(fds, num_fds)) { + io_task_runner_->PostTask(FROM_HERE, + base::Bind(&ChannelPosix::OnError, this)); + } + break; + } + default: + NOTREACHED(); + } + } + + // Closes handles referenced by |fds|. Returns false if |num_fds| is 0, or if + // |fds| does not match a sequence of handles in |handles_to_close_|. + bool CloseHandles(const int* fds, size_t num_fds) { + base::AutoLock l(handles_to_close_lock_); + if (!num_fds) + return false; + + auto start = + std::find_if(handles_to_close_->begin(), handles_to_close_->end(), + [&fds](const PlatformHandle& handle) { + return handle.handle == fds[0]; + }); + if (start == handles_to_close_->end()) + return false; + + auto it = start; + size_t i = 0; + // The FDs in the message should match a sequence of handles in + // |handles_to_close_|. + for (; i < num_fds && it != handles_to_close_->end(); i++, ++it) { + if (it->handle != fds[i]) + return false; + + it->CloseIfNecessary(); + } + if (i != num_fds) + return false; + + handles_to_close_->erase(start, it); + return true; + } +#endif // defined(OS_MACOSX) + // Keeps the Channel alive at least until explicit shutdown on the IO thread. scoped_refptr<Channel> self_; @@ -330,6 +428,11 @@ bool reject_writes_ = false; std::deque<MessageView> outgoing_messages_; +#if defined(OS_MACOSX) + base::Lock handles_to_close_lock_; + ScopedPlatformHandleVectorPtr handles_to_close_; +#endif + DISALLOW_COPY_AND_ASSIGN(ChannelPosix); };
diff --git a/mojo/edk/system/message_pipe_unittest.cc b/mojo/edk/system/message_pipe_unittest.cc index 48a2373..2b8af2ef 100644 --- a/mojo/edk/system/message_pipe_unittest.cc +++ b/mojo/edk/system/message_pipe_unittest.cc
@@ -6,6 +6,7 @@ #include "base/memory/ref_counted.h" #include "mojo/edk/system/test_utils.h" +#include "mojo/edk/test/mojo_test_base.h" #include "mojo/public/c/system/core.h" #include "mojo/public/c/system/types.h" @@ -18,7 +19,7 @@ MOJO_HANDLE_SIGNAL_PEER_CLOSED; static const char kHelloWorld[] = "hello world"; -class MessagePipeTest : public testing::Test { +class MessagePipeTest : public test::MojoTestBase { public: MessagePipeTest() { CHECK_EQ(MOJO_RESULT_OK, MojoCreateMessagePipe(nullptr, &pipe0_, &pipe1_)); @@ -406,6 +407,59 @@ ASSERT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); } +const size_t kPingPongIterations = 50000; + +DEFINE_TEST_CLIENT_TEST_WITH_PIPE(DataPipeHandlePingPong, MessagePipeTest, h) { + // Wait for the consumer to become readable. + for (size_t i = 0; i < kPingPongIterations; i++) { + MojoHandle handle; + ReadMessageWithHandles(h, &handle, 1); + WriteMessageWithHandles(h, "", &handle, 1); + } +} + +// Test that sending a data pipe handle across processes doesn't leak resources. +TEST_F(MessagePipeTest, DataPipeConsumerHandlePingPong) { + MojoHandle p, c; + EXPECT_EQ(MOJO_RESULT_OK, MojoCreateDataPipe(nullptr, &p, &c)); + MojoClose(p); + + RUN_CHILD_ON_PIPE(DataPipeHandlePingPong, h) + for (size_t i = 0; i < kPingPongIterations; i++) { + WriteMessageWithHandles(h, "", &c, 1); + ReadMessageWithHandles(h, &c, 1); + } + END_CHILD() + MojoClose(c); +} + +TEST_F(MessagePipeTest, DataPipeProducerHandlePingPong) { + MojoHandle p, c; + EXPECT_EQ(MOJO_RESULT_OK, MojoCreateDataPipe(nullptr, &p, &c)); + MojoClose(c); + + RUN_CHILD_ON_PIPE(DataPipeHandlePingPong, h) + for (size_t i = 0; i < kPingPongIterations; i++) { + WriteMessageWithHandles(h, "", &p, 1); + ReadMessageWithHandles(h, &p, 1); + } + END_CHILD() + MojoClose(p); +} + +TEST_F(MessagePipeTest, SharedBufferHandlePingPong) { + MojoHandle buffer; + EXPECT_EQ(MOJO_RESULT_OK, MojoCreateSharedBuffer(nullptr, 1, &buffer)); + + RUN_CHILD_ON_PIPE(DataPipeHandlePingPong, h) + for (size_t i = 0; i < kPingPongIterations; i++) { + WriteMessageWithHandles(h, "", &buffer, 1); + ReadMessageWithHandles(h, &buffer, 1); + } + END_CHILD() + MojoClose(buffer); +} + } // namespace } // namespace edk } // namespace mojo
diff --git a/mojo/edk/system/node_channel.cc b/mojo/edk/system/node_channel.cc index b8d42e94..4fb0ac4 100644 --- a/mojo/edk/system/node_channel.cc +++ b/mojo/edk/system/node_channel.cc
@@ -25,6 +25,9 @@ enum class MessageType : uint32_t { ACCEPT_CHILD, ACCEPT_PARENT, + ADD_BROKER_CLIENT, + BROKER_CLIENT_ADDED, + ACCEPT_BROKER_CLIENT, PORTS_MESSAGE, REQUEST_PORT_CONNECTION, CONNECT_TO_PORT, @@ -53,6 +56,22 @@ ports::NodeName child_name; }; +// This message may include a process handle on plaforms that require it. +struct AddBrokerClientData { + ports::NodeName client_name; +}; + +// This data is followed by a platform channel handle to the broker. +struct BrokerClientAddedData { + ports::NodeName client_name; +}; + +// This data may be followed by a platform channel handle to the broker. If not, +// then the parent is the broker and its channel should be used as such. +struct AcceptBrokerClientData { + ports::NodeName broker_name; +}; + // This is followed by arbitrary payload data which is interpreted as a token // string for port location. struct RequestPortConnectionData { @@ -66,9 +85,10 @@ // Used for both REQUEST_INTRODUCTION and INTRODUCE. // -// For INTRODUCE the message must also include a platform handle the recipient -// can use to communicate with the named node. If said handle is omitted, the -// peer cannot be introduced. +// For INTRODUCE the message also includes a valid platform handle for a channel +// the receiver may use to communicate with the named node directly, or an +// invalid platform handle if the node is unknown to the sender or otherwise +// cannot be introduced. struct IntroductionData { ports::NodeName name; }; @@ -148,6 +168,33 @@ #endif } +bool NodeChannel::HasRemoteProcessHandle() { +#if defined(OS_WIN) + base::AutoLock lock(remote_process_handle_lock_); + return remote_process_handle_ != base::kNullProcessHandle; +#else + return false; +#endif +} + +ScopedPlatformHandle NodeChannel::CopyRemoteProcessHandle() { +#if defined(OS_WIN) + base::AutoLock lock(remote_process_handle_lock_); + if (remote_process_handle_ != base::kNullProcessHandle) { + // Privileged nodes use this to pass their childrens' process handles to the + // broker on launch. + HANDLE handle = remote_process_handle_; + BOOL result = DuplicateHandle( + base::GetCurrentProcessHandle(), remote_process_handle_, + base::GetCurrentProcessHandle(), &handle, 0, FALSE, + DUPLICATE_SAME_ACCESS); + DCHECK(result); + return ScopedPlatformHandle(PlatformHandle(handle)); + } +#endif + return ScopedPlatformHandle(); +} + void NodeChannel::SetRemoteNodeName(const ports::NodeName& name) { DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); remote_node_name_ = name; @@ -173,6 +220,49 @@ WriteChannelMessage(std::move(message)); } +void NodeChannel::AddBrokerClient(const ports::NodeName& client_name, + ScopedPlatformHandle process_handle) { + AddBrokerClientData* data; + ScopedPlatformHandleVectorPtr handles(new PlatformHandleVector()); +#if defined(OS_WIN) + handles->push_back(process_handle.release()); +#endif + Channel::MessagePtr message = CreateMessage( + MessageType::ADD_BROKER_CLIENT, sizeof(AddBrokerClientData), + handles->size(), &data); + message->SetHandles(std::move(handles)); + data->client_name = client_name; + WriteChannelMessage(std::move(message)); +} + +void NodeChannel::BrokerClientAdded(const ports::NodeName& client_name, + ScopedPlatformHandle broker_channel) { + BrokerClientAddedData* data; + ScopedPlatformHandleVectorPtr handles(new PlatformHandleVector()); + if (broker_channel.is_valid()) + handles->push_back(broker_channel.release()); + Channel::MessagePtr message = CreateMessage( + MessageType::BROKER_CLIENT_ADDED, sizeof(BrokerClientAddedData), + handles->size(), &data); + message->SetHandles(std::move(handles)); + data->client_name = client_name; + WriteChannelMessage(std::move(message)); +} + +void NodeChannel::AcceptBrokerClient(const ports::NodeName& broker_name, + ScopedPlatformHandle broker_channel) { + AcceptBrokerClientData* data; + ScopedPlatformHandleVectorPtr handles(new PlatformHandleVector()); + if (broker_channel.is_valid()) + handles->push_back(broker_channel.release()); + Channel::MessagePtr message = CreateMessage( + MessageType::ACCEPT_BROKER_CLIENT, sizeof(AcceptBrokerClientData), + handles->size(), &data); + message->SetHandles(std::move(handles)); + data->broker_name = broker_name; + WriteChannelMessage(std::move(message)); +} + void NodeChannel::PortsMessage(Channel::MessagePtr message) { WriteChannelMessage(std::move(message)); } @@ -208,15 +298,13 @@ } void NodeChannel::Introduce(const ports::NodeName& name, - ScopedPlatformHandle handle) { + ScopedPlatformHandle channel_handle) { IntroductionData* data; - ScopedPlatformHandleVectorPtr handles; - if (handle.is_valid()) { - handles.reset(new PlatformHandleVector(1)); - handles->at(0) = handle.release(); - } + ScopedPlatformHandleVectorPtr handles(new PlatformHandleVector()); + if (channel_handle.is_valid()) + handles->push_back(channel_handle.release()); Channel::MessagePtr message = CreateMessage( - MessageType::INTRODUCE, sizeof(IntroductionData), handles ? 1 : 0, &data); + MessageType::INTRODUCE, sizeof(IntroductionData), handles->size(), &data); message->SetHandles(std::move(handles)); data->name = name; WriteChannelMessage(std::move(message)); @@ -266,6 +354,22 @@ ScopedPlatformHandleVectorPtr handles) { DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); +#if defined(OS_WIN) + // If we receive handles from a known process, rewrite them to our own + // process. This can occur when a privileged node receives handles directly + // from a privileged descendant. + { + base::AutoLock lock(remote_process_handle_lock_); + if (handles && remote_process_handle_ != base::kNullProcessHandle) { + if (!Channel::Message::RewriteHandles(remote_process_handle_, + base::GetCurrentProcessHandle(), + handles->data(), handles->size())) { + DLOG(ERROR) << "Received one or more invalid handles."; + } + } + } +#endif + const Header* header = static_cast<const Header*>(payload); switch (header->type) { case MessageType::ACCEPT_CHILD: { @@ -284,6 +388,60 @@ break; } + case MessageType::ADD_BROKER_CLIENT: { + const AddBrokerClientData* data; + GetMessagePayload(payload, &data); + ScopedPlatformHandle process_handle; +#if defined(OS_WIN) + if (!handles || handles->size() != 1) { + DLOG(ERROR) << "Dropping invalid AddBrokerClient message."; + break; + } + process_handle = ScopedPlatformHandle(handles->at(0)); + handles->clear(); +#else + if (handles && handles->size() != 0) { + DLOG(ERROR) << "Dropping invalid AddBrokerClient message."; + break; + } +#endif + delegate_->OnAddBrokerClient(remote_node_name_, data->client_name, + std::move(process_handle)); + break; + } + + case MessageType::BROKER_CLIENT_ADDED: { + const BrokerClientAddedData* data; + GetMessagePayload(payload, &data); + ScopedPlatformHandle broker_channel; + if (!handles || handles->size() != 1) { + DLOG(ERROR) << "Dropping invalid BrokerClientAdded message."; + break; + } + broker_channel = ScopedPlatformHandle(handles->at(0)); + handles->clear(); + delegate_->OnBrokerClientAdded(remote_node_name_, data->client_name, + std::move(broker_channel)); + break; + } + + case MessageType::ACCEPT_BROKER_CLIENT: { + const AcceptBrokerClientData* data; + GetMessagePayload(payload, &data); + ScopedPlatformHandle broker_channel; + if (handles && handles->size() > 1) { + DLOG(ERROR) << "Dropping invalid AcceptBrokerClient message."; + break; + } + if (handles && handles->size() == 1) { + broker_channel = ScopedPlatformHandle(handles->at(0)); + handles->clear(); + } + delegate_->OnAcceptBrokerClient(remote_node_name_, data->broker_name, + std::move(broker_channel)); + break; + } + case MessageType::PORTS_MESSAGE: { size_t num_handles = handles ? handles->size() : 0; Channel::MessagePtr message( @@ -325,12 +483,17 @@ case MessageType::INTRODUCE: { const IntroductionData* data; GetMessagePayload(payload, &data); - ScopedPlatformHandle handle; - if (handles && !handles->empty()) { - handle = ScopedPlatformHandle(handles->at(0)); + if (handles && handles->size() > 1) { + DLOG(ERROR) << "Dropping invalid introduction message."; + break; + } + ScopedPlatformHandle channel_handle; + if (handles && handles->size() == 1) { + channel_handle = ScopedPlatformHandle(handles->at(0)); handles->clear(); } - delegate_->OnIntroduce(remote_node_name_, data->name, std::move(handle)); + delegate_->OnIntroduce(remote_node_name_, data->name, + std::move(channel_handle)); break; } @@ -378,10 +541,11 @@ void NodeChannel::WriteChannelMessage(Channel::MessagePtr message) { #if defined(OS_WIN) - // Map handles to the destination process. Note: only messages from the parent - // node should contain handles on Windows. If a child node needs to send - // handles, it should do so via RelayPortsMessage, which stashes the handles - // in the message in such a way that they go undetected here. + // Map handles to the destination process. Note: only messages from a + // privileged node should contain handles on Windows. If an unprivileged + // node needs to send handles, it should do so via RelayPortsMessage which + // stashes the handles in the message in such a way that they go undetected + // here (they'll be unpacked and duplicated by a privileged parent.) if (message->has_handles()) { base::ProcessHandle remote_process_handle; @@ -390,17 +554,12 @@ remote_process_handle = remote_process_handle_; } - if (remote_process_handle == base::kNullProcessHandle) { - DLOG(ERROR) << "Sending a message with handles as a non-parent. " - << "This is most likely broken."; - } else { - for (size_t i = 0; i < message->num_handles(); ++i) { - BOOL result = DuplicateHandle( - base::GetCurrentProcessHandle(), message->handles()[i].handle, - remote_process_handle, - reinterpret_cast<HANDLE*>(message->handles() + i), 0, FALSE, - DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE); - DCHECK(result); + // Rewrite outgoing handles if we have a handle to the destination process. + if (remote_process_handle != base::kNullProcessHandle) { + if (!message->RewriteHandles(base::GetCurrentProcessHandle(), + remote_process_handle, message->handles(), + message->num_handles())) { + DLOG(ERROR) << "Failed to duplicate one or more outgoing handles."; } } }
diff --git a/mojo/edk/system/node_channel.h b/mojo/edk/system/node_channel.h index 9470e2a..a9bc520 100644 --- a/mojo/edk/system/node_channel.h +++ b/mojo/edk/system/node_channel.h
@@ -34,6 +34,15 @@ virtual void OnAcceptParent(const ports::NodeName& from_node, const ports::NodeName& token, const ports::NodeName& child_name) = 0; + virtual void OnAddBrokerClient(const ports::NodeName& from_node, + const ports::NodeName& client_name, + ScopedPlatformHandle process_handle) = 0; + virtual void OnBrokerClientAdded(const ports::NodeName& from_node, + const ports::NodeName& client_name, + ScopedPlatformHandle broker_channel) = 0; + virtual void OnAcceptBrokerClient(const ports::NodeName& from_node, + const ports::NodeName& broker_name, + ScopedPlatformHandle broker_channel) = 0; virtual void OnPortsMessage(Channel::MessagePtr message) = 0; virtual void OnRequestPortConnection( const ports::NodeName& from_node, @@ -77,6 +86,8 @@ void ShutDown(); void SetRemoteProcessHandle(base::ProcessHandle process_handle); + bool HasRemoteProcessHandle(); + ScopedPlatformHandle CopyRemoteProcessHandle(); // Used for context in Delegate calls (via |from_node| arguments.) void SetRemoteNodeName(const ports::NodeName& name); @@ -85,13 +96,20 @@ const ports::NodeName& token); void AcceptParent(const ports::NodeName& token, const ports::NodeName& child_name); + void AddBrokerClient(const ports::NodeName& client_name, + ScopedPlatformHandle process_handle); + void BrokerClientAdded(const ports::NodeName& client_name, + ScopedPlatformHandle broker_channel); + void AcceptBrokerClient(const ports::NodeName& broker_name, + ScopedPlatformHandle broker_channel); void PortsMessage(Channel::MessagePtr message); void RequestPortConnection(const ports::PortName& connector_port_name, const std::string& token); void ConnectToPort(const ports::PortName& connector_port_name, const ports::PortName& connectee_port_name); void RequestIntroduction(const ports::NodeName& name); - void Introduce(const ports::NodeName& name, ScopedPlatformHandle handle); + void Introduce(const ports::NodeName& name, + ScopedPlatformHandle channel_handle); #if defined(OS_WIN) // Relay the message to the specified node via this channel. This is used to
diff --git a/mojo/edk/system/node_controller.cc b/mojo/edk/system/node_controller.cc index b0e7544..6410caef 100644 --- a/mojo/edk/system/node_controller.cc +++ b/mojo/edk/system/node_controller.cc
@@ -13,6 +13,7 @@ #include "base/macros.h" #include "base/message_loop/message_loop.h" #include "base/metrics/histogram_macros.h" +#include "base/process/process_handle.h" #include "crypto/random.h" #include "mojo/edk/embedder/embedder_internal.h" #include "mojo/edk/embedder/platform_channel_pair.h" @@ -271,17 +272,21 @@ NodeChannel::Create(this, std::move(platform_handle), io_task_runner_); #endif + // We set up the child channel with a temporary name so it can be identified + // as a pending child if it writes any messages to the channel. We may start + // receiving messages from it (though we shouldn't) as soon as Start() is + // called below. ports::NodeName token; GenerateRandomName(&token); + pending_children_.insert(std::make_pair(token, channel)); + RecordPendingChildCount(pending_children_.size()); + channel->SetRemoteNodeName(token); channel->SetRemoteProcessHandle(process_handle); channel->Start(); + channel->AcceptChild(name_, token); - - pending_children_.insert(std::make_pair(token, channel)); - - RecordPendingChildCount(pending_children_.size()); } void NodeController::ConnectToParentOnIOThread( @@ -334,7 +339,7 @@ return; } - // Save this for later. We'll initialize the port once this:: peer is added. + // Save this for later. We'll initialize the port once this peer is added. pending_remote_port_connections_[connection.remote_node_name].push_back( connection); } @@ -357,6 +362,15 @@ return GetPeerChannel(parent_name); } +scoped_refptr<NodeChannel> NodeController::GetBrokerChannel() { + ports::NodeName broker_name; + { + base::AutoLock lock(broker_lock_); + broker_name = broker_name_; + } + return GetPeerChannel(broker_name); +} + void NodeController::AddPeer(const ports::NodeName& name, scoped_refptr<NodeChannel> channel, bool start_channel) { @@ -397,9 +411,7 @@ // Flush any queued message we need to deliver to this node. while (!pending_messages.empty()) { - ports::ScopedMessage message = std::move(pending_messages.front()); - channel->PortsMessage( - static_cast<PortsMessage*>(message.get())->TakeChannelMessage()); + channel->PortsMessage(std::move(pending_messages.front())); pending_messages.pop(); } @@ -442,28 +454,35 @@ void NodeController::SendPeerMessage(const ports::NodeName& name, ports::ScopedMessage message) { - PortsMessage* ports_message = static_cast<PortsMessage*>(message.get()); + Channel::MessagePtr channel_message = + static_cast<PortsMessage*>(message.get())->TakeChannelMessage(); + scoped_refptr<NodeChannel> peer = GetPeerChannel(name); #if defined(OS_WIN) - // If we're sending a message with handles and we're not the parent, - // relay the message through the parent. - if (ports_message->has_handles()) { - scoped_refptr<NodeChannel> parent = GetParentChannel(); - if (parent) { - parent->RelayPortsMessage(name, ports_message->TakeChannelMessage()); + if (channel_message->has_handles()) { + // If we're sending a message with handles we aren't the destination + // node's parent or broker (i.e. we don't know its process handle), ask + // the broker to relay for us. + scoped_refptr<NodeChannel> broker = GetBrokerChannel(); + if (!peer || !peer->HasRemoteProcessHandle()) { + if (broker) { + broker->RelayPortsMessage(name, std::move(channel_message)); + } else { + base::AutoLock lock(broker_lock_); + pending_relay_messages_[name].emplace(std::move(channel_message)); + } return; } } #endif - scoped_refptr<NodeChannel> peer = GetPeerChannel(name); if (peer) { - peer->PortsMessage(ports_message->TakeChannelMessage()); + peer->PortsMessage(std::move(channel_message)); return; } // If we don't know who the peer is, queue the message for delivery. If this - // is the first message queued for the peer, we also ask the parent to + // is the first message queued for the peer, we also ask the broker to // introduce us to them. bool needs_introduction = false; @@ -471,16 +490,16 @@ base::AutoLock lock(peers_lock_); auto& queue = pending_peer_messages_[name]; needs_introduction = queue.empty(); - queue.emplace(std::move(message)); + queue.emplace(std::move(channel_message)); } if (needs_introduction) { - scoped_refptr<NodeChannel> parent = GetParentChannel(); - if (!parent) { + scoped_refptr<NodeChannel> broker = GetBrokerChannel(); + if (!broker) { DVLOG(1) << "Dropping message for unknown peer: " << name; return; } - parent->RequestIntroduction(name); + broker->RequestIntroduction(name); } } @@ -589,20 +608,14 @@ parent_name_ = parent_name; parent = bootstrap_parent_channel_; - bootstrap_parent_channel_ = nullptr; } + parent->SetRemoteNodeName(parent_name); parent->AcceptParent(token, name_); - for (const auto& request : pending_port_requests_) { - pending_parent_port_connections_.insert( - std::make_pair(request.local_port.name(), request.callback)); - parent->RequestPortConnection(request.local_port.name(), request.token); - } - pending_port_requests_.clear(); - DVLOG(1) << "Child " << name_ << " accepting parent " << parent_name; - - AddPeer(parent_name_, parent, false /* start_channel */); + // NOTE: The child does not actually add its parent as a peer until + // receiving an AcceptBrokerClient message from the broker. The parent + // will request that said message be sent upon receiving AcceptParent. } void NodeController::OnAcceptParent(const ports::NodeName& from_node, @@ -625,26 +638,163 @@ DVLOG(1) << "Parent " << name_ << " accepted child " << child_name; - // If the child has a grandparent, we want to make sure they're introduced - // as well. The grandparent will be sent a named channel handle, then we'll - // add the child as our peer, then we'll introduce the child to the parent. - - scoped_refptr<NodeChannel> parent = GetParentChannel(); - ports::NodeName parent_name; - scoped_ptr<PlatformChannelPair> grandparent_channel; - if (parent) { - base::AutoLock lock(parent_lock_); - parent_name = parent_name_; - grandparent_channel.reset(new PlatformChannelPair); - } - - if (grandparent_channel) - parent->Introduce(child_name, grandparent_channel->PassServerHandle()); - AddPeer(child_name, channel, false /* start_channel */); - if (grandparent_channel) - channel->Introduce(parent_name, grandparent_channel->PassClientHandle()); + // TODO(rockot/amistry): We could simplify child initialization if we could + // synchronously get a new async broker channel from the broker. For now we do + // it asynchronously since it's only used to facilitate handle passing, not + // handle creation. + scoped_refptr<NodeChannel> broker = GetBrokerChannel(); + if (broker) { + // Inform the broker of this new child. + broker->AddBrokerClient(child_name, channel->CopyRemoteProcessHandle()); + } else { + // If we have no broker, either we need to wait for one, or we *are* the + // broker. + scoped_refptr<NodeChannel> parent = GetParentChannel(); + if (!parent) { + base::AutoLock lock(parent_lock_); + parent = bootstrap_parent_channel_; + } + + if (!parent) { + // Yes, we're the broker. We can initialize the child directly. + channel->AcceptBrokerClient(name_, ScopedPlatformHandle()); + } else { + // We aren't the broker, so wait for a broker connection. + base::AutoLock lock(broker_lock_); + pending_broker_clients_.push(child_name); + } + } +} + +void NodeController::OnAddBrokerClient(const ports::NodeName& from_node, + const ports::NodeName& client_name, + ScopedPlatformHandle process_handle) { + scoped_refptr<NodeChannel> sender = GetPeerChannel(from_node); + if (!sender) { + DLOG(ERROR) << "Ignoring AddBrokerClient from unknown sender."; + return; + } + + if (GetPeerChannel(client_name)) { + DLOG(ERROR) << "Ignoring AddBrokerClient for known client."; + DropPeer(from_node); + return; + } + + PlatformChannelPair broker_channel; + scoped_refptr<NodeChannel> client = NodeChannel::Create( + this, broker_channel.PassServerHandle(), io_task_runner_); + +#if defined(OS_WIN) + // The broker must have a working handle to the client process in order to + // properly copy other handles to and from the client. + if(!process_handle.is_valid()) { + DLOG(ERROR) << "Broker rejecting client with invalid process handle."; + return; + } + client->SetRemoteProcessHandle(process_handle.release().handle); +#endif + + AddPeer(client_name, client, true /* start_channel */); + + DVLOG(1) << "Broker " << name_ << " accepting client " << client_name + << " from peer " << from_node; + + sender->BrokerClientAdded(client_name, broker_channel.PassClientHandle()); +} + +void NodeController::OnBrokerClientAdded(const ports::NodeName& from_node, + const ports::NodeName& client_name, + ScopedPlatformHandle broker_channel) { + scoped_refptr<NodeChannel> client = GetPeerChannel(client_name); + if (!client) { + DLOG(ERROR) << "BrokerClientAdded for unknown child " << client_name; + return; + } + + // This should have come from our own broker. + if(GetBrokerChannel() != GetPeerChannel(from_node)) { + DLOG(ERROR) << "BrokerClientAdded from non-broker node " << from_node; + return; + } + + DVLOG(1) << "Child " << client_name << " accepted by broker " << from_node; + + client->AcceptBrokerClient(from_node, std::move(broker_channel)); +} + +void NodeController::OnAcceptBrokerClient(const ports::NodeName& from_node, + const ports::NodeName& broker_name, + ScopedPlatformHandle broker_channel) { + // This node should already have a parent in bootstrap mode. + ports::NodeName parent_name; + scoped_refptr<NodeChannel> parent; + { + base::AutoLock lock(parent_lock_); + parent_name = parent_name_; + parent = bootstrap_parent_channel_; + bootstrap_parent_channel_ = nullptr; + } + DCHECK(parent_name == from_node); + DCHECK(parent); + + std::queue<ports::NodeName> pending_broker_clients; + std::unordered_map<ports::NodeName, OutgoingMessageQueue> + pending_relay_messages; + { + base::AutoLock lock(broker_lock_); + broker_name_ = broker_name; + std::swap(pending_broker_clients, pending_broker_clients_); + std::swap(pending_relay_messages, pending_relay_messages_); + } + DCHECK(broker_name != ports::kInvalidNodeName); + + // It's now possible to add both the broker and the parent as peers. + // Note that the broker and parent may be the same node. + scoped_refptr<NodeChannel> broker; + if (broker_name == parent_name) { + DCHECK(!broker_channel.is_valid()); + broker = parent; + } else { + DCHECK(broker_channel.is_valid()); + broker = NodeChannel::Create(this, std::move(broker_channel), + io_task_runner_); + AddPeer(broker_name, broker, true /* start_channel */); + } + AddPeer(parent_name, parent, false /* start_channel */); + + // Resolve any pending port connections to the parent. + for (const auto& request : pending_port_requests_) { + pending_parent_port_connections_.insert( + std::make_pair(request.local_port.name(), request.callback)); + parent->RequestPortConnection(request.local_port.name(), request.token); + } + pending_port_requests_.clear(); + + // Feed the broker any pending children of our own. + while (!pending_broker_clients.empty()) { + const ports::NodeName& child_name = pending_broker_clients.front(); + auto it = pending_children_.find(child_name); + DCHECK(it != pending_children_.end()); + broker->AddBrokerClient(child_name, it->second->CopyRemoteProcessHandle()); + pending_broker_clients.pop(); + } + +#if defined(OS_WIN) + // Have the broker relay any messages we have waiting. + for (auto& entry : pending_relay_messages) { + const ports::NodeName& destination = entry.first; + auto& message_queue = entry.second; + while (!message_queue.empty()) { + broker->RelayPortsMessage(destination, std::move(message_queue.front())); + message_queue.pop(); + } + } +#endif + + DVLOG(1) << "Child " << name_ << " accepted by broker " << broker_name; } void NodeController::OnPortsMessage(Channel::MessagePtr channel_message) { @@ -800,10 +950,9 @@ base::ProcessHandle from_process, const ports::NodeName& destination, Channel::MessagePtr message) { - scoped_refptr<NodeChannel> parent = GetParentChannel(); - if (parent) { - // Only the parent should be asked to relay a message. - DLOG(ERROR) << "Non-parent refusing to relay message."; + if (GetBrokerChannel()) { + // Only the broker should be asked to relay a message. + LOG(ERROR) << "Non-broker refusing to relay message."; DropPeer(from_node); return; } @@ -811,19 +960,18 @@ // The parent should always know which process this came from. DCHECK(from_process != base::kNullProcessHandle); - // Duplicate the handles to this (the parent) process. If the message is - // destined for another child process, the handles will be duplicated to - // that process before going out (see NodeChannel::WriteChannelMessage). + // Rewrite the handles to this (the parent) process. If the message is + // destined for another child process, the handles will be rewritten to that + // process before going out (see NodeChannel::WriteChannelMessage). // // TODO: We could avoid double-duplication. - for (size_t i = 0; i < message->num_handles(); ++i) { - BOOL result = DuplicateHandle( - from_process, message->handles()[i].handle, - base::GetCurrentProcessHandle(), - reinterpret_cast<HANDLE*>(message->handles() + i), - 0, FALSE, DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE); - DCHECK(result); + if (!Channel::Message::RewriteHandles(from_process, + base::GetCurrentProcessHandle(), + message->handles(), + message->num_handles())) { + DLOG(ERROR) << "Failed to relay one or more handles."; } + if (destination == name_) { // Great, we can deliver this message locally. OnPortsMessage(std::move(message));
diff --git a/mojo/edk/system/node_controller.h b/mojo/edk/system/node_controller.h index 12afeda..35148a0 100644 --- a/mojo/edk/system/node_controller.h +++ b/mojo/edk/system/node_controller.h
@@ -136,7 +136,7 @@ using NodeMap = std::unordered_map<ports::NodeName, scoped_refptr<NodeChannel>>; - using OutgoingMessageQueue = std::queue<ports::ScopedMessage>; + using OutgoingMessageQueue = std::queue<Channel::MessagePtr>; // Tracks a pending token-based connection to a parent port. struct PendingPortRequest { @@ -179,6 +179,7 @@ scoped_refptr<NodeChannel> GetPeerChannel(const ports::NodeName& name); scoped_refptr<NodeChannel> GetParentChannel(); + scoped_refptr<NodeChannel> GetBrokerChannel(); void AddPeer(const ports::NodeName& name, scoped_refptr<NodeChannel> channel, @@ -204,6 +205,15 @@ void OnAcceptParent(const ports::NodeName& from_node, const ports::NodeName& token, const ports::NodeName& child_name) override; + void OnAddBrokerClient(const ports::NodeName& from_node, + const ports::NodeName& client_name, + ScopedPlatformHandle process_handle) override; + void OnBrokerClientAdded(const ports::NodeName& from_node, + const ports::NodeName& client_name, + ScopedPlatformHandle broker_channel) override; + void OnAcceptBrokerClient(const ports::NodeName& from_node, + const ports::NodeName& broker_name, + ScopedPlatformHandle broker_channel) override; void OnPortsMessage(Channel::MessagePtr message) override; void OnRequestPortConnection(const ports::NodeName& from_node, const ports::PortName& connector_port_name, @@ -265,6 +275,20 @@ // A temporary reference to the parent channel before we know their name. scoped_refptr<NodeChannel> bootstrap_parent_channel_; + // Guards |broker_name_|, |pending_broker_clients_|, and + // |pending_relay_messages_|. + base::Lock broker_lock_; + + // The name of our broker node, if any. + ports::NodeName broker_name_; + + // A queue of pending child names waiting to be connected to a broker. + std::queue<ports::NodeName> pending_broker_clients_; + + // Messages waiting to be relayed by the broker once it's known. + std::unordered_map<ports::NodeName, OutgoingMessageQueue> + pending_relay_messages_; + // Guards |incoming_messages_|. base::Lock messages_lock_; std::queue<ports::ScopedMessage> incoming_messages_;
diff --git a/mojo/edk/system/shared_buffer_unittest.cc b/mojo/edk/system/shared_buffer_unittest.cc index 9cb9a33..9809ebd 100644 --- a/mojo/edk/system/shared_buffer_unittest.cc +++ b/mojo/edk/system/shared_buffer_unittest.cc
@@ -111,6 +111,7 @@ WriteMessageWithHandles(other_child, "", &dupe, 1); EXPECT_EQ("quit", ReadMessage(h)); + WriteMessage(h, "ok"); } DEFINE_TEST_CLIENT_TEST_WITH_PIPE(ReceiveAndEditBuffer, SharedBufferTest, h) { @@ -125,8 +126,9 @@ // Write the message from the parent into the buffer and exit. WriteToBuffer(b, 0, message); - + EXPECT_EQ(MOJO_RESULT_OK, MojoClose(b)); EXPECT_EQ("quit", ReadMessage(h)); + WriteMessage(h, "ok"); } TEST_F(SharedBufferTest, PassSharedBufferFromChildToChild) { @@ -147,14 +149,83 @@ ReadMessageWithHandles(h0, &b, 1); WriteMessage(h1, "quit"); - WriteMessage(h0, "quit"); + EXPECT_EQ("ok", ReadMessage(h1)); END_CHILD() + WriteMessage(h0, "quit"); + EXPECT_EQ("ok", ReadMessage(h0)); END_CHILD() // The second child should have written this message. ExpectBufferContents(b, 0, message); } + +DEFINE_TEST_CLIENT_TEST_WITH_PIPE(CreateAndPassBufferParent, SharedBufferTest, + parent) { + RUN_CHILD_ON_PIPE(CreateAndPassBuffer, child) + // Read a pipe from the parent and forward it to our child. + MojoHandle pipe; + std::string message = ReadMessageWithHandles(parent, &pipe, 1); + + WriteMessageWithHandles(child, message, &pipe, 1); + + // Read a buffer handle from the child and pass it back to the parent. + MojoHandle buffer; + EXPECT_EQ("", ReadMessageWithHandles(child, &buffer, 1)); + WriteMessageWithHandles(parent, "", &buffer, 1); + + EXPECT_EQ("quit", ReadMessage(parent)); + WriteMessage(child, "quit"); + EXPECT_EQ("ok", ReadMessage(child)); + WriteMessage(parent, "ok"); + END_CHILD() +} + +DEFINE_TEST_CLIENT_TEST_WITH_PIPE(ReceiveAndEditBufferParent, SharedBufferTest, + parent) { + RUN_CHILD_ON_PIPE(ReceiveAndEditBuffer, child) + // Read a pipe from the parent and forward it to our child. + MojoHandle pipe; + std::string message = ReadMessageWithHandles(parent, &pipe, 1); + WriteMessageWithHandles(child, message, &pipe, 1); + + EXPECT_EQ("quit", ReadMessage(parent)); + WriteMessage(child, "quit"); + EXPECT_EQ("ok", ReadMessage(child)); + WriteMessage(parent, "ok"); + END_CHILD() +} + +TEST_F(SharedBufferTest, PassHandleBetweenCousins) { + const std::string message = "hello"; + MojoHandle p0, p1; + CreateMessagePipe(&p0, &p1); + + // Spawn two children who will each spawn their own child. Make sure the + // grandchildren (cousins to each other) can pass platform handles. + MojoHandle b; + RUN_CHILD_ON_PIPE(CreateAndPassBufferParent, child1) + RUN_CHILD_ON_PIPE(ReceiveAndEditBufferParent, child2) + MojoHandle pipe[2]; + CreateMessagePipe(&pipe[0], &pipe[1]); + + WriteMessageWithHandles(child1, message, &pipe[0], 1); + WriteMessageWithHandles(child2, message, &pipe[1], 1); + + // Receive the buffer back from the first child. + ReadMessageWithHandles(child1, &b, 1); + + WriteMessage(child2, "quit"); + EXPECT_EQ("ok", ReadMessage(child2)); + END_CHILD() + WriteMessage(child1, "quit"); + EXPECT_EQ("ok", ReadMessage(child1)); + END_CHILD() + + // The second grandchild should have written this message. + ExpectBufferContents(b, 0, message); +} + } // namespace } // namespace edk } // namespace mojo
diff --git a/mojo/edk/test/mojo_test_base.h b/mojo/edk/test/mojo_test_base.h index 77f89a5..98ee5974 100644 --- a/mojo/edk/test/mojo_test_base.h +++ b/mojo/edk/test/mojo_test_base.h
@@ -196,40 +196,46 @@ // will be the process's exit code (but see the comment about // WaitForChildShutdown()). // -// The function is defined as a static member of a subclass of |test_base| -// to facilitate shared code between test clients. +// The function is defined as a subclass of |test_base| to facilitate shared +// code between test clients and to allow clients to spawn children themselves. // // |pipe_name| will be bound to the MojoHandle of a message pipe connected // to the parent process (see RUN_CHILD_ON_PIPE above.) This pipe handle is // automatically closed on test client teardown. #define DEFINE_TEST_CLIENT_WITH_PIPE(client_name, test_base, pipe_name) \ class client_name##_MainFixture : public test_base { \ + void TestBody() override {} \ public: \ - static int ClientMain(MojoHandle pipe); \ + int Main(MojoHandle); \ }; \ MULTIPROCESS_TEST_MAIN_WITH_SETUP( \ client_name##TestChildMain, \ test::MultiprocessTestHelper::ChildSetup) { \ + client_name##_MainFixture test; \ return test::MultiprocessTestHelper::RunClientMain( \ - base::Bind(&client_name##_MainFixture::ClientMain)); \ + base::Bind(&client_name##_MainFixture::Main, \ + base::Unretained(&test))); \ } \ - int client_name##_MainFixture::ClientMain(MojoHandle pipe_name) + int client_name##_MainFixture::Main(MojoHandle pipe_name) // This is a version of DEFINE_TEST_CLIENT_WITH_PIPE which can be used with // gtest ASSERT/EXPECT macros. #define DEFINE_TEST_CLIENT_TEST_WITH_PIPE(client_name, test_base, pipe_name) \ class client_name##_MainFixture : public test_base { \ + void TestBody() override {} \ public: \ - static void ClientMain(MojoHandle pipe); \ + void Main(MojoHandle); \ }; \ MULTIPROCESS_TEST_MAIN_WITH_SETUP( \ client_name##TestChildMain, \ test::MultiprocessTestHelper::ChildSetup) { \ + client_name##_MainFixture test; \ return test::MultiprocessTestHelper::RunClientTestMain( \ - base::Bind(&client_name##_MainFixture::ClientMain)); \ + base::Bind(&client_name##_MainFixture::Main, \ + base::Unretained(&test))); \ } \ - void client_name##_MainFixture::ClientMain(MojoHandle pipe_name) + void client_name##_MainFixture::Main(MojoHandle pipe_name)
diff --git a/mojo/edk/test/multiprocess_test_helper.cc b/mojo/edk/test/multiprocess_test_helper.cc index 316bc79..a4ebd50 100644 --- a/mojo/edk/test/multiprocess_test_helper.cc +++ b/mojo/edk/test/multiprocess_test_helper.cc
@@ -5,10 +5,13 @@ #include "mojo/edk/test/multiprocess_test_helper.h" #include <functional> +#include <set> #include <utility> +#include "base/base_switches.h" #include "base/bind.h" #include "base/command_line.h" +#include "base/files/file_path.h" #include "base/logging.h" #include "base/memory/ref_counted.h" #include "base/process/kill.h" @@ -54,7 +57,6 @@ } int RunClientFunction(std::function<int(MojoHandle)> handler) { - base::MessageLoop message_loop; base::RunLoop run_loop; int exit_code = 0; CHECK(!MultiprocessTestHelper::primordial_pipe_token.empty()); @@ -90,8 +92,23 @@ std::string test_child_main = test_child_name + "TestChildMain"; + // Manually construct the new child's commandline to avoid copying unwanted + // values. base::CommandLine command_line( - base::GetMultiProcessTestChildBaseCommandLine()); + base::GetMultiProcessTestChildBaseCommandLine().GetProgram()); + + std::set<std::string> uninherited_args; + uninherited_args.insert("mojo-platform-channel-handle"); + uninherited_args.insert(switches::kTestChildProcess); + + // Copy commandline switches from the parent process, except for the + // multiprocess client name and mojo message pipe handle; this allows test + // clients to spawn other test clients. + for (const auto& entry : + base::CommandLine::ForCurrentProcess()->GetSwitches()) { + if (uninherited_args.find(entry.first) == uninherited_args.end()) + command_line.AppendSwitchNative(entry.first, entry.second); + } PlatformChannelPair channel; HandlePassingInformation handle_passing_info;
diff --git a/mojo/gles2/command_buffer_client_impl.cc b/mojo/gles2/command_buffer_client_impl.cc index 5706af0..cbf9b3ea 100644 --- a/mojo/gles2/command_buffer_client_impl.cc +++ b/mojo/gles2/command_buffer_client_impl.cc
@@ -47,8 +47,14 @@ return true; } -template <typename T> -void Copy(T* output, T input) { +void MakeProgressCallback( + gpu::CommandBuffer::State* output, + const gpu::CommandBuffer::State& input) { + *output = input; +} + +void InitializeCallback(mus::mojom::CommandBufferInitializeResultPtr* output, + mus::mojom::CommandBufferInitializeResultPtr input) { *output = std::move(input); } @@ -98,11 +104,12 @@ mus::mojom::CommandBufferLostContextObserverPtr observer_ptr; observer_binding_.Bind(GetProxy(&observer_ptr), async_waiter_); - mus::mojom::CommandBufferInfoPtr info; + + mus::mojom::CommandBufferInitializeResultPtr initialize_result; command_buffer_->Initialize( std::move(observer_ptr), std::move(duped), mojo::Array<int32_t>::From(attribs_), - base::Bind(&Copy<mus::mojom::CommandBufferInfoPtr>, &info)); + base::Bind(&InitializeCallback, &initialize_result)); base::ThreadRestrictions::ScopedAllowWait wait; if (!command_buffer_.WaitForIncomingResponse()) { @@ -110,14 +117,15 @@ return false; } - if (!info) { + if (!initialize_result) { VLOG(1) << "Command buffer cannot be initialized successfully."; return false; } - DCHECK_EQ(gpu::CommandBufferNamespace::MOJO, info->command_buffer_namespace); - command_buffer_id_ = info->command_buffer_id; - capabilities_ = info->capabilities.To<gpu::Capabilities>(); + DCHECK_EQ(gpu::CommandBufferNamespace::MOJO, + initialize_result->command_buffer_namespace); + command_buffer_id_ = initialize_result->command_buffer_id; + capabilities_ = initialize_result->capabilities; return true; } @@ -290,10 +298,10 @@ } void CommandBufferClientImpl::MakeProgressAndUpdateState() { - mus::mojom::CommandBufferStatePtr state; + gpu::CommandBuffer::State state; command_buffer_->MakeProgress( last_state_.get_offset, - base::Bind(&Copy<mus::mojom::CommandBufferStatePtr>, &state)); + base::Bind(&MakeProgressCallback, &state)); base::ThreadRestrictions::ScopedAllowWait wait; if (!command_buffer_.WaitForIncomingResponse()) { @@ -303,8 +311,8 @@ return; } - if (state->generation - last_state_.generation < 0x80000000U) - last_state_ = state.To<State>(); + if (state.generation - last_state_.generation < 0x80000000U) + last_state_ = state; } void CommandBufferClientImpl::SetLock(base::Lock* lock) {
diff --git a/mojo/mojo_base.gyp b/mojo/mojo_base.gyp index f541dcdb..b451a6e 100644 --- a/mojo/mojo_base.gyp +++ b/mojo/mojo_base.gyp
@@ -204,11 +204,11 @@ 'type': 'none', 'variables': { 'mojom_files': [ - 'shell/public/interfaces/application.mojom', 'shell/public/interfaces/application_manager.mojom', 'shell/public/interfaces/content_handler.mojom', 'shell/public/interfaces/service_provider.mojom', 'shell/public/interfaces/shell.mojom', + 'shell/public/interfaces/shell_client.mojom', ], }, 'dependencies': [ @@ -225,28 +225,24 @@ 'type': 'static_library', 'sources': [ 'shell/public/cpp/app_lifetime_helper.h', - 'shell/public/cpp/application_impl.h', 'shell/public/cpp/application_runner.h', 'shell/public/cpp/connect.h', 'shell/public/cpp/connection.h', 'shell/public/cpp/initialize_base_and_icu.cc', 'shell/public/cpp/initialize_base_and_icu.h', + 'shell/public/cpp/interface_binder.h', 'shell/public/cpp/interface_factory.h', 'shell/public/cpp/interface_factory_impl.h', 'shell/public/cpp/lib/app_lifetime_helper.cc', - 'shell/public/cpp/lib/application_impl.cc', 'shell/public/cpp/lib/application_runner.cc', - 'shell/public/cpp/lib/interface_factory_connector.h', - 'shell/public/cpp/lib/service_connector_registry.cc', - 'shell/public/cpp/lib/service_connector_registry.h', - 'shell/public/cpp/lib/service_provider_impl.cc', - 'shell/public/cpp/lib/service_registry.cc', - 'shell/public/cpp/lib/service_registry.h', + 'shell/public/cpp/lib/connection_impl.cc', + 'shell/public/cpp/lib/connection_impl.h', + 'shell/public/cpp/lib/interface_factory_binder.h', 'shell/public/cpp/lib/shell_client.cc', - 'shell/public/cpp/service_connector.h', - 'shell/public/cpp/service_provider_impl.h', + 'shell/public/cpp/lib/shell_connection.cc', 'shell/public/cpp/shell.h', 'shell/public/cpp/shell_client.h', + 'shell/public/cpp/shell_connection.h', ], 'dependencies': [ '../base/base.gyp:base_i18n', @@ -294,7 +290,7 @@ '../third_party/mojo/mojo_public.gyp:mojo_environment_standalone', ], 'sources': [ - 'shell/public/cpp/tests/service_registry_unittest.cc', + 'shell/public/cpp/tests/connection_impl_unittest.cc', ], }, ],
diff --git a/mojo/mojo_edk.gyp b/mojo/mojo_edk.gyp index 5e071c41..1b12c9c 100644 --- a/mojo/mojo_edk.gyp +++ b/mojo/mojo_edk.gyp
@@ -59,9 +59,6 @@ 'edk/embedder/scoped_platform_handle.h', 'edk/embedder/simple_platform_shared_buffer.cc', 'edk/embedder/simple_platform_shared_buffer.h', - 'edk/embedder/simple_platform_shared_buffer_android.cc', - 'edk/embedder/simple_platform_shared_buffer_posix.cc', - 'edk/embedder/simple_platform_shared_buffer_win.cc', 'edk/embedder/simple_platform_support.cc', 'edk/embedder/simple_platform_support.h', 'edk/system/awakable.h',
diff --git a/mojo/public/cpp/bindings/tests/versioning_test_service.cc b/mojo/public/cpp/bindings/tests/versioning_test_service.cc index 007a82a..8e04c0a8 100644 --- a/mojo/public/cpp/bindings/tests/versioning_test_service.cc +++ b/mojo/public/cpp/bindings/tests/versioning_test_service.cc
@@ -101,7 +101,7 @@ // mojo::ShellClient implementation. bool AcceptConnection(Connection* connection) override { - connection->AddService<HumanResourceDatabase>(this); + connection->AddInterface<HumanResourceDatabase>(this); return true; } @@ -118,9 +118,9 @@ } // namespace test } // namespace mojo -MojoResult MojoMain(MojoHandle application_request) { +MojoResult MojoMain(MojoHandle request) { mojo::ApplicationRunner runner( new mojo::test::versioning::HumanResourceSystemServer()); - return runner.Run(application_request); + return runner.Run(request); }
diff --git a/mojo/services/network/http_server_apptest.cc b/mojo/services/network/http_server_apptest.cc index aefc973..7d959a3d 100644 --- a/mojo/services/network/http_server_apptest.cc +++ b/mojo/services/network/http_server_apptest.cc
@@ -558,8 +558,8 @@ scoped_ptr<Connection> connection = shell()->Connect("mojo:network_service"); - connection->ConnectToService(&network_service_); - connection->ConnectToService(&web_socket_factory_); + connection->GetInterface(&network_service_); + connection->GetInterface(&web_socket_factory_); } void CreateHttpServer(HttpServerDelegatePtr delegate,
diff --git a/mojo/services/network/network_service_delegate.cc b/mojo/services/network/network_service_delegate.cc index 8caebfbd..574a143 100644 --- a/mojo/services/network/network_service_delegate.cc +++ b/mojo/services/network/network_service_delegate.cc
@@ -133,10 +133,10 @@ bool NetworkServiceDelegate::AcceptConnection(Connection* connection) { DCHECK(context_); - connection->AddService<CookieStore>(this); - connection->AddService<NetworkService>(this); - connection->AddService<URLLoaderFactory>(this); - connection->AddService<WebSocketFactory>(this); + connection->AddInterface<CookieStore>(this); + connection->AddInterface<NetworkService>(this); + connection->AddInterface<URLLoaderFactory>(this); + connection->AddInterface<WebSocketFactory>(this); return true; }
diff --git a/mojo/services/test_service/test_request_tracker_application.cc b/mojo/services/test_service/test_request_tracker_application.cc index 4e657cb..55246e6 100644 --- a/mojo/services/test_service/test_request_tracker_application.cc +++ b/mojo/services/test_service/test_request_tracker_application.cc
@@ -28,9 +28,9 @@ bool TestRequestTrackerApplication::AcceptConnection(Connection* connection) { // Every instance of the service and recorder shares the context. // Note, this app is single-threaded, so this is thread safe. - connection->AddService<TestTimeService>(this); - connection->AddService<TestRequestTracker>(this); - connection->AddService<TestTrackedRequestService>(this); + connection->AddInterface<TestTimeService>(this); + connection->AddInterface<TestRequestTracker>(this); + connection->AddInterface<TestTrackedRequestService>(this); return true; }
diff --git a/mojo/services/test_service/test_request_tracker_application.h b/mojo/services/test_service/test_request_tracker_application.h index 74aa39c..8ace9ec1 100644 --- a/mojo/services/test_service/test_request_tracker_application.h +++ b/mojo/services/test_service/test_request_tracker_application.h
@@ -11,7 +11,7 @@ #include "mojo/shell/public/cpp/shell_client.h" namespace mojo { -class ApplicationImpl; +class ShellConnection; namespace test { class TestTimeService;
diff --git a/mojo/services/test_service/test_service_application.cc b/mojo/services/test_service/test_service_application.cc index 940ce60..02e4421 100644 --- a/mojo/services/test_service/test_service_application.cc +++ b/mojo/services/test_service/test_service_application.cc
@@ -29,8 +29,8 @@ } bool TestServiceApplication::AcceptConnection(Connection* connection) { - connection->AddService<TestService>(this); - connection->AddService<TestTimeService>(this); + connection->AddInterface<TestService>(this); + connection->AddInterface<TestTimeService>(this); return true; }
diff --git a/mojo/services/tracing/public/cpp/tracing_impl.cc b/mojo/services/tracing/public/cpp/tracing_impl.cc index 3c61790..2ac2749 100644 --- a/mojo/services/tracing/public/cpp/tracing_impl.cc +++ b/mojo/services/tracing/public/cpp/tracing_impl.cc
@@ -54,7 +54,7 @@ base::PlatformThread::SetName(url); connection_ = shell->Connect("mojo:tracing"); - connection_->AddService(this); + connection_->AddInterface(this); #ifdef NDEBUG if (base::CommandLine::ForCurrentProcess()->HasSwitch(
diff --git a/mojo/services/tracing/tracing_app.cc b/mojo/services/tracing/tracing_app.cc index 09d1f3b..974ce0d 100644 --- a/mojo/services/tracing/tracing_app.cc +++ b/mojo/services/tracing/tracing_app.cc
@@ -22,8 +22,8 @@ } bool TracingApp::AcceptConnection(mojo::Connection* connection) { - connection->AddService<TraceCollector>(this); - connection->AddService<StartupPerformanceDataCollector>(this); + connection->AddInterface<TraceCollector>(this); + connection->AddInterface<StartupPerformanceDataCollector>(this); // If someone connects to us they may want to use the TraceCollector // interface and/or they may want to expose themselves to be traced. Attempt @@ -31,7 +31,7 @@ // connecting to us wants to be traced. They can refuse the connection or // close the pipe if not. TraceProviderPtr provider_ptr; - connection->ConnectToService(&provider_ptr); + connection->GetInterface(&provider_ptr); if (tracing_active_) { TraceRecorderPtr recorder_ptr; recorder_impls_.push_back(
diff --git a/mojo/shell/application_instance.cc b/mojo/shell/application_instance.cc index 7d9abdf3..d09e142 100644 --- a/mojo/shell/application_instance.cc +++ b/mojo/shell/application_instance.cc
@@ -20,7 +20,7 @@ namespace shell { ApplicationInstance::ApplicationInstance( - mojom::ApplicationPtr application, + mojom::ShellClientPtr shell_client, ApplicationManager* manager, const Identity& identity, uint32_t requesting_content_handler_id, @@ -32,7 +32,7 @@ identity.filter().count("*") == 1), requesting_content_handler_id_(requesting_content_handler_id), on_application_end_(on_application_end), - application_(std::move(application)), + shell_client_(std::move(shell_client)), binding_(this), pid_receiver_binding_(this), queue_requests_(false), @@ -50,8 +50,8 @@ } void ApplicationInstance::InitializeApplication() { - application_->Initialize(binding_.CreateInterfacePtrAndBind(), - identity_.url().spec(), id_); + shell_client_->Initialize(binding_.CreateInterfacePtrAndBind(), + identity_.url().spec(), id_); binding_.set_connection_error_handler([this]() { OnConnectionError(); }); } @@ -114,7 +114,7 @@ void ApplicationInstance::QuitApplication() { queue_requests_ = true; - application_->OnQuitRequested( + shell_client_->OnQuitRequested( base::Bind(&ApplicationInstance::OnQuitRequestedResult, base::Unretained(this))); } @@ -142,7 +142,7 @@ ApplicationInstance* source = manager_->GetApplicationInstance(params->source()); uint32_t source_id = source ? source->id() : Shell::kInvalidApplicationID; - application_->AcceptConnection( + shell_client_->AcceptConnection( params->source().url().spec(), source_id, params->TakeServices(), params->TakeExposedServices(), Array<String>::From(interfaces), params->target().url().spec());
diff --git a/mojo/shell/application_instance.h b/mojo/shell/application_instance.h index cae14426..fded5743 100644 --- a/mojo/shell/application_instance.h +++ b/mojo/shell/application_instance.h
@@ -17,9 +17,9 @@ #include "mojo/shell/capability_filter.h" #include "mojo/shell/connect_to_application_params.h" #include "mojo/shell/identity.h" -#include "mojo/shell/public/interfaces/application.mojom.h" #include "mojo/shell/public/interfaces/application_manager.mojom.h" #include "mojo/shell/public/interfaces/shell.mojom.h" +#include "mojo/shell/public/interfaces/shell_client.mojom.h" #include "url/gurl.h" namespace mojo { @@ -36,7 +36,7 @@ // |requesting_content_handler_id| is the id of the content handler that // loaded this app. If the app was not loaded by a content handler the id // is kInvalidContentHandlerID. - ApplicationInstance(mojom::ApplicationPtr application, + ApplicationInstance(mojom::ShellClientPtr shell_client, ApplicationManager* manager, const Identity& identity, uint32_t requesting_content_handler_id, @@ -53,7 +53,7 @@ void BindPIDReceiver(InterfaceRequest<mojom::PIDReceiver> pid_receiver); - mojom::Application* application() { return application_.get(); } + mojom::ShellClient* shell_client() { return shell_client_.get(); } const Identity& identity() const { return identity_; } uint32_t id() const { return id_; } base::ProcessId pid() const { return pid_; } @@ -98,7 +98,7 @@ const bool allow_any_application_; uint32_t requesting_content_handler_id_; base::Closure on_application_end_; - mojom::ApplicationPtr application_; + mojom::ShellClientPtr shell_client_; Binding<mojom::Shell> binding_; Binding<mojom::PIDReceiver> pid_receiver_binding_; bool queue_requests_;
diff --git a/mojo/shell/application_loader.h b/mojo/shell/application_loader.h index 21e7911..3b22dc28 100644 --- a/mojo/shell/application_loader.h +++ b/mojo/shell/application_loader.h
@@ -8,8 +8,8 @@ #include "base/callback.h" #include "mojo/public/cpp/system/core.h" #include "mojo/services/network/public/interfaces/url_loader.mojom.h" -#include "mojo/shell/public/interfaces/application.mojom.h" #include "mojo/shell/public/interfaces/shell.mojom.h" +#include "mojo/shell/public/interfaces/shell_client.mojom.h" #include "url/gurl.h" namespace mojo { @@ -26,9 +26,8 @@ public: virtual ~ApplicationLoader() {} - virtual void Load( - const GURL& url, - InterfaceRequest<mojom::Application> application_request) = 0; + virtual void Load(const GURL& url, + InterfaceRequest<mojom::ShellClient> request) = 0; protected: ApplicationLoader() {}
diff --git a/mojo/shell/application_manager.cc b/mojo/shell/application_manager.cc index 2e6a1f2..b8dda51 100644 --- a/mojo/shell/application_manager.cc +++ b/mojo/shell/application_manager.cc
@@ -140,12 +140,12 @@ CapabilityFilter local_filter = filter->filter.To<CapabilityFilter>(); Identity target_id(url, std::string(), local_filter); ApplicationInstance* instance = nullptr; - InterfaceRequest<mojom::Application> application_request = + InterfaceRequest<mojom::ShellClient> request = CreateInstance(target_id, base::Closure(), &instance); instance->BindPIDReceiver(std::move(pid_receiver)); scoped_ptr<NativeRunner> runner = native_runner_factory_->Create(base::FilePath()); - runner->InitHost(std::move(channel), std::move(application_request)); + runner->InitHost(std::move(channel), std::move(request)); instance->SetNativeRunner(runner.get()); native_runners_.push_back(std::move(runner)); } @@ -175,28 +175,27 @@ }); } -InterfaceRequest<mojom::Application> +InterfaceRequest<mojom::ShellClient> ApplicationManager::CreateAndConnectToInstance( scoped_ptr<ConnectToApplicationParams> params, ApplicationInstance** resulting_instance) { ApplicationInstance* instance = nullptr; - InterfaceRequest<mojom::Application> application_request = + InterfaceRequest<mojom::ShellClient> request = CreateInstance(params->target(), params->on_application_end(), &instance); instance->ConnectToClient(std::move(params)); if (resulting_instance) *resulting_instance = instance; - return application_request; + return request; } -InterfaceRequest<mojom::Application> ApplicationManager::CreateInstance( +InterfaceRequest<mojom::ShellClient> ApplicationManager::CreateInstance( const Identity& target_id, const base::Closure& on_application_end, ApplicationInstance** resulting_instance) { - mojom::ApplicationPtr application; - InterfaceRequest<mojom::Application> application_request = - GetProxy(&application); + mojom::ShellClientPtr shell_client; + InterfaceRequest<mojom::ShellClient> request = GetProxy(&shell_client); ApplicationInstance* instance = new ApplicationInstance( - std::move(application), this, target_id, + std::move(shell_client), this, target_id, mojom::Shell::kInvalidApplicationID, on_application_end); DCHECK(identity_to_instance_.find(target_id) == identity_to_instance_.end()); @@ -210,7 +209,7 @@ instance->InitializeApplication(); if (resulting_instance) *resulting_instance = instance; - return application_request; + return request; } void ApplicationManager::HandleFetchCallback( @@ -250,7 +249,7 @@ params->connect_callback(); params->set_connect_callback(EmptyConnectCallback()); ApplicationInstance* app = nullptr; - InterfaceRequest<mojom::Application> request( + InterfaceRequest<mojom::ShellClient> request( CreateAndConnectToInstance(std::move(params), &app)); uint32_t content_handler_id = package_manager_->HandleWithContentHandler( @@ -282,7 +281,7 @@ } void ApplicationManager::RunNativeApplication( - InterfaceRequest<mojom::Application> application_request, + InterfaceRequest<mojom::ShellClient> request, bool start_sandboxed, scoped_ptr<Fetcher> fetcher, ApplicationInstance* instance, @@ -291,7 +290,7 @@ // We only passed fetcher to keep it alive. Done with it now. fetcher.reset(); - DCHECK(application_request.is_pending()); + DCHECK(request.is_pending()); if (!path_exists) { LOG(ERROR) << "Library not started because library path '" << path.value() @@ -302,7 +301,7 @@ TRACE_EVENT1("mojo_shell", "ApplicationManager::RunNativeApplication", "path", path.AsUTF8Unsafe()); scoped_ptr<NativeRunner> runner = native_runner_factory_->Create(path); - runner->Start(path, start_sandboxed, std::move(application_request), + runner->Start(path, start_sandboxed, std::move(request), base::Bind(&ApplicationManager::ApplicationPIDAvailable, weak_ptr_factory_.GetWeakPtr(), instance->id()), base::Bind(&ApplicationManager::CleanupRunner,
diff --git a/mojo/shell/application_manager.h b/mojo/shell/application_manager.h index f20a9ae4..81e1e9fe 100644 --- a/mojo/shell/application_manager.h +++ b/mojo/shell/application_manager.h
@@ -21,10 +21,10 @@ #include "mojo/shell/fetcher.h" #include "mojo/shell/identity.h" #include "mojo/shell/native_runner.h" -#include "mojo/shell/public/interfaces/application.mojom.h" #include "mojo/shell/public/interfaces/application_manager.mojom.h" #include "mojo/shell/public/interfaces/service_provider.mojom.h" #include "mojo/shell/public/interfaces/shell.mojom.h" +#include "mojo/shell/public/interfaces/shell_client.mojom.h" #include "url/gurl.h" namespace base { @@ -114,10 +114,10 @@ bool ConnectToRunningApplication( scoped_ptr<ConnectToApplicationParams>* params); - InterfaceRequest<mojom::Application> CreateAndConnectToInstance( + InterfaceRequest<mojom::ShellClient> CreateAndConnectToInstance( scoped_ptr<ConnectToApplicationParams> params, ApplicationInstance** instance); - InterfaceRequest<mojom::Application> CreateInstance( + InterfaceRequest<mojom::ShellClient> CreateInstance( const Identity& target_id, const base::Closure& on_application_end, ApplicationInstance** resulting_instance); @@ -128,13 +128,12 @@ void HandleFetchCallback(scoped_ptr<ConnectToApplicationParams> params, scoped_ptr<Fetcher> fetcher); - void RunNativeApplication( - InterfaceRequest<mojom::Application> application_request, - bool start_sandboxed, - scoped_ptr<Fetcher> fetcher, - ApplicationInstance* instance, - const base::FilePath& file_path, - bool path_exists); + void RunNativeApplication(InterfaceRequest<mojom::ShellClient> request, + bool start_sandboxed, + scoped_ptr<Fetcher> fetcher, + ApplicationInstance* instance, + const base::FilePath& file_path, + bool path_exists); // Returns the appropriate loader for |url|, or the default loader if there is // no loader configured for the URL.
diff --git a/mojo/shell/application_manager_apptest.cc b/mojo/shell/application_manager_apptest.cc index 92c7272..a725fae 100644 --- a/mojo/shell/application_manager_apptest.cc +++ b/mojo/shell/application_manager_apptest.cc
@@ -41,7 +41,7 @@ // mojo::ShellClient: void Initialize(Shell* shell, const std::string& url, uint32_t id) override {} bool AcceptConnection(Connection* connection) override { - connection->AddService<CreateInstanceForHandleTest>(this); + connection->AddInterface<CreateInstanceForHandleTest>(this); return true; } @@ -175,7 +175,7 @@ mojo::shell::test::mojom::DriverPtr driver; scoped_ptr<Connection> connection = shell()->Connect("exe:application_manager_apptest_driver"); - connection->ConnectToService(&driver); + connection->GetInterface(&driver); // 2. Wait for the target to connect to us. (via // mojo:application_manager_apptests)
diff --git a/mojo/shell/application_manager_apptest_driver.cc b/mojo/shell/application_manager_apptest_driver.cc index 2bd0de3..557fc08 100644 --- a/mojo/shell/application_manager_apptest_driver.cc +++ b/mojo/shell/application_manager_apptest_driver.cc
@@ -111,7 +111,7 @@ } bool AcceptConnection(mojo::Connection* connection) override { - connection->AddService<Driver>(this); + connection->AddInterface<Driver>(this); return true; }
diff --git a/mojo/shell/application_manager_unittest.cc b/mojo/shell/application_manager_unittest.cc index b83f320..8ce4303 100644 --- a/mojo/shell/application_manager_unittest.cc +++ b/mojo/shell/application_manager_unittest.cc
@@ -17,9 +17,9 @@ #include "mojo/shell/connect_util.h" #include "mojo/shell/fetcher.h" #include "mojo/shell/package_manager.h" -#include "mojo/shell/public/cpp/application_impl.h" #include "mojo/shell/public/cpp/interface_factory.h" #include "mojo/shell/public/cpp/shell_client.h" +#include "mojo/shell/public/cpp/shell_connection.h" #include "mojo/shell/public/interfaces/service_provider.mojom.h" #include "mojo/shell/test.mojom.h" #include "mojo/shell/test_package_manager.h" @@ -103,7 +103,7 @@ ~TestApplicationLoader() override { if (context_) ++context_->num_loader_deletes; - test_app_.reset(); + shell_connection_.reset(); } void set_context(TestContext* context) { context_ = context; } @@ -113,14 +113,14 @@ private: // ApplicationLoader implementation. void Load(const GURL& url, - InterfaceRequest<mojom::Application> application_request) override { + InterfaceRequest<mojom::ShellClient> request) override { ++num_loads_; - test_app_.reset(new ApplicationImpl(this, std::move(application_request))); + shell_connection_.reset(new ShellConnection(this, std::move(request))); } // mojo::ShellClient implementation. bool AcceptConnection(Connection* connection) override { - connection->AddService<TestService>(this); + connection->AddInterface<TestService>(this); last_requestor_url_ = GURL(connection->GetRemoteApplicationURL()); return true; } @@ -131,7 +131,7 @@ new TestServiceImpl(context_, std::move(request)); } - scoped_ptr<ApplicationImpl> test_app_; + scoped_ptr<ShellConnection> shell_connection_; TestContext* context_; int num_loads_; GURL last_requestor_url_; @@ -143,7 +143,7 @@ private: // ApplicationLoader implementation. void Load(const GURL& url, - InterfaceRequest<mojom::Application> application_request) override { + InterfaceRequest<mojom::ShellClient> request) override { } }; @@ -245,14 +245,14 @@ // Used to test that the requestor url will be correctly passed. class TestAImpl : public TestA { public: - TestAImpl(ApplicationImpl* app_impl, + TestAImpl(ShellConnection* app_impl, TesterContext* test_context, InterfaceRequest<TestA> request, InterfaceFactory<TestC>* factory) : test_context_(test_context), binding_(this, std::move(request)) { connection_ = app_impl->Connect(kTestBURLString); - connection_->AddService<TestC>(factory); - connection_->ConnectToService(&b_); + connection_->AddInterface<TestC>(factory); + connection_->GetInterface(&b_); } ~TestAImpl() override { @@ -288,7 +288,7 @@ TesterContext* test_context, InterfaceRequest<TestB> request) : test_context_(test_context), binding_(this, std::move(request)) { - connection->ConnectToService(&c_); + connection->GetInterface(&c_); } ~TestBImpl() override { @@ -345,8 +345,8 @@ private: void Load(const GURL& url, - InterfaceRequest<mojom::Application> application_request) override { - app_.reset(new ApplicationImpl(this, std::move(application_request))); + InterfaceRequest<mojom::ShellClient> request) override { + app_.reset(new ShellConnection(this, std::move(request))); } bool AcceptConnection(Connection* connection) override { @@ -359,9 +359,9 @@ } // If we're coming from A, then add B, otherwise A. if (connection->GetRemoteApplicationURL() == kTestAURLString) - connection->AddService<TestB>(this); + connection->AddInterface<TestB>(this); else - connection->AddService<TestA>(this); + connection->AddInterface<TestA>(this); return true; } @@ -382,7 +382,7 @@ } TesterContext* context_; - scoped_ptr<ApplicationImpl> app_; + scoped_ptr<ShellConnection> app_; std::string requestor_url_; ScopedVector<TestAImpl> a_bindings_; };
diff --git a/mojo/shell/application_package_apptest.cc b/mojo/shell/application_package_apptest.cc index 3d19daf7..7d2e43c3d 100644 --- a/mojo/shell/application_package_apptest.cc +++ b/mojo/shell/application_package_apptest.cc
@@ -36,7 +36,7 @@ public base::SimpleThread { public: ProvidedApplicationDelegate(const std::string& name, - InterfaceRequest<mojom::Application> request, + InterfaceRequest<mojom::ShellClient> request, const Callback<void()>& destruct_callback) : base::SimpleThread(name), name_(name), @@ -53,7 +53,8 @@ // mojo::ShellClient: void Initialize(Shell* shell, const std::string& url, uint32_t id) override {} bool AcceptConnection(Connection* connection) override { - connection->AddService<test::mojom::ApplicationPackageApptestService>(this); + connection->AddInterface<test::mojom::ApplicationPackageApptestService>( + this); return true; } @@ -78,7 +79,7 @@ } const std::string name_; - InterfaceRequest<mojom::Application> request_; + InterfaceRequest<mojom::ShellClient> request_; const Callback<void()> destruct_callback_; WeakBindingSet<test::mojom::ApplicationPackageApptestService> bindings_; @@ -99,8 +100,9 @@ // mojo::ShellClient: void Initialize(Shell* shell, const std::string& url, uint32_t id) override {} bool AcceptConnection(Connection* connection) override { - connection->AddService<ContentHandler>(this); - connection->AddService<test::mojom::ApplicationPackageApptestService>(this); + connection->AddInterface<ContentHandler>(this); + connection->AddInterface<test::mojom::ApplicationPackageApptestService>( + this); return true; } @@ -118,7 +120,7 @@ } // mojom::ContentHandler: - void StartApplication(InterfaceRequest<mojom::Application> request, + void StartApplication(InterfaceRequest<mojom::ShellClient> request, URLResponsePtr response, const Callback<void()>& destruct_callback) override { const std::string url = response->url;
diff --git a/mojo/shell/background/BUILD.gn b/mojo/shell/background/BUILD.gn new file mode 100644 index 0000000..c5a1faa5 --- /dev/null +++ b/mojo/shell/background/BUILD.gn
@@ -0,0 +1,33 @@ +# Copyright 2016 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. + +source_set("lib") { + sources = [ + "background_shell.cc", + "background_shell.h", + ] + deps = [ + "//base", + "//mojo/message_pump", + "//mojo/shell", + "//mojo/shell/public/cpp:sources", + "//mojo/shell/standalone:lib", + ] +} + +source_set("main") { + sources = [ + "background_shell_main.cc", + "background_shell_main.h", + ] + deps = [ + "//base", + "//mojo/message_pump", + "//mojo/shell", + "//mojo/shell/public/cpp:sources", + "//mojo/shell/runner/common", + "//mojo/shell/runner/host:lib", + "//mojo/shell/standalone:lib", + ] +}
diff --git a/mojo/shell/background/background_shell.cc b/mojo/shell/background/background_shell.cc new file mode 100644 index 0000000..17522f0 --- /dev/null +++ b/mojo/shell/background/background_shell.cc
@@ -0,0 +1,179 @@ +// Copyright 2016 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 "mojo/shell/background/background_shell.h" + +#include "base/bind.h" +#include "base/bind_helpers.h" +#include "base/command_line.h" +#include "base/logging.h" +#include "base/path_service.h" +#include "base/synchronization/waitable_event.h" +#include "base/threading/simple_thread.h" +#include "mojo/message_pump/message_pump_mojo.h" +#include "mojo/shell/application_loader.h" +#include "mojo/shell/application_manager.h" +#include "mojo/shell/capability_filter.h" +#include "mojo/shell/connect_to_application_params.h" +#include "mojo/shell/public/cpp/shell_client.h" +#include "mojo/shell/public/cpp/shell_connection.h" +#include "mojo/shell/standalone/context.h" +#include "url/gurl.h" + +namespace mojo { +namespace shell { +namespace { + +scoped_ptr<base::MessagePump> CreateMessagePumpMojo() { + return make_scoped_ptr(new common::MessagePumpMojo); +} + +// Used to obtain the InterfaceRequest for an application. +class BackgroundApplicationLoader : public ApplicationLoader { + public: + BackgroundApplicationLoader() {} + ~BackgroundApplicationLoader() override {} + + bool got_request() const { return got_request_; } + InterfaceRequest<mojom::ShellClient> TakeApplicationRequest() { + return std::move(request_); + } + + // ApplicationLoader: + void Load(const GURL& url, + InterfaceRequest<mojom::ShellClient> request) override { + got_request_ = true; + request_ = std::move(request); + } + + private: + bool got_request_ = false; + InterfaceRequest<mojom::ShellClient> request_; + + DISALLOW_COPY_AND_ASSIGN(BackgroundApplicationLoader); +}; + +class MojoMessageLoop : public base::MessageLoop { + public: + MojoMessageLoop() + : base::MessageLoop(base::MessageLoop::TYPE_CUSTOM, + base::Bind(&CreateMessagePumpMojo)) {} + ~MojoMessageLoop() override {} + + void BindToCurrentThread() { base::MessageLoop::BindToCurrentThread(); } + + private: + DISALLOW_COPY_AND_ASSIGN(MojoMessageLoop); +}; + +} // namespace + +// Manages the thread to startup mojo. +class BackgroundShell::MojoThread : public base::SimpleThread { + public: + MojoThread() : SimpleThread("mojo-background-shell") {} + ~MojoThread() override {} + + void CreateShellClientRequest(base::WaitableEvent* signal, + scoped_ptr<ConnectToApplicationParams> params, + InterfaceRequest<mojom::ShellClient>* request) { + // Only valid to call this on the background thread. + DCHECK_EQ(message_loop_, base::MessageLoop::current()); + + // Ownership of |loader| passes to ApplicationManager. + BackgroundApplicationLoader* loader = new BackgroundApplicationLoader; + const GURL url = params->target().url(); + context_->application_manager()->SetLoaderForURL(make_scoped_ptr(loader), + url); + context_->application_manager()->ConnectToApplication(std::move(params)); + DCHECK(loader->got_request()); + *request = loader->TakeApplicationRequest(); + // Trigger destruction of the loader. + context_->application_manager()->SetLoaderForURL(nullptr, url); + signal->Signal(); + } + + base::MessageLoop* message_loop() { return message_loop_; } + + // Stops the background thread. + void Stop() { + DCHECK_NE(message_loop_, base::MessageLoop::current()); + message_loop_->task_runner()->PostTask( + FROM_HERE, base::MessageLoop::QuitWhenIdleClosure()); + Join(); + } + + // base::SimpleThread: + void Start() override { + DCHECK(!message_loop_); + message_loop_ = new MojoMessageLoop; + base::SimpleThread::Start(); + } + void Run() override { + // The construction/destruction order is very finicky and has to be done + // in the order here. + scoped_ptr<base::MessageLoop> message_loop(message_loop_); + + Context::EnsureEmbedderIsInitialized(); + + message_loop_->BindToCurrentThread(); + + base::FilePath shell_dir; + PathService::Get(base::DIR_MODULE, &shell_dir); + + scoped_ptr<Context> context(new Context); + context_ = context.get(); + context_->Init(shell_dir); + + message_loop_->Run(); + + // Has to happen after run, but while messageloop still valid. + context_->Shutdown(); + + // Context has to be destroyed after the MessageLoop has been destroyed. + message_loop.reset(); + context_ = nullptr; + } + + private: + // We own this. It's created on the main thread, but destroyed on the + // background thread. + MojoMessageLoop* message_loop_ = nullptr; + // Created in Run() on the background thread. + Context* context_ = nullptr; + + DISALLOW_COPY_AND_ASSIGN(MojoThread); +}; + +BackgroundShell::BackgroundShell() {} + +BackgroundShell::~BackgroundShell() { + thread_->Stop(); +} + +void BackgroundShell::Init() { + DCHECK(!thread_); + thread_.reset(new MojoThread); + thread_->Start(); +} + +InterfaceRequest<mojom::ShellClient> BackgroundShell::CreateShellClientRequest( + const GURL& url) { + scoped_ptr<ConnectToApplicationParams> params(new ConnectToApplicationParams); + params->SetTarget( + Identity(url, std::string(), GetPermissiveCapabilityFilter())); + InterfaceRequest<mojom::ShellClient> request; + base::WaitableEvent signal(true, false); + thread_->message_loop()->task_runner()->PostTask( + FROM_HERE, base::Bind(&MojoThread::CreateShellClientRequest, + base::Unretained(thread_.get()), &signal, + base::Passed(¶ms), &request)); + signal.Wait(); + return request; +} + +void RegisterLocalAliases(PackageManagerImpl* manager) {} + +} // namespace shell +} // namespace mojo
diff --git a/mojo/shell/background/background_shell.h b/mojo/shell/background/background_shell.h new file mode 100644 index 0000000..e2163f4 --- /dev/null +++ b/mojo/shell/background/background_shell.h
@@ -0,0 +1,44 @@ +// Copyright 2016 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 MOJO_SHELL_BACKGROUND_BACKGROUND_SHELL_H_ +#define MOJO_SHELL_BACKGROUND_BACKGROUND_SHELL_H_ + +#include "base/macros.h" +#include "base/memory/scoped_ptr.h" +#include "mojo/public/cpp/bindings/interface_request.h" +#include "mojo/shell/public/interfaces/shell_client.mojom.h" + +class GURL; + +namespace mojo { +namespace shell { + +// BackgroundShell starts up the mojo shell on a background thread, and +// destroys the thread in the destructor. Once created use CreateApplication() +// to obtain an InterfaceRequest for the Application. The InterfaceRequest can +// then be bound to an ApplicationImpl. +class BackgroundShell { + public: + BackgroundShell(); + ~BackgroundShell(); + + void Init(); + + // Obtains an InterfaceRequest for the specified url. + InterfaceRequest<mojom::ShellClient> CreateShellClientRequest( + const GURL& url); + + private: + class MojoThread; + + scoped_ptr<MojoThread> thread_; + + DISALLOW_COPY_AND_ASSIGN(BackgroundShell); +}; + +} // namespace shell +} // namespace mojo + +#endif // MOJO_SHELL_BACKGROUND_BACKGROUND_SHELL_H_
diff --git a/mojo/shell/background/background_shell_main.cc b/mojo/shell/background/background_shell_main.cc new file mode 100644 index 0000000..72c082f --- /dev/null +++ b/mojo/shell/background/background_shell_main.cc
@@ -0,0 +1,43 @@ +// Copyright 2016 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 "mojo/shell/background/background_shell_main.h" + +#include "base/at_exit.h" +#include "base/command_line.h" +#include "base/debug/debugger.h" +#include "base/process/launch.h" +#include "mojo/shell/runner/common/switches.h" +#include "mojo/shell/runner/host/child_process.h" +#include "mojo/shell/runner/init.h" + +namespace mojo { +namespace shell { +namespace { + +int RunChildProcess() { + base::AtExitManager at_exit; + InitializeLogging(); + WaitForDebuggerIfNecessary(); +#if !defined(OFFICIAL_BUILD) && defined(OS_WIN) + base::RouteStdioToConsole(false); +#endif + return ChildProcessMain(); +} + +} // namespace +} // shell +} // mojo + +int main(int argc, char** argv) { + base::CommandLine::Init(argc, argv); + if (base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kChildProcess)) { + return mojo::shell::RunChildProcess(); + } + // Reset CommandLine as most likely main() is going to use CommandLine too + // and expect to be able to initialize it. + base::CommandLine::Reset(); + return MasterProcessMain(argc, argv); +}
diff --git a/mojo/shell/background/background_shell_main.h b/mojo/shell/background/background_shell_main.h new file mode 100644 index 0000000..6b217d44 --- /dev/null +++ b/mojo/shell/background/background_shell_main.h
@@ -0,0 +1,12 @@ +// Copyright 2016 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 MOJO_SHELL_BACKGROUND_BACKGROUND_SHELL_MAIN_H_ +#define MOJO_SHELL_BACKGROUND_BACKGROUND_SHELL_MAIN_H_ + +// The "main" gn target supplies a file with a main() that calls to the child +// process as necessary. For the main process this function is called. +int MasterProcessMain(int argc, char** argv); + +#endif // MOJO_SHELL_BACKGROUND_BACKGROUND_SHELL_MAIN_H_
diff --git a/mojo/shell/capability_filter_test.cc b/mojo/shell/capability_filter_test.cc index 7a97f68..be91186 100644 --- a/mojo/shell/capability_filter_test.cc +++ b/mojo/shell/capability_filter_test.cc
@@ -13,10 +13,9 @@ #include "mojo/public/cpp/bindings/strong_binding.h" #include "mojo/shell/application_loader.h" #include "mojo/shell/package_manager.h" -#include "mojo/shell/public/cpp/application_impl.h" #include "mojo/shell/public/cpp/connection.h" #include "mojo/shell/public/cpp/interface_factory.h" -#include "mojo/shell/public/cpp/service_provider_impl.h" +#include "mojo/shell/public/cpp/shell_connection.h" namespace mojo { namespace shell { @@ -51,13 +50,13 @@ private: // Overridden from ApplicationLoader: void Load(const GURL& url, - InterfaceRequest<mojom::Application> request) override { - app_.reset(new ApplicationImpl(this, std::move(request))); + InterfaceRequest<mojom::ShellClient> request) override { + app_.reset(new ShellConnection(this, std::move(request))); } // Overridden from ShellClient: bool AcceptConnection(Connection* connection) override { - connection->AddService<Validator>(this); + connection->AddInterface<Validator>(this); return true; } @@ -95,7 +94,7 @@ } } - scoped_ptr<ApplicationImpl> app_; + scoped_ptr<ShellConnection> app_; std::set<std::string> expectations_; std::set<std::string> unexpected_; base::MessageLoop* loop_; @@ -146,7 +145,7 @@ validator_->AddServiceCalled(connection->GetRemoteApplicationURL(), connection->GetConnectionURL(), Interface::Name_, - !connection->AddService<Interface>(this)); + !connection->AddInterface<Interface>(this)); } Shell* shell_; @@ -170,7 +169,7 @@ } bool TestApplication::AcceptConnection(Connection* connection) { // TestApplications receive their Validator via the inbound connection. - connection->ConnectToService(&validator_); + connection->GetInterface(&validator_); connection1_ = shell_->Connect("test:service"); connection1_->SetRemoteServiceProviderConnectionErrorHandler( @@ -195,8 +194,8 @@ TestLoader::~TestLoader() {} void TestLoader::Load(const GURL& url, - InterfaceRequest<mojom::Application> request) { - app_.reset(new ApplicationImpl(delegate_.get(), std::move(request))); + InterfaceRequest<mojom::ShellClient> request) { + app_.reset(new ShellConnection(delegate_.get(), std::move(request))); } //////////////////////////////////////////////////////////////////////////////// @@ -292,6 +291,31 @@ application_manager_.reset(); } +class ServiceProviderImpl : public ServiceProvider { + public: + explicit ServiceProviderImpl( + InterfaceRequest<ServiceProvider> service_provider, + InterfaceFactory<Validator>* factory) + : binding_(this, std::move(service_provider)), + factory_(factory) {} + ~ServiceProviderImpl() override {} + + private: + // ServiceProvider method. + void ConnectToService(const mojo::String& service_name, + ScopedMessagePipeHandle client_handle) override { + if (service_name == Validator::Name_) { + factory_->Create(nullptr, + MakeRequest<Validator>(std::move(client_handle))); + } + } + + Binding<ServiceProvider> binding_; + InterfaceFactory<Validator>* factory_; + + DISALLOW_COPY_AND_ASSIGN(ServiceProviderImpl); +}; + void CapabilityFilterTest::RunApplication(const std::string& url, const CapabilityFilter& filter) { ServiceProviderPtr services; @@ -300,8 +324,7 @@ // because we don't allow the test application to connect to test:validator. // Adding it to the CapabilityFilter would interfere with the test. ServiceProviderPtr exposed_services; - (new ServiceProviderImpl(GetProxy(&exposed_services)))-> - AddService<Validator>(validator_); + new ServiceProviderImpl(GetProxy(&exposed_services), validator_); scoped_ptr<ConnectToApplicationParams> params( new ConnectToApplicationParams); params->SetTarget(Identity(GURL(url), std::string(), filter));
diff --git a/mojo/shell/capability_filter_test.h b/mojo/shell/capability_filter_test.h index 9052d182..e235802 100644 --- a/mojo/shell/capability_filter_test.h +++ b/mojo/shell/capability_filter_test.h
@@ -9,8 +9,8 @@ #include "mojo/shell/application_loader.h" #include "mojo/shell/application_manager.h" #include "mojo/shell/capability_filter_unittest.mojom.h" -#include "mojo/shell/public/cpp/application_impl.h" #include "mojo/shell/public/cpp/shell_client.h" +#include "mojo/shell/public/cpp/shell_connection.h" #include "testing/gtest/include/gtest/gtest.h" namespace mojo { @@ -51,10 +51,10 @@ private: // Overridden from ApplicationLoader: void Load(const GURL& url, - InterfaceRequest<mojom::Application> request) override; + InterfaceRequest<mojom::ShellClient> request) override; scoped_ptr<ShellClient> delegate_; - scoped_ptr<ApplicationImpl> app_; + scoped_ptr<ShellConnection> app_; DISALLOW_COPY_AND_ASSIGN(TestLoader); };
diff --git a/mojo/shell/fetcher/about_fetcher_unittest.cc b/mojo/shell/fetcher/about_fetcher_unittest.cc index b9e60462..9835e5c 100644 --- a/mojo/shell/fetcher/about_fetcher_unittest.cc +++ b/mojo/shell/fetcher/about_fetcher_unittest.cc
@@ -18,9 +18,9 @@ #include "mojo/shell/application_loader.h" #include "mojo/shell/application_manager.h" #include "mojo/shell/package_manager/package_manager_impl.h" -#include "mojo/shell/public/cpp/application_impl.h" #include "mojo/shell/public/cpp/interface_factory.h" #include "mojo/shell/public/cpp/shell_client.h" +#include "mojo/shell/public/cpp/shell_connection.h" #include "mojo/shell/public/interfaces/content_handler.mojom.h" #include "mojo/util/filename_util.h" #include "testing/gtest/include/gtest/gtest.h" @@ -43,7 +43,7 @@ // Overridden from ShellClient: void Initialize(Shell* shell, const std::string& url, uint32_t id) override {} bool AcceptConnection(Connection* connection) override { - connection->AddService<mojom::ContentHandler>(this); + connection->AddInterface<mojom::ContentHandler>(this); return true; } @@ -55,7 +55,7 @@ // Overridden from mojom::ContentHandler: void StartApplication( - InterfaceRequest<mojom::Application> application, + InterfaceRequest<mojom::ShellClient> request, URLResponsePtr response, const Callback<void()>& destruct_callback) override { response_number_++; @@ -84,12 +84,12 @@ private: // Overridden from ApplicationLoader: void Load(const GURL& url, - InterfaceRequest<mojom::Application> request) override { - app_.reset(new ApplicationImpl(delegate_, std::move(request))); + InterfaceRequest<mojom::ShellClient> request) override { + app_.reset(new ShellConnection(delegate_, std::move(request))); } ShellClient* delegate_; - scoped_ptr<ApplicationImpl> app_; + scoped_ptr<ShellConnection> app_; DISALLOW_COPY_AND_ASSIGN(TestLoader); };
diff --git a/mojo/shell/native_runner.h b/mojo/shell/native_runner.h index ea99a75..6ab587b4 100644 --- a/mojo/shell/native_runner.h +++ b/mojo/shell/native_runner.h
@@ -9,7 +9,7 @@ #include "base/memory/scoped_ptr.h" #include "base/process/process_handle.h" #include "mojo/public/cpp/bindings/interface_request.h" -#include "mojo/shell/public/interfaces/application.mojom.h" +#include "mojo/shell/public/interfaces/shell_client.mojom.h" #if defined(OS_WIN) #undef DELETE @@ -33,15 +33,14 @@ virtual void Start( const base::FilePath& app_path, bool start_sandboxed, - InterfaceRequest<mojom::Application> application_request, + InterfaceRequest<mojom::ShellClient> request, const base::Callback<void(base::ProcessId)>& pid_available_callback, const base::Closure& app_completed_callback) = 0; // Like Start(), but used to initialize the host for a child process started - // by someone else. Provides |application_request| via |channel|. - virtual void InitHost( - ScopedHandle channel, - InterfaceRequest<mojom::Application> application_request) = 0; + // by someone else. Provides |request| via |channel|. + virtual void InitHost(ScopedHandle channel, + InterfaceRequest<mojom::ShellClient> request) = 0; }; class NativeRunnerFactory {
diff --git a/mojo/shell/package_manager.h b/mojo/shell/package_manager.h index 1ffae75..80b5b8b 100644 --- a/mojo/shell/package_manager.h +++ b/mojo/shell/package_manager.h
@@ -10,7 +10,7 @@ #include "mojo/services/network/public/interfaces/url_loader.mojom.h" #include "mojo/shell/capability_filter.h" #include "mojo/shell/fetcher.h" -#include "mojo/shell/public/interfaces/application.mojom.h" +#include "mojo/shell/public/interfaces/shell_client.mojom.h" class GURL; @@ -44,7 +44,7 @@ // content handler. // |target_filter| is a CapabilityFilter that should be applied if a content // handler is started to handle |target_url|. - // |application_request| is a request for an Application implementation that + // |request| is a request for an Application implementation that // will be taken by ContentHandler::StartApplication if a content handler ends // up handling |target_url|. virtual uint32_t HandleWithContentHandler( @@ -52,7 +52,7 @@ const Identity& source, const GURL& target_url, const CapabilityFilter& target_filter, - InterfaceRequest<shell::mojom::Application>* application_request) = 0; + InterfaceRequest<shell::mojom::ShellClient>* request) = 0; // Returns true if a manifest for |url| exists within the PackageManager's // application catalog.
diff --git a/mojo/shell/package_manager/capability_filter_content_handler_unittest.cc b/mojo/shell/package_manager/capability_filter_content_handler_unittest.cc index fe88fe9..ac8e1edd 100644 --- a/mojo/shell/package_manager/capability_filter_content_handler_unittest.cc +++ b/mojo/shell/package_manager/capability_filter_content_handler_unittest.cc
@@ -12,9 +12,9 @@ #include "mojo/shell/capability_filter_test.h" #include "mojo/shell/fetcher.h" #include "mojo/shell/package_manager/package_manager_impl.h" -#include "mojo/shell/public/cpp/application_impl.h" #include "mojo/shell/public/cpp/interface_factory.h" #include "mojo/shell/public/cpp/shell_client.h" +#include "mojo/shell/public/cpp/shell_connection.h" #include "mojo/shell/public/interfaces/content_handler.mojom.h" #include "testing/gtest/include/gtest/gtest.h" @@ -87,7 +87,7 @@ // Overridden from ShellClient: void Initialize(Shell* shell, const std::string& url, uint32_t id) override {} bool AcceptConnection(Connection* connection) override { - connection->AddService<mojom::ContentHandler>(this); + connection->AddInterface<mojom::ContentHandler>(this); return true; } @@ -98,20 +98,19 @@ } // Overridden from mojom::ContentHandler: - void StartApplication( - InterfaceRequest<mojom::Application> application, - URLResponsePtr response, - const Callback<void()>& destruct_callback) override { + void StartApplication(InterfaceRequest<mojom::ShellClient> request, + URLResponsePtr response, + const Callback<void()>& destruct_callback) override { scoped_ptr<ShellClient> delegate(new test::TestApplication); embedded_apps_.push_back( - new ApplicationImpl(delegate.get(), std::move(application))); + new ShellConnection(delegate.get(), std::move(request))); embedded_app_delegates_.push_back(std::move(delegate)); destruct_callback.Run(); } WeakBindingSet<mojom::ContentHandler> bindings_; ScopedVector<ShellClient> embedded_app_delegates_; - ScopedVector<ApplicationImpl> embedded_apps_; + ScopedVector<ShellConnection> embedded_apps_; DISALLOW_COPY_AND_ASSIGN(TestContentHandler); };
diff --git a/mojo/shell/package_manager/content_handler_connection.cc b/mojo/shell/package_manager/content_handler_connection.cc index 7271fb8..2bddab0f 100644 --- a/mojo/shell/package_manager/content_handler_connection.cc +++ b/mojo/shell/package_manager/content_handler_connection.cc
@@ -46,7 +46,7 @@ } void ContentHandlerConnection::StartApplication( - InterfaceRequest<mojom::Application> request, + InterfaceRequest<mojom::ShellClient> request, URLResponsePtr response) { content_handler_->StartApplication( std::move(request), std::move(response),
diff --git a/mojo/shell/package_manager/content_handler_connection.h b/mojo/shell/package_manager/content_handler_connection.h index c1c45511..11d3b70 100644 --- a/mojo/shell/package_manager/content_handler_connection.h +++ b/mojo/shell/package_manager/content_handler_connection.h
@@ -35,7 +35,7 @@ uint32_t id, const ClosedCallback& connection_closed_callback); - void StartApplication(InterfaceRequest<mojom::Application> request, + void StartApplication(InterfaceRequest<mojom::ShellClient> request, URLResponsePtr response); // Closes the connection and destroys |this| object.
diff --git a/mojo/shell/package_manager/content_handler_unittest.cc b/mojo/shell/package_manager/content_handler_unittest.cc index 4d743af..6ec2300 100644 --- a/mojo/shell/package_manager/content_handler_unittest.cc +++ b/mojo/shell/package_manager/content_handler_unittest.cc
@@ -19,9 +19,9 @@ #include "mojo/shell/connect_util.h" #include "mojo/shell/fetcher.h" #include "mojo/shell/package_manager/package_manager_impl.h" -#include "mojo/shell/public/cpp/application_impl.h" #include "mojo/shell/public/cpp/interface_factory.h" #include "mojo/shell/public/cpp/shell_client.h" +#include "mojo/shell/public/cpp/shell_connection.h" #include "mojo/shell/public/interfaces/content_handler.mojom.h" #include "mojo/shell/public/interfaces/service_provider.mojom.h" #include "mojo/shell/test_package_manager.h" @@ -72,7 +72,7 @@ } class TestContentHandler : public mojom::ContentHandler, - public ShellClient{ + public ShellClient { public: TestContentHandler(Connection* connection, InterfaceRequest<mojom::ContentHandler> request) @@ -80,16 +80,16 @@ // ContentHandler: void StartApplication( - InterfaceRequest<mojom::Application> application_request, + InterfaceRequest<mojom::ShellClient> request, URLResponsePtr response, const Callback<void()>& destruct_callback) override { - apps_.push_back(new ApplicationImpl(this, std::move(application_request))); + shell_connections_.push_back(new ShellConnection(this, std::move(request))); destruct_callback.Run(); } private: StrongBinding<mojom::ContentHandler> binding_; - ScopedVector<ApplicationImpl> apps_; + ScopedVector<ShellConnection> shell_connections_; DISALLOW_COPY_AND_ASSIGN(TestContentHandler); }; @@ -107,14 +107,14 @@ private: // ApplicationLoader implementation. void Load(const GURL& url, - InterfaceRequest<mojom::Application> application_request) override { + InterfaceRequest<mojom::ShellClient> request) override { ++num_loads_; - test_app_.reset(new ApplicationImpl(this, std::move(application_request))); + shell_connection_.reset(new ShellConnection(this, std::move(request))); } // mojo::ShellClient implementation. bool AcceptConnection(Connection* connection) override { - connection->AddService<mojom::ContentHandler>(this); + connection->AddInterface<mojom::ContentHandler>(this); last_requestor_url_ = GURL(connection->GetRemoteApplicationURL()); return true; } @@ -124,7 +124,7 @@ new TestContentHandler(connection, std::move(request)); } - scoped_ptr<ApplicationImpl> test_app_; + scoped_ptr<ShellConnection> shell_connection_; int num_loads_; GURL last_requestor_url_;
diff --git a/mojo/shell/package_manager/package_manager_impl.cc b/mojo/shell/package_manager/package_manager_impl.cc index 6985381d..a639bc3d 100644 --- a/mojo/shell/package_manager/package_manager_impl.cc +++ b/mojo/shell/package_manager/package_manager_impl.cc
@@ -181,7 +181,7 @@ const Identity& source, const GURL& target_url, const CapabilityFilter& target_filter, - InterfaceRequest<mojom::Application>* application_request) { + InterfaceRequest<mojom::ShellClient>* request) { Identity content_handler_identity; URLResponsePtr response; if (ShouldHandleWithContentHandler(fetcher, @@ -191,8 +191,7 @@ &response)) { ContentHandlerConnection* connection = GetContentHandler(content_handler_identity, source); - connection->StartApplication(std::move(*application_request), - std::move(response)); + connection->StartApplication(std::move(*request), std::move(response)); return connection->id(); } return mojom::Shell::kInvalidApplicationID;
diff --git a/mojo/shell/package_manager/package_manager_impl.h b/mojo/shell/package_manager/package_manager_impl.h index fdef369..ee215a61 100644 --- a/mojo/shell/package_manager/package_manager_impl.h +++ b/mojo/shell/package_manager/package_manager_impl.h
@@ -98,7 +98,7 @@ const Identity& source, const GURL& target_url, const CapabilityFilter& target_filter, - InterfaceRequest<mojom::Application>* application_request) override; + InterfaceRequest<mojom::ShellClient>* request) override; bool IsURLInCatalog(const std::string& url) const override; std::string GetApplicationName(const std::string& url) const override;
diff --git a/mojo/shell/public/cpp/BUILD.gn b/mojo/shell/public/cpp/BUILD.gn index 1d8ad189..53a0d99 100644 --- a/mojo/shell/public/cpp/BUILD.gn +++ b/mojo/shell/public/cpp/BUILD.gn
@@ -21,27 +21,23 @@ source_set("sources") { sources = [ "app_lifetime_helper.h", - "application_impl.h", "application_runner.h", "connect.h", "connection.h", "initialize_base_and_icu.cc", + "interface_binder.h", "interface_factory.h", "interface_factory_impl.h", "lib/app_lifetime_helper.cc", - "lib/application_impl.cc", "lib/application_runner.cc", - "lib/interface_factory_connector.h", - "lib/service_connector_registry.cc", - "lib/service_connector_registry.h", - "lib/service_provider_impl.cc", - "lib/service_registry.cc", - "lib/service_registry.h", + "lib/connection_impl.cc", + "lib/connection_impl.h", + "lib/interface_factory_binder.h", "lib/shell_client.cc", - "service_connector.h", - "service_provider_impl.h", + "lib/shell_connection.cc", "shell.h", "shell_client.h", + "shell_connection.h", ] deps = [
diff --git a/mojo/shell/public/cpp/app_lifetime_helper.h b/mojo/shell/public/cpp/app_lifetime_helper.h index ae2503f..14620b3a 100644 --- a/mojo/shell/public/cpp/app_lifetime_helper.h +++ b/mojo/shell/public/cpp/app_lifetime_helper.h
@@ -11,7 +11,7 @@ namespace mojo { -class ApplicationImpl; +class ShellConnection; class AppLifetimeHelper; // A service implementation should keep this object as a member variable to hold @@ -54,10 +54,10 @@ // creates an instance of a service, it gives it a refcount using // CreateAppRefCount. The service implementation then keeps that object as a // member variable. When all the service implemenations go away, the app will be -// quit with a call to mojo::ApplicationImpl::Terminate(). +// quit with a call to mojo::ShellConnection::Terminate(). class AppLifetimeHelper { public: - explicit AppLifetimeHelper(ApplicationImpl* app); + explicit AppLifetimeHelper(ShellConnection* app); ~AppLifetimeHelper(); scoped_ptr<AppRefCount> CreateAppRefCount(); @@ -67,10 +67,10 @@ void AddRef(); void Release(); - friend ApplicationImpl; + friend ShellConnection; void OnQuit(); - ApplicationImpl* app_; + ShellConnection* app_; int ref_count_; DISALLOW_COPY_AND_ASSIGN(AppLifetimeHelper);
diff --git a/mojo/shell/public/cpp/application_impl.h b/mojo/shell/public/cpp/application_impl.h deleted file mode 100644 index 9f35a0d0..0000000 --- a/mojo/shell/public/cpp/application_impl.h +++ /dev/null
@@ -1,146 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef MOJO_SHELL_PUBLIC_CPP_APPLICATION_IMPL_H_ -#define MOJO_SHELL_PUBLIC_CPP_APPLICATION_IMPL_H_ - -#include <utility> -#include <vector> - -#include "base/macros.h" -#include "base/memory/scoped_vector.h" -#include "base/memory/weak_ptr.h" -#include "mojo/public/cpp/bindings/binding.h" -#include "mojo/public/cpp/bindings/callback.h" -#include "mojo/public/cpp/system/core.h" -#include "mojo/shell/public/cpp/app_lifetime_helper.h" -#include "mojo/shell/public/cpp/lib/service_registry.h" -#include "mojo/shell/public/cpp/shell.h" -#include "mojo/shell/public/cpp/shell_client.h" -#include "mojo/shell/public/interfaces/application.mojom.h" -#include "mojo/shell/public/interfaces/shell.mojom.h" - -namespace mojo { - -// TODO(beng): This comment is hilariously out of date. -// Utility class for communicating with the Shell, and providing Services -// to clients. -// -// To use define a class that implements your specific server api, e.g. FooImpl -// to implement a service named Foo. -// That class must subclass an InterfaceImpl specialization. -// -// If there is context that is to be shared amongst all instances, define a -// constructor with that class as its only argument, otherwise define an empty -// constructor. -// -// class FooImpl : public InterfaceImpl<Foo> { -// public: -// FooImpl(ApplicationContext* app_context) {} -// }; -// -// or -// -// class BarImpl : public InterfaceImpl<Bar> { -// public: -// // contexts will remain valid for the lifetime of BarImpl. -// BarImpl(ApplicationContext* app_context, BarContext* service_context) -// : app_context_(app_context), servicecontext_(context) {} -// -// Create an ApplicationImpl instance that collects any service implementations. -// -// ApplicationImpl app(service_provider_handle); -// app.AddService<FooImpl>(); -// -// BarContext context; -// app.AddService<BarImpl>(&context); -// -// -class ApplicationImpl : public Shell, public shell::mojom::Application { - public: - class TestApi { - public: - explicit TestApi(ApplicationImpl* application) - : application_(application) {} - - void UnbindConnections( - InterfaceRequest<shell::mojom::Application>* application_request, - shell::mojom::ShellPtr* shell) { - application_->UnbindConnections(application_request, shell); - } - - private: - ApplicationImpl* application_; - }; - - // Does not take ownership of |delegate|, which must remain valid for the - // lifetime of ApplicationImpl. - ApplicationImpl(ShellClient* client, - InterfaceRequest<shell::mojom::Application> request); - // Constructs an ApplicationImpl with a custom termination closure. This - // closure is invoked on Quit() instead of the default behavior of quitting - // the current base::MessageLoop. - ApplicationImpl(ShellClient* client, - InterfaceRequest<shell::mojom::Application> request, - const Closure& termination_closure); - ~ApplicationImpl() override; - - // The Mojo shell. This will return a valid pointer after Initialize() has - // been invoked. It will remain valid until UnbindConnections() is invoked or - // the ApplicationImpl is destroyed. - shell::mojom::Shell* shell() const { return shell_.get(); } - - // Block the calling thread until the Initialize() method is called by the - // shell. - void WaitForInitialize(); - - // Shell. - scoped_ptr<Connection> Connect(const std::string& url) override; - scoped_ptr<Connection> Connect(ConnectParams* params) override; - void Quit() override; - scoped_ptr<AppRefCount> CreateAppRefCount() override; - - private: - // shell::mojom::Application implementation. - void Initialize(shell::mojom::ShellPtr shell, - const mojo::String& url, - uint32_t id) override; - void AcceptConnection(const String& requestor_url, - uint32_t requestor_id, - InterfaceRequest<ServiceProvider> services, - ServiceProviderPtr exposed_services, - Array<String> allowed_interfaces, - const String& url) override; - void OnQuitRequested(const Callback<void(bool)>& callback) override; - - void OnConnectionError(); - - // Called from Quit() when there is no Shell connection, or asynchronously - // from Quit() once the Shell has OK'ed shutdown. - void QuitNow(); - - // Unbinds the Shell and Application connections. Can be used to re-bind the - // handles to another implementation of ApplicationImpl, for instance when - // running apptests. - void UnbindConnections( - InterfaceRequest<shell::mojom::Application>* application_request, - shell::mojom::ShellPtr* shell); - - // We track the lifetime of incoming connection registries as it more - // convenient for the client. - ScopedVector<Connection> incoming_connections_; - ShellClient* client_; - Binding<shell::mojom::Application> binding_; - shell::mojom::ShellPtr shell_; - Closure termination_closure_; - AppLifetimeHelper app_lifetime_helper_; - bool quit_requested_; - base::WeakPtrFactory<ApplicationImpl> weak_factory_; - - MOJO_DISALLOW_COPY_AND_ASSIGN(ApplicationImpl); -}; - -} // namespace mojo - -#endif // MOJO_SHELL_PUBLIC_CPP_APPLICATION_IMPL_H_
diff --git a/mojo/shell/public/cpp/application_runner.h b/mojo/shell/public/cpp/application_runner.h index ddebcd74..c9b2baa 100644 --- a/mojo/shell/public/cpp/application_runner.h +++ b/mojo/shell/public/cpp/application_runner.h
@@ -35,7 +35,7 @@ void set_message_loop_type(base::MessageLoop::Type type); // Once the various parameters have been set above, use Run to initialize an - // ApplicationImpl wired to the provided delegate, and run a MessageLoop until + // ShellConnection wired to the provided delegate, and run a MessageLoop until // the application exits. // // Iff |init_base| is true, the runner will perform some initialization of
diff --git a/mojo/shell/public/cpp/application_test_base.h b/mojo/shell/public/cpp/application_test_base.h index eec60d81..f8ff6ad 100644 --- a/mojo/shell/public/cpp/application_test_base.h +++ b/mojo/shell/public/cpp/application_test_base.h
@@ -9,22 +9,22 @@ #include "mojo/public/cpp/bindings/array.h" #include "mojo/public/cpp/bindings/string.h" #include "mojo/public/cpp/system/macros.h" -#include "mojo/shell/public/cpp/application_impl.h" #include "mojo/shell/public/cpp/shell_client.h" -#include "mojo/shell/public/interfaces/application.mojom.h" +#include "mojo/shell/public/cpp/shell_connection.h" +#include "mojo/shell/public/interfaces/shell_client.mojom.h" #include "testing/gtest/include/gtest/gtest.h" namespace mojo { -class ApplicationImpl; +class ShellConnection; namespace test { // Run all application tests. This must be called after the environment is // initialized, to support construction of a default run loop. -MojoResult RunAllTests(MojoHandle application_request_handle); +MojoResult RunAllTests(MojoHandle shell_client_request_handle); -// Used to configure the ApplicationImpl. This is used internally by +// Used to configure the ShellConnection. This is used internally by // ApplicationTestBase, but useful if you do not want to subclass // ApplicationTestBase. class TestHelper { @@ -32,7 +32,7 @@ explicit TestHelper(ShellClient* client); ~TestHelper(); - Shell* shell() { return application_impl_.get(); } + Shell* shell() { return shell_connection_.get(); } std::string shell_url() { return url_; } private: @@ -40,7 +40,7 @@ ShellClient default_shell_client_; // The application implementation instance, reconstructed for each test. - scoped_ptr<ApplicationImpl> application_impl_; + scoped_ptr<ShellConnection> shell_connection_; std::string url_;
diff --git a/mojo/shell/public/cpp/connection.h b/mojo/shell/public/cpp/connection.h index a21657ff..59fc574 100644 --- a/mojo/shell/public/cpp/connection.h +++ b/mojo/shell/public/cpp/connection.h
@@ -11,12 +11,12 @@ #include <utility> #include "base/memory/weak_ptr.h" -#include "mojo/shell/public/cpp/lib/interface_factory_connector.h" +#include "mojo/shell/public/cpp/lib/interface_factory_binder.h" #include "mojo/shell/public/interfaces/service_provider.mojom.h" namespace mojo { -class ServiceConnector; +class InterfaceBinder; // Represents a connection to another application. An instance of this class is // passed to ShellClient's AcceptConnection() method each @@ -32,18 +32,18 @@ // Or, if you have multiple factories implemented by the same type, explicitly // specify the interface to register the factory for: // -// connection->AddService<Foo>(&my_foo_and_bar_factory_); -// connection->AddService<Bar>(&my_foo_and_bar_factory_); +// connection->AddInterface<Foo>(&my_foo_and_bar_factory_); +// connection->AddInterface<Bar>(&my_foo_and_bar_factory_); // // The InterfaceFactory must outlive the Connection. // -// Additionally you specify a ServiceConnector. If a ServiceConnector has +// Additionally you specify a InterfaceBinder. If a InterfaceBinder has // been set and an InterfaceFactory has not been registered for the interface -// request, than the interface request is sent to the ServiceConnector. +// request, than the interface request is sent to the InterfaceBinder. // -// Just as with InterfaceFactory, ServiceConnector must outlive Connection. +// Just as with InterfaceFactory, InterfaceBinder must outlive Connection. // -// An Connection's lifetime is managed by an ApplicationImpl. To close a +// An Connection's lifetime is managed by an ShellConnection. To close a // connection, call CloseConnection which will destroy this object. class Connection { public: @@ -61,16 +61,16 @@ }; // See class description for details. - virtual void SetServiceConnector(ServiceConnector* connector) = 0; + virtual void SetDefaultInterfaceBinder(InterfaceBinder* binder) = 0; // Makes Interface available as a service to the remote application. // |factory| will create implementations of Interface on demand. // Returns true if the service was exposed, false if capability filtering // from the shell prevented the service from being exposed. template <typename Interface> - bool AddService(InterfaceFactory<Interface>* factory) { - return SetServiceConnectorForName( - new internal::InterfaceFactoryConnector<Interface>(factory), + bool AddInterface(InterfaceFactory<Interface>* factory) { + return SetInterfaceBinderForName( + new internal::InterfaceFactoryBinder<Interface>(factory), Interface::Name_); } @@ -78,8 +78,8 @@ // |ptr| can immediately be used to start sending requests to the remote // service. template <typename Interface> - void ConnectToService(InterfacePtr<Interface>* ptr) { - if (ServiceProvider* sp = GetServiceProvider()) { + void GetInterface(InterfacePtr<Interface>* ptr) { + if (ServiceProvider* sp = GetRemoteInterfaces()) { MessagePipe pipe; ptr->Bind(InterfacePtrInfo<Interface>(std::move(pipe.handle0), 0u)); sp->ConnectToService(Interface::Name_, std::move(pipe.handle1)); @@ -104,11 +104,11 @@ // Returns the raw proxy to the remote application's ServiceProvider // interface. Most applications will just use ConnectToService() instead. // Caller does not take ownership. - virtual ServiceProvider* GetServiceProvider() = 0; + virtual ServiceProvider* GetRemoteInterfaces() = 0; // Returns the local application's ServiceProvider interface. The return // value is owned by this connection. - virtual ServiceProvider* GetLocalServiceProvider() = 0; + virtual ServiceProvider* GetLocalInterfaces() = 0; // Register a handler to receive an error notification on the pipe to the // remote application's service provider. @@ -135,9 +135,9 @@ virtual void AddRemoteIDCallback(const Closure& callback) = 0; protected: - // Returns true if the connector was set, false if it was not set (e.g. by + // Returns true if the binder was set, false if it was not set (e.g. by // some filtering policy preventing this interface from being exposed). - virtual bool SetServiceConnectorForName(ServiceConnector* service_connector, + virtual bool SetInterfaceBinderForName(InterfaceBinder* binder, const std::string& name) = 0; virtual base::WeakPtr<Connection> GetWeakPtr() = 0;
diff --git a/mojo/shell/public/cpp/content_handler_factory.h b/mojo/shell/public/cpp/content_handler_factory.h index a174cdd..9e3c5ff 100644 --- a/mojo/shell/public/cpp/content_handler_factory.h +++ b/mojo/shell/public/cpp/content_handler_factory.h
@@ -28,7 +28,7 @@ // Implement this method to create the Application. This method will be // called on a new thread. Leaving this method will quit the application. virtual void RunApplication( - InterfaceRequest<shell::mojom::Application> application_request, + InterfaceRequest<shell::mojom::ShellClient> request, URLResponsePtr response) = 0; }; @@ -40,13 +40,12 @@ // on this new thread, and the returned value will be kept alive until the // application ends. virtual scoped_ptr<HandledApplicationHolder> CreateApplication( - InterfaceRequest<shell::mojom::Application> application_request, + InterfaceRequest<shell::mojom::ShellClient> request, URLResponsePtr response) = 0; private: - void RunApplication( - InterfaceRequest<shell::mojom::Application> application_request, - URLResponsePtr response) override; + void RunApplication(InterfaceRequest<shell::mojom::ShellClient> request, + URLResponsePtr response) override; }; explicit ContentHandlerFactory(Delegate* delegate);
diff --git a/mojo/shell/public/cpp/interface_binder.h b/mojo/shell/public/cpp/interface_binder.h new file mode 100644 index 0000000..9d4dada --- /dev/null +++ b/mojo/shell/public/cpp/interface_binder.h
@@ -0,0 +1,30 @@ +// Copyright 2015 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 MOJO_SHELL_PUBLIC_CPP_INTERFACE_BINDER_H_ +#define MOJO_SHELL_PUBLIC_CPP_INTERFACE_BINDER_H_ + +#include <string> + +#include "mojo/public/cpp/system/message_pipe.h" + +namespace mojo { + +class Connection; + +class InterfaceBinder { + public: + virtual ~InterfaceBinder() {} + + // Asks the InterfaceBinder to bind an implementation of the specified + // interface to the request passed via |handle|. If the InterfaceBinder binds + // an implementation it must take ownership of the request handle. + virtual void BindInterface(Connection* connection, + const std::string& interface_name, + ScopedMessagePipeHandle handle) = 0; +}; + +} // namespace mojo + +#endif // MOJO_SHELL_PUBLIC_CPP_INTERFACE_BINDER_H_
diff --git a/mojo/shell/public/cpp/lib/app_lifetime_helper.cc b/mojo/shell/public/cpp/lib/app_lifetime_helper.cc index 0772412a..b2a95a7 100644 --- a/mojo/shell/public/cpp/lib/app_lifetime_helper.cc +++ b/mojo/shell/public/cpp/lib/app_lifetime_helper.cc
@@ -6,7 +6,7 @@ #include "base/bind.h" #include "base/message_loop/message_loop.h" -#include "mojo/shell/public/cpp/application_impl.h" +#include "mojo/shell/public/cpp/shell_connection.h" namespace mojo { @@ -63,7 +63,7 @@ app_lifetime_helper_, app_task_runner_)); } -AppLifetimeHelper::AppLifetimeHelper(ApplicationImpl* app) +AppLifetimeHelper::AppLifetimeHelper(ShellConnection* app) : app_(app), ref_count_(0) { }
diff --git a/mojo/shell/public/cpp/lib/application_impl.cc b/mojo/shell/public/cpp/lib/application_impl.cc deleted file mode 100644 index 132737f..0000000 --- a/mojo/shell/public/cpp/lib/application_impl.cc +++ /dev/null
@@ -1,188 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include <algorithm> -#include <utility> - -#include "base/bind.h" -#include "base/message_loop/message_loop.h" -#include "mojo/converters/network/network_type_converters.h" -#include "mojo/public/cpp/bindings/interface_ptr.h" -#include "mojo/public/cpp/environment/logging.h" -#include "mojo/shell/public/cpp/application_impl.h" -#include "mojo/shell/public/cpp/lib/service_registry.h" -#include "mojo/shell/public/cpp/shell_client.h" - -namespace mojo { - -namespace { - -void DefaultTerminationClosure() { - if (base::MessageLoop::current() && - base::MessageLoop::current()->is_running()) - base::MessageLoop::current()->QuitWhenIdle(); -} - -} // namespace - -ApplicationImpl::ConnectParams::ConnectParams(const std::string& url) - : ConnectParams(URLRequest::From(url)) {} -ApplicationImpl::ConnectParams::ConnectParams(URLRequestPtr request) - : request_(std::move(request)), - filter_(shell::mojom::CapabilityFilter::New()) { - filter_->filter.mark_non_null(); -} -ApplicationImpl::ConnectParams::~ConnectParams() {} - -ApplicationImpl::ApplicationImpl( - ShellClient* client, - InterfaceRequest<shell::mojom::Application> request) - : ApplicationImpl(client, - std::move(request), - base::Bind(&DefaultTerminationClosure)) {} - -ApplicationImpl::ApplicationImpl( - ShellClient* client, - InterfaceRequest<shell::mojom::Application> request, - const Closure& termination_closure) - : client_(client), - binding_(this, std::move(request)), - termination_closure_(termination_closure), - app_lifetime_helper_(this), - quit_requested_(false), - weak_factory_(this) {} - -ApplicationImpl::~ApplicationImpl() { - app_lifetime_helper_.OnQuit(); -} - -void ApplicationImpl::WaitForInitialize() { - DCHECK(!shell_.is_bound()); - binding_.WaitForIncomingMethodCall(); -} - -scoped_ptr<Connection> ApplicationImpl::Connect(const std::string& url) { - ConnectParams params(url); - params.set_filter(CreatePermissiveCapabilityFilter()); - return Connect(¶ms); -} - -scoped_ptr<Connection> ApplicationImpl::Connect(ConnectParams* params) { - if (!shell_) - return nullptr; - DCHECK(params); - URLRequestPtr request = params->TakeRequest(); - ServiceProviderPtr local_services; - InterfaceRequest<ServiceProvider> local_request = GetProxy(&local_services); - ServiceProviderPtr remote_services; - std::string application_url = request->url.To<std::string>(); - // We allow all interfaces on outgoing connections since we are presumably in - // a position to know who we're talking to. - // TODO(beng): is this a valid assumption or do we need to figure some way to - // filter here too? - std::set<std::string> allowed; - allowed.insert("*"); - InterfaceRequest<ServiceProvider> remote_services_proxy = - GetProxy(&remote_services); - scoped_ptr<internal::ServiceRegistry> registry(new internal::ServiceRegistry( - application_url, application_url, - shell::mojom::Shell::kInvalidApplicationID, std::move(remote_services), - std::move(local_request), allowed)); - shell_->ConnectToApplication(std::move(request), - std::move(remote_services_proxy), - std::move(local_services), params->TakeFilter(), - registry->GetConnectToApplicationCallback()); - return std::move(registry); -} - -void ApplicationImpl::Quit() { - // We can't quit immediately, since there could be in-flight requests from the - // shell. So check with it first. - if (shell_) { - quit_requested_ = true; - shell_->QuitApplication(); - } else { - QuitNow(); - } -} - -scoped_ptr<AppRefCount> ApplicationImpl::CreateAppRefCount() { - return app_lifetime_helper_.CreateAppRefCount(); -} - -void ApplicationImpl::Initialize(shell::mojom::ShellPtr shell, - const mojo::String& url, - uint32_t id) { - shell_ = std::move(shell); - shell_.set_connection_error_handler([this]() { OnConnectionError(); }); - client_->Initialize(this, url, id); -} - -void ApplicationImpl::AcceptConnection( - const String& requestor_url, - uint32_t requestor_id, - InterfaceRequest<ServiceProvider> services, - ServiceProviderPtr exposed_services, - Array<String> allowed_interfaces, - const String& url) { - scoped_ptr<Connection> registry(new internal::ServiceRegistry( - url, requestor_url, requestor_id, std::move(exposed_services), - std::move(services), allowed_interfaces.To<std::set<std::string>>())); - if (!client_->AcceptConnection(registry.get())) - return; - - // If we were quitting because we thought there were no more services for this - // app in use, then that has changed so cancel the quit request. - if (quit_requested_) - quit_requested_ = false; - - incoming_connections_.push_back(std::move(registry)); -} - -void ApplicationImpl::OnQuitRequested(const Callback<void(bool)>& callback) { - // If by the time we got the reply from the shell, more requests had come in - // then we don't want to quit the app anymore so we return false. Otherwise - // |quit_requested_| is true so we tell the shell to proceed with the quit. - callback.Run(quit_requested_); - if (quit_requested_) - QuitNow(); -} - -void ApplicationImpl::OnConnectionError() { - base::WeakPtr<ApplicationImpl> ptr(weak_factory_.GetWeakPtr()); - - // We give the client notice first, since it might want to do something on - // shell connection errors other than immediate termination of the run - // loop. The application might want to continue servicing connections other - // than the one to the shell. - bool quit_now = client_->ShellConnectionLost(); - if (quit_now) - QuitNow(); - if (!ptr) - return; - shell_ = nullptr; -} - -void ApplicationImpl::QuitNow() { - client_->Quit(); - termination_closure_.Run(); -} - -void ApplicationImpl::UnbindConnections( - InterfaceRequest<shell::mojom::Application>* application_request, - shell::mojom::ShellPtr* shell) { - *application_request = binding_.Unbind(); - shell->Bind(shell_.PassInterface()); -} - -shell::mojom::CapabilityFilterPtr CreatePermissiveCapabilityFilter() { - shell::mojom::CapabilityFilterPtr filter( - shell::mojom::CapabilityFilter::New()); - Array<String> all_interfaces; - all_interfaces.push_back("*"); - filter->filter.insert("*", std::move(all_interfaces)); - return filter; -} - -} // namespace mojo
diff --git a/mojo/shell/public/cpp/lib/application_runner.cc b/mojo/shell/public/cpp/lib/application_runner.cc index 245dcd5..c4aba6d 100644 --- a/mojo/shell/public/cpp/lib/application_runner.cc +++ b/mojo/shell/public/cpp/lib/application_runner.cc
@@ -10,8 +10,8 @@ #include "base/message_loop/message_loop.h" #include "base/process/launch.h" #include "mojo/message_pump/message_pump_mojo.h" -#include "mojo/shell/public/cpp/application_impl.h" #include "mojo/shell/public/cpp/shell_client.h" +#include "mojo/shell/public/cpp/shell_connection.h" namespace mojo { @@ -36,7 +36,7 @@ message_loop_type_ = type; } -MojoResult ApplicationRunner::Run(MojoHandle application_request_handle, +MojoResult ApplicationRunner::Run(MojoHandle shell_client_request_handle, bool init_base) { DCHECK(!has_run_); has_run_ = true; @@ -54,10 +54,10 @@ else loop.reset(new base::MessageLoop(message_loop_type_)); - ApplicationImpl impl(client_.get(), - MakeRequest<shell::mojom::Application>( + ShellConnection impl(client_.get(), + MakeRequest<shell::mojom::ShellClient>( MakeScopedHandle(MessagePipeHandle( - application_request_handle)))); + shell_client_request_handle)))); loop->Run(); // It's very common for the client to cache the app and terminate on errors. // If we don't delete the client before the app we run the risk of the @@ -71,8 +71,8 @@ return MOJO_RESULT_OK; } -MojoResult ApplicationRunner::Run(MojoHandle application_request_handle) { - return Run(application_request_handle, true); +MojoResult ApplicationRunner::Run(MojoHandle shell_client_request_handle) { + return Run(shell_client_request_handle, true); } } // namespace mojo
diff --git a/mojo/shell/public/cpp/lib/application_test_base.cc b/mojo/shell/public/cpp/lib/application_test_base.cc index 2bf6975..2349543 100644 --- a/mojo/shell/public/cpp/lib/application_test_base.cc +++ b/mojo/shell/public/cpp/lib/application_test_base.cc
@@ -9,9 +9,9 @@ #include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/environment/environment.h" #include "mojo/public/cpp/system/message_pipe.h" -#include "mojo/shell/public/cpp/application_impl.h" #include "mojo/shell/public/cpp/application_test_base.h" -#include "mojo/shell/public/interfaces/application.mojom.h" +#include "mojo/shell/public/cpp/shell_connection.h" +#include "mojo/shell/public/interfaces/shell_client.mojom.h" namespace mojo { namespace test { @@ -21,34 +21,33 @@ String g_url; uint32_t g_id = shell::mojom::Shell::kInvalidApplicationID; -// Application request handle passed from the shell in MojoMain, stored in -// between SetUp()/TearDown() so we can (re-)intialize new ApplicationImpls. -InterfaceRequest<shell::mojom::Application> g_application_request; +// ShellClient request handle passed from the shell in MojoMain, stored in +// between SetUp()/TearDown() so we can (re-)intialize new ShellConnections. +InterfaceRequest<shell::mojom::ShellClient> g_shell_client_request; -// Shell pointer passed in the initial mojo.Application.Initialize() call, +// Shell pointer passed in the initial mojo.ShellClient.Initialize() call, // stored in between initial setup and the first test and between SetUp/TearDown -// calls so we can (re-)initialize new ApplicationImpls. +// calls so we can (re-)initialize new ShellConnections. shell::mojom::ShellPtr g_shell; -class ShellGrabber : public shell::mojom::Application { +class ShellGrabber : public shell::mojom::ShellClient { public: - explicit ShellGrabber( - InterfaceRequest<shell::mojom::Application> application_request) - : binding_(this, std::move(application_request)) {} + explicit ShellGrabber(InterfaceRequest<shell::mojom::ShellClient> request) + : binding_(this, std::move(request)) {} void WaitForInitialize() { - // Initialize is always the first call made on Application. + // Initialize is always the first call made on ShellClient. MOJO_CHECK(binding_.WaitForIncomingMethodCall()); } private: - // Application implementation. + // shell::mojom::ShellClient implementation. void Initialize(shell::mojom::ShellPtr shell, const mojo::String& url, uint32_t id) override { g_url = url; g_id = id; - g_application_request = binding_.Unbind(); + g_shell_client_request = binding_.Unbind(); g_shell = std::move(shell); } @@ -65,23 +64,23 @@ MOJO_CHECK(false); } - Binding<Application> binding_; + Binding<ShellClient> binding_; }; } // namespace -MojoResult RunAllTests(MojoHandle application_request_handle) { +MojoResult RunAllTests(MojoHandle shell_client_request_handle) { { // This loop is used for init, and then destroyed before running tests. Environment::InstantiateDefaultRunLoop(); // Grab the shell handle. ShellGrabber grabber( - MakeRequest<shell::mojom::Application>(MakeScopedHandle( - MessagePipeHandle(application_request_handle)))); + MakeRequest<shell::mojom::ShellClient>(MakeScopedHandle( + MessagePipeHandle(shell_client_request_handle)))); grabber.WaitForInitialize(); MOJO_CHECK(g_shell); - MOJO_CHECK(g_application_request.is_pending()); + MOJO_CHECK(g_shell_client_request.is_pending()); int argc = 0; base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess(); @@ -107,31 +106,31 @@ int result = RUN_ALL_TESTS(); // Shut down our message pipes before exiting. - (void)g_application_request.PassMessagePipe(); + (void)g_shell_client_request.PassMessagePipe(); g_shell.reset(); return (result == 0) ? MOJO_RESULT_OK : MOJO_RESULT_UNKNOWN; } TestHelper::TestHelper(ShellClient* client) - : application_impl_(new ApplicationImpl( + : shell_connection_(new ShellConnection( client == nullptr ? &default_shell_client_ : client, - std::move(g_application_request))), + std::move(g_shell_client_request))), url_(g_url) { - // Fake application initialization. - shell::mojom::Application* application = application_impl_.get(); - application->Initialize(std::move(g_shell), g_url, g_id); + // Fake ShellClient initialization. + shell::mojom::ShellClient* shell_client = shell_connection_.get(); + shell_client->Initialize(std::move(g_shell), g_url, g_id); } TestHelper::~TestHelper() { // TODO: commented out until http://crbug.com/533107 is solved. // { - // ApplicationImpl::TestApi test_api(application_impl_); - // test_api.UnbindConnections(&g_application_request, &g_shell); + // ShellConnection::TestApi test_api(shell_connection_); + // test_api.UnbindConnections(&g_shell_client_request, &g_shell); // } - // We may have supplied a member as the client. Delete |application_impl_| + // We may have supplied a member as the client. Delete |shell_connection_| // while still valid. - application_impl_.reset(); + shell_connection_.reset(); } ApplicationTestBase::ApplicationTestBase() : test_helper_(nullptr) {} @@ -144,12 +143,12 @@ } void ApplicationTestBase::SetUp() { - // A run loop is recommended for ApplicationImpl initialization and + // A run loop is recommended for ShellConnection initialization and // communication. if (ShouldCreateDefaultRunLoop()) Environment::InstantiateDefaultRunLoop(); - MOJO_CHECK(g_application_request.is_pending()); + MOJO_CHECK(g_shell_client_request.is_pending()); MOJO_CHECK(g_shell); // New applications are constructed for each test to avoid persisting state. @@ -157,7 +156,7 @@ } void ApplicationTestBase::TearDown() { - MOJO_CHECK(!g_application_request.is_pending()); + MOJO_CHECK(!g_shell_client_request.is_pending()); MOJO_CHECK(!g_shell); test_helper_.reset();
diff --git a/mojo/shell/public/cpp/lib/connection_impl.cc b/mojo/shell/public/cpp/lib/connection_impl.cc new file mode 100644 index 0000000..1a20d502 --- /dev/null +++ b/mojo/shell/public/cpp/lib/connection_impl.cc
@@ -0,0 +1,177 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "mojo/shell/public/cpp/lib/connection_impl.h" + +#include <stdint.h> + +#include <utility> + +#include "base/bind.h" +#include "base/logging.h" +#include "mojo/shell/public/cpp/connection.h" +#include "mojo/shell/public/cpp/interface_binder.h" + +namespace mojo { +namespace internal { + +//////////////////////////////////////////////////////////////////////////////// +// ConnectionImpl, public: + +ConnectionImpl::ConnectionImpl( + const std::string& connection_url, + const std::string& remote_url, + uint32_t remote_id, + ServiceProviderPtr remote_services, + InterfaceRequest<ServiceProvider> local_services, + const std::set<std::string>& allowed_interfaces) + : connection_url_(connection_url), + remote_url_(remote_url), + remote_id_(remote_id), + content_handler_id_(0u), + remote_ids_valid_(false), + local_binding_(this), + remote_service_provider_(std::move(remote_services)), + allowed_interfaces_(allowed_interfaces), + allow_all_interfaces_(allowed_interfaces_.size() == 1 && + allowed_interfaces_.count("*") == 1), + default_binder_(nullptr), + weak_factory_(this) { + if (local_services.is_pending()) + local_binding_.Bind(std::move(local_services)); +} + +ConnectionImpl::ConnectionImpl() + : remote_id_(shell::mojom::Shell::kInvalidApplicationID), + content_handler_id_(shell::mojom::Shell::kInvalidApplicationID), + remote_ids_valid_(false), + local_binding_(this), + allow_all_interfaces_(true), + default_binder_(nullptr), + weak_factory_(this) { +} + +ConnectionImpl::~ConnectionImpl() { + for (auto& i : name_to_binder_) + delete i.second; + name_to_binder_.clear(); +} + +shell::mojom::Shell::ConnectToApplicationCallback +ConnectionImpl::GetConnectToApplicationCallback() { + return base::Bind(&ConnectionImpl::OnGotRemoteIDs, + weak_factory_.GetWeakPtr()); +} + +//////////////////////////////////////////////////////////////////////////////// +// ConnectionImpl, Connection implementation: + +void ConnectionImpl::SetDefaultInterfaceBinder(InterfaceBinder* binder) { + default_binder_ = binder; +} + +bool ConnectionImpl::SetInterfaceBinderForName( + InterfaceBinder* binder, + const std::string& interface_name) { + if (allow_all_interfaces_ || + allowed_interfaces_.count(interface_name)) { + RemoveInterfaceBinderForName(interface_name); + name_to_binder_[interface_name] = binder; + return true; + } + LOG(WARNING) << "CapabilityFilter prevented connection to interface: " + << interface_name << " connection_url:" << connection_url_ + << " remote_url:" << remote_url_; + return false; +} + +const std::string& ConnectionImpl::GetConnectionURL() { + return connection_url_; +} + +const std::string& ConnectionImpl::GetRemoteApplicationURL() { + return remote_url_; +} + +ServiceProvider* ConnectionImpl::GetRemoteInterfaces() { + return remote_service_provider_.get(); +} + +ServiceProvider* ConnectionImpl::GetLocalInterfaces() { + return this; +} + +void ConnectionImpl::SetRemoteServiceProviderConnectionErrorHandler( + const Closure& handler) { + remote_service_provider_.set_connection_error_handler(handler); +} + +bool ConnectionImpl::GetRemoteApplicationID(uint32_t* remote_id) const { + if (!remote_ids_valid_) + return false; + + *remote_id = remote_id_; + return true; +} + +bool ConnectionImpl::GetRemoteContentHandlerID( + uint32_t* content_handler_id) const { + if (!remote_ids_valid_) + return false; + + *content_handler_id = content_handler_id_; + return true; +} + +void ConnectionImpl::AddRemoteIDCallback(const Closure& callback) { + if (remote_ids_valid_) { + callback.Run(); + return; + } + remote_id_callbacks_.push_back(callback); +} + +base::WeakPtr<Connection> ConnectionImpl::GetWeakPtr() { + return weak_factory_.GetWeakPtr(); +} + +//////////////////////////////////////////////////////////////////////////////// +// ConnectionImpl, ServiceProvider implementation: + +void ConnectionImpl::ConnectToService(const mojo::String& interface_name, + ScopedMessagePipeHandle handle) { + auto iter = name_to_binder_.find(interface_name); + if (iter != name_to_binder_.end()) + iter->second->BindInterface(this, interface_name, std::move(handle)); + else if (default_binder_) + default_binder_->BindInterface(this, interface_name, std::move(handle)); +} + +//////////////////////////////////////////////////////////////////////////////// +// ConnectionImpl, private: + +void ConnectionImpl::RemoveInterfaceBinderForName( + const std::string& interface_name) { + NameToInterfaceBinderMap::iterator it = name_to_binder_.find(interface_name); + if (it == name_to_binder_.end()) + return; + delete it->second; + name_to_binder_.erase(it); +} + +void ConnectionImpl::OnGotRemoteIDs(uint32_t target_application_id, + uint32_t content_handler_id) { + DCHECK(!remote_ids_valid_); + remote_ids_valid_ = true; + + remote_id_ = target_application_id; + content_handler_id_ = content_handler_id; + std::vector<Closure> callbacks; + callbacks.swap(remote_id_callbacks_); + for (auto callback : callbacks) + callback.Run(); +} + +} // namespace internal +} // namespace mojo
diff --git a/mojo/shell/public/cpp/lib/connection_impl.h b/mojo/shell/public/cpp/lib/connection_impl.h new file mode 100644 index 0000000..5b3f73a1 --- /dev/null +++ b/mojo/shell/public/cpp/lib/connection_impl.h
@@ -0,0 +1,112 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MOJO_SHELL_PUBLIC_CPP_LIB_CONNECTION_IMPL_H_ +#define MOJO_SHELL_PUBLIC_CPP_LIB_CONNECTION_IMPL_H_ + +#include <stdint.h> + +#include <set> +#include <string> + +#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/shell/public/cpp/connection.h" +#include "mojo/shell/public/interfaces/service_provider.mojom.h" +#include "mojo/shell/public/interfaces/shell.mojom.h" + +namespace mojo { +namespace internal { + +// A ConnectionImpl represents each half of a connection between two +// applications, allowing customization of which services are published to the +// other. +class ConnectionImpl : public Connection, public ServiceProvider { + public: + class TestApi { + public: + explicit TestApi(ConnectionImpl* impl) : impl_(impl) {} + ~TestApi() {} + + void SetInterfaceBinderForName(InterfaceBinder* binder, + const std::string& interface_name) { + impl_->SetInterfaceBinderForName(binder, interface_name); + } + void RemoveInterfaceBinderForName(const std::string& interface_name) { + impl_->RemoveInterfaceBinderForName(interface_name); + } + + private: + ConnectionImpl* impl_; + DISALLOW_COPY_AND_ASSIGN(TestApi); + }; + + ConnectionImpl(); + // |allowed_interfaces| are the set of interfaces that the shell has allowed + // an application to expose to another application. If this set contains only + // the string value "*" all interfaces may be exposed. + ConnectionImpl(const std::string& connection_url, + const std::string& remote_url, + uint32_t remote_id, + ServiceProviderPtr remote_services, + InterfaceRequest<ServiceProvider> local_services, + const std::set<std::string>& allowed_interfaces); + ~ConnectionImpl() override; + + shell::mojom::Shell::ConnectToApplicationCallback + GetConnectToApplicationCallback(); + + private: + using NameToInterfaceBinderMap = std::map<std::string, InterfaceBinder*>; + + // Connection overrides. + void SetDefaultInterfaceBinder(InterfaceBinder* binder) override; + bool SetInterfaceBinderForName(InterfaceBinder* binder, + const std::string& interface_name) override; + const std::string& GetConnectionURL() override; + const std::string& GetRemoteApplicationURL() override; + ServiceProvider* GetRemoteInterfaces() override; + ServiceProvider* GetLocalInterfaces() override; + void SetRemoteServiceProviderConnectionErrorHandler( + const Closure& handler) override; + bool GetRemoteApplicationID(uint32_t* remote_id) const override; + bool GetRemoteContentHandlerID(uint32_t* content_handler_id) const override; + void AddRemoteIDCallback(const Closure& callback) override; + base::WeakPtr<Connection> GetWeakPtr() override; + + // ServiceProvider method. + void ConnectToService(const mojo::String& service_name, + ScopedMessagePipeHandle handle) override; + + void RemoveInterfaceBinderForName(const std::string& interface_name); + void OnGotRemoteIDs(uint32_t target_application_id, + uint32_t content_handler_id); + + const std::string connection_url_; + const std::string remote_url_; + + uint32_t remote_id_; + // The id of the content_handler is only available once the callback from + // establishing the connection is made. + uint32_t content_handler_id_; + bool remote_ids_valid_; + std::vector<Closure> remote_id_callbacks_; + + Binding<ServiceProvider> local_binding_; + ServiceProviderPtr remote_service_provider_; + + const std::set<std::string> allowed_interfaces_; + const bool allow_all_interfaces_; + + InterfaceBinder* default_binder_; + NameToInterfaceBinderMap name_to_binder_; + + base::WeakPtrFactory<ConnectionImpl> weak_factory_; + + MOJO_DISALLOW_COPY_AND_ASSIGN(ConnectionImpl); +}; + +} // namespace internal +} // namespace mojo + +#endif // MOJO_SHELL_PUBLIC_CPP_LIB_CONNECTION_IMPL_H_
diff --git a/mojo/shell/public/cpp/lib/content_handler_factory.cc b/mojo/shell/public/cpp/lib/content_handler_factory.cc index 156faf07..74b788cc 100644 --- a/mojo/shell/public/cpp/lib/content_handler_factory.cc +++ b/mojo/shell/public/cpp/lib/content_handler_factory.cc
@@ -29,13 +29,13 @@ scoped_refptr<base::SingleThreadTaskRunner> handler_thread, const base::Callback<void(ApplicationThread*)>& termination_callback, ContentHandlerFactory::Delegate* handler_delegate, - InterfaceRequest<shell::mojom::Application> application_request, + InterfaceRequest<shell::mojom::ShellClient> request, URLResponsePtr response, const Callback<void()>& destruct_callback) : handler_thread_(handler_thread), termination_callback_(termination_callback), handler_delegate_(handler_delegate), - application_request_(std::move(application_request)), + request_(std::move(request)), response_(std::move(response)), destruct_callback_(destruct_callback) {} @@ -45,7 +45,7 @@ private: void ThreadMain() override { - handler_delegate_->RunApplication(std::move(application_request_), + handler_delegate_->RunApplication(std::move(request_), std::move(response_)); handler_thread_->PostTask(FROM_HERE, base::Bind(termination_callback_, this)); @@ -54,7 +54,7 @@ scoped_refptr<base::SingleThreadTaskRunner> handler_thread_; base::Callback<void(ApplicationThread*)> termination_callback_; ContentHandlerFactory::Delegate* handler_delegate_; - InterfaceRequest<shell::mojom::Application> application_request_; + InterfaceRequest<shell::mojom::ShellClient> request_; URLResponsePtr response_; Callback<void()> destruct_callback_; @@ -82,15 +82,14 @@ private: // Overridden from ContentHandler: - void StartApplication( - InterfaceRequest<shell::mojom::Application> application_request, - URLResponsePtr response, - const Callback<void()>& destruct_callback) override { + void StartApplication(InterfaceRequest<shell::mojom::ShellClient> request, + URLResponsePtr response, + const Callback<void()>& destruct_callback) override { ApplicationThread* thread = new ApplicationThread(base::ThreadTaskRunnerHandle::Get(), base::Bind(&ContentHandlerImpl::OnThreadEnd, weak_factory_.GetWeakPtr()), - delegate_, std::move(application_request), + delegate_, std::move(request), std::move(response), destruct_callback); base::PlatformThreadHandle handle; bool launched = base::PlatformThread::Create(0, thread, &handle); @@ -124,11 +123,11 @@ } void ContentHandlerFactory::ManagedDelegate::RunApplication( - InterfaceRequest<shell::mojom::Application> application_request, + InterfaceRequest<shell::mojom::ShellClient> request, URLResponsePtr response) { base::MessageLoop loop(common::MessagePumpMojo::Create()); - auto application = this->CreateApplication(std::move(application_request), - std::move(response)); + auto application = + this->CreateApplication(std::move(request), std::move(response)); if (application) loop.Run(); }
diff --git a/mojo/shell/public/cpp/lib/interface_factory_binder.h b/mojo/shell/public/cpp/lib/interface_factory_binder.h new file mode 100644 index 0000000..39b98c7 --- /dev/null +++ b/mojo/shell/public/cpp/lib/interface_factory_binder.h
@@ -0,0 +1,39 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MOJO_SHELL_PUBLIC_CPP_LIB_INTERFACE_FACTORY_BINDER_H_ +#define MOJO_SHELL_PUBLIC_CPP_LIB_INTERFACE_FACTORY_BINDER_H_ + +#include <utility> + +#include "mojo/public/cpp/bindings/interface_request.h" +#include "mojo/shell/public/cpp/interface_binder.h" +#include "mojo/shell/public/cpp/interface_factory.h" + +namespace mojo { +namespace internal { + +template <typename Interface> +class InterfaceFactoryBinder : public InterfaceBinder { + public: + explicit InterfaceFactoryBinder(InterfaceFactory<Interface>* factory) + : factory_(factory) {} + ~InterfaceFactoryBinder() override {} + + void BindInterface(Connection* connection, + const std::string& interface_name, + ScopedMessagePipeHandle client_handle) override { + factory_->Create(connection, + MakeRequest<Interface>(std::move(client_handle))); + } + + private: + InterfaceFactory<Interface>* factory_; + MOJO_DISALLOW_COPY_AND_ASSIGN(InterfaceFactoryBinder); +}; + +} // namespace internal +} // namespace mojo + +#endif // MOJO_SHELL_PUBLIC_CPP_LIB_INTERFACE_FACTORY_BINDER_H_
diff --git a/mojo/shell/public/cpp/lib/interface_factory_connector.h b/mojo/shell/public/cpp/lib/interface_factory_connector.h deleted file mode 100644 index 42c4c038..0000000 --- a/mojo/shell/public/cpp/lib/interface_factory_connector.h +++ /dev/null
@@ -1,39 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef MOJO_SHELL_PUBLIC_CPP_LIB_INTERFACE_FACTORY_CONNECTOR_H_ -#define MOJO_SHELL_PUBLIC_CPP_LIB_INTERFACE_FACTORY_CONNECTOR_H_ - -#include <utility> - -#include "mojo/public/cpp/bindings/interface_request.h" -#include "mojo/shell/public/cpp/interface_factory.h" -#include "mojo/shell/public/cpp/service_connector.h" - -namespace mojo { -namespace internal { - -template <typename Interface> -class InterfaceFactoryConnector : public ServiceConnector { - public: - explicit InterfaceFactoryConnector(InterfaceFactory<Interface>* factory) - : factory_(factory) {} - ~InterfaceFactoryConnector() override {} - - void ConnectToService(Connection* connection, - const std::string& interface_name, - ScopedMessagePipeHandle client_handle) override { - factory_->Create(connection, - MakeRequest<Interface>(std::move(client_handle))); - } - - private: - InterfaceFactory<Interface>* factory_; - MOJO_DISALLOW_COPY_AND_ASSIGN(InterfaceFactoryConnector); -}; - -} // namespace internal -} // namespace mojo - -#endif // MOJO_SHELL_PUBLIC_CPP_LIB_INTERFACE_FACTORY_CONNECTOR_H_
diff --git a/mojo/shell/public/cpp/lib/service_connector_registry.cc b/mojo/shell/public/cpp/lib/service_connector_registry.cc deleted file mode 100644 index fc74ef0..0000000 --- a/mojo/shell/public/cpp/lib/service_connector_registry.cc +++ /dev/null
@@ -1,61 +0,0 @@ -// Copyright 2015 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 "mojo/shell/public/cpp/lib/service_connector_registry.h" - -#include <utility> - -#include "mojo/shell/public/cpp/service_connector.h" - -namespace mojo { -namespace internal { - -ServiceConnectorRegistry::ServiceConnectorRegistry() - : service_connector_(nullptr) { -} - -ServiceConnectorRegistry::~ServiceConnectorRegistry() { - for (NameToServiceConnectorMap::iterator i = - name_to_service_connector_.begin(); - i != name_to_service_connector_.end(); ++i) { - delete i->second; - } - name_to_service_connector_.clear(); -} - -void ServiceConnectorRegistry::SetServiceConnectorForName( - ServiceConnector* service_connector, - const std::string& interface_name) { - RemoveServiceConnectorForName(interface_name); - name_to_service_connector_[interface_name] = service_connector; -} - -void ServiceConnectorRegistry::RemoveServiceConnectorForName( - const std::string& interface_name) { - NameToServiceConnectorMap::iterator it = - name_to_service_connector_.find(interface_name); - if (it == name_to_service_connector_.end()) - return; - delete it->second; - name_to_service_connector_.erase(it); -} - -void ServiceConnectorRegistry::ConnectToService( - Connection* connection, - const std::string& interface_name, - ScopedMessagePipeHandle client_handle) { - auto iter = name_to_service_connector_.find(interface_name); - if (iter != name_to_service_connector_.end()) { - iter->second->ConnectToService(connection, interface_name, - std::move(client_handle)); - return; - } - if (service_connector_) { - service_connector_->ConnectToService(connection, interface_name, - std::move(client_handle)); - } -} - -} // namespace internal -} // namespace mojo
diff --git a/mojo/shell/public/cpp/lib/service_connector_registry.h b/mojo/shell/public/cpp/lib/service_connector_registry.h deleted file mode 100644 index 4bf400f..0000000 --- a/mojo/shell/public/cpp/lib/service_connector_registry.h +++ /dev/null
@@ -1,62 +0,0 @@ -// Copyright 2015 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 MOJO_SHELL_PUBLIC_CPP_LIB_SERVICE_CONNECTOR_REGISTRY_H_ -#define MOJO_SHELL_PUBLIC_CPP_LIB_SERVICE_CONNECTOR_REGISTRY_H_ - -#include <map> -#include <string> - -#include "mojo/public/cpp/system/message_pipe.h" - -namespace mojo { - -class Connection; -class ServiceConnector; - -namespace internal { - -// ServiceConnectorRegistry maintains a default ServiceConnector as well as at -// most one ServiceConnector per interface name. When ConnectToService() is -// invoked the ServiceConnector registered by name is given the request. If -// a ServiceConnector has not been registered by name than the default -// ServiceConnector is given the request. -class ServiceConnectorRegistry { - public: - ServiceConnectorRegistry(); - ~ServiceConnectorRegistry(); - - // Sets the default ServiceConnector. ServiceConnectorRegistry does *not* - // take ownership of |service_connector|. - void set_service_connector(ServiceConnector* service_connector) { - service_connector_ = service_connector; - } - - // Returns true if non ServiceConnectors have been registered by name. - bool empty() const { return name_to_service_connector_.empty(); } - - // Sets a ServiceConnector by name. This deletes the existing ServiceConnector - // and takes ownership of |service_connector|. - void SetServiceConnectorForName(ServiceConnector* service_connector, - const std::string& interface_name); - void RemoveServiceConnectorForName(const std::string& interface_name); - - void ConnectToService(Connection* connection, - const std::string& interface_name, - ScopedMessagePipeHandle client_handle); - - private: - using NameToServiceConnectorMap = std::map<std::string, ServiceConnector*>; - - ServiceConnector* service_connector_; - - NameToServiceConnectorMap name_to_service_connector_; - - MOJO_DISALLOW_COPY_AND_ASSIGN(ServiceConnectorRegistry); -}; - -} // namespace internal -} // namespace mojo - -#endif // MOJO_SHELL_PUBLIC_CPP_LIB_SERVICE_CONNECTOR_REGISTRY_H_
diff --git a/mojo/shell/public/cpp/lib/service_provider_impl.cc b/mojo/shell/public/cpp/lib/service_provider_impl.cc deleted file mode 100644 index dc31a8b4..0000000 --- a/mojo/shell/public/cpp/lib/service_provider_impl.cc +++ /dev/null
@@ -1,43 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include <utility> - -#include "mojo/public/cpp/environment/logging.h" -#include "mojo/shell/public/cpp/service_connector.h" -#include "mojo/shell/public/cpp/service_provider_impl.h" - -namespace mojo { - -ServiceProviderImpl::ServiceProviderImpl() : binding_(this) { -} - -ServiceProviderImpl::ServiceProviderImpl( - InterfaceRequest<ServiceProvider> request) - : binding_(this, std::move(request)) {} - -ServiceProviderImpl::~ServiceProviderImpl() { -} - -void ServiceProviderImpl::Bind(InterfaceRequest<ServiceProvider> request) { - binding_.Bind(std::move(request)); -} - -void ServiceProviderImpl::ConnectToService( - const String& service_name, - ScopedMessagePipeHandle client_handle) { - // TODO(beng): perhaps take app connection thru ctor so that we can pass - // Connection through? - service_connector_registry_.ConnectToService(nullptr, service_name, - std::move(client_handle)); -} - -void ServiceProviderImpl::SetServiceConnectorForName( - ServiceConnector* service_connector, - const std::string& interface_name) { - service_connector_registry_.SetServiceConnectorForName(service_connector, - interface_name); -} - -} // namespace mojo
diff --git a/mojo/shell/public/cpp/lib/service_registry.cc b/mojo/shell/public/cpp/lib/service_registry.cc deleted file mode 100644 index 1df9976..0000000 --- a/mojo/shell/public/cpp/lib/service_registry.cc +++ /dev/null
@@ -1,152 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "mojo/shell/public/cpp/lib/service_registry.h" - -#include <stdint.h> - -#include <utility> - -#include "base/bind.h" -#include "base/logging.h" -#include "mojo/shell/public/cpp/connection.h" -#include "mojo/shell/public/cpp/service_connector.h" - -namespace mojo { -namespace internal { - -ServiceRegistry::ServiceRegistry( - const std::string& connection_url, - const std::string& remote_url, - uint32_t remote_id, - ServiceProviderPtr remote_services, - InterfaceRequest<ServiceProvider> local_services, - const std::set<std::string>& allowed_interfaces) - : connection_url_(connection_url), - remote_url_(remote_url), - local_binding_(this), - remote_service_provider_(std::move(remote_services)), - allowed_interfaces_(allowed_interfaces), - allow_all_interfaces_(allowed_interfaces_.size() == 1 && - allowed_interfaces_.count("*") == 1), - remote_id_(remote_id), - content_handler_id_(0u), - remote_ids_valid_(false), - weak_factory_(this) { - if (local_services.is_pending()) - local_binding_.Bind(std::move(local_services)); -} - -ServiceRegistry::ServiceRegistry() - : local_binding_(this), - allow_all_interfaces_(true), - weak_factory_(this) { -} - -ServiceRegistry::~ServiceRegistry() { -} - -shell::mojom::Shell::ConnectToApplicationCallback -ServiceRegistry::GetConnectToApplicationCallback() { - return base::Bind(&ServiceRegistry::OnGotRemoteIDs, - weak_factory_.GetWeakPtr()); -} - -void ServiceRegistry::SetServiceConnector(ServiceConnector* connector) { - service_connector_registry_.set_service_connector(connector); -} - -bool ServiceRegistry::SetServiceConnectorForName( - ServiceConnector* service_connector, - const std::string& interface_name) { - if (allow_all_interfaces_ || - allowed_interfaces_.count(interface_name)) { - service_connector_registry_.SetServiceConnectorForName(service_connector, - interface_name); - return true; - } - LOG(WARNING) << "CapabilityFilter prevented connection to interface: " - << interface_name << " connection_url:" << connection_url_ - << " remote_url:" << remote_url_; - return false; -} - -ServiceProvider* ServiceRegistry::GetLocalServiceProvider() { - return this; -} - -void ServiceRegistry::SetRemoteServiceProviderConnectionErrorHandler( - const Closure& handler) { - remote_service_provider_.set_connection_error_handler(handler); -} - -bool ServiceRegistry::GetRemoteApplicationID(uint32_t* remote_id) const { - if (!remote_ids_valid_) - return false; - - *remote_id = remote_id_; - return true; -} - -bool ServiceRegistry::GetRemoteContentHandlerID( - uint32_t* content_handler_id) const { - if (!remote_ids_valid_) - return false; - - *content_handler_id = content_handler_id_; - return true; -} - -void ServiceRegistry::AddRemoteIDCallback(const Closure& callback) { - if (remote_ids_valid_) { - callback.Run(); - return; - } - remote_id_callbacks_.push_back(callback); -} - -base::WeakPtr<Connection> ServiceRegistry::GetWeakPtr() { - return weak_factory_.GetWeakPtr(); -} - -void ServiceRegistry::RemoveServiceConnectorForName( - const std::string& interface_name) { - service_connector_registry_.RemoveServiceConnectorForName(interface_name); - if (service_connector_registry_.empty()) - remote_service_provider_.reset(); -} - -const std::string& ServiceRegistry::GetConnectionURL() { - return connection_url_; -} - -const std::string& ServiceRegistry::GetRemoteApplicationURL() { - return remote_url_; -} - -ServiceProvider* ServiceRegistry::GetServiceProvider() { - return remote_service_provider_.get(); -} - -void ServiceRegistry::OnGotRemoteIDs(uint32_t target_application_id, - uint32_t content_handler_id) { - DCHECK(!remote_ids_valid_); - remote_ids_valid_ = true; - - remote_id_ = target_application_id; - content_handler_id_ = content_handler_id; - std::vector<Closure> callbacks; - callbacks.swap(remote_id_callbacks_); - for (auto callback : callbacks) - callback.Run(); -} - -void ServiceRegistry::ConnectToService(const mojo::String& service_name, - ScopedMessagePipeHandle client_handle) { - service_connector_registry_.ConnectToService(this, service_name, - std::move(client_handle)); -} - -} // namespace internal -} // namespace mojo
diff --git a/mojo/shell/public/cpp/lib/service_registry.h b/mojo/shell/public/cpp/lib/service_registry.h deleted file mode 100644 index 683e220..0000000 --- a/mojo/shell/public/cpp/lib/service_registry.h +++ /dev/null
@@ -1,88 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef MOJO_SHELL_PUBLIC_CPP_LIB_SERVICE_REGISTRY_H_ -#define MOJO_SHELL_PUBLIC_CPP_LIB_SERVICE_REGISTRY_H_ - -#include <stdint.h> - -#include <set> -#include <string> - -#include "mojo/public/cpp/bindings/binding.h" -#include "mojo/shell/public/cpp/connection.h" -#include "mojo/shell/public/cpp/lib/service_connector_registry.h" -#include "mojo/shell/public/interfaces/service_provider.mojom.h" -#include "mojo/shell/public/interfaces/shell.mojom.h" - -namespace mojo { -namespace internal { - -// A ServiceRegistry represents each half of a connection between two -// applications, allowing customization of which services are published to the -// other. -class ServiceRegistry : public ServiceProvider, public Connection { - public: - ServiceRegistry(); - // |allowed_interfaces| are the set of interfaces that the shell has allowed - // an application to expose to another application. If this set contains only - // the string value "*" all interfaces may be exposed. - ServiceRegistry(const std::string& connection_url, - const std::string& remote_url, - uint32_t remote_id, - ServiceProviderPtr remote_services, - InterfaceRequest<ServiceProvider> local_services, - const std::set<std::string>& allowed_interfaces); - ~ServiceRegistry() override; - - shell::mojom::Shell::ConnectToApplicationCallback - GetConnectToApplicationCallback(); - - // Connection overrides. - void SetServiceConnector(ServiceConnector* service_connector) override; - bool SetServiceConnectorForName(ServiceConnector* service_connector, - const std::string& interface_name) override; - const std::string& GetConnectionURL() override; - const std::string& GetRemoteApplicationURL() override; - ServiceProvider* GetServiceProvider() override; - ServiceProvider* GetLocalServiceProvider() override; - void SetRemoteServiceProviderConnectionErrorHandler( - const Closure& handler) override; - bool GetRemoteApplicationID(uint32_t* remote_id) const override; - bool GetRemoteContentHandlerID(uint32_t* content_handler_id) const override; - void AddRemoteIDCallback(const Closure& callback) override; - base::WeakPtr<Connection> GetWeakPtr() override; - - void RemoveServiceConnectorForName(const std::string& interface_name); - - private: - void OnGotRemoteIDs(uint32_t target_application_id, - uint32_t content_handler_id); - - // ServiceProvider method. - void ConnectToService(const mojo::String& service_name, - ScopedMessagePipeHandle client_handle) override; - - const std::string connection_url_; - const std::string remote_url_; - Binding<ServiceProvider> local_binding_; - ServiceProviderPtr remote_service_provider_; - ServiceConnectorRegistry service_connector_registry_; - const std::set<std::string> allowed_interfaces_; - const bool allow_all_interfaces_; - uint32_t remote_id_; - // The id of the content_handler is only available once the callback from - // establishing the connection is made. - uint32_t content_handler_id_; - bool remote_ids_valid_; - std::vector<Closure> remote_id_callbacks_; - base::WeakPtrFactory<ServiceRegistry> weak_factory_; - - MOJO_DISALLOW_COPY_AND_ASSIGN(ServiceRegistry); -}; - -} // namespace internal -} // namespace mojo - -#endif // MOJO_SHELL_PUBLIC_CPP_LIB_SERVICE_REGISTRY_H_
diff --git a/mojo/shell/public/cpp/lib/shell_connection.cc b/mojo/shell/public/cpp/lib/shell_connection.cc new file mode 100644 index 0000000..3cc4d02 --- /dev/null +++ b/mojo/shell/public/cpp/lib/shell_connection.cc
@@ -0,0 +1,188 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <algorithm> +#include <utility> + +#include "base/bind.h" +#include "base/message_loop/message_loop.h" +#include "mojo/converters/network/network_type_converters.h" +#include "mojo/public/cpp/bindings/interface_ptr.h" +#include "mojo/public/cpp/environment/logging.h" +#include "mojo/shell/public/cpp/lib/connection_impl.h" +#include "mojo/shell/public/cpp/shell_client.h" +#include "mojo/shell/public/cpp/shell_connection.h" + +namespace mojo { + +namespace { + +void DefaultTerminationClosure() { + if (base::MessageLoop::current() && + base::MessageLoop::current()->is_running()) + base::MessageLoop::current()->QuitWhenIdle(); +} + +} // namespace + +ShellConnection::ConnectParams::ConnectParams(const std::string& url) + : ConnectParams(URLRequest::From(url)) {} +ShellConnection::ConnectParams::ConnectParams(URLRequestPtr request) + : request_(std::move(request)), + filter_(shell::mojom::CapabilityFilter::New()) { + filter_->filter.mark_non_null(); +} +ShellConnection::ConnectParams::~ConnectParams() {} + +ShellConnection::ShellConnection( + mojo::ShellClient* client, + InterfaceRequest<shell::mojom::ShellClient> request) + : ShellConnection(client, + std::move(request), + base::Bind(&DefaultTerminationClosure)) {} + +ShellConnection::ShellConnection( + mojo::ShellClient* client, + InterfaceRequest<shell::mojom::ShellClient> request, + const Closure& termination_closure) + : client_(client), + binding_(this, std::move(request)), + termination_closure_(termination_closure), + app_lifetime_helper_(this), + quit_requested_(false), + weak_factory_(this) {} + +ShellConnection::~ShellConnection() { + app_lifetime_helper_.OnQuit(); +} + +void ShellConnection::WaitForInitialize() { + DCHECK(!shell_.is_bound()); + binding_.WaitForIncomingMethodCall(); +} + +scoped_ptr<Connection> ShellConnection::Connect(const std::string& url) { + ConnectParams params(url); + params.set_filter(CreatePermissiveCapabilityFilter()); + return Connect(¶ms); +} + +scoped_ptr<Connection> ShellConnection::Connect(ConnectParams* params) { + if (!shell_) + return nullptr; + DCHECK(params); + URLRequestPtr request = params->TakeRequest(); + ServiceProviderPtr local_services; + InterfaceRequest<ServiceProvider> local_request = GetProxy(&local_services); + ServiceProviderPtr remote_services; + std::string application_url = request->url.To<std::string>(); + // We allow all interfaces on outgoing connections since we are presumably in + // a position to know who we're talking to. + // TODO(beng): is this a valid assumption or do we need to figure some way to + // filter here too? + std::set<std::string> allowed; + allowed.insert("*"); + InterfaceRequest<ServiceProvider> remote_services_proxy = + GetProxy(&remote_services); + scoped_ptr<internal::ConnectionImpl> registry(new internal::ConnectionImpl( + application_url, application_url, + shell::mojom::Shell::kInvalidApplicationID, std::move(remote_services), + std::move(local_request), allowed)); + shell_->ConnectToApplication(std::move(request), + std::move(remote_services_proxy), + std::move(local_services), params->TakeFilter(), + registry->GetConnectToApplicationCallback()); + return std::move(registry); +} + +void ShellConnection::Quit() { + // We can't quit immediately, since there could be in-flight requests from the + // shell. So check with it first. + if (shell_) { + quit_requested_ = true; + shell_->QuitApplication(); + } else { + QuitNow(); + } +} + +scoped_ptr<AppRefCount> ShellConnection::CreateAppRefCount() { + return app_lifetime_helper_.CreateAppRefCount(); +} + +void ShellConnection::Initialize(shell::mojom::ShellPtr shell, + const mojo::String& url, + uint32_t id) { + shell_ = std::move(shell); + shell_.set_connection_error_handler([this]() { OnConnectionError(); }); + client_->Initialize(this, url, id); +} + +void ShellConnection::AcceptConnection( + const String& requestor_url, + uint32_t requestor_id, + InterfaceRequest<ServiceProvider> services, + ServiceProviderPtr exposed_services, + Array<String> allowed_interfaces, + const String& url) { + scoped_ptr<Connection> registry(new internal::ConnectionImpl( + url, requestor_url, requestor_id, std::move(exposed_services), + std::move(services), allowed_interfaces.To<std::set<std::string>>())); + if (!client_->AcceptConnection(registry.get())) + return; + + // If we were quitting because we thought there were no more services for this + // app in use, then that has changed so cancel the quit request. + if (quit_requested_) + quit_requested_ = false; + + incoming_connections_.push_back(std::move(registry)); +} + +void ShellConnection::OnQuitRequested(const Callback<void(bool)>& callback) { + // If by the time we got the reply from the shell, more requests had come in + // then we don't want to quit the app anymore so we return false. Otherwise + // |quit_requested_| is true so we tell the shell to proceed with the quit. + callback.Run(quit_requested_); + if (quit_requested_) + QuitNow(); +} + +void ShellConnection::OnConnectionError() { + base::WeakPtr<ShellConnection> ptr(weak_factory_.GetWeakPtr()); + + // We give the client notice first, since it might want to do something on + // shell connection errors other than immediate termination of the run + // loop. The application might want to continue servicing connections other + // than the one to the shell. + bool quit_now = client_->ShellConnectionLost(); + if (quit_now) + QuitNow(); + if (!ptr) + return; + shell_ = nullptr; +} + +void ShellConnection::QuitNow() { + client_->Quit(); + termination_closure_.Run(); +} + +void ShellConnection::UnbindConnections( + InterfaceRequest<shell::mojom::ShellClient>* request, + shell::mojom::ShellPtr* shell) { + *request = binding_.Unbind(); + shell->Bind(shell_.PassInterface()); +} + +shell::mojom::CapabilityFilterPtr CreatePermissiveCapabilityFilter() { + shell::mojom::CapabilityFilterPtr filter( + shell::mojom::CapabilityFilter::New()); + Array<String> all_interfaces; + all_interfaces.push_back("*"); + filter->filter.insert("*", std::move(all_interfaces)); + return filter; +} + +} // namespace mojo
diff --git a/mojo/shell/public/cpp/service_connector.h b/mojo/shell/public/cpp/service_connector.h deleted file mode 100644 index 5ba0192..0000000 --- a/mojo/shell/public/cpp/service_connector.h +++ /dev/null
@@ -1,30 +0,0 @@ -// Copyright 2015 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 MOJO_SHELL_PUBLIC_CPP_SERVICE_CONNECTOR_H_ -#define MOJO_SHELL_PUBLIC_CPP_SERVICE_CONNECTOR_H_ - -#include <string> - -#include "mojo/public/cpp/system/message_pipe.h" - -namespace mojo { - -class Connection; - -class ServiceConnector { - public: - virtual ~ServiceConnector() {} - - // Asks the ServiceConnector to connect to the specified service. If the - // ServiceConnector connects to the service it should take ownership of - // the handle in |handle|. - virtual void ConnectToService(Connection* connection, - const std::string& interface_name, - ScopedMessagePipeHandle handle) = 0; -}; - -} // namespace mojo - -#endif // MOJO_SHELL_PUBLIC_CPP_SERVICE_CONNECTOR_H_
diff --git a/mojo/shell/public/cpp/service_provider_impl.h b/mojo/shell/public/cpp/service_provider_impl.h deleted file mode 100644 index 2d5ed75..0000000 --- a/mojo/shell/public/cpp/service_provider_impl.h +++ /dev/null
@@ -1,50 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef MOJO_SHELL_PUBLIC_CPP_SERVICE_PROVIDER_IMPL_H_ -#define MOJO_SHELL_PUBLIC_CPP_SERVICE_PROVIDER_IMPL_H_ - -#include <string> - -#include "mojo/public/cpp/bindings/strong_binding.h" -#include "mojo/shell/public/cpp/lib/interface_factory_connector.h" -#include "mojo/shell/public/cpp/lib/service_connector_registry.h" -#include "mojo/shell/public/interfaces/service_provider.mojom.h" - -namespace mojo { - -// Implements a registry that can be used to expose services to another app. -class ServiceProviderImpl : public ServiceProvider { - public: - ServiceProviderImpl(); - explicit ServiceProviderImpl(InterfaceRequest<ServiceProvider> request); - ~ServiceProviderImpl() override; - - void Bind(InterfaceRequest<ServiceProvider> request); - - template <typename Interface> - void AddService(InterfaceFactory<Interface>* factory) { - SetServiceConnectorForName( - new internal::InterfaceFactoryConnector<Interface>(factory), - Interface::Name_); - } - - private: - // Overridden from ServiceProvider: - void ConnectToService(const String& service_name, - ScopedMessagePipeHandle client_handle) override; - - void SetServiceConnectorForName(ServiceConnector* service_connector, - const std::string& interface_name); - - StrongBinding<ServiceProvider> binding_; - - internal::ServiceConnectorRegistry service_connector_registry_; - - MOJO_DISALLOW_COPY_AND_ASSIGN(ServiceProviderImpl); -}; - -} // namespace mojo - -#endif // MOJO_SHELL_PUBLIC_CPP_SERVICE_PROVIDER_IMPL_H_
diff --git a/mojo/shell/public/cpp/shell.h b/mojo/shell/public/cpp/shell.h index 104cc45..00e4605b 100644 --- a/mojo/shell/public/cpp/shell.h +++ b/mojo/shell/public/cpp/shell.h
@@ -7,14 +7,14 @@ #include "mojo/shell/public/cpp/app_lifetime_helper.h" #include "mojo/shell/public/cpp/connection.h" -#include "mojo/shell/public/interfaces/application.mojom.h" #include "mojo/shell/public/interfaces/shell.mojom.h" +#include "mojo/shell/public/interfaces/shell_client.mojom.h" namespace mojo { shell::mojom::CapabilityFilterPtr CreatePermissiveCapabilityFilter(); -using ApplicationRequest = InterfaceRequest<shell::mojom::Application>; +using ShellClientRequest = InterfaceRequest<shell::mojom::ShellClient>; class Shell { public: @@ -50,9 +50,8 @@ template <typename Interface> void ConnectToService(ConnectParams* params, InterfacePtr<Interface>* ptr) { scoped_ptr<Connection> connection = Connect(params); - if (!connection.get()) - return; - connection->ConnectToService(ptr); + if (connection) + connection->GetInterface(ptr); } template <typename Interface> void ConnectToService(const std::string& url, InterfacePtr<Interface>* ptr) {
diff --git a/mojo/shell/public/cpp/shell_client.h b/mojo/shell/public/cpp/shell_client.h index e7c56d9..ae3ad52 100644 --- a/mojo/shell/public/cpp/shell_client.h +++ b/mojo/shell/public/cpp/shell_client.h
@@ -16,7 +16,7 @@ class Shell; // An abstract class that the application may subclass to control various -// behaviors of ApplicationImpl. +// behaviors of ShellConnection. class ShellClient { public: ShellClient(); @@ -38,10 +38,10 @@ // // Return true to shutdown the application. Return false to skip shutting // down the connection, but user is then required to call - // ApplicationImpl::QuitNow() when done. Default implementation returns true. + // ShellConnection::QuitNow() when done. Default implementation returns true. virtual bool ShellConnectionLost(); - // Called before ApplicationImpl::Terminate(). After returning from this call + // Called before ShellConnection::Terminate(). After returning from this call // the delegate can no longer rely on the main run loop still running. virtual void Quit();
diff --git a/mojo/shell/public/cpp/shell_connection.h b/mojo/shell/public/cpp/shell_connection.h new file mode 100644 index 0000000..c58150a --- /dev/null +++ b/mojo/shell/public/cpp/shell_connection.h
@@ -0,0 +1,139 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MOJO_SHELL_PUBLIC_CPP_SHELL_CONNECTION_H_ +#define MOJO_SHELL_PUBLIC_CPP_SHELL_CONNECTION_H_ + +#include <utility> +#include <vector> + +#include "base/macros.h" +#include "base/memory/scoped_vector.h" +#include "base/memory/weak_ptr.h" +#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/callback.h" +#include "mojo/public/cpp/system/core.h" +#include "mojo/shell/public/cpp/app_lifetime_helper.h" +#include "mojo/shell/public/cpp/shell.h" +#include "mojo/shell/public/cpp/shell_client.h" +#include "mojo/shell/public/interfaces/shell.mojom.h" +#include "mojo/shell/public/interfaces/shell_client.mojom.h" + +namespace mojo { + +// TODO(beng): This comment is hilariously out of date. +// Utility class for communicating with the Shell, and providing Services +// to clients. +// +// To use define a class that implements your specific server api, e.g. FooImpl +// to implement a service named Foo. +// That class must subclass an InterfaceImpl specialization. +// +// If there is context that is to be shared amongst all instances, define a +// constructor with that class as its only argument, otherwise define an empty +// constructor. +// +// class FooImpl : public InterfaceImpl<Foo> { +// public: +// FooImpl(ApplicationContext* app_context) {} +// }; +// +// or +// +// class BarImpl : public InterfaceImpl<Bar> { +// public: +// // contexts will remain valid for the lifetime of BarImpl. +// BarImpl(ApplicationContext* app_context, BarContext* service_context) +// : app_context_(app_context), servicecontext_(context) {} +// +// Create an ShellConnection instance that collects any service implementations. +// +// ShellConnection app(service_provider_handle); +// app.AddService<FooImpl>(); +// +// BarContext context; +// app.AddService<BarImpl>(&context); +// +// +class ShellConnection : public Shell, public shell::mojom::ShellClient { + public: + class TestApi { + public: + explicit TestApi(ShellConnection* shell_connection) + : shell_connection_(shell_connection) {} + + void UnbindConnections( + InterfaceRequest<shell::mojom::ShellClient>* request, + shell::mojom::ShellPtr* shell) { + shell_connection_->UnbindConnections(request, shell); + } + + private: + ShellConnection* shell_connection_; + }; + + // Does not take ownership of |delegate|, which must remain valid for the + // lifetime of ShellConnection. + ShellConnection(mojo::ShellClient* client, + InterfaceRequest<shell::mojom::ShellClient> request); + // Constructs an ShellConnection with a custom termination closure. This + // closure is invoked on Quit() instead of the default behavior of quitting + // the current base::MessageLoop. + ShellConnection(mojo::ShellClient* client, + InterfaceRequest<shell::mojom::ShellClient> request, + const Closure& termination_closure); + ~ShellConnection() override; + + // Block the calling thread until the Initialize() method is called by the + // shell. + void WaitForInitialize(); + + // Shell. + scoped_ptr<Connection> Connect(const std::string& url) override; + scoped_ptr<Connection> Connect(ConnectParams* params) override; + void Quit() override; + scoped_ptr<AppRefCount> CreateAppRefCount() override; + + private: + // shell::mojom::Application implementation. + void Initialize(shell::mojom::ShellPtr shell, + const mojo::String& url, + uint32_t id) override; + void AcceptConnection(const String& requestor_url, + uint32_t requestor_id, + InterfaceRequest<ServiceProvider> services, + ServiceProviderPtr exposed_services, + Array<String> allowed_interfaces, + const String& url) override; + void OnQuitRequested(const Callback<void(bool)>& callback) override; + + void OnConnectionError(); + + // Called from Quit() when there is no Shell connection, or asynchronously + // from Quit() once the Shell has OK'ed shutdown. + void QuitNow(); + + // Unbinds the Shell and Application connections. Can be used to re-bind the + // handles to another implementation of ShellConnection, for instance when + // running apptests. + void UnbindConnections(InterfaceRequest<shell::mojom::ShellClient>* request, + shell::mojom::ShellPtr* shell); + + // We track the lifetime of incoming connection registries as it more + // convenient for the client. + ScopedVector<Connection> incoming_connections_; + mojo::ShellClient* client_; + Binding<shell::mojom::ShellClient> binding_; + shell::mojom::ShellPtr shell_; + Closure termination_closure_; + AppLifetimeHelper app_lifetime_helper_; + bool quit_requested_; + base::WeakPtrFactory<ShellConnection> weak_factory_; + + MOJO_DISALLOW_COPY_AND_ASSIGN(ShellConnection); +}; + +} // namespace mojo + +#endif // MOJO_SHELL_PUBLIC_CPP_SHELL_CONNECTION_H_
diff --git a/mojo/shell/public/cpp/tests/BUILD.gn b/mojo/shell/public/cpp/tests/BUILD.gn index 51da838..e4ad1f2 100644 --- a/mojo/shell/public/cpp/tests/BUILD.gn +++ b/mojo/shell/public/cpp/tests/BUILD.gn
@@ -6,7 +6,7 @@ test("mojo_public_application_unittests") { sources = [ - "service_registry_unittest.cc", + "connection_impl_unittest.cc", ] deps = [
diff --git a/mojo/shell/public/cpp/tests/connection_impl_unittest.cc b/mojo/shell/public/cpp/tests/connection_impl_unittest.cc new file mode 100644 index 0000000..d93da43 --- /dev/null +++ b/mojo/shell/public/cpp/tests/connection_impl_unittest.cc
@@ -0,0 +1,71 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "mojo/shell/public/cpp/lib/connection_impl.h" + +#include "base/memory/scoped_ptr.h" +#include "mojo/shell/public/cpp/interface_binder.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace mojo { +namespace internal { +namespace { + +class TestBinder : public InterfaceBinder { + public: + explicit TestBinder(int* delete_count) : delete_count_(delete_count) {} + ~TestBinder() override { (*delete_count_)++; } + void BindInterface(Connection* connection, + const std::string& interface_name, + ScopedMessagePipeHandle client_handle) override {} + + private: + int* delete_count_; +}; + +TEST(ConnectionImplTest, Ownership) { + int delete_count = 0; + + // Destruction. + { + ConnectionImpl connection; + ConnectionImpl::TestApi test_api(&connection); + test_api.SetInterfaceBinderForName(new TestBinder(&delete_count), "TC1"); + } + EXPECT_EQ(1, delete_count); + + // Removal. + { + scoped_ptr<ConnectionImpl> connection(new ConnectionImpl); + InterfaceBinder* b = new TestBinder(&delete_count); + ConnectionImpl::TestApi test_api(connection.get()); + test_api.SetInterfaceBinderForName(b, "TC1"); + test_api.RemoveInterfaceBinderForName("TC1"); + connection.reset(); + EXPECT_EQ(2, delete_count); + } + + // Multiple. + { + ConnectionImpl connection; + ConnectionImpl::TestApi test_api(&connection); + test_api.SetInterfaceBinderForName(new TestBinder(&delete_count), "TC1"); + test_api.SetInterfaceBinderForName(new TestBinder(&delete_count), "TC2"); + } + EXPECT_EQ(4, delete_count); + + // Re-addition. + { + ConnectionImpl connection; + ConnectionImpl::TestApi test_api(&connection); + test_api.SetInterfaceBinderForName(new TestBinder(&delete_count), "TC1"); + test_api.SetInterfaceBinderForName(new TestBinder(&delete_count), "TC1"); + EXPECT_EQ(5, delete_count); + } + EXPECT_EQ(6, delete_count); +} + +} // namespace +} // namespace internal +} // namespace mojo
diff --git a/mojo/shell/public/cpp/tests/service_registry_unittest.cc b/mojo/shell/public/cpp/tests/service_registry_unittest.cc deleted file mode 100644 index dc29d37..0000000 --- a/mojo/shell/public/cpp/tests/service_registry_unittest.cc +++ /dev/null
@@ -1,72 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "mojo/shell/public/cpp/lib/service_registry.h" - -#include "base/memory/scoped_ptr.h" -#include "mojo/shell/public/cpp/service_connector.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace mojo { -namespace internal { -namespace { - -class TestConnector : public ServiceConnector { - public: - explicit TestConnector(int* delete_count) : delete_count_(delete_count) {} - ~TestConnector() override { (*delete_count_)++; } - void ConnectToService(Connection* connection, - const std::string& interface_name, - ScopedMessagePipeHandle client_handle) override {} - - private: - int* delete_count_; -}; - -TEST(ServiceRegistryTest, Ownership) { - int delete_count = 0; - - // Destruction. - { - ServiceRegistry registry; - registry.SetServiceConnectorForName(new TestConnector(&delete_count), - "TC1"); - } - EXPECT_EQ(1, delete_count); - - // Removal. - { - scoped_ptr<ServiceRegistry> registry(new ServiceRegistry); - ServiceConnector* c = new TestConnector(&delete_count); - registry->SetServiceConnectorForName(c, "TC1"); - registry->RemoveServiceConnectorForName("TC1"); - registry.reset(); - EXPECT_EQ(2, delete_count); - } - - // Multiple. - { - ServiceRegistry registry; - registry.SetServiceConnectorForName(new TestConnector(&delete_count), - "TC1"); - registry.SetServiceConnectorForName(new TestConnector(&delete_count), - "TC2"); - } - EXPECT_EQ(4, delete_count); - - // Re-addition. - { - ServiceRegistry registry; - registry.SetServiceConnectorForName(new TestConnector(&delete_count), - "TC1"); - registry.SetServiceConnectorForName(new TestConnector(&delete_count), - "TC1"); - EXPECT_EQ(5, delete_count); - } - EXPECT_EQ(6, delete_count); -} - -} // namespace -} // namespace internal -} // namespace mojo
diff --git a/mojo/shell/public/interfaces/BUILD.gn b/mojo/shell/public/interfaces/BUILD.gn index 1aa7fc5..55653355 100644 --- a/mojo/shell/public/interfaces/BUILD.gn +++ b/mojo/shell/public/interfaces/BUILD.gn
@@ -7,11 +7,11 @@ # GYP version: mojo/mojo_base.gyp:mojo_application_bindings mojom("interfaces") { sources = [ - "application.mojom", "application_manager.mojom", "content_handler.mojom", "service_provider.mojom", "shell.mojom", + "shell_client.mojom", ] import_dirs = [ "//mojo/services" ]
diff --git a/mojo/shell/public/interfaces/application.mojom b/mojo/shell/public/interfaces/application.mojom deleted file mode 100644 index b59b724..0000000 --- a/mojo/shell/public/interfaces/application.mojom +++ /dev/null
@@ -1,75 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -module mojo.shell.mojom; - -import "mojo/shell/public/interfaces/service_provider.mojom"; -import "mojo/shell/public/interfaces/shell.mojom"; - -// This is the primary interface implemented by every Mojo application. It -// allows the application to receive its startup arguments from the shell, and -// to be notified of events that occur during its execution. -// -// TODO(aa): It would be good to reorder the parameters once we have interface -// versioning. -interface Application { - // Initializes the application with the specified arguments. This method is - // guaranteed to be called before any other method is called, and will only be - // called once. - // - // The |url| parameter is the identity of the application as far as the shell - // is concerned. This will be the URL the application was found at, after all - // mappings, resolution, and redirects. And it will not include the - // querystring, since the querystring is not part of an application's - // identity. - // - // The |id| parameter is the identifier of the instance in the - // ApplicationManager. It can be passed to other shell interfaces that request - // an instance identifier. - Initialize(Shell shell, string url, uint32 id); - - // Called when another application (identified by |requestor_url|) attempts to - // open a connection to this application. - // - // If the other application wants to request services from this application, - // it will have passed a valid interface request through the |services| - // parameter (i.e. one containing a valid message pipe endpoint). This - // application may then bind an implementation of |ServiceProvider| to that - // request in order to make services available to the other application. - // - // If the other application wants to offer services to this application, it - // will have passed a bound interface through the |exposed_services| - // parameter. This application may then request services through that - // interface. - // - // It is possible that both parameters will be valid/bound if the other - // application wants to both request services from and offer services to this - // application. - // - // This application is free to ignore the |services| or |exposed_services| - // parameters if it does not wish to offer or request services. - // - // |allowed_interfaces| is a set of interface names that the shell has - // determined can be exposed by this application to the connecting - // application. When this parameter is empty, this application should expose - // no services to the connecting application. When this parameter contains - // only the single string value "*" the application may expose all of its - // services to the connecting application. - // - // |resolved_url| is the URL that was requested to create this connection, - // after all mappings, resolutions, and redirects. This will include any - // querystring that was part of the request. - // - AcceptConnection(string requestor_url, - uint32 requestor_id, - mojo.ServiceProvider&? services, - mojo.ServiceProvider? exposed_services, - array<string> allowed_interfaces, - string resolved_url); - - // Called by the shell in response to calling Shell's QuitApplication. The - // application should run the callback with true if shutdown can proceed. - // See Shell::QuitApplication for details about shutdown workflow. - OnQuitRequested() => (bool can_quit); -};
diff --git a/mojo/shell/public/interfaces/content_handler.mojom b/mojo/shell/public/interfaces/content_handler.mojom index 405238fce..0dae8b9a 100644 --- a/mojo/shell/public/interfaces/content_handler.mojom +++ b/mojo/shell/public/interfaces/content_handler.mojom
@@ -4,7 +4,7 @@ module mojo.shell.mojom; -import "mojo/shell/public/interfaces/application.mojom"; +import "mojo/shell/public/interfaces/shell_client.mojom"; import "network/public/interfaces/url_loader.mojom"; // Interface implemented by content handlers. To avoid race conditions with @@ -16,5 +16,5 @@ // implementation to self destruct and release the app reference. interface ContentHandler { // The callback should be called when the application is destructed. - StartApplication(Application& application, mojo.URLResponse response) => (); + StartApplication(ShellClient& shell_client, mojo.URLResponse response) => (); };
diff --git a/mojo/shell/public/interfaces/shell_client.mojom b/mojo/shell/public/interfaces/shell_client.mojom new file mode 100644 index 0000000..b438d82 --- /dev/null +++ b/mojo/shell/public/interfaces/shell_client.mojom
@@ -0,0 +1,76 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +module mojo.shell.mojom; + +import "mojo/shell/public/interfaces/service_provider.mojom"; +import "mojo/shell/public/interfaces/shell.mojom"; + +// TODO(beng): rewrite these comments. +// This is the primary interface implemented by every Mojo application. It +// allows the application to receive its startup arguments from the shell, and +// to be notified of events that occur during its execution. +// +// TODO(aa): It would be good to reorder the parameters once we have interface +// versioning. +interface ShellClient { + // Initializes the application with the specified arguments. This method is + // guaranteed to be called before any other method is called, and will only be + // called once. + // + // The |url| parameter is the identity of the application as far as the shell + // is concerned. This will be the URL the application was found at, after all + // mappings, resolution, and redirects. And it will not include the + // querystring, since the querystring is not part of an application's + // identity. + // + // The |id| parameter is the identifier of the instance in the + // ApplicationManager. It can be passed to other shell interfaces that request + // an instance identifier. + Initialize(Shell shell, string url, uint32 id); + + // Called when another application (identified by |requestor_url|) attempts to + // open a connection to this application. + // + // If the other application wants to request services from this application, + // it will have passed a valid interface request through the |services| + // parameter (i.e. one containing a valid message pipe endpoint). This + // application may then bind an implementation of |ServiceProvider| to that + // request in order to make services available to the other application. + // + // If the other application wants to offer services to this application, it + // will have passed a bound interface through the |exposed_services| + // parameter. This application may then request services through that + // interface. + // + // It is possible that both parameters will be valid/bound if the other + // application wants to both request services from and offer services to this + // application. + // + // This application is free to ignore the |services| or |exposed_services| + // parameters if it does not wish to offer or request services. + // + // |allowed_interfaces| is a set of interface names that the shell has + // determined can be exposed by this application to the connecting + // application. When this parameter is empty, this application should expose + // no services to the connecting application. When this parameter contains + // only the single string value "*" the application may expose all of its + // services to the connecting application. + // + // |resolved_url| is the URL that was requested to create this connection, + // after all mappings, resolutions, and redirects. This will include any + // querystring that was part of the request. + // + AcceptConnection(string requestor_url, + uint32 requestor_id, + mojo.ServiceProvider&? services, + mojo.ServiceProvider? exposed_services, + array<string> allowed_interfaces, + string resolved_url); + + // Called by the shell in response to calling Shell's QuitApplication. The + // application should run the callback with true if shutdown can proceed. + // See Shell::QuitApplication for details about shutdown workflow. + OnQuitRequested() => (bool can_quit); +};
diff --git a/mojo/shell/runner/child/child_controller.mojom b/mojo/shell/runner/child/child_controller.mojom index 34c6dc9..f71c0d5 100644 --- a/mojo/shell/runner/child/child_controller.mojom +++ b/mojo/shell/runner/child/child_controller.mojom
@@ -4,11 +4,11 @@ module mojo.shell.mojom; -import "mojo/shell/public/interfaces/application.mojom"; +import "mojo/shell/public/interfaces/shell_client.mojom"; interface ChildController { // Starts the app. - StartApp(Application& application_request) => (int32 result); + StartApp(ShellClient& request) => (int32 result); // Exits the child process now (with no cleanup), with the given exit code. ExitNow(int32 exit_code);
diff --git a/mojo/shell/runner/child/native_apptest_target.cc b/mojo/shell/runner/child/native_apptest_target.cc index ff8a8fb..86043d1 100644 --- a/mojo/shell/runner/child/native_apptest_target.cc +++ b/mojo/shell/runner/child/native_apptest_target.cc
@@ -31,7 +31,7 @@ void Initialize(mojo::Shell* shell, const std::string& url, uint32_t id) override {} bool AcceptConnection(mojo::Connection* connection) override { - connection->AddService<mojo::shell::test::TestNativeService>(this); + connection->AddInterface<mojo::shell::test::TestNativeService>(this); return true; }
diff --git a/mojo/shell/runner/child/runner_connection.cc b/mojo/shell/runner/child/runner_connection.cc index b8477ac..75b4648d 100644 --- a/mojo/shell/runner/child/runner_connection.cc +++ b/mojo/shell/runner/child/runner_connection.cc
@@ -72,7 +72,7 @@ }; using GotApplicationRequestCallback = - base::Callback<void(InterfaceRequest<mojom::Application>)>; + base::Callback<void(InterfaceRequest<mojom::ShellClient>)>; void OnCreateMessagePipe(ScopedMessagePipeHandle* result, Blocker::Unblocker unblocker, @@ -81,8 +81,8 @@ unblocker.Unblock(base::Bind(&base::DoNothing)); } -void OnGotApplicationRequest(InterfaceRequest<mojom::Application>* out_request, - InterfaceRequest<mojom::Application> request) { +void OnGotApplicationRequest(InterfaceRequest<mojom::ShellClient>* out_request, + InterfaceRequest<mojom::ShellClient> request) { *out_request = std::move(request); } @@ -102,7 +102,7 @@ // Returns true if a connection to the runner has been established and // |request| has been modified, false if no connection was established. - bool WaitForApplicationRequest(InterfaceRequest<mojom::Application>* request, + bool WaitForApplicationRequest(InterfaceRequest<mojom::ShellClient>* request, ScopedMessagePipeHandle handle); ChildControllerImpl* controller() const { return controller_.get(); } @@ -173,14 +173,14 @@ } // |mojom::ChildController| methods: - void StartApp(InterfaceRequest<mojom::Application> application_request, + void StartApp(InterfaceRequest<mojom::ShellClient> request, const StartAppCallback& on_app_complete) override { DCHECK(thread_checker_.CalledOnValidThread()); on_app_complete_ = on_app_complete; unblocker_.Unblock( base::Bind(&ChildControllerImpl::ReturnApplicationRequestOnMainThread, - callback_, base::Passed(&application_request))); + callback_, base::Passed(&request))); } void ExitNow(int32_t exit_code) override { @@ -199,8 +199,8 @@ static void ReturnApplicationRequestOnMainThread( const GotApplicationRequestCallback& callback, - InterfaceRequest<mojom::Application> application_request) { - callback.Run(std::move(application_request)); + InterfaceRequest<mojom::ShellClient> request) { + callback.Run(std::move(request)); } base::ThreadChecker thread_checker_; @@ -215,7 +215,7 @@ }; bool RunnerConnectionImpl::WaitForApplicationRequest( - InterfaceRequest<mojom::Application>* request, + InterfaceRequest<mojom::ShellClient>* request, ScopedMessagePipeHandle handle) { // If a valid message pipe to the runner was not provided, look for one on the // command line. @@ -255,7 +255,7 @@ // static RunnerConnection* RunnerConnection::ConnectToRunner( - InterfaceRequest<mojom::Application>* request, + InterfaceRequest<mojom::ShellClient>* request, ScopedMessagePipeHandle handle) { RunnerConnectionImpl* connection = new RunnerConnectionImpl; if (!connection->WaitForApplicationRequest(request, std::move(handle))) {
diff --git a/mojo/shell/runner/child/runner_connection.h b/mojo/shell/runner/child/runner_connection.h index 18f01b7..488b9968 100644 --- a/mojo/shell/runner/child/runner_connection.h +++ b/mojo/shell/runner/child/runner_connection.h
@@ -6,7 +6,7 @@ #define MOJO_SHELL_RUNNER_CHILD_RUNNER_CONNECTION_H_ #include "base/macros.h" -#include "mojo/shell/public/interfaces/application.mojom.h" +#include "mojo/shell/public/interfaces/shell_client.mojom.h" namespace mojo { namespace shell { @@ -24,7 +24,7 @@ // If a connection to the runner cannot be established, |request| will not be // modified and this function will return null. static RunnerConnection* ConnectToRunner( - InterfaceRequest<mojom::Application>* request, + InterfaceRequest<mojom::ShellClient>* request, ScopedMessagePipeHandle handle); protected:
diff --git a/mojo/shell/runner/child/test_native_main.cc b/mojo/shell/runner/child/test_native_main.cc index 537b32b..8b4cbd8 100644 --- a/mojo/shell/runner/child/test_native_main.cc +++ b/mojo/shell/runner/child/test_native_main.cc
@@ -13,8 +13,8 @@ #include "base/threading/thread.h" #include "build/build_config.h" #include "mojo/message_pump/message_pump_mojo.h" -#include "mojo/shell/public/cpp/application_impl.h" #include "mojo/shell/public/cpp/shell_client.h" +#include "mojo/shell/public/cpp/shell_connection.h" #include "mojo/shell/runner/child/runner_connection.h" #include "mojo/shell/runner/init.h" #include "third_party/mojo/src/mojo/edk/embedder/embedder.h" @@ -37,7 +37,7 @@ } // namespace -int TestNativeMain(mojo::ShellClient* application_delegate) { +int TestNativeMain(mojo::ShellClient* shell_client) { mojo::shell::WaitForDebuggerIfNecessary(); #if !defined(OFFICIAL_BUILD) @@ -60,13 +60,12 @@ mojo::embedder::ProcessType::NONE, &process_delegate, io_thread.task_runner().get(), mojo::embedder::ScopedPlatformHandle()); - mojo::ApplicationRequest application_request; + mojo::ShellClientRequest request; scoped_ptr<mojo::shell::RunnerConnection> connection( mojo::shell::RunnerConnection::ConnectToRunner( - &application_request, ScopedMessagePipeHandle())); + &request, ScopedMessagePipeHandle())); base::MessageLoop loop(mojo::common::MessagePumpMojo::Create()); - mojo::ApplicationImpl impl(application_delegate, - std::move(application_request)); + mojo::ShellConnection impl(shell_client, std::move(request)); loop.Run(); mojo::embedder::ShutdownIPCSupport();
diff --git a/mojo/shell/runner/child/test_native_main.h b/mojo/shell/runner/child/test_native_main.h index 600e814..3742bc54 100644 --- a/mojo/shell/runner/child/test_native_main.h +++ b/mojo/shell/runner/child/test_native_main.h
@@ -9,7 +9,7 @@ class ShellClient; namespace shell { -int TestNativeMain(mojo::ShellClient* application_delegate); +int TestNativeMain(mojo::ShellClient* shell_client); } // namespace shell } // namespace mojo
diff --git a/mojo/shell/runner/host/child_process.cc b/mojo/shell/runner/host/child_process.cc index 1d9228c8..0208b84 100644 --- a/mojo/shell/runner/host/child_process.cc +++ b/mojo/shell/runner/host/child_process.cc
@@ -235,14 +235,14 @@ } // |ChildController| methods: - void StartApp(InterfaceRequest<mojom::Application> application_request, + void StartApp(InterfaceRequest<mojom::ShellClient> request, const StartAppCallback& on_app_complete) override { DCHECK(thread_checker_.CalledOnValidThread()); on_app_complete_ = on_app_complete; unblocker_.Unblock(base::Bind(&ChildControllerImpl::StartAppOnMainThread, base::Unretained(app_library_), - base::Passed(&application_request))); + base::Passed(&request))); } void ExitNow(int32_t exit_code) override { @@ -258,8 +258,8 @@ static void StartAppOnMainThread( base::NativeLibrary app_library, - InterfaceRequest<mojom::Application> application_request) { - if (!RunNativeApplication(app_library, std::move(application_request))) { + InterfaceRequest<mojom::ShellClient> request) { + if (!RunNativeApplication(app_library, std::move(request))) { LOG(ERROR) << "Failure to RunNativeApplication()"; } }
diff --git a/mojo/shell/runner/host/child_process_host.cc b/mojo/shell/runner/host/child_process_host.cc index 4e9fa9f1..9a5b439 100644 --- a/mojo/shell/runner/host/child_process_host.cc +++ b/mojo/shell/runner/host/child_process_host.cc
@@ -113,7 +113,7 @@ // while this boostrap is pending, resulting in OnMessagePipeCreated() never // being called. // - // A typical child process (i.e. one using ApplicationImpl to bind the other + // A typical child process (i.e. one using ShellConnection to bind the other // end of this pipe) may hang forever waiting for an Initialize() message // unless the pipe is closed. This in turn means that Join() could hang // waiting for the process to exit. Deadlock! @@ -156,13 +156,13 @@ } void ChildProcessHost::StartApp( - InterfaceRequest<mojom::Application> application_request, + InterfaceRequest<mojom::ShellClient> request, const mojom::ChildController::StartAppCallback& on_app_complete) { DCHECK(controller_); on_app_complete_ = on_app_complete; controller_->StartApp( - std::move(application_request), + std::move(request), base::Bind(&ChildProcessHost::AppCompleted, weak_factory_.GetWeakPtr())); }
diff --git a/mojo/shell/runner/host/child_process_host.h b/mojo/shell/runner/host/child_process_host.h index 7472096..906a1a2 100644 --- a/mojo/shell/runner/host/child_process_host.h +++ b/mojo/shell/runner/host/child_process_host.h
@@ -66,7 +66,7 @@ // See |mojom::ChildController|: void StartApp( - InterfaceRequest<mojom::Application> application_request, + InterfaceRequest<mojom::ShellClient> request, const mojom::ChildController::StartAppCallback& on_app_complete); void ExitNow(int32_t exit_code);
diff --git a/mojo/shell/runner/host/in_process_native_runner.cc b/mojo/shell/runner/host/in_process_native_runner.cc index 1674cbf..56630d3 100644 --- a/mojo/shell/runner/host/in_process_native_runner.cc +++ b/mojo/shell/runner/host/in_process_native_runner.cc
@@ -35,13 +35,13 @@ void InProcessNativeRunner::Start( const base::FilePath& app_path, bool start_sandboxed, - InterfaceRequest<mojom::Application> application_request, + InterfaceRequest<mojom::ShellClient> request, const base::Callback<void(base::ProcessId)>& pid_available_callback, const base::Closure& app_completed_callback) { app_path_ = app_path; - DCHECK(!application_request_.is_pending()); - application_request_ = std::move(application_request); + DCHECK(!request_.is_pending()); + request_ = std::move(request); DCHECK(app_completed_callback_runner_.is_null()); app_completed_callback_runner_ = base::Bind( @@ -56,7 +56,7 @@ void InProcessNativeRunner::InitHost( ScopedHandle channel, - InterfaceRequest<mojom::Application> application_request) { + InterfaceRequest<mojom::ShellClient> request) { NOTREACHED(); // Can't host another process in this runner. } @@ -73,7 +73,7 @@ #if !(defined(COMPONENT_BUILD) && defined(OS_WIN)) CallLibraryEarlyInitialization(app_library); #endif - RunNativeApplication(app_library, std::move(application_request_)); + RunNativeApplication(app_library, std::move(request_)); app_completed_callback_runner_.Run(); app_completed_callback_runner_.Reset(); }
diff --git a/mojo/shell/runner/host/in_process_native_runner.h b/mojo/shell/runner/host/in_process_native_runner.h index c167112..93216b2 100644 --- a/mojo/shell/runner/host/in_process_native_runner.h +++ b/mojo/shell/runner/host/in_process_native_runner.h
@@ -33,19 +33,19 @@ void Start( const base::FilePath& app_path, bool start_sandboxed, - InterfaceRequest<mojom::Application> application_request, + InterfaceRequest<mojom::ShellClient> request, const base::Callback<void(base::ProcessId)>& pid_available_callback, const base::Closure& app_completed_callback) override; void InitHost( ScopedHandle channel, - InterfaceRequest<mojom::Application> application_request) override; + InterfaceRequest<mojom::ShellClient> request) override; private: // |base::DelegateSimpleThread::Delegate| method: void Run() override; base::FilePath app_path_; - InterfaceRequest<mojom::Application> application_request_; + InterfaceRequest<mojom::ShellClient> request_; base::Callback<bool(void)> app_completed_callback_runner_; base::ScopedNativeLibrary app_library_;
diff --git a/mojo/shell/runner/host/native_application_support.cc b/mojo/shell/runner/host/native_application_support.cc index eeccef9..97288fa 100644 --- a/mojo/shell/runner/host/native_application_support.cc +++ b/mojo/shell/runner/host/native_application_support.cc
@@ -54,7 +54,7 @@ bool RunNativeApplication( base::NativeLibrary app_library, - InterfaceRequest<mojom::Application> application_request) { + InterfaceRequest<mojom::ShellClient> request) { // Tolerate |app_library| being null, to make life easier for callers. if (!app_library) return false; @@ -120,7 +120,7 @@ return false; } // |MojoMain()| takes ownership of the service handle. - MojoHandle handle = application_request.PassMessagePipe().release().value(); + MojoHandle handle = request.PassMessagePipe().release().value(); MojoResult result = main_function(handle); if (result != MOJO_RESULT_OK) { LOG(ERROR) << "MojoMain returned error (result: " << result << ")";
diff --git a/mojo/shell/runner/host/native_application_support.h b/mojo/shell/runner/host/native_application_support.h index 88daad3..2371f65 100644 --- a/mojo/shell/runner/host/native_application_support.h +++ b/mojo/shell/runner/host/native_application_support.h
@@ -7,7 +7,7 @@ #include "base/native_library.h" #include "mojo/public/cpp/bindings/interface_request.h" -#include "mojo/shell/public/interfaces/application.mojom.h" +#include "mojo/shell/public/interfaces/shell_client.mojom.h" namespace base { class FilePath; @@ -33,9 +33,8 @@ // true if |MojoMain()| was called (even if it returns an error), and false // otherwise. // TODO(vtl): Maybe this should also have a |MojoResult| as an out parameter? -bool RunNativeApplication( - base::NativeLibrary app_library, - InterfaceRequest<mojom::Application> application_request); +bool RunNativeApplication(base::NativeLibrary app_library, + InterfaceRequest<mojom::ShellClient> request); } // namespace shell } // namespace mojo
diff --git a/mojo/shell/runner/host/out_of_process_native_runner.cc b/mojo/shell/runner/host/out_of_process_native_runner.cc index 9b4ae03..b34f5ee 100644 --- a/mojo/shell/runner/host/out_of_process_native_runner.cc +++ b/mojo/shell/runner/host/out_of_process_native_runner.cc
@@ -31,7 +31,7 @@ void OutOfProcessNativeRunner::Start( const base::FilePath& app_path, bool start_sandboxed, - InterfaceRequest<mojom::Application> application_request, + InterfaceRequest<mojom::ShellClient> request, const base::Callback<void(base::ProcessId)>& pid_available_callback, const base::Closure& app_completed_callback) { app_path_ = app_path; @@ -43,15 +43,15 @@ new ChildProcessHost(launch_process_runner_, start_sandboxed, app_path)); child_process_host_->Start(base::Bind( &OutOfProcessNativeRunner::OnProcessLaunched, base::Unretained(this), - base::Passed(&application_request), pid_available_callback)); + base::Passed(&request), pid_available_callback)); } void OutOfProcessNativeRunner::InitHost( ScopedHandle channel, - InterfaceRequest<mojom::Application> application_request) { + InterfaceRequest<mojom::ShellClient> request) { child_process_host_.reset(new ChildProcessHost(std::move(channel))); child_process_host_->StartApp( - std::move(application_request), + std::move(request), base::Bind(&OutOfProcessNativeRunner::AppCompleted, base::Unretained(this))); } @@ -69,12 +69,12 @@ } void OutOfProcessNativeRunner::OnProcessLaunched( - InterfaceRequest<mojom::Application> application_request, + InterfaceRequest<mojom::ShellClient> request, const base::Callback<void(base::ProcessId)>& pid_available_callback, base::ProcessId pid) { DCHECK(child_process_host_); child_process_host_->StartApp( - std::move(application_request), + std::move(request), base::Bind(&OutOfProcessNativeRunner::AppCompleted, base::Unretained(this))); pid_available_callback.Run(pid);
diff --git a/mojo/shell/runner/host/out_of_process_native_runner.h b/mojo/shell/runner/host/out_of_process_native_runner.h index 794c1f31..139dbdd 100644 --- a/mojo/shell/runner/host/out_of_process_native_runner.h +++ b/mojo/shell/runner/host/out_of_process_native_runner.h
@@ -33,12 +33,12 @@ void Start( const base::FilePath& app_path, bool start_sandboxed, - InterfaceRequest<mojom::Application> application_request, + InterfaceRequest<mojom::ShellClient> request, const base::Callback<void(base::ProcessId)>& pid_available_callback, const base::Closure& app_completed_callback) override; void InitHost( ScopedHandle channel, - InterfaceRequest<mojom::Application> application_request) override; + InterfaceRequest<mojom::ShellClient> request) override; private: // |ChildController::StartApp()| callback: @@ -46,7 +46,7 @@ // Callback run when the child process has launched. void OnProcessLaunched( - InterfaceRequest<mojom::Application> application_request, + InterfaceRequest<mojom::ShellClient> request, const base::Callback<void(base::ProcessId)>& pid_available_callback, base::ProcessId pid);
diff --git a/mojo/shell/shell_application_delegate.cc b/mojo/shell/shell_application_delegate.cc index dcac9de..47df9d43 100644 --- a/mojo/shell/shell_application_delegate.cc +++ b/mojo/shell/shell_application_delegate.cc
@@ -24,7 +24,7 @@ void ShellApplicationDelegate::Initialize(Shell* shell, const std::string& url, uint32_t id) {} bool ShellApplicationDelegate::AcceptConnection(Connection* connection) { - connection->AddService<mojom::ApplicationManager>(this); + connection->AddInterface<mojom::ApplicationManager>(this); return true; }
diff --git a/mojo/shell/shell_application_loader.cc b/mojo/shell/shell_application_loader.cc index e648295c..7b55a8d 100644 --- a/mojo/shell/shell_application_loader.cc +++ b/mojo/shell/shell_application_loader.cc
@@ -6,7 +6,7 @@ #include <utility> -#include "mojo/shell/public/cpp/application_impl.h" +#include "mojo/shell/public/cpp/shell_connection.h" #include "mojo/shell/shell_application_delegate.h" namespace mojo { @@ -18,10 +18,10 @@ void ShellApplicationLoader::Load( const GURL& url, - InterfaceRequest<mojom::Application> application_request) { - DCHECK(application_request.is_pending()); - app_.reset(new ApplicationImpl(new ShellApplicationDelegate(manager_), - std::move(application_request))); + InterfaceRequest<mojom::ShellClient> request) { + DCHECK(request.is_pending()); + shell_connection_.reset(new ShellConnection( + new ShellApplicationDelegate(manager_), std::move(request))); } } // namespace shell
diff --git a/mojo/shell/shell_application_loader.h b/mojo/shell/shell_application_loader.h index b00f08a3..6c3258a 100644 --- a/mojo/shell/shell_application_loader.h +++ b/mojo/shell/shell_application_loader.h
@@ -9,7 +9,7 @@ #include "mojo/shell/application_loader.h" namespace mojo { -class ApplicationImpl; +class ShellConnection; namespace shell { class ShellApplicationLoader : public ApplicationLoader { @@ -19,11 +19,10 @@ private: // Overridden from ApplicationLoader: - void Load( - const GURL& url, - InterfaceRequest<mojom::Application> application_request) override; + void Load(const GURL& url, + InterfaceRequest<mojom::ShellClient> request) override; - scoped_ptr<ApplicationImpl> app_; + scoped_ptr<ShellConnection> shell_connection_; ApplicationManager* manager_;
diff --git a/mojo/shell/standalone/BUILD.gn b/mojo/shell/standalone/BUILD.gn index a55a065..6dcfdf3 100644 --- a/mojo/shell/standalone/BUILD.gn +++ b/mojo/shell/standalone/BUILD.gn
@@ -54,6 +54,7 @@ deps += [ ":jni_headers", + "//base:i18n", "//components/mus", "//components/mus/ws:lib", "//mojo/shell",
diff --git a/mojo/shell/standalone/android/android_handler.cc b/mojo/shell/standalone/android/android_handler.cc index 98788243..a509cc7 100644 --- a/mojo/shell/standalone/android/android_handler.cc +++ b/mojo/shell/standalone/android/android_handler.cc
@@ -41,8 +41,8 @@ jobject j_context, const base::FilePath& app_path, jint j_handle) { - InterfaceRequest<mojom::Application> application_request = - MakeRequest<mojom::Application>( + InterfaceRequest<mojom::ShellClient> request = + MakeRequest<mojom::ShellClient>( MakeScopedHandle(MessagePipeHandle(j_handle))); // Load the library, so that we can set the application context there if @@ -69,7 +69,7 @@ } // Run the application. - RunNativeApplication(app_library, std::move(application_request)); + RunNativeApplication(app_library, std::move(request)); // TODO(vtl): See note about unloading and thread-local destructors above // declaration of |LoadNativeApplication()|. base::UnloadNativeLibrary(app_library); @@ -133,7 +133,7 @@ AndroidHandler::~AndroidHandler() {} void AndroidHandler::RunApplication( - InterfaceRequest<mojom::Application> application_request, + InterfaceRequest<mojom::ShellClient> request, URLResponsePtr response) { JNIEnv* env = AttachCurrentThread(); RunAndroidApplicationFn run_android_application_fn = &RunAndroidApplication; @@ -149,7 +149,7 @@ Java_AndroidHandler_bootstrapCachedApp( env, GetApplicationContext(), j_path_to_mojo.obj(), j_internal_app_path.obj(), - application_request.PassMessagePipe().release().value(), + request.PassMessagePipe().release().value(), reinterpret_cast<jlong>(run_android_application_fn)); return; } @@ -162,7 +162,7 @@ common::BlockingCopyToFile(std::move(response->body), archive_path); Java_AndroidHandler_bootstrap( env, GetApplicationContext(), j_archive_path.obj(), - application_request.PassMessagePipe().release().value(), + request.PassMessagePipe().release().value(), reinterpret_cast<jlong>(run_android_application_fn)); } @@ -171,7 +171,7 @@ uint32_t id) {} bool AndroidHandler::AcceptConnection(Connection* connection) { - connection->AddService(&content_handler_factory_); + connection->AddInterface(&content_handler_factory_); return true; }
diff --git a/mojo/shell/standalone/android/android_handler.h b/mojo/shell/standalone/android/android_handler.h index ed8ad3ea..70a246f 100644 --- a/mojo/shell/standalone/android/android_handler.h +++ b/mojo/shell/standalone/android/android_handler.h
@@ -31,7 +31,7 @@ bool AcceptConnection(Connection* connection) override; // ContentHandlerFactory::Delegate: - void RunApplication(InterfaceRequest<mojom::Application> application_request, + void RunApplication(InterfaceRequest<mojom::ShellClient> request, URLResponsePtr response) override; ContentHandlerFactory content_handler_factory_;
diff --git a/mojo/shell/standalone/android/android_handler_loader.cc b/mojo/shell/standalone/android/android_handler_loader.cc index 1c1bb5e..4ff4bab 100644 --- a/mojo/shell/standalone/android/android_handler_loader.cc +++ b/mojo/shell/standalone/android/android_handler_loader.cc
@@ -13,12 +13,11 @@ AndroidHandlerLoader::~AndroidHandlerLoader() {} -void AndroidHandlerLoader::Load( - const GURL& url, - InterfaceRequest<mojom::Application> application_request) { - DCHECK(application_request.is_pending()); - application_.reset( - new ApplicationImpl(&android_handler_, std::move(application_request))); +void AndroidHandlerLoader::Load(const GURL& url, + InterfaceRequest<mojom::ShellClient> request) { + DCHECK(request.is_pending()); + shell_client_.reset( + new ShellConnection(&android_handler_, std::move(request))); } } // namespace shell
diff --git a/mojo/shell/standalone/android/android_handler_loader.h b/mojo/shell/standalone/android/android_handler_loader.h index 18255d5..5aac6b1f 100644 --- a/mojo/shell/standalone/android/android_handler_loader.h +++ b/mojo/shell/standalone/android/android_handler_loader.h
@@ -9,7 +9,7 @@ #include "base/macros.h" #include "base/memory/scoped_ptr.h" #include "mojo/shell/application_loader.h" -#include "mojo/shell/public/cpp/application_impl.h" +#include "mojo/shell/public/cpp/shell_connection.h" #include "mojo/shell/standalone/android/android_handler.h" namespace mojo { @@ -23,10 +23,10 @@ private: // ApplicationLoader overrides: void Load(const GURL& url, - InterfaceRequest<mojom::Application> application_request) override; + InterfaceRequest<mojom::ShellClient> request) override; AndroidHandler android_handler_; - scoped_ptr<ApplicationImpl> application_; + scoped_ptr<ShellConnection> shell_client_; DISALLOW_COPY_AND_ASSIGN(AndroidHandlerLoader); };
diff --git a/mojo/shell/standalone/android/background_application_loader.cc b/mojo/shell/standalone/android/background_application_loader.cc index 8bd3869..446ce42 100644 --- a/mojo/shell/standalone/android/background_application_loader.cc +++ b/mojo/shell/standalone/android/background_application_loader.cc
@@ -29,12 +29,12 @@ void BackgroundApplicationLoader::Load( const GURL& url, - InterfaceRequest<mojom::Application> application_request) { - DCHECK(application_request.is_pending()); + InterfaceRequest<mojom::ShellClient> request) { + DCHECK(request.is_pending()); if (!thread_) { // TODO(tim): It'd be nice if we could just have each Load call // result in a new thread like DynamicService{Loader, Runner}. But some - // loaders are creating multiple ApplicationImpls (NetworkApplicationLoader) + // loaders are creating multiple ShellConnections (NetworkApplicationLoader) // sharing a delegate (etc). So we have to keep it single threaded, wait // for the thread to initialize, and post to the TaskRunner for subsequent // Load calls for now. @@ -47,8 +47,7 @@ task_runner_->PostTask( FROM_HERE, base::Bind(&BackgroundApplicationLoader::LoadOnBackgroundThread, - base::Unretained(this), url, - base::Passed(&application_request))); + base::Unretained(this), url, base::Passed(&request))); } void BackgroundApplicationLoader::Run() { @@ -65,9 +64,9 @@ void BackgroundApplicationLoader::LoadOnBackgroundThread( const GURL& url, - InterfaceRequest<mojom::Application> application_request) { + InterfaceRequest<mojom::ShellClient> request) { DCHECK(task_runner_->RunsTasksOnCurrentThread()); - loader_->Load(url, std::move(application_request)); + loader_->Load(url, std::move(request)); } } // namespace shell
diff --git a/mojo/shell/standalone/android/background_application_loader.h b/mojo/shell/standalone/android/background_application_loader.h index 203ce54..ed6f73c1 100644 --- a/mojo/shell/standalone/android/background_application_loader.h +++ b/mojo/shell/standalone/android/background_application_loader.h
@@ -26,7 +26,7 @@ // ApplicationLoader overrides: void Load(const GURL& url, - InterfaceRequest<mojom::Application> application_request) override; + InterfaceRequest<mojom::ShellClient> request) override; private: // |base::DelegateSimpleThread::Delegate| method: @@ -34,9 +34,8 @@ // These functions are exected on the background thread. They call through // to |background_loader_| to do the actual loading. - void LoadOnBackgroundThread( - const GURL& url, - InterfaceRequest<mojom::Application> application_request); + void LoadOnBackgroundThread(const GURL& url, + InterfaceRequest<mojom::ShellClient> request); bool quit_on_shutdown_; scoped_ptr<ApplicationLoader> loader_;
diff --git a/mojo/shell/standalone/android/background_application_loader_unittest.cc b/mojo/shell/standalone/android/background_application_loader_unittest.cc index b7c1712..fcea757 100644 --- a/mojo/shell/standalone/android/background_application_loader_unittest.cc +++ b/mojo/shell/standalone/android/background_application_loader_unittest.cc
@@ -4,7 +4,7 @@ #include "mojo/shell/standalone/android/background_application_loader.h" -#include "mojo/shell/public/interfaces/application.mojom.h" +#include "mojo/shell/public/interfaces/shell_client.mojom.h" #include "testing/gtest/include/gtest/gtest.h" namespace mojo { @@ -18,7 +18,7 @@ // ApplicationLoader overrides: void Load(const GURL& url, - InterfaceRequest<mojom::Application> application_request) override { + InterfaceRequest<mojom::ShellClient> request) override { if (simulate_app_quit_) base::MessageLoop::current()->QuitWhenIdle(); }
diff --git a/mojo/shell/standalone/android/main.cc b/mojo/shell/standalone/android/main.cc index 9fffd84..6be9f8a 100644 --- a/mojo/shell/standalone/android/main.cc +++ b/mojo/shell/standalone/android/main.cc
@@ -14,6 +14,7 @@ #include "base/debug/stack_trace.h" #include "base/files/file_path.h" #include "base/files/file_util.h" +#include "base/i18n/icu_util.h" #include "base/lazy_instance.h" #include "base/logging.h" #include "base/macros.h" @@ -136,6 +137,8 @@ g_java_message_loop.Get().reset(new base::MessageLoopForUI); base::MessageLoopForUI::current()->Start(); + CHECK(base::i18n::InitializeICU()); + shell_context->Init(shell_file_root); ConfigureAndroidServices(shell_context);
diff --git a/mojo/shell/standalone/android/ui_application_loader_android.cc b/mojo/shell/standalone/android/ui_application_loader_android.cc index 39ebb8d..a848b2e 100644 --- a/mojo/shell/standalone/android/ui_application_loader_android.cc +++ b/mojo/shell/standalone/android/ui_application_loader_android.cc
@@ -24,20 +24,19 @@ base::Unretained(this))); } -void UIApplicationLoader::Load( - const GURL& url, - InterfaceRequest<mojom::Application> application_request) { - DCHECK(application_request.is_pending()); +void UIApplicationLoader::Load(const GURL& url, + InterfaceRequest<mojom::ShellClient> request) { + DCHECK(request.is_pending()); ui_message_loop_->PostTask( FROM_HERE, base::Bind(&UIApplicationLoader::LoadOnUIThread, base::Unretained(this), - url, base::Passed(&application_request))); + url, base::Passed(&request))); } void UIApplicationLoader::LoadOnUIThread( const GURL& url, - InterfaceRequest<mojom::Application> application_request) { - loader_->Load(url, std::move(application_request)); + InterfaceRequest<mojom::ShellClient> request) { + loader_->Load(url, std::move(request)); } void UIApplicationLoader::ShutdownOnUIThread() {
diff --git a/mojo/shell/standalone/android/ui_application_loader_android.h b/mojo/shell/standalone/android/ui_application_loader_android.h index 6a8c03e..5f9b5e15 100644 --- a/mojo/shell/standalone/android/ui_application_loader_android.h +++ b/mojo/shell/standalone/android/ui_application_loader_android.h
@@ -29,7 +29,7 @@ // ApplicationLoader overrides: void Load(const GURL& url, - InterfaceRequest<mojom::Application> application_request) override; + InterfaceRequest<mojom::ShellClient> request) override; private: class UILoader; @@ -39,7 +39,7 @@ // TODO: having this code take a |manager| is fragile (as ApplicationManager // isn't thread safe). void LoadOnUIThread(const GURL& url, - InterfaceRequest<mojom::Application> application_request); + InterfaceRequest<mojom::ShellClient> request); void ShutdownOnUIThread(); scoped_ptr<ApplicationLoader> loader_;
diff --git a/mojo/shell/standalone/context.cc b/mojo/shell/standalone/context.cc index 41a003f..ed2c364 100644 --- a/mojo/shell/standalone/context.cc +++ b/mojo/shell/standalone/context.cc
@@ -13,7 +13,6 @@ #include "base/bind.h" #include "base/command_line.h" #include "base/files/file_path.h" -#include "base/i18n/icu_util.h" #include "base/lazy_instance.h" #include "base/macros.h" #include "base/memory/scoped_ptr.h" @@ -199,10 +198,6 @@ "mojo_runner.trace"); } - // ICU data is a thing every part of the system needs. This here warms - // up the copy of ICU in the mojo runner. - CHECK(base::i18n::InitializeICU()); - EnsureEmbedderIsInitialized(); task_runners_.reset( new TaskRunners(base::MessageLoop::current()->task_runner()));
diff --git a/mojo/shell/standalone/desktop/launcher_process.cc b/mojo/shell/standalone/desktop/launcher_process.cc index ded413a2..9332d9435 100644 --- a/mojo/shell/standalone/desktop/launcher_process.cc +++ b/mojo/shell/standalone/desktop/launcher_process.cc
@@ -13,6 +13,7 @@ #include "base/command_line.h" #include "base/debug/stack_trace.h" #include "base/files/file_util.h" +#include "base/i18n/icu_util.h" #include "base/message_loop/message_loop.h" #include "base/path_service.h" #include "base/synchronization/waitable_event.h" @@ -45,6 +46,7 @@ base::MessageLoop message_loop; base::FilePath shell_dir; PathService::Get(base::DIR_MODULE, &shell_dir); + CHECK(base::i18n::InitializeICU()); shell_context.Init(shell_dir); if (mojo_url.is_empty()) {
diff --git a/mojo/shell/static_application_loader.cc b/mojo/shell/static_application_loader.cc index 7b510272..a6920ff 100644 --- a/mojo/shell/static_application_loader.cc +++ b/mojo/shell/static_application_loader.cc
@@ -15,7 +15,7 @@ #include "mojo/public/cpp/bindings/interface_request.h" #include "mojo/shell/public/cpp/application_runner.h" #include "mojo/shell/public/cpp/shell_client.h" -#include "mojo/shell/public/interfaces/application.mojom.h" +#include "mojo/shell/public/interfaces/shell_client.mojom.h" namespace mojo { namespace shell { @@ -25,7 +25,7 @@ class RunnerThread : public base::SimpleThread { public: RunnerThread(const GURL& url, - InterfaceRequest<mojom::Application> request, + InterfaceRequest<mojom::ShellClient> request, scoped_refptr<base::TaskRunner> exit_task_runner, const base::Closure& exit_callback, const StaticApplicationLoader::ApplicationFactory& factory) @@ -44,7 +44,7 @@ } private: - InterfaceRequest<mojom::Application> request_; + InterfaceRequest<mojom::ShellClient> request_; scoped_refptr<base::TaskRunner> exit_task_runner_; base::Closure exit_callback_; StaticApplicationLoader::ApplicationFactory factory_; @@ -72,7 +72,7 @@ void StaticApplicationLoader::Load( const GURL& url, - InterfaceRequest<mojom::Application> request) { + InterfaceRequest<mojom::ShellClient> request) { if (thread_) return;
diff --git a/mojo/shell/static_application_loader.h b/mojo/shell/static_application_loader.h index 38b4a87..b3d55ba6 100644 --- a/mojo/shell/static_application_loader.h +++ b/mojo/shell/static_application_loader.h
@@ -44,7 +44,7 @@ // mojo::shell::ApplicationLoader: void Load(const GURL& url, - InterfaceRequest<mojom::Application> request) override; + InterfaceRequest<mojom::ShellClient> request) override; private: void StopAppThread();
diff --git a/mojo/shell/test_package_manager.cc b/mojo/shell/test_package_manager.cc index 281925d4..3947b52 100644 --- a/mojo/shell/test_package_manager.cc +++ b/mojo/shell/test_package_manager.cc
@@ -22,7 +22,7 @@ const Identity& source, const GURL& target_url, const CapabilityFilter& target_filter, - InterfaceRequest<shell::mojom::Application>* application_request) { + InterfaceRequest<shell::mojom::ShellClient>* request) { return 0; } bool TestPackageManager::IsURLInCatalog(const std::string& url) const {
diff --git a/mojo/shell/test_package_manager.h b/mojo/shell/test_package_manager.h index 0acb7bc..fc05576 100644 --- a/mojo/shell/test_package_manager.h +++ b/mojo/shell/test_package_manager.h
@@ -30,7 +30,7 @@ const Identity& source, const GURL& target_url, const CapabilityFilter& target_filter, - InterfaceRequest<shell::mojom::Application>* application_request) + InterfaceRequest<shell::mojom::ShellClient>* request) override; bool IsURLInCatalog(const std::string& url) const override; std::string GetApplicationName(const std::string& url) const override;
diff --git a/native_client_sdk/src/libraries/nacl_io/fifo_char.h b/native_client_sdk/src/libraries/nacl_io/fifo_char.h index 27cec2f..8f026f2 100644 --- a/native_client_sdk/src/libraries/nacl_io/fifo_char.h +++ b/native_client_sdk/src/libraries/nacl_io/fifo_char.h
@@ -34,11 +34,11 @@ // Reads out the data making room in the FIFO. Returns actual amount // read. - size_t Read(void* buf, size_t len); + virtual size_t Read(void* buf, size_t len); // Writes into the FIFO no more than len bytes, returns actual amount // written. - size_t Write(const void* buf, size_t len); + virtual size_t Write(const void* buf, size_t len); private: char* buffer_;
diff --git a/native_client_sdk/src/libraries/nacl_io/fifo_interface.h b/native_client_sdk/src/libraries/nacl_io/fifo_interface.h index 38f53d1..d4964076 100644 --- a/native_client_sdk/src/libraries/nacl_io/fifo_interface.h +++ b/native_client_sdk/src/libraries/nacl_io/fifo_interface.h
@@ -25,6 +25,8 @@ virtual size_t ReadAvailable() = 0; virtual size_t WriteAvailable() = 0; + virtual size_t Read(void* buf, size_t len) = 0; + virtual size_t Write(const void* buf, size_t len) = 0; }; } // namespace nacl_io
diff --git a/native_client_sdk/src/libraries/nacl_io/kernel_proxy.cc b/native_client_sdk/src/libraries/nacl_io/kernel_proxy.cc index a141923..9ea09ff0 100644 --- a/native_client_sdk/src/libraries/nacl_io/kernel_proxy.cc +++ b/native_client_sdk/src/libraries/nacl_io/kernel_proxy.cc
@@ -1824,7 +1824,8 @@ return -1; } - if (SOCK_STREAM != type) { + // TODO(cernekee): mask this off with SOCK_TYPE_MASK first. + if (SOCK_STREAM != type && SOCK_DGRAM != type) { errno = EPROTOTYPE; return -1; } @@ -1850,7 +1851,7 @@ } #endif - UnixNode* socket = new UnixNode(stream_fs_.get()); + UnixNode* socket = new UnixNode(stream_fs_.get(), type); Error rtn = socket->Init(O_RDWR); if (rtn != 0) { errno = rtn;
diff --git a/native_client_sdk/src/libraries/nacl_io/socket/fifo_packet.cc b/native_client_sdk/src/libraries/nacl_io/socket/fifo_packet.cc index 3e5c330..cf4a651 100644 --- a/native_client_sdk/src/libraries/nacl_io/socket/fifo_packet.cc +++ b/native_client_sdk/src/libraries/nacl_io/socket/fifo_packet.cc
@@ -68,4 +68,28 @@ packets_.push_front(packet); } +size_t FIFOPacket::Read(void* buf, size_t len) { + Packet* packet = ReadPacket(); + if (!packet) + return 0; + + size_t bytes = packet->len(); + if (bytes > len) + bytes = len; + memcpy(buf, packet->buffer(), bytes); + + delete packet; + return bytes; +} + +size_t FIFOPacket::Write(const void* buf, size_t len) { + if (len > WriteAvailable()) + return 0; + + Packet* packet = new Packet(NULL); + packet->Copy(buf, len, 0); + WritePacket(packet); + return len; +} + } // namespace nacl_io
diff --git a/native_client_sdk/src/libraries/nacl_io/socket/fifo_packet.h b/native_client_sdk/src/libraries/nacl_io/socket/fifo_packet.h index e8ba0b3..30a25a9 100644 --- a/native_client_sdk/src/libraries/nacl_io/socket/fifo_packet.h +++ b/native_client_sdk/src/libraries/nacl_io/socket/fifo_packet.h
@@ -5,6 +5,7 @@ #ifndef LIBRARIES_NACL_IO_FIFO_PACKET_H_ #define LIBRARIES_NACL_IO_FIFO_PACKET_H_ +#include <stdint.h> #include <string.h> #include <list> @@ -45,6 +46,12 @@ // Take ownership of packet and place it in the FIFO. void WritePacket(Packet* packet); + // Read out the top packet into a byte buffer. + size_t Read(void* buf, size_t len); + + // Enqueue a new packet from a byte buffer. + size_t Write(const void* buf, size_t len); + private: std::list<Packet*> packets_; uint32_t max_bytes_;
diff --git a/native_client_sdk/src/libraries/nacl_io/socket/unix_event_emitter.cc b/native_client_sdk/src/libraries/nacl_io/socket/unix_event_emitter.cc index 1c3a523..b0a7bf3f 100644 --- a/native_client_sdk/src/libraries/nacl_io/socket/unix_event_emitter.cc +++ b/native_client_sdk/src/libraries/nacl_io/socket/unix_event_emitter.cc
@@ -5,8 +5,10 @@ #include "nacl_io/socket/unix_event_emitter.h" #include <stdlib.h> +#include <sys/socket.h> #include "nacl_io/fifo_char.h" +#include "nacl_io/socket/fifo_packet.h" #include "sdk_util/scoped_ref.h" namespace nacl_io { @@ -19,24 +21,33 @@ class UnixMasterEventEmitter : public UnixEventEmitter { public: - explicit UnixMasterEventEmitter(size_t size) - : in_fifo_(size), - out_fifo_(size), - child_emitter_created_(false), - child_emitter_(NULL) { + explicit UnixMasterEventEmitter(size_t size, int type) + : child_emitter_created_(false), child_emitter_(NULL) { + if (type == SOCK_STREAM) { + in_fifo_ = new FIFOChar(size); + out_fifo_ = new FIFOChar(size); + } else { + in_fifo_ = new FIFOPacket(size); + out_fifo_ = new FIFOPacket(size); + } UpdateStatus_Locked(); } + ~UnixMasterEventEmitter() { + delete in_fifo_; + delete out_fifo_; + } + virtual ScopedUnixEventEmitter GetPeerEmitter(); protected: - virtual FIFOChar* in_fifoc() { return &in_fifo_; } - virtual FIFOChar* out_fifoc() { return &out_fifo_; } + virtual FIFOInterface* in_fifo() { return in_fifo_; } + virtual FIFOInterface* out_fifo() { return out_fifo_; } virtual const sdk_util::SimpleLock& GetFifoLock() { return fifo_lock_; } private: - FIFOChar in_fifo_; - FIFOChar out_fifo_; + FIFOInterface* in_fifo_; + FIFOInterface* out_fifo_; sdk_util::SimpleLock fifo_lock_; bool child_emitter_created_; UnixChildEventEmitter* child_emitter_; @@ -55,8 +66,8 @@ protected: virtual void Destroy() { parent_emitter_->child_emitter_ = NULL; } - virtual FIFOChar* in_fifoc() { return parent_emitter_->out_fifoc(); } - virtual FIFOChar* out_fifoc() { return parent_emitter_->in_fifoc(); } + virtual FIFOInterface* in_fifo() { return parent_emitter_->out_fifo(); } + virtual FIFOInterface* out_fifo() { return parent_emitter_->in_fifo(); } virtual const sdk_util::SimpleLock& GetFifoLock() { return parent_emitter_->GetFifoLock(); } @@ -75,7 +86,7 @@ uint32_t UnixEventEmitter::ReadIn_Locked(char* data, uint32_t len) { AUTO_LOCK(GetFifoLock()); - uint32_t count = in_fifoc()->Read(data, len); + uint32_t count = in_fifo()->Read(data, len); ScopedUnixEventEmitter peer = GetPeerEmitter(); if (peer) { peer->UpdateStatus_Locked(); @@ -86,7 +97,7 @@ uint32_t UnixEventEmitter::WriteOut_Locked(const char* data, uint32_t len) { AUTO_LOCK(GetFifoLock()); - uint32_t count = out_fifoc()->Write(data, len); + uint32_t count = out_fifo()->Write(data, len); ScopedUnixEventEmitter peer = GetPeerEmitter(); if (peer) { peer->UpdateStatus_Locked(); @@ -95,8 +106,9 @@ return count; } -ScopedUnixEventEmitter UnixEventEmitter::MakeUnixEventEmitter(size_t size) { - return ScopedUnixEventEmitter(new UnixMasterEventEmitter(size)); +ScopedUnixEventEmitter UnixEventEmitter::MakeUnixEventEmitter(size_t size, + int type) { + return ScopedUnixEventEmitter(new UnixMasterEventEmitter(size, type)); } } // namespace nacl_io
diff --git a/native_client_sdk/src/libraries/nacl_io/socket/unix_event_emitter.h b/native_client_sdk/src/libraries/nacl_io/socket/unix_event_emitter.h index f8c952d..f1dba0d 100644 --- a/native_client_sdk/src/libraries/nacl_io/socket/unix_event_emitter.h +++ b/native_client_sdk/src/libraries/nacl_io/socket/unix_event_emitter.h
@@ -5,7 +5,7 @@ #ifndef LIBRARIES_NACL_IO_SOCKET_UNIX_EVENT_EMITTER_H_ #define LIBRARIES_NACL_IO_SOCKET_UNIX_EVENT_EMITTER_H_ -#include "nacl_io/fifo_char.h" +#include "nacl_io/fifo_interface.h" #include "nacl_io/stream/stream_event_emitter.h" #include "sdk_util/macros.h" @@ -29,17 +29,15 @@ virtual ScopedUnixEventEmitter GetPeerEmitter() = 0; - static ScopedUnixEventEmitter MakeUnixEventEmitter(size_t size); + static ScopedUnixEventEmitter MakeUnixEventEmitter(size_t size, int type); protected: UnixEventEmitter() {} // Probably only need the master's lock. virtual const sdk_util::SimpleLock& GetFifoLock() = 0; - virtual FIFOInterface* in_fifo() { return in_fifoc(); } - virtual FIFOInterface* out_fifo() { return out_fifoc(); } - virtual FIFOChar* in_fifoc() = 0; - virtual FIFOChar* out_fifoc() = 0; + virtual FIFOInterface* in_fifo() = 0; + virtual FIFOInterface* out_fifo() = 0; private: DISALLOW_COPY_AND_ASSIGN(UnixEventEmitter);
diff --git a/native_client_sdk/src/libraries/nacl_io/socket/unix_node.cc b/native_client_sdk/src/libraries/nacl_io/socket/unix_node.cc index 8fa44fd..968cdd7 100644 --- a/native_client_sdk/src/libraries/nacl_io/socket/unix_node.cc +++ b/native_client_sdk/src/libraries/nacl_io/socket/unix_node.cc
@@ -14,9 +14,9 @@ namespace nacl_io { -UnixNode::UnixNode(Filesystem* filesystem) +UnixNode::UnixNode(Filesystem* filesystem, int type) : SocketNode(SOCK_STREAM, filesystem), - emitter_(UnixEventEmitter::MakeUnixEventEmitter(65536)) { + emitter_(UnixEventEmitter::MakeUnixEventEmitter(65536, type)) { emitter_->AttachStream(this); }
diff --git a/native_client_sdk/src/libraries/nacl_io/socket/unix_node.h b/native_client_sdk/src/libraries/nacl_io/socket/unix_node.h index c8b7f30d..881261a 100644 --- a/native_client_sdk/src/libraries/nacl_io/socket/unix_node.h +++ b/native_client_sdk/src/libraries/nacl_io/socket/unix_node.h
@@ -16,7 +16,7 @@ class UnixNode : public SocketNode { public: - explicit UnixNode(Filesystem* filesystem); + UnixNode(Filesystem* filesystem, int type); UnixNode(Filesystem* filesystem, const UnixNode& peer); virtual EventEmitter* GetEventEmitter();
diff --git a/native_client_sdk/src/tests/nacl_io_test/socket_test.cc b/native_client_sdk/src/tests/nacl_io_test/socket_test.cc index e2d86d5..e739f74 100644 --- a/native_client_sdk/src/tests/nacl_io_test/socket_test.cc +++ b/native_client_sdk/src/tests/nacl_io_test/socket_test.cc
@@ -256,7 +256,7 @@ EXPECT_EQ(errno, EOPNOTSUPP); EXPECT_LT(ki_socketpair(AF_INET6, SOCK_STREAM, 0, sv), 0); EXPECT_EQ(errno, EOPNOTSUPP); - EXPECT_LT(ki_socketpair(AF_UNIX, SOCK_DGRAM, 0, sv), 0); + EXPECT_LT(ki_socketpair(AF_UNIX, SOCK_RAW, 0, sv), 0); EXPECT_EQ(errno, EPROTOTYPE); EXPECT_LT(ki_socketpair(AF_MAX, SOCK_STREAM, 0, sv), 0); EXPECT_EQ(errno, EAFNOSUPPORT); @@ -296,9 +296,15 @@ EXPECT_EQ(0, errno); EXPECT_LE(0, sv_[0]); EXPECT_LE(0, sv_[1]); + + errno = 0; + EXPECT_EQ(0, ki_socketpair(AF_UNIX, SOCK_DGRAM, 0, sv_)); + EXPECT_EQ(0, errno); + EXPECT_LE(0, sv_[0]); + EXPECT_LE(0, sv_[1]); } -TEST_F(UnixSocketTest, SendRecv) { +TEST_F(UnixSocketTest, SendRecvStream) { char outbuf[256]; char inbuf[512]; @@ -318,7 +324,7 @@ EXPECT_EQ(0, memcmp(outbuf, inbuf, sizeof(outbuf))); - // A reader should block after to read at this point. + // A reader should block after trying to read at this point. EXPECT_EQ(-1, ki_recv(sv_[1], inbuf, sizeof(inbuf), MSG_DONTWAIT)); EXPECT_EQ(EAGAIN, errno); @@ -338,7 +344,7 @@ EXPECT_EQ(EAGAIN, errno); } -TEST_F(UnixSocketTest, RecvNonBlocking) { +TEST_F(UnixSocketTest, RecvNonBlockingStream) { char buf[128]; EXPECT_EQ(0, ki_socketpair(AF_UNIX, SOCK_STREAM, 0, sv_)); @@ -352,6 +358,70 @@ EXPECT_NE(POLLIN, pollfd.revents & POLLIN); } +TEST_F(UnixSocketTest, SendRecvDgram) { + char outbuf1[256]; + char outbuf2[128]; + char inbuf[512]; + + memset(outbuf1, 0xA4, sizeof(outbuf1)); + memset(outbuf2, 0xA5, sizeof(outbuf2)); + memset(inbuf, 0x3C, sizeof(inbuf)); + + EXPECT_EQ(0, ki_socketpair(AF_UNIX, SOCK_DGRAM, 0, sv_)); + + int len1 = ki_send(sv_[0], outbuf1, sizeof(outbuf1), /* flags */ 0); + EXPECT_EQ(sizeof(outbuf1), len1); + + // The buffers should be different. + EXPECT_NE(0, memcmp(outbuf1, inbuf, sizeof(outbuf1))); + + int len2 = ki_send(sv_[0], outbuf2, sizeof(outbuf2), /* flags */ 0); + EXPECT_EQ(sizeof(outbuf2), len2); + + // Make sure the datagram boundaries are respected. + len1 = ki_recv(sv_[1], inbuf, sizeof(inbuf), /* flags */ 0); + EXPECT_EQ(sizeof(outbuf1), len1); + EXPECT_EQ(0, memcmp(outbuf1, inbuf, sizeof(outbuf1))); + + len2 = ki_recv(sv_[1], inbuf, sizeof(inbuf), /* flags */ 0); + EXPECT_EQ(sizeof(outbuf2), len2); + EXPECT_EQ(0, memcmp(outbuf2, inbuf, sizeof(outbuf2))); + + // A reader should block after trying to read at this point. + EXPECT_EQ(-1, ki_recv(sv_[1], inbuf, sizeof(inbuf), MSG_DONTWAIT)); + EXPECT_EQ(EAGAIN, errno); + + // Send a datagram larger than the recv buffer, and check for overflow. + memset(inbuf, 0x3C, sizeof(inbuf)); + EXPECT_NE(0, memcmp(outbuf1, inbuf, sizeof(outbuf1))); + len1 = ki_send(sv_[1], outbuf1, sizeof(outbuf1), /* flags */ 0); + EXPECT_EQ(sizeof(outbuf1), len1); + + len2 = ki_recv(sv_[0], inbuf, 16, /* flags */ 0); + EXPECT_EQ(16, len2); + EXPECT_EQ(0, memcmp(outbuf1, inbuf, 16)); + EXPECT_EQ(0x3C, inbuf[16]); + + // Verify that the remainder of the packet was discarded, and there + // is nothing left to receive. + EXPECT_EQ(-1, ki_recv(sv_[0], inbuf, sizeof(inbuf), MSG_DONTWAIT)); + EXPECT_EQ(EAGAIN, errno); +} + +TEST_F(UnixSocketTest, RecvNonBlockingDgram) { + char buf[128]; + + EXPECT_EQ(0, ki_socketpair(AF_UNIX, SOCK_DGRAM, 0, sv_)); + + EXPECT_EQ(-1, ki_recv(sv_[0], buf, sizeof(buf), MSG_DONTWAIT)); + EXPECT_EQ(EAGAIN, errno); + + struct pollfd pollfd = {sv_[0], POLLIN | POLLOUT, 0}; + EXPECT_EQ(1, ki_poll(&pollfd, 1, 0)); + EXPECT_EQ(POLLOUT, pollfd.revents & POLLOUT); + EXPECT_NE(POLLIN, pollfd.revents & POLLIN); +} + TEST(SocketUtilityFunctions, Htonl) { uint32_t host_long = 0x44332211; uint32_t network_long = htonl(host_long);
diff --git a/net/cert/cert_verify_proc_unittest.cc b/net/cert/cert_verify_proc_unittest.cc index 248f41c..d939d85c 100644 --- a/net/cert/cert_verify_proc_unittest.cc +++ b/net/cert/cert_verify_proc_unittest.cc
@@ -107,6 +107,22 @@ return true; } +// Template helper to load a series of certificate files into a CertificateList. +// Like CertTestUtil's CreateCertificateListFromFile, except it can load a +// series of individual certificates (to make the tests clearer). +template <size_t N> +void LoadCertificateFiles(const char* const (&cert_files)[N], + CertificateList* certs) { + certs->clear(); + for (size_t i = 0; i < N; ++i) { + SCOPED_TRACE(cert_files[i]); + scoped_refptr<X509Certificate> cert = CreateCertificateChainFromFile( + GetTestCertsDirectory(), cert_files[i], X509Certificate::FORMAT_AUTO); + ASSERT_TRUE(cert); + certs->push_back(cert); + } +} + } // namespace class CertVerifyProcTest : public testing::Test { @@ -121,6 +137,19 @@ return verify_proc_->SupportsAdditionalTrustAnchors(); } + // Returns true if the underlying CertVerifyProc supports integrating CRLSets + // into path building logic, such as allowing the selection of alternatively + // valid paths when one or more are revoked. As the goal is to integrate this + // into all platforms, this is a temporary, test-only flag to centralize the + // conditionals in tests. + bool SupportsCRLSetsInPathBuilding() { +#if defined(OS_WIN) + return true; +#else + return false; +#endif + } + int Verify(X509Certificate* cert, const std::string& hostname, int flags, @@ -1372,6 +1401,213 @@ &verify_result); EXPECT_EQ(ERR_CERT_REVOKED, error); } + +// Tests that revocation by CRLSet functions properly with the certificate +// immediately before the trust anchor is revoked by that trust anchor, but +// another version to a different trust anchor exists. +// +// The two possible paths are: +// 1. A(B) -> B(C) -> C(D) -> D(D) +// 2. A(B) -> B(C) -> C(E) -> E(E) +// +// In this test, C(E) is revoked by CRLSet. It is configured to be the more +// preferable version compared to C(D), once revoked, it should be ignored. +TEST_F(CertVerifyProcTest, CRLSetRevokedIntermediateSameName) { + if (!SupportsCRLSetsInPathBuilding()) { + LOG(INFO) << "Skipping this test on this platform."; + return; + } + + const char* const kCertificatesToLoad[] = { + "multi-root-A-by-B.pem", "multi-root-B-by-C.pem", "multi-root-C-by-D.pem", + "multi-root-D-by-D.pem", "multi-root-C-by-E.pem", "multi-root-E-by-E.pem", + }; + CertificateList certs; + ASSERT_NO_FATAL_FAILURE(LoadCertificateFiles(kCertificatesToLoad, &certs)); + + // Add D and E as trust anchors + ScopedTestRoot test_root_D(certs[3].get()); // D-by-D + ScopedTestRoot test_root_F(certs[5].get()); // E-by-E + + // Create a chain that sends A(B), B(C), C(E), C(D). The reason that + // both C(E) and C(D) are sent are to ensure both certificates are available + // for path building. The test + // CertVerifyProcTest.VerifyReturnChainFiltersUnrelatedCerts ensures this is + // safe to do. + X509Certificate::OSCertHandles intermediates; + intermediates.push_back(certs[1]->os_cert_handle()); // B-by-C + intermediates.push_back(certs[4]->os_cert_handle()); // C-by-E + intermediates.push_back(certs[2]->os_cert_handle()); // C-by-D + scoped_refptr<X509Certificate> cert = X509Certificate::CreateFromHandle( + certs[0]->os_cert_handle(), intermediates); + ASSERT_TRUE(cert); + + // Sanity check: Ensure that, without any revocation status, the to-be-revoked + // path is preferred. + int flags = 0; + CertVerifyResult verify_result; + int error = Verify(cert.get(), "127.0.0.1", flags, nullptr, empty_cert_list_, + &verify_result); + ASSERT_EQ(OK, error); + ASSERT_EQ(0U, verify_result.cert_status); + ASSERT_TRUE(verify_result.verified_cert.get()); + + // The expected path is A(B) -> B(C) -> C(E) -> E(E). + const X509Certificate::OSCertHandles& verified_intermediates = + verify_result.verified_cert->GetIntermediateCertificates(); + ASSERT_EQ(3U, verified_intermediates.size()); + scoped_refptr<X509Certificate> verified_root = + X509Certificate::CreateFromHandle(verified_intermediates[2], + X509Certificate::OSCertHandles()); + ASSERT_TRUE(verified_root.get()); + EXPECT_EQ("E Root CA", verified_root->subject().common_name); + + // Load a CRLSet that blocks C-by-E. + scoped_refptr<CRLSet> crl_set; + std::string crl_set_bytes; + EXPECT_TRUE(base::ReadFileToString( + GetTestCertsDirectory().AppendASCII("multi-root-crlset-C-by-E.raw"), + &crl_set_bytes)); + ASSERT_TRUE(CRLSetStorage::Parse(crl_set_bytes, &crl_set)); + + // Verify with the CRLSet. Because C-by-E is revoked, the expected path is + // A(B) -> B(C) -> C(D) -> D(D). + error = Verify(cert.get(), "127.0.0.1", flags, crl_set.get(), + empty_cert_list_, &verify_result); + ASSERT_EQ(OK, error); + ASSERT_EQ(0U, verify_result.cert_status); + ASSERT_TRUE(verify_result.verified_cert.get()); + + const X509Certificate::OSCertHandles& new_verified_intermediates = + verify_result.verified_cert->GetIntermediateCertificates(); + ASSERT_EQ(3U, new_verified_intermediates.size()); + verified_root = X509Certificate::CreateFromHandle( + new_verified_intermediates[2], X509Certificate::OSCertHandles()); + ASSERT_TRUE(verified_root.get()); + EXPECT_EQ("D Root CA", verified_root->subject().common_name); + + // Reverify without the CRLSet, to ensure that CRLSets do not persist between + // separate calls. As in the first verification, the expected path is + // A(B) -> B(C) -> C(E) -> E(E). + error = Verify(cert.get(), "127.0.0.1", flags, nullptr, empty_cert_list_, + &verify_result); + ASSERT_EQ(OK, error); + ASSERT_EQ(0U, verify_result.cert_status); + ASSERT_TRUE(verify_result.verified_cert.get()); + + const X509Certificate::OSCertHandles& final_verified_intermediates = + verify_result.verified_cert->GetIntermediateCertificates(); + ASSERT_EQ(3U, final_verified_intermediates.size()); + verified_root = X509Certificate::CreateFromHandle( + final_verified_intermediates[2], X509Certificate::OSCertHandles()); + ASSERT_TRUE(verified_root.get()); + EXPECT_EQ("E Root CA", verified_root->subject().common_name); +} + +// Tests that revocation by CRLSet functions properly when an intermediate is +// revoked by SPKI. In this case, path building should ignore all certificates +// with that SPKI, and search for alternatively keyed versions. +// +// The two possible paths are: +// 1. A(B) -> B(C) -> C(D) -> D(D) +// 2. A(B) -> B(F) -> F(E) -> E(E) +// +// The path building algorithm needs to explore B(C) once it discovers that +// F(E) is revoked, and that there are no valid paths with B(F). +TEST_F(CertVerifyProcTest, CRLSetRevokedIntermediateCrossIntermediates) { + if (!SupportsCRLSetsInPathBuilding()) { + LOG(INFO) << "Skipping this test on this platform."; + return; + } + + const char* const kCertificatesToLoad[] = { + "multi-root-A-by-B.pem", "multi-root-B-by-C.pem", "multi-root-C-by-D.pem", + "multi-root-D-by-D.pem", "multi-root-B-by-F.pem", "multi-root-F-by-E.pem", + "multi-root-E-by-E.pem", + }; + CertificateList certs; + ASSERT_NO_FATAL_FAILURE(LoadCertificateFiles(kCertificatesToLoad, &certs)); + + // Add D and E as trust anchors + ScopedTestRoot test_root_D(certs[3].get()); // D-by-D + ScopedTestRoot test_root_F(certs[6].get()); // E-by-E + + // Create a chain that sends A(B), B(F), F(E), B(C), C(D). The reason that + // both B(C) and C(D) are sent are to ensure both certificates are available + // for path building. The test + // CertVerifyProcTest.VerifyReturnChainFiltersUnrelatedCerts ensures this is + // safe to do. + X509Certificate::OSCertHandles intermediates; + intermediates.push_back(certs[4]->os_cert_handle()); // B-by-F + intermediates.push_back(certs[5]->os_cert_handle()); // F-by-E + intermediates.push_back(certs[1]->os_cert_handle()); // B-by-C + intermediates.push_back(certs[2]->os_cert_handle()); // C-by-D + scoped_refptr<X509Certificate> cert = X509Certificate::CreateFromHandle( + certs[0]->os_cert_handle(), intermediates); + ASSERT_TRUE(cert); + + // Sanity check: Ensure that, without any revocation status, the to-be-revoked + // path is preferred. + int flags = 0; + CertVerifyResult verify_result; + int error = Verify(cert.get(), "127.0.0.1", flags, nullptr, empty_cert_list_, + &verify_result); + ASSERT_EQ(OK, error); + ASSERT_EQ(0U, verify_result.cert_status); + ASSERT_TRUE(verify_result.verified_cert.get()); + + // The expected path is A(B) -> B(F) -> F(E) -> E(E). + const X509Certificate::OSCertHandles& verified_intermediates = + verify_result.verified_cert->GetIntermediateCertificates(); + ASSERT_EQ(3U, verified_intermediates.size()); + scoped_refptr<X509Certificate> verified_root = + X509Certificate::CreateFromHandle(verified_intermediates[2], + X509Certificate::OSCertHandles()); + ASSERT_TRUE(verified_root.get()); + EXPECT_EQ("E Root CA", verified_root->subject().common_name); + + // Load a CRLSet that blocks F. + scoped_refptr<CRLSet> crl_set; + std::string crl_set_bytes; + EXPECT_TRUE(base::ReadFileToString( + GetTestCertsDirectory().AppendASCII("multi-root-crlset-F.raw"), + &crl_set_bytes)); + ASSERT_TRUE(CRLSetStorage::Parse(crl_set_bytes, &crl_set)); + + // Verify with the CRLSet. Because F is revoked, the expected path is + // A(B) -> B(C) -> C(D) -> D(D). + error = Verify(cert.get(), "127.0.0.1", flags, crl_set.get(), + empty_cert_list_, &verify_result); + ASSERT_EQ(OK, error); + ASSERT_EQ(0U, verify_result.cert_status); + ASSERT_TRUE(verify_result.verified_cert.get()); + + const X509Certificate::OSCertHandles& new_verified_intermediates = + verify_result.verified_cert->GetIntermediateCertificates(); + ASSERT_EQ(3U, new_verified_intermediates.size()); + verified_root = X509Certificate::CreateFromHandle( + new_verified_intermediates[2], X509Certificate::OSCertHandles()); + ASSERT_TRUE(verified_root.get()); + EXPECT_EQ("D Root CA", verified_root->subject().common_name); + + // Reverify without the CRLSet, to ensure that CRLSets do not persist between + // separate calls. As in the first verification, the expected path is + // A(B) -> B(F) -> F(E) -> E(E). + error = Verify(cert.get(), "127.0.0.1", flags, nullptr, empty_cert_list_, + &verify_result); + ASSERT_EQ(OK, error); + ASSERT_EQ(0U, verify_result.cert_status); + ASSERT_TRUE(verify_result.verified_cert.get()); + + const X509Certificate::OSCertHandles& final_verified_intermediates = + verify_result.verified_cert->GetIntermediateCertificates(); + ASSERT_EQ(3U, final_verified_intermediates.size()); + verified_root = X509Certificate::CreateFromHandle( + final_verified_intermediates[2], X509Certificate::OSCertHandles()); + ASSERT_TRUE(verified_root.get()); + EXPECT_EQ("E Root CA", verified_root->subject().common_name); +} + #endif enum ExpectedAlgorithms {
diff --git a/net/cert/cert_verify_proc_win.cc b/net/cert/cert_verify_proc_win.cc index cb1db7d9..18c6187 100644 --- a/net/cert/cert_verify_proc_win.cc +++ b/net/cert/cert_verify_proc_win.cc
@@ -11,6 +11,7 @@ #include "base/sha1.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" +#include "base/threading/thread_local.h" #include "crypto/capi_util.h" #include "crypto/scoped_capi_types.h" #include "crypto/sha2.h" @@ -385,13 +386,129 @@ output->reset(policies_info); } +// Computes the SHA-256 hash of the SPKI of |cert| and stores it in |hash|, +// returning true. If an error occurs, returns false and leaves |hash| +// unmodified. +bool HashSPKI(PCCERT_CONTEXT cert, std::string* hash) { + base::StringPiece der_bytes( + reinterpret_cast<const char*>(cert->pbCertEncoded), cert->cbCertEncoded); + + base::StringPiece spki; + if (!asn1::ExtractSPKIFromDERCert(der_bytes, &spki)) + return false; + + *hash = crypto::SHA256HashString(spki); + return true; +} + enum CRLSetResult { - kCRLSetOk, + // Indicates an error happened while attempting to determine CRLSet status. + // For example, if the certificate's SPKI could not be extracted. + kCRLSetError, + + // Indicates there is no fresh information about the certificate, or if the + // CRLSet has expired. + // In the case of certificate chains, this is only returned if the leaf + // certificate is not covered by the CRLSet; this is because some + // intermediates are fully covered, but after filtering, the issuer's CRL + // is empty and thus omitted from the CRLSet. Since online checking is + // performed for EV certificates when this status is returned, this would + // result in needless online lookups for certificates known not-revoked. kCRLSetUnknown, + + // Indicates that the certificate (or a certificate in the chain) has been + // revoked. kCRLSetRevoked, + + // The certificate (or certificate chain) has no revocations. + kCRLSetOk, }; -// CheckRevocationWithCRLSet attempts to check each element of |chain| +// Determines if |subject_cert| is revoked within |crl_set|, +// storing the SubjectPublicKeyInfo hash of |subject_cert| in +// |*previous_hash|. +// +// CRLSets store revocations by both SPKI and by the tuple of Issuer SPKI +// Hash & Serial. While |subject_cert| contains enough information to check +// for SPKI revocations, to determine the issuer's SPKI, either |issuer_cert| +// must be supplied, or the hash of the issuer's SPKI provided in +// |*previous_hash|. If |issuer_cert| is omitted, and |*previous_hash| is empty, +// only SPKI checks are performed. +// +// To avoid recomputing SPKI hashes, the hash of |subject_cert| is stored in +// |*previous_hash|. This allows chaining revocation checking, by starting +// at the root and iterating to the leaf, supplying |previous_hash| each time. +// +// In the event of a parsing error, |*previous_hash| is cleared, to prevent the +// wrong Issuer&Serial tuple from being used. +CRLSetResult CheckRevocationWithCRLSet(CRLSet* crl_set, + PCCERT_CONTEXT subject_cert, + PCCERT_CONTEXT issuer_cert, + std::string* previous_hash) { + DCHECK(crl_set); + DCHECK(subject_cert); + + // Check to see if |subject_cert|'s SPKI is revoked. The actual revocation + // is handled by the SHA-256 hash of the SPKI, so compute that. + std::string subject_hash; + if (!HashSPKI(subject_cert, &subject_hash)) { + NOTREACHED(); // Indicates Windows accepted something irrecoverably bad. + previous_hash->clear(); + return kCRLSetError; + } + + CRLSet::Result result = crl_set->CheckSPKI(subject_hash); + if (result == CRLSet::REVOKED) + return kCRLSetRevoked; + + // If no issuer cert is provided, nor a hash of the issuer's SPKI, no + // further checks can be done. + if (!issuer_cert && previous_hash->empty()) { + previous_hash->swap(subject_hash); + return kCRLSetUnknown; + } + + // Compute the subject's serial. + const CRYPT_INTEGER_BLOB* serial_blob = + &subject_cert->pCertInfo->SerialNumber; + scoped_ptr<uint8_t[]> serial_bytes(new uint8_t[serial_blob->cbData]); + // The bytes of the serial number are stored little-endian. + // Note: While MSDN implies that bytes are stripped from this serial, + // they are not - only CertCompareIntegerBlob actually removes bytes. + for (DWORD j = 0; j < serial_blob->cbData; j++) + serial_bytes[j] = serial_blob->pbData[serial_blob->cbData - j - 1]; + base::StringPiece serial(reinterpret_cast<const char*>(serial_bytes.get()), + serial_blob->cbData); + + // Compute the issuer's hash. If it was provided (via previous_hash), + // use that; otherwise, compute it based on |issuer_cert|. + std::string issuer_hash_local; + std::string* issuer_hash = previous_hash; + if (issuer_hash->empty()) { + if (!HashSPKI(issuer_cert, &issuer_hash_local)) { + NOTREACHED(); // Indicates Windows accepted something irrecoverably bad. + previous_hash->clear(); + return kCRLSetError; + } + issuer_hash = &issuer_hash_local; + } + + // Look up by serial & issuer SPKI. + result = crl_set->CheckSerial(serial, *issuer_hash); + if (result == CRLSet::REVOKED) + return kCRLSetRevoked; + + previous_hash->swap(subject_hash); + if (result == CRLSet::GOOD) + return kCRLSetOk; + if (result == CRLSet::UNKNOWN) + return kCRLSetUnknown; + + NOTREACHED(); + return kCRLSetError; +} + +// CheckChainRevocationWithCRLSet attempts to check each element of |chain| // against |crl_set|. It returns: // kCRLSetRevoked: if any element of the chain is known to have been revoked. // kCRLSetUnknown: if there is no fresh information about the leaf @@ -403,79 +520,29 @@ // that some EV sites would otherwise take the hit of an OCSP lookup for // no reason. // kCRLSetOk: otherwise. -CRLSetResult CheckRevocationWithCRLSet(PCCERT_CHAIN_CONTEXT chain, - CRLSet* crl_set) { - if (chain->cChain == 0) +CRLSetResult CheckChainRevocationWithCRLSet(PCCERT_CHAIN_CONTEXT chain, + CRLSet* crl_set) { + if (chain->cChain == 0 || chain->rgpChain[0]->cElement == 0) return kCRLSetOk; - const PCERT_SIMPLE_CHAIN first_chain = chain->rgpChain[0]; - const PCERT_CHAIN_ELEMENT* element = first_chain->rgpElement; + PCERT_CHAIN_ELEMENT* elements = chain->rgpChain[0]->rgpElement; + DWORD num_elements = chain->rgpChain[0]->cElement; - const int num_elements = first_chain->cElement; - if (num_elements == 0) - return kCRLSetOk; - - // error is set to true if any errors are found. It causes such chains to be - // considered as not covered. - bool error = false; - // last_covered is set to the coverage state of the previous certificate. The - // certificates are iterated over backwards thus, after the iteration, - // |last_covered| contains the coverage state of the leaf certificate. - bool last_covered = false; - - // We iterate from the root certificate down to the leaf, keeping track of - // the issuer's SPKI at each step. + bool had_error = false; + CRLSetResult result = kCRLSetError; std::string issuer_spki_hash; - for (int i = num_elements - 1; i >= 0; i--) { - PCCERT_CONTEXT cert = element[i]->pCertContext; - - base::StringPiece der_bytes( - reinterpret_cast<const char*>(cert->pbCertEncoded), - cert->cbCertEncoded); - - base::StringPiece spki; - if (!asn1::ExtractSPKIFromDERCert(der_bytes, &spki)) { - NOTREACHED(); - error = true; - continue; - } - - const std::string spki_hash = crypto::SHA256HashString(spki); - - const CRYPT_INTEGER_BLOB* serial_blob = &cert->pCertInfo->SerialNumber; - scoped_ptr<uint8_t[]> serial_bytes(new uint8_t[serial_blob->cbData]); - // The bytes of the serial number are stored little-endian. - for (unsigned j = 0; j < serial_blob->cbData; j++) - serial_bytes[j] = serial_blob->pbData[serial_blob->cbData - j - 1]; - base::StringPiece serial(reinterpret_cast<const char*>(serial_bytes.get()), - serial_blob->cbData); - - CRLSet::Result result = crl_set->CheckSPKI(spki_hash); - - if (result != CRLSet::REVOKED && !issuer_spki_hash.empty()) - result = crl_set->CheckSerial(serial, issuer_spki_hash); - - issuer_spki_hash = spki_hash; - - switch (result) { - case CRLSet::REVOKED: - return kCRLSetRevoked; - case CRLSet::UNKNOWN: - last_covered = false; - continue; - case CRLSet::GOOD: - last_covered = true; - continue; - default: - NOTREACHED(); - error = true; - continue; - } + for (DWORD i = 0; i < num_elements; ++i) { + PCCERT_CONTEXT subject = elements[num_elements - i - 1]->pCertContext; + result = + CheckRevocationWithCRLSet(crl_set, subject, nullptr, &issuer_spki_hash); + if (result == kCRLSetRevoked) + return result; + if (result == kCRLSetError) + had_error = true; } - - if (error || !last_covered || crl_set->IsExpired()) + if (had_error || crl_set->IsExpired()) return kCRLSetUnknown; - return kCRLSetOk; + return result; } void AppendPublicKeyHashes(PCCERT_CHAIN_CONTEXT chain, @@ -551,6 +618,243 @@ return metadata->HasEVPolicyOID(fingerprint, policy_oid); } +// Custom revocation provider function that compares incoming certificates with +// those in CRLSets. This is called BEFORE the default CRL & OCSP handling +// is invoked (which is handled by the revocation provider function +// "CertDllVerifyRevocation" in cryptnet.dll) +BOOL WINAPI +CertDllVerifyRevocationWithCRLSet(DWORD encoding_type, + DWORD revocation_type, + DWORD num_contexts, + void* rgpvContext[], + DWORD flags, + PCERT_REVOCATION_PARA revocation_params, + PCERT_REVOCATION_STATUS revocation_status); + +// Helper class that installs the CRLSet-based Revocation Provider as the +// default revocation provider. Because it is installed as a function address +// (meaning only scoped to the process, and not stored in the registry), it +// will be used before any registry-based providers, including Microsoft's +// default provider. +class RevocationInjector { + public: + CRLSet* GetCRLSet() { return thread_local_crlset.Get(); } + + void SetCRLSet(CRLSet* crl_set) { thread_local_crlset.Set(crl_set); } + + private: + friend struct base::DefaultLazyInstanceTraits<RevocationInjector>; + + RevocationInjector() { + const CRYPT_OID_FUNC_ENTRY kInterceptFunction[] = { + {CRYPT_DEFAULT_OID, &CertDllVerifyRevocationWithCRLSet}, + }; + BOOL ok = CryptInstallOIDFunctionAddress( + NULL, X509_ASN_ENCODING, CRYPT_OID_VERIFY_REVOCATION_FUNC, + arraysize(kInterceptFunction), kInterceptFunction, + CRYPT_INSTALL_OID_FUNC_BEFORE_FLAG); + DCHECK(ok); + } + + ~RevocationInjector() {} + + // As the revocation parameters passed to CertVerifyProc::VerifyInternal + // cannot be officially smuggled to the Revocation Provider + base::ThreadLocalPointer<CRLSet> thread_local_crlset; +}; + +// Leaky, as CertVerifyProc workers are themselves leaky. +base::LazyInstance<RevocationInjector>::Leaky g_revocation_injector = + LAZY_INSTANCE_INITIALIZER; + +BOOL WINAPI +CertDllVerifyRevocationWithCRLSet(DWORD encoding_type, + DWORD revocation_type, + DWORD num_contexts, + void* rgpvContext[], + DWORD flags, + PCERT_REVOCATION_PARA revocation_params, + PCERT_REVOCATION_STATUS revocation_status) { + PCERT_CONTEXT* cert_contexts = reinterpret_cast<PCERT_CONTEXT*>(rgpvContext); + // The dummy CRLSet provider never returns that something is affirmatively + // *un*revoked, as this would disable other revocation providers from being + // checked for this certificate (much like an OCSP "Good" status would). + // Instead, it merely indicates that insufficient information existed to + // determine if the certificate was revoked (in the good case), or that a cert + // is affirmatively revoked in the event it appears within the CRLSet. + // Because of this, set up some basic bookkeeping for the results. + CHECK(revocation_status); + revocation_status->dwIndex = 0; + revocation_status->dwError = static_cast<DWORD>(CRYPT_E_NO_REVOCATION_CHECK); + revocation_status->dwReason = 0; + + if (num_contexts == 0 || !cert_contexts[0]) { + SetLastError(static_cast<DWORD>(E_INVALIDARG)); + return FALSE; + } + + if ((GET_CERT_ENCODING_TYPE(encoding_type) != X509_ASN_ENCODING) || + revocation_type != CERT_CONTEXT_REVOCATION_TYPE) { + SetLastError(static_cast<DWORD>(CRYPT_E_NO_REVOCATION_CHECK)); + return FALSE; + } + + // No revocation checking possible if there is no associated + // CRLSet. + CRLSet* crl_set = g_revocation_injector.Get().GetCRLSet(); + if (!crl_set) + return FALSE; + + // |revocation_params| is an optional structure; to make life simple and avoid + // the need to constantly check whether or not it was supplied, create a local + // copy. If the caller didn't supply anything, it will be empty; otherwise, + // it will be (non-owning) copies of the caller's original params. + CERT_REVOCATION_PARA local_params; + memset(&local_params, 0, sizeof(local_params)); + if (revocation_params) { + DWORD bytes_to_copy = std::min(revocation_params->cbSize, + static_cast<DWORD>(sizeof(local_params))); + memcpy(&local_params, revocation_params, bytes_to_copy); + } + local_params.cbSize = sizeof(local_params); + + PCERT_CONTEXT subject_cert = cert_contexts[0]; + + if ((flags & CERT_VERIFY_REV_CHAIN_FLAG) && num_contexts > 1) { + // Verifying a chain; first verify from the last certificate in the + // chain to the first, and then leave the last certificate (which + // is presumably self-issued, although it may simply be a trust + // anchor) as the |subject_cert| in order to scan for more + // revocations. + std::string issuer_hash; + PCCERT_CONTEXT issuer_cert = nullptr; + for (DWORD i = num_contexts; i > 0; --i) { + subject_cert = cert_contexts[i - 1]; + if (!subject_cert) { + SetLastError(static_cast<DWORD>(E_INVALIDARG)); + return FALSE; + } + CRLSetResult result = CheckRevocationWithCRLSet( + crl_set, subject_cert, issuer_cert, &issuer_hash); + if (result == kCRLSetRevoked) { + revocation_status->dwIndex = i - 1; + revocation_status->dwError = static_cast<DWORD>(CRYPT_E_REVOKED); + revocation_status->dwReason = CRL_REASON_UNSPECIFIED; + SetLastError(revocation_status->dwError); + return FALSE; + } + issuer_cert = subject_cert; + } + // Verified all certificates from the trust anchor to the leaf, and none + // were explicitly revoked. Now do a second pass to attempt to determine + // the issuer for cert_contexts[num_contexts - 1], so that the + // Issuer SPKI+Serial can be checked for that certificate. + // + // This code intentionally ignores the flag + subject_cert = cert_contexts[num_contexts - 1]; + // Reset local_params.pIssuerCert, since it would contain the issuer + // for cert_contexts[0]. + local_params.pIssuerCert = nullptr; + // Fixup the revocation index to point to this cert (in the event it is + // revoked). If it isn't revoked, this will be done undone later. + revocation_status->dwIndex = num_contexts - 1; + } + + // Determine the issuer cert for the incoming cert + ScopedPCCERT_CONTEXT issuer_cert; + if (local_params.pIssuerCert && + CryptVerifyCertificateSignatureEx( + NULL, subject_cert->dwCertEncodingType, + CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT, subject_cert, + CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT, + const_cast<PCERT_CONTEXT>(local_params.pIssuerCert), 0, nullptr)) { + // Caller has already supplied the issuer cert via the revocation params; + // just use that. + issuer_cert.reset( + CertDuplicateCertificateContext(local_params.pIssuerCert)); + } else if (CertCompareCertificateName(subject_cert->dwCertEncodingType, + &subject_cert->pCertInfo->Subject, + &subject_cert->pCertInfo->Issuer) && + CryptVerifyCertificateSignatureEx( + NULL, subject_cert->dwCertEncodingType, + CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT, subject_cert, + CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT, subject_cert, 0, + nullptr)) { + // Certificate is self-signed; use it as its own issuer. + issuer_cert.reset(CertDuplicateCertificateContext(subject_cert)); + } else { + // Scan the caller-supplied stores first, to try and find the issuer cert. + for (DWORD i = 0; i < local_params.cCertStore && !issuer_cert; ++i) { + PCCERT_CONTEXT previous_cert = nullptr; + for (;;) { + DWORD store_search_flags = CERT_STORE_SIGNATURE_FLAG; + previous_cert = CertGetIssuerCertificateFromStore( + local_params.rgCertStore[i], subject_cert, previous_cert, + &store_search_flags); + if (!previous_cert) + break; + // If a cert is found and meets the criteria, the flag will be reset to + // zero. Thus NOT having the bit set is equivalent to having found a + // matching certificate. + if (!(store_search_flags & CERT_STORE_SIGNATURE_FLAG)) { + // No need to dupe; reference is held. + issuer_cert.reset(previous_cert); + break; + } + } + if (issuer_cert) + break; + if (GetLastError() == static_cast<DWORD>(CRYPT_E_SELF_SIGNED)) { + issuer_cert.reset(CertDuplicateCertificateContext(subject_cert)); + break; + } + } + + // At this point, the Microsoft provider opens up the "CA", "Root", and + // "SPC" stores to search for the issuer certificate, if not found in the + // caller-supplied stores. It is unclear whether that is necessary here. + } + + if (!issuer_cert) { + // Rather than return CRYPT_E_NO_REVOCATION_CHECK (indicating everything + // is fine to try the next provider), return CRYPT_E_REVOCATION_OFFLINE. + // This propogates up to the caller as an error while checking revocation, + // which is the desired intent if there are certificates that cannot + // be checked. + revocation_status->dwIndex = 0; + revocation_status->dwError = static_cast<DWORD>(CRYPT_E_REVOCATION_OFFLINE); + SetLastError(revocation_status->dwError); + return FALSE; + } + + std::string unused; + CRLSetResult result = CheckRevocationWithCRLSet(crl_set, subject_cert, + issuer_cert.get(), &unused); + if (result == kCRLSetRevoked) { + revocation_status->dwError = static_cast<DWORD>(CRYPT_E_REVOKED); + revocation_status->dwReason = CRL_REASON_UNSPECIFIED; + SetLastError(revocation_status->dwError); + return FALSE; + } + + // The result is ALWAYS FALSE in order to allow the next revocation provider + // a chance to examine. The only difference is whether or not an error is + // indicated via dwError (and SetLastError()). + // Reset the error index so that Windows does not believe this code has + // examined the entire chain and found no issues until the last cert (thus + // skipping other revocation providers). + revocation_status->dwIndex = 0; + return FALSE; +} + +class ScopedThreadLocalCRLSet { + public: + explicit ScopedThreadLocalCRLSet(CRLSet* crl_set) { + g_revocation_injector.Get().SetCRLSet(crl_set); + } + ~ScopedThreadLocalCRLSet() { g_revocation_injector.Get().SetCRLSet(nullptr); } +}; + } // namespace CertVerifyProcWin::CertVerifyProcWin() {} @@ -578,6 +882,10 @@ CRLSet* crl_set, const CertificateList& additional_trust_anchors, CertVerifyResult* verify_result) { + // Ensure the Revocation Provider has been installed and configured for this + // CRLSet. + ScopedThreadLocalCRLSet thread_local_crlset(crl_set); + PCCERT_CONTEXT cert_handle = cert->os_cert_handle(); if (!cert_handle) return ERR_UNEXPECTED; @@ -621,33 +929,41 @@ } } - // We can set CERT_CHAIN_RETURN_LOWER_QUALITY_CONTEXTS to get more chains. - DWORD chain_flags = CERT_CHAIN_CACHE_END_CERT | - CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT; + // Revocation checking is always enabled, in order to enable CRLSets to be + // evaluated as part of a revocation provider. However, when the caller did + // not explicitly request revocation checking (which is to say, online + // revocation checking), then only enable cached results. This disables OCSP + // and CRL fetching, but still allows the revocation provider to be called. + // Note: The root cert is also checked for revocation status, so that CRLSets + // will cover revoked SPKIs. + DWORD chain_flags = CERT_CHAIN_REVOCATION_CHECK_CHAIN; bool rev_checking_enabled = (flags & CertVerifier::VERIFY_REV_CHECKING_ENABLED); - if (rev_checking_enabled) { verify_result->cert_status |= CERT_STATUS_REV_CHECKING_ENABLED; } else { chain_flags |= CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY; } - // For non-test scenarios, use the default HCERTCHAINENGINE, NULL, which - // corresponds to HCCE_CURRENT_USER and is is initialized as needed by - // crypt32. However, when testing, it is necessary to create a new - // HCERTCHAINENGINE and use that instead. This is because each - // HCERTCHAINENGINE maintains a cache of information about certificates - // encountered, and each test run may modify the trust status of a - // certificate. + // By default, use the default HCERTCHAINENGINE (aka HCCE_CURRENT_USER). When + // running tests, use a dynamic HCERTCHAINENGINE. All of the status and cache + // of verified certificates and chains is tied to the HCERTCHAINENGINE. As + // each invocation may have changed the set of known roots, invalid the cache + // between runs. + // + // This is not the most efficient means of doing so; it's possible to mark the + // Root store used by TestRootCerts as changed, via CertControlStore with the + // CERT_STORE_CTRL_NOTIFY_CHANGE / CERT_STORE_CTRL_RESYNC, but that's more + // complexity for what is test-only code. ScopedHCERTCHAINENGINE chain_engine(NULL); if (TestRootCerts::HasInstance()) chain_engine.reset(TestRootCerts::GetInstance()->GetChainEngine()); ScopedPCCERT_CONTEXT cert_list(cert->CreateOSCertChainForCert()); + // Add stapled OCSP response data, which will be preferred over online checks + // and used when in cache-only mode. if (!ocsp_response.empty()) { - // Attach the OCSP response to the chain. CRYPT_DATA_BLOB ocsp_response_blob; ocsp_response_blob.cbData = ocsp_response.size(); ocsp_response_blob.pbData = @@ -657,10 +973,7 @@ CERT_SET_PROPERTY_IGNORE_PERSIST_ERROR_FLAG, &ocsp_response_blob); } - PCCERT_CHAIN_CONTEXT chain_context; - // IE passes a non-NULL pTime argument that specifies the current system - // time. IE passes CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT as the - // chain_flags argument. + PCCERT_CHAIN_CONTEXT chain_context = nullptr; if (!CertGetCertificateChain( chain_engine, cert_list.get(), @@ -674,9 +987,13 @@ return MapSecurityError(GetLastError()); } + // Perform a second check with CRLSets. Although the Revocation Provider + // should have prevented invalid paths from being built, the behaviour and + // timing of how a Revocation Provider is invoked is not well documented. This + // is just defense in depth. CRLSetResult crl_set_result = kCRLSetUnknown; if (crl_set) - crl_set_result = CheckRevocationWithCRLSet(chain_context, crl_set); + crl_set_result = CheckChainRevocationWithCRLSet(chain_context, crl_set); if (crl_set_result == kCRLSetRevoked) { verify_result->cert_status |= CERT_STATUS_REVOKED;
diff --git a/net/data/ssl/certificates/multi-root-A-by-B.pem b/net/data/ssl/certificates/multi-root-A-by-B.pem new file mode 100644 index 0000000..15adab26 --- /dev/null +++ b/net/data/ssl/certificates/multi-root-A-by-B.pem
@@ -0,0 +1,106 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEogIBAAKCAQEAymw91u/myNSjqFLh+F33Tneso2Rvi9Q+zRiMOfIQZPfzYRrO +j9gyGsH2iFEKEgfViFz1RVbQn4cXeN5N0P36YYHvoGs4Ajs9ik4fJXTwBcMbEPOk +Um1og6+DaRZU1PlCgpiekkyCMzQpsS9g0/IAOtabIMwnV77aKbR096r28FpFDoXa +AtTBloEmoKR3pVS0JHr1n+YIQqzYrAD3/IpDDcm2t6NN5lDZM/oYKLJ33aP1+jAy ++b8lLJeRH2kmXB7pKyQmXZCRsY5cByq8OaQHtiiE3XWHIFATq7Q8USPl1+qJ8qn9 +2oew0poUIK7P+RYbeLiilFAvhkwgJwjQRICjeQIDAQABAoIBAFZhkJYrdCHZ1Ckd +jX7Oop2iplJnps5V+aLOSfDkYqijwwF6ThHGYcNXaFxNsO122GHDwYsgfBDHtnWG +8FAyQengaCDeAF27aAygP9xdJZxf4Sn/vuzJ8aLYgEyVEgh8gix28pxd9+Xf6bbK +EBkCGaUCNdruJA/myvSnJI8YLx7rs7dMlwtQG1q9UD0cEJro9FkTBIsAUeXTyY+4 +qyhSyCvDeAO99ytHyrm9PjrR5cOHeTI/ADUMyQ5pXzHlNLLGCAUYeGvj6G7nqPGl +gMRRxwM/oT9/uEtkBQwAjGw8o2rFQsX6q6e1r65MHAm+RPX8YPsEJ1QxGERl9AmD +largQp0CgYEA97N6RqA4+ithhEEPgBNiglJVvzDfd4JlAwGX2czryZ8430e9yqj/ +J/QNTLkBmlsXC70yFu8iY6P0Me9wiJ0+DBSwm4j32o7qx9RSC5dqGSzYhs1LgBVd +MMJiFZigU1Isvz/IQc/rVYDIIDrEuHmHA+siaeSAKf0GaRkiOBnh80sCgYEA0TRp +/hAKjzdq7FcQ9K/a5W72Vx8GJ4mp5zoTMZnY/4vOSsC22SKU6FTcEj05xWCGMIgb +CkFln2OLLq4FuAHzGX3PT+CvfJceRpdZcP1yULDQUBZ4qMJbhIcpMab06nw3Iv4c +jNB2tEZe7yFiAdtSNh9k3KAZ3nkdNyC5X6zUxcsCgYAJ5ReLXrcn9zesCtVNrniO +8C8QtikXIxRZ7GRehPseUMf602jXgay/sdYeLH3N5rmi9Gnd1KuxA0mr/P6n1nA2 +F1V+wRf1mSPz251zbRcF7m6v49+SPEg+vGUiq7gr2+qBsVCUoHOsNLrJ3s8g92nX +VDtJs6ETDFKHPEPLre0CxQKBgA2hap6BEQ8Pv0myyooGwy5bsnUuskn1MDq+j+2V +ZowP4dsA/2jaVfVlQgl2L8NqbJPQ6mIarLJb2/+omvrINbydc9pyezyU5AYZalxw +Rvh27LurGyVztF7IJ6jyhdaZTUZcZCPQmUtZomnWNPqF/a9FEF9HlyfloD+tRCa1 +rg9NAoGAdTxat47SXzJFcF3JB8iMhnXUlXxLXSCKhGLN8dXUWQLnAOcy7QHuU627 +efEpl3V2P7klamc+VDJC2eGwW3wZdKkSnsngHOpWDvp5kN1pS1TeGSuaNxeIamwK +y8MhHC/HzHdpCxLrNt22AA/li19PdXAxkbDg4p70ru6XTILQx9k= +-----END RSA PRIVATE KEY----- +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4096 (0x1000) + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=B CA + Validity + Not Before: Feb 8 23:34:58 2016 GMT + Not After : Feb 5 23:34:58 2026 GMT + Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:ca:6c:3d:d6:ef:e6:c8:d4:a3:a8:52:e1:f8:5d: + f7:4e:77:ac:a3:64:6f:8b:d4:3e:cd:18:8c:39:f2: + 10:64:f7:f3:61:1a:ce:8f:d8:32:1a:c1:f6:88:51: + 0a:12:07:d5:88:5c:f5:45:56:d0:9f:87:17:78:de: + 4d:d0:fd:fa:61:81:ef:a0:6b:38:02:3b:3d:8a:4e: + 1f:25:74:f0:05:c3:1b:10:f3:a4:52:6d:68:83:af: + 83:69:16:54:d4:f9:42:82:98:9e:92:4c:82:33:34: + 29:b1:2f:60:d3:f2:00:3a:d6:9b:20:cc:27:57:be: + da:29:b4:74:f7:aa:f6:f0:5a:45:0e:85:da:02:d4: + c1:96:81:26:a0:a4:77:a5:54:b4:24:7a:f5:9f:e6: + 08:42:ac:d8:ac:00:f7:fc:8a:43:0d:c9:b6:b7:a3: + 4d:e6:50:d9:33:fa:18:28:b2:77:dd:a3:f5:fa:30: + 32:f9:bf:25:2c:97:91:1f:69:26:5c:1e:e9:2b:24: + 26:5d:90:91:b1:8e:5c:07:2a:bc:39:a4:07:b6:28: + 84:dd:75:87:20:50:13:ab:b4:3c:51:23:e5:d7:ea: + 89:f2:a9:fd:da:87:b0:d2:9a:14:20:ae:cf:f9:16: + 1b:78:b8:a2:94:50:2f:86:4c:20:27:08:d0:44:80: + a3:79 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:FALSE + X509v3 Subject Key Identifier: + 78:36:93:58:1F:73:7C:93:CA:AE:BB:9A:4E:A7:37:F1:83:03:4B:CF + X509v3 Authority Key Identifier: + keyid:0D:AF:BC:C3:31:09:C6:9D:F8:44:D2:51:E8:13:FF:24:78:9D:83:76 + + X509v3 Extended Key Usage: + TLS Web Server Authentication, TLS Web Client Authentication + Signature Algorithm: sha256WithRSAEncryption + 5e:87:35:21:15:89:4e:ac:9a:8e:db:d2:dc:83:6e:9e:64:b9: + 30:f8:91:f7:9f:c4:de:b4:92:bf:05:4a:1b:e3:12:0f:b0:0d: + d8:8f:fd:f9:e6:e8:2c:24:e0:88:cc:58:5d:3b:a3:23:95:86: + b2:1f:0f:fb:02:95:c4:16:04:24:05:bb:65:e4:48:80:6e:64: + 33:ed:a0:71:7d:21:f5:6f:70:72:07:54:b2:e7:79:98:8d:b5: + 2b:0d:68:8e:3a:be:e3:91:f8:6a:60:d1:51:20:08:83:43:18: + 5a:49:e2:66:21:aa:df:d2:b1:90:96:5a:99:6f:64:a0:96:7f: + e5:9b:3f:82:d5:42:8c:7d:fa:9f:b1:62:6c:e6:42:f6:1d:ab: + aa:e2:a4:05:33:99:4e:67:18:46:14:16:23:b8:46:db:d1:28: + a3:2c:2a:97:32:c3:02:e8:a0:9f:4f:e9:e6:c9:7e:c8:63:0d: + ff:de:95:f4:4d:f0:ca:57:49:9a:07:4b:5a:13:96:bc:49:10: + 5c:3c:92:ce:1e:dd:10:d6:dc:6b:07:f0:ae:3e:0c:d0:05:1f: + 00:08:79:0c:2a:e5:03:96:7d:1e:cb:3f:b7:f6:30:07:39:66: + 8b:9a:b4:80:1c:e2:d2:7d:e8:bc:91:26:c5:9a:ec:a1:25:26: + 56:0a:7b:39 +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UEAwwEQiBD +QTAeFw0xNjAyMDgyMzM0NThaFw0yNjAyMDUyMzM0NThaMGAxCzAJBgNVBAYTAlVT +MRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRAw +DgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAkxMjcuMC4wLjEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDKbD3W7+bI1KOoUuH4XfdOd6yjZG+L1D7NGIw5 +8hBk9/NhGs6P2DIawfaIUQoSB9WIXPVFVtCfhxd43k3Q/fphge+gazgCOz2KTh8l +dPAFwxsQ86RSbWiDr4NpFlTU+UKCmJ6STIIzNCmxL2DT8gA61psgzCdXvtoptHT3 +qvbwWkUOhdoC1MGWgSagpHelVLQkevWf5ghCrNisAPf8ikMNyba3o03mUNkz+hgo +snfdo/X6MDL5vyUsl5EfaSZcHukrJCZdkJGxjlwHKrw5pAe2KITddYcgUBOrtDxR +I+XX6onyqf3ah7DSmhQgrs/5Fht4uKKUUC+GTCAnCNBEgKN5AgMBAAGjbzBtMAwG +A1UdEwEB/wQCMAAwHQYDVR0OBBYEFHg2k1gfc3yTyq67mk6nN/GDA0vPMB8GA1Ud +IwQYMBaAFA2vvMMxCcad+ETSUegT/yR4nYN2MB0GA1UdJQQWMBQGCCsGAQUFBwMB +BggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAXoc1IRWJTqyajtvS3INunmS5 +MPiR95/E3rSSvwVKG+MSD7AN2I/9+eboLCTgiMxYXTujI5WGsh8P+wKVxBYEJAW7 +ZeRIgG5kM+2gcX0h9W9wcgdUsud5mI21Kw1ojjq+45H4amDRUSAIg0MYWkniZiGq +39KxkJZamW9koJZ/5Zs/gtVCjH36n7FibOZC9h2rquKkBTOZTmcYRhQWI7hG29Eo +oywqlzLDAuign0/p5sl+yGMN/96V9E3wyldJmgdLWhOWvEkQXDySzh7dENbcawfw +rj4M0AUfAAh5DCrlA5Z9Hss/t/YwBzlmi5q0gBzi0n3ovJEmxZrsoSUmVgp7OQ== +-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/multi-root-B-by-C.pem b/net/data/ssl/certificates/multi-root-B-by-C.pem new file mode 100644 index 0000000..2769104 --- /dev/null +++ b/net/data/ssl/certificates/multi-root-B-by-C.pem
@@ -0,0 +1,74 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4096 (0x1000) + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=C CA + Validity + Not Before: Jan 4 00:00:00 2016 GMT + Not After : Jan 2 00:00:00 2026 GMT + Subject: CN=B CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:a2:a0:93:17:1e:ee:f0:fb:87:1f:71:ca:6b:b9: + bd:2d:67:38:2a:24:c7:c3:c2:88:4d:ca:f2:50:33: + 60:1d:6f:61:a5:61:02:a4:a7:76:2b:89:43:78:a7: + 0a:27:04:dc:a5:5b:6e:a8:4c:29:f2:25:c6:c0:32: + 20:e0:01:8d:a1:16:15:c9:b5:d8:17:7d:e0:e8:90: + 89:a3:f5:96:1f:90:c6:e3:10:1a:f9:f5:6a:d5:41: + ce:cd:a8:fc:36:77:2f:a2:d7:8e:39:50:36:65:4d: + a7:83:6c:e1:a4:cc:f6:6b:c0:7b:c8:98:f4:01:3f: + 94:d3:d6:11:1d:b3:ef:95:c8:ea:07:d9:5e:fd:82: + 4f:23:4d:08:89:fb:68:2d:82:12:98:e0:87:f2:7a: + c7:76:98:4c:ca:1d:3e:e8:bc:72:dd:b0:b7:41:84: + 6e:39:cd:a9:35:e8:ee:2a:d1:54:cd:21:ed:6f:a4: + ab:e9:d8:c9:d2:e9:11:66:66:78:33:ae:d8:78:75: + ac:1e:ad:0e:23:82:35:13:96:ed:eb:3e:58:eb:27: + fb:1b:fd:27:6e:f0:c3:ff:88:cc:cc:63:35:23:3d: + ce:4d:2e:2d:dc:b3:91:8e:d8:d8:5b:6a:92:28:c5: + e9:a4:02:76:34:e0:6d:41:61:43:71:e1:59:b3:c2: + ce:f7 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Subject Key Identifier: + 0D:AF:BC:C3:31:09:C6:9D:F8:44:D2:51:E8:13:FF:24:78:9D:83:76 + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + Signature Algorithm: sha256WithRSAEncryption + 28:52:54:55:5c:5b:4f:af:4c:66:cc:c3:71:dd:3e:60:48:76: + c3:f0:c0:40:30:f6:44:06:73:2f:c5:b1:1c:6a:e9:6f:fd:92: + 8d:40:38:eb:46:de:58:cd:68:0f:cd:7f:28:a2:79:29:92:ae: + 68:f2:ba:0a:f1:e6:17:58:a4:3b:ee:61:6c:d6:5d:2a:07:61: + b0:31:c9:9b:dc:08:32:b8:d8:ac:14:9c:1a:ec:21:7d:46:63: + 75:67:46:36:ec:25:f0:e6:ed:3f:5d:b7:fd:06:67:46:80:a0: + b9:a8:25:e7:05:0a:f9:a7:20:48:d4:71:b4:3f:0b:1c:4d:f4: + 73:8b:cc:9f:67:cf:36:43:e2:82:d5:d5:4e:4c:71:74:5c:db: + ba:35:bf:1e:9e:63:46:d0:c7:b9:f4:2a:92:23:c7:59:af:5d: + b1:24:7c:ff:1c:08:0d:2a:50:79:57:1c:a2:45:38:a5:3e:d7: + c8:5c:91:f2:69:70:d1:47:4a:55:bc:84:dc:9b:9f:ae:f2:94: + 1c:22:65:11:4c:7c:e1:3c:ae:d4:e6:11:fc:3f:d8:53:6b:65: + 4a:7c:44:bf:91:bd:b0:3e:df:b5:f5:c5:8e:1f:a5:19:83:2a: + 8d:4e:13:3d:58:45:8e:11:b6:9e:96:7a:7a:6e:0b:e5:1a:66: + 7a:00:0e:75 +-----BEGIN CERTIFICATE----- +MIIC3DCCAcSgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UEAwwEQyBD +QTAeFw0xNjAxMDQwMDAwMDBaFw0yNjAxMDIwMDAwMDBaMA8xDTALBgNVBAMMBEIg +Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCioJMXHu7w+4cfccpr +ub0tZzgqJMfDwohNyvJQM2Adb2GlYQKkp3YriUN4pwonBNylW26oTCnyJcbAMiDg +AY2hFhXJtdgXfeDokImj9ZYfkMbjEBr59WrVQc7NqPw2dy+i1445UDZlTaeDbOGk +zPZrwHvImPQBP5TT1hEds++VyOoH2V79gk8jTQiJ+2gtghKY4Ifyesd2mEzKHT7o +vHLdsLdBhG45zak16O4q0VTNIe1vpKvp2MnS6RFmZngzrth4dawerQ4jgjUTlu3r +PljrJ/sb/Sdu8MP/iMzMYzUjPc5NLi3cs5GO2NhbapIoxemkAnY04G1BYUNx4Vmz +ws73AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFA2vvMMxCcad ++ETSUegT/yR4nYN2MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAQEA +KFJUVVxbT69MZszDcd0+YEh2w/DAQDD2RAZzL8WxHGrpb/2SjUA460beWM1oD81/ +KKJ5KZKuaPK6CvHmF1ikO+5hbNZdKgdhsDHJm9wIMrjYrBScGuwhfUZjdWdGNuwl +8ObtP123/QZnRoCguagl5wUK+acgSNRxtD8LHE30c4vMn2fPNkPigtXVTkxxdFzb +ujW/Hp5jRtDHufQqkiPHWa9dsSR8/xwIDSpQeVccokU4pT7XyFyR8mlw0UdKVbyE +3JufrvKUHCJlEUx84Tyu1OYR/D/YU2tlSnxEv5G9sD7ftfXFjh+lGYMqjU4TPVhF +jhG2npZ6em4L5RpmegAOdQ== +-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/multi-root-B-by-F.pem b/net/data/ssl/certificates/multi-root-B-by-F.pem new file mode 100644 index 0000000..8915a0d --- /dev/null +++ b/net/data/ssl/certificates/multi-root-B-by-F.pem
@@ -0,0 +1,74 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4096 (0x1000) + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=F CA + Validity + Not Before: Jan 5 00:00:00 2016 GMT + Not After : Jan 2 00:00:00 2026 GMT + Subject: CN=B CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:a2:a0:93:17:1e:ee:f0:fb:87:1f:71:ca:6b:b9: + bd:2d:67:38:2a:24:c7:c3:c2:88:4d:ca:f2:50:33: + 60:1d:6f:61:a5:61:02:a4:a7:76:2b:89:43:78:a7: + 0a:27:04:dc:a5:5b:6e:a8:4c:29:f2:25:c6:c0:32: + 20:e0:01:8d:a1:16:15:c9:b5:d8:17:7d:e0:e8:90: + 89:a3:f5:96:1f:90:c6:e3:10:1a:f9:f5:6a:d5:41: + ce:cd:a8:fc:36:77:2f:a2:d7:8e:39:50:36:65:4d: + a7:83:6c:e1:a4:cc:f6:6b:c0:7b:c8:98:f4:01:3f: + 94:d3:d6:11:1d:b3:ef:95:c8:ea:07:d9:5e:fd:82: + 4f:23:4d:08:89:fb:68:2d:82:12:98:e0:87:f2:7a: + c7:76:98:4c:ca:1d:3e:e8:bc:72:dd:b0:b7:41:84: + 6e:39:cd:a9:35:e8:ee:2a:d1:54:cd:21:ed:6f:a4: + ab:e9:d8:c9:d2:e9:11:66:66:78:33:ae:d8:78:75: + ac:1e:ad:0e:23:82:35:13:96:ed:eb:3e:58:eb:27: + fb:1b:fd:27:6e:f0:c3:ff:88:cc:cc:63:35:23:3d: + ce:4d:2e:2d:dc:b3:91:8e:d8:d8:5b:6a:92:28:c5: + e9:a4:02:76:34:e0:6d:41:61:43:71:e1:59:b3:c2: + ce:f7 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Subject Key Identifier: + 0D:AF:BC:C3:31:09:C6:9D:F8:44:D2:51:E8:13:FF:24:78:9D:83:76 + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + Signature Algorithm: sha256WithRSAEncryption + 97:0b:58:06:81:05:d1:e6:dd:04:fd:36:f6:e5:97:70:1f:b0: + 81:e5:9e:1e:d7:c2:47:31:0d:a2:0d:f8:f3:b3:db:71:7a:30: + 9f:4f:de:ba:e8:de:d1:b8:e8:a5:34:79:89:1d:46:b1:8e:ad: + ff:5c:79:00:e9:08:b7:55:20:26:3e:cd:c3:18:b0:dc:c9:74: + 0b:2a:3c:90:3a:53:36:f4:33:b8:92:38:01:5a:7c:ab:ea:b2: + 33:bf:5b:8b:58:92:05:9f:0f:d6:ed:06:21:7d:71:b1:c8:a4: + 13:61:ef:59:09:d1:0a:c3:d1:91:5c:d7:87:59:a6:50:9c:66: + bd:b7:24:d2:5f:a5:24:93:51:62:6e:57:35:d7:76:96:58:e2: + 44:4a:2a:03:37:25:7f:aa:c6:c8:5d:68:77:4a:f4:be:b8:be: + fc:33:5f:86:71:32:09:24:38:7c:38:59:4d:dc:f2:23:17:22: + 0e:a5:44:b3:f6:e0:67:d1:f1:98:83:aa:6e:48:dd:d3:99:99: + 40:4f:18:3d:71:84:2c:58:e6:25:38:8f:14:de:54:3a:d3:8b: + 99:d6:aa:20:80:a2:50:27:a1:fa:28:6e:47:80:a7:33:c9:0c: + 4a:65:b7:6f:3c:97:b7:69:c7:20:16:01:ed:cb:eb:a5:82:f1: + 94:e6:8a:d7 +-----BEGIN CERTIFICATE----- +MIIC3DCCAcSgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UEAwwERiBD +QTAeFw0xNjAxMDUwMDAwMDBaFw0yNjAxMDIwMDAwMDBaMA8xDTALBgNVBAMMBEIg +Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCioJMXHu7w+4cfccpr +ub0tZzgqJMfDwohNyvJQM2Adb2GlYQKkp3YriUN4pwonBNylW26oTCnyJcbAMiDg +AY2hFhXJtdgXfeDokImj9ZYfkMbjEBr59WrVQc7NqPw2dy+i1445UDZlTaeDbOGk +zPZrwHvImPQBP5TT1hEds++VyOoH2V79gk8jTQiJ+2gtghKY4Ifyesd2mEzKHT7o +vHLdsLdBhG45zak16O4q0VTNIe1vpKvp2MnS6RFmZngzrth4dawerQ4jgjUTlu3r +PljrJ/sb/Sdu8MP/iMzMYzUjPc5NLi3cs5GO2NhbapIoxemkAnY04G1BYUNx4Vmz +ws73AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFA2vvMMxCcad ++ETSUegT/yR4nYN2MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAQEA +lwtYBoEF0ebdBP029uWXcB+wgeWeHtfCRzENog3487PbcXown0/euuje0bjopTR5 +iR1GsY6t/1x5AOkIt1UgJj7Nwxiw3Ml0Cyo8kDpTNvQzuJI4AVp8q+qyM79bi1iS +BZ8P1u0GIX1xscikE2HvWQnRCsPRkVzXh1mmUJxmvbck0l+lJJNRYm5XNdd2llji +REoqAzclf6rGyF1od0r0vri+/DNfhnEyCSQ4fDhZTdzyIxciDqVEs/bgZ9HxmIOq +bkjd05mZQE8YPXGELFjmJTiPFN5UOtOLmdaqIICiUCeh+ihuR4CnM8kMSmW3bzyX +t2nHIBYB7cvrpYLxlOaK1w== +-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/multi-root-C-by-D.pem b/net/data/ssl/certificates/multi-root-C-by-D.pem new file mode 100644 index 0000000..67f31b8 --- /dev/null +++ b/net/data/ssl/certificates/multi-root-C-by-D.pem
@@ -0,0 +1,74 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4097 (0x1001) + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=D Root CA + Validity + Not Before: Jan 3 00:00:00 2016 GMT + Not After : Jan 2 00:00:00 2026 GMT + Subject: CN=C CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:c2:21:aa:d2:67:ec:f5:95:9e:c9:00:f2:ee:83: + 26:6c:3c:30:d4:a8:78:dd:0a:a5:d6:81:f0:54:25: + de:8f:9a:0e:8f:5c:06:96:b0:83:b7:13:56:33:9e: + d1:6a:7d:45:40:d8:e5:21:1d:c5:6d:31:34:6f:45: + 22:cf:6f:01:b4:f8:6c:ce:70:d0:e9:0e:ed:04:d9: + 34:7a:91:db:6f:90:94:66:95:26:0b:29:26:4c:6c: + 8b:e3:13:a1:42:29:59:a0:2c:fe:83:a5:3c:3d:e8: + 32:ac:37:a7:ae:b2:79:d3:12:98:5f:c7:fd:4c:49: + 6b:e4:32:40:76:7b:78:ae:a1:61:b1:0a:d1:5c:f3: + 96:13:5f:95:5a:a2:35:c5:63:1b:25:05:8d:3c:08: + d0:b0:28:2a:f3:f6:34:ab:a5:cd:e7:82:2c:35:38: + 8b:f5:41:6c:71:32:c4:13:67:ef:9b:8f:32:ab:7c: + da:e1:6a:92:4b:5b:9e:39:7e:6b:00:f8:8d:e2:b3: + 3b:ad:2f:11:3f:80:d5:19:0e:cc:d4:c1:21:42:46: + 42:2d:d0:5e:ae:63:d1:0a:3e:66:fb:eb:0b:9b:e4: + fe:7a:ca:43:5c:cc:98:6a:e1:fd:32:18:4c:63:4c: + cd:98:9b:be:fa:5b:2d:c4:76:cc:8d:e5:6d:aa:bb: + 5a:37 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Subject Key Identifier: + 34:19:53:D9:DA:11:B1:FF:00:35:2B:37:00:91:1F:91:C0:F7:2E:0A + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + Signature Algorithm: sha256WithRSAEncryption + 5a:aa:0a:cb:92:8a:cd:ca:49:b4:5e:34:32:46:0a:9e:fd:71: + 30:dd:af:b8:9a:6c:82:87:59:27:ed:df:11:1f:13:fa:c9:d9: + fb:8a:e8:ba:7c:67:33:7e:ea:42:f3:1c:34:91:5c:5f:ed:68: + d7:dc:06:8d:6a:75:38:42:4f:eb:52:55:84:c6:74:9d:53:87: + d6:34:64:19:19:4c:6d:b7:3a:f9:e8:8a:14:4d:00:ec:07:71: + 00:6c:05:80:94:4b:4f:e7:a4:db:26:ee:e1:2b:98:d6:ad:ca: + 32:ab:d6:3a:23:83:30:e8:33:82:82:7d:a5:1e:00:97:be:a8: + 0f:68:d7:ae:8a:4a:52:be:d7:b5:0a:49:4d:a8:f1:25:e3:de: + 41:37:6a:53:1c:b5:0e:b0:fd:b6:db:25:b6:a2:cb:ff:d8:7f: + 98:30:84:15:f0:27:b5:fd:a3:71:35:ad:4c:83:8c:d1:da:49: + a5:97:b3:7d:80:6f:03:40:fe:a3:22:38:58:70:6d:43:01:63: + db:fb:ca:b6:5f:fc:f0:45:b3:57:5a:a6:cc:b9:d0:99:a8:f6: + a4:4f:c6:20:a5:6e:dd:e0:3b:e7:b2:0a:8b:6f:4d:6f:67:57: + e7:c4:58:80:26:5d:1d:27:f9:3e:22:ed:00:bc:fa:8d:8d:eb: + bb:ab:91:a9 +-----BEGIN CERTIFICATE----- +MIIC4TCCAcmgAwIBAgICEAEwDQYJKoZIhvcNAQELBQAwFDESMBAGA1UEAwwJRCBS +b290IENBMB4XDTE2MDEwMzAwMDAwMFoXDTI2MDEwMjAwMDAwMFowDzENMAsGA1UE +AwwEQyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMIhqtJn7PWV +nskA8u6DJmw8MNSoeN0KpdaB8FQl3o+aDo9cBpawg7cTVjOe0Wp9RUDY5SEdxW0x +NG9FIs9vAbT4bM5w0OkO7QTZNHqR22+QlGaVJgspJkxsi+MToUIpWaAs/oOlPD3o +Mqw3p66yedMSmF/H/UxJa+QyQHZ7eK6hYbEK0VzzlhNflVqiNcVjGyUFjTwI0LAo +KvP2NKulzeeCLDU4i/VBbHEyxBNn75uPMqt82uFqkktbnjl+awD4jeKzO60vET+A +1RkOzNTBIUJGQi3QXq5j0Qo+ZvvrC5vk/nrKQ1zMmGrh/TIYTGNMzZibvvpbLcR2 +zI3lbaq7WjcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUNBlT +2doRsf8ANSs3AJEfkcD3LgowDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUA +A4IBAQBaqgrLkorNykm0XjQyRgqe/XEw3a+4mmyCh1kn7d8RHxP6ydn7iui6fGcz +fupC8xw0kVxf7WjX3AaNanU4Qk/rUlWExnSdU4fWNGQZGUxttzr56IoUTQDsB3EA +bAWAlEtP56TbJu7hK5jWrcoyq9Y6I4Mw6DOCgn2lHgCXvqgPaNeuikpSvte1CklN +qPEl495BN2pTHLUOsP222yW2osv/2H+YMIQV8Ce1/aNxNa1Mg4zR2kmll7N9gG8D +QP6jIjhYcG1DAWPb+8q2X/zwRbNXWqbMudCZqPakT8YgpW7d4DvnsgqLb01vZ1fn +xFiAJl0dJ/k+Iu0AvPqNjeu7q5Gp +-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/multi-root-C-by-E.pem b/net/data/ssl/certificates/multi-root-C-by-E.pem new file mode 100644 index 0000000..2ef8f1a --- /dev/null +++ b/net/data/ssl/certificates/multi-root-C-by-E.pem
@@ -0,0 +1,74 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4097 (0x1001) + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=E Root CA + Validity + Not Before: Jan 5 00:00:00 2016 GMT + Not After : Jan 2 00:00:00 2026 GMT + Subject: CN=C CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:c2:21:aa:d2:67:ec:f5:95:9e:c9:00:f2:ee:83: + 26:6c:3c:30:d4:a8:78:dd:0a:a5:d6:81:f0:54:25: + de:8f:9a:0e:8f:5c:06:96:b0:83:b7:13:56:33:9e: + d1:6a:7d:45:40:d8:e5:21:1d:c5:6d:31:34:6f:45: + 22:cf:6f:01:b4:f8:6c:ce:70:d0:e9:0e:ed:04:d9: + 34:7a:91:db:6f:90:94:66:95:26:0b:29:26:4c:6c: + 8b:e3:13:a1:42:29:59:a0:2c:fe:83:a5:3c:3d:e8: + 32:ac:37:a7:ae:b2:79:d3:12:98:5f:c7:fd:4c:49: + 6b:e4:32:40:76:7b:78:ae:a1:61:b1:0a:d1:5c:f3: + 96:13:5f:95:5a:a2:35:c5:63:1b:25:05:8d:3c:08: + d0:b0:28:2a:f3:f6:34:ab:a5:cd:e7:82:2c:35:38: + 8b:f5:41:6c:71:32:c4:13:67:ef:9b:8f:32:ab:7c: + da:e1:6a:92:4b:5b:9e:39:7e:6b:00:f8:8d:e2:b3: + 3b:ad:2f:11:3f:80:d5:19:0e:cc:d4:c1:21:42:46: + 42:2d:d0:5e:ae:63:d1:0a:3e:66:fb:eb:0b:9b:e4: + fe:7a:ca:43:5c:cc:98:6a:e1:fd:32:18:4c:63:4c: + cd:98:9b:be:fa:5b:2d:c4:76:cc:8d:e5:6d:aa:bb: + 5a:37 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Subject Key Identifier: + 34:19:53:D9:DA:11:B1:FF:00:35:2B:37:00:91:1F:91:C0:F7:2E:0A + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + Signature Algorithm: sha256WithRSAEncryption + 57:6d:1c:44:40:54:a1:e5:3c:a0:e1:e1:d0:72:41:61:93:91: + 38:65:8b:cc:35:d9:4c:04:80:12:4a:fd:84:71:9f:06:4f:de: + 06:1c:0d:93:51:b2:2d:d7:c8:f5:0d:4f:fd:14:58:9e:d2:c2: + ac:5d:bf:f7:67:5f:68:2d:a2:cf:12:86:79:26:70:11:2d:3f: + 0c:5f:65:fc:44:fd:6e:87:5e:56:3a:dc:be:da:95:e2:45:aa: + 07:28:ff:46:1e:4b:bf:03:92:84:53:9b:c9:7a:dd:e7:5e:e9: + 57:ba:18:c2:23:12:26:27:74:b6:93:44:4c:1e:6a:e2:20:62: + e5:33:db:86:14:41:7e:7c:76:5a:e5:d1:7f:fc:f4:f9:a3:23: + c9:06:ec:cb:b5:62:1e:bc:7b:1c:70:57:a5:d3:1d:d6:0f:79: + 6a:f2:05:58:63:11:91:fb:b4:44:6a:b2:97:18:cf:ee:de:5d: + ac:d4:d8:63:e2:4f:42:25:fa:44:a4:47:b1:e4:f7:7f:55:a0: + e0:f7:09:f8:43:5c:54:1f:6a:e4:87:96:91:a0:8b:72:57:53: + 52:22:31:d1:26:d4:5f:38:43:17:2a:48:91:37:b6:d8:d2:b3: + 54:fc:f7:61:4e:c6:bc:39:89:e2:d8:3c:c0:d4:50:33:0b:de: + 3d:02:70:5d +-----BEGIN CERTIFICATE----- +MIIC4TCCAcmgAwIBAgICEAEwDQYJKoZIhvcNAQELBQAwFDESMBAGA1UEAwwJRSBS +b290IENBMB4XDTE2MDEwNTAwMDAwMFoXDTI2MDEwMjAwMDAwMFowDzENMAsGA1UE +AwwEQyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMIhqtJn7PWV +nskA8u6DJmw8MNSoeN0KpdaB8FQl3o+aDo9cBpawg7cTVjOe0Wp9RUDY5SEdxW0x +NG9FIs9vAbT4bM5w0OkO7QTZNHqR22+QlGaVJgspJkxsi+MToUIpWaAs/oOlPD3o +Mqw3p66yedMSmF/H/UxJa+QyQHZ7eK6hYbEK0VzzlhNflVqiNcVjGyUFjTwI0LAo +KvP2NKulzeeCLDU4i/VBbHEyxBNn75uPMqt82uFqkktbnjl+awD4jeKzO60vET+A +1RkOzNTBIUJGQi3QXq5j0Qo+ZvvrC5vk/nrKQ1zMmGrh/TIYTGNMzZibvvpbLcR2 +zI3lbaq7WjcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUNBlT +2doRsf8ANSs3AJEfkcD3LgowDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUA +A4IBAQBXbRxEQFSh5Tyg4eHQckFhk5E4ZYvMNdlMBIASSv2EcZ8GT94GHA2TUbIt +18j1DU/9FFie0sKsXb/3Z19oLaLPEoZ5JnARLT8MX2X8RP1uh15WOty+2pXiRaoH +KP9GHku/A5KEU5vJet3nXulXuhjCIxImJ3S2k0RMHmriIGLlM9uGFEF+fHZa5dF/ +/PT5oyPJBuzLtWIevHsccFel0x3WD3lq8gVYYxGR+7REarKXGM/u3l2s1Nhj4k9C +JfpEpEex5Pd/VaDg9wn4Q1xUH2rkh5aRoItyV1NSIjHRJtRfOEMXKkiRN7bY0rNU +/PdhTsa8OYni2DzA1FAzC949AnBd +-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/multi-root-D-by-D.pem b/net/data/ssl/certificates/multi-root-D-by-D.pem new file mode 100644 index 0000000..e9a1c0fe --- /dev/null +++ b/net/data/ssl/certificates/multi-root-D-by-D.pem
@@ -0,0 +1,74 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4096 (0x1000) + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=D Root CA + Validity + Not Before: Jan 2 00:00:00 2016 GMT + Not After : Jan 2 00:00:00 2026 GMT + Subject: CN=D Root CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:e4:63:48:86:4d:1f:34:4d:c9:b2:f3:14:af:d3: + ec:68:bd:ac:b6:ac:e4:11:fd:81:d3:4c:7c:dd:03: + d7:4e:44:30:9d:53:7a:4d:cf:25:29:ef:b5:f5:83: + b3:30:10:3b:97:f2:63:8c:40:41:fd:18:88:81:c5: + 53:26:90:f7:77:b1:01:5f:d7:7a:04:73:85:9a:b3: + e8:6e:40:7b:6a:2b:1c:b4:0f:52:83:ad:08:cb:58: + c2:71:87:85:b3:81:8c:21:88:aa:d5:4f:0b:84:c8: + 52:b0:cf:c4:cf:c7:72:8f:6a:2f:07:a2:2b:33:3d: + 6c:aa:00:1f:ef:c9:61:f6:58:8d:3a:8f:23:6b:75: + a0:cf:86:9d:02:0f:ca:2b:d2:75:f3:b6:fe:14:26: + 31:d4:31:28:e4:d1:cf:f7:4d:12:58:d8:ac:f8:d3: + f2:ae:d6:6e:72:dc:07:b8:d2:f2:76:0d:bf:a3:c1: + 18:63:58:55:84:4f:a5:82:d3:8f:17:8d:e1:0f:5a: + 9e:7f:69:01:4c:da:90:a1:33:b2:36:4f:91:3d:1f: + 0b:ea:8c:0d:ca:ff:e7:d1:0c:e0:ce:5b:54:6a:b9: + ed:46:38:8c:80:d4:24:9c:71:48:23:80:61:b8:71: + d4:8f:0d:96:b2:c1:f0:29:fc:c7:dd:9d:87:7a:f4: + 16:0d + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Subject Key Identifier: + B4:73:D6:1A:33:13:BC:9C:23:5D:F6:4B:A2:29:BD:F8:DC:73:49:11 + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + Signature Algorithm: sha256WithRSAEncryption + 6d:f2:9a:c2:eb:36:2b:45:ad:58:b5:59:68:e9:64:ad:75:18: + c0:73:b3:42:a4:ff:c3:25:02:f6:91:9b:a4:4d:0d:3d:49:3e: + d2:6b:c5:75:89:48:7b:fa:34:40:4d:06:4e:a6:cf:c5:3c:d5: + c2:a8:0e:77:2e:66:f1:fb:28:80:15:06:68:cb:9e:8e:27:1b: + 22:02:9f:c2:6b:fc:48:b0:20:25:4b:32:6a:db:99:53:89:4e: + 86:b7:a7:48:ed:1a:3a:f3:87:54:c6:e8:59:a3:95:49:31:39: + 01:54:56:ee:a8:6a:ba:f2:34:30:e1:75:84:1a:a6:4e:14:e0: + 25:58:8a:88:dc:2a:58:1e:22:c6:00:62:57:6d:d8:c3:2e:a6: + 19:05:8f:b9:b9:f3:e9:3e:39:4f:0a:1a:cc:59:ca:b6:89:29: + 59:b3:ad:92:86:8f:c0:ba:7d:7f:55:27:c6:db:aa:b0:0c:45: + 73:cc:18:6e:4d:0e:16:61:ad:d9:96:b6:d5:3e:29:e1:59:8c: + 4e:c9:6c:7a:63:0b:9b:37:0d:d6:31:bf:8c:90:33:97:60:f5: + 3b:24:1a:ad:eb:d0:8b:3c:0f:1c:0a:52:4b:83:ec:35:96:c6: + bb:67:3b:d7:19:78:dc:49:25:c8:b2:44:f5:26:e7:5d:35:4f: + 6a:bd:00:0f +-----BEGIN CERTIFICATE----- +MIIC5jCCAc6gAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwFDESMBAGA1UEAwwJRCBS +b290IENBMB4XDTE2MDEwMjAwMDAwMFoXDTI2MDEwMjAwMDAwMFowFDESMBAGA1UE +AwwJRCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5GNI +hk0fNE3JsvMUr9PsaL2stqzkEf2B00x83QPXTkQwnVN6Tc8lKe+19YOzMBA7l/Jj +jEBB/RiIgcVTJpD3d7EBX9d6BHOFmrPobkB7aisctA9Sg60Iy1jCcYeFs4GMIYiq +1U8LhMhSsM/Ez8dyj2ovB6IrMz1sqgAf78lh9liNOo8ja3Wgz4adAg/KK9J187b+ +FCYx1DEo5NHP900SWNis+NPyrtZuctwHuNLydg2/o8EYY1hVhE+lgtOPF43hD1qe +f2kBTNqQoTOyNk+RPR8L6owNyv/n0QzgzltUarntRjiMgNQknHFII4BhuHHUjw2W +ssHwKfzH3Z2HevQWDQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBS0c9YaMxO8nCNd9kuiKb343HNJETAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcN +AQELBQADggEBAG3ymsLrNitFrVi1WWjpZK11GMBzs0Kk/8MlAvaRm6RNDT1JPtJr +xXWJSHv6NEBNBk6mz8U81cKoDncuZvH7KIAVBmjLno4nGyICn8Jr/EiwICVLMmrb +mVOJToa3p0jtGjrzh1TG6FmjlUkxOQFUVu6oarryNDDhdYQapk4U4CVYiojcKlge +IsYAYldt2MMuphkFj7m58+k+OU8KGsxZyraJKVmzrZKGj8C6fX9VJ8bbqrAMRXPM +GG5NDhZhrdmWttU+KeFZjE7JbHpjC5s3DdYxv4yQM5dg9TskGq3r0Is8DxwKUkuD +7DWWxrtnO9cZeNxJJciyRPUm5101T2q9AA8= +-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/multi-root-E-by-E.pem b/net/data/ssl/certificates/multi-root-E-by-E.pem new file mode 100644 index 0000000..d37206fe --- /dev/null +++ b/net/data/ssl/certificates/multi-root-E-by-E.pem
@@ -0,0 +1,74 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4096 (0x1000) + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=E Root CA + Validity + Not Before: Jan 2 00:00:00 2016 GMT + Not After : Jan 2 00:00:00 2026 GMT + Subject: CN=E Root CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:a4:35:79:08:1a:d9:5a:a6:12:69:98:d6:3f:c7: + fb:31:f6:f1:d6:a4:1b:f3:6a:fb:36:51:04:f1:9d: + 3b:94:81:77:35:7d:62:75:b4:b4:04:69:df:44:49: + fc:43:d5:a4:14:af:67:d0:fb:51:21:2b:8b:dc:8c: + 89:d1:0b:08:26:17:3d:75:10:08:6f:ba:a4:24:8b: + 7e:c3:fa:3d:ab:fb:f6:f5:14:80:f7:9a:45:00:b2: + 84:12:e2:7d:c0:b7:40:ca:6f:06:1e:d2:3c:10:6f: + 11:f0:52:a2:16:ef:52:91:09:6f:89:28:cf:70:fc: + e7:9e:1c:4b:5d:88:08:2f:2c:9e:75:c6:b9:6b:25: + 68:05:01:98:f2:28:53:7d:be:a1:5f:3a:62:0b:4a: + c4:95:17:97:d0:4a:5d:8a:5f:52:07:7a:6a:8b:81: + 41:a2:60:08:92:e8:d0:c2:c8:9c:19:b2:3c:c3:c6: + 33:7d:5d:90:a6:0b:d3:ca:7b:8b:6f:70:aa:bb:d1: + 90:81:6c:db:b8:48:f8:52:d1:47:32:ed:66:9e:67: + dd:e6:bc:9e:5d:60:33:9f:07:d8:b6:3e:d2:48:f5: + a8:4c:12:6f:19:32:32:a7:66:0c:66:00:79:9f:dc: + 91:e4:54:bb:ff:b5:22:ad:0c:5f:f7:5d:d6:1a:f0: + 82:59 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Subject Key Identifier: + B7:51:AA:C9:B7:3E:03:E5:11:94:49:A2:26:0F:70:81:7B:4E:7A:A7 + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + Signature Algorithm: sha256WithRSAEncryption + 6b:32:6f:7f:a4:6c:9c:21:a9:95:ab:b6:2a:50:59:72:36:1a: + ad:86:c4:4e:2f:a2:0a:81:47:b1:37:ed:94:5a:e3:c3:ec:43: + 46:2b:39:6c:66:ba:61:74:44:a4:e6:f6:63:6c:98:4b:d1:01: + 74:93:77:81:fe:92:5c:4a:bf:a4:d2:0b:aa:c8:00:7b:df:74: + 75:6e:d7:1a:7d:3b:f4:07:99:bb:04:63:93:97:9f:1d:b0:f0: + 81:23:94:70:8b:c6:c1:24:c1:05:01:80:c6:4e:cc:ec:7f:05: + c8:93:c4:9b:57:bb:ac:8e:b6:7f:ed:41:e6:49:2d:1b:bb:ec: + 74:47:ce:63:57:a2:e9:42:b5:f6:73:8d:f5:64:a5:53:f0:86: + 4b:34:29:80:0b:63:16:c6:98:af:d6:cb:17:52:8e:75:fc:95: + 03:ca:03:1d:a8:d3:83:f4:32:94:b1:6d:2e:f0:1c:87:81:b5: + 6a:f0:19:20:76:62:e1:da:39:9c:f7:ee:d3:f7:d3:14:39:89: + a2:a9:eb:2f:8e:e6:0f:70:e5:63:d1:43:ff:d8:f0:68:13:55: + c5:02:ab:f9:a5:d8:ae:7f:4c:c5:e4:1b:c2:ba:4a:e9:d7:d3: + 6e:69:80:39:d0:ad:0c:9d:2a:e6:6c:e6:e9:f7:49:eb:4b:4d: + 73:0d:d5:51 +-----BEGIN CERTIFICATE----- +MIIC5jCCAc6gAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwFDESMBAGA1UEAwwJRSBS +b290IENBMB4XDTE2MDEwMjAwMDAwMFoXDTI2MDEwMjAwMDAwMFowFDESMBAGA1UE +AwwJRSBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApDV5 +CBrZWqYSaZjWP8f7Mfbx1qQb82r7NlEE8Z07lIF3NX1idbS0BGnfREn8Q9WkFK9n +0PtRISuL3IyJ0QsIJhc9dRAIb7qkJIt+w/o9q/v29RSA95pFALKEEuJ9wLdAym8G +HtI8EG8R8FKiFu9SkQlviSjPcPznnhxLXYgILyyedca5ayVoBQGY8ihTfb6hXzpi +C0rElReX0Epdil9SB3pqi4FBomAIkujQwsicGbI8w8YzfV2QpgvTynuLb3Cqu9GQ +gWzbuEj4UtFHMu1mnmfd5ryeXWAznwfYtj7SSPWoTBJvGTIyp2YMZgB5n9yR5FS7 +/7UirQxf913WGvCCWQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBS3UarJtz4D5RGUSaImD3CBe056pzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcN +AQELBQADggEBAGsyb3+kbJwhqZWrtipQWXI2Gq2GxE4vogqBR7E37ZRa48PsQ0Yr +OWxmumF0RKTm9mNsmEvRAXSTd4H+klxKv6TSC6rIAHvfdHVu1xp9O/QHmbsEY5OX +nx2w8IEjlHCLxsEkwQUBgMZOzOx/BciTxJtXu6yOtn/tQeZJLRu77HRHzmNXoulC +tfZzjfVkpVPwhks0KYALYxbGmK/WyxdSjnX8lQPKAx2o04P0MpSxbS7wHIeBtWrw +GSB2YuHaOZz37tP30xQ5iaKp6y+O5g9w5WPRQ//Y8GgTVcUCq/ml2K5/TMXkG8K6 +SunX025pgDnQrQydKuZs5un3SetLTXMN1VE= +-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/multi-root-F-by-E.pem b/net/data/ssl/certificates/multi-root-F-by-E.pem new file mode 100644 index 0000000..571a69f5 --- /dev/null +++ b/net/data/ssl/certificates/multi-root-F-by-E.pem
@@ -0,0 +1,74 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4098 (0x1002) + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=E Root CA + Validity + Not Before: Jan 2 00:00:00 2016 GMT + Not After : Jan 2 00:00:00 2026 GMT + Subject: CN=F CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:9c:03:f6:3a:b6:1a:2e:f6:31:c6:97:e8:e8:47: + d2:ed:cf:b1:1d:89:05:55:fe:3a:3c:ca:33:83:c5: + cb:b2:fc:fc:cc:53:98:f4:9a:a1:51:eb:11:5b:74: + 6b:d0:1c:b7:59:8f:ba:34:0b:17:9e:43:70:70:c1: + d8:d6:da:31:27:03:81:44:38:3f:b1:34:b8:98:85: + e9:ef:10:05:9d:03:cc:4a:52:af:01:0e:19:02:c4: + 89:9a:0c:69:e3:2d:fc:47:12:1e:17:c0:cb:5e:aa: + dd:e1:7f:8b:8f:9e:25:e1:74:4c:bf:90:2b:5e:23: + 85:95:11:67:ab:22:87:ac:d1:69:ab:df:96:90:4b: + d4:5a:57:1b:be:23:c5:c6:45:17:48:87:36:8b:ba: + a4:ce:b4:a8:1f:28:9e:b8:4e:c7:86:37:17:90:2a: + 02:87:d0:ac:45:e6:ad:32:e3:6c:b9:e2:be:b8:60: + c0:cb:65:e8:b6:59:54:f0:1a:47:76:f2:c0:2c:5c: + bf:2f:76:05:85:90:e4:ab:3b:ea:98:04:70:1d:60: + cf:d1:8b:3d:68:51:aa:8e:d4:3f:b5:fa:db:61:4d: + f8:f8:d9:d7:17:3f:14:2e:6d:af:76:8f:4f:cd:7b: + 15:65:34:34:b7:24:51:9f:89:a9:eb:f0:09:cc:3a: + 23:b1 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Subject Key Identifier: + 6C:C0:28:78:3E:A8:BE:06:4C:85:97:F7:D6:F1:AE:44:39:E4:C1:79 + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + Signature Algorithm: sha256WithRSAEncryption + 45:04:40:0e:a4:a0:6f:35:52:58:b8:b3:70:7f:a4:b5:2d:e0: + 74:d3:59:93:7a:0a:a4:a4:ee:f9:2e:c3:7f:d0:52:4a:d2:58: + 9d:22:17:73:3f:e0:6b:a6:2b:ee:11:01:1e:d3:4b:e4:cd:b1: + 51:fe:c2:0a:60:17:4c:86:e8:9b:62:29:93:97:9a:bf:7b:8b: + d2:f6:11:14:68:d2:d4:59:bf:15:03:98:e4:e6:31:b8:8f:aa: + b5:98:db:fa:a5:84:54:69:15:80:70:db:43:fd:45:76:19:1d: + d5:e5:fc:ff:b0:a4:5d:ed:b1:3a:ac:21:44:5a:00:b8:a1:dc: + 88:f4:96:82:f1:04:06:5a:16:7d:c9:49:1a:62:92:a4:03:28: + 32:95:2d:9f:ed:9e:4c:5c:22:5f:dd:7f:1f:90:fc:a4:fd:a3: + 9c:3b:45:70:eb:f5:29:40:c1:9d:73:86:14:6d:40:70:e5:94: + d8:55:79:78:b2:e4:82:61:c7:a2:3d:49:86:23:f5:4e:e9:8b: + 22:1d:1e:7e:83:3f:f3:d5:ab:f5:91:cd:bd:8c:3f:ef:28:de: + 66:19:c2:39:68:e9:30:4a:43:2e:d0:c9:50:fb:f1:56:4d:c5: + ad:46:e6:db:80:3e:b8:f4:5f:c1:55:9d:de:aa:72:ab:db:65: + 71:a9:78:47 +-----BEGIN CERTIFICATE----- +MIIC4TCCAcmgAwIBAgICEAIwDQYJKoZIhvcNAQELBQAwFDESMBAGA1UEAwwJRSBS +b290IENBMB4XDTE2MDEwMjAwMDAwMFoXDTI2MDEwMjAwMDAwMFowDzENMAsGA1UE +AwwERiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJwD9jq2Gi72 +McaX6OhH0u3PsR2JBVX+OjzKM4PFy7L8/MxTmPSaoVHrEVt0a9Act1mPujQLF55D +cHDB2NbaMScDgUQ4P7E0uJiF6e8QBZ0DzEpSrwEOGQLEiZoMaeMt/EcSHhfAy16q +3eF/i4+eJeF0TL+QK14jhZURZ6sih6zRaavflpBL1FpXG74jxcZFF0iHNou6pM60 +qB8onrhOx4Y3F5AqAofQrEXmrTLjbLnivrhgwMtl6LZZVPAaR3bywCxcvy92BYWQ +5Ks76pgEcB1gz9GLPWhRqo7UP7X622FN+PjZ1xc/FC5tr3aPT817FWU0NLckUZ+J +qevwCcw6I7ECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUbMAo +eD6ovgZMhZf31vGuRDnkwXkwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUA +A4IBAQBFBEAOpKBvNVJYuLNwf6S1LeB001mTegqkpO75LsN/0FJK0lidIhdzP+Br +pivuEQEe00vkzbFR/sIKYBdMhuibYimTl5q/e4vS9hEUaNLUWb8VA5jk5jG4j6q1 +mNv6pYRUaRWAcNtD/UV2GR3V5fz/sKRd7bE6rCFEWgC4odyI9JaC8QQGWhZ9yUka +YpKkAygylS2f7Z5MXCJf3X8fkPyk/aOcO0Vw6/UpQMGdc4YUbUBw5ZTYVXl4suSC +YceiPUmGI/VO6YsiHR5+gz/z1av1kc29jD/vKN5mGcI5aOkwSkMu0MlQ+/FWTcWt +RubbgD649F/BVZ3eqnKr22VxqXhH +-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/multi-root-chain1.pem b/net/data/ssl/certificates/multi-root-chain1.pem index d0578659..fada15f 100644 --- a/net/data/ssl/certificates/multi-root-chain1.pem +++ b/net/data/ssl/certificates/multi-root-chain1.pem
@@ -1,328 +1,301 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEAzDKsONWbnA5Lau2SquZbKzmbj0hH0A2cPWjVR6O4YadTgD7M -jUMRs+TJsYt42rXtEX2kTDXtkOsweRv/SJSGvh31uLBhQH/X1ZCFuOAUujqm+6vx -JRN1RYqSvcXUGOf+LasWutPgAPULz/8AKHX23Uue0RtuWv+3wH2Eck2wno+S7IHR -fGWP+W9fsuoGVyo0Iy3nd02BZtKCZeQUd9neAnkm8qSBssPbD2zi2OAve5MVsCkd -oQAWhw0Jc0QArZ6m33AEZu3hvj3s64Rn1/VAmSjrxipWPZEayVplVrlLCeO/LBkQ -oCRCTcQVhQVJnXFS00t7U2jHKjwnfajTwn7k/wIDAQABAoIBAQCKdiXP2BBPLmY3 -WGbmmZLiaYqxCqsfSctS3L4aeMqy9Poq8OpVM1BSsmWNjWxiqY/aF18MCllPthrF -VJWzCnufeMNA++DGEqow93GlXdTQPqsx5nJ62InhoMhGBFoAlXcGUof0IW04WPEs -ldXumabOgdNsKXSYIePgk3v24fVMXgnvj1TxgMhtSSP5vmP8h0/7pNnnfjWrBZNg -B2bVqCYQ6AaxHRivLFsD85nBdSXl8La5lfoSCgvpWHKtIUvUeZrBAagxK2gGj6zg -sJvKs4EnGUdzX0eGheLaJtdVXEdxWIj9HmusLFF02wvgq5yS6Hyj1hz6YHaJomb5 -mHGVcBDZAoGBAPNTRlNfiZ9fB21FFEufPx7YxEbqS4BFthBqLfatG8fM1gRkbz9m -Dy/FSmgPQMxaqA5vjE8jhVlVTOCXznT8TsAhuof/ORmmFDvHleJs1iaqw/xhgOJv -avMc+BZTOktBX4u9E4wSVwj+QfhutssCeG+SHtS9uVyiGAVUSIyhCNNjAoGBANbV -ozqAElO7pF0frWIIZ7gGbPuEIULVqWhNQWZF19gvBf8sJQ+gfT0OhPRvopr734sc -+/m2b1PORFVGVPmRYMXrNds7qvtFzoDSvki0X3dsi6TXFSY7lTI4lAyvCOxQcjbM -x8sD9Csaips/i3EAV885BkG2QPMH+jEmp5U0y9C1AoGBAIgDsroEG4/ktOgVx0SG -XehGT2E8srufPChs0gijt3W2QKPv6GfOCwsvA2qrrBMPUgXPwOSz/GR1VCXvdc7b -AsJPmE9REYAO4ByScmxBXmv65Nb9QehRU71WIi+IkntiraAVLwoLbm9ugT331WIh -nWTwjx9odmcbjMXd2TgTBDX1AoGAYysCygJMc3JukL4KnvIaToxIymFXqS5PoOHo -ink7BYPPVNbf1LLUnNaS8PKHMNuLeP/MIJziDuFsEaEBoKJG9ZV5qtWEO7Ehfb3K -MG1ylAH7BAB0ts1SNXiAfspdaBhKYJlusHwGvc7mpHtUtrjdz74W8UZb/NN13jJl -sS5J1vECgYEAnpWIaGs3BCJWW8BSuuOx6NMSwFDfcpzqnJ6KvowdWVkW7lYK7kfZ -JIZnNragGbybBDUcUcdSdz+V0GtzUj6oKYI420debUlQ6/Xc+Yud+esqf23ODS3A -MsuJkwHALBIiocA552KN4Bsd69HRd91r/14G5BXtsjpsfhCXVPJreJ0= ------END RSA PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) Serial Number: 4096 (0x1000) - Signature Algorithm: sha256WithRSAEncryption + Signature Algorithm: sha256WithRSAEncryption Issuer: CN=B CA Validity - Not Before: Aug 14 02:47:31 2014 GMT - Not After : Aug 11 02:47:31 2024 GMT + Not Before: Feb 8 23:34:58 2016 GMT + Not After : Feb 5 23:34:58 2026 GMT Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) - Modulus: - 00:cc:32:ac:38:d5:9b:9c:0e:4b:6a:ed:92:aa:e6: - 5b:2b:39:9b:8f:48:47:d0:0d:9c:3d:68:d5:47:a3: - b8:61:a7:53:80:3e:cc:8d:43:11:b3:e4:c9:b1:8b: - 78:da:b5:ed:11:7d:a4:4c:35:ed:90:eb:30:79:1b: - ff:48:94:86:be:1d:f5:b8:b0:61:40:7f:d7:d5:90: - 85:b8:e0:14:ba:3a:a6:fb:ab:f1:25:13:75:45:8a: - 92:bd:c5:d4:18:e7:fe:2d:ab:16:ba:d3:e0:00:f5: - 0b:cf:ff:00:28:75:f6:dd:4b:9e:d1:1b:6e:5a:ff: - b7:c0:7d:84:72:4d:b0:9e:8f:92:ec:81:d1:7c:65: - 8f:f9:6f:5f:b2:ea:06:57:2a:34:23:2d:e7:77:4d: - 81:66:d2:82:65:e4:14:77:d9:de:02:79:26:f2:a4: - 81:b2:c3:db:0f:6c:e2:d8:e0:2f:7b:93:15:b0:29: - 1d:a1:00:16:87:0d:09:73:44:00:ad:9e:a6:df:70: - 04:66:ed:e1:be:3d:ec:eb:84:67:d7:f5:40:99:28: - eb:c6:2a:56:3d:91:1a:c9:5a:65:56:b9:4b:09:e3: - bf:2c:19:10:a0:24:42:4d:c4:15:85:05:49:9d:71: - 52:d3:4b:7b:53:68:c7:2a:3c:27:7d:a8:d3:c2:7e: - e4:ff + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:ca:6c:3d:d6:ef:e6:c8:d4:a3:a8:52:e1:f8:5d: + f7:4e:77:ac:a3:64:6f:8b:d4:3e:cd:18:8c:39:f2: + 10:64:f7:f3:61:1a:ce:8f:d8:32:1a:c1:f6:88:51: + 0a:12:07:d5:88:5c:f5:45:56:d0:9f:87:17:78:de: + 4d:d0:fd:fa:61:81:ef:a0:6b:38:02:3b:3d:8a:4e: + 1f:25:74:f0:05:c3:1b:10:f3:a4:52:6d:68:83:af: + 83:69:16:54:d4:f9:42:82:98:9e:92:4c:82:33:34: + 29:b1:2f:60:d3:f2:00:3a:d6:9b:20:cc:27:57:be: + da:29:b4:74:f7:aa:f6:f0:5a:45:0e:85:da:02:d4: + c1:96:81:26:a0:a4:77:a5:54:b4:24:7a:f5:9f:e6: + 08:42:ac:d8:ac:00:f7:fc:8a:43:0d:c9:b6:b7:a3: + 4d:e6:50:d9:33:fa:18:28:b2:77:dd:a3:f5:fa:30: + 32:f9:bf:25:2c:97:91:1f:69:26:5c:1e:e9:2b:24: + 26:5d:90:91:b1:8e:5c:07:2a:bc:39:a4:07:b6:28: + 84:dd:75:87:20:50:13:ab:b4:3c:51:23:e5:d7:ea: + 89:f2:a9:fd:da:87:b0:d2:9a:14:20:ae:cf:f9:16: + 1b:78:b8:a2:94:50:2f:86:4c:20:27:08:d0:44:80: + a3:79 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 7A:DF:61:82:66:73:E5:9F:E2:84:99:26:22:18:18:2D:5C:5B:36:A7 + 78:36:93:58:1F:73:7C:93:CA:AE:BB:9A:4E:A7:37:F1:83:03:4B:CF X509v3 Authority Key Identifier: - keyid:76:7F:E8:F6:A1:F7:91:56:BD:9C:7E:66:5C:97:F0:A5:1D:6C:06:28 + keyid:0D:AF:BC:C3:31:09:C6:9D:F8:44:D2:51:E8:13:FF:24:78:9D:83:76 X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication Signature Algorithm: sha256WithRSAEncryption - 59:31:d6:e2:3c:0e:31:c5:5c:a4:40:51:5d:eb:15:3d:2e:58: - 13:c6:0f:26:cf:86:f7:ee:d1:30:31:81:83:86:83:ea:be:1c: - bd:c9:20:6e:a0:47:4c:46:38:2e:1e:8f:70:da:80:38:f4:d7: - 9c:59:9d:7f:23:d8:2a:c9:fe:fe:e9:57:5f:d9:69:58:e6:86: - 19:af:3b:08:a1:ad:50:e5:c4:e8:33:c9:44:66:8c:12:b9:02: - 19:4f:a7:18:a0:48:34:58:14:2d:c0:dc:44:b8:d9:ce:76:01: - 21:0e:51:a8:7b:ba:db:93:e4:65:ab:b2:cb:b9:e1:30:26:b5: - 9e:5e:df:62:15:86:45:99:f9:25:03:e3:b9:36:7f:8c:a7:e2: - 85:d1:ac:09:5b:9f:d5:e3:ad:e5:a2:9b:e0:75:f0:61:8d:cd: - b8:9d:5e:2f:b4:92:aa:6b:ca:05:95:84:b9:27:bd:e4:1e:d9: - b6:74:1d:db:ec:08:35:39:a3:c0:64:7c:ab:86:8a:74:06:e1: - 4d:f1:e6:bd:81:5d:2b:be:4d:d9:b2:b0:6e:cb:0a:df:e8:6d: - 64:b3:c6:5a:28:22:82:d5:5b:e2:9e:84:1e:d1:06:1d:32:1b: - 05:26:fd:e8:19:c9:25:81:4b:f7:78:09:b7:16:a1:63:82:b0: - 79:68:89:72 + 5e:87:35:21:15:89:4e:ac:9a:8e:db:d2:dc:83:6e:9e:64:b9: + 30:f8:91:f7:9f:c4:de:b4:92:bf:05:4a:1b:e3:12:0f:b0:0d: + d8:8f:fd:f9:e6:e8:2c:24:e0:88:cc:58:5d:3b:a3:23:95:86: + b2:1f:0f:fb:02:95:c4:16:04:24:05:bb:65:e4:48:80:6e:64: + 33:ed:a0:71:7d:21:f5:6f:70:72:07:54:b2:e7:79:98:8d:b5: + 2b:0d:68:8e:3a:be:e3:91:f8:6a:60:d1:51:20:08:83:43:18: + 5a:49:e2:66:21:aa:df:d2:b1:90:96:5a:99:6f:64:a0:96:7f: + e5:9b:3f:82:d5:42:8c:7d:fa:9f:b1:62:6c:e6:42:f6:1d:ab: + aa:e2:a4:05:33:99:4e:67:18:46:14:16:23:b8:46:db:d1:28: + a3:2c:2a:97:32:c3:02:e8:a0:9f:4f:e9:e6:c9:7e:c8:63:0d: + ff:de:95:f4:4d:f0:ca:57:49:9a:07:4b:5a:13:96:bc:49:10: + 5c:3c:92:ce:1e:dd:10:d6:dc:6b:07:f0:ae:3e:0c:d0:05:1f: + 00:08:79:0c:2a:e5:03:96:7d:1e:cb:3f:b7:f6:30:07:39:66: + 8b:9a:b4:80:1c:e2:d2:7d:e8:bc:91:26:c5:9a:ec:a1:25:26: + 56:0a:7b:39 -----BEGIN CERTIFICATE----- MIIDWjCCAkKgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UEAwwEQiBD -QTAeFw0xNDA4MTQwMjQ3MzFaFw0yNDA4MTEwMjQ3MzFaMGAxCzAJBgNVBAYTAlVT +QTAeFw0xNjAyMDgyMzM0NThaFw0yNjAyMDUyMzM0NThaMGAxCzAJBgNVBAYTAlVT MRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRAw DgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAkxMjcuMC4wLjEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDMMqw41ZucDktq7ZKq5lsrOZuPSEfQDZw9aNVH -o7hhp1OAPsyNQxGz5Mmxi3jate0RfaRMNe2Q6zB5G/9IlIa+HfW4sGFAf9fVkIW4 -4BS6Oqb7q/ElE3VFipK9xdQY5/4tqxa60+AA9QvP/wAodfbdS57RG25a/7fAfYRy -TbCej5LsgdF8ZY/5b1+y6gZXKjQjLed3TYFm0oJl5BR32d4CeSbypIGyw9sPbOLY -4C97kxWwKR2hABaHDQlzRACtnqbfcARm7eG+PezrhGfX9UCZKOvGKlY9kRrJWmVW -uUsJ478sGRCgJEJNxBWFBUmdcVLTS3tTaMcqPCd9qNPCfuT/AgMBAAGjbzBtMAwG -A1UdEwEB/wQCMAAwHQYDVR0OBBYEFHrfYYJmc+Wf4oSZJiIYGC1cWzanMB8GA1Ud -IwQYMBaAFHZ/6Pah95FWvZx+ZlyX8KUdbAYoMB0GA1UdJQQWMBQGCCsGAQUFBwMB -BggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAWTHW4jwOMcVcpEBRXesVPS5Y -E8YPJs+G9+7RMDGBg4aD6r4cvckgbqBHTEY4Lh6PcNqAOPTXnFmdfyPYKsn+/ulX -X9lpWOaGGa87CKGtUOXE6DPJRGaMErkCGU+nGKBINFgULcDcRLjZznYBIQ5RqHu6 -25PkZauyy7nhMCa1nl7fYhWGRZn5JQPjuTZ/jKfihdGsCVuf1eOt5aKb4HXwYY3N -uJ1eL7SSqmvKBZWEuSe95B7ZtnQd2+wINTmjwGR8q4aKdAbhTfHmvYFdK75N2bKw -bssK3+htZLPGWigigtVb4p6EHtEGHTIbBSb96BnJJYFL93gJtxahY4KweWiJcg== +DQEBAQUAA4IBDwAwggEKAoIBAQDKbD3W7+bI1KOoUuH4XfdOd6yjZG+L1D7NGIw5 +8hBk9/NhGs6P2DIawfaIUQoSB9WIXPVFVtCfhxd43k3Q/fphge+gazgCOz2KTh8l +dPAFwxsQ86RSbWiDr4NpFlTU+UKCmJ6STIIzNCmxL2DT8gA61psgzCdXvtoptHT3 +qvbwWkUOhdoC1MGWgSagpHelVLQkevWf5ghCrNisAPf8ikMNyba3o03mUNkz+hgo +snfdo/X6MDL5vyUsl5EfaSZcHukrJCZdkJGxjlwHKrw5pAe2KITddYcgUBOrtDxR +I+XX6onyqf3ah7DSmhQgrs/5Fht4uKKUUC+GTCAnCNBEgKN5AgMBAAGjbzBtMAwG +A1UdEwEB/wQCMAAwHQYDVR0OBBYEFHg2k1gfc3yTyq67mk6nN/GDA0vPMB8GA1Ud +IwQYMBaAFA2vvMMxCcad+ETSUegT/yR4nYN2MB0GA1UdJQQWMBQGCCsGAQUFBwMB +BggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAXoc1IRWJTqyajtvS3INunmS5 +MPiR95/E3rSSvwVKG+MSD7AN2I/9+eboLCTgiMxYXTujI5WGsh8P+wKVxBYEJAW7 +ZeRIgG5kM+2gcX0h9W9wcgdUsud5mI21Kw1ojjq+45H4amDRUSAIg0MYWkniZiGq +39KxkJZamW9koJZ/5Zs/gtVCjH36n7FibOZC9h2rquKkBTOZTmcYRhQWI7hG29Eo +oywqlzLDAuign0/p5sl+yGMN/96V9E3wyldJmgdLWhOWvEkQXDySzh7dENbcawfw +rj4M0AUfAAh5DCrlA5Z9Hss/t/YwBzlmi5q0gBzi0n3ovJEmxZrsoSUmVgp7OQ== +-----END CERTIFICATE----- +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4096 (0x1000) + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=C CA + Validity + Not Before: Jan 4 00:00:00 2016 GMT + Not After : Jan 2 00:00:00 2026 GMT + Subject: CN=B CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:a2:a0:93:17:1e:ee:f0:fb:87:1f:71:ca:6b:b9: + bd:2d:67:38:2a:24:c7:c3:c2:88:4d:ca:f2:50:33: + 60:1d:6f:61:a5:61:02:a4:a7:76:2b:89:43:78:a7: + 0a:27:04:dc:a5:5b:6e:a8:4c:29:f2:25:c6:c0:32: + 20:e0:01:8d:a1:16:15:c9:b5:d8:17:7d:e0:e8:90: + 89:a3:f5:96:1f:90:c6:e3:10:1a:f9:f5:6a:d5:41: + ce:cd:a8:fc:36:77:2f:a2:d7:8e:39:50:36:65:4d: + a7:83:6c:e1:a4:cc:f6:6b:c0:7b:c8:98:f4:01:3f: + 94:d3:d6:11:1d:b3:ef:95:c8:ea:07:d9:5e:fd:82: + 4f:23:4d:08:89:fb:68:2d:82:12:98:e0:87:f2:7a: + c7:76:98:4c:ca:1d:3e:e8:bc:72:dd:b0:b7:41:84: + 6e:39:cd:a9:35:e8:ee:2a:d1:54:cd:21:ed:6f:a4: + ab:e9:d8:c9:d2:e9:11:66:66:78:33:ae:d8:78:75: + ac:1e:ad:0e:23:82:35:13:96:ed:eb:3e:58:eb:27: + fb:1b:fd:27:6e:f0:c3:ff:88:cc:cc:63:35:23:3d: + ce:4d:2e:2d:dc:b3:91:8e:d8:d8:5b:6a:92:28:c5: + e9:a4:02:76:34:e0:6d:41:61:43:71:e1:59:b3:c2: + ce:f7 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Subject Key Identifier: + 0D:AF:BC:C3:31:09:C6:9D:F8:44:D2:51:E8:13:FF:24:78:9D:83:76 + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + Signature Algorithm: sha256WithRSAEncryption + 28:52:54:55:5c:5b:4f:af:4c:66:cc:c3:71:dd:3e:60:48:76: + c3:f0:c0:40:30:f6:44:06:73:2f:c5:b1:1c:6a:e9:6f:fd:92: + 8d:40:38:eb:46:de:58:cd:68:0f:cd:7f:28:a2:79:29:92:ae: + 68:f2:ba:0a:f1:e6:17:58:a4:3b:ee:61:6c:d6:5d:2a:07:61: + b0:31:c9:9b:dc:08:32:b8:d8:ac:14:9c:1a:ec:21:7d:46:63: + 75:67:46:36:ec:25:f0:e6:ed:3f:5d:b7:fd:06:67:46:80:a0: + b9:a8:25:e7:05:0a:f9:a7:20:48:d4:71:b4:3f:0b:1c:4d:f4: + 73:8b:cc:9f:67:cf:36:43:e2:82:d5:d5:4e:4c:71:74:5c:db: + ba:35:bf:1e:9e:63:46:d0:c7:b9:f4:2a:92:23:c7:59:af:5d: + b1:24:7c:ff:1c:08:0d:2a:50:79:57:1c:a2:45:38:a5:3e:d7: + c8:5c:91:f2:69:70:d1:47:4a:55:bc:84:dc:9b:9f:ae:f2:94: + 1c:22:65:11:4c:7c:e1:3c:ae:d4:e6:11:fc:3f:d8:53:6b:65: + 4a:7c:44:bf:91:bd:b0:3e:df:b5:f5:c5:8e:1f:a5:19:83:2a: + 8d:4e:13:3d:58:45:8e:11:b6:9e:96:7a:7a:6e:0b:e5:1a:66: + 7a:00:0e:75 +-----BEGIN CERTIFICATE----- +MIIC3DCCAcSgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UEAwwEQyBD +QTAeFw0xNjAxMDQwMDAwMDBaFw0yNjAxMDIwMDAwMDBaMA8xDTALBgNVBAMMBEIg +Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCioJMXHu7w+4cfccpr +ub0tZzgqJMfDwohNyvJQM2Adb2GlYQKkp3YriUN4pwonBNylW26oTCnyJcbAMiDg +AY2hFhXJtdgXfeDokImj9ZYfkMbjEBr59WrVQc7NqPw2dy+i1445UDZlTaeDbOGk +zPZrwHvImPQBP5TT1hEds++VyOoH2V79gk8jTQiJ+2gtghKY4Ifyesd2mEzKHT7o +vHLdsLdBhG45zak16O4q0VTNIe1vpKvp2MnS6RFmZngzrth4dawerQ4jgjUTlu3r +PljrJ/sb/Sdu8MP/iMzMYzUjPc5NLi3cs5GO2NhbapIoxemkAnY04G1BYUNx4Vmz +ws73AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFA2vvMMxCcad ++ETSUegT/yR4nYN2MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAQEA +KFJUVVxbT69MZszDcd0+YEh2w/DAQDD2RAZzL8WxHGrpb/2SjUA460beWM1oD81/ +KKJ5KZKuaPK6CvHmF1ikO+5hbNZdKgdhsDHJm9wIMrjYrBScGuwhfUZjdWdGNuwl +8ObtP123/QZnRoCguagl5wUK+acgSNRxtD8LHE30c4vMn2fPNkPigtXVTkxxdFzb +ujW/Hp5jRtDHufQqkiPHWa9dsSR8/xwIDSpQeVccokU4pT7XyFyR8mlw0UdKVbyE +3JufrvKUHCJlEUx84Tyu1OYR/D/YU2tlSnxEv5G9sD7ftfXFjh+lGYMqjU4TPVhF +jhG2npZ6em4L5RpmegAOdQ== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 4097 (0x1001) - Signature Algorithm: sha256WithRSAEncryption - Issuer: CN=C CA - Validity - Not Before: Aug 14 02:47:31 2014 GMT - Not After : Aug 11 02:47:31 2024 GMT - Subject: CN=B CA - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) - Modulus: - 00:af:0f:4e:5f:ef:a4:fe:fc:3e:e4:30:fa:e3:d5: - 9a:9f:32:e2:64:a3:d9:4a:80:f4:1d:51:19:88:79: - fe:1f:a0:02:f5:55:e3:66:03:32:51:20:15:55:09: - 48:e5:28:87:0e:95:f3:fc:4d:15:4c:34:ce:eb:e4: - 53:0a:44:72:db:ca:b4:53:72:74:34:82:33:ee:51: - 46:fa:9b:95:5a:cf:2a:da:ba:ae:46:c7:f2:da:0b: - b9:db:ea:8f:8d:09:98:a1:d4:a9:48:85:fd:d4:3c: - 59:69:90:e9:9c:91:88:6e:af:3b:16:ec:66:7d:a8: - 1f:5b:4d:d9:64:19:ed:8d:e1:11:db:d6:1e:24:05: - 8b:25:17:41:9f:a2:99:17:19:9a:d5:a2:00:93:c2: - 2d:f0:34:aa:84:39:82:ff:e8:cd:2d:62:82:33:5d: - 07:6b:35:b6:74:cc:10:c2:9e:69:f4:54:2a:45:17: - 0f:d7:7c:f2:6d:22:c5:be:55:11:3c:40:25:24:f9: - 88:79:f7:32:eb:2a:5a:00:cd:fe:29:fa:14:74:67: - 24:62:51:f3:76:d7:e2:2f:7f:10:15:2d:a8:1c:17: - c6:9b:ab:be:f3:4b:16:30:f1:82:8c:e7:da:f0:9e: - 4e:14:1b:5d:92:41:61:ce:26:c0:53:7b:1d:21:b5: - 73:9f - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: critical - CA:TRUE - X509v3 Subject Key Identifier: - 76:7F:E8:F6:A1:F7:91:56:BD:9C:7E:66:5C:97:F0:A5:1D:6C:06:28 - X509v3 Key Usage: critical - Certificate Sign, CRL Sign - Signature Algorithm: sha256WithRSAEncryption - bc:3e:d1:ed:69:da:91:cf:32:bc:0f:39:17:ec:d5:37:46:1e: - 0e:d9:d3:78:d8:62:ea:03:d3:1c:d0:c6:34:45:cb:b2:50:ce: - e2:03:96:a7:43:3f:1c:ff:58:93:70:bf:b2:98:e8:31:21:be: - b6:89:e7:dc:ae:9d:5d:12:36:78:6f:ef:cc:be:b3:bb:ec:27: - d4:56:ef:69:49:d8:cd:33:7a:ec:76:34:de:bd:91:3f:b1:9c: - 67:23:94:fa:60:44:82:47:30:c1:84:f8:a5:d3:e1:fb:cf:c0: - bd:53:fb:a9:ef:96:79:aa:34:4a:d1:b3:e4:f2:68:a4:d3:a8: - 75:1c:19:a7:42:a7:62:0b:46:b8:e0:05:3d:c6:51:2c:77:09: - a1:fc:b7:e8:a6:5d:b6:d2:9d:75:09:2b:5c:b7:00:42:31:a4: - be:ea:c5:3c:3d:9f:02:8d:69:bc:d0:ad:d5:1c:99:51:4c:3e: - 0b:96:47:c5:85:79:3c:10:5b:5c:9e:e8:a7:ee:f2:46:47:b4: - fc:13:94:7b:1d:a5:3f:da:b0:3c:7a:08:bd:9e:1d:36:44:27: - 0a:ab:07:b3:91:d0:ba:d2:6a:d5:a0:a5:91:62:b1:73:0b:07: - 07:6f:00:e9:6a:e7:f5:60:cb:f6:84:38:8b:2e:5e:02:dd:7e: - f3:d9:1e:1d ------BEGIN CERTIFICATE----- -MIIC3DCCAcSgAwIBAgICEAEwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UEAwwEQyBD -QTAeFw0xNDA4MTQwMjQ3MzFaFw0yNDA4MTEwMjQ3MzFaMA8xDTALBgNVBAMMBEIg -Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvD05f76T+/D7kMPrj -1ZqfMuJko9lKgPQdURmIef4foAL1VeNmAzJRIBVVCUjlKIcOlfP8TRVMNM7r5FMK -RHLbyrRTcnQ0gjPuUUb6m5Vazyrauq5Gx/LaC7nb6o+NCZih1KlIhf3UPFlpkOmc -kYhurzsW7GZ9qB9bTdlkGe2N4RHb1h4kBYslF0GfopkXGZrVogCTwi3wNKqEOYL/ -6M0tYoIzXQdrNbZ0zBDCnmn0VCpFFw/XfPJtIsW+VRE8QCUk+Yh59zLrKloAzf4p -+hR0ZyRiUfN21+IvfxAVLagcF8abq77zSxYw8YKM59rwnk4UG12SQWHOJsBTex0h -tXOfAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHZ/6Pah95FW -vZx+ZlyX8KUdbAYoMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAQEA -vD7R7Wnakc8yvA85F+zVN0YeDtnTeNhi6gPTHNDGNEXLslDO4gOWp0M/HP9Yk3C/ -spjoMSG+tonn3K6dXRI2eG/vzL6zu+wn1FbvaUnYzTN67HY03r2RP7GcZyOU+mBE -gkcwwYT4pdPh+8/AvVP7qe+Weao0StGz5PJopNOodRwZp0KnYgtGuOAFPcZRLHcJ -ofy36KZdttKddQkrXLcAQjGkvurFPD2fAo1pvNCt1RyZUUw+C5ZHxYV5PBBbXJ7o -p+7yRke0/BOUex2lP9qwPHoIvZ4dNkQnCqsHs5HQutJq1aClkWKxcwsHB28A6Wrn -9WDL9oQ4iy5eAt1+89keHQ== ------END CERTIFICATE----- -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 4099 (0x1003) - Signature Algorithm: sha256WithRSAEncryption + Signature Algorithm: sha256WithRSAEncryption Issuer: CN=D Root CA Validity - Not Before: Aug 14 02:47:31 2014 GMT - Not After : Aug 11 02:47:31 2024 GMT + Not Before: Jan 3 00:00:00 2016 GMT + Not After : Jan 2 00:00:00 2026 GMT Subject: CN=C CA Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) - Modulus: - 00:ce:78:cf:1a:cb:5f:9f:b8:fb:9b:35:ee:dd:24: - f1:6a:f4:cc:6a:63:1f:89:20:20:be:51:ba:2b:a5: - e1:46:ad:df:4e:1e:ab:8d:2c:7b:ac:8f:d4:a1:48: - f0:72:51:d8:4a:a4:b7:7c:c1:cd:92:c2:4d:74:d7: - 43:e5:58:66:73:57:5d:e0:a6:30:72:38:ad:7a:04: - 1a:45:4a:19:72:16:06:e1:3e:04:fa:06:29:69:61: - 62:48:af:51:17:4f:31:a2:65:6b:61:9d:5a:54:91: - f9:67:47:7b:4e:37:60:3a:86:03:cd:68:df:5c:a8: - 0a:d0:33:e7:51:b0:b3:be:ba:90:9b:d1:e3:69:6e: - 5c:17:9a:b2:5b:cf:af:c5:6a:fd:32:f5:56:06:8c: - d8:11:dd:ed:fd:09:1f:88:6e:e3:e5:49:21:70:e2: - c3:ff:f9:04:fd:09:62:e4:24:a0:f8:63:7b:e8:2d: - c7:41:cf:b5:6f:76:8a:25:3f:a3:27:df:16:d0:cd: - 74:ac:c2:91:16:6d:00:1e:73:f0:19:f6:08:70:bd: - d1:46:82:82:ac:98:1b:df:a0:7c:c7:39:f6:ce:0a: - f8:64:f6:3a:60:9b:f0:61:6d:24:9c:d9:bd:6e:38: - f1:78:19:2b:7f:e8:c0:e3:e7:85:93:02:6e:8c:6d: - 09:f7 + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:c2:21:aa:d2:67:ec:f5:95:9e:c9:00:f2:ee:83: + 26:6c:3c:30:d4:a8:78:dd:0a:a5:d6:81:f0:54:25: + de:8f:9a:0e:8f:5c:06:96:b0:83:b7:13:56:33:9e: + d1:6a:7d:45:40:d8:e5:21:1d:c5:6d:31:34:6f:45: + 22:cf:6f:01:b4:f8:6c:ce:70:d0:e9:0e:ed:04:d9: + 34:7a:91:db:6f:90:94:66:95:26:0b:29:26:4c:6c: + 8b:e3:13:a1:42:29:59:a0:2c:fe:83:a5:3c:3d:e8: + 32:ac:37:a7:ae:b2:79:d3:12:98:5f:c7:fd:4c:49: + 6b:e4:32:40:76:7b:78:ae:a1:61:b1:0a:d1:5c:f3: + 96:13:5f:95:5a:a2:35:c5:63:1b:25:05:8d:3c:08: + d0:b0:28:2a:f3:f6:34:ab:a5:cd:e7:82:2c:35:38: + 8b:f5:41:6c:71:32:c4:13:67:ef:9b:8f:32:ab:7c: + da:e1:6a:92:4b:5b:9e:39:7e:6b:00:f8:8d:e2:b3: + 3b:ad:2f:11:3f:80:d5:19:0e:cc:d4:c1:21:42:46: + 42:2d:d0:5e:ae:63:d1:0a:3e:66:fb:eb:0b:9b:e4: + fe:7a:ca:43:5c:cc:98:6a:e1:fd:32:18:4c:63:4c: + cd:98:9b:be:fa:5b:2d:c4:76:cc:8d:e5:6d:aa:bb: + 5a:37 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: - 51:35:6F:D5:40:65:74:E3:C8:7B:0C:47:12:B5:FC:58:73:7C:16:D1 + 34:19:53:D9:DA:11:B1:FF:00:35:2B:37:00:91:1F:91:C0:F7:2E:0A X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha256WithRSAEncryption - 93:da:2d:fb:32:eb:ce:98:0d:0a:8b:53:17:0f:c9:42:cb:b4: - 70:2d:56:5c:b0:dc:70:2a:d6:2a:b9:21:76:c2:a8:ef:c0:6b: - 7c:ec:d8:c3:1f:e1:7f:41:8d:8a:bd:18:ea:90:08:77:72:19: - c6:aa:97:59:fc:dd:31:e6:73:bb:a6:01:9f:a8:f0:a9:5e:ab: - 14:9a:6d:75:2f:c7:3b:67:a6:4f:74:05:cd:3e:13:c1:e9:39: - 52:99:50:7f:7c:1e:dc:8b:50:40:87:07:30:6d:fb:2b:b9:a0: - 6e:4a:da:3c:ae:66:94:3b:49:a2:e0:24:16:80:d7:8b:56:79: - 4e:b8:6f:1d:f9:9a:21:73:48:bb:11:f8:2e:f9:aa:f4:49:09: - fb:98:6b:87:b8:7b:62:e7:cc:cd:cb:b7:14:1a:d4:38:51:ed: - b3:4c:9f:62:b7:a8:23:e5:f4:1c:a9:e5:d3:2a:61:02:00:83: - 3f:e3:35:a9:50:29:2b:20:51:dd:9f:a4:05:56:bc:2c:0a:a7: - c2:c0:ac:85:48:b0:8f:be:e5:d0:76:81:45:5a:61:8d:65:c6: - 0e:88:21:70:fb:5a:d1:37:ea:dc:d3:a4:c0:43:c8:98:06:b6: - 37:95:14:76:fb:84:97:9f:ca:92:4e:a4:06:23:d1:1a:ce:1f: - 36:3c:a1:47 + 5a:aa:0a:cb:92:8a:cd:ca:49:b4:5e:34:32:46:0a:9e:fd:71: + 30:dd:af:b8:9a:6c:82:87:59:27:ed:df:11:1f:13:fa:c9:d9: + fb:8a:e8:ba:7c:67:33:7e:ea:42:f3:1c:34:91:5c:5f:ed:68: + d7:dc:06:8d:6a:75:38:42:4f:eb:52:55:84:c6:74:9d:53:87: + d6:34:64:19:19:4c:6d:b7:3a:f9:e8:8a:14:4d:00:ec:07:71: + 00:6c:05:80:94:4b:4f:e7:a4:db:26:ee:e1:2b:98:d6:ad:ca: + 32:ab:d6:3a:23:83:30:e8:33:82:82:7d:a5:1e:00:97:be:a8: + 0f:68:d7:ae:8a:4a:52:be:d7:b5:0a:49:4d:a8:f1:25:e3:de: + 41:37:6a:53:1c:b5:0e:b0:fd:b6:db:25:b6:a2:cb:ff:d8:7f: + 98:30:84:15:f0:27:b5:fd:a3:71:35:ad:4c:83:8c:d1:da:49: + a5:97:b3:7d:80:6f:03:40:fe:a3:22:38:58:70:6d:43:01:63: + db:fb:ca:b6:5f:fc:f0:45:b3:57:5a:a6:cc:b9:d0:99:a8:f6: + a4:4f:c6:20:a5:6e:dd:e0:3b:e7:b2:0a:8b:6f:4d:6f:67:57: + e7:c4:58:80:26:5d:1d:27:f9:3e:22:ed:00:bc:fa:8d:8d:eb: + bb:ab:91:a9 -----BEGIN CERTIFICATE----- -MIIC4TCCAcmgAwIBAgICEAMwDQYJKoZIhvcNAQELBQAwFDESMBAGA1UEAwwJRCBS -b290IENBMB4XDTE0MDgxNDAyNDczMVoXDTI0MDgxMTAyNDczMVowDzENMAsGA1UE -AwwEQyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM54zxrLX5+4 -+5s17t0k8Wr0zGpjH4kgIL5Ruiul4Uat304eq40se6yP1KFI8HJR2Eqkt3zBzZLC -TXTXQ+VYZnNXXeCmMHI4rXoEGkVKGXIWBuE+BPoGKWlhYkivURdPMaJla2GdWlSR -+WdHe043YDqGA81o31yoCtAz51Gws766kJvR42luXBeaslvPr8Vq/TL1VgaM2BHd -7f0JH4hu4+VJIXDiw//5BP0JYuQkoPhje+gtx0HPtW92iiU/oyffFtDNdKzCkRZt -AB5z8Bn2CHC90UaCgqyYG9+gfMc59s4K+GT2OmCb8GFtJJzZvW448XgZK3/owOPn -hZMCboxtCfcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUUTVv -1UBldOPIewxHErX8WHN8FtEwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUA -A4IBAQCT2i37MuvOmA0Ki1MXD8lCy7RwLVZcsNxwKtYquSF2wqjvwGt87NjDH+F/ -QY2KvRjqkAh3chnGqpdZ/N0x5nO7pgGfqPCpXqsUmm11L8c7Z6ZPdAXNPhPB6TlS -mVB/fB7ci1BAhwcwbfsruaBuSto8rmaUO0mi4CQWgNeLVnlOuG8d+Zohc0i7Efgu -+ar0SQn7mGuHuHti58zNy7cUGtQ4Ue2zTJ9it6gj5fQcqeXTKmECAIM/4zWpUCkr -IFHdn6QFVrwsCqfCwKyFSLCPvuXQdoFFWmGNZcYOiCFw+1rRN+rc06TAQ8iYBrY3 -lRR2+4SXn8qSTqQGI9Eazh82PKFH +MIIC4TCCAcmgAwIBAgICEAEwDQYJKoZIhvcNAQELBQAwFDESMBAGA1UEAwwJRCBS +b290IENBMB4XDTE2MDEwMzAwMDAwMFoXDTI2MDEwMjAwMDAwMFowDzENMAsGA1UE +AwwEQyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMIhqtJn7PWV +nskA8u6DJmw8MNSoeN0KpdaB8FQl3o+aDo9cBpawg7cTVjOe0Wp9RUDY5SEdxW0x +NG9FIs9vAbT4bM5w0OkO7QTZNHqR22+QlGaVJgspJkxsi+MToUIpWaAs/oOlPD3o +Mqw3p66yedMSmF/H/UxJa+QyQHZ7eK6hYbEK0VzzlhNflVqiNcVjGyUFjTwI0LAo +KvP2NKulzeeCLDU4i/VBbHEyxBNn75uPMqt82uFqkktbnjl+awD4jeKzO60vET+A +1RkOzNTBIUJGQi3QXq5j0Qo+ZvvrC5vk/nrKQ1zMmGrh/TIYTGNMzZibvvpbLcR2 +zI3lbaq7WjcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUNBlT +2doRsf8ANSs3AJEfkcD3LgowDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUA +A4IBAQBaqgrLkorNykm0XjQyRgqe/XEw3a+4mmyCh1kn7d8RHxP6ydn7iui6fGcz +fupC8xw0kVxf7WjX3AaNanU4Qk/rUlWExnSdU4fWNGQZGUxttzr56IoUTQDsB3EA +bAWAlEtP56TbJu7hK5jWrcoyq9Y6I4Mw6DOCgn2lHgCXvqgPaNeuikpSvte1CklN +qPEl495BN2pTHLUOsP222yW2osv/2H+YMIQV8Ce1/aNxNa1Mg4zR2kmll7N9gG8D +QP6jIjhYcG1DAWPb+8q2X/zwRbNXWqbMudCZqPakT8YgpW7d4DvnsgqLb01vZ1fn +xFiAJl0dJ/k+Iu0AvPqNjeu7q5Gp -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) - Serial Number: 12250836319051526300 (0xaa03b6b97685309c) - Signature Algorithm: sha1WithRSAEncryption + Serial Number: 4096 (0x1000) + Signature Algorithm: sha256WithRSAEncryption Issuer: CN=D Root CA Validity - Not Before: Aug 14 02:47:31 2014 GMT - Not After : Aug 11 02:47:31 2024 GMT + Not Before: Jan 2 00:00:00 2016 GMT + Not After : Jan 2 00:00:00 2026 GMT Subject: CN=D Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) - Modulus: - 00:c4:52:21:76:b2:08:c5:8f:63:c4:ec:37:5d:4d: - 8c:26:63:fb:47:7c:fa:20:d1:54:9e:f4:82:bb:bc: - 03:40:cd:6c:cc:65:07:f7:3b:63:7e:bf:c8:39:a1: - 11:05:e3:e0:58:82:1c:ad:04:a2:08:16:08:c8:64: - 44:09:7e:50:eb:6c:b7:5e:ee:51:81:1d:80:47:b2: - 51:7e:ed:9b:37:79:0e:0a:06:61:7f:e0:26:0d:bb: - 72:14:01:f0:a1:4d:71:fd:cc:c2:77:73:7a:bd:f4: - 6a:08:35:5e:ee:02:2d:96:9a:aa:60:c3:5b:ba:79: - 48:a3:7a:95:f9:d5:22:9c:7b:10:ca:8e:b2:57:d7: - dd:7a:e9:c4:8d:79:7f:e9:71:04:15:4f:73:be:ed: - 6a:04:f0:ce:9e:57:00:a2:92:92:c6:17:d3:05:c2: - ef:86:45:50:f4:53:5e:97:62:f6:4a:ee:5f:fb:99: - f9:bf:9c:47:27:63:5b:59:3e:06:3a:0c:5a:a4:9a: - 7f:cd:bf:42:96:7c:ad:f5:06:98:d9:8a:f2:fe:a9: - 1b:4b:c9:16:e1:ed:56:24:2a:21:c8:92:10:53:c7: - 5c:4b:e0:a5:62:59:c7:93:b5:69:de:23:c9:f4:a5: - e4:a4:fd:88:ce:59:48:e3:dc:6b:f4:de:5b:8d:5e: - 05:53 + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:e4:63:48:86:4d:1f:34:4d:c9:b2:f3:14:af:d3: + ec:68:bd:ac:b6:ac:e4:11:fd:81:d3:4c:7c:dd:03: + d7:4e:44:30:9d:53:7a:4d:cf:25:29:ef:b5:f5:83: + b3:30:10:3b:97:f2:63:8c:40:41:fd:18:88:81:c5: + 53:26:90:f7:77:b1:01:5f:d7:7a:04:73:85:9a:b3: + e8:6e:40:7b:6a:2b:1c:b4:0f:52:83:ad:08:cb:58: + c2:71:87:85:b3:81:8c:21:88:aa:d5:4f:0b:84:c8: + 52:b0:cf:c4:cf:c7:72:8f:6a:2f:07:a2:2b:33:3d: + 6c:aa:00:1f:ef:c9:61:f6:58:8d:3a:8f:23:6b:75: + a0:cf:86:9d:02:0f:ca:2b:d2:75:f3:b6:fe:14:26: + 31:d4:31:28:e4:d1:cf:f7:4d:12:58:d8:ac:f8:d3: + f2:ae:d6:6e:72:dc:07:b8:d2:f2:76:0d:bf:a3:c1: + 18:63:58:55:84:4f:a5:82:d3:8f:17:8d:e1:0f:5a: + 9e:7f:69:01:4c:da:90:a1:33:b2:36:4f:91:3d:1f: + 0b:ea:8c:0d:ca:ff:e7:d1:0c:e0:ce:5b:54:6a:b9: + ed:46:38:8c:80:d4:24:9c:71:48:23:80:61:b8:71: + d4:8f:0d:96:b2:c1:f0:29:fc:c7:dd:9d:87:7a:f4: + 16:0d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: - 06:8D:1F:27:78:21:80:08:1A:7E:7F:F8:F7:4D:A2:24:02:4E:3F:01 + B4:73:D6:1A:33:13:BC:9C:23:5D:F6:4B:A2:29:BD:F8:DC:73:49:11 X509v3 Key Usage: critical Certificate Sign, CRL Sign - Signature Algorithm: sha1WithRSAEncryption - 11:ce:c4:71:a2:28:64:97:e8:19:3f:b8:0e:5e:b6:95:30:2b: - a9:12:c8:eb:c6:bb:8a:82:e2:f1:10:68:75:d9:a2:d0:85:48: - d0:62:54:b6:e2:b9:08:6c:04:57:d6:ed:3c:bd:98:52:9e:5f: - 3b:91:aa:70:20:d7:b9:75:07:69:c7:ab:98:85:15:63:d0:13: - 58:08:47:61:eb:b9:fc:b3:3f:a8:fd:50:d6:c2:78:ad:03:07: - 24:50:af:43:a2:21:4f:a3:3d:9e:34:c2:bf:22:2a:69:e0:96: - b0:02:c0:40:81:c3:8b:a7:c8:5f:33:d5:47:0a:4e:35:fe:85: - 3d:2f:e2:aa:5b:e1:46:b9:6d:04:34:0f:c8:90:bc:48:26:a5: - a0:b4:ca:23:8b:f5:a9:47:d2:47:ee:23:c6:7f:b4:01:87:85: - 8a:81:25:47:fc:03:20:1f:26:d6:3e:af:ea:96:66:3d:4b:9e: - cb:cc:e2:9f:99:21:a6:60:51:e5:28:7a:8b:a2:71:cf:db:18: - 62:1d:ce:a8:1c:6e:ed:b9:ae:2d:10:b2:0f:10:65:da:2f:fc: - d4:ab:52:04:b1:f2:bd:1f:0b:6e:50:7e:93:5a:f0:61:8f:a4: - 24:a4:8c:4c:71:e2:36:26:8e:88:b8:8c:5a:3a:a0:75:c3:04: - de:dd:b5:60 + Signature Algorithm: sha256WithRSAEncryption + 6d:f2:9a:c2:eb:36:2b:45:ad:58:b5:59:68:e9:64:ad:75:18: + c0:73:b3:42:a4:ff:c3:25:02:f6:91:9b:a4:4d:0d:3d:49:3e: + d2:6b:c5:75:89:48:7b:fa:34:40:4d:06:4e:a6:cf:c5:3c:d5: + c2:a8:0e:77:2e:66:f1:fb:28:80:15:06:68:cb:9e:8e:27:1b: + 22:02:9f:c2:6b:fc:48:b0:20:25:4b:32:6a:db:99:53:89:4e: + 86:b7:a7:48:ed:1a:3a:f3:87:54:c6:e8:59:a3:95:49:31:39: + 01:54:56:ee:a8:6a:ba:f2:34:30:e1:75:84:1a:a6:4e:14:e0: + 25:58:8a:88:dc:2a:58:1e:22:c6:00:62:57:6d:d8:c3:2e:a6: + 19:05:8f:b9:b9:f3:e9:3e:39:4f:0a:1a:cc:59:ca:b6:89:29: + 59:b3:ad:92:86:8f:c0:ba:7d:7f:55:27:c6:db:aa:b0:0c:45: + 73:cc:18:6e:4d:0e:16:61:ad:d9:96:b6:d5:3e:29:e1:59:8c: + 4e:c9:6c:7a:63:0b:9b:37:0d:d6:31:bf:8c:90:33:97:60:f5: + 3b:24:1a:ad:eb:d0:8b:3c:0f:1c:0a:52:4b:83:ec:35:96:c6: + bb:67:3b:d7:19:78:dc:49:25:c8:b2:44:f5:26:e7:5d:35:4f: + 6a:bd:00:0f -----BEGIN CERTIFICATE----- -MIIC7TCCAdWgAwIBAgIJAKoDtrl2hTCcMA0GCSqGSIb3DQEBBQUAMBQxEjAQBgNV -BAMMCUQgUm9vdCBDQTAeFw0xNDA4MTQwMjQ3MzFaFw0yNDA4MTEwMjQ3MzFaMBQx -EjAQBgNVBAMMCUQgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAMRSIXayCMWPY8TsN11NjCZj+0d8+iDRVJ70gru8A0DNbMxlB/c7Y36/yDmh -EQXj4FiCHK0EoggWCMhkRAl+UOtst17uUYEdgEeyUX7tmzd5DgoGYX/gJg27chQB -8KFNcf3Mwndzer30agg1Xu4CLZaaqmDDW7p5SKN6lfnVIpx7EMqOslfX3XrpxI15 -f+lxBBVPc77tagTwzp5XAKKSksYX0wXC74ZFUPRTXpdi9kruX/uZ+b+cRydjW1k+ -BjoMWqSaf82/QpZ8rfUGmNmK8v6pG0vJFuHtViQqIciSEFPHXEvgpWJZx5O1ad4j -yfSl5KT9iM5ZSOPca/TeW41eBVMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAd -BgNVHQ4EFgQUBo0fJ3ghgAgafn/4902iJAJOPwEwDgYDVR0PAQH/BAQDAgEGMA0G -CSqGSIb3DQEBBQUAA4IBAQARzsRxoihkl+gZP7gOXraVMCupEsjrxruKguLxEGh1 -2aLQhUjQYlS24rkIbARX1u08vZhSnl87kapwINe5dQdpx6uYhRVj0BNYCEdh67n8 -sz+o/VDWwnitAwckUK9DoiFPoz2eNMK/Iipp4JawAsBAgcOLp8hfM9VHCk41/oU9 -L+KqW+FGuW0ENA/IkLxIJqWgtMoji/WpR9JH7iPGf7QBh4WKgSVH/AMgHybWPq/q -lmY9S57LzOKfmSGmYFHlKHqLonHP2xhiHc6oHG7tua4tELIPEGXaL/zUq1IEsfK9 -HwtuUH6TWvBhj6QkpIxMceI2Jo6IuIxaOqB1wwTe3bVg +MIIC5jCCAc6gAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwFDESMBAGA1UEAwwJRCBS +b290IENBMB4XDTE2MDEwMjAwMDAwMFoXDTI2MDEwMjAwMDAwMFowFDESMBAGA1UE +AwwJRCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5GNI +hk0fNE3JsvMUr9PsaL2stqzkEf2B00x83QPXTkQwnVN6Tc8lKe+19YOzMBA7l/Jj +jEBB/RiIgcVTJpD3d7EBX9d6BHOFmrPobkB7aisctA9Sg60Iy1jCcYeFs4GMIYiq +1U8LhMhSsM/Ez8dyj2ovB6IrMz1sqgAf78lh9liNOo8ja3Wgz4adAg/KK9J187b+ +FCYx1DEo5NHP900SWNis+NPyrtZuctwHuNLydg2/o8EYY1hVhE+lgtOPF43hD1qe +f2kBTNqQoTOyNk+RPR8L6owNyv/n0QzgzltUarntRjiMgNQknHFII4BhuHHUjw2W +ssHwKfzH3Z2HevQWDQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBS0c9YaMxO8nCNd9kuiKb343HNJETAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcN +AQELBQADggEBAG3ymsLrNitFrVi1WWjpZK11GMBzs0Kk/8MlAvaRm6RNDT1JPtJr +xXWJSHv6NEBNBk6mz8U81cKoDncuZvH7KIAVBmjLno4nGyICn8Jr/EiwICVLMmrb +mVOJToa3p0jtGjrzh1TG6FmjlUkxOQFUVu6oarryNDDhdYQapk4U4CVYiojcKlge +IsYAYldt2MMuphkFj7m58+k+OU8KGsxZyraJKVmzrZKGj8C6fX9VJ8bbqrAMRXPM +GG5NDhZhrdmWttU+KeFZjE7JbHpjC5s3DdYxv4yQM5dg9TskGq3r0Is8DxwKUkuD +7DWWxrtnO9cZeNxJJciyRPUm5101T2q9AA8= -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/multi-root-chain2.pem b/net/data/ssl/certificates/multi-root-chain2.pem index 8c465a28..7807e92 100644 --- a/net/data/ssl/certificates/multi-root-chain2.pem +++ b/net/data/ssl/certificates/multi-root-chain2.pem
@@ -1,328 +1,301 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEAzDKsONWbnA5Lau2SquZbKzmbj0hH0A2cPWjVR6O4YadTgD7M -jUMRs+TJsYt42rXtEX2kTDXtkOsweRv/SJSGvh31uLBhQH/X1ZCFuOAUujqm+6vx -JRN1RYqSvcXUGOf+LasWutPgAPULz/8AKHX23Uue0RtuWv+3wH2Eck2wno+S7IHR -fGWP+W9fsuoGVyo0Iy3nd02BZtKCZeQUd9neAnkm8qSBssPbD2zi2OAve5MVsCkd -oQAWhw0Jc0QArZ6m33AEZu3hvj3s64Rn1/VAmSjrxipWPZEayVplVrlLCeO/LBkQ -oCRCTcQVhQVJnXFS00t7U2jHKjwnfajTwn7k/wIDAQABAoIBAQCKdiXP2BBPLmY3 -WGbmmZLiaYqxCqsfSctS3L4aeMqy9Poq8OpVM1BSsmWNjWxiqY/aF18MCllPthrF -VJWzCnufeMNA++DGEqow93GlXdTQPqsx5nJ62InhoMhGBFoAlXcGUof0IW04WPEs -ldXumabOgdNsKXSYIePgk3v24fVMXgnvj1TxgMhtSSP5vmP8h0/7pNnnfjWrBZNg -B2bVqCYQ6AaxHRivLFsD85nBdSXl8La5lfoSCgvpWHKtIUvUeZrBAagxK2gGj6zg -sJvKs4EnGUdzX0eGheLaJtdVXEdxWIj9HmusLFF02wvgq5yS6Hyj1hz6YHaJomb5 -mHGVcBDZAoGBAPNTRlNfiZ9fB21FFEufPx7YxEbqS4BFthBqLfatG8fM1gRkbz9m -Dy/FSmgPQMxaqA5vjE8jhVlVTOCXznT8TsAhuof/ORmmFDvHleJs1iaqw/xhgOJv -avMc+BZTOktBX4u9E4wSVwj+QfhutssCeG+SHtS9uVyiGAVUSIyhCNNjAoGBANbV -ozqAElO7pF0frWIIZ7gGbPuEIULVqWhNQWZF19gvBf8sJQ+gfT0OhPRvopr734sc -+/m2b1PORFVGVPmRYMXrNds7qvtFzoDSvki0X3dsi6TXFSY7lTI4lAyvCOxQcjbM -x8sD9Csaips/i3EAV885BkG2QPMH+jEmp5U0y9C1AoGBAIgDsroEG4/ktOgVx0SG -XehGT2E8srufPChs0gijt3W2QKPv6GfOCwsvA2qrrBMPUgXPwOSz/GR1VCXvdc7b -AsJPmE9REYAO4ByScmxBXmv65Nb9QehRU71WIi+IkntiraAVLwoLbm9ugT331WIh -nWTwjx9odmcbjMXd2TgTBDX1AoGAYysCygJMc3JukL4KnvIaToxIymFXqS5PoOHo -ink7BYPPVNbf1LLUnNaS8PKHMNuLeP/MIJziDuFsEaEBoKJG9ZV5qtWEO7Ehfb3K -MG1ylAH7BAB0ts1SNXiAfspdaBhKYJlusHwGvc7mpHtUtrjdz74W8UZb/NN13jJl -sS5J1vECgYEAnpWIaGs3BCJWW8BSuuOx6NMSwFDfcpzqnJ6KvowdWVkW7lYK7kfZ -JIZnNragGbybBDUcUcdSdz+V0GtzUj6oKYI420debUlQ6/Xc+Yud+esqf23ODS3A -MsuJkwHALBIiocA552KN4Bsd69HRd91r/14G5BXtsjpsfhCXVPJreJ0= ------END RSA PRIVATE KEY----- Certificate: Data: Version: 3 (0x2) Serial Number: 4096 (0x1000) - Signature Algorithm: sha256WithRSAEncryption + Signature Algorithm: sha256WithRSAEncryption Issuer: CN=B CA Validity - Not Before: Aug 14 02:47:31 2014 GMT - Not After : Aug 11 02:47:31 2024 GMT + Not Before: Feb 8 23:34:58 2016 GMT + Not After : Feb 5 23:34:58 2026 GMT Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1 Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) - Modulus: - 00:cc:32:ac:38:d5:9b:9c:0e:4b:6a:ed:92:aa:e6: - 5b:2b:39:9b:8f:48:47:d0:0d:9c:3d:68:d5:47:a3: - b8:61:a7:53:80:3e:cc:8d:43:11:b3:e4:c9:b1:8b: - 78:da:b5:ed:11:7d:a4:4c:35:ed:90:eb:30:79:1b: - ff:48:94:86:be:1d:f5:b8:b0:61:40:7f:d7:d5:90: - 85:b8:e0:14:ba:3a:a6:fb:ab:f1:25:13:75:45:8a: - 92:bd:c5:d4:18:e7:fe:2d:ab:16:ba:d3:e0:00:f5: - 0b:cf:ff:00:28:75:f6:dd:4b:9e:d1:1b:6e:5a:ff: - b7:c0:7d:84:72:4d:b0:9e:8f:92:ec:81:d1:7c:65: - 8f:f9:6f:5f:b2:ea:06:57:2a:34:23:2d:e7:77:4d: - 81:66:d2:82:65:e4:14:77:d9:de:02:79:26:f2:a4: - 81:b2:c3:db:0f:6c:e2:d8:e0:2f:7b:93:15:b0:29: - 1d:a1:00:16:87:0d:09:73:44:00:ad:9e:a6:df:70: - 04:66:ed:e1:be:3d:ec:eb:84:67:d7:f5:40:99:28: - eb:c6:2a:56:3d:91:1a:c9:5a:65:56:b9:4b:09:e3: - bf:2c:19:10:a0:24:42:4d:c4:15:85:05:49:9d:71: - 52:d3:4b:7b:53:68:c7:2a:3c:27:7d:a8:d3:c2:7e: - e4:ff + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:ca:6c:3d:d6:ef:e6:c8:d4:a3:a8:52:e1:f8:5d: + f7:4e:77:ac:a3:64:6f:8b:d4:3e:cd:18:8c:39:f2: + 10:64:f7:f3:61:1a:ce:8f:d8:32:1a:c1:f6:88:51: + 0a:12:07:d5:88:5c:f5:45:56:d0:9f:87:17:78:de: + 4d:d0:fd:fa:61:81:ef:a0:6b:38:02:3b:3d:8a:4e: + 1f:25:74:f0:05:c3:1b:10:f3:a4:52:6d:68:83:af: + 83:69:16:54:d4:f9:42:82:98:9e:92:4c:82:33:34: + 29:b1:2f:60:d3:f2:00:3a:d6:9b:20:cc:27:57:be: + da:29:b4:74:f7:aa:f6:f0:5a:45:0e:85:da:02:d4: + c1:96:81:26:a0:a4:77:a5:54:b4:24:7a:f5:9f:e6: + 08:42:ac:d8:ac:00:f7:fc:8a:43:0d:c9:b6:b7:a3: + 4d:e6:50:d9:33:fa:18:28:b2:77:dd:a3:f5:fa:30: + 32:f9:bf:25:2c:97:91:1f:69:26:5c:1e:e9:2b:24: + 26:5d:90:91:b1:8e:5c:07:2a:bc:39:a4:07:b6:28: + 84:dd:75:87:20:50:13:ab:b4:3c:51:23:e5:d7:ea: + 89:f2:a9:fd:da:87:b0:d2:9a:14:20:ae:cf:f9:16: + 1b:78:b8:a2:94:50:2f:86:4c:20:27:08:d0:44:80: + a3:79 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: - 7A:DF:61:82:66:73:E5:9F:E2:84:99:26:22:18:18:2D:5C:5B:36:A7 + 78:36:93:58:1F:73:7C:93:CA:AE:BB:9A:4E:A7:37:F1:83:03:4B:CF X509v3 Authority Key Identifier: - keyid:76:7F:E8:F6:A1:F7:91:56:BD:9C:7E:66:5C:97:F0:A5:1D:6C:06:28 + keyid:0D:AF:BC:C3:31:09:C6:9D:F8:44:D2:51:E8:13:FF:24:78:9D:83:76 X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication Signature Algorithm: sha256WithRSAEncryption - 59:31:d6:e2:3c:0e:31:c5:5c:a4:40:51:5d:eb:15:3d:2e:58: - 13:c6:0f:26:cf:86:f7:ee:d1:30:31:81:83:86:83:ea:be:1c: - bd:c9:20:6e:a0:47:4c:46:38:2e:1e:8f:70:da:80:38:f4:d7: - 9c:59:9d:7f:23:d8:2a:c9:fe:fe:e9:57:5f:d9:69:58:e6:86: - 19:af:3b:08:a1:ad:50:e5:c4:e8:33:c9:44:66:8c:12:b9:02: - 19:4f:a7:18:a0:48:34:58:14:2d:c0:dc:44:b8:d9:ce:76:01: - 21:0e:51:a8:7b:ba:db:93:e4:65:ab:b2:cb:b9:e1:30:26:b5: - 9e:5e:df:62:15:86:45:99:f9:25:03:e3:b9:36:7f:8c:a7:e2: - 85:d1:ac:09:5b:9f:d5:e3:ad:e5:a2:9b:e0:75:f0:61:8d:cd: - b8:9d:5e:2f:b4:92:aa:6b:ca:05:95:84:b9:27:bd:e4:1e:d9: - b6:74:1d:db:ec:08:35:39:a3:c0:64:7c:ab:86:8a:74:06:e1: - 4d:f1:e6:bd:81:5d:2b:be:4d:d9:b2:b0:6e:cb:0a:df:e8:6d: - 64:b3:c6:5a:28:22:82:d5:5b:e2:9e:84:1e:d1:06:1d:32:1b: - 05:26:fd:e8:19:c9:25:81:4b:f7:78:09:b7:16:a1:63:82:b0: - 79:68:89:72 + 5e:87:35:21:15:89:4e:ac:9a:8e:db:d2:dc:83:6e:9e:64:b9: + 30:f8:91:f7:9f:c4:de:b4:92:bf:05:4a:1b:e3:12:0f:b0:0d: + d8:8f:fd:f9:e6:e8:2c:24:e0:88:cc:58:5d:3b:a3:23:95:86: + b2:1f:0f:fb:02:95:c4:16:04:24:05:bb:65:e4:48:80:6e:64: + 33:ed:a0:71:7d:21:f5:6f:70:72:07:54:b2:e7:79:98:8d:b5: + 2b:0d:68:8e:3a:be:e3:91:f8:6a:60:d1:51:20:08:83:43:18: + 5a:49:e2:66:21:aa:df:d2:b1:90:96:5a:99:6f:64:a0:96:7f: + e5:9b:3f:82:d5:42:8c:7d:fa:9f:b1:62:6c:e6:42:f6:1d:ab: + aa:e2:a4:05:33:99:4e:67:18:46:14:16:23:b8:46:db:d1:28: + a3:2c:2a:97:32:c3:02:e8:a0:9f:4f:e9:e6:c9:7e:c8:63:0d: + ff:de:95:f4:4d:f0:ca:57:49:9a:07:4b:5a:13:96:bc:49:10: + 5c:3c:92:ce:1e:dd:10:d6:dc:6b:07:f0:ae:3e:0c:d0:05:1f: + 00:08:79:0c:2a:e5:03:96:7d:1e:cb:3f:b7:f6:30:07:39:66: + 8b:9a:b4:80:1c:e2:d2:7d:e8:bc:91:26:c5:9a:ec:a1:25:26: + 56:0a:7b:39 -----BEGIN CERTIFICATE----- MIIDWjCCAkKgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UEAwwEQiBD -QTAeFw0xNDA4MTQwMjQ3MzFaFw0yNDA4MTEwMjQ3MzFaMGAxCzAJBgNVBAYTAlVT +QTAeFw0xNjAyMDgyMzM0NThaFw0yNjAyMDUyMzM0NThaMGAxCzAJBgNVBAYTAlVT MRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRAw DgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAkxMjcuMC4wLjEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDMMqw41ZucDktq7ZKq5lsrOZuPSEfQDZw9aNVH -o7hhp1OAPsyNQxGz5Mmxi3jate0RfaRMNe2Q6zB5G/9IlIa+HfW4sGFAf9fVkIW4 -4BS6Oqb7q/ElE3VFipK9xdQY5/4tqxa60+AA9QvP/wAodfbdS57RG25a/7fAfYRy -TbCej5LsgdF8ZY/5b1+y6gZXKjQjLed3TYFm0oJl5BR32d4CeSbypIGyw9sPbOLY -4C97kxWwKR2hABaHDQlzRACtnqbfcARm7eG+PezrhGfX9UCZKOvGKlY9kRrJWmVW -uUsJ478sGRCgJEJNxBWFBUmdcVLTS3tTaMcqPCd9qNPCfuT/AgMBAAGjbzBtMAwG -A1UdEwEB/wQCMAAwHQYDVR0OBBYEFHrfYYJmc+Wf4oSZJiIYGC1cWzanMB8GA1Ud -IwQYMBaAFHZ/6Pah95FWvZx+ZlyX8KUdbAYoMB0GA1UdJQQWMBQGCCsGAQUFBwMB -BggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAWTHW4jwOMcVcpEBRXesVPS5Y -E8YPJs+G9+7RMDGBg4aD6r4cvckgbqBHTEY4Lh6PcNqAOPTXnFmdfyPYKsn+/ulX -X9lpWOaGGa87CKGtUOXE6DPJRGaMErkCGU+nGKBINFgULcDcRLjZznYBIQ5RqHu6 -25PkZauyy7nhMCa1nl7fYhWGRZn5JQPjuTZ/jKfihdGsCVuf1eOt5aKb4HXwYY3N -uJ1eL7SSqmvKBZWEuSe95B7ZtnQd2+wINTmjwGR8q4aKdAbhTfHmvYFdK75N2bKw -bssK3+htZLPGWigigtVb4p6EHtEGHTIbBSb96BnJJYFL93gJtxahY4KweWiJcg== +DQEBAQUAA4IBDwAwggEKAoIBAQDKbD3W7+bI1KOoUuH4XfdOd6yjZG+L1D7NGIw5 +8hBk9/NhGs6P2DIawfaIUQoSB9WIXPVFVtCfhxd43k3Q/fphge+gazgCOz2KTh8l +dPAFwxsQ86RSbWiDr4NpFlTU+UKCmJ6STIIzNCmxL2DT8gA61psgzCdXvtoptHT3 +qvbwWkUOhdoC1MGWgSagpHelVLQkevWf5ghCrNisAPf8ikMNyba3o03mUNkz+hgo +snfdo/X6MDL5vyUsl5EfaSZcHukrJCZdkJGxjlwHKrw5pAe2KITddYcgUBOrtDxR +I+XX6onyqf3ah7DSmhQgrs/5Fht4uKKUUC+GTCAnCNBEgKN5AgMBAAGjbzBtMAwG +A1UdEwEB/wQCMAAwHQYDVR0OBBYEFHg2k1gfc3yTyq67mk6nN/GDA0vPMB8GA1Ud +IwQYMBaAFA2vvMMxCcad+ETSUegT/yR4nYN2MB0GA1UdJQQWMBQGCCsGAQUFBwMB +BggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAXoc1IRWJTqyajtvS3INunmS5 +MPiR95/E3rSSvwVKG+MSD7AN2I/9+eboLCTgiMxYXTujI5WGsh8P+wKVxBYEJAW7 +ZeRIgG5kM+2gcX0h9W9wcgdUsud5mI21Kw1ojjq+45H4amDRUSAIg0MYWkniZiGq +39KxkJZamW9koJZ/5Zs/gtVCjH36n7FibOZC9h2rquKkBTOZTmcYRhQWI7hG29Eo +oywqlzLDAuign0/p5sl+yGMN/96V9E3wyldJmgdLWhOWvEkQXDySzh7dENbcawfw +rj4M0AUfAAh5DCrlA5Z9Hss/t/YwBzlmi5q0gBzi0n3ovJEmxZrsoSUmVgp7OQ== +-----END CERTIFICATE----- +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 4096 (0x1000) + Signature Algorithm: sha256WithRSAEncryption + Issuer: CN=C CA + Validity + Not Before: Jan 4 00:00:00 2016 GMT + Not After : Jan 2 00:00:00 2026 GMT + Subject: CN=B CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:a2:a0:93:17:1e:ee:f0:fb:87:1f:71:ca:6b:b9: + bd:2d:67:38:2a:24:c7:c3:c2:88:4d:ca:f2:50:33: + 60:1d:6f:61:a5:61:02:a4:a7:76:2b:89:43:78:a7: + 0a:27:04:dc:a5:5b:6e:a8:4c:29:f2:25:c6:c0:32: + 20:e0:01:8d:a1:16:15:c9:b5:d8:17:7d:e0:e8:90: + 89:a3:f5:96:1f:90:c6:e3:10:1a:f9:f5:6a:d5:41: + ce:cd:a8:fc:36:77:2f:a2:d7:8e:39:50:36:65:4d: + a7:83:6c:e1:a4:cc:f6:6b:c0:7b:c8:98:f4:01:3f: + 94:d3:d6:11:1d:b3:ef:95:c8:ea:07:d9:5e:fd:82: + 4f:23:4d:08:89:fb:68:2d:82:12:98:e0:87:f2:7a: + c7:76:98:4c:ca:1d:3e:e8:bc:72:dd:b0:b7:41:84: + 6e:39:cd:a9:35:e8:ee:2a:d1:54:cd:21:ed:6f:a4: + ab:e9:d8:c9:d2:e9:11:66:66:78:33:ae:d8:78:75: + ac:1e:ad:0e:23:82:35:13:96:ed:eb:3e:58:eb:27: + fb:1b:fd:27:6e:f0:c3:ff:88:cc:cc:63:35:23:3d: + ce:4d:2e:2d:dc:b3:91:8e:d8:d8:5b:6a:92:28:c5: + e9:a4:02:76:34:e0:6d:41:61:43:71:e1:59:b3:c2: + ce:f7 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: critical + CA:TRUE + X509v3 Subject Key Identifier: + 0D:AF:BC:C3:31:09:C6:9D:F8:44:D2:51:E8:13:FF:24:78:9D:83:76 + X509v3 Key Usage: critical + Certificate Sign, CRL Sign + Signature Algorithm: sha256WithRSAEncryption + 28:52:54:55:5c:5b:4f:af:4c:66:cc:c3:71:dd:3e:60:48:76: + c3:f0:c0:40:30:f6:44:06:73:2f:c5:b1:1c:6a:e9:6f:fd:92: + 8d:40:38:eb:46:de:58:cd:68:0f:cd:7f:28:a2:79:29:92:ae: + 68:f2:ba:0a:f1:e6:17:58:a4:3b:ee:61:6c:d6:5d:2a:07:61: + b0:31:c9:9b:dc:08:32:b8:d8:ac:14:9c:1a:ec:21:7d:46:63: + 75:67:46:36:ec:25:f0:e6:ed:3f:5d:b7:fd:06:67:46:80:a0: + b9:a8:25:e7:05:0a:f9:a7:20:48:d4:71:b4:3f:0b:1c:4d:f4: + 73:8b:cc:9f:67:cf:36:43:e2:82:d5:d5:4e:4c:71:74:5c:db: + ba:35:bf:1e:9e:63:46:d0:c7:b9:f4:2a:92:23:c7:59:af:5d: + b1:24:7c:ff:1c:08:0d:2a:50:79:57:1c:a2:45:38:a5:3e:d7: + c8:5c:91:f2:69:70:d1:47:4a:55:bc:84:dc:9b:9f:ae:f2:94: + 1c:22:65:11:4c:7c:e1:3c:ae:d4:e6:11:fc:3f:d8:53:6b:65: + 4a:7c:44:bf:91:bd:b0:3e:df:b5:f5:c5:8e:1f:a5:19:83:2a: + 8d:4e:13:3d:58:45:8e:11:b6:9e:96:7a:7a:6e:0b:e5:1a:66: + 7a:00:0e:75 +-----BEGIN CERTIFICATE----- +MIIC3DCCAcSgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UEAwwEQyBD +QTAeFw0xNjAxMDQwMDAwMDBaFw0yNjAxMDIwMDAwMDBaMA8xDTALBgNVBAMMBEIg +Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCioJMXHu7w+4cfccpr +ub0tZzgqJMfDwohNyvJQM2Adb2GlYQKkp3YriUN4pwonBNylW26oTCnyJcbAMiDg +AY2hFhXJtdgXfeDokImj9ZYfkMbjEBr59WrVQc7NqPw2dy+i1445UDZlTaeDbOGk +zPZrwHvImPQBP5TT1hEds++VyOoH2V79gk8jTQiJ+2gtghKY4Ifyesd2mEzKHT7o +vHLdsLdBhG45zak16O4q0VTNIe1vpKvp2MnS6RFmZngzrth4dawerQ4jgjUTlu3r +PljrJ/sb/Sdu8MP/iMzMYzUjPc5NLi3cs5GO2NhbapIoxemkAnY04G1BYUNx4Vmz +ws73AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFA2vvMMxCcad ++ETSUegT/yR4nYN2MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAQEA +KFJUVVxbT69MZszDcd0+YEh2w/DAQDD2RAZzL8WxHGrpb/2SjUA460beWM1oD81/ +KKJ5KZKuaPK6CvHmF1ikO+5hbNZdKgdhsDHJm9wIMrjYrBScGuwhfUZjdWdGNuwl +8ObtP123/QZnRoCguagl5wUK+acgSNRxtD8LHE30c4vMn2fPNkPigtXVTkxxdFzb +ujW/Hp5jRtDHufQqkiPHWa9dsSR8/xwIDSpQeVccokU4pT7XyFyR8mlw0UdKVbyE +3JufrvKUHCJlEUx84Tyu1OYR/D/YU2tlSnxEv5G9sD7ftfXFjh+lGYMqjU4TPVhF +jhG2npZ6em4L5RpmegAOdQ== -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) Serial Number: 4097 (0x1001) - Signature Algorithm: sha256WithRSAEncryption - Issuer: CN=C CA - Validity - Not Before: Aug 14 02:47:31 2014 GMT - Not After : Aug 11 02:47:31 2024 GMT - Subject: CN=B CA - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) - Modulus: - 00:af:0f:4e:5f:ef:a4:fe:fc:3e:e4:30:fa:e3:d5: - 9a:9f:32:e2:64:a3:d9:4a:80:f4:1d:51:19:88:79: - fe:1f:a0:02:f5:55:e3:66:03:32:51:20:15:55:09: - 48:e5:28:87:0e:95:f3:fc:4d:15:4c:34:ce:eb:e4: - 53:0a:44:72:db:ca:b4:53:72:74:34:82:33:ee:51: - 46:fa:9b:95:5a:cf:2a:da:ba:ae:46:c7:f2:da:0b: - b9:db:ea:8f:8d:09:98:a1:d4:a9:48:85:fd:d4:3c: - 59:69:90:e9:9c:91:88:6e:af:3b:16:ec:66:7d:a8: - 1f:5b:4d:d9:64:19:ed:8d:e1:11:db:d6:1e:24:05: - 8b:25:17:41:9f:a2:99:17:19:9a:d5:a2:00:93:c2: - 2d:f0:34:aa:84:39:82:ff:e8:cd:2d:62:82:33:5d: - 07:6b:35:b6:74:cc:10:c2:9e:69:f4:54:2a:45:17: - 0f:d7:7c:f2:6d:22:c5:be:55:11:3c:40:25:24:f9: - 88:79:f7:32:eb:2a:5a:00:cd:fe:29:fa:14:74:67: - 24:62:51:f3:76:d7:e2:2f:7f:10:15:2d:a8:1c:17: - c6:9b:ab:be:f3:4b:16:30:f1:82:8c:e7:da:f0:9e: - 4e:14:1b:5d:92:41:61:ce:26:c0:53:7b:1d:21:b5: - 73:9f - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: critical - CA:TRUE - X509v3 Subject Key Identifier: - 76:7F:E8:F6:A1:F7:91:56:BD:9C:7E:66:5C:97:F0:A5:1D:6C:06:28 - X509v3 Key Usage: critical - Certificate Sign, CRL Sign - Signature Algorithm: sha256WithRSAEncryption - bc:3e:d1:ed:69:da:91:cf:32:bc:0f:39:17:ec:d5:37:46:1e: - 0e:d9:d3:78:d8:62:ea:03:d3:1c:d0:c6:34:45:cb:b2:50:ce: - e2:03:96:a7:43:3f:1c:ff:58:93:70:bf:b2:98:e8:31:21:be: - b6:89:e7:dc:ae:9d:5d:12:36:78:6f:ef:cc:be:b3:bb:ec:27: - d4:56:ef:69:49:d8:cd:33:7a:ec:76:34:de:bd:91:3f:b1:9c: - 67:23:94:fa:60:44:82:47:30:c1:84:f8:a5:d3:e1:fb:cf:c0: - bd:53:fb:a9:ef:96:79:aa:34:4a:d1:b3:e4:f2:68:a4:d3:a8: - 75:1c:19:a7:42:a7:62:0b:46:b8:e0:05:3d:c6:51:2c:77:09: - a1:fc:b7:e8:a6:5d:b6:d2:9d:75:09:2b:5c:b7:00:42:31:a4: - be:ea:c5:3c:3d:9f:02:8d:69:bc:d0:ad:d5:1c:99:51:4c:3e: - 0b:96:47:c5:85:79:3c:10:5b:5c:9e:e8:a7:ee:f2:46:47:b4: - fc:13:94:7b:1d:a5:3f:da:b0:3c:7a:08:bd:9e:1d:36:44:27: - 0a:ab:07:b3:91:d0:ba:d2:6a:d5:a0:a5:91:62:b1:73:0b:07: - 07:6f:00:e9:6a:e7:f5:60:cb:f6:84:38:8b:2e:5e:02:dd:7e: - f3:d9:1e:1d ------BEGIN CERTIFICATE----- -MIIC3DCCAcSgAwIBAgICEAEwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UEAwwEQyBD -QTAeFw0xNDA4MTQwMjQ3MzFaFw0yNDA4MTEwMjQ3MzFaMA8xDTALBgNVBAMMBEIg -Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvD05f76T+/D7kMPrj -1ZqfMuJko9lKgPQdURmIef4foAL1VeNmAzJRIBVVCUjlKIcOlfP8TRVMNM7r5FMK -RHLbyrRTcnQ0gjPuUUb6m5Vazyrauq5Gx/LaC7nb6o+NCZih1KlIhf3UPFlpkOmc -kYhurzsW7GZ9qB9bTdlkGe2N4RHb1h4kBYslF0GfopkXGZrVogCTwi3wNKqEOYL/ -6M0tYoIzXQdrNbZ0zBDCnmn0VCpFFw/XfPJtIsW+VRE8QCUk+Yh59zLrKloAzf4p -+hR0ZyRiUfN21+IvfxAVLagcF8abq77zSxYw8YKM59rwnk4UG12SQWHOJsBTex0h -tXOfAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHZ/6Pah95FW -vZx+ZlyX8KUdbAYoMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAQEA -vD7R7Wnakc8yvA85F+zVN0YeDtnTeNhi6gPTHNDGNEXLslDO4gOWp0M/HP9Yk3C/ -spjoMSG+tonn3K6dXRI2eG/vzL6zu+wn1FbvaUnYzTN67HY03r2RP7GcZyOU+mBE -gkcwwYT4pdPh+8/AvVP7qe+Weao0StGz5PJopNOodRwZp0KnYgtGuOAFPcZRLHcJ -ofy36KZdttKddQkrXLcAQjGkvurFPD2fAo1pvNCt1RyZUUw+C5ZHxYV5PBBbXJ7o -p+7yRke0/BOUex2lP9qwPHoIvZ4dNkQnCqsHs5HQutJq1aClkWKxcwsHB28A6Wrn -9WDL9oQ4iy5eAt1+89keHQ== ------END CERTIFICATE----- -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 4100 (0x1004) - Signature Algorithm: sha256WithRSAEncryption + Signature Algorithm: sha256WithRSAEncryption Issuer: CN=E Root CA Validity - Not Before: Aug 14 02:47:31 2014 GMT - Not After : Aug 11 02:47:31 2024 GMT + Not Before: Jan 5 00:00:00 2016 GMT + Not After : Jan 2 00:00:00 2026 GMT Subject: CN=C CA Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) - Modulus: - 00:ce:78:cf:1a:cb:5f:9f:b8:fb:9b:35:ee:dd:24: - f1:6a:f4:cc:6a:63:1f:89:20:20:be:51:ba:2b:a5: - e1:46:ad:df:4e:1e:ab:8d:2c:7b:ac:8f:d4:a1:48: - f0:72:51:d8:4a:a4:b7:7c:c1:cd:92:c2:4d:74:d7: - 43:e5:58:66:73:57:5d:e0:a6:30:72:38:ad:7a:04: - 1a:45:4a:19:72:16:06:e1:3e:04:fa:06:29:69:61: - 62:48:af:51:17:4f:31:a2:65:6b:61:9d:5a:54:91: - f9:67:47:7b:4e:37:60:3a:86:03:cd:68:df:5c:a8: - 0a:d0:33:e7:51:b0:b3:be:ba:90:9b:d1:e3:69:6e: - 5c:17:9a:b2:5b:cf:af:c5:6a:fd:32:f5:56:06:8c: - d8:11:dd:ed:fd:09:1f:88:6e:e3:e5:49:21:70:e2: - c3:ff:f9:04:fd:09:62:e4:24:a0:f8:63:7b:e8:2d: - c7:41:cf:b5:6f:76:8a:25:3f:a3:27:df:16:d0:cd: - 74:ac:c2:91:16:6d:00:1e:73:f0:19:f6:08:70:bd: - d1:46:82:82:ac:98:1b:df:a0:7c:c7:39:f6:ce:0a: - f8:64:f6:3a:60:9b:f0:61:6d:24:9c:d9:bd:6e:38: - f1:78:19:2b:7f:e8:c0:e3:e7:85:93:02:6e:8c:6d: - 09:f7 + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:c2:21:aa:d2:67:ec:f5:95:9e:c9:00:f2:ee:83: + 26:6c:3c:30:d4:a8:78:dd:0a:a5:d6:81:f0:54:25: + de:8f:9a:0e:8f:5c:06:96:b0:83:b7:13:56:33:9e: + d1:6a:7d:45:40:d8:e5:21:1d:c5:6d:31:34:6f:45: + 22:cf:6f:01:b4:f8:6c:ce:70:d0:e9:0e:ed:04:d9: + 34:7a:91:db:6f:90:94:66:95:26:0b:29:26:4c:6c: + 8b:e3:13:a1:42:29:59:a0:2c:fe:83:a5:3c:3d:e8: + 32:ac:37:a7:ae:b2:79:d3:12:98:5f:c7:fd:4c:49: + 6b:e4:32:40:76:7b:78:ae:a1:61:b1:0a:d1:5c:f3: + 96:13:5f:95:5a:a2:35:c5:63:1b:25:05:8d:3c:08: + d0:b0:28:2a:f3:f6:34:ab:a5:cd:e7:82:2c:35:38: + 8b:f5:41:6c:71:32:c4:13:67:ef:9b:8f:32:ab:7c: + da:e1:6a:92:4b:5b:9e:39:7e:6b:00:f8:8d:e2:b3: + 3b:ad:2f:11:3f:80:d5:19:0e:cc:d4:c1:21:42:46: + 42:2d:d0:5e:ae:63:d1:0a:3e:66:fb:eb:0b:9b:e4: + fe:7a:ca:43:5c:cc:98:6a:e1:fd:32:18:4c:63:4c: + cd:98:9b:be:fa:5b:2d:c4:76:cc:8d:e5:6d:aa:bb: + 5a:37 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: - 51:35:6F:D5:40:65:74:E3:C8:7B:0C:47:12:B5:FC:58:73:7C:16:D1 + 34:19:53:D9:DA:11:B1:FF:00:35:2B:37:00:91:1F:91:C0:F7:2E:0A X509v3 Key Usage: critical Certificate Sign, CRL Sign Signature Algorithm: sha256WithRSAEncryption - bf:ad:09:bd:6b:f3:5e:bb:82:46:21:74:64:a4:e6:85:3b:6c: - 49:e8:22:88:99:0d:aa:30:ea:5b:d0:54:ee:6b:b0:28:a9:c4: - 6e:2c:a3:0b:71:ef:6f:6e:42:55:5b:54:d6:c0:10:0d:a0:00: - 8a:8e:87:9e:ae:90:6a:64:90:bb:b0:62:22:66:2e:3b:5a:74: - 91:da:4b:b1:75:aa:48:4f:3d:66:30:24:84:a0:3e:15:78:73: - 8d:c2:c1:d5:77:5e:cc:19:3a:c8:33:0f:70:18:ed:29:3a:ef: - df:3f:1f:36:8f:1c:d1:f8:a6:fa:bb:9d:cf:27:cc:3e:e6:a8: - 2f:d2:28:96:23:eb:01:04:31:91:5c:94:11:30:50:50:ed:da: - 91:0f:d5:dd:ce:ab:2b:a0:11:c3:e9:e7:88:6f:e1:32:7d:0b: - a7:15:9e:90:3b:64:37:c1:ab:0d:ea:75:26:55:a1:10:b7:78: - 5b:df:47:c6:12:54:b8:18:f1:60:bb:77:8a:71:0e:a9:88:03: - 44:ce:e8:57:bf:b8:c4:40:2b:44:c9:5d:39:67:90:85:15:af: - a4:fa:f7:e2:13:c1:3b:ca:b8:55:54:75:2a:5c:7e:73:44:26: - 4c:3e:04:6d:83:13:48:cc:db:01:99:ac:5c:7c:1f:2c:24:1e: - d7:c0:13:d9 + 57:6d:1c:44:40:54:a1:e5:3c:a0:e1:e1:d0:72:41:61:93:91: + 38:65:8b:cc:35:d9:4c:04:80:12:4a:fd:84:71:9f:06:4f:de: + 06:1c:0d:93:51:b2:2d:d7:c8:f5:0d:4f:fd:14:58:9e:d2:c2: + ac:5d:bf:f7:67:5f:68:2d:a2:cf:12:86:79:26:70:11:2d:3f: + 0c:5f:65:fc:44:fd:6e:87:5e:56:3a:dc:be:da:95:e2:45:aa: + 07:28:ff:46:1e:4b:bf:03:92:84:53:9b:c9:7a:dd:e7:5e:e9: + 57:ba:18:c2:23:12:26:27:74:b6:93:44:4c:1e:6a:e2:20:62: + e5:33:db:86:14:41:7e:7c:76:5a:e5:d1:7f:fc:f4:f9:a3:23: + c9:06:ec:cb:b5:62:1e:bc:7b:1c:70:57:a5:d3:1d:d6:0f:79: + 6a:f2:05:58:63:11:91:fb:b4:44:6a:b2:97:18:cf:ee:de:5d: + ac:d4:d8:63:e2:4f:42:25:fa:44:a4:47:b1:e4:f7:7f:55:a0: + e0:f7:09:f8:43:5c:54:1f:6a:e4:87:96:91:a0:8b:72:57:53: + 52:22:31:d1:26:d4:5f:38:43:17:2a:48:91:37:b6:d8:d2:b3: + 54:fc:f7:61:4e:c6:bc:39:89:e2:d8:3c:c0:d4:50:33:0b:de: + 3d:02:70:5d -----BEGIN CERTIFICATE----- -MIIC4TCCAcmgAwIBAgICEAQwDQYJKoZIhvcNAQELBQAwFDESMBAGA1UEAwwJRSBS -b290IENBMB4XDTE0MDgxNDAyNDczMVoXDTI0MDgxMTAyNDczMVowDzENMAsGA1UE -AwwEQyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM54zxrLX5+4 -+5s17t0k8Wr0zGpjH4kgIL5Ruiul4Uat304eq40se6yP1KFI8HJR2Eqkt3zBzZLC -TXTXQ+VYZnNXXeCmMHI4rXoEGkVKGXIWBuE+BPoGKWlhYkivURdPMaJla2GdWlSR -+WdHe043YDqGA81o31yoCtAz51Gws766kJvR42luXBeaslvPr8Vq/TL1VgaM2BHd -7f0JH4hu4+VJIXDiw//5BP0JYuQkoPhje+gtx0HPtW92iiU/oyffFtDNdKzCkRZt -AB5z8Bn2CHC90UaCgqyYG9+gfMc59s4K+GT2OmCb8GFtJJzZvW448XgZK3/owOPn -hZMCboxtCfcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUUTVv -1UBldOPIewxHErX8WHN8FtEwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUA -A4IBAQC/rQm9a/Neu4JGIXRkpOaFO2xJ6CKImQ2qMOpb0FTua7AoqcRuLKMLce9v -bkJVW1TWwBANoACKjoeerpBqZJC7sGIiZi47WnSR2kuxdapITz1mMCSEoD4VeHON -wsHVd17MGTrIMw9wGO0pOu/fPx82jxzR+Kb6u53PJ8w+5qgv0iiWI+sBBDGRXJQR -MFBQ7dqRD9XdzqsroBHD6eeIb+EyfQunFZ6QO2Q3wasN6nUmVaEQt3hb30fGElS4 -GPFgu3eKcQ6piANEzuhXv7jEQCtEyV05Z5CFFa+k+vfiE8E7yrhVVHUqXH5zRCZM -PgRtgxNIzNsBmaxcfB8sJB7XwBPZ +MIIC4TCCAcmgAwIBAgICEAEwDQYJKoZIhvcNAQELBQAwFDESMBAGA1UEAwwJRSBS +b290IENBMB4XDTE2MDEwNTAwMDAwMFoXDTI2MDEwMjAwMDAwMFowDzENMAsGA1UE +AwwEQyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMIhqtJn7PWV +nskA8u6DJmw8MNSoeN0KpdaB8FQl3o+aDo9cBpawg7cTVjOe0Wp9RUDY5SEdxW0x +NG9FIs9vAbT4bM5w0OkO7QTZNHqR22+QlGaVJgspJkxsi+MToUIpWaAs/oOlPD3o +Mqw3p66yedMSmF/H/UxJa+QyQHZ7eK6hYbEK0VzzlhNflVqiNcVjGyUFjTwI0LAo +KvP2NKulzeeCLDU4i/VBbHEyxBNn75uPMqt82uFqkktbnjl+awD4jeKzO60vET+A +1RkOzNTBIUJGQi3QXq5j0Qo+ZvvrC5vk/nrKQ1zMmGrh/TIYTGNMzZibvvpbLcR2 +zI3lbaq7WjcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUNBlT +2doRsf8ANSs3AJEfkcD3LgowDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUA +A4IBAQBXbRxEQFSh5Tyg4eHQckFhk5E4ZYvMNdlMBIASSv2EcZ8GT94GHA2TUbIt +18j1DU/9FFie0sKsXb/3Z19oLaLPEoZ5JnARLT8MX2X8RP1uh15WOty+2pXiRaoH +KP9GHku/A5KEU5vJet3nXulXuhjCIxImJ3S2k0RMHmriIGLlM9uGFEF+fHZa5dF/ +/PT5oyPJBuzLtWIevHsccFel0x3WD3lq8gVYYxGR+7REarKXGM/u3l2s1Nhj4k9C +JfpEpEex5Pd/VaDg9wn4Q1xUH2rkh5aRoItyV1NSIjHRJtRfOEMXKkiRN7bY0rNU +/PdhTsa8OYni2DzA1FAzC949AnBd -----END CERTIFICATE----- Certificate: Data: Version: 3 (0x2) - Serial Number: 10416553735984151763 (0x908f086f011a7cd3) - Signature Algorithm: sha1WithRSAEncryption + Serial Number: 4096 (0x1000) + Signature Algorithm: sha256WithRSAEncryption Issuer: CN=E Root CA Validity - Not Before: Aug 14 02:47:31 2014 GMT - Not After : Aug 11 02:47:31 2024 GMT + Not Before: Jan 2 00:00:00 2016 GMT + Not After : Jan 2 00:00:00 2026 GMT Subject: CN=E Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) - Modulus: - 00:e4:17:15:a0:f9:24:7f:02:c3:1f:c4:70:51:c1: - f9:e4:70:87:93:d6:49:7d:07:1f:94:0a:2e:0f:b4: - be:4f:fa:2c:2f:49:35:dc:08:28:dd:4c:a9:8c:4e: - cc:79:5a:41:77:65:19:ed:e5:1c:10:9f:c3:64:30: - d2:c5:0b:88:7c:b4:03:85:5b:48:5c:08:f2:84:6f: - e9:88:ac:ec:15:43:6d:0b:87:06:aa:91:7e:e5:2c: - dc:86:bd:0a:e6:a2:d4:a1:15:59:c8:a4:de:23:96: - 61:d4:da:5f:34:d4:5b:58:84:99:fd:cc:5a:cc:27: - d9:34:ee:cd:6f:11:99:a9:94:54:84:79:78:96:b3: - 2b:5d:e5:c7:79:3d:a6:7e:ef:2d:af:fd:b9:92:04: - e8:86:66:43:3a:ba:7d:de:ce:99:d7:99:b8:3d:54: - 18:d7:a7:08:76:0a:68:6a:d6:2e:3d:1f:ea:48:4b: - 63:21:e9:19:53:2f:be:ab:d9:82:70:14:a3:59:30: - 34:3a:6b:96:2c:f7:de:c5:d7:23:6d:d5:56:fc:6f: - 3c:1f:38:23:f3:f8:94:91:f3:bb:f8:10:29:70:9e: - 32:ff:8d:9d:b2:c1:0a:0f:b1:ce:9d:55:91:11:46: - 7f:3b:ce:ae:c8:a8:f5:a9:d2:49:16:c2:d9:e4:32: - 4f:c1 + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:a4:35:79:08:1a:d9:5a:a6:12:69:98:d6:3f:c7: + fb:31:f6:f1:d6:a4:1b:f3:6a:fb:36:51:04:f1:9d: + 3b:94:81:77:35:7d:62:75:b4:b4:04:69:df:44:49: + fc:43:d5:a4:14:af:67:d0:fb:51:21:2b:8b:dc:8c: + 89:d1:0b:08:26:17:3d:75:10:08:6f:ba:a4:24:8b: + 7e:c3:fa:3d:ab:fb:f6:f5:14:80:f7:9a:45:00:b2: + 84:12:e2:7d:c0:b7:40:ca:6f:06:1e:d2:3c:10:6f: + 11:f0:52:a2:16:ef:52:91:09:6f:89:28:cf:70:fc: + e7:9e:1c:4b:5d:88:08:2f:2c:9e:75:c6:b9:6b:25: + 68:05:01:98:f2:28:53:7d:be:a1:5f:3a:62:0b:4a: + c4:95:17:97:d0:4a:5d:8a:5f:52:07:7a:6a:8b:81: + 41:a2:60:08:92:e8:d0:c2:c8:9c:19:b2:3c:c3:c6: + 33:7d:5d:90:a6:0b:d3:ca:7b:8b:6f:70:aa:bb:d1: + 90:81:6c:db:b8:48:f8:52:d1:47:32:ed:66:9e:67: + dd:e6:bc:9e:5d:60:33:9f:07:d8:b6:3e:d2:48:f5: + a8:4c:12:6f:19:32:32:a7:66:0c:66:00:79:9f:dc: + 91:e4:54:bb:ff:b5:22:ad:0c:5f:f7:5d:d6:1a:f0: + 82:59 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: - 90:96:6B:1E:0F:CF:8B:69:42:D0:1A:0C:A1:B9:B0:41:E1:A4:94:5D + B7:51:AA:C9:B7:3E:03:E5:11:94:49:A2:26:0F:70:81:7B:4E:7A:A7 X509v3 Key Usage: critical Certificate Sign, CRL Sign - Signature Algorithm: sha1WithRSAEncryption - 6a:d5:0a:5d:74:38:eb:b1:0f:2e:72:3c:62:3c:5e:9e:60:cd: - 9b:83:24:c1:e4:b2:f3:9f:56:c8:a8:97:b8:8f:eb:39:16:22: - 11:76:e2:84:27:fb:be:4c:1f:57:e0:90:61:10:18:15:e6:5d: - 78:a9:c1:f1:2b:f7:f1:42:0b:5c:68:6c:e0:63:8a:69:f6:72: - 96:41:44:70:6c:15:e0:3f:96:62:3b:1a:a1:f2:c5:42:8b:1d: - f2:5a:b2:c5:66:7b:3e:dd:6b:1d:3c:a0:57:84:78:69:dc:b6: - 89:42:20:dd:23:af:9b:69:37:9e:c6:7a:53:f6:22:a4:83:c3: - df:4e:79:9b:3e:6e:88:92:7b:3a:bc:eb:47:b2:4c:a2:c5:1f: - b2:22:9c:66:e7:a8:36:b6:e2:bb:0a:76:a9:14:07:58:2c:e0: - 37:26:4c:31:cb:52:ba:f9:63:14:0c:7f:ee:99:78:ee:6e:32: - 5d:4f:22:ee:45:d5:04:10:06:02:3b:43:9a:81:c6:d3:10:11: - 87:91:78:fa:f2:0b:19:c9:6b:0f:1a:55:76:1e:02:e0:a7:66: - 80:18:af:88:4b:a7:59:a8:d5:4a:d1:36:85:ae:dd:53:2b:a9: - 58:0d:e8:75:f9:70:74:4d:d6:a2:5c:5c:2d:00:d6:b1:cf:e7: - d8:5c:97:d3 + Signature Algorithm: sha256WithRSAEncryption + 6b:32:6f:7f:a4:6c:9c:21:a9:95:ab:b6:2a:50:59:72:36:1a: + ad:86:c4:4e:2f:a2:0a:81:47:b1:37:ed:94:5a:e3:c3:ec:43: + 46:2b:39:6c:66:ba:61:74:44:a4:e6:f6:63:6c:98:4b:d1:01: + 74:93:77:81:fe:92:5c:4a:bf:a4:d2:0b:aa:c8:00:7b:df:74: + 75:6e:d7:1a:7d:3b:f4:07:99:bb:04:63:93:97:9f:1d:b0:f0: + 81:23:94:70:8b:c6:c1:24:c1:05:01:80:c6:4e:cc:ec:7f:05: + c8:93:c4:9b:57:bb:ac:8e:b6:7f:ed:41:e6:49:2d:1b:bb:ec: + 74:47:ce:63:57:a2:e9:42:b5:f6:73:8d:f5:64:a5:53:f0:86: + 4b:34:29:80:0b:63:16:c6:98:af:d6:cb:17:52:8e:75:fc:95: + 03:ca:03:1d:a8:d3:83:f4:32:94:b1:6d:2e:f0:1c:87:81:b5: + 6a:f0:19:20:76:62:e1:da:39:9c:f7:ee:d3:f7:d3:14:39:89: + a2:a9:eb:2f:8e:e6:0f:70:e5:63:d1:43:ff:d8:f0:68:13:55: + c5:02:ab:f9:a5:d8:ae:7f:4c:c5:e4:1b:c2:ba:4a:e9:d7:d3: + 6e:69:80:39:d0:ad:0c:9d:2a:e6:6c:e6:e9:f7:49:eb:4b:4d: + 73:0d:d5:51 -----BEGIN CERTIFICATE----- -MIIC7TCCAdWgAwIBAgIJAJCPCG8BGnzTMA0GCSqGSIb3DQEBBQUAMBQxEjAQBgNV -BAMMCUUgUm9vdCBDQTAeFw0xNDA4MTQwMjQ3MzFaFw0yNDA4MTEwMjQ3MzFaMBQx -EjAQBgNVBAMMCUUgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAOQXFaD5JH8Cwx/EcFHB+eRwh5PWSX0HH5QKLg+0vk/6LC9JNdwIKN1MqYxO -zHlaQXdlGe3lHBCfw2Qw0sULiHy0A4VbSFwI8oRv6Yis7BVDbQuHBqqRfuUs3Ia9 -Cuai1KEVWcik3iOWYdTaXzTUW1iEmf3MWswn2TTuzW8RmamUVIR5eJazK13lx3k9 -pn7vLa/9uZIE6IZmQzq6fd7OmdeZuD1UGNenCHYKaGrWLj0f6khLYyHpGVMvvqvZ -gnAUo1kwNDprliz33sXXI23VVvxvPB84I/P4lJHzu/gQKXCeMv+NnbLBCg+xzp1V -kRFGfzvOrsio9anSSRbC2eQyT8ECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAd -BgNVHQ4EFgQUkJZrHg/Pi2lC0BoMobmwQeGklF0wDgYDVR0PAQH/BAQDAgEGMA0G -CSqGSIb3DQEBBQUAA4IBAQBq1QpddDjrsQ8ucjxiPF6eYM2bgyTB5LLzn1bIqJe4 -j+s5FiIRduKEJ/u+TB9X4JBhEBgV5l14qcHxK/fxQgtcaGzgY4pp9nKWQURwbBXg -P5ZiOxqh8sVCix3yWrLFZns+3WsdPKBXhHhp3LaJQiDdI6+baTeexnpT9iKkg8Pf -TnmbPm6Ikns6vOtHskyixR+yIpxm56g2tuK7CnapFAdYLOA3Jkwxy1K6+WMUDH/u -mXjubjJdTyLuRdUEEAYCO0OagcbTEBGHkXj68gsZyWsPGlV2HgLgp2aAGK+IS6dZ -qNVK0TaFrt1TK6lYDeh1+XB0TdaiXFwtANaxz+fYXJfT +MIIC5jCCAc6gAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwFDESMBAGA1UEAwwJRSBS +b290IENBMB4XDTE2MDEwMjAwMDAwMFoXDTI2MDEwMjAwMDAwMFowFDESMBAGA1UE +AwwJRSBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApDV5 +CBrZWqYSaZjWP8f7Mfbx1qQb82r7NlEE8Z07lIF3NX1idbS0BGnfREn8Q9WkFK9n +0PtRISuL3IyJ0QsIJhc9dRAIb7qkJIt+w/o9q/v29RSA95pFALKEEuJ9wLdAym8G +HtI8EG8R8FKiFu9SkQlviSjPcPznnhxLXYgILyyedca5ayVoBQGY8ihTfb6hXzpi +C0rElReX0Epdil9SB3pqi4FBomAIkujQwsicGbI8w8YzfV2QpgvTynuLb3Cqu9GQ +gWzbuEj4UtFHMu1mnmfd5ryeXWAznwfYtj7SSPWoTBJvGTIyp2YMZgB5n9yR5FS7 +/7UirQxf913WGvCCWQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBS3UarJtz4D5RGUSaImD3CBe056pzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcN +AQELBQADggEBAGsyb3+kbJwhqZWrtipQWXI2Gq2GxE4vogqBR7E37ZRa48PsQ0Yr +OWxmumF0RKTm9mNsmEvRAXSTd4H+klxKv6TSC6rIAHvfdHVu1xp9O/QHmbsEY5OX +nx2w8IEjlHCLxsEkwQUBgMZOzOx/BciTxJtXu6yOtn/tQeZJLRu77HRHzmNXoulC +tfZzjfVkpVPwhks0KYALYxbGmK/WyxdSjnX8lQPKAx2o04P0MpSxbS7wHIeBtWrw +GSB2YuHaOZz37tP30xQ5iaKp6y+O5g9w5WPRQ//Y8GgTVcUCq/ml2K5/TMXkG8K6 +SunX025pgDnQrQydKuZs5un3SetLTXMN1VE= -----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/multi-root-crlset-C-by-E.raw b/net/data/ssl/certificates/multi-root-crlset-C-by-E.raw new file mode 100644 index 0000000..b13bdd87 --- /dev/null +++ b/net/data/ssl/certificates/multi-root-crlset-C-by-E.raw Binary files differ
diff --git a/net/data/ssl/certificates/multi-root-crlset-F.raw b/net/data/ssl/certificates/multi-root-crlset-F.raw new file mode 100644 index 0000000..bad62ec --- /dev/null +++ b/net/data/ssl/certificates/multi-root-crlset-F.raw Binary files differ
diff --git a/net/data/ssl/scripts/generate-multi-root-test-chains.sh b/net/data/ssl/scripts/generate-multi-root-test-chains.sh index 6f88325..5de08df 100755 --- a/net/data/ssl/scripts/generate-multi-root-test-chains.sh +++ b/net/data/ssl/scripts/generate-multi-root-test-chains.sh
@@ -4,158 +4,224 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -# This script generates two chains of test certificates: +# The following documentation uses the annotation approach from RFC 4158. +# CAs (entities that share the same name and public key) are denoted in boxes, +# while the indication that a CA Foo signed a certificate for CA Bar is denoted +# by directed arrows. # -# 1. A (end-entity) -> B -> C -> D (self-signed root) -# 2. A (end-entity) -> B -> C2 -> E (self-signed root) +# +---+ +-----+ +# | D | | E | +# +---+ +-----+ +# | | | +# +--v v--+ | +# +---+ +---+ +# | C | | F | +# +---+ +---+ +# | | +# v v---+ +# +-----+ +# | B | +# +-----+ +# | +# v +# +---+ +# | A | +# +---+ # -# C and C2 have the same subject and keypair. +# To validate A, there are several possible paths, using A(B) to indicate +# the certificate A signed by B: # -# We use these cert chains in CertVerifyProcChromeOSTest -# to ensure that multiple verification paths are properly handled. +# 1. A(B) -> B(C) -> C(D) -> D(D) +# 3. A(B) -> B(C) -> C(E) -> E(E) +# 4. A(B) -> B(F) -> F(E) -> E(E) +# +# That is, there are two different versions of C (signed by D and E) and +# two versions of B (signed by C and F). Possible trust anchors are D and E, +# which are both self-signed. +# +# The goal is to ensure that, as long as at least one of C or F is still valid, +# clients are able to successfully build a valid path. -try () { - echo "$@" - "$@" || exit 1 -} +# Exit script as soon a something fails. +set -e -try rm -rf out -try mkdir out +rm -rf out +mkdir out -echo Create the serial number files. +echo Create the serial and index number files. serial=1000 -for i in B C C2 D E +for i in B C D E F do - try /bin/sh -c "echo $serial > out/$i-serial" - serial=$(expr $serial + 1) + /bin/sh -c "echo ${serial} > out/${i}-serial" + touch "out/${i}-index.txt" done echo Generate the keys. -try openssl genrsa -out out/A.key 2048 -try openssl genrsa -out out/B.key 2048 -try openssl genrsa -out out/C.key 2048 -try openssl genrsa -out out/D.key 2048 -try openssl genrsa -out out/E.key 2048 - -echo Generate the D CSR. -CA_COMMON_NAME="D Root CA" \ - CERTIFICATE=D \ - try openssl req \ - -new \ - -key out/D.key \ - -out out/D.csr \ - -config redundant-ca.cnf - -echo D signs itself. -CA_COMMON_NAME="D Root CA" \ - try openssl x509 \ - -req -days 3650 \ - -in out/D.csr \ - -extensions ca_cert \ - -extfile redundant-ca.cnf \ - -signkey out/D.key \ - -out out/D.pem \ - -text - -echo Generate the E CSR. -CA_COMMON_NAME="E Root CA" \ - CERTIFICATE=E \ - try openssl req \ - -new \ - -key out/E.key \ - -out out/E.csr \ - -config redundant-ca.cnf - -echo E signs itself. -CA_COMMON_NAME="E Root CA" \ - try openssl x509 \ - -req -days 3650 \ - -in out/E.csr \ - -extensions ca_cert \ - -extfile redundant-ca.cnf \ - -signkey out/E.key \ - -out out/E.pem \ - -text - -echo Generate the C2 intermediary CSR. -CA_COMMON_NAME="C CA" \ - CERTIFICATE=C2 \ - try openssl req \ - -new \ - -key out/C.key \ - -out out/C2.csr \ - -config redundant-ca.cnf - -echo Generate the B and C intermediaries\' CSRs. -for i in B C +for i in A B C D E F do - CA_COMMON_NAME="$i CA" \ - CERTIFICATE="$i" \ - try openssl req \ - -new \ - -key "out/$i.key" \ - -out "out/$i.csr" \ - -config redundant-ca.cnf + openssl genrsa -out "out/${i}.key" 2048 done -echo D signs the C intermediate. -# Make sure the signer's DB file exists. -touch out/D-index.txt -CA_COMMON_NAME="D Root CA" \ - CERTIFICATE=D \ - try openssl ca \ - -batch \ - -extensions ca_cert \ - -in out/C.csr \ - -out out/C.pem \ - -config redundant-ca.cnf +echo "Generating the self-signed roots" +for i in D E +do + echo "Generating CSR ${i}" + CA_COMMON_NAME="${i} Root CA" \ + CERTIFICATE="${i}" \ + openssl req \ + -config redundant-ca.cnf \ + -new \ + -key "out/${i}.key" \ + -out "out/${i}.csr" -echo E signs the C2 intermediate. -# Make sure the signer's DB file exists. -touch out/E-index.txt -CA_COMMON_NAME="E Root CA" \ - CERTIFICATE=E \ - try openssl ca \ + echo "Generating self-signed ${i}" + CA_COMMON_NAME="${i} Root CA" \ + CERTIFICATE="${i}" \ + openssl ca \ + -config redundant-ca.cnf \ -batch \ + -startdate 160102000000Z \ + -enddate 260102000000Z \ -extensions ca_cert \ - -in out/C2.csr \ - -out out/C2.pem \ - -config redundant-ca.cnf + -extfile redundant-ca.cnf \ + -selfsign \ + -in "out/${i}.csr" \ + -out "out/${i}.pem" +done -echo C signs the B intermediate. -touch out/C-index.txt +echo "Generating intermediate CSRs" +for i in B C F +do + echo "Generating CSR ${i}" + CA_COMMON_NAME="${i} CA" \ + CERTIFICATE="${i}" \ + openssl req \ + -config redundant-ca.cnf \ + -new \ + -key "out/${i}.key" \ + -out "out/${i}.csr" +done + +echo D signs C +CA_COMMON_NAME="D CA" \ +CERTIFICATE=D \ +openssl ca \ + -config redundant-ca.cnf \ + -batch \ + -startdate 160103000000Z \ + -enddate 260102000000Z \ + -extensions ca_cert \ + -extfile redundant-ca.cnf \ + -in out/C.csr \ + -out out/C.pem + +echo C signs B CA_COMMON_NAME="C CA" \ - CERTIFICATE=C \ - try openssl ca \ - -batch \ - -extensions ca_cert \ - -in out/B.csr \ - -out out/B.pem \ - -config redundant-ca.cnf +CERTIFICATE=C \ +openssl ca \ + -config redundant-ca.cnf \ + -batch \ + -startdate 160104000000Z \ + -enddate 260102000000Z \ + -extensions ca_cert \ + -extfile redundant-ca.cnf \ + -in out/B.csr \ + -out out/B.pem -echo Generate the A end-entity CSR. -try openssl req \ - -new \ - -key out/A.key \ - -out out/A.csr \ - -config ee.cnf +echo E signs C2 +CA_COMMON_NAME="E CA" \ +CERTIFICATE=E \ +openssl ca \ + -config redundant-ca.cnf \ + -batch \ + -startdate 160105000000Z \ + -enddate 260102000000Z \ + -extensions ca_cert \ + -extfile redundant-ca.cnf \ + -in out/C.csr \ + -out out/C2.pem -echo B signs A. -touch out/B-index.txt +echo E signs F +CA_COMMON_NAME="E CA" \ +CERTIFICATE=E \ +openssl ca \ + -config redundant-ca.cnf \ + -batch \ + -startdate 160102000000Z \ + -enddate 260102000000Z \ + -extensions ca_cert \ + -extfile redundant-ca.cnf \ + -in out/F.csr \ + -out out/F.pem + +# Note: The startdate for B-by-F MUST be different than that of B-by-C; to make +# B-by-F more preferable, the startdate is chosen to be GREATER (later) than +# B-by-C. +echo F signs B2 +CA_COMMON_NAME="F CA" \ +CERTIFICATE=F \ +openssl ca \ + -config redundant-ca.cnf \ + -batch \ + -startdate 160105000000Z \ + -enddate 260102000000Z \ + -extensions ca_cert \ + -extfile redundant-ca.cnf \ + -in out/B.csr \ + -out out/B2.pem + +echo "Generating leaf CSRs" +for i in A +do + echo "Generating leaf ${i}" + openssl req \ + -config ee.cnf \ + -new \ + -key "out/${i}.key" \ + -out "out/${i}.csr" +done + +echo "Signing leaves" CA_COMMON_NAME="B CA" \ - CERTIFICATE=B \ - try openssl ca \ - -batch \ - -extensions user_cert \ - -in out/A.csr \ - -out out/A.pem \ - -config redundant-ca.cnf +CERTIFICATE=B \ +openssl ca \ + -config redundant-ca.cnf \ + -batch \ + -days 3650 \ + -extensions user_cert \ + -extfile redundant-ca.cnf \ + -in out/A.csr \ + -out out/A.pem -echo Create multi-root-chain1.pem -try /bin/sh -c "cat out/A.key out/A.pem out/B.pem out/C.pem out/D.pem \ +echo "Copying outputs" +/bin/sh -c "cat out/A.key out/A.pem > ../certificates/multi-root-A-by-B.pem" +/bin/sh -c "cat out/A.pem out/B.pem out/C.pem out/D.pem \ > ../certificates/multi-root-chain1.pem" - -echo Create multi-root-chain2.pem -try /bin/sh -c "cat out/A.key out/A.pem out/B.pem out/C2.pem out/E.pem \ +/bin/sh -c "cat out/A.pem out/B.pem out/C2.pem out/E.pem \ > ../certificates/multi-root-chain2.pem" +cp out/B.pem ../certificates/multi-root-B-by-C.pem +cp out/B2.pem ../certificates/multi-root-B-by-F.pem +cp out/C.pem ../certificates/multi-root-C-by-D.pem +cp out/C2.pem ../certificates/multi-root-C-by-E.pem +cp out/F.pem ../certificates/multi-root-F-by-E.pem +cp out/D.pem ../certificates/multi-root-D-by-D.pem +cp out/E.pem ../certificates/multi-root-E-by-E.pem +echo "Generating CRLSets" +# Block C-by-E (serial number 0x1001) by way of serial number. +python crlsetutil.py -o ../certificates/multi-root-crlset-C-by-E.raw \ +<<CRLSETBYSERIAL +{ + "BlockedByHash": { + "out/E.pem": [4097] + } +} +CRLSETBYSERIAL + +# Block F (all versions) by way of SPKI +python crlsetutil.py -o ../certificates/multi-root-crlset-F.raw \ +<<CRLSETBYSPKI +{ + "BlockedBySPKI": [ "out/F.pem" ] +} +CRLSETBYSPKI \ No newline at end of file
diff --git a/net/data/ssl/scripts/redundant-ca.cnf b/net/data/ssl/scripts/redundant-ca.cnf index 5707b730..46e395f 100644 --- a/net/data/ssl/scripts/redundant-ca.cnf +++ b/net/data/ssl/scripts/redundant-ca.cnf
@@ -30,9 +30,16 @@ # Extensions to add when signing a request for an intermediate/CA cert basicConstraints = critical, CA:true subjectKeyIdentifier = hash -#authorityKeyIdentifier = keyid:always keyUsage = critical, keyCertSign, cRLSign +[ca_cert_with_aki] +# Extensions to add when signing a request for an intermediate/CA cert +basicConstraints = critical, CA:true +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid:always +keyUsage = critical, keyCertSign, cRLSign + + [crl_extensions] # Extensions to add when signing a CRL authorityKeyIdentifier = keyid:always
diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc index 2e0ed5c..db233c0d 100644 --- a/net/http/http_network_session.cc +++ b/net/http/http_network_session.cc
@@ -96,7 +96,6 @@ enable_http2(true), spdy_session_max_recv_window_size(kSpdySessionMaxRecvWindowSize), spdy_stream_max_recv_window_size(kSpdyStreamMaxRecvWindowSize), - spdy_initial_max_concurrent_streams(0), time_func(&base::TimeTicks::Now), parse_alternative_services(false), enable_alternative_service_with_different_host(false), @@ -198,7 +197,6 @@ params.spdy_default_protocol, params.spdy_session_max_recv_window_size, params.spdy_stream_max_recv_window_size, - params.spdy_initial_max_concurrent_streams, params.time_func, params.proxy_delegate), http_stream_factory_(new HttpStreamFactoryImpl(this, false)), @@ -380,12 +378,6 @@ } } -bool HttpNetworkSession::HasSpdyExclusion( - HostPortPair host_port_pair) const { - return params_.forced_spdy_exclusions.find(host_port_pair) != - params_.forced_spdy_exclusions.end(); -} - ClientSocketPoolManager* HttpNetworkSession::GetSocketPoolManager( SocketPoolType pool_type) { switch (pool_type) {
diff --git a/net/http/http_network_session.h b/net/http/http_network_session.h index 608b45c..d10817f 100644 --- a/net/http/http_network_session.h +++ b/net/http/http_network_session.h
@@ -95,11 +95,8 @@ bool enable_http2; size_t spdy_session_max_recv_window_size; size_t spdy_stream_max_recv_window_size; - size_t spdy_initial_max_concurrent_streams; // Source of time for SPDY connections. SpdySessionPool::TimeFunc time_func; - // URLs to exclude from forced SPDY. - std::set<HostPortPair> forced_spdy_exclusions; // Whether to parse Alt-Svc headers. bool parse_alternative_services; // Whether to enable Alt-Svc entries with hostname different than that of @@ -272,10 +269,6 @@ // Populates |*npn_protos| with protocols to be used with NPN. void GetNpnProtos(NextProtoVector* npn_protos) const; - // Convenience function for searching through |params_| for - // |forced_spdy_exclusions|. - bool HasSpdyExclusion(HostPortPair host_port_pair) const; - private: friend class HttpNetworkSessionPeer;
diff --git a/net/http/http_stream_factory_impl.cc b/net/http/http_stream_factory_impl.cc index de395a9..4931e9aa 100644 --- a/net/http/http_stream_factory_impl.cc +++ b/net/http/http_stream_factory_impl.cc
@@ -258,9 +258,6 @@ if (!HttpStreamFactory::spdy_enabled()) continue; - if (session_->HasSpdyExclusion(origin)) - continue; - // Cache this entry if we don't have a non-broken Alt-Svc yet. if (first_alternative_service.protocol == UNINITIALIZED_ALTERNATE_PROTOCOL)
diff --git a/net/log/net_log_event_type_list.h b/net/log/net_log_event_type_list.h index 23ca1bd..6d0dc34 100644 --- a/net/log/net_log_event_type_list.h +++ b/net/log/net_log_event_type_list.h
@@ -476,12 +476,31 @@ // { // "net_error": <Net integer error code>, // } +// TODO(nharper): remove this event. EVENT_TYPE(SSL_GET_DOMAIN_BOUND_CERT) +// The start/end of getting a Channel ID key. +// +// The START event contains these parameters: +// { +// "ephemeral": <Whether or not the Channel ID store is ephemeral>, +// "service": <Unique identifier for the ChannelIDService used>, +// "store": <Unique identifier for the ChannelIDStore used>, +// } +// +// The END event may contain these parameters: +// { +// "net_error": <Net error code>, +// "key": <Hex-encoded EC point of public key (uncompressed point format)>, +// } +EVENT_TYPE(SSL_GET_CHANNEL_ID) + // The SSL server requested a channel id. +// TODO(nharper): Remove this event. EVENT_TYPE(SSL_CHANNEL_ID_REQUESTED) // A channel ID was provided to the SSL library to be sent to the SSL server. +// TODO(nharper): Remove this event. EVENT_TYPE(SSL_CHANNEL_ID_PROVIDED) // A client certificate (or none) was provided to the SSL library to be sent
diff --git a/net/proxy/proxy_service.cc b/net/proxy/proxy_service.cc index cb140f6..b385e52c 100644 --- a/net/proxy/proxy_service.cc +++ b/net/proxy/proxy_service.cc
@@ -5,6 +5,7 @@ #include "net/proxy/proxy_service.h" #include <algorithm> +#include <cmath> #include <utility> #include "base/bind.h" @@ -15,6 +16,7 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/metrics/histogram_macros.h" +#include "base/metrics/sparse_histogram.h" #include "base/single_thread_task_runner.h" #include "base/strings/string_util.h" #include "base/thread_task_runner_handle.h" @@ -1378,6 +1380,8 @@ UMA_HISTOGRAM_CUSTOM_TIMES("Net.ProxyService.GetProxyUsingScriptTime", diff, base::TimeDelta::FromMicroseconds(100), base::TimeDelta::FromSeconds(20), 50); + UMA_HISTOGRAM_SPARSE_SLOWLY("Net.ProxyService.GetProxyUsingScriptResult", + std::abs(result_code)); } UMA_HISTOGRAM_BOOLEAN("Net.ProxyService.ResolvedUsingScript", script_executed);
diff --git a/net/quic/quic_connection.cc b/net/quic/quic_connection.cc index a7aca6f..d5cdded 100644 --- a/net/quic/quic_connection.cc +++ b/net/quic/quic_connection.cc
@@ -2077,7 +2077,7 @@ // TODO(rtenneti): crbug.com/546668. A temporary fix. Added a check for null // |visitor_| to fix crash bug. Delete |visitor_| check and histogram after // fix is merged. - if (visitor_) { + if (visitor_ != nullptr) { visitor_->OnConnectionClosed(error, from_peer); } else { UMA_HISTOGRAM_BOOLEAN("Net.QuicCloseConnection.NullVisitor", true);
diff --git a/net/socket/ssl_client_socket_openssl.cc b/net/socket/ssl_client_socket_openssl.cc index ed0dff2..4b09828 100644 --- a/net/socket/ssl_client_socket_openssl.cc +++ b/net/socket/ssl_client_socket_openssl.cc
@@ -26,6 +26,7 @@ #include "base/metrics/histogram_macros.h" #include "base/metrics/sparse_histogram.h" #include "base/profiler/scoped_tracker.h" +#include "base/strings/string_number_conversions.h" #include "base/strings/string_piece.h" #include "base/synchronization/lock.h" #include "base/threading/thread_local.h" @@ -222,6 +223,35 @@ return std::move(value); } +scoped_ptr<base::Value> NetLogChannelIDLookupCallback( + ChannelIDService* channel_id_service, + NetLogCaptureMode capture_mode) { + ChannelIDStore* store = channel_id_service->GetChannelIDStore(); + scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); + dict->SetBoolean("ephemeral", store->IsEphemeral()); + dict->SetString("service", base::HexEncode(&channel_id_service, + sizeof(channel_id_service))); + dict->SetString("store", base::HexEncode(&store, sizeof(store))); + return std::move(dict); +} + +scoped_ptr<base::Value> NetLogChannelIDLookupCompleteCallback( + crypto::ECPrivateKey* key, + int result, + NetLogCaptureMode capture_mode) { + scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); + dict->SetInteger("net_error", result); + std::string raw_key; + if (result == OK && key && key->ExportRawPublicKey(&raw_key)) { + std::string key_to_log = "redacted"; + if (capture_mode.include_cookies_and_credentials()) { + key_to_log = base::HexEncode(raw_key.data(), raw_key.length()); + } + dict->SetString("key", key_to_log); + } + return std::move(dict); +} + } // namespace class SSLClientSocketOpenSSL::SSLContext { @@ -1274,7 +1304,9 @@ } int SSLClientSocketOpenSSL::DoChannelIDLookup() { - net_log_.AddEvent(NetLog::TYPE_SSL_CHANNEL_ID_REQUESTED); + NetLog::ParametersCallback callback = base::Bind( + &NetLogChannelIDLookupCallback, base::Unretained(channel_id_service_)); + net_log_.BeginEvent(NetLog::TYPE_SSL_GET_CHANNEL_ID, callback); GotoState(STATE_CHANNEL_ID_LOOKUP_COMPLETE); return channel_id_service_->GetOrCreateChannelID( host_and_port_.host(), &channel_id_key_, @@ -1284,6 +1316,9 @@ } int SSLClientSocketOpenSSL::DoChannelIDLookupComplete(int result) { + net_log_.EndEvent(NetLog::TYPE_SSL_GET_CHANNEL_ID, + base::Bind(&NetLogChannelIDLookupCompleteCallback, + channel_id_key_.get(), result)); if (result < 0) return result; @@ -1300,7 +1335,6 @@ // Return to the handshake. channel_id_sent_ = true; - net_log_.AddEvent(NetLog::TYPE_SSL_CHANNEL_ID_PROVIDED); GotoState(STATE_HANDSHAKE); return OK; }
diff --git a/net/socket/ssl_client_socket_unittest.cc b/net/socket/ssl_client_socket_unittest.cc index 141f629..d225390 100644 --- a/net/socket/ssl_client_socket_unittest.cc +++ b/net/socket/ssl_client_socket_unittest.cc
@@ -655,6 +655,7 @@ void GetAllChannelIDs(const GetChannelIDListCallback& callback) override {} int GetChannelIDCount() override { return 0; } void SetForceKeepSessionState() override {} + bool IsEphemeral() override { return true; } }; // A ChannelIDStore that asynchronously returns an error when asked for a @@ -679,6 +680,7 @@ void GetAllChannelIDs(const GetChannelIDListCallback& callback) override {} int GetChannelIDCount() override { return 0; } void SetForceKeepSessionState() override {} + bool IsEphemeral() override { return true; } }; // A mock CTVerifier that records every call to Verify but doesn't verify
diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc index 4eb8b42..3ac7648b 100644 --- a/net/spdy/spdy_session.cc +++ b/net/spdy/spdy_session.cc
@@ -658,7 +658,6 @@ NextProto default_protocol, size_t session_max_recv_window_size, size_t stream_max_recv_window_size, - size_t initial_max_concurrent_streams, TimeFunc time_func, ProxyDelegate* proxy_delegate, NetLog* net_log) @@ -680,9 +679,7 @@ read_state_(READ_STATE_DO_READ), write_state_(WRITE_STATE_IDLE), error_on_close_(OK), - max_concurrent_streams_(initial_max_concurrent_streams == 0 - ? kInitialMaxConcurrentStreams - : initial_max_concurrent_streams), + max_concurrent_streams_(kInitialMaxConcurrentStreams), max_concurrent_pushed_streams_(kMaxConcurrentPushedStreams), streams_initiated_count_(0), streams_pushed_count_(0),
diff --git a/net/spdy/spdy_session.h b/net/spdy/spdy_session.h index ece02bc..9bff8db 100644 --- a/net/spdy/spdy_session.h +++ b/net/spdy/spdy_session.h
@@ -245,7 +245,6 @@ NextProto default_protocol, size_t session_max_recv_window_size, size_t stream_max_recv_window_size, - size_t initial_max_concurrent_streams, TimeFunc time_func, ProxyDelegate* proxy_delegate, NetLog* net_log);
diff --git a/net/spdy/spdy_session_pool.cc b/net/spdy/spdy_session_pool.cc index 7e98ded..371f28ea 100644 --- a/net/spdy/spdy_session_pool.cc +++ b/net/spdy/spdy_session_pool.cc
@@ -39,7 +39,6 @@ NextProto default_protocol, size_t session_max_recv_window_size, size_t stream_max_recv_window_size, - size_t initial_max_concurrent_streams, SpdySessionPool::TimeFunc time_func, ProxyDelegate* proxy_delegate) : http_server_properties_(http_server_properties), @@ -57,7 +56,6 @@ : default_protocol), session_max_recv_window_size_(session_max_recv_window_size), stream_max_recv_window_size_(stream_max_recv_window_size), - initial_max_concurrent_streams_(initial_max_concurrent_streams), time_func_(time_func), proxy_delegate_(proxy_delegate) { DCHECK(default_protocol_ >= kProtoSPDYMinimumVersion && @@ -100,8 +98,8 @@ verify_domain_authentication_, enable_sending_initial_data_, enable_compression_, enable_ping_based_connection_checking_, default_protocol_, session_max_recv_window_size_, - stream_max_recv_window_size_, initial_max_concurrent_streams_, time_func_, - proxy_delegate_, net_log.net_log())); + stream_max_recv_window_size_, time_func_, proxy_delegate_, + net_log.net_log())); new_session->InitializeWithSocket(std::move(connection), this, is_secure, certificate_error_code);
diff --git a/net/spdy/spdy_session_pool.h b/net/spdy/spdy_session_pool.h index 092567f..a1a53d15 100644 --- a/net/spdy/spdy_session_pool.h +++ b/net/spdy/spdy_session_pool.h
@@ -59,7 +59,6 @@ NextProto default_protocol, size_t session_max_recv_window_size, size_t stream_max_recv_window_size, - size_t initial_max_concurrent_streams, SpdySessionPool::TimeFunc time_func, ProxyDelegate* proxy_delegate); ~SpdySessionPool() override; @@ -215,7 +214,6 @@ const NextProto default_protocol_; size_t session_max_recv_window_size_; size_t stream_max_recv_window_size_; - size_t initial_max_concurrent_streams_; TimeFunc time_func_; // Determines if a proxy is a trusted SPDY proxy, which is allowed to push
diff --git a/net/ssl/channel_id_store.h b/net/ssl/channel_id_store.h index efdf7e5..3eb9d67 100644 --- a/net/ssl/channel_id_store.h +++ b/net/ssl/channel_id_store.h
@@ -104,6 +104,10 @@ // When invoked, instructs the store to keep session related data on // destruction. virtual void SetForceKeepSessionState() = 0; + + // Returns true if this ChannelIDStore is ephemeral, and false if it is + // persistent. + virtual bool IsEphemeral() = 0; }; } // namespace net
diff --git a/net/ssl/default_channel_id_store.cc b/net/ssl/default_channel_id_store.cc index 8fff6f0..184fccd 100644 --- a/net/ssl/default_channel_id_store.cc +++ b/net/ssl/default_channel_id_store.cc
@@ -425,6 +425,10 @@ channel_ids_[server_identifier] = channel_id.release(); } +bool DefaultChannelIDStore::IsEphemeral() { + return store_.get() == nullptr; +} + DefaultChannelIDStore::PersistentStore::PersistentStore() {} DefaultChannelIDStore::PersistentStore::~PersistentStore() {}
diff --git a/net/ssl/default_channel_id_store.h b/net/ssl/default_channel_id_store.h index 52eb1d0..fed0319 100644 --- a/net/ssl/default_channel_id_store.h +++ b/net/ssl/default_channel_id_store.h
@@ -61,6 +61,7 @@ void GetAllChannelIDs(const GetChannelIDListCallback& callback) override; int GetChannelIDCount() override; void SetForceKeepSessionState() override; + bool IsEphemeral() override; private: class Task;
diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/url_request_context_builder.cc index 3920a68..156c675 100644 --- a/net/url_request/url_request_context_builder.cc +++ b/net/url_request/url_request_context_builder.cc
@@ -180,8 +180,8 @@ testing_fixed_https_port(0), enable_spdy31(true), enable_http2(true), - parse_alternative_services(true), - enable_alternative_service_with_different_host(true), + parse_alternative_services(false), + enable_alternative_service_with_different_host(false), enable_quic(false), quic_max_server_configs_stored_in_properties(0), quic_delay_tcp_race(false),
diff --git a/remoting/base/dispatch_win.h.pump b/remoting/base/dispatch_win.h.pump index 41dc8bc..51d42369 100644 --- a/remoting/base/dispatch_win.h.pump +++ b/remoting/base/dispatch_win.h.pump
@@ -2,7 +2,7 @@ $$ script that is part of the Google Test suite of utilities. Description $$ can be found here: $$ -$$ http://code.google.com/p/googletest/wiki/PumpManual +$$ https://github.com/google/googletest/blob/master/googletest/docs/PumpManual.md $$ MAX_ARITY controls the number of arguments that dispatch::Invoke() supports. $$ It is choosen to match the number of arguments base::Bind() supports.
diff --git a/remoting/client/plugin/chromoting_instance.cc b/remoting/client/plugin/chromoting_instance.cc index e791ce0..11b029e 100644 --- a/remoting/client/plugin/chromoting_instance.cc +++ b/remoting/client/plugin/chromoting_instance.cc
@@ -680,15 +680,6 @@ new ChromotingClient(&context_, this, video_renderer_.get(), make_scoped_ptr(new PepperAudioPlayer(this)))); - // Connect the input pipeline to the protocol stub & initialize components. - mouse_input_filter_.set_input_stub(client_->input_stub()); - if (!plugin_view_.is_null()) { - webrtc::DesktopSize size(plugin_view_.GetRect().width(), - plugin_view_.GetRect().height()); - mouse_input_filter_.set_input_size(size); - touch_input_scaler_.set_input_size(size); - } - // Setup the signal strategy. signal_strategy_.reset(new DelegatingSignalStrategy( local_jid, base::Bind(&ChromotingInstance::SendOutgoingIq, @@ -735,6 +726,15 @@ client_->Start(signal_strategy_.get(), std::move(authenticator), transport_context, host_jid, capabilities); + // Connect the input pipeline to the protocol stub. + mouse_input_filter_.set_input_stub(client_->input_stub()); + if (!plugin_view_.is_null()) { + webrtc::DesktopSize size(plugin_view_.GetRect().width(), + plugin_view_.GetRect().height()); + mouse_input_filter_.set_input_size(size); + touch_input_scaler_.set_input_size(size); + } + // Start timer that periodically sends perf stats. stats_update_timer_.Start( FROM_HERE, base::TimeDelta::FromSeconds(kUIStatsUpdatePeriodSeconds),
diff --git a/remoting/host/BUILD.gn b/remoting/host/BUILD.gn index 18d72bd4..2e5fdaaf 100644 --- a/remoting/host/BUILD.gn +++ b/remoting/host/BUILD.gn
@@ -258,7 +258,6 @@ "desktop_shape_tracker_unittest.cc", "gcd_rest_client_unittest.cc", "gcd_state_updater_unittest.cc", - "gnubby_auth_handler_posix_unittest.cc", "heartbeat_sender_unittest.cc", "host_change_notification_listener_unittest.cc", "host_config_unittest.cc", @@ -284,6 +283,7 @@ "resizing_host_observer_unittest.cc", "resources_unittest.cc", "screen_resolution_unittest.cc", + "security_key/gnubby_auth_handler_linux_unittest.cc", "server_log_entry_host_unittest.cc", "setup/me2me_native_messaging_host_unittest.cc", "setup/oauth_helper_unittest.cc",
diff --git a/remoting/host/basic_desktop_environment.cc b/remoting/host/basic_desktop_environment.cc index bcfd2cb5..b65018e8 100644 --- a/remoting/host/basic_desktop_environment.cc +++ b/remoting/host/basic_desktop_environment.cc
@@ -10,9 +10,9 @@ #include "build/build_config.h" #include "remoting/host/audio_capturer.h" #include "remoting/host/client_session_control.h" -#include "remoting/host/gnubby_auth_handler.h" #include "remoting/host/input_injector.h" #include "remoting/host/screen_controls.h" +#include "remoting/host/security_key/gnubby_auth_handler.h" #include "remoting/protocol/capability_names.h" #include "third_party/webrtc/modules/desktop_capture/desktop_capture_options.h" #include "third_party/webrtc/modules/desktop_capture/mouse_cursor_monitor.h"
diff --git a/remoting/host/cast_extension_session.cc b/remoting/host/cast_extension_session.cc index 4cd3dc40..f9c6bb6 100644 --- a/remoting/host/cast_extension_session.cc +++ b/remoting/host/cast_extension_session.cc
@@ -577,11 +577,6 @@ VLOG(1) << "PeerConnectionObserver: SignalingState changed to:" << new_state; } -void CastExtensionSession::OnStateChange( - webrtc::PeerConnectionObserver::StateType state_changed) { - VLOG(1) << "PeerConnectionObserver: StateType changed to: " << state_changed; -} - void CastExtensionSession::OnAddStream(webrtc::MediaStreamInterface* stream) { VLOG(1) << "PeerConnectionObserver: stream added: " << stream->label(); } @@ -623,10 +618,6 @@ << new_state; } -void CastExtensionSession::OnIceComplete() { - VLOG(1) << "PeerConnectionObserver: all ICE candidates found."; -} - void CastExtensionSession::OnIceCandidate( const webrtc::IceCandidateInterface* candidate) { std::string candidate_str;
diff --git a/remoting/host/cast_extension_session.h b/remoting/host/cast_extension_session.h index a035ec0a..e584abea 100644 --- a/remoting/host/cast_extension_session.h +++ b/remoting/host/cast_extension_session.h
@@ -66,8 +66,6 @@ // webrtc::PeerConnectionObserver interface. void OnSignalingChange( webrtc::PeerConnectionInterface::SignalingState new_state) override; - void OnStateChange( - webrtc::PeerConnectionObserver::StateType state_changed) override; void OnAddStream(webrtc::MediaStreamInterface* stream) override; void OnRemoveStream(webrtc::MediaStreamInterface* stream) override; void OnDataChannel(webrtc::DataChannelInterface* data_channel) override; @@ -77,7 +75,6 @@ void OnIceGatheringChange( webrtc::PeerConnectionInterface::IceGatheringState new_state) override; void OnIceCandidate(const webrtc::IceCandidateInterface* candidate) override; - void OnIceComplete() override; private: CastExtensionSession(
diff --git a/remoting/host/client_session.h b/remoting/host/client_session.h index f19a6c8..750a8af7 100644 --- a/remoting/host/client_session.h +++ b/remoting/host/client_session.h
@@ -17,9 +17,9 @@ #include "base/time/time.h" #include "base/timer/timer.h" #include "remoting/host/client_session_control.h" -#include "remoting/host/gnubby_auth_handler.h" #include "remoting/host/host_extension_session_manager.h" #include "remoting/host/remote_input_filter.h" +#include "remoting/host/security_key/gnubby_auth_handler.h" #include "remoting/protocol/clipboard_echo_filter.h" #include "remoting/protocol/clipboard_filter.h" #include "remoting/protocol/clipboard_stub.h"
diff --git a/remoting/host/fake_desktop_environment.cc b/remoting/host/fake_desktop_environment.cc index 1d94b19..488a3e9 100644 --- a/remoting/host/fake_desktop_environment.cc +++ b/remoting/host/fake_desktop_environment.cc
@@ -7,8 +7,8 @@ #include <utility> #include "remoting/host/audio_capturer.h" -#include "remoting/host/gnubby_auth_handler.h" #include "remoting/host/input_injector.h" +#include "remoting/host/security_key/gnubby_auth_handler.h" #include "remoting/proto/event.pb.h" #include "remoting/protocol/fake_desktop_capturer.h"
diff --git a/remoting/host/gnubby_auth_handler.h b/remoting/host/gnubby_auth_handler.h deleted file mode 100644 index c155641..0000000 --- a/remoting/host/gnubby_auth_handler.h +++ /dev/null
@@ -1,45 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef REMOTING_HOST_GNUBBY_AUTH_HANDLER_H_ -#define REMOTING_HOST_GNUBBY_AUTH_HANDLER_H_ - -#include <string> - -#include "base/memory/scoped_ptr.h" - -namespace base { -class FilePath; -} // namespace base - -namespace remoting { - -namespace protocol { -class ClientStub; -} // namespace protocol - -// Class responsible for proxying authentication data between a local gnubbyd -// and the client. -class GnubbyAuthHandler { - public: - virtual ~GnubbyAuthHandler() {} - - // Creates a platform-specific GnubbyAuthHandler. - static scoped_ptr<GnubbyAuthHandler> Create( - protocol::ClientStub* client_stub); - - // Specify the name of the socket to listen to gnubby requests on. - static void SetGnubbySocketName(const base::FilePath& gnubby_socket_name); - - // A message was received from the client. - virtual void DeliverClientMessage(const std::string& message) = 0; - - // Send data to client. - virtual void DeliverHostDataMessage(int connection_id, - const std::string& data) const = 0; -}; - -} // namespace remoting - -#endif // REMOTING_HOST_GNUBBY_AUTH_HANDLER_H_
diff --git a/remoting/host/gnubby_auth_handler_posix.cc b/remoting/host/gnubby_auth_handler_posix.cc deleted file mode 100644 index 4960e0d..0000000 --- a/remoting/host/gnubby_auth_handler_posix.cc +++ /dev/null
@@ -1,302 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "remoting/host/gnubby_auth_handler_posix.h" - -#include <stdint.h> -#include <unistd.h> -#include <utility> - -#include "base/bind.h" -#include "base/files/file_util.h" -#include "base/json/json_reader.h" -#include "base/json/json_writer.h" -#include "base/lazy_instance.h" -#include "base/logging.h" -#include "base/stl_util.h" -#include "base/threading/thread_restrictions.h" -#include "base/values.h" -#include "net/base/net_errors.h" -#include "net/socket/unix_domain_server_socket_posix.h" -#include "remoting/base/logging.h" -#include "remoting/host/gnubby_socket.h" -#include "remoting/proto/control.pb.h" -#include "remoting/protocol/client_stub.h" - -namespace remoting { - -namespace { - -const char kConnectionId[] = "connectionId"; -const char kControlMessage[] = "control"; -const char kControlOption[] = "option"; -const char kDataMessage[] = "data"; -const char kDataPayload[] = "data"; -const char kErrorMessage[] = "error"; -const char kGnubbyAuthMessage[] = "gnubby-auth"; -const char kGnubbyAuthV1[] = "auth-v1"; -const char kMessageType[] = "type"; - -const int64_t kDefaultRequestTimeoutSeconds = 60; - -// The name of the socket to listen for gnubby requests on. -base::LazyInstance<base::FilePath>::Leaky g_gnubby_socket_name = - LAZY_INSTANCE_INITIALIZER; - -// Socket authentication function that only allows connections from callers with -// the current uid. -bool MatchUid(const net::UnixDomainServerSocket::Credentials& credentials) { - bool allowed = credentials.user_id == getuid(); - if (!allowed) - HOST_LOG << "Refused socket connection from uid " << credentials.user_id; - return allowed; -} - -// Returns the command code (the first byte of the data) if it exists, or -1 if -// the data is empty. -unsigned int GetCommandCode(const std::string& data) { - return data.empty() ? -1 : static_cast<unsigned int>(data[0]); -} - -// Creates a string of byte data from a ListValue of numbers. Returns true if -// all of the list elements are numbers. -bool ConvertListValueToString(base::ListValue* bytes, std::string* out) { - out->clear(); - - unsigned int byte_count = bytes->GetSize(); - if (byte_count != 0) { - out->reserve(byte_count); - for (unsigned int i = 0; i < byte_count; i++) { - int value; - if (!bytes->GetInteger(i, &value)) - return false; - out->push_back(static_cast<char>(value)); - } - } - return true; -} - -} // namespace - -GnubbyAuthHandlerPosix::GnubbyAuthHandlerPosix( - protocol::ClientStub* client_stub) - : client_stub_(client_stub), - last_connection_id_(0), - request_timeout_( - base::TimeDelta::FromSeconds(kDefaultRequestTimeoutSeconds)) { - DCHECK(client_stub_); -} - -GnubbyAuthHandlerPosix::~GnubbyAuthHandlerPosix() { - STLDeleteValues(&active_sockets_); -} - -// static -scoped_ptr<GnubbyAuthHandler> GnubbyAuthHandler::Create( - protocol::ClientStub* client_stub) { - return make_scoped_ptr(new GnubbyAuthHandlerPosix(client_stub)); -} - -// static -void GnubbyAuthHandler::SetGnubbySocketName( - const base::FilePath& gnubby_socket_name) { - g_gnubby_socket_name.Get() = gnubby_socket_name; -} - -void GnubbyAuthHandlerPosix::DeliverClientMessage(const std::string& message) { - DCHECK(CalledOnValidThread()); - - scoped_ptr<base::Value> value = base::JSONReader::Read(message); - base::DictionaryValue* client_message; - if (value && value->GetAsDictionary(&client_message)) { - std::string type; - if (!client_message->GetString(kMessageType, &type)) { - LOG(ERROR) << "Invalid gnubby-auth message"; - return; - } - - if (type == kControlMessage) { - std::string option; - if (client_message->GetString(kControlOption, &option) && - option == kGnubbyAuthV1) { - CreateAuthorizationSocket(); - } else { - LOG(ERROR) << "Invalid gnubby-auth control option"; - } - } else if (type == kDataMessage) { - ActiveSockets::iterator iter = GetSocketForMessage(client_message); - if (iter != active_sockets_.end()) { - base::ListValue* bytes; - std::string response; - if (client_message->GetList(kDataPayload, &bytes) && - ConvertListValueToString(bytes, &response)) { - HOST_LOG << "Sending gnubby response: " << GetCommandCode(response); - iter->second->SendResponse(response); - } else { - LOG(ERROR) << "Invalid gnubby data"; - SendErrorAndCloseActiveSocket(iter); - } - } else { - LOG(ERROR) << "Unknown gnubby-auth data connection"; - } - } else if (type == kErrorMessage) { - ActiveSockets::iterator iter = GetSocketForMessage(client_message); - if (iter != active_sockets_.end()) { - HOST_LOG << "Sending gnubby error"; - SendErrorAndCloseActiveSocket(iter); - } else { - LOG(ERROR) << "Unknown gnubby-auth error connection"; - } - } else { - LOG(ERROR) << "Unknown gnubby-auth message type: " << type; - } - } -} - -void GnubbyAuthHandlerPosix::DeliverHostDataMessage( - int connection_id, - const std::string& data) const { - DCHECK(CalledOnValidThread()); - - base::DictionaryValue request; - request.SetString(kMessageType, kDataMessage); - request.SetInteger(kConnectionId, connection_id); - - base::ListValue* bytes = new base::ListValue(); - for (std::string::const_iterator i = data.begin(); i != data.end(); ++i) { - bytes->AppendInteger(static_cast<unsigned char>(*i)); - } - request.Set(kDataPayload, bytes); - - std::string request_json; - if (!base::JSONWriter::Write(request, &request_json)) { - LOG(ERROR) << "Failed to create request json"; - return; - } - - protocol::ExtensionMessage message; - message.set_type(kGnubbyAuthMessage); - message.set_data(request_json); - - client_stub_->DeliverHostMessage(message); -} - -size_t GnubbyAuthHandlerPosix::GetActiveSocketsMapSizeForTest() const { - return active_sockets_.size(); -} - -void GnubbyAuthHandlerPosix::SetRequestTimeoutForTest( - const base::TimeDelta& timeout) { - request_timeout_ = timeout; -} - -void GnubbyAuthHandlerPosix::DoAccept() { - int result = auth_socket_->Accept( - &accept_socket_, - base::Bind(&GnubbyAuthHandlerPosix::OnAccepted, base::Unretained(this))); - if (result != net::ERR_IO_PENDING) - OnAccepted(result); -} - -void GnubbyAuthHandlerPosix::OnAccepted(int result) { - DCHECK(CalledOnValidThread()); - DCHECK_NE(net::ERR_IO_PENDING, result); - - if (result < 0) { - LOG(ERROR) << "Error in accepting a new connection"; - return; - } - - int connection_id = ++last_connection_id_; - GnubbySocket* socket = - new GnubbySocket(std::move(accept_socket_), request_timeout_, - base::Bind(&GnubbyAuthHandlerPosix::RequestTimedOut, - base::Unretained(this), connection_id)); - active_sockets_[connection_id] = socket; - socket->StartReadingRequest( - base::Bind(&GnubbyAuthHandlerPosix::OnReadComplete, - base::Unretained(this), connection_id)); - - // Continue accepting new connections. - DoAccept(); -} - -void GnubbyAuthHandlerPosix::OnReadComplete(int connection_id) { - DCHECK(CalledOnValidThread()); - - ActiveSockets::iterator iter = active_sockets_.find(connection_id); - DCHECK(iter != active_sockets_.end()); - std::string request_data; - if (!iter->second->GetAndClearRequestData(&request_data)) { - SendErrorAndCloseActiveSocket(iter); - return; - } - ProcessGnubbyRequest(connection_id, request_data); - iter->second->StartReadingRequest( - base::Bind(&GnubbyAuthHandlerPosix::OnReadComplete, - base::Unretained(this), connection_id)); -} - -void GnubbyAuthHandlerPosix::CreateAuthorizationSocket() { - DCHECK(CalledOnValidThread()); - - if (!g_gnubby_socket_name.Get().empty()) { - { - // DeleteFile() is a blocking operation, but so is creation of the unix - // socket below. Consider moving this class to a different thread if this - // causes any problems. See crbug.com/509807 . - base::ThreadRestrictions::ScopedAllowIO allow_io; - - // If the file already exists, a socket in use error is returned. - base::DeleteFile(g_gnubby_socket_name.Get(), false); - } - - HOST_LOG << "Listening for gnubby requests on " - << g_gnubby_socket_name.Get().value(); - - auth_socket_.reset( - new net::UnixDomainServerSocket(base::Bind(MatchUid), false)); - int rv = auth_socket_->BindAndListen(g_gnubby_socket_name.Get().value(), - /*backlog=*/1); - if (rv != net::OK) { - LOG(ERROR) << "Failed to open socket for gnubby requests"; - return; - } - DoAccept(); - } else { - HOST_LOG << "No gnubby socket name specified"; - } -} - -void GnubbyAuthHandlerPosix::ProcessGnubbyRequest( - int connection_id, - const std::string& request_data) { - HOST_LOG << "Received gnubby request: " << GetCommandCode(request_data); - DeliverHostDataMessage(connection_id, request_data); -} - -GnubbyAuthHandlerPosix::ActiveSockets::iterator -GnubbyAuthHandlerPosix::GetSocketForMessage(base::DictionaryValue* message) { - int connection_id; - if (message->GetInteger(kConnectionId, &connection_id)) { - return active_sockets_.find(connection_id); - } - return active_sockets_.end(); -} - -void GnubbyAuthHandlerPosix::SendErrorAndCloseActiveSocket( - const ActiveSockets::iterator& iter) { - iter->second->SendSshError(); - delete iter->second; - active_sockets_.erase(iter); -} - -void GnubbyAuthHandlerPosix::RequestTimedOut(int connection_id) { - HOST_LOG << "Gnubby request timed out"; - ActiveSockets::iterator iter = active_sockets_.find(connection_id); - if (iter != active_sockets_.end()) - SendErrorAndCloseActiveSocket(iter); -} - -} // namespace remoting
diff --git a/remoting/host/gnubby_auth_handler_posix.h b/remoting/host/gnubby_auth_handler_posix.h deleted file mode 100644 index 0ba1e30..0000000 --- a/remoting/host/gnubby_auth_handler_posix.h +++ /dev/null
@@ -1,101 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef REMOTING_HOST_GNUBBY_AUTH_HANDLER_POSIX_H_ -#define REMOTING_HOST_GNUBBY_AUTH_HANDLER_POSIX_H_ - -#include <stddef.h> - -#include <map> -#include <string> - -#include "base/macros.h" -#include "base/memory/scoped_ptr.h" -#include "base/threading/non_thread_safe.h" -#include "net/base/completion_callback.h" -#include "net/socket/stream_socket.h" -#include "remoting/host/gnubby_auth_handler.h" - -namespace base { -class DictionaryValue; -} // namespace base - -namespace net { -class UnixDomainServerSocket; -} // namespace net - -namespace remoting { - -namespace protocol { -class ClientStub; -} // namespace protocol - -class GnubbySocket; - -class GnubbyAuthHandlerPosix : public GnubbyAuthHandler, - public base::NonThreadSafe { - public: - explicit GnubbyAuthHandlerPosix(protocol::ClientStub* client_stub); - ~GnubbyAuthHandlerPosix() override; - - size_t GetActiveSocketsMapSizeForTest() const; - - void SetRequestTimeoutForTest(const base::TimeDelta& timeout); - - private: - typedef std::map<int, GnubbySocket*> ActiveSockets; - - // GnubbyAuthHandler interface. - void DeliverClientMessage(const std::string& message) override; - void DeliverHostDataMessage(int connection_id, - const std::string& data) const override; - - // Starts listening for connection. - void DoAccept(); - - // Called when a connection is accepted. - void OnAccepted(int result); - - // Called when a GnubbySocket has done reading. - void OnReadComplete(int connection_id); - - // Create socket for authorization. - void CreateAuthorizationSocket(); - - // Process a gnubby request. - void ProcessGnubbyRequest(int connection_id, const std::string& request_data); - - // Gets an active socket iterator for the connection id in |message|. - ActiveSockets::iterator GetSocketForMessage(base::DictionaryValue* message); - - // Send an error and closes an active socket. - void SendErrorAndCloseActiveSocket(const ActiveSockets::iterator& iter); - - // A request timed out. - void RequestTimedOut(int connection_id); - - // Interface through which communication with the client occurs. - protocol::ClientStub* client_stub_; - - // Socket used to listen for authorization requests. - scoped_ptr<net::UnixDomainServerSocket> auth_socket_; - - // A temporary holder for an accepted connection. - scoped_ptr<net::StreamSocket> accept_socket_; - - // The last assigned gnubby connection id. - int last_connection_id_; - - // Sockets by connection id used to process gnubbyd requests. - ActiveSockets active_sockets_; - - // Timeout used for a request. - base::TimeDelta request_timeout_; - - DISALLOW_COPY_AND_ASSIGN(GnubbyAuthHandlerPosix); -}; - -} // namespace remoting - -#endif // REMOTING_HOST_GNUBBY_AUTH_HANDLER_POSIX_H_
diff --git a/remoting/host/gnubby_auth_handler_posix_unittest.cc b/remoting/host/gnubby_auth_handler_posix_unittest.cc deleted file mode 100644 index 3983fb0..0000000 --- a/remoting/host/gnubby_auth_handler_posix_unittest.cc +++ /dev/null
@@ -1,234 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include <stddef.h> - -#include "base/files/file_path.h" -#include "base/files/scoped_temp_dir.h" -#include "base/json/json_writer.h" -#include "base/macros.h" -#include "base/message_loop/message_loop.h" -#include "base/run_loop.h" -#include "base/strings/stringprintf.h" -#include "base/timer/mock_timer.h" -#include "base/values.h" -#include "net/base/io_buffer.h" -#include "net/base/net_errors.h" -#include "net/base/test_completion_callback.h" -#include "net/socket/unix_domain_client_socket_posix.h" -#include "remoting/host/gnubby_auth_handler_posix.h" -#include "remoting/host/gnubby_socket.h" -#include "remoting/proto/internal.pb.h" -#include "remoting/protocol/client_stub.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace remoting { - -namespace { - -const char kSocketFilename[] = "socket_for_testing"; - -// Test gnubby request data. -const unsigned char kRequestData[] = { - 0x00, 0x00, 0x00, 0x9a, 0x65, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x60, 0x90, - 0x24, 0x71, 0xf8, 0xf2, 0xe5, 0xdf, 0x7f, 0x81, 0xc7, 0x49, 0xc4, 0xa3, - 0x58, 0x5c, 0xf6, 0xcc, 0x40, 0x14, 0x28, 0x0c, 0xa0, 0xfa, 0x03, 0x18, - 0x38, 0xd8, 0x7d, 0x77, 0x2b, 0x3a, 0x00, 0x00, 0x00, 0x20, 0x64, 0x46, - 0x47, 0x2f, 0xdf, 0x6e, 0xed, 0x7b, 0xf3, 0xc3, 0x37, 0x20, 0xf2, 0x36, - 0x67, 0x6c, 0x36, 0xe1, 0xb4, 0x5e, 0xbe, 0x04, 0x85, 0xdb, 0x89, 0xa3, - 0xcd, 0xfd, 0xd2, 0x4b, 0xd6, 0x9f, 0x00, 0x00, 0x00, 0x40, 0x38, 0x35, - 0x05, 0x75, 0x1d, 0x13, 0x6e, 0xb3, 0x6b, 0x1d, 0x29, 0xae, 0xd3, 0x43, - 0xe6, 0x84, 0x8f, 0xa3, 0x9d, 0x65, 0x4e, 0x2f, 0x57, 0xe3, 0xf6, 0xe6, - 0x20, 0x3c, 0x00, 0xc6, 0xe1, 0x73, 0x34, 0xe2, 0x23, 0x99, 0xc4, 0xfa, - 0x91, 0xc2, 0xd5, 0x97, 0xc1, 0x8b, 0xd0, 0x3c, 0x13, 0xba, 0xf0, 0xd7, - 0x5e, 0xa3, 0xbc, 0x02, 0x5b, 0xec, 0xe4, 0x4b, 0xae, 0x0e, 0xf2, 0xbd, - 0xc8, 0xaa}; - -} // namespace - -class TestClientStub : public protocol::ClientStub { - public: - TestClientStub() : loop_(new base::RunLoop) {} - ~TestClientStub() override {} - - // protocol::ClientStub implementation. - void SetCapabilities(const protocol::Capabilities& capabilities) override {} - - void SetPairingResponse( - const protocol::PairingResponse& pairing_response) override {} - - void DeliverHostMessage(const protocol::ExtensionMessage& message) override { - message_ = message; - loop_->Quit(); - } - - // protocol::ClipboardStub implementation. - void InjectClipboardEvent(const protocol::ClipboardEvent& event) override {} - - // protocol::CursorShapeStub implementation. - void SetCursorShape(const protocol::CursorShapeInfo& cursor_shape) override {} - - void WaitForDeliverHostMessage() { - loop_->Run(); - loop_.reset(new base::RunLoop); - } - - void CheckHostDataMessage(int id, const std::string& data) { - std::string connection_id = base::StringPrintf("\"connectionId\":%d", id); - std::string data_message = base::StringPrintf("\"data\":%s", data.c_str()); - - ASSERT_TRUE(message_.type() == "gnubby-auth" || - message_.type() == "auth-v1"); - ASSERT_NE(message_.data().find("\"type\":\"data\""), std::string::npos); - ASSERT_NE(message_.data().find(connection_id), std::string::npos); - ASSERT_NE(message_.data().find(data_message), std::string::npos); - } - - private: - protocol::ExtensionMessage message_; - scoped_ptr<base::RunLoop> loop_; - - DISALLOW_COPY_AND_ASSIGN(TestClientStub); -}; - -class GnubbyAuthHandlerPosixTest : public testing::Test { - public: - GnubbyAuthHandlerPosixTest() { - EXPECT_TRUE(temp_dir_.CreateUniqueTempDir()); - socket_path_ = temp_dir_.path().Append(kSocketFilename); - auth_handler_posix_.reset(new GnubbyAuthHandlerPosix(&client_stub_)); - auth_handler_ = auth_handler_posix_.get(); - auth_handler_->SetGnubbySocketName(socket_path_); - } - - void WriteRequestData(net::UnixDomainClientSocket* client_socket) { - int request_len = sizeof(kRequestData); - scoped_refptr<net::DrainableIOBuffer> request_buffer( - new net::DrainableIOBuffer( - new net::WrappedIOBuffer( - reinterpret_cast<const char*>(kRequestData)), - request_len)); - net::TestCompletionCallback write_callback; - int bytes_written = 0; - while (bytes_written < request_len) { - int write_result = client_socket->Write(request_buffer.get(), - request_buffer->BytesRemaining(), - write_callback.callback()); - write_result = write_callback.GetResult(write_result); - ASSERT_GT(write_result, 0); - bytes_written += write_result; - ASSERT_LE(bytes_written, request_len); - request_buffer->DidConsume(write_result); - } - ASSERT_EQ(request_len, bytes_written); - } - - void WaitForAndVerifyHostMessage() { - client_stub_.WaitForDeliverHostMessage(); - base::ListValue expected_data; - // Skip first four bytes. - for (size_t i = 4; i < sizeof(kRequestData); ++i) { - expected_data.AppendInteger(kRequestData[i]); - } - - std::string expected_data_json; - base::JSONWriter::Write(expected_data, &expected_data_json); - client_stub_.CheckHostDataMessage(1, expected_data_json); - } - - protected: - // Object under test. - scoped_ptr<GnubbyAuthHandlerPosix> auth_handler_posix_; - - // GnubbyAuthHandler interface for |auth_handler_posix_|. - GnubbyAuthHandler* auth_handler_; - - base::MessageLoopForIO message_loop_; - TestClientStub client_stub_; - base::ScopedTempDir temp_dir_; - base::FilePath socket_path_; - base::Closure accept_callback_; -}; - -TEST_F(GnubbyAuthHandlerPosixTest, HostDataMessageDelivered) { - auth_handler_->DeliverHostDataMessage(42, "test_msg"); - client_stub_.WaitForDeliverHostMessage(); - // Expects a JSON array of the ASCII character codes for "test_msg". - client_stub_.CheckHostDataMessage(42, "[116,101,115,116,95,109,115,103]"); -} - -TEST_F(GnubbyAuthHandlerPosixTest, NotClosedAfterRequest) { - ASSERT_EQ(0u, auth_handler_posix_->GetActiveSocketsMapSizeForTest()); - - const char message_json[] = "{\"type\":\"control\",\"option\":\"auth-v1\"}"; - auth_handler_->DeliverClientMessage(message_json); - - net::UnixDomainClientSocket client_socket(socket_path_.value(), false); - net::TestCompletionCallback connect_callback; - - int rv = client_socket.Connect(connect_callback.callback()); - ASSERT_EQ(net::OK, connect_callback.GetResult(rv)); - - // Write the request and verify the response. - WriteRequestData(&client_socket); - WaitForAndVerifyHostMessage(); - - // Verify that completing a request/response cycle didn't close the socket. - ASSERT_EQ(1u, auth_handler_posix_->GetActiveSocketsMapSizeForTest()); -} - -TEST_F(GnubbyAuthHandlerPosixTest, HandleTwoRequests) { - ASSERT_EQ(0u, auth_handler_posix_->GetActiveSocketsMapSizeForTest()); - - const char message_json[] = "{\"type\":\"control\",\"option\":\"auth-v1\"}"; - auth_handler_->DeliverClientMessage(message_json); - - net::UnixDomainClientSocket client_socket(socket_path_.value(), false); - net::TestCompletionCallback connect_callback; - - int rv = client_socket.Connect(connect_callback.callback()); - ASSERT_EQ(net::OK, connect_callback.GetResult(rv)); - - // Write the request and verify the response. - WriteRequestData(&client_socket); - WaitForAndVerifyHostMessage(); - - // Repeat the request/response cycle. - WriteRequestData(&client_socket); - WaitForAndVerifyHostMessage(); - - // Verify that completing two request/response cycles didn't close the socket. - ASSERT_EQ(1u, auth_handler_posix_->GetActiveSocketsMapSizeForTest()); -} - -TEST_F(GnubbyAuthHandlerPosixTest, DidReadTimeout) { - std::string message_json = "{\"type\":\"control\",\"option\":\"auth-v1\"}"; - - ASSERT_EQ(0u, auth_handler_posix_->GetActiveSocketsMapSizeForTest()); - auth_handler_->DeliverClientMessage(message_json); - net::UnixDomainClientSocket client_socket(socket_path_.value(), false); - net::TestCompletionCallback connect_callback; - int rv = client_socket.Connect(connect_callback.callback()); - ASSERT_EQ(net::OK, connect_callback.GetResult(rv)); - auth_handler_posix_->SetRequestTimeoutForTest(base::TimeDelta()); - ASSERT_EQ(0u, auth_handler_posix_->GetActiveSocketsMapSizeForTest()); -} - -TEST_F(GnubbyAuthHandlerPosixTest, ClientErrorMessageDelivered) { - std::string message_json = "{\"type\":\"control\",\"option\":\"auth-v1\"}"; - - ASSERT_EQ(0u, auth_handler_posix_->GetActiveSocketsMapSizeForTest()); - auth_handler_->DeliverClientMessage(message_json); - net::UnixDomainClientSocket client_socket(socket_path_.value(), false); - net::TestCompletionCallback connect_callback; - int rv = client_socket.Connect(connect_callback.callback()); - ASSERT_EQ(net::OK, connect_callback.GetResult(rv)); - - std::string error_json = "{\"type\":\"error\",\"connectionId\":1}"; - auth_handler_->DeliverClientMessage(error_json); - ASSERT_EQ(0u, auth_handler_posix_->GetActiveSocketsMapSizeForTest()); -} - -} // namespace remoting
diff --git a/remoting/host/gnubby_auth_handler_win.cc b/remoting/host/gnubby_auth_handler_win.cc deleted file mode 100644 index d04f199f..0000000 --- a/remoting/host/gnubby_auth_handler_win.cc +++ /dev/null
@@ -1,48 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "remoting/host/gnubby_auth_handler.h" - -#include "base/logging.h" -#include "base/macros.h" - -namespace remoting { - -namespace { - -class GnubbyAuthHandlerWin : public GnubbyAuthHandler { - private: - // GnubbyAuthHandler interface. - void DeliverClientMessage(const std::string& message) override; - void DeliverHostDataMessage(int connection_id, - const std::string& data) const override; - - DISALLOW_COPY_AND_ASSIGN(GnubbyAuthHandlerWin); -}; - -} // namespace - -// static -scoped_ptr<GnubbyAuthHandler> GnubbyAuthHandler::Create( - protocol::ClientStub* client_stub) { - return nullptr; -} - -// static -void GnubbyAuthHandler::SetGnubbySocketName( - const base::FilePath& gnubby_socket_name) { - NOTIMPLEMENTED(); -} - -void GnubbyAuthHandlerWin::DeliverClientMessage(const std::string& message) { - NOTIMPLEMENTED(); -} - -void GnubbyAuthHandlerWin::DeliverHostDataMessage(int connection_id, - const std::string& data) - const { - NOTIMPLEMENTED(); -} - -} // namespace remoting
diff --git a/remoting/host/gnubby_socket.cc b/remoting/host/gnubby_socket.cc deleted file mode 100644 index 82fe34a..0000000 --- a/remoting/host/gnubby_socket.cc +++ /dev/null
@@ -1,188 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "remoting/host/gnubby_socket.h" - -#include <utility> - -#include "base/callback_helpers.h" -#include "base/macros.h" -#include "base/timer/timer.h" -#include "net/base/io_buffer.h" -#include "net/base/net_errors.h" -#include "net/socket/stream_socket.h" - -namespace remoting { - -namespace { - -const size_t kRequestSizeBytes = 4; -const size_t kMaxRequestLength = 16384; -const size_t kRequestReadBufferLength = kRequestSizeBytes + kMaxRequestLength; - -// SSH Failure Code -const char kSshError[] = {0x05}; - -} // namespace - -GnubbySocket::GnubbySocket(scoped_ptr<net::StreamSocket> socket, - const base::TimeDelta& timeout, - const base::Closure& timeout_callback) - : socket_(std::move(socket)), - read_completed_(false), - read_buffer_(new net::IOBufferWithSize(kRequestReadBufferLength)) { - timer_.reset(new base::Timer(false, false)); - timer_->Start(FROM_HERE, timeout, timeout_callback); -} - -GnubbySocket::~GnubbySocket() {} - -bool GnubbySocket::GetAndClearRequestData(std::string* data_out) { - DCHECK(CalledOnValidThread()); - DCHECK(read_completed_); - - if (!read_completed_) - return false; - if (!IsRequestComplete() || IsRequestTooLarge()) - return false; - // The request size is not part of the data; don't send it. - data_out->assign(request_data_.begin() + kRequestSizeBytes, - request_data_.end()); - request_data_.clear(); - return true; -} - -void GnubbySocket::SendResponse(const std::string& response_data) { - DCHECK(CalledOnValidThread()); - DCHECK(!write_buffer_); - - std::string response_length_string = GetResponseLengthAsBytes(response_data); - int response_len = response_length_string.size() + response_data.size(); - scoped_ptr<std::string> response( - new std::string(response_length_string + response_data)); - write_buffer_ = new net::DrainableIOBuffer( - new net::StringIOBuffer(std::move(response)), response_len); - DoWrite(); -} - -void GnubbySocket::SendSshError() { - DCHECK(CalledOnValidThread()); - - SendResponse(std::string(kSshError, arraysize(kSshError))); -} - -void GnubbySocket::StartReadingRequest( - const base::Closure& request_received_callback) { - DCHECK(CalledOnValidThread()); - DCHECK(request_received_callback_.is_null()); - - request_received_callback_ = request_received_callback; - DoRead(); -} - -void GnubbySocket::OnDataWritten(int result) { - DCHECK(CalledOnValidThread()); - DCHECK(write_buffer_); - - if (result < 0) { - LOG(ERROR) << "Error sending response: " << result; - return; - } - ResetTimer(); - write_buffer_->DidConsume(result); - DoWrite(); -} - -void GnubbySocket::DoWrite() { - DCHECK(CalledOnValidThread()); - DCHECK(write_buffer_); - - if (!write_buffer_->BytesRemaining()) { - write_buffer_ = nullptr; - return; - } - int result = socket_->Write( - write_buffer_.get(), write_buffer_->BytesRemaining(), - base::Bind(&GnubbySocket::OnDataWritten, base::Unretained(this))); - if (result != net::ERR_IO_PENDING) - OnDataWritten(result); -} - -void GnubbySocket::OnDataRead(int result) { - DCHECK(CalledOnValidThread()); - - if (result <= 0) { - if (result < 0) - LOG(ERROR) << "Error reading request: " << result; - read_completed_ = true; - base::ResetAndReturn(&request_received_callback_).Run(); - return; - } - - ResetTimer(); - request_data_.insert(request_data_.end(), read_buffer_->data(), - read_buffer_->data() + result); - if (IsRequestComplete()) { - read_completed_ = true; - base::ResetAndReturn(&request_received_callback_).Run(); - return; - } - - DoRead(); -} - -void GnubbySocket::DoRead() { - DCHECK(CalledOnValidThread()); - - int result = socket_->Read( - read_buffer_.get(), kRequestReadBufferLength, - base::Bind(&GnubbySocket::OnDataRead, base::Unretained(this))); - if (result != net::ERR_IO_PENDING) - OnDataRead(result); -} - -bool GnubbySocket::IsRequestComplete() const { - DCHECK(CalledOnValidThread()); - - if (request_data_.size() < kRequestSizeBytes) - return false; - return GetRequestLength() <= request_data_.size(); -} - -bool GnubbySocket::IsRequestTooLarge() const { - DCHECK(CalledOnValidThread()); - - if (request_data_.size() < kRequestSizeBytes) - return false; - return GetRequestLength() > kMaxRequestLength; -} - -size_t GnubbySocket::GetRequestLength() const { - DCHECK(request_data_.size() >= kRequestSizeBytes); - - return ((request_data_[0] & 255) << 24) + ((request_data_[1] & 255) << 16) + - ((request_data_[2] & 255) << 8) + (request_data_[3] & 255) + - kRequestSizeBytes; -} - -std::string GnubbySocket::GetResponseLengthAsBytes( - const std::string& response) const { - std::string response_len; - response_len.reserve(kRequestSizeBytes); - int len = response.size(); - - response_len.push_back((len >> 24) & 255); - response_len.push_back((len >> 16) & 255); - response_len.push_back((len >> 8) & 255); - response_len.push_back(len & 255); - - return response_len; -} - -void GnubbySocket::ResetTimer() { - if (timer_->IsRunning()) - timer_->Reset(); -} - -} // namespace remoting
diff --git a/remoting/host/gnubby_socket.h b/remoting/host/gnubby_socket.h deleted file mode 100644 index 6be61a02..0000000 --- a/remoting/host/gnubby_socket.h +++ /dev/null
@@ -1,110 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef REMOTING_HOST_GNUBBY_SOCKET_H_ -#define REMOTING_HOST_GNUBBY_SOCKET_H_ - -#include <stddef.h> - -#include <string> -#include <vector> - -#include "base/callback.h" -#include "base/macros.h" -#include "base/memory/ref_counted.h" -#include "base/memory/scoped_ptr.h" -#include "base/threading/non_thread_safe.h" - -namespace base { -class Timer; -} // namespace base - -namespace net { -class DrainableIOBuffer; -class IOBufferWithSize; -class StreamSocket; -} // namespace net - -namespace remoting { - -// Class that manages reading requests and sending responses. The socket can -// only handle receiving one request at a time. It expects to receive no extra -// bytes over the wire, which is checked by IsRequestTooLarge method. -class GnubbySocket : public base::NonThreadSafe { - public: - GnubbySocket(scoped_ptr<net::StreamSocket> socket, - const base::TimeDelta& timeout, - const base::Closure& timeout_callback); - ~GnubbySocket(); - - // Returns false if the request has not yet completed, or is too large to be - // processed. Otherwise, the cached request data is copied into |data_out| and - // the internal buffer resets and is ready for the next request. - bool GetAndClearRequestData(std::string* data_out); - - // Sends response data to the socket. - void SendResponse(const std::string& data); - - // Sends an SSH error code to the socket. - void SendSshError(); - - // |request_received_callback| is used to notify the caller that request data - // has been fully read, and caller is to use GetAndClearRequestData method to - // get the request data. - void StartReadingRequest(const base::Closure& request_received_callback); - - private: - // Called when bytes are written to |socket_|. - void OnDataWritten(int result); - - // Continues writing to |socket_| if needed. - void DoWrite(); - - // Called when bytes are read from |socket_|. - void OnDataRead(int bytes_read); - - // Continues to read. - void DoRead(); - - // Returns true if the current request is complete. - bool IsRequestComplete() const; - - // Returns true if the stated request size is larger than the allowed maximum. - bool IsRequestTooLarge() const; - - // Returns the stated request length. - size_t GetRequestLength() const; - - // Returns the response length bytes. - std::string GetResponseLengthAsBytes(const std::string& response) const; - - // Resets the socket activity timer. - void ResetTimer(); - - // The socket. - scoped_ptr<net::StreamSocket> socket_; - - // Invoked when request data has been read. - base::Closure request_received_callback_; - - // Indicates whether read has completed and |request_received_callback_| is - // about to be run. - bool read_completed_; - - // Request data. - std::vector<char> request_data_; - - scoped_refptr<net::DrainableIOBuffer> write_buffer_; - - scoped_refptr<net::IOBufferWithSize> read_buffer_; - - // The activity timer. - scoped_ptr<base::Timer> timer_; - - DISALLOW_COPY_AND_ASSIGN(GnubbySocket); -}; - -} // namespace remoting - -#endif // REMOTING_HOST_GNUBBY_SOCKET_H_
diff --git a/remoting/host/host_mock_objects.h b/remoting/host/host_mock_objects.h index 72ea6a1..5b5b577d 100644 --- a/remoting/host/host_mock_objects.h +++ b/remoting/host/host_mock_objects.h
@@ -14,11 +14,11 @@ #include "remoting/host/client_session.h" #include "remoting/host/client_session_control.h" #include "remoting/host/desktop_environment.h" -#include "remoting/host/gnubby_auth_handler.h" #include "remoting/host/host_status_observer.h" #include "remoting/host/input_injector.h" #include "remoting/host/screen_controls.h" #include "remoting/host/screen_resolution.h" +#include "remoting/host/security_key/gnubby_auth_handler.h" #include "remoting/proto/control.pb.h" #include "testing/gmock/include/gmock/gmock.h" #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
diff --git a/remoting/host/ipc_desktop_environment.cc b/remoting/host/ipc_desktop_environment.cc index 6cbfb1a9..129a584 100644 --- a/remoting/host/ipc_desktop_environment.cc +++ b/remoting/host/ipc_desktop_environment.cc
@@ -17,9 +17,9 @@ #include "remoting/host/client_session_control.h" #include "remoting/host/desktop_session.h" #include "remoting/host/desktop_session_proxy.h" -#include "remoting/host/gnubby_auth_handler.h" #include "remoting/host/input_injector.h" #include "remoting/host/screen_controls.h" +#include "remoting/host/security_key/gnubby_auth_handler.h" #include "third_party/webrtc/modules/desktop_capture/mouse_cursor_monitor.h" #include "third_party/webrtc/modules/desktop_capture/screen_capturer.h"
diff --git a/remoting/host/it2me/it2me_host.cc b/remoting/host/it2me/it2me_host.cc index 99f31771..4012f550 100644 --- a/remoting/host/it2me/it2me_host.cc +++ b/remoting/host/it2me/it2me_host.cc
@@ -332,6 +332,11 @@ if (policies->GetString(policy::key::kRemoteAccessHostDomain, &host_domain)) { UpdateHostDomainPolicy(host_domain); } + std::string client_domain; + if (policies->GetString(policy::key::kRemoteAccessHostClientDomain, + &client_domain)) { + UpdateClientDomainPolicy(client_domain); + } policy_received_ = true; @@ -377,6 +382,19 @@ required_host_domain_ = host_domain; } +void It2MeHost::UpdateClientDomainPolicy(const std::string& client_domain) { + DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread()); + + VLOG(2) << "UpdateClientDomainPolicy: " << client_domain; + + // When setting a client domain policy, disconnect any existing session. + if (!client_domain.empty() && IsConnected()) { + Shutdown(); + } + + required_client_domain_ = client_domain; +} + It2MeHost::~It2MeHost() { // Check that resources that need to be torn down on the UI thread are gone. DCHECK(!desktop_environment_factory_.get()); @@ -459,7 +477,8 @@ scoped_ptr<protocol::AuthenticatorFactory> factory( new protocol::It2MeHostAuthenticatorFactory( - local_certificate, host_key_pair_, access_code)); + local_certificate, host_key_pair_, access_code, + required_client_domain_)); host_->SetAuthenticatorFactory(std::move(factory)); // Pass the Access Code to the script object before changing state.
diff --git a/remoting/host/it2me/it2me_host.h b/remoting/host/it2me/it2me_host.h index aedb9ba..e1e6076 100644 --- a/remoting/host/it2me/it2me_host.h +++ b/remoting/host/it2me/it2me_host.h
@@ -133,9 +133,10 @@ // Called when malformed policies are detected. void OnPolicyError(); - // Handlers for NAT traversal and host domain policies. + // Handlers for NAT traversal and domain policies. void UpdateNatPolicy(bool nat_traversal_enabled); void UpdateHostDomainPolicy(const std::string& host_domain); + void UpdateClientDomainPolicy(const std::string& client_domain); void Shutdown(); @@ -165,7 +166,8 @@ // Host the current nat traversal policy setting. bool nat_traversal_enabled_; - // The host domain policy setting. + // The client and host domain policy setting. + std::string required_client_domain_; std::string required_host_domain_; // Indicates whether or not a policy has ever been read. This is to ensure
diff --git a/remoting/host/me2me_desktop_environment.cc b/remoting/host/me2me_desktop_environment.cc index 6ca6e50c..6e278b3 100644 --- a/remoting/host/me2me_desktop_environment.cc +++ b/remoting/host/me2me_desktop_environment.cc
@@ -13,13 +13,13 @@ #include "remoting/host/client_session_control.h" #include "remoting/host/curtain_mode.h" #include "remoting/host/desktop_resizer.h" -#include "remoting/host/gnubby_auth_handler.h" #include "remoting/host/host_window.h" #include "remoting/host/host_window.h" #include "remoting/host/host_window_proxy.h" #include "remoting/host/local_input_monitor.h" #include "remoting/host/resizing_host_observer.h" #include "remoting/host/screen_controls.h" +#include "remoting/host/security_key/gnubby_auth_handler.h" #include "remoting/protocol/capability_names.h" #include "third_party/webrtc/modules/desktop_capture/desktop_capture_options.h" #include "third_party/webrtc/modules/desktop_capture/screen_capturer.h"
diff --git a/remoting/host/policy_watcher.cc b/remoting/host/policy_watcher.cc index 5d4d88f..3c3cfb5 100644 --- a/remoting/host/policy_watcher.cc +++ b/remoting/host/policy_watcher.cc
@@ -179,6 +179,7 @@ default_values_->SetBoolean(key::kRemoteAccessHostFirewallTraversal, true); default_values_->SetBoolean(key::kRemoteAccessHostRequireCurtain, false); default_values_->SetBoolean(key::kRemoteAccessHostMatchUsername, false); + default_values_->SetString(key::kRemoteAccessHostClientDomain, std::string()); default_values_->SetString(key::kRemoteAccessHostDomain, std::string()); default_values_->SetString(key::kRemoteAccessHostTalkGadgetPrefix, kDefaultHostTalkGadgetPrefix);
diff --git a/remoting/host/policy_watcher_unittest.cc b/remoting/host/policy_watcher_unittest.cc index f70123e..7643b39 100644 --- a/remoting/host/policy_watcher_unittest.cc +++ b/remoting/host/policy_watcher_unittest.cc
@@ -242,6 +242,7 @@ dict.SetBoolean(key::kRemoteAccessHostFirewallTraversal, true); dict.SetBoolean(key::kRemoteAccessHostAllowRelayedConnection, true); dict.SetString(key::kRemoteAccessHostUdpPortRange, ""); + dict.SetString(key::kRemoteAccessHostClientDomain, std::string()); dict.SetString(key::kRemoteAccessHostDomain, std::string()); dict.SetBoolean(key::kRemoteAccessHostMatchUsername, false); dict.SetString(key::kRemoteAccessHostTalkGadgetPrefix,
diff --git a/remoting/host/remoting_me2me_host.cc b/remoting/host/remoting_me2me_host.cc index 589c24b..7dbebc5f 100644 --- a/remoting/host/remoting_me2me_host.cc +++ b/remoting/host/remoting_me2me_host.cc
@@ -338,6 +338,7 @@ void ReportPolicyErrorAndRestartHost(); void ApplyHostDomainPolicy(); void ApplyUsernamePolicy(); + bool OnClientDomainPolicyUpdate(base::DictionaryValue* policies); bool OnHostDomainPolicyUpdate(base::DictionaryValue* policies); bool OnUsernamePolicyUpdate(base::DictionaryValue* policies); bool OnNatPolicyUpdate(base::DictionaryValue* policies); @@ -412,6 +413,7 @@ scoped_ptr<PolicyWatcher> policy_watcher_; PolicyState policy_state_; + std::string client_domain_; std::string host_domain_; bool host_username_match_required_; bool allow_nat_traversal_; @@ -794,7 +796,7 @@ factory = protocol::Me2MeHostAuthenticatorFactory::CreateWithSharedSecret( use_service_account_, host_owner_, local_certificate, key_pair_, - host_secret_hash_, pairing_registry); + client_domain_, host_secret_hash_, pairing_registry); host_->set_pairing_registry(pairing_registry); } else { @@ -807,7 +809,7 @@ key_pair_, context_->url_request_context_getter())); factory = protocol::Me2MeHostAuthenticatorFactory::CreateWithThirdPartyAuth( use_service_account_, host_owner_, local_certificate, key_pair_, - std::move(token_validator_factory)); + client_domain_, std::move(token_validator_factory)); } #if defined(OS_POSIX) @@ -1104,6 +1106,7 @@ } bool restart_required = false; + restart_required |= OnClientDomainPolicyUpdate(policies.get()); restart_required |= OnHostDomainPolicyUpdate(policies.get()); restart_required |= OnCurtainPolicyUpdate(policies.get()); // Note: UsernamePolicyUpdate must run after OnCurtainPolicyUpdate. @@ -1191,6 +1194,13 @@ return false; } +bool HostProcess::OnClientDomainPolicyUpdate(base::DictionaryValue* policies) { + // Returns true if the host has to be restarted after this policy update. + DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); + return policies->GetString(policy::key::kRemoteAccessHostClientDomain, + &client_domain_); +} + void HostProcess::ApplyUsernamePolicy() { if (state_ != HOST_STARTED) return;
diff --git a/remoting/host/security_key/gnubby_auth_handler.h b/remoting/host/security_key/gnubby_auth_handler.h new file mode 100644 index 0000000..606742b --- /dev/null +++ b/remoting/host/security_key/gnubby_auth_handler.h
@@ -0,0 +1,45 @@ +// Copyright 2016 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 REMOTING_HOST_SECURITY_KEY_GNUBBY_AUTH_HANDLER_H_ +#define REMOTING_HOST_SECURITY_KEY_GNUBBY_AUTH_HANDLER_H_ + +#include <string> + +#include "base/memory/scoped_ptr.h" + +namespace base { +class FilePath; +} // namespace base + +namespace remoting { + +namespace protocol { +class ClientStub; +} // namespace protocol + +// Class responsible for proxying authentication data between a local gnubbyd +// and the client. +class GnubbyAuthHandler { + public: + virtual ~GnubbyAuthHandler() {} + + // Creates a platform-specific GnubbyAuthHandler. + static scoped_ptr<GnubbyAuthHandler> Create( + protocol::ClientStub* client_stub); + + // Specify the name of the socket to listen to gnubby requests on. + static void SetGnubbySocketName(const base::FilePath& gnubby_socket_name); + + // A message was received from the client. + virtual void DeliverClientMessage(const std::string& message) = 0; + + // Send data to client. + virtual void DeliverHostDataMessage(int connection_id, + const std::string& data) const = 0; +}; + +} // namespace remoting + +#endif // REMOTING_HOST_SECURITY_KEY_GNUBBY_AUTH_HANDLER_H_
diff --git a/remoting/host/security_key/gnubby_auth_handler_linux.cc b/remoting/host/security_key/gnubby_auth_handler_linux.cc new file mode 100644 index 0000000..5bed3c9 --- /dev/null +++ b/remoting/host/security_key/gnubby_auth_handler_linux.cc
@@ -0,0 +1,302 @@ +// Copyright 2016 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 "remoting/host/security_key/gnubby_auth_handler_linux.h" + +#include <stdint.h> +#include <unistd.h> +#include <utility> + +#include "base/bind.h" +#include "base/files/file_util.h" +#include "base/json/json_reader.h" +#include "base/json/json_writer.h" +#include "base/lazy_instance.h" +#include "base/logging.h" +#include "base/stl_util.h" +#include "base/threading/thread_restrictions.h" +#include "base/values.h" +#include "net/base/net_errors.h" +#include "net/socket/unix_domain_server_socket_posix.h" +#include "remoting/base/logging.h" +#include "remoting/host/security_key/gnubby_socket.h" +#include "remoting/proto/control.pb.h" +#include "remoting/protocol/client_stub.h" + +namespace remoting { + +namespace { + +const char kConnectionId[] = "connectionId"; +const char kControlMessage[] = "control"; +const char kControlOption[] = "option"; +const char kDataMessage[] = "data"; +const char kDataPayload[] = "data"; +const char kErrorMessage[] = "error"; +const char kGnubbyAuthMessage[] = "gnubby-auth"; +const char kGnubbyAuthV1[] = "auth-v1"; +const char kMessageType[] = "type"; + +const int64_t kDefaultRequestTimeoutSeconds = 60; + +// The name of the socket to listen for gnubby requests on. +base::LazyInstance<base::FilePath>::Leaky g_gnubby_socket_name = + LAZY_INSTANCE_INITIALIZER; + +// Socket authentication function that only allows connections from callers with +// the current uid. +bool MatchUid(const net::UnixDomainServerSocket::Credentials& credentials) { + bool allowed = credentials.user_id == getuid(); + if (!allowed) + HOST_LOG << "Refused socket connection from uid " << credentials.user_id; + return allowed; +} + +// Returns the command code (the first byte of the data) if it exists, or -1 if +// the data is empty. +unsigned int GetCommandCode(const std::string& data) { + return data.empty() ? -1 : static_cast<unsigned int>(data[0]); +} + +// Creates a string of byte data from a ListValue of numbers. Returns true if +// all of the list elements are numbers. +bool ConvertListValueToString(base::ListValue* bytes, std::string* out) { + out->clear(); + + unsigned int byte_count = bytes->GetSize(); + if (byte_count != 0) { + out->reserve(byte_count); + for (unsigned int i = 0; i < byte_count; i++) { + int value; + if (!bytes->GetInteger(i, &value)) + return false; + out->push_back(static_cast<char>(value)); + } + } + return true; +} + +} // namespace + +GnubbyAuthHandlerLinux::GnubbyAuthHandlerLinux( + protocol::ClientStub* client_stub) + : client_stub_(client_stub), + last_connection_id_(0), + request_timeout_( + base::TimeDelta::FromSeconds(kDefaultRequestTimeoutSeconds)) { + DCHECK(client_stub_); +} + +GnubbyAuthHandlerLinux::~GnubbyAuthHandlerLinux() { + STLDeleteValues(&active_sockets_); +} + +// static +scoped_ptr<GnubbyAuthHandler> GnubbyAuthHandler::Create( + protocol::ClientStub* client_stub) { + return make_scoped_ptr(new GnubbyAuthHandlerLinux(client_stub)); +} + +// static +void GnubbyAuthHandler::SetGnubbySocketName( + const base::FilePath& gnubby_socket_name) { + g_gnubby_socket_name.Get() = gnubby_socket_name; +} + +void GnubbyAuthHandlerLinux::DeliverClientMessage(const std::string& message) { + DCHECK(CalledOnValidThread()); + + scoped_ptr<base::Value> value = base::JSONReader::Read(message); + base::DictionaryValue* client_message; + if (value && value->GetAsDictionary(&client_message)) { + std::string type; + if (!client_message->GetString(kMessageType, &type)) { + LOG(ERROR) << "Invalid gnubby-auth message"; + return; + } + + if (type == kControlMessage) { + std::string option; + if (client_message->GetString(kControlOption, &option) && + option == kGnubbyAuthV1) { + CreateAuthorizationSocket(); + } else { + LOG(ERROR) << "Invalid gnubby-auth control option"; + } + } else if (type == kDataMessage) { + ActiveSockets::iterator iter = GetSocketForMessage(client_message); + if (iter != active_sockets_.end()) { + base::ListValue* bytes; + std::string response; + if (client_message->GetList(kDataPayload, &bytes) && + ConvertListValueToString(bytes, &response)) { + HOST_LOG << "Sending gnubby response: " << GetCommandCode(response); + iter->second->SendResponse(response); + } else { + LOG(ERROR) << "Invalid gnubby data"; + SendErrorAndCloseActiveSocket(iter); + } + } else { + LOG(ERROR) << "Unknown gnubby-auth data connection"; + } + } else if (type == kErrorMessage) { + ActiveSockets::iterator iter = GetSocketForMessage(client_message); + if (iter != active_sockets_.end()) { + HOST_LOG << "Sending gnubby error"; + SendErrorAndCloseActiveSocket(iter); + } else { + LOG(ERROR) << "Unknown gnubby-auth error connection"; + } + } else { + LOG(ERROR) << "Unknown gnubby-auth message type: " << type; + } + } +} + +void GnubbyAuthHandlerLinux::DeliverHostDataMessage( + int connection_id, + const std::string& data) const { + DCHECK(CalledOnValidThread()); + + base::DictionaryValue request; + request.SetString(kMessageType, kDataMessage); + request.SetInteger(kConnectionId, connection_id); + + base::ListValue* bytes = new base::ListValue(); + for (std::string::const_iterator i = data.begin(); i != data.end(); ++i) { + bytes->AppendInteger(static_cast<unsigned char>(*i)); + } + request.Set(kDataPayload, bytes); + + std::string request_json; + if (!base::JSONWriter::Write(request, &request_json)) { + LOG(ERROR) << "Failed to create request json"; + return; + } + + protocol::ExtensionMessage message; + message.set_type(kGnubbyAuthMessage); + message.set_data(request_json); + + client_stub_->DeliverHostMessage(message); +} + +size_t GnubbyAuthHandlerLinux::GetActiveSocketsMapSizeForTest() const { + return active_sockets_.size(); +} + +void GnubbyAuthHandlerLinux::SetRequestTimeoutForTest( + const base::TimeDelta& timeout) { + request_timeout_ = timeout; +} + +void GnubbyAuthHandlerLinux::DoAccept() { + int result = auth_socket_->Accept( + &accept_socket_, + base::Bind(&GnubbyAuthHandlerLinux::OnAccepted, base::Unretained(this))); + if (result != net::ERR_IO_PENDING) + OnAccepted(result); +} + +void GnubbyAuthHandlerLinux::OnAccepted(int result) { + DCHECK(CalledOnValidThread()); + DCHECK_NE(net::ERR_IO_PENDING, result); + + if (result < 0) { + LOG(ERROR) << "Error in accepting a new connection"; + return; + } + + int connection_id = ++last_connection_id_; + GnubbySocket* socket = + new GnubbySocket(std::move(accept_socket_), request_timeout_, + base::Bind(&GnubbyAuthHandlerLinux::RequestTimedOut, + base::Unretained(this), connection_id)); + active_sockets_[connection_id] = socket; + socket->StartReadingRequest( + base::Bind(&GnubbyAuthHandlerLinux::OnReadComplete, + base::Unretained(this), connection_id)); + + // Continue accepting new connections. + DoAccept(); +} + +void GnubbyAuthHandlerLinux::OnReadComplete(int connection_id) { + DCHECK(CalledOnValidThread()); + + ActiveSockets::iterator iter = active_sockets_.find(connection_id); + DCHECK(iter != active_sockets_.end()); + std::string request_data; + if (!iter->second->GetAndClearRequestData(&request_data)) { + SendErrorAndCloseActiveSocket(iter); + return; + } + ProcessGnubbyRequest(connection_id, request_data); + iter->second->StartReadingRequest( + base::Bind(&GnubbyAuthHandlerLinux::OnReadComplete, + base::Unretained(this), connection_id)); +} + +void GnubbyAuthHandlerLinux::CreateAuthorizationSocket() { + DCHECK(CalledOnValidThread()); + + if (!g_gnubby_socket_name.Get().empty()) { + { + // DeleteFile() is a blocking operation, but so is creation of the unix + // socket below. Consider moving this class to a different thread if this + // causes any problems. See crbug.com/509807 . + base::ThreadRestrictions::ScopedAllowIO allow_io; + + // If the file already exists, a socket in use error is returned. + base::DeleteFile(g_gnubby_socket_name.Get(), false); + } + + HOST_LOG << "Listening for gnubby requests on " + << g_gnubby_socket_name.Get().value(); + + auth_socket_.reset( + new net::UnixDomainServerSocket(base::Bind(MatchUid), false)); + int rv = auth_socket_->BindAndListen(g_gnubby_socket_name.Get().value(), + /*backlog=*/1); + if (rv != net::OK) { + LOG(ERROR) << "Failed to open socket for gnubby requests"; + return; + } + DoAccept(); + } else { + HOST_LOG << "No gnubby socket name specified"; + } +} + +void GnubbyAuthHandlerLinux::ProcessGnubbyRequest( + int connection_id, + const std::string& request_data) { + HOST_LOG << "Received gnubby request: " << GetCommandCode(request_data); + DeliverHostDataMessage(connection_id, request_data); +} + +GnubbyAuthHandlerLinux::ActiveSockets::iterator +GnubbyAuthHandlerLinux::GetSocketForMessage(base::DictionaryValue* message) { + int connection_id; + if (message->GetInteger(kConnectionId, &connection_id)) { + return active_sockets_.find(connection_id); + } + return active_sockets_.end(); +} + +void GnubbyAuthHandlerLinux::SendErrorAndCloseActiveSocket( + const ActiveSockets::iterator& iter) { + iter->second->SendSshError(); + delete iter->second; + active_sockets_.erase(iter); +} + +void GnubbyAuthHandlerLinux::RequestTimedOut(int connection_id) { + HOST_LOG << "Gnubby request timed out"; + ActiveSockets::iterator iter = active_sockets_.find(connection_id); + if (iter != active_sockets_.end()) + SendErrorAndCloseActiveSocket(iter); +} + +} // namespace remoting
diff --git a/remoting/host/security_key/gnubby_auth_handler_linux.h b/remoting/host/security_key/gnubby_auth_handler_linux.h new file mode 100644 index 0000000..a3c324e8 --- /dev/null +++ b/remoting/host/security_key/gnubby_auth_handler_linux.h
@@ -0,0 +1,101 @@ +// Copyright 2016 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 REMOTING_HOST_SECURITY_KEY_GNUBBY_AUTH_HANDLER_LINUX_H_ +#define REMOTING_HOST_SECURITY_KEY_GNUBBY_AUTH_HANDLER_LINUX_H_ + +#include <stddef.h> + +#include <map> +#include <string> + +#include "base/macros.h" +#include "base/memory/scoped_ptr.h" +#include "base/threading/non_thread_safe.h" +#include "net/base/completion_callback.h" +#include "net/socket/stream_socket.h" +#include "remoting/host/security_key/gnubby_auth_handler.h" + +namespace base { +class DictionaryValue; +} // namespace base + +namespace net { +class UnixDomainServerSocket; +} // namespace net + +namespace remoting { + +namespace protocol { +class ClientStub; +} // namespace protocol + +class GnubbySocket; + +class GnubbyAuthHandlerLinux : public GnubbyAuthHandler, + public base::NonThreadSafe { + public: + explicit GnubbyAuthHandlerLinux(protocol::ClientStub* client_stub); + ~GnubbyAuthHandlerLinux() override; + + size_t GetActiveSocketsMapSizeForTest() const; + + void SetRequestTimeoutForTest(const base::TimeDelta& timeout); + + private: + typedef std::map<int, GnubbySocket*> ActiveSockets; + + // GnubbyAuthHandler interface. + void DeliverClientMessage(const std::string& message) override; + void DeliverHostDataMessage(int connection_id, + const std::string& data) const override; + + // Starts listening for connection. + void DoAccept(); + + // Called when a connection is accepted. + void OnAccepted(int result); + + // Called when a GnubbySocket has done reading. + void OnReadComplete(int connection_id); + + // Create socket for authorization. + void CreateAuthorizationSocket(); + + // Process a gnubby request. + void ProcessGnubbyRequest(int connection_id, const std::string& request_data); + + // Gets an active socket iterator for the connection id in |message|. + ActiveSockets::iterator GetSocketForMessage(base::DictionaryValue* message); + + // Send an error and closes an active socket. + void SendErrorAndCloseActiveSocket(const ActiveSockets::iterator& iter); + + // A request timed out. + void RequestTimedOut(int connection_id); + + // Interface through which communication with the client occurs. + protocol::ClientStub* client_stub_; + + // Socket used to listen for authorization requests. + scoped_ptr<net::UnixDomainServerSocket> auth_socket_; + + // A temporary holder for an accepted connection. + scoped_ptr<net::StreamSocket> accept_socket_; + + // The last assigned gnubby connection id. + int last_connection_id_; + + // Sockets by connection id used to process gnubbyd requests. + ActiveSockets active_sockets_; + + // Timeout used for a request. + base::TimeDelta request_timeout_; + + DISALLOW_COPY_AND_ASSIGN(GnubbyAuthHandlerLinux); +}; + +} // namespace remoting + +#endif // REMOTING_HOST_SECURITY_KEY_GNUBBY_AUTH_HANDLER_LINUX_H_
diff --git a/remoting/host/security_key/gnubby_auth_handler_linux_unittest.cc b/remoting/host/security_key/gnubby_auth_handler_linux_unittest.cc new file mode 100644 index 0000000..2b73ffc --- /dev/null +++ b/remoting/host/security_key/gnubby_auth_handler_linux_unittest.cc
@@ -0,0 +1,234 @@ +// Copyright 2016 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 <stddef.h> + +#include "base/files/file_path.h" +#include "base/files/scoped_temp_dir.h" +#include "base/json/json_writer.h" +#include "base/macros.h" +#include "base/message_loop/message_loop.h" +#include "base/run_loop.h" +#include "base/strings/stringprintf.h" +#include "base/timer/mock_timer.h" +#include "base/values.h" +#include "net/base/io_buffer.h" +#include "net/base/net_errors.h" +#include "net/base/test_completion_callback.h" +#include "net/socket/unix_domain_client_socket_posix.h" +#include "remoting/host/security_key/gnubby_auth_handler_linux.h" +#include "remoting/host/security_key/gnubby_socket.h" +#include "remoting/proto/internal.pb.h" +#include "remoting/protocol/client_stub.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace remoting { + +namespace { + +const char kSocketFilename[] = "socket_for_testing"; + +// Test gnubby request data. +const unsigned char kRequestData[] = { + 0x00, 0x00, 0x00, 0x9a, 0x65, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x60, 0x90, + 0x24, 0x71, 0xf8, 0xf2, 0xe5, 0xdf, 0x7f, 0x81, 0xc7, 0x49, 0xc4, 0xa3, + 0x58, 0x5c, 0xf6, 0xcc, 0x40, 0x14, 0x28, 0x0c, 0xa0, 0xfa, 0x03, 0x18, + 0x38, 0xd8, 0x7d, 0x77, 0x2b, 0x3a, 0x00, 0x00, 0x00, 0x20, 0x64, 0x46, + 0x47, 0x2f, 0xdf, 0x6e, 0xed, 0x7b, 0xf3, 0xc3, 0x37, 0x20, 0xf2, 0x36, + 0x67, 0x6c, 0x36, 0xe1, 0xb4, 0x5e, 0xbe, 0x04, 0x85, 0xdb, 0x89, 0xa3, + 0xcd, 0xfd, 0xd2, 0x4b, 0xd6, 0x9f, 0x00, 0x00, 0x00, 0x40, 0x38, 0x35, + 0x05, 0x75, 0x1d, 0x13, 0x6e, 0xb3, 0x6b, 0x1d, 0x29, 0xae, 0xd3, 0x43, + 0xe6, 0x84, 0x8f, 0xa3, 0x9d, 0x65, 0x4e, 0x2f, 0x57, 0xe3, 0xf6, 0xe6, + 0x20, 0x3c, 0x00, 0xc6, 0xe1, 0x73, 0x34, 0xe2, 0x23, 0x99, 0xc4, 0xfa, + 0x91, 0xc2, 0xd5, 0x97, 0xc1, 0x8b, 0xd0, 0x3c, 0x13, 0xba, 0xf0, 0xd7, + 0x5e, 0xa3, 0xbc, 0x02, 0x5b, 0xec, 0xe4, 0x4b, 0xae, 0x0e, 0xf2, 0xbd, + 0xc8, 0xaa}; + +} // namespace + +class TestClientStub : public protocol::ClientStub { + public: + TestClientStub() : loop_(new base::RunLoop) {} + ~TestClientStub() override {} + + // protocol::ClientStub implementation. + void SetCapabilities(const protocol::Capabilities& capabilities) override {} + + void SetPairingResponse( + const protocol::PairingResponse& pairing_response) override {} + + void DeliverHostMessage(const protocol::ExtensionMessage& message) override { + message_ = message; + loop_->Quit(); + } + + // protocol::ClipboardStub implementation. + void InjectClipboardEvent(const protocol::ClipboardEvent& event) override {} + + // protocol::CursorShapeStub implementation. + void SetCursorShape(const protocol::CursorShapeInfo& cursor_shape) override {} + + void WaitForDeliverHostMessage() { + loop_->Run(); + loop_.reset(new base::RunLoop); + } + + void CheckHostDataMessage(int id, const std::string& data) { + std::string connection_id = base::StringPrintf("\"connectionId\":%d", id); + std::string data_message = base::StringPrintf("\"data\":%s", data.c_str()); + + ASSERT_TRUE(message_.type() == "gnubby-auth" || + message_.type() == "auth-v1"); + ASSERT_NE(message_.data().find("\"type\":\"data\""), std::string::npos); + ASSERT_NE(message_.data().find(connection_id), std::string::npos); + ASSERT_NE(message_.data().find(data_message), std::string::npos); + } + + private: + protocol::ExtensionMessage message_; + scoped_ptr<base::RunLoop> loop_; + + DISALLOW_COPY_AND_ASSIGN(TestClientStub); +}; + +class GnubbyAuthHandlerLinuxTest : public testing::Test { + public: + GnubbyAuthHandlerLinuxTest() { + EXPECT_TRUE(temp_dir_.CreateUniqueTempDir()); + socket_path_ = temp_dir_.path().Append(kSocketFilename); + auth_handler_posix_.reset(new GnubbyAuthHandlerLinux(&client_stub_)); + auth_handler_ = auth_handler_posix_.get(); + auth_handler_->SetGnubbySocketName(socket_path_); + } + + void WriteRequestData(net::UnixDomainClientSocket* client_socket) { + int request_len = sizeof(kRequestData); + scoped_refptr<net::DrainableIOBuffer> request_buffer( + new net::DrainableIOBuffer( + new net::WrappedIOBuffer( + reinterpret_cast<const char*>(kRequestData)), + request_len)); + net::TestCompletionCallback write_callback; + int bytes_written = 0; + while (bytes_written < request_len) { + int write_result = client_socket->Write(request_buffer.get(), + request_buffer->BytesRemaining(), + write_callback.callback()); + write_result = write_callback.GetResult(write_result); + ASSERT_GT(write_result, 0); + bytes_written += write_result; + ASSERT_LE(bytes_written, request_len); + request_buffer->DidConsume(write_result); + } + ASSERT_EQ(request_len, bytes_written); + } + + void WaitForAndVerifyHostMessage() { + client_stub_.WaitForDeliverHostMessage(); + base::ListValue expected_data; + // Skip first four bytes. + for (size_t i = 4; i < sizeof(kRequestData); ++i) { + expected_data.AppendInteger(kRequestData[i]); + } + + std::string expected_data_json; + base::JSONWriter::Write(expected_data, &expected_data_json); + client_stub_.CheckHostDataMessage(1, expected_data_json); + } + + protected: + // Object under test. + scoped_ptr<GnubbyAuthHandlerLinux> auth_handler_posix_; + + // GnubbyAuthHandler interface for |auth_handler_posix_|. + GnubbyAuthHandler* auth_handler_; + + base::MessageLoopForIO message_loop_; + TestClientStub client_stub_; + base::ScopedTempDir temp_dir_; + base::FilePath socket_path_; + base::Closure accept_callback_; +}; + +TEST_F(GnubbyAuthHandlerLinuxTest, HostDataMessageDelivered) { + auth_handler_->DeliverHostDataMessage(42, "test_msg"); + client_stub_.WaitForDeliverHostMessage(); + // Expects a JSON array of the ASCII character codes for "test_msg". + client_stub_.CheckHostDataMessage(42, "[116,101,115,116,95,109,115,103]"); +} + +TEST_F(GnubbyAuthHandlerLinuxTest, NotClosedAfterRequest) { + ASSERT_EQ(0u, auth_handler_posix_->GetActiveSocketsMapSizeForTest()); + + const char message_json[] = "{\"type\":\"control\",\"option\":\"auth-v1\"}"; + auth_handler_->DeliverClientMessage(message_json); + + net::UnixDomainClientSocket client_socket(socket_path_.value(), false); + net::TestCompletionCallback connect_callback; + + int rv = client_socket.Connect(connect_callback.callback()); + ASSERT_EQ(net::OK, connect_callback.GetResult(rv)); + + // Write the request and verify the response. + WriteRequestData(&client_socket); + WaitForAndVerifyHostMessage(); + + // Verify that completing a request/response cycle didn't close the socket. + ASSERT_EQ(1u, auth_handler_posix_->GetActiveSocketsMapSizeForTest()); +} + +TEST_F(GnubbyAuthHandlerLinuxTest, HandleTwoRequests) { + ASSERT_EQ(0u, auth_handler_posix_->GetActiveSocketsMapSizeForTest()); + + const char message_json[] = "{\"type\":\"control\",\"option\":\"auth-v1\"}"; + auth_handler_->DeliverClientMessage(message_json); + + net::UnixDomainClientSocket client_socket(socket_path_.value(), false); + net::TestCompletionCallback connect_callback; + + int rv = client_socket.Connect(connect_callback.callback()); + ASSERT_EQ(net::OK, connect_callback.GetResult(rv)); + + // Write the request and verify the response. + WriteRequestData(&client_socket); + WaitForAndVerifyHostMessage(); + + // Repeat the request/response cycle. + WriteRequestData(&client_socket); + WaitForAndVerifyHostMessage(); + + // Verify that completing two request/response cycles didn't close the socket. + ASSERT_EQ(1u, auth_handler_posix_->GetActiveSocketsMapSizeForTest()); +} + +TEST_F(GnubbyAuthHandlerLinuxTest, DidReadTimeout) { + std::string message_json = "{\"type\":\"control\",\"option\":\"auth-v1\"}"; + + ASSERT_EQ(0u, auth_handler_posix_->GetActiveSocketsMapSizeForTest()); + auth_handler_->DeliverClientMessage(message_json); + net::UnixDomainClientSocket client_socket(socket_path_.value(), false); + net::TestCompletionCallback connect_callback; + int rv = client_socket.Connect(connect_callback.callback()); + ASSERT_EQ(net::OK, connect_callback.GetResult(rv)); + auth_handler_posix_->SetRequestTimeoutForTest(base::TimeDelta()); + ASSERT_EQ(0u, auth_handler_posix_->GetActiveSocketsMapSizeForTest()); +} + +TEST_F(GnubbyAuthHandlerLinuxTest, ClientErrorMessageDelivered) { + std::string message_json = "{\"type\":\"control\",\"option\":\"auth-v1\"}"; + + ASSERT_EQ(0u, auth_handler_posix_->GetActiveSocketsMapSizeForTest()); + auth_handler_->DeliverClientMessage(message_json); + net::UnixDomainClientSocket client_socket(socket_path_.value(), false); + net::TestCompletionCallback connect_callback; + int rv = client_socket.Connect(connect_callback.callback()); + ASSERT_EQ(net::OK, connect_callback.GetResult(rv)); + + std::string error_json = "{\"type\":\"error\",\"connectionId\":1}"; + auth_handler_->DeliverClientMessage(error_json); + ASSERT_EQ(0u, auth_handler_posix_->GetActiveSocketsMapSizeForTest()); +} + +} // namespace remoting
diff --git a/remoting/host/security_key/gnubby_auth_handler_mac.cc b/remoting/host/security_key/gnubby_auth_handler_mac.cc new file mode 100644 index 0000000..b76d77cc --- /dev/null +++ b/remoting/host/security_key/gnubby_auth_handler_mac.cc
@@ -0,0 +1,48 @@ +// Copyright 2016 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 "remoting/host/security_key/gnubby_auth_handler.h" + +#include "base/logging.h" +#include "base/macros.h" + +namespace remoting { + +namespace { + +class GnubbyAuthHandlerMac : public GnubbyAuthHandler { + private: + // GnubbyAuthHandler interface. + void DeliverClientMessage(const std::string& message) override; + void DeliverHostDataMessage(int connection_id, + const std::string& data) const override; + + DISALLOW_COPY_AND_ASSIGN(GnubbyAuthHandlerMac); +}; + +} // namespace + +// static +scoped_ptr<GnubbyAuthHandler> GnubbyAuthHandler::Create( + protocol::ClientStub* client_stub) { + return nullptr; +} + +// static +void GnubbyAuthHandler::SetGnubbySocketName( + const base::FilePath& gnubby_socket_name) { + NOTIMPLEMENTED(); +} + +void GnubbyAuthHandlerMac::DeliverClientMessage(const std::string& message) { + NOTIMPLEMENTED(); +} + +void GnubbyAuthHandlerMac::DeliverHostDataMessage( + int connection_id, + const std::string& data) const { + NOTIMPLEMENTED(); +} + +} // namespace remoting
diff --git a/remoting/host/security_key/gnubby_auth_handler_win.cc b/remoting/host/security_key/gnubby_auth_handler_win.cc new file mode 100644 index 0000000..83351abcb --- /dev/null +++ b/remoting/host/security_key/gnubby_auth_handler_win.cc
@@ -0,0 +1,48 @@ +// Copyright 2016 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 "remoting/host/security_key/gnubby_auth_handler.h" + +#include "base/logging.h" +#include "base/macros.h" + +namespace remoting { + +namespace { + +class GnubbyAuthHandlerWin : public GnubbyAuthHandler { + private: + // GnubbyAuthHandler interface. + void DeliverClientMessage(const std::string& message) override; + void DeliverHostDataMessage(int connection_id, + const std::string& data) const override; + + DISALLOW_COPY_AND_ASSIGN(GnubbyAuthHandlerWin); +}; + +} // namespace + +// static +scoped_ptr<GnubbyAuthHandler> GnubbyAuthHandler::Create( + protocol::ClientStub* client_stub) { + return nullptr; +} + +// static +void GnubbyAuthHandler::SetGnubbySocketName( + const base::FilePath& gnubby_socket_name) { + NOTIMPLEMENTED(); +} + +void GnubbyAuthHandlerWin::DeliverClientMessage(const std::string& message) { + NOTIMPLEMENTED(); +} + +void GnubbyAuthHandlerWin::DeliverHostDataMessage( + int connection_id, + const std::string& data) const { + NOTIMPLEMENTED(); +} + +} // namespace remoting
diff --git a/remoting/host/security_key/gnubby_socket.cc b/remoting/host/security_key/gnubby_socket.cc new file mode 100644 index 0000000..cc54a22 --- /dev/null +++ b/remoting/host/security_key/gnubby_socket.cc
@@ -0,0 +1,188 @@ +// Copyright 2016 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 "remoting/host/security_key/gnubby_socket.h" + +#include <utility> + +#include "base/callback_helpers.h" +#include "base/macros.h" +#include "base/timer/timer.h" +#include "net/base/io_buffer.h" +#include "net/base/net_errors.h" +#include "net/socket/stream_socket.h" + +namespace remoting { + +namespace { + +const size_t kRequestSizeBytes = 4; +const size_t kMaxRequestLength = 16384; +const size_t kRequestReadBufferLength = kRequestSizeBytes + kMaxRequestLength; + +// SSH Failure Code +const char kSshError[] = {0x05}; + +} // namespace + +GnubbySocket::GnubbySocket(scoped_ptr<net::StreamSocket> socket, + const base::TimeDelta& timeout, + const base::Closure& timeout_callback) + : socket_(std::move(socket)), + read_completed_(false), + read_buffer_(new net::IOBufferWithSize(kRequestReadBufferLength)) { + timer_.reset(new base::Timer(false, false)); + timer_->Start(FROM_HERE, timeout, timeout_callback); +} + +GnubbySocket::~GnubbySocket() {} + +bool GnubbySocket::GetAndClearRequestData(std::string* data_out) { + DCHECK(CalledOnValidThread()); + DCHECK(read_completed_); + + if (!read_completed_) + return false; + if (!IsRequestComplete() || IsRequestTooLarge()) + return false; + // The request size is not part of the data; don't send it. + data_out->assign(request_data_.begin() + kRequestSizeBytes, + request_data_.end()); + request_data_.clear(); + return true; +} + +void GnubbySocket::SendResponse(const std::string& response_data) { + DCHECK(CalledOnValidThread()); + DCHECK(!write_buffer_); + + std::string response_length_string = GetResponseLengthAsBytes(response_data); + int response_len = response_length_string.size() + response_data.size(); + scoped_ptr<std::string> response( + new std::string(response_length_string + response_data)); + write_buffer_ = new net::DrainableIOBuffer( + new net::StringIOBuffer(std::move(response)), response_len); + DoWrite(); +} + +void GnubbySocket::SendSshError() { + DCHECK(CalledOnValidThread()); + + SendResponse(std::string(kSshError, arraysize(kSshError))); +} + +void GnubbySocket::StartReadingRequest( + const base::Closure& request_received_callback) { + DCHECK(CalledOnValidThread()); + DCHECK(request_received_callback_.is_null()); + + request_received_callback_ = request_received_callback; + DoRead(); +} + +void GnubbySocket::OnDataWritten(int result) { + DCHECK(CalledOnValidThread()); + DCHECK(write_buffer_); + + if (result < 0) { + LOG(ERROR) << "Error sending response: " << result; + return; + } + ResetTimer(); + write_buffer_->DidConsume(result); + DoWrite(); +} + +void GnubbySocket::DoWrite() { + DCHECK(CalledOnValidThread()); + DCHECK(write_buffer_); + + if (!write_buffer_->BytesRemaining()) { + write_buffer_ = nullptr; + return; + } + int result = socket_->Write( + write_buffer_.get(), write_buffer_->BytesRemaining(), + base::Bind(&GnubbySocket::OnDataWritten, base::Unretained(this))); + if (result != net::ERR_IO_PENDING) + OnDataWritten(result); +} + +void GnubbySocket::OnDataRead(int result) { + DCHECK(CalledOnValidThread()); + + if (result <= 0) { + if (result < 0) + LOG(ERROR) << "Error reading request: " << result; + read_completed_ = true; + base::ResetAndReturn(&request_received_callback_).Run(); + return; + } + + ResetTimer(); + request_data_.insert(request_data_.end(), read_buffer_->data(), + read_buffer_->data() + result); + if (IsRequestComplete()) { + read_completed_ = true; + base::ResetAndReturn(&request_received_callback_).Run(); + return; + } + + DoRead(); +} + +void GnubbySocket::DoRead() { + DCHECK(CalledOnValidThread()); + + int result = socket_->Read( + read_buffer_.get(), kRequestReadBufferLength, + base::Bind(&GnubbySocket::OnDataRead, base::Unretained(this))); + if (result != net::ERR_IO_PENDING) + OnDataRead(result); +} + +bool GnubbySocket::IsRequestComplete() const { + DCHECK(CalledOnValidThread()); + + if (request_data_.size() < kRequestSizeBytes) + return false; + return GetRequestLength() <= request_data_.size(); +} + +bool GnubbySocket::IsRequestTooLarge() const { + DCHECK(CalledOnValidThread()); + + if (request_data_.size() < kRequestSizeBytes) + return false; + return GetRequestLength() > kMaxRequestLength; +} + +size_t GnubbySocket::GetRequestLength() const { + DCHECK(request_data_.size() >= kRequestSizeBytes); + + return ((request_data_[0] & 255) << 24) + ((request_data_[1] & 255) << 16) + + ((request_data_[2] & 255) << 8) + (request_data_[3] & 255) + + kRequestSizeBytes; +} + +std::string GnubbySocket::GetResponseLengthAsBytes( + const std::string& response) const { + std::string response_len; + response_len.reserve(kRequestSizeBytes); + int len = response.size(); + + response_len.push_back((len >> 24) & 255); + response_len.push_back((len >> 16) & 255); + response_len.push_back((len >> 8) & 255); + response_len.push_back(len & 255); + + return response_len; +} + +void GnubbySocket::ResetTimer() { + if (timer_->IsRunning()) + timer_->Reset(); +} + +} // namespace remoting
diff --git a/remoting/host/security_key/gnubby_socket.h b/remoting/host/security_key/gnubby_socket.h new file mode 100644 index 0000000..e37f64f --- /dev/null +++ b/remoting/host/security_key/gnubby_socket.h
@@ -0,0 +1,110 @@ +// Copyright 2016 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 REMOTING_HOST_SECURITY_KEY_GNUBBY_SOCKET_H_ +#define REMOTING_HOST_SECURITY_KEY_GNUBBY_SOCKET_H_ + +#include <stddef.h> + +#include <string> +#include <vector> + +#include "base/callback.h" +#include "base/macros.h" +#include "base/memory/ref_counted.h" +#include "base/memory/scoped_ptr.h" +#include "base/threading/non_thread_safe.h" + +namespace base { +class Timer; +} // namespace base + +namespace net { +class DrainableIOBuffer; +class IOBufferWithSize; +class StreamSocket; +} // namespace net + +namespace remoting { + +// Class that manages reading requests and sending responses. The socket can +// only handle receiving one request at a time. It expects to receive no extra +// bytes over the wire, which is checked by IsRequestTooLarge method. +class GnubbySocket : public base::NonThreadSafe { + public: + GnubbySocket(scoped_ptr<net::StreamSocket> socket, + const base::TimeDelta& timeout, + const base::Closure& timeout_callback); + ~GnubbySocket(); + + // Returns false if the request has not yet completed, or is too large to be + // processed. Otherwise, the cached request data is copied into |data_out| and + // the internal buffer resets and is ready for the next request. + bool GetAndClearRequestData(std::string* data_out); + + // Sends response data to the socket. + void SendResponse(const std::string& data); + + // Sends an SSH error code to the socket. + void SendSshError(); + + // |request_received_callback| is used to notify the caller that request data + // has been fully read, and caller is to use GetAndClearRequestData method to + // get the request data. + void StartReadingRequest(const base::Closure& request_received_callback); + + private: + // Called when bytes are written to |socket_|. + void OnDataWritten(int result); + + // Continues writing to |socket_| if needed. + void DoWrite(); + + // Called when bytes are read from |socket_|. + void OnDataRead(int bytes_read); + + // Continues to read. + void DoRead(); + + // Returns true if the current request is complete. + bool IsRequestComplete() const; + + // Returns true if the stated request size is larger than the allowed maximum. + bool IsRequestTooLarge() const; + + // Returns the stated request length. + size_t GetRequestLength() const; + + // Returns the response length bytes. + std::string GetResponseLengthAsBytes(const std::string& response) const; + + // Resets the socket activity timer. + void ResetTimer(); + + // The socket. + scoped_ptr<net::StreamSocket> socket_; + + // Invoked when request data has been read. + base::Closure request_received_callback_; + + // Indicates whether read has completed and |request_received_callback_| is + // about to be run. + bool read_completed_; + + // Request data. + std::vector<char> request_data_; + + scoped_refptr<net::DrainableIOBuffer> write_buffer_; + + scoped_refptr<net::IOBufferWithSize> read_buffer_; + + // The activity timer. + scoped_ptr<base::Timer> timer_; + + DISALLOW_COPY_AND_ASSIGN(GnubbySocket); +}; + +} // namespace remoting + +#endif // REMOTING_HOST_SECURITY_KEY_GNUBBY_SOCKET_H_
diff --git a/remoting/protocol/it2me_host_authenticator_factory.cc b/remoting/protocol/it2me_host_authenticator_factory.cc index d20f2e8a..6bc05fbd 100644 --- a/remoting/protocol/it2me_host_authenticator_factory.cc +++ b/remoting/protocol/it2me_host_authenticator_factory.cc
@@ -5,8 +5,10 @@ #include "remoting/protocol/it2me_host_authenticator_factory.h" #include "base/logging.h" +#include "base/strings/string_util.h" #include "remoting/base/rsa_key_pair.h" #include "remoting/protocol/negotiating_host_authenticator.h" +#include "remoting/protocol/rejecting_authenticator.h" namespace remoting { namespace protocol { @@ -14,10 +16,12 @@ It2MeHostAuthenticatorFactory::It2MeHostAuthenticatorFactory( const std::string& local_cert, scoped_refptr<RsaKeyPair> key_pair, - const std::string& shared_secret) + const std::string& shared_secret, + const std::string& required_client_domain) : local_cert_(local_cert), key_pair_(key_pair), - shared_secret_(shared_secret) { + shared_secret_(shared_secret), + required_client_domain_(required_client_domain) { } It2MeHostAuthenticatorFactory::~It2MeHostAuthenticatorFactory() { @@ -27,6 +31,23 @@ const std::string& local_jid, const std::string& remote_jid, const buzz::XmlElement* first_message) { + // Check the client domain policy. + if (!required_client_domain_.empty()) { + std::string client_username = remote_jid; + size_t pos = client_username.find('/'); + if (pos != std::string::npos) { + client_username.replace(pos, std::string::npos, ""); + } + if (!base::EndsWith(client_username, + std::string("@") + required_client_domain_, + base::CompareCase::INSENSITIVE_ASCII)) { + LOG(ERROR) << "Rejecting incoming connection from " << remote_jid + << ": Domain mismatch."; + return make_scoped_ptr( + new RejectingAuthenticator(Authenticator::INVALID_CREDENTIALS)); + } + } + return NegotiatingHostAuthenticator::CreateWithSharedSecret( local_cert_, key_pair_, shared_secret_, AuthenticationMethod::NONE, nullptr);
diff --git a/remoting/protocol/it2me_host_authenticator_factory.h b/remoting/protocol/it2me_host_authenticator_factory.h index ee16c84..fddea60 100644 --- a/remoting/protocol/it2me_host_authenticator_factory.h +++ b/remoting/protocol/it2me_host_authenticator_factory.h
@@ -26,7 +26,8 @@ It2MeHostAuthenticatorFactory( const std::string& local_cert, scoped_refptr<RsaKeyPair> key_pair, - const std::string& shared_secret); + const std::string& shared_secret, + const std::string& required_client_domain); ~It2MeHostAuthenticatorFactory() override; // AuthenticatorFactory interface. @@ -39,6 +40,7 @@ std::string local_cert_; scoped_refptr<RsaKeyPair> key_pair_; std::string shared_secret_; + std::string required_client_domain_; DISALLOW_COPY_AND_ASSIGN(It2MeHostAuthenticatorFactory); };
diff --git a/remoting/protocol/me2me_host_authenticator_factory.cc b/remoting/protocol/me2me_host_authenticator_factory.cc index ce218e7..bd31a0d2 100644 --- a/remoting/protocol/me2me_host_authenticator_factory.cc +++ b/remoting/protocol/me2me_host_authenticator_factory.cc
@@ -11,6 +11,7 @@ #include "remoting/base/rsa_key_pair.h" #include "remoting/protocol/channel_authenticator.h" #include "remoting/protocol/negotiating_host_authenticator.h" +#include "remoting/protocol/rejecting_authenticator.h" #include "remoting/protocol/token_validator.h" #include "remoting/signaling/jid_util.h" #include "third_party/webrtc/libjingle/xmllite/xmlelement.h" @@ -18,54 +19,6 @@ namespace remoting { namespace protocol { -namespace { - -// Authenticator that accepts one message and rejects connection after that. -class RejectingAuthenticator : public Authenticator { - public: - RejectingAuthenticator() - : state_(WAITING_MESSAGE) { - } - ~RejectingAuthenticator() override {} - - State state() const override { return state_; } - - bool started() const override { return true; } - - RejectionReason rejection_reason() const override { - DCHECK_EQ(state_, REJECTED); - return INVALID_CREDENTIALS; - } - - void ProcessMessage(const buzz::XmlElement* message, - const base::Closure& resume_callback) override { - DCHECK_EQ(state_, WAITING_MESSAGE); - state_ = REJECTED; - resume_callback.Run(); - } - - scoped_ptr<buzz::XmlElement> GetNextMessage() override { - NOTREACHED(); - return nullptr; - } - - const std::string& GetAuthKey() const override { - NOTREACHED(); - return auth_key_; - }; - - scoped_ptr<ChannelAuthenticator> CreateChannelAuthenticator() const override { - NOTREACHED(); - return nullptr; - } - - protected: - State state_; - std::string auth_key_; -}; - -} // namespace - // static scoped_ptr<AuthenticatorFactory> Me2MeHostAuthenticatorFactory::CreateWithSharedSecret( @@ -73,6 +26,7 @@ const std::string& host_owner, const std::string& local_cert, scoped_refptr<RsaKeyPair> key_pair, + const std::string& required_client_domain, const SharedSecretHash& shared_secret_hash, scoped_refptr<PairingRegistry> pairing_registry) { scoped_ptr<Me2MeHostAuthenticatorFactory> result( @@ -81,6 +35,7 @@ result->host_owner_ = host_owner; result->local_cert_ = local_cert; result->key_pair_ = key_pair; + result->required_client_domain_ = required_client_domain; result->shared_secret_hash_ = shared_secret_hash; result->pairing_registry_ = pairing_registry; return std::move(result); @@ -94,6 +49,7 @@ const std::string& host_owner, const std::string& local_cert, scoped_refptr<RsaKeyPair> key_pair, + const std::string& required_client_domain, scoped_ptr<TokenValidatorFactory> token_validator_factory) { scoped_ptr<Me2MeHostAuthenticatorFactory> result( @@ -102,6 +58,7 @@ result->host_owner_ = host_owner; result->local_cert_ = local_cert; result->key_pair_ = key_pair; + result->required_client_domain_ = required_client_domain; result->token_validator_factory_ = std::move(token_validator_factory); return std::move(result); } @@ -126,7 +83,8 @@ // account will have the same prefix. if (!SplitJidResource(local_jid, &remote_jid_prefix, nullptr)) { LOG(DFATAL) << "Invalid local JID:" << local_jid; - return make_scoped_ptr(new RejectingAuthenticator()); + return make_scoped_ptr( + new RejectingAuthenticator(Authenticator::INVALID_CREDENTIALS)); } } else { // TODO(rmsousa): This only works for cases where the JID prefix matches @@ -139,8 +97,27 @@ if (!base::IsStringASCII(remote_jid) || !base::StartsWith(remote_jid, remote_jid_prefix + '/', base::CompareCase::INSENSITIVE_ASCII)) { - LOG(ERROR) << "Rejecting incoming connection from " << remote_jid; - return make_scoped_ptr(new RejectingAuthenticator()); + LOG(ERROR) << "Rejecting incoming connection from " << remote_jid + << ": Prefix mismatch."; + return make_scoped_ptr( + new RejectingAuthenticator(Authenticator::INVALID_CREDENTIALS)); + } + + // If necessary, verify that the client's jid belongs to the correct domain. + if (!required_client_domain_.empty()) { + std::string client_username = remote_jid; + size_t pos = client_username.find('/'); + if (pos != std::string::npos) { + client_username.replace(pos, std::string::npos, ""); + } + if (!base::EndsWith(client_username, + std::string("@") + required_client_domain_, + base::CompareCase::INSENSITIVE_ASCII)) { + LOG(ERROR) << "Rejecting incoming connection from " << remote_jid + << ": Domain mismatch."; + return make_scoped_ptr( + new RejectingAuthenticator(Authenticator::INVALID_CREDENTIALS)); + } } if (!local_cert_.empty() && key_pair_.get()) { @@ -156,7 +133,8 @@ shared_secret_hash_.hash_function, pairing_registry_); } - return make_scoped_ptr(new RejectingAuthenticator()); + return make_scoped_ptr( + new RejectingAuthenticator(Authenticator::INVALID_CREDENTIALS)); } } // namespace protocol
diff --git a/remoting/protocol/me2me_host_authenticator_factory.h b/remoting/protocol/me2me_host_authenticator_factory.h index c3140b3..5cc1beed 100644 --- a/remoting/protocol/me2me_host_authenticator_factory.h +++ b/remoting/protocol/me2me_host_authenticator_factory.h
@@ -32,6 +32,7 @@ const std::string& host_owner, const std::string& local_cert, scoped_refptr<RsaKeyPair> key_pair, + const std::string& required_client_domain, const SharedSecretHash& shared_secret_hash, scoped_refptr<PairingRegistry> pairing_registry); @@ -41,6 +42,7 @@ const std::string& host_owner, const std::string& local_cert, scoped_refptr<RsaKeyPair> key_pair, + const std::string& required_client_domain, scoped_ptr<TokenValidatorFactory> token_validator_factory); Me2MeHostAuthenticatorFactory(); @@ -58,6 +60,7 @@ std::string host_owner_; std::string local_cert_; scoped_refptr<RsaKeyPair> key_pair_; + std::string required_client_domain_; // Used only for shared secret host authenticators. SharedSecretHash shared_secret_hash_;
diff --git a/remoting/protocol/rejecting_authenticator.cc b/remoting/protocol/rejecting_authenticator.cc new file mode 100644 index 0000000..b82cfc4 --- /dev/null +++ b/remoting/protocol/rejecting_authenticator.cc
@@ -0,0 +1,58 @@ +// Copyright 2015 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 "remoting/protocol/rejecting_authenticator.h" + +#include "base/logging.h" +#include "remoting/protocol/channel_authenticator.h" +#include "third_party/webrtc/libjingle/xmllite/xmlelement.h" + +namespace remoting { +namespace protocol { + +RejectingAuthenticator::RejectingAuthenticator(RejectionReason rejection_reason) + : rejection_reason_(rejection_reason) { +} + +RejectingAuthenticator::~RejectingAuthenticator() = default; + +Authenticator::State RejectingAuthenticator::state() const { + return state_; +} +bool RejectingAuthenticator::started() const { + return true; +} + +Authenticator::RejectionReason +RejectingAuthenticator::rejection_reason() const { + DCHECK_EQ(state_, REJECTED); + return rejection_reason_; +} + +void RejectingAuthenticator::ProcessMessage( + const buzz::XmlElement* message, + const base::Closure& resume_callback) { + DCHECK_EQ(state_, WAITING_MESSAGE); + state_ = REJECTED; + resume_callback.Run(); +} + +scoped_ptr<buzz::XmlElement> RejectingAuthenticator::GetNextMessage() { + NOTREACHED(); + return nullptr; +} + +const std::string& RejectingAuthenticator::GetAuthKey() const { + NOTREACHED(); + return auth_key_; +}; + +scoped_ptr<ChannelAuthenticator> +RejectingAuthenticator::CreateChannelAuthenticator() const { + NOTREACHED(); + return nullptr; +} + +} // namespace protocol +} // namespace remoting
diff --git a/remoting/protocol/rejecting_authenticator.h b/remoting/protocol/rejecting_authenticator.h new file mode 100644 index 0000000..cced70db --- /dev/null +++ b/remoting/protocol/rejecting_authenticator.h
@@ -0,0 +1,42 @@ +// Copyright 2016 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 REMOTING_PROTOCOL_REJECTING_AUTHENTICATOR_FACTORY_H_ +#define REMOTING_PROTOCOL_REJECTING_AUTHENTICATOR_FACTORY_H_ + +#include <string> + +#include "remoting/protocol/authenticator.h" + +namespace remoting { +namespace protocol { + +// Authenticator that accepts one message and rejects connection after that. +class RejectingAuthenticator : public Authenticator { + public: + RejectingAuthenticator(RejectionReason rejection_reason); + ~RejectingAuthenticator() override; + + // Authenticator interface + State state() const override; + bool started() const override; + RejectionReason rejection_reason() const override; + void ProcessMessage(const buzz::XmlElement* message, + const base::Closure& resume_callback) override; + scoped_ptr<buzz::XmlElement> GetNextMessage() override; + const std::string& GetAuthKey() const override; + scoped_ptr<ChannelAuthenticator> CreateChannelAuthenticator() const override; + + private: + RejectionReason rejection_reason_; + State state_ = WAITING_MESSAGE; + std::string auth_key_; + + DISALLOW_COPY_AND_ASSIGN(RejectingAuthenticator); +}; + +} // namespace protocol +} // namespace remoting + +#endif // REMOTING_PROTOCOL_REJECTING_AUTHENTICATOR_FACTORY_H_
diff --git a/remoting/remoting_host_srcs.gypi b/remoting/remoting_host_srcs.gypi index 22b4d38..e5f8315 100644 --- a/remoting/remoting_host_srcs.gypi +++ b/remoting/remoting_host_srcs.gypi
@@ -101,12 +101,6 @@ 'host/gcd_rest_client.h', 'host/gcd_state_updater.cc', 'host/gcd_state_updater.h', - 'host/gnubby_auth_handler.h', - 'host/gnubby_auth_handler_posix.cc', - 'host/gnubby_auth_handler_posix.h', - 'host/gnubby_auth_handler_win.cc', - 'host/gnubby_socket.cc', - 'host/gnubby_socket.h', 'host/heartbeat_sender.cc', 'host/heartbeat_sender.h', 'host/host_change_notification_listener.cc', @@ -218,6 +212,13 @@ 'host/screen_controls.h', 'host/screen_resolution.cc', 'host/screen_resolution.h', + 'host/security_key/gnubby_auth_handler.h', + 'host/security_key/gnubby_auth_handler_linux.cc', + 'host/security_key/gnubby_auth_handler_linux.h', + 'host/security_key/gnubby_auth_handler_mac.cc', + 'host/security_key/gnubby_auth_handler_win.cc', + 'host/security_key/gnubby_socket.cc', + 'host/security_key/gnubby_socket.h', 'host/server_log_entry_host.cc', 'host/server_log_entry_host.h', 'host/shaped_desktop_capturer.cc',
diff --git a/remoting/remoting_srcs.gypi b/remoting/remoting_srcs.gypi index cb4b1ff..391b4211 100644 --- a/remoting/remoting_srcs.gypi +++ b/remoting/remoting_srcs.gypi
@@ -177,6 +177,8 @@ 'protocol/pseudotcp_adapter.h', 'protocol/pseudotcp_channel_factory.cc', 'protocol/pseudotcp_channel_factory.h', + 'protocol/rejecting_authenticator.cc', + 'protocol/rejecting_authenticator.h', 'protocol/secure_channel_factory.cc', 'protocol/secure_channel_factory.h', 'protocol/session.h',
diff --git a/remoting/remoting_test.gypi b/remoting/remoting_test.gypi index c3eccd24..071b34c 100644 --- a/remoting/remoting_test.gypi +++ b/remoting/remoting_test.gypi
@@ -263,7 +263,6 @@ 'host/desktop_shape_tracker_unittest.cc', 'host/gcd_rest_client_unittest.cc', 'host/gcd_state_updater_unittest.cc', - 'host/gnubby_auth_handler_posix_unittest.cc', 'host/heartbeat_sender_unittest.cc', 'host/host_change_notification_listener_unittest.cc', 'host/host_config_unittest.cc', @@ -290,6 +289,7 @@ 'host/resizing_host_observer_unittest.cc', 'host/resources_unittest.cc', 'host/screen_resolution_unittest.cc', + 'host/security_key/gnubby_auth_handler_linux_unittest.cc', 'host/server_log_entry_host_unittest.cc', 'host/setup/me2me_native_messaging_host.cc', 'host/setup/me2me_native_messaging_host.h',
diff --git a/remoting/resources/remoting_strings_bn.xtb b/remoting/resources/remoting_strings_bn.xtb index 68d1a024..5495d1d6 100644 --- a/remoting/resources/remoting_strings_bn.xtb +++ b/remoting/resources/remoting_strings_bn.xtb
@@ -15,7 +15,7 @@ গোপনীয়তা সম্পর্কিত তথ্যের জন্য, দয়া করে Google এর গোপনীয়তা নীতি (http://goo.gl/SyrVzj) এবং Chrome এর গোপনীয়তা নীতি (http://goo.gl/0uXE5d) দেখুন৷</translation> <translation id="1324095856329524885">(এই বৈশিষ্ট্যটি এখনও আপনার কম্পিউটারের জন্য উপলব্ধ নয়)</translation> -<translation id="1342297293546459414">একটি ভাগ করা কম্পিউটার দেখুন ও নিয়ন্ত্রণ করুন৷</translation> +<translation id="1342297293546459414">একটি শেয়ার করা কম্পিউটার দেখুন ও নিয়ন্ত্রণ করুন৷</translation> <translation id="1389790901665088353">Chrome দূরবর্তী ডেস্কটপ হোস্ট ইনস্টলার ডাউনলোড করুন</translation> <translation id="1450760146488584666">অনুরোধের বস্তুটির কোনো অস্তিত্ব নেই৷</translation> <translation id="1480046233931937785">কৃতিত্ব</translation> @@ -53,7 +53,7 @@ গোপনীয়তা সম্পর্কিত তথ্যের জন্য, দয়া করে Google এর গোপনীয়তা নীতি (http://goo.gl/SyrVzj) এবং Chrome এর গোপনীয়তা নীতি (http://goo.gl/0uXE5d) দেখুন৷</translation> <translation id="2124408767156847088">নিরাপদভাবে আপনার Android ডিভাইস থেকে আপনার কম্পিউটারগুলি অ্যাক্সেস করুন৷</translation> -<translation id="2208514473086078157">নীতি সেটিংস এই কম্পিউটারটিকে Chrome দূরবর্তী ডেস্কটপ হোস্ট হিসাবে ভাগ করার অনুমতি দেয় না৷ সহায়তার জন্য আপনার সিস্টেম প্রসাশকের সাথে যোগাযোগ করুন৷</translation> +<translation id="2208514473086078157">নীতি সেটিংস এই কম্পিউটারটিকে Chrome দূরবর্তী ডেস্কটপ হোস্ট হিসাবে শেয়ার করার অনুমতি দেয় না৷ সহায়তার জন্য আপনার সিস্টেম প্রসাশকের সাথে যোগাযোগ করুন৷</translation> <translation id="2220529011494928058">কোনো সমস্যার প্রতিবেদন করুন</translation> <translation id="2221097377466213233">Win কী (ম্যাক ⌘) এর জন্য ডান Ctrl ব্যবহার করুন</translation> <translation id="2235518894410572517">অন্য ব্যবহারকারী যাতে এই কম্পিউটারটিকে দেখতে ও নিয়ন্ত্রণ করতে পারে তার জন্য এটিকে ভাগ করুন৷</translation> @@ -69,7 +69,7 @@ <translation id="2498359688066513246">সহায়তা ও প্রতিক্রিয়া</translation> <translation id="2499160551253595098">আমাদের ব্যবহার পরিসংখ্যান এবং ক্র্যাশ প্রতিবেদনগুলি সংগ্রহের অনুমতি দিয়ে, Chrome দূরবর্তী ডেস্কটপের উন্নতিতে আমাদের সাহায্য করুন৷</translation> <translation id="2512228156274966424">দ্রষ্টব্য: সমস্ত কীবোর্ড শর্টকাট উপলব্ধ থাকাকে নিশ্চিত করতে, আপনি Chrome দূরবর্তী ডেস্কটপ ‘উইন্ডো হিসাবে খোলার জন্য’ কনফিগার করতে পারেন৷</translation> -<translation id="2540992418118313681">আপনি কি অন্য ব্যবহারকারীকে দেখার এবং নিয়ন্ত্রণ করার জন্য এই কম্পিউটারটি ভাগ করতে চান?</translation> +<translation id="2540992418118313681">আপনি কি অন্য ব্যবহারকারীকে দেখার এবং নিয়ন্ত্রণ করার জন্য এই কম্পিউটারটি শেয়ার করতে চান?</translation> <translation id="2599300881200251572">এই পরিষেবাটি Chrome দূরবর্তী ডেস্কটপ থেকে আগত সংযোগুলি সক্ষম করে৷</translation> <translation id="2647232381348739934">Chromoting পরিষেবা</translation> <translation id="2676780859508944670">কাজ করছে...</translation> @@ -77,12 +77,12 @@ <translation id="2747641796667576127">সফ্টওয়্যার আপডেটগুলি সাধারণত স্বয়ংক্রিয়ভাবে হয়ে থাকে, কিন্তু কিছু বিরল ক্ষেত্রে ব্যর্থ হতে পারে৷ সফ্টওয়্যারটি আপডেট হতে কয়েক মিনিটের বেশি লাগার কথা নয় এবং আপনার কম্পিউটারের সাথে দূরবর্তী সংযোগে থাকাকালীনও করা যেতে পারে৷</translation> <translation id="2813770873348017932">দূরবর্তী কম্পিউটারের সংযোগ সাময়িকভাবে অবরোধ করা হয়েছে কারণ কোনো ব্যক্তি অবৈধ পিন এর মাধ্যমে এতে সংযোগ করার চেষ্টা করছিল৷ দয়া করে পরে আবার চেষ্টা করুন৷</translation> <translation id="2841013758207633010">সময়</translation> -<translation id="2851674870054673688">তাদের দ্বারা কোডটি লেখা হয়ে যাবার পর আপনার ভাগ করার অধিবেশনটি শুরু হবে৷</translation> +<translation id="2851674870054673688">তাদের দ্বারা কোডটি লেখা হয়ে যাবার পর আপনার শেয়ার করার অধিবেশনটি শুরু হবে৷</translation> <translation id="2851754573186462851">Chromium অ্যাপ্লিকেশান স্ট্রীমিং</translation> <translation id="2855866366045322178">অফলাইন</translation> <translation id="2888969873284818612">নেটওয়ার্ক সংক্রান্ত ত্রুটি ঘটেছে। আপনার ডিভাইস আবার অন-লাইনে এলে আমরা অ্যাপ্লিকেশানটি আবার চালু করব।</translation> -<translation id="2894654864775534701">এই কম্পিউটারটি বর্তমানে একটি পৃথক অ্যাকাউন্টের অধীনে ভাগ করা হয়েছে৷</translation> -<translation id="2919669478609886916">আপনি বর্তমানে এই মেশিনটিকে অন্য ব্যবহারকারীর সাথে ভাগ করছেন৷ আপনি কি ভাগ করা অবিরত করতে চান?</translation> +<translation id="2894654864775534701">এই কম্পিউটারটি বর্তমানে একটি পৃথক অ্যাকাউন্টের অধীনে শেয়ার করা হয়েছে৷</translation> +<translation id="2919669478609886916">আপনি বর্তমানে এই মেশিনটিকে অন্য ব্যবহারকারীর সাথে ভাগ করছেন৷ আপনি কি শেয়ার করা অবিরত করতে চান?</translation> <translation id="2921543551052660690">আপনি আগে <ph name="USER_NAME" /> (<ph name="USER_EMAIL" />) হিসেবে সাইন ইন করেছিলেন। সেই অ্যাকাউন্টে আপনার কম্পিউটার অ্যাক্সেস করতে, সেই অ্যাকাউন্টের মাধ্যমে <ph name="LINK_BEGIN" />Chromium-এ সাইন ইন করুন<ph name="LINK_END" /> এবং Chromoting পুনরায় ইনস্টল করুন।</translation> <translation id="2926340305933667314">এই কম্পিউটারটিতে দূরবর্তী অ্যাক্সেস অক্ষম করতে ব্যর্থ হয়েছে৷ দয়া করে পরে আবার চেষ্টা করুন৷</translation> <translation id="2930135165929238380">কিছু প্রয়োজনীয় উপাদান অনুপস্থিত। দয়া করে chrome://plugins এ যান এবং নিশ্চিত হোন যে নেটিভ ক্লায়েন্ট সক্ষম করা আছে।</translation> @@ -104,7 +104,7 @@ <translation id="3362124771485993931">পিন পুনরায় টাইপ করুন</translation> <translation id="337167041784729019">পরিসংখ্যান দেখান</translation> <translation id="3385242214819933234">অবৈধ হোস্ট মালিক।</translation> -<translation id="3403830762023901068">নীতি সেটিংস এই কম্পিউটারটিকে Chromoting হোস্ট হিসাবে ভাগ করার অনুমতি দেয় না৷ সহায়তার জন্য আপনার সিস্টেম প্রসাশকের সাথে যোগাযোগ করুন৷</translation> +<translation id="3403830762023901068">নীতি সেটিংস এই কম্পিউটারটিকে Chromoting হোস্ট হিসাবে শেয়ার করার অনুমতি দেয় না৷ সহায়তার জন্য আপনার সিস্টেম প্রসাশকের সাথে যোগাযোগ করুন৷</translation> <translation id="3581045510967524389">নেটওয়ার্কের সাথে সংযুক্ত করা যায়নি৷ দয়া করে আপনার ডিভাইসটি অন-লাইন আছে কিনা পরীক্ষা করুন৷</translation> <translation id="3596628256176442606">এই পরিষেবাটি Chromoting থেকে আগত সংযোগুলি সক্ষম করে৷</translation> <translation id="3606997049964069799">আপনি Chromium এ সাইন ইন করা অবস্থায় নেই৷ অনুগ্রহ করে সাইন ইন করুন এবং আবার চেষ্টা করুন৷</translation> @@ -177,7 +177,7 @@ <translation id="5254120496627797685">এই পৃষ্ঠাটি ছেড়ে গেলেও সেটা আপনার Chrome দূরবর্তী ডেস্কটপ অধিবেশনটিকে শেষ করবে৷</translation> <translation id="5308380583665731573">সংযুক্ত করুন</translation> <translation id="5363265567587775042">“<ph name="SHARE" />” এ ক্লিক করতে এবং আপনাকে অ্যাক্সেস কোড দিতে আপনি কার কম্পিউটার অ্যাক্সেস করতে চান তা ব্যবহারকারিকে জিজ্ঞেস করুন।</translation> -<translation id="5379087427956679853">Chrome দূরবর্তী ডেস্কটপ আপনাকে ওয়েবে আপনার কম্পিউটার নিরাপদভাবে ভাগ করার মঞ্জুরি দেয়৷ উভয় ব্যবহারকারীকেই Chrome দূরবর্তী ডেস্কটপ অ্যাপ্লিকেশন চালাতে হবে যা <ph name="URL" />এ পেতে পারেন৷</translation> +<translation id="5379087427956679853">Chrome দূরবর্তী ডেস্কটপ আপনাকে ওয়েবে আপনার কম্পিউটার নিরাপদভাবে শেয়ার করার মঞ্জুরি দেয়৷ উভয় ব্যবহারকারীকেই Chrome দূরবর্তী ডেস্কটপ অ্যাপ্লিকেশন চালাতে হবে যা <ph name="URL" />এ পেতে পারেন৷</translation> <translation id="5394895745784982830">Mac এর জন্য (OS X 10.6 ও এর উর্ধ্বে)</translation> <translation id="5397086374758643919">Chrome দূরবর্তী ডেস্কটপ হোস্ট আনইনস্টলার</translation> <translation id="5419185025274123272">অ্যাপ্লিকেশান রিসেট করা গেল না। আপনি এখনও বাগ রিপোর্ট পাঠাতে পারবেন।</translation> @@ -189,14 +189,14 @@ <translation id="5619148062500147964">এই কম্পিউটারটিতে</translation> <translation id="5625493749705183369">ইন্টারনেটে নিরাপদভাবে অন্যদের কম্পিউটারগুলি অ্যাক্সেস করুন অথবা অন্য ব্যবহারকারীকে আপনার কম্পিউটার অ্যাক্সেস করতে দিন৷</translation> <translation id="5702987232842159181">সংযুক্ত:</translation> -<translation id="5708869785009007625">আপনার ডেস্কটপটি বর্তমানে <ph name="USER" /> এর সাথে ভাগ করা হয়েছে৷</translation> +<translation id="5708869785009007625">আপনার ডেস্কটপটি বর্তমানে <ph name="USER" /> এর সাথে শেয়ার করা হয়েছে৷</translation> <translation id="5773590752998175013">যুক্ত করার তারিখ</translation> <translation id="579702532610384533">পুনরায সংযোগ করুন</translation> <translation id="5843054235973879827">এটি কেন নিরাপদ?</translation> <translation id="5859141382851488196">নতুন উইন্ডো...</translation> <translation id="5885438903806970186">অনলাইন।</translation> <translation id="6001953797859482435">Chrome দূরবর্তী ডেস্কটপ হোস্ট পছন্দগুলি</translation> -<translation id="6011539954251327702">Chromoting আপনাকে নিরাপদভাবে ওয়েবে আপনার কম্পিউটারকে ভাগ করার অনুমতি দেয়৷ ব্যবহারকারীদের উভয়ের Chromoting অ্যাপ্লিকেশন চালনা করা অবশ্যক, যা <ph name="URL" /> এ পেতে পারেন৷</translation> +<translation id="6011539954251327702">Chromoting আপনাকে নিরাপদভাবে ওয়েবে আপনার কম্পিউটারকে শেয়ার করার অনুমতি দেয়৷ ব্যবহারকারীদের উভয়ের Chromoting অ্যাপ্লিকেশন চালনা করা অবশ্যক, যা <ph name="URL" /> এ পেতে পারেন৷</translation> <translation id="6040143037577758943">বন্ধ</translation> <translation id="6062854958530969723">হোস্ট আরম্ভ করা ব্যর্থ হয়েছে।</translation> <translation id="6091564239975589852">কিগুলি পাঠান</translation> @@ -216,7 +216,7 @@ <translation id="6398765197997659313">পূর্ণ স্ক্রীণ বন্ধ করুন</translation> <translation id="6441316101718669559">এই প্ল্যাটফর্মে ডেস্কটপ ইন্টিগ্রেশন সমর্থিত নয়। আপনি তাও এই অ্যাপ্লিকেশান ব্যবহার করতে পারেন, কিন্তু ব্যবহারকারী অভিজ্ঞতার মান নেমে যাবে।</translation> <translation id="652218476070540101">এই কম্পিউটারের পিন আপডেট হচ্ছে...</translation> -<translation id="6527303717912515753">ভাগ করুন</translation> +<translation id="6527303717912515753">শেয়ার করুন</translation> <translation id="6541219117979389420">অ্যাপ্লিকেশানের লগে আপনার পরিচয় পত্র (ইমেল ঠিকানা) এবং Google ড্রাইভের ফাইল ও ফোল্ডারের নাম ও বৈশিষ্ট্য সহ ব্যক্তিগত তথ্য থাকতে পারে।</translation> <translation id="6542902059648396432">কোনো সমস্যার প্রতিবেদন করুন...</translation> <translation id="6550675742724504774">বিকল্পসমূহ</translation> @@ -245,7 +245,7 @@ <translation id="7149517134817561223">Chrome দূরবর্তী ডেস্কটপ হোস্টের জন্য কম্যান্ড ইস্যু করে যে অ্যাপ্লিকেশান।</translation> <translation id="7215059001581613786">দয়া করে ছয়টি অথবা তার বেশি সংখ্যার একটি পিন লিখুন৷</translation> <translation id="7312846573060934304">হোস্ট এখন অফলাইনে।</translation> -<translation id="7319983568955948908">ভাগ করা বন্ধ করুন</translation> +<translation id="7319983568955948908">শেয়ার করা বন্ধ করুন</translation> <translation id="7401733114166276557">Chrome দূরবর্তী ডেস্কটপ</translation> <translation id="7434397035092923453">এই ক্লায়েন্টের জন্য অ্যাক্সেস স্বীকৃত নয়: <ph name="CLIENT_USERNAME" />.</translation> <translation id="7444276978508498879">ক্লায়েন্ট সংযুক্ত: <ph name="CLIENT_USERNAME" />৷</translation> @@ -269,7 +269,7 @@ <translation id="809687642899217504">আমার কম্পিউটারগুলি</translation> <translation id="811307782653349804">যে কোনো জায়গা থেকে আপনার নিজের কম্পিউটারে অ্যাক্সেস করুন৷</translation> <translation id="8116630183974937060">একটি নেটওয়ার্ক ত্রুটি ঘটেছে৷ আপনার ডিভাইস অন-লাইনে আছে কিনা তা পরীক্ষা করে আবার চেষ্টা করুন৷</translation> -<translation id="8178433417677596899">ব্যবহারকারী-থেকে-ব্যবহারকারীতে স্ক্রীন ভাগ করা, দূরবর্তী প্রযুক্তিগত সহায়তার জন্য উপযুক্ত৷</translation> +<translation id="8178433417677596899">ব্যবহারকারী-থেকে-ব্যবহারকারীতে স্ক্রীন শেয়ার করা, দূরবর্তী প্রযুক্তিগত সহায়তার জন্য উপযুক্ত৷</translation> <translation id="8187079423890319756">কপিরাইট ২০১৩ Chromium রচয়িতা৷ সর্বস্বত্ত্ব সংরক্ষিত৷</translation> <translation id="8196755618196986400">পরবর্তী তথ্যের জন্য আমাদেরকে আপনার সঙ্গে যোগাযোগ করার অনুমতি দিতে, আপনি কোনো প্রতিক্রিয়া জমা দিলে তার সঙ্গে আপনার ইমেল ঠিকানা যোগ করা হবে।</translation> <translation id="8244400547700556338">জানুন কিভাবে৷</translation> @@ -294,7 +294,7 @@ <translation id="9016232822027372900">যেকোনো উপায়ে সংযোগ স্থাপন করুন</translation> <translation id="906458777597946297">উইন্ডো বৃহদায়ন করুন</translation> <translation id="9126115402994542723">এই কম্পিউটার থেকে এই হোস্টে সংযুক্ত হওয়ার সময় পুনরায় পিন এর জন্য জিজ্ঞাসা করবেন না৷</translation> -<translation id="9149992051684092333">আপনার ডেস্কটপ ভাগ করা শুরু করতে, আপনাকে যে ব্যক্তি সহায়তা করবে তাকে নীচের অ্যাক্সেস কোডটি দিন৷</translation> +<translation id="9149992051684092333">আপনার ডেস্কটপ শেয়ার করা শুরু করতে, আপনাকে যে ব্যক্তি সহায়তা করবে তাকে নীচের অ্যাক্সেস কোডটি দিন৷</translation> <translation id="9188433529406846933">অনুমতি দিন</translation> <translation id="9213184081240281106">অবৈধ হোস্ট কনফিগারেশন।</translation> <translation id="951991426597076286">প্রত্যাখ্যান</translation>
diff --git a/remoting/test/protocol_perftest.cc b/remoting/test/protocol_perftest.cc index 3695b75..3d09b8c2 100644 --- a/remoting/test/protocol_perftest.cc +++ b/remoting/test/protocol_perftest.cc
@@ -353,7 +353,7 @@ host_secret.value = "123456"; scoped_ptr<protocol::AuthenticatorFactory> auth_factory = protocol::Me2MeHostAuthenticatorFactory::CreateWithSharedSecret( - true, kHostOwner, host_cert, key_pair, host_secret, nullptr); + true, kHostOwner, host_cert, key_pair, "", host_secret, nullptr); host_->SetAuthenticatorFactory(std::move(auth_factory)); host_->AddStatusObserver(this);
diff --git a/sandbox/linux/integration_tests/bpf_dsl_seccomp_unittest.cc b/sandbox/linux/integration_tests/bpf_dsl_seccomp_unittest.cc index 3b0d6ac46..0616458 100644 --- a/sandbox/linux/integration_tests/bpf_dsl_seccomp_unittest.cc +++ b/sandbox/linux/integration_tests/bpf_dsl_seccomp_unittest.cc
@@ -15,6 +15,7 @@ #include <sys/syscall.h> #include <sys/time.h> #include <sys/types.h> +#include <sys/uio.h> #include <sys/utsname.h> #include <unistd.h> @@ -22,6 +23,7 @@ // Work-around for buggy headers in Android's NDK #define __user #endif +#include <linux/elf.h> #include <linux/futex.h> #include "base/bind.h" @@ -1876,15 +1878,24 @@ #endif #endif -#if defined(__aarch64__) -#ifndef PTRACE_GETREGS -#define PTRACE_GETREGS 12 +#if defined(OS_ANDROID) +#define PtraceRequest int +#else +#define PtraceRequest __ptrace_request #endif +// While this is available since 2.6.34, the enum in ptrace.h may not +// provide it. +#ifndef PTRACE_GETREGSET +#define PTRACE_GETREGSET static_cast<PtraceRequest>(0x4204) +#endif + +#ifndef PTRACE_SETREGSET +#define PTRACE_SETREGSET static_cast<PtraceRequest>(0x4205) #endif #if defined(__aarch64__) -#ifndef PTRACE_SETREGS -#define PTRACE_SETREGS 13 +#ifndef NT_ARM_SYSTEM_CALL +#define NT_ARM_SYSTEM_CALL 0x404 #endif #endif @@ -1893,20 +1904,25 @@ // PTRACE_EVENT_SECCOMP. // // regs should contain the current set of registers of the child, obtained using -// PTRACE_GETREGS. +// PTRACE_GETREGSSET. // // Depending on the architecture, this may modify regs, so the caller is -// responsible for committing these changes using PTRACE_SETREGS. +// responsible for committing these changes using PTRACE_SETREGSET. long SetSyscall(pid_t pid, regs_struct* regs, int syscall_number) { #if defined(__arm__) // On ARM, the syscall is changed using PTRACE_SET_SYSCALL. We cannot use the // libc ptrace call as the request parameter is an enum, and // PTRACE_SET_SYSCALL may not be in the enum. return syscall(__NR_ptrace, PTRACE_SET_SYSCALL, pid, NULL, syscall_number); -#endif - +#elif defined(__aarch64__) + struct iovec iov; + iov.iov_base = &syscall_number; + iov.iov_len = sizeof(syscall_number); + return ptrace(PTRACE_SETREGSET, pid, NT_ARM_SYSTEM_CALL, &iov); +#else SECCOMP_PT_SYSCALL(*regs) = syscall_number; return 0; +#endif } const uint16_t kTraceData = 0xcc; @@ -1930,13 +1946,6 @@ return; } -// This test is disabled on arm due to a kernel bug. -// See https://code.google.com/p/chromium/issues/detail?id=383977 -#if defined(__arm__) || defined(__aarch64__) - printf("This test is currently disabled on ARM32/64 due to a kernel bug."); - return; -#endif - #if defined(__mips__) // TODO: Figure out how to support specificity of handling indirect syscalls // in this test and enable it. @@ -1996,7 +2005,10 @@ BPF_ASSERT_EQ(kTraceData, data); regs_struct regs; - BPF_ASSERT_NE(-1, ptrace(PTRACE_GETREGS, pid, NULL, ®s)); + struct iovec iov; + iov.iov_base = ®s; + iov.iov_len = sizeof(regs); + BPF_ASSERT_NE(-1, ptrace(PTRACE_GETREGSET, pid, NT_PRSTATUS, &iov)); switch (SECCOMP_PT_SYSCALL(regs)) { case __NR_write: // Skip writes to stdout, make it return kExpectedReturnValue. Allow @@ -2004,7 +2016,7 @@ if (SECCOMP_PT_PARM1(regs) == STDOUT_FILENO) { BPF_ASSERT_NE(-1, SetSyscall(pid, ®s, -1)); SECCOMP_PT_RESULT(regs) = kExpectedReturnValue; - BPF_ASSERT_NE(-1, ptrace(PTRACE_SETREGS, pid, NULL, ®s)); + BPF_ASSERT_NE(-1, ptrace(PTRACE_SETREGSET, pid, NT_PRSTATUS, &iov)); } break; @@ -2012,7 +2024,7 @@ // Rewrite to exit(kExpectedReturnValue). BPF_ASSERT_NE(-1, SetSyscall(pid, ®s, __NR_exit)); SECCOMP_PT_PARM1(regs) = kExpectedReturnValue; - BPF_ASSERT_NE(-1, ptrace(PTRACE_SETREGS, pid, NULL, ®s)); + BPF_ASSERT_NE(-1, ptrace(PTRACE_SETREGSET, pid, NT_PRSTATUS, &iov)); break; default:
diff --git a/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc b/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc index c217d47..10278dc 100644 --- a/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc +++ b/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
@@ -550,7 +550,7 @@ #if defined(__i386__) || defined(__arm__) || defined(__mips__) case __NR__newselect: #endif -#if defined(__arm__) +#if defined(__arm__) || defined(__mips__) case __NR_send: #endif #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) || \
diff --git a/skia/config/SkUserConfig.h b/skia/config/SkUserConfig.h index 955518a42..16a392d9 100644 --- a/skia/config/SkUserConfig.h +++ b/skia/config/SkUserConfig.h
@@ -240,10 +240,6 @@ # define SK_SUPPORT_LEGACY_EVAL_CUBIC #endif -#ifndef SK_SUPPORT_LEGACY_NEG_SCALE_HQ -# define SK_SUPPORT_LEGACY_NEG_SCALE_HQ -#endif - ///////////////////////// Imported from BUILD.gn and skia_common.gypi /* In some places Skia can use static initializers for global initialization,
diff --git a/sync/BUILD.gn b/sync/BUILD.gn index 8c9788c..9cd103d3 100644 --- a/sync/BUILD.gn +++ b/sync/BUILD.gn
@@ -557,6 +557,7 @@ "internal_api/public/test/fake_metadata_change_list.h", "internal_api/public/test/fake_model_type_service.h", "internal_api/public/test/fake_sync_manager.h", + "internal_api/public/test/model_type_store_test_util.h", "internal_api/public/test/null_sync_context_proxy.h", "internal_api/public/test/sync_manager_factory_for_profile_sync_test.h", "internal_api/public/test/test_entry_factory.h", @@ -565,6 +566,7 @@ "internal_api/test/fake_metadata_change_list.cc", "internal_api/test/fake_model_type_service.cc", "internal_api/test/fake_sync_manager.cc", + "internal_api/test/model_type_store_test_util.cc", "internal_api/test/null_sync_context_proxy.cc", "internal_api/test/sync_manager_factory_for_profile_sync_test.cc", "internal_api/test/sync_manager_for_profile_sync_test.cc",
diff --git a/sync/internal_api/public/test/model_type_store_test_util.h b/sync/internal_api/public/test/model_type_store_test_util.h new file mode 100644 index 0000000..53d010b --- /dev/null +++ b/sync/internal_api/public/test/model_type_store_test_util.h
@@ -0,0 +1,29 @@ +// Copyright 2016 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 SYNC_INTERNAL_API_PUBLIC_TEST_MODEL_TYPE_STORE_TEST_UTIL_H_ +#define SYNC_INTERNAL_API_PUBLIC_TEST_MODEL_TYPE_STORE_TEST_UTIL_H_ + +#include "base/memory/scoped_ptr.h" +#include "sync/api/model_type_store.h" + +namespace syncer_v2 { + +// Util class with several static methods to facilitate writing unit tests for +// classes that use ModelTypeStore objects. +class ModelTypeStoreTestUtil { + public: + // Creates an in memory store syncronously. Be aware that to do this all + // outstanding tasks will be run as the current message loop is pumped. + static scoped_ptr<ModelTypeStore> CreateInMemoryStoreForTest(); + + // Can be curried with an owned store object to allow passing an already + // created store to a service constructor in a unit test. + static void MoveStoreToCallback(scoped_ptr<ModelTypeStore> store, + ModelTypeStore::InitCallback callback); +}; + +} // namespace syncer_v2 + +#endif // SYNC_INTERNAL_API_PUBLIC_TEST_MODEL_TYPE_STORE_TEST_UTIL_H_
diff --git a/sync/internal_api/public/util/experiments.h b/sync/internal_api/public/util/experiments.h index f105723f..264702e 100644 --- a/sync/internal_api/public/util/experiments.h +++ b/sync/internal_api/public/util/experiments.h
@@ -13,7 +13,6 @@ const char kFaviconSyncTag[] = "favicon_sync"; const char kPreCommitUpdateAvoidanceTag[] = "pre_commit_update_avoidance"; -const char kEnhancedBookmarksTag[] = "enhanced_bookmarks"; const char kGCMInvalidationsTag[] = "gcm_invalidations"; const char kWalletSyncTag[] = "wallet_sync"; @@ -21,14 +20,11 @@ struct Experiments { Experiments() : favicon_sync_limit(200), - enhanced_bookmarks_enabled(false), gcm_invalidations_enabled(true), // By default GCM channel is enabled. wallet_sync_enabled(false) {} bool Matches(const Experiments& rhs) { return (favicon_sync_limit == rhs.favicon_sync_limit && - enhanced_bookmarks_enabled == rhs.enhanced_bookmarks_enabled && - enhanced_bookmarks_ext_id == rhs.enhanced_bookmarks_ext_id && gcm_invalidations_enabled == rhs.gcm_invalidations_enabled && wallet_sync_enabled == rhs.wallet_sync_enabled); } @@ -36,15 +32,9 @@ // The number of favicons that a client is permitted to sync. int favicon_sync_limit; - // Enable the enhanced bookmarks sync datatype. - bool enhanced_bookmarks_enabled; - // Enable invalidations over GCM channel. bool gcm_invalidations_enabled; - // Enhanced bookmarks extension id. - std::string enhanced_bookmarks_ext_id; - // Enable the Wallet Autofill sync datatype. bool wallet_sync_enabled; };
diff --git a/sync/internal_api/test/model_type_store_test_util.cc b/sync/internal_api/test/model_type_store_test_util.cc new file mode 100644 index 0000000..13990d8e --- /dev/null +++ b/sync/internal_api/test/model_type_store_test_util.cc
@@ -0,0 +1,50 @@ +// Copyright 2016 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 "sync/internal_api/public/test/model_type_store_test_util.h" + +#include <utility> + +#include "base/bind.h" +#include "base/run_loop.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace syncer_v2 { + +using Result = ModelTypeStore::Result; + +namespace { + +void MoveStoreToScopedPtr(scoped_ptr<ModelTypeStore>* out_store, + Result result, + scoped_ptr<ModelTypeStore> in_store) { + ASSERT_EQ(Result::SUCCESS, result); + std::swap(*out_store, in_store); +} + +} // namespace + +// static +scoped_ptr<ModelTypeStore> +ModelTypeStoreTestUtil::CreateInMemoryStoreForTest() { + scoped_ptr<ModelTypeStore> store; + ModelTypeStore::CreateInMemoryStoreForTest( + base::Bind(&MoveStoreToScopedPtr, &store)); + + // Force the initialization to run now, synchronously. + base::RunLoop().RunUntilIdle(); + + EXPECT_TRUE(store); + return store; +} + +// static +void ModelTypeStoreTestUtil::MoveStoreToCallback( + scoped_ptr<ModelTypeStore> store, + ModelTypeStore::InitCallback callback) { + ASSERT_TRUE(store); + callback.Run(Result::SUCCESS, std::move(store)); +} + +} // namespace syncer_v2
diff --git a/sync/sync_tests.gypi b/sync/sync_tests.gypi index 1c0b7ace..6f3231a 100644 --- a/sync/sync_tests.gypi +++ b/sync/sync_tests.gypi
@@ -186,6 +186,7 @@ 'internal_api/public/test/fake_metadata_change_list.h', 'internal_api/public/test/fake_model_type_service.h', 'internal_api/public/test/fake_sync_manager.h', + 'internal_api/public/test/model_type_store_test_util.h', 'internal_api/public/test/null_sync_context_proxy.h', 'internal_api/public/test/sync_manager_factory_for_profile_sync_test.h', 'internal_api/public/test/test_entry_factory.h', @@ -194,6 +195,7 @@ 'internal_api/test/fake_metadata_change_list.cc', 'internal_api/test/fake_model_type_service.cc', 'internal_api/test/fake_sync_manager.cc', + 'internal_api/test/model_type_store_test_util.cc', 'internal_api/test/null_sync_context_proxy.cc', 'internal_api/test/sync_manager_factory_for_profile_sync_test.cc', 'internal_api/test/sync_manager_for_profile_sync_test.cc',
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json index f14ddca..296ab76 100644 --- a/testing/buildbot/chromium.chromiumos.json +++ b/testing/buildbot/chromium.chromiumos.json
@@ -356,6 +356,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromeos_unittests" }, { @@ -640,6 +646,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromeos_unittests" }, {
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index 5daa96c6..5d0f6fdc 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -76,6 +76,20 @@ { "test": "unit_tests" } + ], + "instrumentation_tests": [ + { + "test": "AndroidWebViewTest" + }, + { + "test": "ChromePublicTest" + }, + { + "test": "ChromeSyncShellTest" + }, + { + "test": "ContentShellTest" + } ] }, "Android Tests (trial)(dbg)": { @@ -781,6 +795,12 @@ "test": "cacheinvalidation_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { "test": "chrome_elf_unittests" }, { @@ -832,6 +852,9 @@ "test": "installer_util_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ipc_tests" }, { @@ -1011,6 +1034,9 @@ "test": "interactive_ui_tests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ipc_tests" }, { @@ -1226,6 +1252,9 @@ "test": "interactive_ui_tests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ipc_tests" }, { @@ -1497,6 +1526,9 @@ "test": "interactive_ui_tests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ipc_tests" }, { @@ -1732,6 +1764,9 @@ "test": "interactive_ui_tests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ipc_tests" }, { @@ -1872,6 +1907,12 @@ "test": "cacheinvalidation_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { "test": "chrome_elf_unittests" }, { @@ -1923,6 +1964,9 @@ "test": "installer_util_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ipc_tests" }, { @@ -2039,6 +2083,12 @@ "test": "cacheinvalidation_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { "test": "chrome_elf_unittests" }, { @@ -2090,6 +2140,9 @@ "test": "installer_util_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ipc_tests" }, { @@ -2206,6 +2259,12 @@ "test": "cacheinvalidation_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { "test": "chrome_elf_unittests" }, { @@ -2257,6 +2316,9 @@ "test": "installer_util_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ipc_tests" }, { @@ -2373,6 +2435,12 @@ "test": "cacheinvalidation_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { "test": "chrome_elf_unittests" }, { @@ -2424,6 +2492,9 @@ "test": "installer_util_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ipc_tests" }, { @@ -2540,6 +2611,12 @@ "test": "cacheinvalidation_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { "test": "chrome_elf_unittests" }, { @@ -2591,6 +2668,9 @@ "test": "installer_util_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ipc_tests" }, { @@ -2707,6 +2787,12 @@ "test": "cacheinvalidation_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { "test": "chrome_elf_unittests" }, { @@ -2761,6 +2847,9 @@ "test": "installer_util_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ipc_tests" }, { @@ -2877,6 +2966,12 @@ "test": "cacheinvalidation_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { "test": "chrome_elf_unittests" }, { @@ -3077,6 +3172,12 @@ "test": "cacheinvalidation_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { "test": "chrome_elf_unittests" }, { @@ -3258,6 +3359,12 @@ "test": "cacheinvalidation_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { "test": "chrome_elf_unittests" }, { @@ -3455,6 +3562,12 @@ "test": "cacheinvalidation_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { "test": "chrome_elf_unittests" }, { @@ -3506,6 +3619,9 @@ "test": "installer_util_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ipc_tests" }, { @@ -3622,6 +3738,12 @@ "test": "cacheinvalidation_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { "test": "chrome_elf_unittests" }, { @@ -3673,6 +3795,9 @@ "test": "installer_util_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ipc_tests" }, { @@ -3789,6 +3914,12 @@ "test": "cacheinvalidation_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { "test": "chrome_elf_unittests" }, { @@ -3840,6 +3971,9 @@ "test": "installer_util_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ipc_tests" }, { @@ -3956,6 +4090,12 @@ "test": "cacheinvalidation_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { "test": "chrome_elf_unittests" }, { @@ -4007,6 +4147,9 @@ "test": "installer_util_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ipc_tests" }, { @@ -4116,6 +4259,12 @@ "test": "cacheinvalidation_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { "test": "chrome_elf_unittests" }, { @@ -4155,6 +4304,9 @@ "test": "installer_util_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ipc_tests" }, { @@ -4265,6 +4417,12 @@ "test": "cacheinvalidation_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { "test": "chrome_elf_unittests" }, { @@ -4316,6 +4474,9 @@ "test": "installer_util_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ipc_tests" }, { @@ -4432,6 +4593,12 @@ "test": "cacheinvalidation_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { "test": "chrome_elf_unittests" }, { @@ -4483,6 +4650,9 @@ "test": "installer_util_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "ipc_tests" }, {
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json index 04ffa39..aa08577 100644 --- a/testing/buildbot/chromium.gpu.fyi.json +++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -369,6 +369,29 @@ "--show-stdout", "--browser=debug", "-v", + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle" + ], + "isolate_name": "telemetry_gpu_test", + "name": "webgl_conformance_angle_tests", + "override_compile_targets": [ + "telemetry_gpu_test_run" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "10de:104a", + "os": "Linux" + } + ] + } + }, + { + "args": [ + "webgl_conformance", + "--show-stdout", + "--browser=debug", + "-v", "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" ], "isolate_name": "telemetry_gpu_test", @@ -758,6 +781,29 @@ "--show-stdout", "--browser=release", "-v", + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle" + ], + "isolate_name": "telemetry_gpu_test", + "name": "webgl_conformance_angle_tests", + "override_compile_targets": [ + "telemetry_gpu_test_run" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "1002:6779", + "os": "Linux" + } + ] + } + }, + { + "args": [ + "webgl_conformance", + "--show-stdout", + "--browser=release", + "-v", "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" ], "isolate_name": "telemetry_gpu_test", @@ -1147,6 +1193,29 @@ "--show-stdout", "--browser=release", "-v", + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle" + ], + "isolate_name": "telemetry_gpu_test", + "name": "webgl_conformance_angle_tests", + "override_compile_targets": [ + "telemetry_gpu_test_run" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:041a", + "os": "Linux" + } + ] + } + }, + { + "args": [ + "webgl_conformance", + "--show-stdout", + "--browser=release", + "-v", "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" ], "isolate_name": "telemetry_gpu_test", @@ -1536,6 +1605,29 @@ "--show-stdout", "--browser=release", "-v", + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle" + ], + "isolate_name": "telemetry_gpu_test", + "name": "webgl_conformance_angle_tests", + "override_compile_targets": [ + "telemetry_gpu_test_run" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:041a", + "os": "Linux" + } + ] + } + }, + { + "args": [ + "webgl_conformance", + "--show-stdout", + "--browser=release", + "-v", "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" ], "isolate_name": "telemetry_gpu_test", @@ -1944,6 +2036,29 @@ "--show-stdout", "--browser=release", "-v", + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle" + ], + "isolate_name": "telemetry_gpu_test", + "name": "webgl_conformance_angle_tests", + "override_compile_targets": [ + "telemetry_gpu_test_run" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "10de:104a", + "os": "Linux" + } + ] + } + }, + { + "args": [ + "webgl_conformance", + "--show-stdout", + "--browser=release", + "-v", "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" ], "isolate_name": "telemetry_gpu_test", @@ -5367,6 +5482,29 @@ } ] } + }, + { + "args": [ + "webgl_conformance", + "--show-stdout", + "--browser=release", + "-v", + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=gl" + ], + "isolate_name": "telemetry_gpu_test", + "name": "webgl_conformance_gl_tests", + "override_compile_targets": [ + "telemetry_gpu_test_run" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "1002:6779", + "os": "Windows-2008ServerR2-SP1" + } + ] + } } ] }, @@ -5449,6 +5587,29 @@ } ] } + }, + { + "args": [ + "webgl_conformance", + "--show-stdout", + "--browser=release", + "-v", + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=gl" + ], + "isolate_name": "telemetry_gpu_test", + "name": "webgl_conformance_gl_tests", + "override_compile_targets": [ + "telemetry_gpu_test_run" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "10de:104a", + "os": "Windows-2008ServerR2-SP1" + } + ] + } } ] }, @@ -6347,29 +6508,6 @@ "--show-stdout", "--browser=release", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=gl" - ], - "isolate_name": "telemetry_gpu_test", - "name": "webgl_conformance_gl_tests", - "override_compile_targets": [ - "telemetry_gpu_test_run" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "1002:6779", - "os": "Windows-2008ServerR2-SP1" - } - ] - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "-v", "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" ], "isolate_name": "telemetry_gpu_test",
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json index 48bcf01..2b14d13 100644 --- a/testing/buildbot/chromium.linux.json +++ b/testing/buildbot/chromium.linux.json
@@ -614,6 +614,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -1054,6 +1060,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -1422,6 +1434,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, {
diff --git a/testing/buildbot/chromium.mac.json b/testing/buildbot/chromium.mac.json index feec4a8..58731e9 100644 --- a/testing/buildbot/chromium.mac.json +++ b/testing/buildbot/chromium.mac.json
@@ -17,6 +17,7 @@ "cacheinvalidation_unittests", "cast_unittests", "cc_unittests", + "chrome_app_unittests", "chromedriver_unittests", "crypto_unittests", "gcm_unit_tests", @@ -102,6 +103,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -415,6 +422,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -728,6 +741,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -1041,6 +1060,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -1360,6 +1385,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, { @@ -1673,6 +1704,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "chrome_app_unittests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "chromedriver_unittests" }, {
diff --git a/testing/buildbot/chromium.win.json b/testing/buildbot/chromium.win.json index bc1050c..a1707dd 100644 --- a/testing/buildbot/chromium.win.json +++ b/testing/buildbot/chromium.win.json
@@ -63,6 +63,12 @@ "test": "cc_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { "test": "chrome_elf_unittests" }, { @@ -570,6 +576,12 @@ "test": "cc_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { "test": "chrome_elf_unittests" }, { @@ -971,6 +983,12 @@ "test": "cc_unittests" }, { + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { "test": "chrome_elf_unittests" }, {
diff --git a/testing/buildbot/chromium_trybot.json b/testing/buildbot/chromium_trybot.json index 232f0b59..f61bdd3 100644 --- a/testing/buildbot/chromium_trybot.json +++ b/testing/buildbot/chromium_trybot.json
@@ -69,6 +69,17 @@ }, { "platforms": [ + "win", + "mac", + "linux" + ], + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "chrome_app_unittests" + }, + { + "platforms": [ "win" ], "test": "chrome_elf_unittests"
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl index 275ab74..c60632d4 100644 --- a/testing/buildbot/gn_isolate_map.pyl +++ b/testing/buildbot/gn_isolate_map.pyl
@@ -66,6 +66,10 @@ "type": "raw", "args": [], }, + "android_webview_unittests": { + "label": "//android_webview/test:android_webview_unittests", + "type": "console_test_launcher", + }, "angle_deqp_gles2_tests": { "label": "//third_party/angle/src/tests:angle_deqp_gles2_tests", "type": "raw", @@ -164,7 +168,7 @@ }, "chrome_app_unittests": { "label": "//chrome/test:chrome_app_unittests", - "type": "unknown", + "type": "console_test_launcher", }, "chrome_elf_unittests": { "label": "//chrome_elf:chrome_elf_unittests", @@ -178,10 +182,11 @@ "label": "//chromeos:chromeos_unittests", "type": "unknown", }, - "cloud_print_unittests": { - "label": "//cloud_print:cloud_print_unittests", - "type": "unknown", - }, + # See http://crbug.com/585151 + #"cloud_print_unittests": { + #"label": "//cloud_print:cloud_print_unittests", + #"type": "unknown", + #}, "components_browsertests": { "label": "//components:components_browsertests", "type": "windowed_test_launcher", @@ -314,14 +319,16 @@ "label": "//ui/keyboard:keyboard_unittests", "type": "unknown", }, - "libaddressinput_unittests": { - "label": "//third_party/libaddressinput:libaddressinput_unittests", - "type": "console_test_launcher", - }, - "libphonenumber_unittests": { - "label": "//third_party/libphonenumber:libphonenumber_unittests", - "type": "console_test_launcher", - }, + # See http://crbug.com/585151 + #"libaddressinput_unittests": { + #"label": "//third_party/libaddressinput:libaddressinput_unittests", + #"type": "console_test_launcher", + #}, + # See http://crbug.com/585151 + #"libphonenumber_unittests": { + #"label": "//third_party/libphonenumber:libphonenumber_unittests", + #"type": "console_test_launcher", + #}, "media_unittests": { "label": "//media:media_unittests", "type": "windowed_test_launcher",
diff --git a/testing/buildbot/manage.py b/testing/buildbot/manage.py index b38bde6..afb7de7e 100755 --- a/testing/buildbot/manage.py +++ b/testing/buildbot/manage.py
@@ -50,6 +50,13 @@ 'Marshmallow 64 bit Tester', 'Marshmallow Tablet Tester', + # Android bots need custom dimension_sets entries for swarming, and capacity + # is not there yet -- so don't let manage.py add swarming automatically there. + 'Android User Builder Tests', + 'Android GN', + 'Android Tests', + 'Android Tests (dbg)', + # http://crbug.com/472205 'Chromium Mac 10.10', 'Chromium Mac 10.11', @@ -61,6 +68,36 @@ 'Linux GN', 'Linux GN (dbg)', + # The memory.fyi waterfall is in the process of being converted to recipes, + # and swarming doesn't work yet. + 'Chromium Mac (valgrind)(1)', + 'Chromium Mac (valgrind)(2)', + 'Chromium OS (valgrind)(1)', + 'Chromium OS (valgrind)(2)', + 'Chromium OS (valgrind)(3)', + 'Chromium OS (valgrind)(4)', + 'Chromium OS (valgrind)(5)', + 'Chromium OS (valgrind)(6)', + 'Linux Tests (valgrind)(1)', + 'Linux Tests (valgrind)(2)', + 'Linux Tests (valgrind)(3)', + 'Linux Tests (valgrind)(4)', + 'Linux Tests (valgrind)(5)', + 'Windows Unit (DrMemory full) (1)', + 'Windows Unit (DrMemory full) (2)', + 'Windows Unit (DrMemory full) (3)', + 'Windows Unit (DrMemory full) (4)', + 'Windows Unit (DrMemory full) (5)', + 'Windows Unit (DrMemory full) (6)', + 'Windows Unit (DrMemory full) (7)', + 'Windows Unit (DrMemory full) (8)', + 'Windows Unit (DrMemory full) (9)', + 'Windows Unit (DrMemory full) (10)', + 'Windows Unit (DrMemory full) (11)', + 'Windows Unit (DrMemory full) (12)', + 'Windows Unit (DrMemory x64)', + 'Windows Unit (DrMemory)', + # This builder is fine, but win8_chromium_ng uses GN and this configuration, # which breaks everything. 'Win8 Aura',
diff --git a/testing/libfuzzer/fuzzers/zlib_uncompress_fuzzer.cc b/testing/libfuzzer/fuzzers/zlib_uncompress_fuzzer.cc index c408a6b..39f984e 100644 --- a/testing/libfuzzer/fuzzers/zlib_uncompress_fuzzer.cc +++ b/testing/libfuzzer/fuzzers/zlib_uncompress_fuzzer.cc
@@ -8,18 +8,14 @@ #include "third_party/zlib/zlib.h" +static Bytef buffer[256 * 1024] = { 0 }; + // Entry point for LibFuzzer. extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { - const int NUM_ITEMS = 1024 * 1024; - const int BUF_SIZE = NUM_ITEMS * sizeof(uint8_t); - uint8_t *buffer = new uint8_t[NUM_ITEMS]; - uLongf buffer_length = (uLongf)BUF_SIZE; - memset(buffer, 0, BUF_SIZE); + uLongf buffer_length = static_cast<uLongf>(sizeof(buffer)); if (Z_OK != uncompress(buffer, &buffer_length, data, static_cast<uLong>(size))) { - delete[] buffer; return 0; } - delete[] buffer; return 0; }
diff --git a/testing/variations/fieldtrial_testing_config_android.json b/testing/variations/fieldtrial_testing_config_android.json index 50d492a..c39de52b 100644 --- a/testing/variations/fieldtrial_testing_config_android.json +++ b/testing/variations/fieldtrial_testing_config_android.json
@@ -123,45 +123,6 @@ "group_name": "Enabled" } ], - "EnhancedBookmarks": [ - { - "group_name": "Launch EnableEnhancedBookmarks", - "params": { - "id": "Fake_id_to_trigger_experiment_code" - } - }, - { - "group_name": "Launch Control" - }, - { - "group_name": "EnableEnhancedBookmarks", - "params": { - "id": "Fake_id_to_trigger_experiment_code" - } - }, - { - "group_name": "EnableEnhancedBookmarksGrid", - "params": { - "DefaultViewMode": "Grid", - "id": "Fake_id_to_trigger_experiment_code" - } - }, - { - "group_name": "EnableEnhancedBookmarksList", - "params": { - "DefaultViewMode": "List", - "id": "Fake_id_to_trigger_experiment_code" - } - } - ], - "IconNTP": [ - { - "group_name": "Enabled", - "params": { - "state": "enabled" - } - } - ], "InvalidationsGCMUpstream": [ { "group_name": "Enabled"
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/site-per-process b/third_party/WebKit/LayoutTests/FlagExpectations/site-per-process index edb295b6..5ef8248 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/site-per-process +++ b/third_party/WebKit/LayoutTests/FlagExpectations/site-per-process
@@ -8,6 +8,10 @@ http/tests/security/mixedContent/insecure-plugin-in-iframe.html [ Crash ] # https://crbug.com/495132 - [Assert] content::NavigationEntryImpl::SetBindings. +http/tests/history/cross-origin-redirect-on-back.html [ Crash ] +http/tests/inspector-enabled/console-log-before-frame-navigation.html [ Crash ] +http/tests/inspector/change-iframe-src.html [ Crash ] +http/tests/navigation/cross-origin-fragment-navigation-is-async.html [ Crash Failure ] http/tests/security/aboutBlank/xss-DENIED-navigate-opener-document-write.html [ Crash Failure ] http/tests/security/aboutBlank/xss-DENIED-navigate-opener-javascript-url.html [ Crash Failure ] http/tests/security/contentSecurityPolicy/1.1/referrer-always-http-https.html [ Crash ] @@ -16,7 +20,7 @@ http/tests/security/contentSecurityPolicy/1.1/referrer-invalid-http-https.html [ Crash ] http/tests/security/contentSecurityPolicy/1.1/referrer-never-http-https.html [ Crash ] http/tests/security/contentSecurityPolicy/1.1/referrer-origin-http-https.html [ Crash ] -http/tests/security/cross-frame-access-document-direct.html [ Crash ] +http/tests/security/cross-frame-access-document-direct.html [ Crash Timeout ] http/tests/security/frameNavigation/xss-ALLOWED-targeted-subframe-navigation-change.html [ Crash Timeout ] http/tests/security/listener/xss-inactive-closure.html [ Crash ] http/tests/security/listener/xss-JSTargetNode-onclick-addEventListener.html [ Crash ] @@ -31,6 +35,8 @@ http/tests/security/xssAuditor/anchor-url-dom-write-location-inline-event.html [ Crash ] http/tests/security/xssAuditor/anchor-url-dom-write-location-inline-event-null-char.html [ Crash Timeout ] http/tests/security/xssAuditor/dom-write-location-inline-event.html [ Crash ] +http/tests/serviceworker/windowclient-navigate.html [ Crash ] +http/tests/xmlhttprequest/detaching-frame-2.html [ Crash ] # https://crbug.com/576969 - unique name is not replicated into OOPIFs. http/tests/security/aboutBlank/xss-DENIED-set-opener.html [ Failure ] @@ -82,23 +88,83 @@ http/tests/security/powerfulFeatureRestrictions/geolocation-on-sandboxed-insecure-origin.html [ Failure ] http/tests/security/powerfulFeatureRestrictions/geolocation-on-secure-origin-in-insecure-origin.html [ Failure ] -# TODO(alexmos,lukasza): Triage these failures and assign more specific bugs. - -# Failures under http/tests/security: +# https://crbug.com/584845 - bad message - RFH_NO_PROXY_TO_PARENT from OnDispatchLoad. http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-nested-cross-in-same-none-block.html [ Timeout ] http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-nested-cross-in-same-self-block.html [ Timeout ] -http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-nested-cross-in-same-star-allow.html [ Timeout ] -http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-nested-cross-in-same-url-allow.html [ Timeout ] http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-nested-cross-in-same-url-block.html [ Timeout ] http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-self-block.html [ Timeout ] -http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-star-allow-crossorigin.html [ Timeout ] http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-url-block.html [ Timeout ] -http/tests/security/contentSecurityPolicy/1.1/plugintypes-affects-child.html [ Failure ] -http/tests/security/contentSecurityPolicy/1.1/plugintypes-invalid.html [ Failure ] -http/tests/security/contentSecurityPolicy/1.1/plugintypes-url-01.html [ Failure ] -http/tests/security/contentSecurityPolicy/object-src-does-not-affect-child.html [ Failure ] -http/tests/security/contentSecurityPolicy/object-src-none-allowed.html [ Failure ] -http/tests/security/contentSecurityPolicy/plugin-in-iframe-with-csp.html [ Failure ] +http/tests/security/XFrameOptions/x-frame-options-multiple-headers-sameorigin-deny.html [ Timeout ] +http/tests/security/XFrameOptions/x-frame-options-parent-same-origin-deny.html [ Timeout ] + +# https://crbug.com/582176 - InspectorTest.changeExecutionContext doesn't like OOPIFs. +http/tests/inspector/console-cd-completions.html [ Failure ] +http/tests/inspector/console-cd.html [ Failure ] + +# https://crbug.com/554119 - Popup menu is in the wrong location. +http/tests/webfont/popup-menu-load-webfont-after-open.html [ Failure ] + +# https://crbug.com/582525 - testRunner.setAllowDisplayOfInsecureContent is not replicated to OOPIFs. +http/tests/security/mixedContent/insecure-iframe-in-main-frame-allowed.html [ Failure Crash ] +http/tests/security/mixedContent/insecure-iframe-in-main-frame.html [ Failure Crash ] +http/tests/security/mixedContent/insecure-image-in-main-frame-allowed.html [ Failure Crash ] +http/tests/security/mixedContent/insecure-script-in-main-frame-allowed.html [ Failure Crash ] + +# https://crbug.com/585171 - iframe restored from history should be excluded from performance entries. +http/tests/misc/resource-timing-iframe-restored-from-history.html [ Failure Timeout ] + +# https://crbug.com/585194 - back/forward lists look different with --site-per-process +http/tests/history/push-state-in-grandchild-after-reload.html [ Failure ] +http/tests/navigation/back-to-dynamic-iframe.html [ Failure Timeout ] +http/tests/navigation/back-to-redirect-with-frame.php [ Failure ] +http/tests/navigation/success200-frames-loadsame.html [ Failure ] + +# https://crbug.com/585188 - testRunner.addOriginAccessWhitelistEntry is not replicated to OOPIFs. +http/tests/xmlhttprequest/origin-whitelisting-all.html [ Failure ] +http/tests/xmlhttprequest/origin-whitelisting-ip-addresses.html [ Failure ] + +# TODO(alexmos,lukasza): Triage these failures and assign more specific bugs. + +# No repro (maybe flaky? maybe really fixed? maybe repros only in debug build?): +http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-nested-cross-in-same-star-allow.html [ Timeout ] +http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-nested-cross-in-same-url-allow.html [ Timeout ] +http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-star-allow-crossorigin.html [ Timeout ] +http/tests/security/cross-origin-access-over-property-descriptor.html [ Crash ] +http/tests/security/frameNavigation/cross-origin-opener.html [ Crash ] +http/tests/security/mixedContent/about-blank-iframe-in-main-frame.html [ Crash ] +http/tests/security/mixedContent/data-url-iframe-in-main-frame.html [ Crash ] +http/tests/security/mixedContent/insecure-css-in-main-frame.html [ Crash ] +http/tests/security/mixedContent/insecure-css-resources.html [ Crash ] +http/tests/security/mixedContent/insecure-empty-srcset-in-main-frame-blocked.html [ Crash ] +http/tests/security/mixedContent/insecure-eventsource-in-main-frame.html [ Crash ] +http/tests/security/mixedContent/insecure-font-in-main-frame.html [ Crash ] +http/tests/security/mixedContent/insecure-formSubmission-in-invisible-DOM.html [ Crash ] +http/tests/security/mixedContent/insecure-formSubmission-in-main-frame-allowed.html [ Crash ] +http/tests/security/mixedContent/insecure-formSubmission-in-main-frame-blocked.html [ Crash ] +http/tests/security/mixedContent/insecure-formSubmission-in-main-frame.html [ Crash ] +http/tests/security/mixedContent/insecure-formSubmission-in-main-frame-javascript-allowed.html [ Crash ] +http/tests/security/mixedContent/insecure-frame-in-data-iframe-in-main-frame-blocked.html [ Crash ] +http/tests/security/mixedContent/insecure-iframe-in-main-frame-blocked.html [ Crash ] +http/tests/security/mixedContent/insecure-image-in-main-frame-blocked.html [ Crash ] +http/tests/security/mixedContent/insecure-image-in-main-frame.html [ Crash ] +http/tests/security/mixedContent/insecure-script-in-data-iframe-in-main-frame-blocked.html [ Crash Missing ] +http/tests/security/mixedContent/insecure-script-in-main-frame-blocked.html [ Crash ] +http/tests/security/mixedContent/insecure-script-through-redirection.html [ Crash ] +http/tests/security/mixedContent/insecure-srcset-in-main-frame-blocked.html [ Crash ] +http/tests/security/mixedContent/insecure-sync-post-xhr-allowed.html [ Crash ] +http/tests/security/mixedContent/insecure-sync-post-xhr-blocked.html [ Crash ] +http/tests/security/mixedContent/insecure-texttrack-in-main-frame-blocked.html [ Crash ] +http/tests/security/mixedContent/preload-insecure-image-in-main-frame-blocked.html [ Crash ] +http/tests/security/mixedContent/redirect-https-to-http-iframe-in-main-frame.html [ Crash ] +http/tests/security/mixedContent/redirect-http-to-https-iframe-in-main-frame.html [ Crash ] +http/tests/security/mixedContent/websocket/insecure-websocket-in-sandbox-in-secure-page.html [ Crash ] +http/tests/security/mixedContent/websocket/insecure-websocket-in-secure-page-allowed.html [ Crash ] +http/tests/security/mixedContent/websocket/insecure-websocket-in-secure-page.html [ Crash ] +http/tests/security/mixedContent/websocket/insecure-websocket-in-secure-page-worker-allowed.html [ Crash ] +http/tests/security/mixedContent/websocket/insecure-websocket-in-secure-page-worker.html [ Crash ] +http/tests/security/sandbox-inherit-to-blank-document-unsandboxed-navigate.html [ Crash ] + +# Uninvestigated failures under http/tests/security: http/tests/security/contentTypeOptions/nosniff-script-without-content-type-blocked.html [ Failure ] http/tests/security/cookies/third-party-cookie-blocking.html [ Timeout ] http/tests/security/cookies/third-party-cookie-blocking-user-action.html [ Timeout ] @@ -113,12 +179,10 @@ http/tests/security/cross-frame-access-location-get-override.html [ Timeout ] http/tests/security/cross-frame-access-location-put.html [ Timeout ] http/tests/security/cross-frame-access-object-prototype.html [ Timeout ] -http/tests/security/cross-origin-access-over-property-descriptor.html [ Crash ] http/tests/security/cross-origin-shared-worker-allowed.html [ Failure Timeout ] http/tests/security/cross-origin-worker-indexeddb-allowed.html [ Failure Timeout ] http/tests/security/dataURL/xss-DENIED-from-data-url-in-foreign-domain-subframe.html [ Timeout ] http/tests/security/drag-drop-different-origin.html [ Timeout ] -http/tests/security/frameNavigation/cross-origin-opener.html [ Crash ] http/tests/security/frameNavigation/not-opener.html [ Timeout ] http/tests/security/frameNavigation/xss-DENIED-targeted-link-navigation.html [ Timeout ] http/tests/security/host-compare-case-insensitive.html [ Timeout ] @@ -126,51 +190,13 @@ http/tests/security/javascriptURL/xss-DENIED-from-javascript-url-in-foreign-domain-subframe.html [ Timeout ] http/tests/security/javascriptURL/xss-DENIED-from-javascript-url-in-foreign-domain-window-open.html [ Pass Crash ] http/tests/security/local-image-from-remote-whitelisted.html [ Failure ] -http/tests/security/mixedContent/about-blank-iframe-in-main-frame.html [ Crash ] -http/tests/security/mixedContent/data-url-iframe-in-main-frame.html [ Crash ] http/tests/security/mixedContent/insecure-css-image-with-reload.html [ Timeout ] -http/tests/security/mixedContent/insecure-css-in-main-frame.html [ Crash ] -http/tests/security/mixedContent/insecure-css-resources.html [ Crash ] -http/tests/security/mixedContent/insecure-empty-srcset-in-main-frame-blocked.html [ Crash ] -http/tests/security/mixedContent/insecure-eventsource-in-main-frame.html [ Crash ] -http/tests/security/mixedContent/insecure-font-in-main-frame.html [ Crash ] -http/tests/security/mixedContent/insecure-formSubmission-in-invisible-DOM.html [ Crash ] -http/tests/security/mixedContent/insecure-formSubmission-in-main-frame-allowed.html [ Crash ] -http/tests/security/mixedContent/insecure-formSubmission-in-main-frame-blocked.html [ Crash ] -http/tests/security/mixedContent/insecure-formSubmission-in-main-frame.html [ Crash ] -http/tests/security/mixedContent/insecure-formSubmission-in-main-frame-javascript-allowed.html [ Crash ] -http/tests/security/mixedContent/insecure-frame-in-data-iframe-in-main-frame-blocked.html [ Crash ] -http/tests/security/mixedContent/insecure-iframe-in-main-frame-allowed.html [ Failure Crash ] -http/tests/security/mixedContent/insecure-iframe-in-main-frame-blocked.html [ Crash ] -http/tests/security/mixedContent/insecure-iframe-in-main-frame.html [ Failure Crash ] -http/tests/security/mixedContent/insecure-image-in-main-frame-allowed.html [ Failure Crash ] -http/tests/security/mixedContent/insecure-image-in-main-frame-blocked.html [ Crash ] -http/tests/security/mixedContent/insecure-image-in-main-frame.html [ Crash ] -http/tests/security/mixedContent/insecure-script-in-data-iframe-in-main-frame-blocked.html [ Crash Missing ] -http/tests/security/mixedContent/insecure-script-in-main-frame-allowed.html [ Failure Crash ] -http/tests/security/mixedContent/insecure-script-in-main-frame-blocked.html [ Crash ] -http/tests/security/mixedContent/insecure-script-through-redirection.html [ Crash ] -http/tests/security/mixedContent/insecure-srcset-in-main-frame-blocked.html [ Crash ] -http/tests/security/mixedContent/insecure-sync-post-xhr-allowed.html [ Crash ] -http/tests/security/mixedContent/insecure-sync-post-xhr-blocked.html [ Crash ] -http/tests/security/mixedContent/insecure-texttrack-in-main-frame-blocked.html [ Crash ] http/tests/security/mixedContent/insecure-xhr-in-main-frame.html [ Timeout ] -http/tests/security/mixedContent/preload-insecure-image-in-main-frame-blocked.html [ Crash ] -http/tests/security/mixedContent/redirect-https-to-http-iframe-in-main-frame.html [ Crash ] -http/tests/security/mixedContent/redirect-http-to-https-iframe-in-main-frame.html [ Crash ] http/tests/security/mixedContent/strict-mode-image-blocked.https.html [ Pass Timeout ] -http/tests/security/mixedContent/websocket/insecure-websocket-in-sandbox-in-secure-page.html [ Crash ] -http/tests/security/mixedContent/websocket/insecure-websocket-in-secure-page-allowed.html [ Crash ] -http/tests/security/mixedContent/websocket/insecure-websocket-in-secure-page.html [ Crash ] -http/tests/security/mixedContent/websocket/insecure-websocket-in-secure-page-worker-allowed.html [ Crash ] -http/tests/security/mixedContent/websocket/insecure-websocket-in-secure-page-worker.html [ Crash ] http/tests/security/referrer-policy-redirect-link.html [ Timeout ] -http/tests/security/sandbox-inherit-to-blank-document-unsandboxed-navigate.html [ Crash ] http/tests/security/upgrade-insecure-requests/basic-upgrade.https.html [ Pass Timeout ] http/tests/security/window-events-clear-domain.html [ Timeout ] http/tests/security/window-properties-clear-domain.html [ Timeout ] -http/tests/security/XFrameOptions/x-frame-options-multiple-headers-sameorigin-deny.html [ Timeout ] -http/tests/security/XFrameOptions/x-frame-options-parent-same-origin-deny.html [ Timeout ] http/tests/security/xssAuditor/anchor-url-dom-write-location-javascript-URL.html [ Timeout ] http/tests/security/xssAuditor/dom-write-location-javascript-URL.html [ Timeout ] http/tests/security/xssAuditor/form-action.html [ Timeout ] @@ -206,30 +232,14 @@ http/tests/security/xssAuditor/xss-filter-bypass-sjis.html [ Timeout ] http/tests/security/xss-DENIED-xml-external-entity.xhtml [ Failure ] -# Failures under http/tests (but outside of http/tests/security): +# Uninvestigated failures under http/tests (but outside of http/tests/security): http/tests/appcache/remove-cache.html [ Failure ] -http/tests/history/push-state-in-grandchild-after-reload.html [ Failure ] http/tests/inspector-protocol/access-inspected-object.html [ Failure ] -http/tests/inspector/console-cd-completions.html [ Failure ] -http/tests/inspector/console-cd.html [ Failure ] http/tests/inspector/injected-script-for-origin.html [ Failure ] http/tests/inspector/resource-parameters.html [ Failure ] http/tests/local/absolute-url-strip-whitespace.html [ Timeout ] http/tests/local/serviceworker/fetch-request-body-file.html [ Failure Timeout ] -http/tests/misc/resource-timing-iframe-restored-from-history.html [ Failure Timeout ] http/tests/misc/webtiming-cross-origin-redirect.php [ Timeout ] -http/tests/navigation/back-to-dynamic-iframe.html [ Failure Timeout ] -http/tests/navigation/back-to-redirect-with-frame.php [ Failure ] -http/tests/navigation/success200-frames-loadsame.html [ Failure ] -http/tests/xmlhttprequest/origin-whitelisting-all.html [ Failure ] -http/tests/xmlhttprequest/origin-whitelisting-ip-addresses.html [ Failure ] -http/tests/webfont/popup-menu-load-webfont-after-open.html [ Failure ] -http/tests/history/cross-origin-redirect-on-back.html [ Crash ] -http/tests/inspector-enabled/console-log-before-frame-navigation.html [ Crash ] -http/tests/inspector/change-iframe-src.html [ Crash ] -http/tests/navigation/cross-origin-fragment-navigation-is-async.html [ Crash Failure ] -http/tests/serviceworker/windowclient-navigate.html [ Crash ] -http/tests/xmlhttprequest/detaching-frame-2.html [ Crash ] http/tests/inspector-protocol/request-mixed-content-status-blockable.html [ Timeout ] http/tests/inspector-protocol/request-mixed-content-status-none.html [ Timeout ] http/tests/inspector-protocol/request-mixed-content-status-optionally-blockable.html [ Timeout ]
diff --git a/third_party/WebKit/LayoutTests/NeverFixTests b/third_party/WebKit/LayoutTests/NeverFixTests index 4554d588..fbb12c92 100644 --- a/third_party/WebKit/LayoutTests/NeverFixTests +++ b/third_party/WebKit/LayoutTests/NeverFixTests
@@ -180,6 +180,26 @@ # See crbug.com/522326 imported/web-platform-tests/html/obsolete/requirements-for-implementations/the-marquee-element-0/marquee-events.html [ WontFix ] +# Some CSS2.1 tests pass but cause 1px diff due to old font-size guidelines, +# or render colors differently for text and images on Mac. +imported/csswg-test/css21/linebox/inline-formatting-context-002.xht [ WontFix ] +[ Linux Win ] imported/csswg-test/css21/linebox/inline-formatting-context-003.xht [ WontFix ] +[ Linux Win ] imported/csswg-test/css21/linebox/inline-formatting-context-004.xht [ WontFix ] +[ Linux Win ] imported/csswg-test/css21/linebox/inline-formatting-context-005.xht [ WontFix ] +[ Linux Win ] imported/csswg-test/css21/linebox/inline-formatting-context-006.xht [ WontFix ] +[ Linux Win ] imported/csswg-test/css21/linebox/inline-formatting-context-007.xht [ WontFix ] +imported/csswg-test/css21/linebox/inline-formatting-context-023.xht [ WontFix ] +[ Mac ] imported/csswg-test/css21/linebox/line-box-height-002.xht [ WontFix ] +imported/csswg-test/css21/linebox/line-height-126.xht [ WontFix ] +[ Mac ] imported/csswg-test/css21/linebox/line-height-129.xht [ WontFix ] +[ Mac ] imported/csswg-test/css21/linebox/vertical-align-117a.xht [ WontFix ] +[ Mac ] imported/csswg-test/css21/linebox/vertical-align-118a.xht [ WontFix ] +[ Mac Win ] imported/csswg-test/css21/linebox/vertical-align-baseline-003.xht [ WontFix ] +[ Mac ] imported/csswg-test/css21/linebox/vertical-align-baseline-004a.xht [ WontFix ] +[ Mac ] imported/csswg-test/css21/linebox/vertical-align-baseline-005a.xht [ WontFix ] +[ Linux ] imported/csswg-test/css21/linebox/vertical-align-sub-001.xht [ WontFix ] +[ Linux ] imported/csswg-test/css21/linebox/vertical-align-super-001.xht [ WontFix ] + # Ref tests that pass but causes 1px diff on images at direction boundaries. [ Win ] imported/web-platform-tests/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-002c.html [ WontFix ] [ Mac ] imported/web-platform-tests/html/dom/elements/requirements-relating-to-bidirectional-algorithm-formatting-characters/dir-isolation-006a.html [ WontFix ]
diff --git a/third_party/WebKit/LayoutTests/SlowTests b/third_party/WebKit/LayoutTests/SlowTests index 08a44c7..41c9d47 100644 --- a/third_party/WebKit/LayoutTests/SlowTests +++ b/third_party/WebKit/LayoutTests/SlowTests
@@ -58,6 +58,7 @@ crbug.com/433711 [ Debug ] virtual/gpu/fast/canvas/canvas-composite-image.html [ Slow ] crbug.com/24182 virtual/gpu/fast/canvas/canvas-composite-canvas.html [ Slow ] crbug.com/24182 virtual/gpu/fast/canvas/canvas-createImageBitmap-drawImage.html [ Slow ] +crbug.com/24182 virtual/gpu/fast/canvas/canvas-createImageBitmap-drawImage-with-options.html [ Slow ] crbug.com/24182 virtual/gpu/fast/canvas/canvas-draw-canvas-on-canvas-shadow.html [ Slow ] crbug.com/24182 virtual/gpu/fast/canvas/canvas-drawImage-shadow.html [ Slow ] crbug.com/24182 virtual/gpu/fast/canvas/canvas-imageSmoothingEnabled-repaint.html [ Slow ]
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations index 135cab5..5e198152 100644 --- a/third_party/WebKit/LayoutTests/TestExpectations +++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -896,6 +896,8 @@ crbug.com/425345 [ Mac ] fast/text/line-break-after-question-mark.html [ Failure ] +crbug.com/574283 [ Mac ] virtual/threaded/fast/scroll-behavior/smooth-scroll/mousewheel-scroll-interrupted.html [ Skip ] + # When drawing subpixel smoothed glyphs, CoreGraphics will fake bold the glyphs. # In this configuration, the pixel smoothed glyphs will be created from subpixel smoothed glyphs. # This means that CoreGraphics may draw outside the reported glyph bounds, and in this case does.
diff --git a/third_party/WebKit/LayoutTests/W3CImportExpectations b/third_party/WebKit/LayoutTests/W3CImportExpectations index f8515a24..2885c83 100644 --- a/third_party/WebKit/LayoutTests/W3CImportExpectations +++ b/third_party/WebKit/LayoutTests/W3CImportExpectations
@@ -63,7 +63,74 @@ ## Owners: kojii@chromium.org # imported/csswg-test/css-writing-modes-3 [ Pass ] imported/csswg-test/css1 [ Skip ] -imported/csswg-test/css21 [ Skip ] +## Owners: kojii@chromium.org +# imported/csswg-test/css21 [ Pass ] +imported/csswg-test/css21/LICENSE-BSD [ Skip ] +imported/csswg-test/css21/LICENSE-W3CD [ Skip ] +imported/csswg-test/css21/LICENSE-W3CTS [ Skip ] +imported/csswg-test/css21/Makefile [ Skip ] +imported/csswg-test/css21/abspos [ Skip ] +imported/csswg-test/css21/archive [ Skip ] +imported/csswg-test/css21/backgrounds [ Skip ] +imported/csswg-test/css21/bidi-005.xht [ Skip ] +imported/csswg-test/css21/bidi-006.xht [ Skip ] +imported/csswg-test/css21/bidi-007.xht [ Skip ] +imported/csswg-test/css21/bidi-008.xht [ Skip ] +imported/csswg-test/css21/bidi-009.xht [ Skip ] +imported/csswg-test/css21/bidi-010.xht [ Skip ] +imported/csswg-test/css21/bidi-overflow-scroll-001.xht [ Skip ] +imported/csswg-test/css21/bidi-text [ Skip ] +imported/csswg-test/css21/border-seams-001.xht [ Skip ] +imported/csswg-test/css21/borders [ Skip ] +imported/csswg-test/css21/box [ Skip ] +imported/csswg-test/css21/box-display [ Skip ] +imported/csswg-test/css21/cascade [ Skip ] +imported/csswg-test/css21/cascade-import [ Skip ] +imported/csswg-test/css21/colors [ Skip ] +imported/csswg-test/css21/css-e-notation-ref-1.html [ Skip ] +imported/csswg-test/css21/css-e-notation-ref-2.html [ Skip ] +imported/csswg-test/css21/css-e-notation-test-1.html [ Skip ] +imported/csswg-test/css21/css-e-notation-test-2.html [ Skip ] +imported/csswg-test/css21/css1 [ Skip ] +imported/csswg-test/css21/css21-errata [ Skip ] +imported/csswg-test/css21/csswg-issues [ Skip ] +imported/csswg-test/css21/floats [ Skip ] +imported/csswg-test/css21/floats-clear [ Skip ] +imported/csswg-test/css21/fonts [ Skip ] +imported/csswg-test/css21/generate [ Skip ] +imported/csswg-test/css21/generated-content [ Skip ] +imported/csswg-test/css21/i18n [ Skip ] +imported/csswg-test/css21/inline-svg-100-percent-in-body.html [ Skip ] +imported/csswg-test/css21/inline-svg-intrinsic-size-100-percent-1.html [ Skip ] +imported/csswg-test/css21/inline-svg-intrinsic-size-100-percent-2.html [ Skip ] +imported/csswg-test/css21/inline-svg-margin-padding-border.html [ Skip ] +## Owners: kojii@chromium.org +# imported/csswg-test/css21/linebox [ Pass ] +imported/csswg-test/css21/lists [ Skip ] +imported/csswg-test/css21/margin-padding-clear [ Skip ] +imported/csswg-test/css21/media [ Skip ] +imported/csswg-test/css21/normal-flow [ Skip ] +imported/csswg-test/css21/other-formats [ Skip ] +imported/csswg-test/css21/page-box [ Skip ] +imported/csswg-test/css21/pagination [ Skip ] +imported/csswg-test/css21/positioning [ Skip ] +imported/csswg-test/css21/reference [ Skip ] +imported/csswg-test/css21/run-in [ Skip ] +imported/csswg-test/css21/sec5 [ Skip ] +imported/csswg-test/css21/section-index.xht [ Skip ] +imported/csswg-test/css21/selector [ Skip ] +imported/csswg-test/css21/selectors [ Skip ] +imported/csswg-test/css21/src [ Skip ] +imported/csswg-test/css21/syntax [ Skip ] +imported/csswg-test/css21/tables [ Skip ] +imported/csswg-test/css21/text [ Skip ] +imported/csswg-test/css21/ui [ Skip ] +imported/csswg-test/css21/values [ Skip ] +imported/csswg-test/css21/visudet [ Skip ] +imported/csswg-test/css21/visufx [ Skip ] +imported/csswg-test/css21/visuren [ Skip ] +imported/csswg-test/css21/zindex [ Skip ] +imported/csswg-test/css21/zorder [ Skip ] imported/csswg-test/cssom-1 [ Skip ] imported/csswg-test/cssom-view-1 [ Skip ] imported/csswg-test/filters-1 [ Skip ] @@ -86,6 +153,7 @@ imported/csswg-test/vendor-imports/mozilla/mozilla-central-reftests/fonts3 [ Skip ] imported/csswg-test/vendor-imports/mozilla/mozilla-central-reftests/images3 [ Skip ] imported/csswg-test/vendor-imports/mozilla/mozilla-central-reftests/lists-3 [ Skip ] +imported/csswg-test/vendor-imports/mozilla/mozilla-central-reftests/masking [ Skip ] imported/csswg-test/vendor-imports/mozilla/mozilla-central-reftests/multicol3 [ Skip ] imported/csswg-test/vendor-imports/mozilla/mozilla-central-reftests/reftest.list [ Skip ] imported/csswg-test/vendor-imports/mozilla/mozilla-central-reftests/ruby [ Skip ] @@ -562,11 +630,6 @@ # This test requires manual interventions. imported/web-platform-tests/pointerevents/pointerevent_pointermove-on-chorded-mouse-button.html [ Skip ] -# https://github.com/w3c/web-platform-tests/issues/2215 Wrong path to testharness.js/css -imported/web-platform-tests/shadow-dom/Element-interface-attachShadow.html [ Skip ] -imported/web-platform-tests/shadow-dom/Element-interface-shadowRoot-attribute.html [ Skip ] -imported/web-platform-tests/shadow-dom/ShadowRoot-interface.html [ Skip ] - # CSS Writing Modes Level 3: Following tests require writing-mode: sideways-*, which we do not plan to support today. imported/csswg-test/css-writing-modes-3/block-flow-direction-slr-043.xht [ Skip ] imported/csswg-test/css-writing-modes-3/block-flow-direction-slr-047.xht [ Skip ]
diff --git a/third_party/WebKit/LayoutTests/accessibility/click-event.html b/third_party/WebKit/LayoutTests/accessibility/click-event.html new file mode 100644 index 0000000..65c8925 --- /dev/null +++ b/third_party/WebKit/LayoutTests/accessibility/click-event.html
@@ -0,0 +1,163 @@ +<!DOCTYPE HTML> +<script src="../resources/testharness.js"></script> +<script src="../resources/testharnessreport.js"></script> + +<div id="wrapper1"> + <button id="button1">Button</button> +</div> + +<script> +async_test(function(t) +{ + var axButton = accessibilityController.accessibleElementById("button1"); + axButton.addNotificationListener(function(notification) { + if (notification == 'Clicked') { + document.getElementById("wrapper1").style.display = "none"; + t.done(); + } + }); + + var button = document.getElementById("button1"); + button.click(); +}, "clicking a button via javascript sends an accessible click event"); +</script> + +<div id="wrapper2"> + <button id="button2">Button</button> +</div> + +<script> +async_test(function(t) +{ + var axButton = accessibilityController.accessibleElementById("button2"); + axButton.addNotificationListener(function(notification) { + if (notification == 'Clicked') { + document.getElementById("wrapper2").style.display = "none"; + t.done(); + } + }); + + eventSender.mouseMoveTo(axButton.x + 10, axButton.y + 10); + eventSender.mouseDown(); + eventSender.mouseUp(); +}, "clicking a button via mouse events sends an accessible click event"); +</script> + +<div id="wrapper3"> + <button id="button3">Button</button> +</div> + +<script> +async_test(function(t) +{ + var axButton = accessibilityController.accessibleElementById("button3"); + axButton.addNotificationListener(function(notification) { + if (notification == 'Clicked') { + document.getElementById("wrapper3").style.display = "none"; + t.done(); + } + }); + + var button = document.getElementById("button3"); + button.focus(); + eventSender.keyDown("\r"); +}, "clicking a button via the keyboard sends an accessible click event"); +</script> + +<div id="wrapper4"> + <button id="button4">Button</button> +</div> + +<script> +async_test(function(t) +{ + var axButton = accessibilityController.accessibleElementById("button4"); + axButton.addNotificationListener(function(notification) { + if (notification == 'Clicked') { + document.getElementById("wrapper4").style.display = "none"; + t.done(); + } + }); + + axButton.press(); +}, "clicking a button via accessibility sends an accessible click event"); +</script> + +<div id="wrapper5"> + <button id="button5">Button</button> +</div> + +<script> +async_test(function(t) +{ + var axButton = accessibilityController.accessibleElementById("button5"); + axButton.addNotificationListener(function(notification) { + if (notification == 'Clicked') { + assert_unreached("There shouldn't be a Clicked notification."); + } + }); + + eventSender.dragMode = true; + eventSender.mouseMoveTo(axButton.x + 10, axButton.y + 10); + eventSender.mouseDown(); + eventSender.leapForward(100); + eventSender.mouseMoveTo(axButton.x + 10, axButton.y + 100); + eventSender.mouseUp(); + + // Make the test pass after a short delay. The test passes if the + // accessible click event does not fire. + window.setTimeout(function() { + document.getElementById("wrapper5").style.display = "none"; + t.done(); + }, 200); +}, "dragging the mouse off a button does not send an accessible click event"); +</script> + +<div id="wrapper6"> + <button id="button6">Button</button> +</div> + +<script> +async_test(function(t) +{ + var axButton = accessibilityController.accessibleElementById("button6"); + axButton.addNotificationListener(function(notification) { + if (notification == 'Clicked') { + assert_unreached("There shouldn't be a Clicked notification."); + } + }); + + eventSender.dragMode = true; + eventSender.mouseMoveTo(axButton.x + 10, axButton.y + 100); + eventSender.mouseDown(); + eventSender.leapForward(100); + eventSender.mouseMoveTo(axButton.x + 10, axButton.y + 10); + eventSender.mouseUp(); + + // Make the test pass after a short delay. The test passes if the + // accessible click event does not fire. + window.setTimeout(function() { + document.getElementById("wrapper6").style.display = "none"; + t.done(); + }, 0); +}, "dragging the mouse onto a button does not send an accessible click event"); +</script> + +<div id="wrapper7"> + <button id="button7">Button</button> +</div> + +<script> +async_test(function(t) +{ + var axButton = accessibilityController.accessibleElementById("button7"); + axButton.addNotificationListener(function(notification) { + if (notification == 'Clicked') { + document.getElementById("wrapper7").style.display = "none"; + t.done(); + } + }); + + eventSender.gestureTap(axButton.x + 10, axButton.y + 10); +}, "tapping on a button with a touch event sends an accessible click event"); +</script>
diff --git a/third_party/WebKit/LayoutTests/fast/borders/border-image-parsing-support.html b/third_party/WebKit/LayoutTests/fast/borders/border-image-parsing-support.html new file mode 100644 index 0000000..08518c3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/borders/border-image-parsing-support.html
@@ -0,0 +1,9 @@ +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<script> +test(() => { + assert_false(CSS.supports('border-image', '1 / 1 2 3 4 5')); + assert_false(CSS.supports('border-image', '1 / 1 / ')); + assert_true(CSS.supports('border-image', '1 / 1 / 1')); +}, 'border-image parsing support'); +</script>
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-drawImage-flipY-expected.txt b/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-drawImage-flipY-expected.txt deleted file mode 100644 index ce78451..0000000 --- a/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-drawImage-flipY-expected.txt +++ /dev/null
@@ -1,3073 +0,0 @@ -Ensure correct behavior of drawImage with ImageBitmaps along with flipY option. - -On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". - - -PASS testBitmap.width is imageWidth -PASS testBitmap.height is imageHeight -PASS testBitmap.width is imageWidth -PASS testBitmap.height is imageHeight -Checking HTMLImageElement with imageOrientation: none. -Check no crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is imageWidth -PASS bitmap.height is imageHeight -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop center. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop right. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 60 -PASS bitmap.height is 60 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop right. -PASS bitmap.width is 50 -PASS bitmap.height is 50 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Checking HTMLImageElement with imageOrientation: flipY. -Check no crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is imageWidth -PASS bitmap.height is imageHeight -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop center. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop right. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 60 -PASS bitmap.height is 60 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop right. -PASS bitmap.width is 50 -PASS bitmap.height is 50 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Checking HTMLImageElement with imageOrientation: undefined. -Check no crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is imageWidth -PASS bitmap.height is imageHeight -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop center. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop right. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 60 -PASS bitmap.height is 60 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop right. -PASS bitmap.width is 50 -PASS bitmap.height is 50 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Checking HTMLImageElement with imageOrientation: undefined. -Check no crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is imageWidth -PASS bitmap.height is imageHeight -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop center. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop right. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 60 -PASS bitmap.height is 60 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop right. -PASS bitmap.width is 50 -PASS bitmap.height is 50 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Checking HTMLCanvasElement with imageOrientation: none. -Check no crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is imageWidth -PASS bitmap.height is imageHeight -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop center. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop right. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 60 -PASS bitmap.height is 60 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop right. -PASS bitmap.width is 50 -PASS bitmap.height is 50 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Checking HTMLCanvasElement with imageOrientation: flipY. -Check no crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is imageWidth -PASS bitmap.height is imageHeight -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop center. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop right. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 60 -PASS bitmap.height is 60 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop right. -PASS bitmap.width is 50 -PASS bitmap.height is 50 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Checking HTMLCanvasElement with imageOrientation: undefined. -Check no crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is imageWidth -PASS bitmap.height is imageHeight -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop center. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop right. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 60 -PASS bitmap.height is 60 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop right. -PASS bitmap.width is 50 -PASS bitmap.height is 50 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Checking HTMLCanvasElement with imageOrientation: undefined. -Check no crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is imageWidth -PASS bitmap.height is imageHeight -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop center. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop right. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 60 -PASS bitmap.height is 60 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop right. -PASS bitmap.width is 50 -PASS bitmap.height is 50 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Checking ImageData with imageOrientation: none. -Check no crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is imageWidth -PASS bitmap.height is imageHeight -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop center. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop right. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 60 -PASS bitmap.height is 60 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop right. -PASS bitmap.width is 50 -PASS bitmap.height is 50 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Checking ImageData with imageOrientation: flipY. -Check no crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is imageWidth -PASS bitmap.height is imageHeight -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop center. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop right. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 60 -PASS bitmap.height is 60 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop right. -PASS bitmap.width is 50 -PASS bitmap.height is 50 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Checking ImageData with imageOrientation: undefined. -Check no crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is imageWidth -PASS bitmap.height is imageHeight -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop center. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop right. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 60 -PASS bitmap.height is 60 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop right. -PASS bitmap.width is 50 -PASS bitmap.height is 50 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Checking ImageData with imageOrientation: undefined. -Check no crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is imageWidth -PASS bitmap.height is imageHeight -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop center. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop right. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 60 -PASS bitmap.height is 60 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop right. -PASS bitmap.width is 50 -PASS bitmap.height is 50 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Checking ImageBitmap with imageOrientation: none. -Check no crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is imageWidth -PASS bitmap.height is imageHeight -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop center. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop right. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 60 -PASS bitmap.height is 60 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop right. -PASS bitmap.width is 50 -PASS bitmap.height is 50 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Checking ImageBitmap with imageOrientation: flipY. -Check no crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is imageWidth -PASS bitmap.height is imageHeight -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop center. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop right. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 60 -PASS bitmap.height is 60 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop right. -PASS bitmap.width is 50 -PASS bitmap.height is 50 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Checking ImageBitmap with imageOrientation: undefined. -Check no crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is imageWidth -PASS bitmap.height is imageHeight -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop center. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop right. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 60 -PASS bitmap.height is 60 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop right. -PASS bitmap.width is 50 -PASS bitmap.height is 50 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Checking ImageBitmap with imageOrientation: undefined. -Check no crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is imageWidth -PASS bitmap.height is imageHeight -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop center. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop right. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 60 -PASS bitmap.height is 60 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop right. -PASS bitmap.width is 50 -PASS bitmap.height is 50 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Checking Blob with imageOrientation: none. -Check no crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is imageWidth -PASS bitmap.height is imageHeight -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop center. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop right. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 60 -PASS bitmap.height is 60 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop right. -PASS bitmap.width is 50 -PASS bitmap.height is 50 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Checking Blob with imageOrientation: flipY. -Check no crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is imageWidth -PASS bitmap.height is imageHeight -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop center. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop right. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 60 -PASS bitmap.height is 60 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is blue. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is green. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop right. -PASS bitmap.width is 50 -PASS bitmap.height is 50 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Checking Blob with imageOrientation: undefined. -Check no crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is imageWidth -PASS bitmap.height is imageHeight -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop center. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop right. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 60 -PASS bitmap.height is 60 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop right. -PASS bitmap.width is 50 -PASS bitmap.height is 50 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Checking Blob with imageOrientation: undefined. -Check no crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is imageWidth -PASS bitmap.height is imageHeight -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop center. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop right. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 60 -PASS bitmap.height is 60 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is green. -PASS This pixel is blue. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check over crop right. -PASS bitmap.width is 50 -PASS bitmap.height is 50 -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is black. -PASS This pixel is black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check crop. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 10 -PASS bitmap.height is 10 -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is red. -PASS This pixel is red. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -Check empty. -PASS jsWrapperClass(bitmap) is 'ImageBitmap' -PASS bitmap.width is 30 -PASS bitmap.height is 30 -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS This pixel is transparent black. -PASS successfullyParsed is true - -TEST COMPLETE -
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-drawImage-flipY.html b/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-drawImage-flipY.html deleted file mode 100644 index de9d21c..0000000 --- a/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-drawImage-flipY.html +++ /dev/null
@@ -1,553 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> -<html> -<head> -<script src="../../resources/js-test.js"></script> -</head> -<body> -<script> - -description("Ensure correct behavior of drawImage with ImageBitmaps along with flipY option."); -window.jsTestIsAsync = true; - -function jsWrapperClass(node) -{ - // returns the ClassName of node - if (!node) - return "[null]"; - var string = Object.prototype.toString.apply(node); - - // string will be of the form [object ClassName] - return string.substr(8, string.length - 9); -} - -function shouldBeType(expression, className) -{ - shouldBe("jsWrapperClass(" + expression + ")", "'" + className + "'"); -} - -function shouldNotBeCalled() { - testFailed("createImageBitmap promise rejected."); - finishJSTest(); -} - -function shouldBeRed(x, y) { - d = ctx.getImageData(x, y, 1, 1).data; - if (d[0] == 255 && d[1] == 0 && d[2] == 0 && d[3] == 255) { - testPassed("This pixel is red."); - return; - } - testFailed("This pixel is expected to be red, but it is actually " + d); -} - -function shouldBeGreen(x, y) { - d = ctx.getImageData(x, y, 1, 1).data; - if (d[0] == 0 && d[1] == 255 && d[2] == 0 && d[3] == 255) { - testPassed("This pixel is green."); - return; - } - testFailed("This pixel is expected to be green, but it is actually " + d); -} - -function shouldBeBlue(x, y) { - d = ctx.getImageData(x, y, 1, 1).data; - if (d[0] == 0 && d[1] == 0 && d[2] == 255 && d[3] == 255) { - testPassed("This pixel is blue."); - return; - } - testFailed("This pixel is expected to be blue, but it is actually " + d); -} - -function shouldBeBlack(x, y) { - d = ctx.getImageData(x, y, 1, 1).data; - if (d[0] == 0 && d[1] == 0 && d[2] == 0 && d[3] == 255) { - testPassed("This pixel is black."); - return; - } - testFailed("This pixel is expected to be black, but it is actually " + d); -} - -function shouldBeClear(x, y) { - // should be transparent black pixels - d = ctx.getImageData(x, y, 1, 1).data; - if (d[0] == 0 && d[1] == 0 && d[2] == 0 && d[3] == 0) { - testPassed("This pixel is transparent black."); - return; - } - testFailed("This pixel is expected to be transparent black, but it is actually " + d); -} - -function drawPattern(ctx) { - // Draw a four-color pattern - ctx.beginPath(); - ctx.fillStyle = "rgb(255, 0, 0)"; - ctx.fillRect(0, 0, 10, 10); - ctx.fillStyle = "rgb(0, 255, 0)"; - ctx.fillRect(10, 0, 10, 10); - ctx.fillStyle = "rgb(0, 0, 255)"; - ctx.fillRect(0, 10, 10, 10); - ctx.fillStyle = "rgb(0, 0, 0)"; - ctx.fillRect(10, 10, 10, 10); -} - -function clearContext(context) { - context.clearRect(0, 0, 50, 50); -} - -var bitmap; -var image; -var testBitmap; // this is an ImageBitmap that is uncropped. We use this to test createImageBitmap(testBitmap) -var d; // image.imageData -var elements; -var options; - -var imageWidth = 20; -var imageHeight = 20; - -// Draw to an auxillary canvas. -var aCanvas = document.createElement("canvas"); -aCanvas.width = imageWidth; -aCanvas.height = imageHeight; -var aCtx = aCanvas.getContext("2d"); -drawPattern(aCtx); - -var canvas = document.createElement("canvas"); -canvas.setAttribute("width", "50"); -canvas.setAttribute("height", "50"); -var ctx = canvas.getContext("2d"); - -image = new Image(); -image.onload = imageLoaded; -image.src = aCanvas.toDataURL(); - -var imageLoaded = false; -var imageBitmapLoaded = false; -var blobLoaded = false; - -function imageLoaded() { - createImageBitmap(image).then(imageBitmapLoadedCallback, shouldNotBeCalled); - d = aCtx.getImageData(0, 0, 20, 20); - imageLoaded = true; - loaded(); -} - -function imageBitmapLoadedCallback(imageBitmap) { - testBitmap = imageBitmap; - - shouldBe("testBitmap.width", "imageWidth"); - shouldBe("testBitmap.height", "imageHeight"); - - // width and height are readonly - testBitmap.width = 42; - testBitmap.height = 42; - shouldBe("testBitmap.width", "imageWidth"); - shouldBe("testBitmap.height", "imageHeight"); - - imageBitmapLoaded = true; - loaded(); -} - -var xhr = new XMLHttpRequest(); -xhr.open("GET", 'resources/pattern.png'); -xhr.responseType = 'blob'; -xhr.send(); -xhr.onload = function() { - blob = xhr.response; - blobLoaded = true; - loaded(); -} - -function loaded() { - if (imageLoaded && imageBitmapLoaded && blobLoaded) { - // check all elements and all options - elements = [image, aCanvas, d, testBitmap, blob]; - options = ["none", "flipY"]; - // elements = [image, aCanvas, d, testBitmap, blob]; - // wait for callback to finish before each check to ensure synchronous behavior - nextCheck(0, 0); - } -} - -function nextCheck(elementIndex, optionIndex) { - if (elementIndex == elements.length) { - finishJSTest(); - return; - } - var element = elements[elementIndex]; - imageBitmaps = {}; - debug("Checking " + jsWrapperClass(element) + " with imageOrientation: " + options[optionIndex] + "."); - var p1 = createImageBitmap(element, {imageOrientation: options[optionIndex]}).then(function (image) { imageBitmaps.noCrop = image }); - var p2 = createImageBitmap(element, 0, 0, 10, 10, {imageOrientation: options[optionIndex]}).then(function (image) { imageBitmaps.crop = image }); - var p3 = createImageBitmap(element, 5, 5, 10, 10, {imageOrientation: options[optionIndex]}).then(function (image) { imageBitmaps.cropCenter = image }); - var p4 = createImageBitmap(element, 10, 10, 10, 10, {imageOrientation: options[optionIndex]}).then(function (image) { imageBitmaps.cropRight = image }); - var p5 = createImageBitmap(element, -10, -10, 60, 60, {imageOrientation: options[optionIndex]}).then(function (image) { imageBitmaps.overCrop = image }); - var p6 = createImageBitmap(element, 10, 10, 50, 50, {imageOrientation: options[optionIndex]}).then(function (image) { imageBitmaps.overCropRight = image }); - var p7 = createImageBitmap(element, 10, 10, -10, -10, {imageOrientation: options[optionIndex]}).then(function (image) { imageBitmaps.negativeCrop = image }); - var p8 = createImageBitmap(element, -30, -30, 30, 30, {imageOrientation: options[optionIndex]}).then(function (image) { imageBitmaps.empty = image }); - var p9 = createImageBitmap(element, 40, 30, 30, 30, {imageOrientation: options[optionIndex]}).then(function (image) { imageBitmaps.emptyTwo = image }); - Promise.all([p1, p2, p3, p4, p5, p6, p7, p8, p9]).then(function() { - checkNoCrop(imageBitmaps.noCrop, options[optionIndex]); - checkCrop(imageBitmaps.crop, options[optionIndex]); - checkCropCenter(imageBitmaps.cropCenter, options[optionIndex]); - checkCropRight(imageBitmaps.cropRight, options[optionIndex]); - checkOverCrop(imageBitmaps.overCrop, options[optionIndex]); - checkOverCropRight(imageBitmaps.overCropRight, options[optionIndex]); - checkCrop(imageBitmaps.negativeCrop, options[optionIndex]); - checkEmpty(imageBitmaps.empty, options[optionIndex]); - checkEmpty(imageBitmaps.emptyTwo, options[optionIndex]); - if (optionIndex == 3) - nextCheck(elementIndex + 1, 0); - else - nextCheck(elementIndex, optionIndex + 1); - }, shouldNotBeCalled); -} - -function checkNoCrop(imageBitmap, option) { - debug("Check no crop."); - bitmap = imageBitmap; - shouldBeType("bitmap", "ImageBitmap"); - shouldBe("bitmap.width", "imageWidth"); - shouldBe("bitmap.height", "imageHeight"); - - clearContext(ctx); - ctx.drawImage(imageBitmap, 0, 0); - if (option == "flipY" || option == "bottomLeft") { - shouldBeBlue(9, 9); - shouldBeBlack(11, 9); - shouldBeRed(9, 11); - shouldBeGreen(11, 11); - shouldBeGreen(19, 19); - shouldBeClear(1, 21); - shouldBeClear(21, 1); - shouldBeClear(21, 21); - } else { - shouldBeRed(9, 9); - shouldBeGreen(11, 9); - shouldBeBlue(9, 11); - shouldBeBlack(11, 11); - shouldBeBlack(19, 19); - shouldBeClear(1, 21); - shouldBeClear(21, 1); - shouldBeClear(21, 21); - } - - clearContext(ctx); - ctx.drawImage(imageBitmap, 0, 0, 10, 10); - if (option == "flipY" || option == "bottomLeft") { - shouldBeBlue(4, 4); - shouldBeBlack(6, 4); - shouldBeRed(4, 6); - shouldBeGreen(6, 6); - shouldBeGreen(9, 9); - shouldBeClear(1, 11); - shouldBeClear(11, 1); - shouldBeClear(11, 11); - } else { - shouldBeRed(4, 4); - shouldBeGreen(6, 4); - shouldBeBlue(4, 6); - shouldBeBlack(6, 6); - shouldBeBlack(9, 9); - shouldBeClear(1, 11); - shouldBeClear(11, 1); - shouldBeClear(11, 11); - } - - clearContext(ctx); - ctx.drawImage(imageBitmap, 10, 10, 10, 10); - if (option == "flipY" || option == "bottomLeft") { - shouldBeBlue(14, 14); - shouldBeBlack(16, 14); - shouldBeRed(14, 16); - shouldBeGreen(16, 16); - shouldBeGreen(19, 19); - shouldBeClear(11, 21); - shouldBeClear(21, 11); - shouldBeClear(21, 21); - } else { - shouldBeRed(14, 14); - shouldBeGreen(16, 14); - shouldBeBlue(14, 16); - shouldBeBlack(16, 16); - shouldBeBlack(19, 19); - shouldBeClear(11, 21); - shouldBeClear(21, 11); - shouldBeClear(21, 21); - } - - clearContext(ctx); - ctx.drawImage(imageBitmap, 10, 10, 10, 10, 10, 10, 10, 10); - if (option == "flipY" || option == "bottomLeft") { - shouldBeClear(9, 9); - shouldBeGreen(11, 11); - shouldBeGreen(19, 19); - shouldBeClear(1, 21); - shouldBeClear(21, 1); - shouldBeClear(21, 21); - } else { - shouldBeClear(9, 9); - shouldBeBlack(11, 11); - shouldBeBlack(19, 19); - shouldBeClear(1, 21); - shouldBeClear(21, 1); - shouldBeClear(21, 21); - } -} - -function checkCrop(imageBitmap, option) { - debug("Check crop."); - bitmap = imageBitmap; - shouldBeType("bitmap", "ImageBitmap"); - shouldBe("bitmap.width", "10"); - shouldBe("bitmap.height", "10"); - - clearContext(ctx); - ctx.drawImage(imageBitmap, 0, 0); - if (option == "flipY" || option == "bottomLeft") { - shouldBeRed(1, 1); - shouldBeRed(9, 9); - shouldBeClear(12, 12); - shouldBeClear(1, 12); - shouldBeClear(12, 1); - } else { - shouldBeRed(1, 1); - shouldBeRed(9, 9); - shouldBeClear(12, 12); - shouldBeClear(1, 12); - shouldBeClear(12, 1); - } - - clearContext(ctx); - ctx.drawImage(imageBitmap, 0, 0, 20, 20); - if (option == "flipY" || option == "bottomLeft") { - shouldBeRed(1, 1); - shouldBeRed(18, 18); - shouldBeClear(22, 22); - shouldBeClear(1, 22); - shouldBeClear(22, 1); - } else { - shouldBeRed(1, 1); - shouldBeRed(18, 18); - shouldBeClear(22, 22); - shouldBeClear(1, 22); - shouldBeClear(22, 1); - } -} - -function checkCropCenter(imageBitmap, option) { - debug("Check crop center."); - bitmap = imageBitmap; - shouldBeType("bitmap", "ImageBitmap"); - shouldBe("bitmap.width", "10"); - shouldBe("bitmap.height", "10"); - - clearContext(ctx); - ctx.drawImage(imageBitmap, 0, 0); - if (option == "flipY" || option == "bottomLeft") { - shouldBeBlue(4, 4); - shouldBeBlack(6, 4); - shouldBeRed(4, 6); - shouldBeGreen(6, 6); - shouldBeGreen(9, 9); - shouldBeClear(11, 11); - shouldBeClear(1, 11); - shouldBeClear(11, 1); - } else { - shouldBeRed(4, 4); - shouldBeGreen(6, 4); - shouldBeBlue(4, 6); - shouldBeBlack(6, 6); - shouldBeBlack(9, 9); - shouldBeClear(11, 11); - shouldBeClear(1, 11); - shouldBeClear(11, 1); - } - - clearContext(ctx); - ctx.drawImage(imageBitmap, 0, 0, 20, 20); - if (option == "flipY" || option == "bottomLeft") { - shouldBeBlue(8, 8); - shouldBeBlack(11, 8); - shouldBeRed(8, 11); - shouldBeGreen(11, 11); - shouldBeGreen(18, 18); - shouldBeClear(22, 22); - shouldBeClear(1, 21); - shouldBeClear(21, 1); - } else { - shouldBeRed(8, 8); - shouldBeGreen(11, 8); - shouldBeBlue(8, 11); - shouldBeBlack(11, 11); - shouldBeBlack(18, 18); - shouldBeClear(22, 22); - shouldBeClear(1, 21); - shouldBeClear(21, 1); - } -} - -function checkCropRight(imageBitmap, option) { - debug("Check crop right."); - bitmap = imageBitmap; - shouldBeType("bitmap", "ImageBitmap"); - shouldBe("bitmap.width", "10"); - shouldBe("bitmap.height", "10"); - - clearContext(ctx); - ctx.drawImage(imageBitmap, 0, 0); - if (option == "flipY" || option == "bottomLeft") { - shouldBeBlack(1, 1); - shouldBeBlack(9, 9); - shouldBeClear(11, 11); - shouldBeClear(1, 11); - shouldBeClear(11, 1); - } else { - shouldBeBlack(1, 1); - shouldBeBlack(9, 9); - shouldBeClear(11, 11); - shouldBeClear(1, 11); - shouldBeClear(11, 1); - } -} - -function checkOverCrop(imageBitmap, option) { - debug("Check over crop."); - bitmap = imageBitmap; - shouldBeType("bitmap", "ImageBitmap"); - shouldBe("bitmap.width", "60"); - shouldBe("bitmap.height", "60"); - - clearContext(ctx); - ctx.drawImage(imageBitmap, 0, 0); - if (option == "flipY" || option == "bottomLeft") { - shouldBeClear(1, 59); - shouldBeClear(9, 51); - shouldBeBlue(10, 30); - shouldBeBlue(19, 39); - shouldBeBlack(20, 30); - shouldBeBlack(29, 39); - shouldBeRed(10, 40); - shouldBeRed(19, 49); - shouldBeGreen(20, 40); - shouldBeGreen(29, 49); - shouldBeClear(31, 59); - shouldBeClear(1, 29); - shouldBeClear(30, 30); - } else { - shouldBeClear(1, 1); - shouldBeClear(9, 9); - shouldBeRed(11, 11); - shouldBeRed(19, 19); - shouldBeGreen(21, 19); - shouldBeBlue(19, 21); - shouldBeBlack(21, 21); - shouldBeBlack(29, 29); - shouldBeClear(32, 1); - shouldBeClear(1, 32); - shouldBeClear(32, 32); - } - - clearContext(ctx); - ctx.drawImage(imageBitmap, 0, 0, 30, 30); - if (option == "flipY" || option == "bottomLeft") { - shouldBeClear(1, 29); - shouldBeClear(4, 25); - shouldBeBlue(5, 15); - shouldBeBlue(9, 19); - shouldBeBlack(10, 15); - shouldBeBlack(14, 19); - shouldBeRed(5, 21); - shouldBeRed(9, 24); - shouldBeGreen(11, 21); - shouldBeGreen(14, 24); - shouldBeClear(16, 29); - shouldBeClear(1, 14); - shouldBeClear(15, 15); - } else { - shouldBeClear(1, 1); - shouldBeClear(4, 4); - shouldBeRed(6, 6); - shouldBeRed(9, 9); - shouldBeGreen(11, 9); - shouldBeBlue(9, 11); - shouldBeBlack(11, 11); - shouldBeBlack(14, 14); - shouldBeClear(16, 1); - shouldBeClear(1, 16); - shouldBeClear(16, 16); - } -} - -function checkOverCropRight(imageBitmap, option) { - debug("Check over crop right."); - bitmap = imageBitmap; - shouldBe("bitmap.width", "50"); - shouldBe("bitmap.height", "50"); - - clearContext(ctx); - ctx.drawImage(imageBitmap, 0, 0); - if (option == "flipY" || option == "bottomLeft") { - shouldBeBlack(1, 40); - shouldBeBlack(9, 49); - shouldBeClear(10, 49); - shouldBeClear(1, 39); - shouldBeClear(10, 40); - } else { - shouldBeBlack(1, 1); - shouldBeBlack(9, 9); - shouldBeClear(11, 11); - shouldBeClear(1, 11); - shouldBeClear(11, 1); - } - - clearContext(ctx); - ctx.drawImage(imageBitmap, 0, 0, 20, 20); - if (option == "flipY" || option == "bottomLeft") { - shouldBeBlack(0, 16); - shouldBeBlack(3, 19); - shouldBeClear(4, 19); - shouldBeClear(0, 15); - shouldBeClear(4, 15); - } else { - shouldBeBlack(1, 1); - shouldBeBlack(3, 3); - shouldBeClear(5, 5); - shouldBeClear(1, 5); - shouldBeClear(5, 1); - } - - clearContext(ctx); - ctx.drawImage(imageBitmap, 10, 10, 20, 20, 0, 0, 20, 20); - if (option == "flipY" || option == "bottomLeft") { - shouldBeClear(1, 1); - shouldBeClear(3, 3); - shouldBeClear(5, 5); - shouldBeClear(1, 5); - shouldBeClear(5, 1); - } else { - shouldBeClear(1, 1); - shouldBeClear(3, 3); - shouldBeClear(5, 5); - shouldBeClear(1, 5); - shouldBeClear(5, 1); - } -} - -// For an empty image, the orientation doesn't matter -function checkEmpty(imageBitmap, option) { - debug("Check empty."); - bitmap = imageBitmap; - shouldBeType("bitmap", "ImageBitmap"); - shouldBe("bitmap.width", "30"); - shouldBe("bitmap.height", "30"); - - // nothing should be drawn - clearContext(ctx); - ctx.drawImage(imageBitmap, 0, 0); - shouldBeClear(1, 1); - shouldBeClear(9, 9); - shouldBeClear(11, 11); - shouldBeClear(22, 22); -} -</script> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-drawImage-with-options-expected.txt b/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-drawImage-with-options-expected.txt new file mode 100644 index 0000000..01f3fc4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-drawImage-with-options-expected.txt
@@ -0,0 +1,2803 @@ +Ensure correct behavior of drawImage with ImageBitmaps along with flipY option. + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + +PASS testBitmap.width is imageWidth +PASS testBitmap.height is imageHeight +PASS testBitmap.width is imageWidth +PASS testBitmap.height is imageHeight +Checking HTMLImageElement with imageOrientation: none with premultiplyAlphaOption: default. +Check no crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is imageWidth +PASS bitmap.height is imageHeight +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop center. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop right. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 60 +PASS bitmap.height is 60 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop right. +PASS bitmap.width is 50 +PASS bitmap.height is 50 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Checking HTMLImageElement with imageOrientation: none with premultiplyAlphaOption: none. +Check no crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is imageWidth +PASS bitmap.height is imageHeight +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop center. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop right. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 60 +PASS bitmap.height is 60 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop right. +PASS bitmap.width is 50 +PASS bitmap.height is 50 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Checking HTMLImageElement with imageOrientation: none with premultiplyAlphaOption: invalid. +PASS createImageBitmap with invalid options are rejected +Checking HTMLImageElement with imageOrientation: flipY with premultiplyAlphaOption: default. +Check no crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is imageWidth +PASS bitmap.height is imageHeight +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop center. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop right. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 60 +PASS bitmap.height is 60 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop right. +PASS bitmap.width is 50 +PASS bitmap.height is 50 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Checking HTMLImageElement with imageOrientation: flipY with premultiplyAlphaOption: none. +Check no crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is imageWidth +PASS bitmap.height is imageHeight +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop center. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop right. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 60 +PASS bitmap.height is 60 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop right. +PASS bitmap.width is 50 +PASS bitmap.height is 50 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Checking HTMLImageElement with imageOrientation: flipY with premultiplyAlphaOption: invalid. +PASS createImageBitmap with invalid options are rejected +Checking HTMLImageElement with imageOrientation: invalid with premultiplyAlphaOption: default. +PASS createImageBitmap with invalid options are rejected +Checking HTMLImageElement with imageOrientation: invalid with premultiplyAlphaOption: none. +PASS createImageBitmap with invalid options are rejected +Checking HTMLImageElement with imageOrientation: invalid with premultiplyAlphaOption: invalid. +PASS createImageBitmap with invalid options are rejected +Checking HTMLCanvasElement with imageOrientation: none with premultiplyAlphaOption: default. +Check no crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is imageWidth +PASS bitmap.height is imageHeight +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop center. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop right. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 60 +PASS bitmap.height is 60 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop right. +PASS bitmap.width is 50 +PASS bitmap.height is 50 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Checking HTMLCanvasElement with imageOrientation: none with premultiplyAlphaOption: none. +Check no crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is imageWidth +PASS bitmap.height is imageHeight +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop center. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop right. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 60 +PASS bitmap.height is 60 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop right. +PASS bitmap.width is 50 +PASS bitmap.height is 50 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Checking HTMLCanvasElement with imageOrientation: none with premultiplyAlphaOption: invalid. +PASS createImageBitmap with invalid options are rejected +Checking HTMLCanvasElement with imageOrientation: flipY with premultiplyAlphaOption: default. +Check no crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is imageWidth +PASS bitmap.height is imageHeight +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop center. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop right. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 60 +PASS bitmap.height is 60 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop right. +PASS bitmap.width is 50 +PASS bitmap.height is 50 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Checking HTMLCanvasElement with imageOrientation: flipY with premultiplyAlphaOption: none. +Check no crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is imageWidth +PASS bitmap.height is imageHeight +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop center. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop right. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 60 +PASS bitmap.height is 60 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop right. +PASS bitmap.width is 50 +PASS bitmap.height is 50 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Checking HTMLCanvasElement with imageOrientation: flipY with premultiplyAlphaOption: invalid. +PASS createImageBitmap with invalid options are rejected +Checking HTMLCanvasElement with imageOrientation: invalid with premultiplyAlphaOption: default. +PASS createImageBitmap with invalid options are rejected +Checking HTMLCanvasElement with imageOrientation: invalid with premultiplyAlphaOption: none. +PASS createImageBitmap with invalid options are rejected +Checking HTMLCanvasElement with imageOrientation: invalid with premultiplyAlphaOption: invalid. +PASS createImageBitmap with invalid options are rejected +Checking ImageData with imageOrientation: none with premultiplyAlphaOption: default. +Check no crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is imageWidth +PASS bitmap.height is imageHeight +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop center. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop right. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 60 +PASS bitmap.height is 60 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop right. +PASS bitmap.width is 50 +PASS bitmap.height is 50 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Checking ImageData with imageOrientation: none with premultiplyAlphaOption: none. +Check no crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is imageWidth +PASS bitmap.height is imageHeight +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop center. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop right. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 60 +PASS bitmap.height is 60 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop right. +PASS bitmap.width is 50 +PASS bitmap.height is 50 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Checking ImageData with imageOrientation: none with premultiplyAlphaOption: invalid. +PASS createImageBitmap with invalid options are rejected +Checking ImageData with imageOrientation: flipY with premultiplyAlphaOption: default. +Check no crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is imageWidth +PASS bitmap.height is imageHeight +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop center. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop right. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 60 +PASS bitmap.height is 60 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop right. +PASS bitmap.width is 50 +PASS bitmap.height is 50 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Checking ImageData with imageOrientation: flipY with premultiplyAlphaOption: none. +Check no crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is imageWidth +PASS bitmap.height is imageHeight +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop center. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop right. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 60 +PASS bitmap.height is 60 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop right. +PASS bitmap.width is 50 +PASS bitmap.height is 50 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Checking ImageData with imageOrientation: flipY with premultiplyAlphaOption: invalid. +PASS createImageBitmap with invalid options are rejected +Checking ImageData with imageOrientation: invalid with premultiplyAlphaOption: default. +PASS createImageBitmap with invalid options are rejected +Checking ImageData with imageOrientation: invalid with premultiplyAlphaOption: none. +PASS createImageBitmap with invalid options are rejected +Checking ImageData with imageOrientation: invalid with premultiplyAlphaOption: invalid. +PASS createImageBitmap with invalid options are rejected +Checking ImageBitmap with imageOrientation: none with premultiplyAlphaOption: default. +Check no crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is imageWidth +PASS bitmap.height is imageHeight +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop center. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop right. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 60 +PASS bitmap.height is 60 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop right. +PASS bitmap.width is 50 +PASS bitmap.height is 50 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Checking ImageBitmap with imageOrientation: none with premultiplyAlphaOption: none. +Check no crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is imageWidth +PASS bitmap.height is imageHeight +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop center. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop right. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 60 +PASS bitmap.height is 60 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop right. +PASS bitmap.width is 50 +PASS bitmap.height is 50 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Checking ImageBitmap with imageOrientation: none with premultiplyAlphaOption: invalid. +PASS createImageBitmap with invalid options are rejected +Checking ImageBitmap with imageOrientation: flipY with premultiplyAlphaOption: default. +Check no crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is imageWidth +PASS bitmap.height is imageHeight +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop center. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop right. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 60 +PASS bitmap.height is 60 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop right. +PASS bitmap.width is 50 +PASS bitmap.height is 50 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Checking ImageBitmap with imageOrientation: flipY with premultiplyAlphaOption: none. +Check no crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is imageWidth +PASS bitmap.height is imageHeight +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop center. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop right. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 60 +PASS bitmap.height is 60 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop right. +PASS bitmap.width is 50 +PASS bitmap.height is 50 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Checking ImageBitmap with imageOrientation: flipY with premultiplyAlphaOption: invalid. +PASS createImageBitmap with invalid options are rejected +Checking ImageBitmap with imageOrientation: invalid with premultiplyAlphaOption: default. +PASS createImageBitmap with invalid options are rejected +Checking ImageBitmap with imageOrientation: invalid with premultiplyAlphaOption: none. +PASS createImageBitmap with invalid options are rejected +Checking ImageBitmap with imageOrientation: invalid with premultiplyAlphaOption: invalid. +PASS createImageBitmap with invalid options are rejected +Checking Blob with imageOrientation: none with premultiplyAlphaOption: default. +Check no crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is imageWidth +PASS bitmap.height is imageHeight +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop center. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop right. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 60 +PASS bitmap.height is 60 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop right. +PASS bitmap.width is 50 +PASS bitmap.height is 50 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Checking Blob with imageOrientation: none with premultiplyAlphaOption: none. +Check no crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is imageWidth +PASS bitmap.height is imageHeight +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop center. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop right. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 60 +PASS bitmap.height is 60 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop right. +PASS bitmap.width is 50 +PASS bitmap.height is 50 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Checking Blob with imageOrientation: none with premultiplyAlphaOption: invalid. +PASS createImageBitmap with invalid options are rejected +Checking Blob with imageOrientation: flipY with premultiplyAlphaOption: default. +Check no crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is imageWidth +PASS bitmap.height is imageHeight +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop center. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop right. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 60 +PASS bitmap.height is 60 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop right. +PASS bitmap.width is 50 +PASS bitmap.height is 50 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Checking Blob with imageOrientation: flipY with premultiplyAlphaOption: none. +Check no crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is imageWidth +PASS bitmap.height is imageHeight +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop center. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop right. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 60 +PASS bitmap.height is 60 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is blue. +PASS This pixel is blue. +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is green. +PASS This pixel is green. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check over crop right. +PASS bitmap.width is 50 +PASS bitmap.height is 50 +PASS This pixel is black. +PASS This pixel is black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check crop. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 10 +PASS bitmap.height is 10 +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is red. +PASS This pixel is red. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Check empty. +PASS jsWrapperClass(bitmap) is 'ImageBitmap' +PASS bitmap.width is 30 +PASS bitmap.height is 30 +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +PASS This pixel is transparent black. +Checking Blob with imageOrientation: flipY with premultiplyAlphaOption: invalid. +PASS createImageBitmap with invalid options are rejected +Checking Blob with imageOrientation: invalid with premultiplyAlphaOption: default. +PASS createImageBitmap with invalid options are rejected +Checking Blob with imageOrientation: invalid with premultiplyAlphaOption: none. +PASS createImageBitmap with invalid options are rejected +Checking Blob with imageOrientation: invalid with premultiplyAlphaOption: invalid. +PASS createImageBitmap with invalid options are rejected +PASS successfullyParsed is true + +TEST COMPLETE +
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-drawImage-with-options.html b/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-drawImage-with-options.html new file mode 100644 index 0000000..1677a8a --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-drawImage-with-options.html
@@ -0,0 +1,574 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<html> +<head> +<script src="../../resources/js-test.js"></script> +</head> +<body> +<script> + +description("Ensure correct behavior of drawImage with ImageBitmaps along with flipY option."); +window.jsTestIsAsync = true; + +function jsWrapperClass(node) +{ + // returns the ClassName of node + if (!node) + return "[null]"; + var string = Object.prototype.toString.apply(node); + + // string will be of the form [object ClassName] + return string.substr(8, string.length - 9); +} + +function shouldBeType(expression, className) +{ + shouldBe("jsWrapperClass(" + expression + ")", "'" + className + "'"); +} + +function shouldNotBeCalled() { + testFailed("createImageBitmap promise rejected."); + finishJSTest(); +} + +function shouldBeRed(x, y) { + d = ctx.getImageData(x, y, 1, 1).data; + if (d[0] == 255 && d[1] == 0 && d[2] == 0 && d[3] == 255) { + testPassed("This pixel is red."); + return; + } + testFailed("This pixel is expected to be red, but it is actually " + d); +} + +function shouldBeGreen(x, y) { + d = ctx.getImageData(x, y, 1, 1).data; + if (d[0] == 0 && d[1] == 255 && d[2] == 0 && d[3] == 255) { + testPassed("This pixel is green."); + return; + } + testFailed("This pixel is expected to be green, but it is actually " + d); +} + +function shouldBeBlue(x, y) { + d = ctx.getImageData(x, y, 1, 1).data; + if (d[0] == 0 && d[1] == 0 && d[2] == 255 && d[3] == 255) { + testPassed("This pixel is blue."); + return; + } + testFailed("This pixel is expected to be blue, but it is actually " + d); +} + +function shouldBeBlack(x, y) { + d = ctx.getImageData(x, y, 1, 1).data; + if (d[0] == 0 && d[1] == 0 && d[2] == 0 && d[3] == 255) { + testPassed("This pixel is black."); + return; + } + testFailed("This pixel is expected to be black, but it is actually " + d); +} + +function shouldBeClear(x, y) { + // should be transparent black pixels + d = ctx.getImageData(x, y, 1, 1).data; + if (d[0] == 0 && d[1] == 0 && d[2] == 0 && d[3] == 0) { + testPassed("This pixel is transparent black."); + return; + } + testFailed("This pixel is expected to be transparent black, but it is actually " + d); +} + +function drawPattern(ctx) { + // Draw a four-color pattern + ctx.beginPath(); + ctx.fillStyle = "rgb(255, 0, 0)"; + ctx.fillRect(0, 0, 10, 10); + ctx.fillStyle = "rgb(0, 255, 0)"; + ctx.fillRect(10, 0, 10, 10); + ctx.fillStyle = "rgb(0, 0, 255)"; + ctx.fillRect(0, 10, 10, 10); + ctx.fillStyle = "rgb(0, 0, 0)"; + ctx.fillRect(10, 10, 10, 10); +} + +function clearContext(context) { + context.clearRect(0, 0, 50, 50); +} + +var bitmap; +var image; +var testBitmap; // this is an ImageBitmap that is uncropped. We use this to test createImageBitmap(testBitmap) +var d; // image.imageData +var elements; +var imageOrientationOptions; +var premultiplyAlphaOptions; +var optionIndexArray; + +var imageWidth = 20; +var imageHeight = 20; + +// Draw to an auxillary canvas. +var aCanvas = document.createElement("canvas"); +aCanvas.width = imageWidth; +aCanvas.height = imageHeight; +var aCtx = aCanvas.getContext("2d"); +drawPattern(aCtx); + +var canvas = document.createElement("canvas"); +canvas.setAttribute("width", "50"); +canvas.setAttribute("height", "50"); +var ctx = canvas.getContext("2d"); + +image = new Image(); +image.onload = imageLoaded; +image.src = aCanvas.toDataURL(); + +var imageLoaded = false; +var imageBitmapLoaded = false; +var blobLoaded = false; + +function imageLoaded() { + createImageBitmap(image).then(imageBitmapLoadedCallback, shouldNotBeCalled); + d = aCtx.getImageData(0, 0, 20, 20); + imageLoaded = true; + loaded(); +} + +function imageBitmapLoadedCallback(imageBitmap) { + testBitmap = imageBitmap; + + shouldBe("testBitmap.width", "imageWidth"); + shouldBe("testBitmap.height", "imageHeight"); + + // width and height are readonly + testBitmap.width = 42; + testBitmap.height = 42; + shouldBe("testBitmap.width", "imageWidth"); + shouldBe("testBitmap.height", "imageHeight"); + + imageBitmapLoaded = true; + loaded(); +} + +var xhr = new XMLHttpRequest(); +xhr.open("GET", 'resources/pattern.png'); +xhr.responseType = 'blob'; +xhr.send(); +xhr.onload = function() { + blob = xhr.response; + blobLoaded = true; + loaded(); +} + +function loaded() { + if (imageLoaded && imageBitmapLoaded && blobLoaded) { + // check all elements + elements = [image, aCanvas, d, testBitmap, blob]; + imageOrientationOptions = ["none", "flipY", "invalid"]; + premultiplyAlphaOptions = ["default", "none", "invalid"]; + optionIndexArray = [[0, 0], [0, 1], [0, 2], + [1, 0], [1, 1], [1, 2], + [2, 0], [2, 1], [2, 2]]; + // wait for callback to finish before each check to ensure synchronous behavior + nextCheck(0, 0); + } +} + +function nextCheck(elementIndex, optionIndex) { + if (elementIndex == elements.length) { + finishJSTest(); + return; + } + var element = elements[elementIndex]; + var optionIndex1 = optionIndexArray[optionIndex][0]; + var optionIndex2 = optionIndexArray[optionIndex][1]; + imageBitmaps = {}; + debug("Checking " + jsWrapperClass(element) + " with imageOrientation: " + imageOrientationOptions[optionIndex1] + " with premultiplyAlphaOption: " + premultiplyAlphaOptions[optionIndex2] + "."); + var p1 = createImageBitmap(element, {imageOrientation: imageOrientationOptions[optionIndex1], premultiplyAlpha: premultiplyAlphaOptions[optionIndex2]}).then(function (image) { imageBitmaps.noCrop = image }); + var p2 = createImageBitmap(element, 0, 0, 10, 10, {imageOrientation: imageOrientationOptions[optionIndex1], premultiplyAlpha: premultiplyAlphaOptions[optionIndex2]}).then(function (image) { imageBitmaps.crop = image }); + var p3 = createImageBitmap(element, 5, 5, 10, 10, {imageOrientation: imageOrientationOptions[optionIndex1], premultiplyAlpha: premultiplyAlphaOptions[optionIndex2]}).then(function (image) { imageBitmaps.cropCenter = image }); + var p4 = createImageBitmap(element, 10, 10, 10, 10, {imageOrientation: imageOrientationOptions[optionIndex1], premultiplyAlpha: premultiplyAlphaOptions[optionIndex2]}).then(function (image) { imageBitmaps.cropRight = image }); + var p5 = createImageBitmap(element, -10, -10, 60, 60, {imageOrientation: imageOrientationOptions[optionIndex1], premultiplyAlpha: premultiplyAlphaOptions[optionIndex2]}).then(function (image) { imageBitmaps.overCrop = image }); + var p6 = createImageBitmap(element, 10, 10, 50, 50, {imageOrientation: imageOrientationOptions[optionIndex1], premultiplyAlpha: premultiplyAlphaOptions[optionIndex2]}).then(function (image) { imageBitmaps.overCropRight = image }); + var p7 = createImageBitmap(element, 10, 10, -10, -10, {imageOrientation: imageOrientationOptions[optionIndex1], premultiplyAlpha: premultiplyAlphaOptions[optionIndex2]}).then(function (image) { imageBitmaps.negativeCrop = image }); + var p8 = createImageBitmap(element, -30, -30, 30, 30, {imageOrientation: imageOrientationOptions[optionIndex1], premultiplyAlpha: premultiplyAlphaOptions[optionIndex2]}).then(function (image) { imageBitmaps.empty = image }); + var p9 = createImageBitmap(element, 40, 30, 30, 30, {imageOrientation: imageOrientationOptions[optionIndex1], premultiplyAlpha: premultiplyAlphaOptions[optionIndex2]}).then(function (image) { imageBitmaps.emptyTwo = image }); + Promise.all([p1, p2, p3, p4, p5, p6, p7, p8, p9]).then(function() { + checkNoCrop(imageBitmaps.noCrop, imageOrientationOptions[optionIndex1]); + checkCrop(imageBitmaps.crop, imageOrientationOptions[optionIndex1]); + checkCropCenter(imageBitmaps.cropCenter, imageOrientationOptions[optionIndex1]); + checkCropRight(imageBitmaps.cropRight, imageOrientationOptions[optionIndex1]); + checkOverCrop(imageBitmaps.overCrop, imageOrientationOptions[optionIndex1]); + checkOverCropRight(imageBitmaps.overCropRight, imageOrientationOptions[optionIndex1]); + checkCrop(imageBitmaps.negativeCrop, imageOrientationOptions[optionIndex1]); + checkEmpty(imageBitmaps.empty, imageOrientationOptions[optionIndex1]); + checkEmpty(imageBitmaps.emptyTwo, imageOrientationOptions[optionIndex1]); + if (optionIndex == optionIndexArray.length - 1) + nextCheck(elementIndex + 1, 0); + else + nextCheck(elementIndex, optionIndex + 1); + }, function() { + // when the options are invalid, we expect the promise to be rejected. + if ((imageOrientationOptions[optionIndex1] != "none" && imageOrientationOptions[optionIndex1] != "flipY") || + (premultiplyAlphaOptions[optionIndex2] != "default" && premultiplyAlphaOptions[optionIndex2] != "none")) { + testPassed("createImageBitmap with invalid options are rejected"); + if (optionIndex == optionIndexArray.length - 1) + nextCheck(elementIndex + 1, 0); + else + nextCheck(elementIndex, optionIndex + 1); + } else { + shouldNotBeCalled(); + } + }); +} + +function checkNoCrop(imageBitmap, option) { + debug("Check no crop."); + bitmap = imageBitmap; + shouldBeType("bitmap", "ImageBitmap"); + shouldBe("bitmap.width", "imageWidth"); + shouldBe("bitmap.height", "imageHeight"); + + clearContext(ctx); + ctx.drawImage(imageBitmap, 0, 0); + if (option == "flipY" || option == "bottomLeft") { + shouldBeBlue(9, 9); + shouldBeBlack(11, 9); + shouldBeRed(9, 11); + shouldBeGreen(11, 11); + shouldBeGreen(19, 19); + shouldBeClear(1, 21); + shouldBeClear(21, 1); + shouldBeClear(21, 21); + } else { + shouldBeRed(9, 9); + shouldBeGreen(11, 9); + shouldBeBlue(9, 11); + shouldBeBlack(11, 11); + shouldBeBlack(19, 19); + shouldBeClear(1, 21); + shouldBeClear(21, 1); + shouldBeClear(21, 21); + } + + clearContext(ctx); + ctx.drawImage(imageBitmap, 0, 0, 10, 10); + if (option == "flipY" || option == "bottomLeft") { + shouldBeBlue(4, 4); + shouldBeBlack(6, 4); + shouldBeRed(4, 6); + shouldBeGreen(6, 6); + shouldBeGreen(9, 9); + shouldBeClear(1, 11); + shouldBeClear(11, 1); + shouldBeClear(11, 11); + } else { + shouldBeRed(4, 4); + shouldBeGreen(6, 4); + shouldBeBlue(4, 6); + shouldBeBlack(6, 6); + shouldBeBlack(9, 9); + shouldBeClear(1, 11); + shouldBeClear(11, 1); + shouldBeClear(11, 11); + } + + clearContext(ctx); + ctx.drawImage(imageBitmap, 10, 10, 10, 10); + if (option == "flipY" || option == "bottomLeft") { + shouldBeBlue(14, 14); + shouldBeBlack(16, 14); + shouldBeRed(14, 16); + shouldBeGreen(16, 16); + shouldBeGreen(19, 19); + shouldBeClear(11, 21); + shouldBeClear(21, 11); + shouldBeClear(21, 21); + } else { + shouldBeRed(14, 14); + shouldBeGreen(16, 14); + shouldBeBlue(14, 16); + shouldBeBlack(16, 16); + shouldBeBlack(19, 19); + shouldBeClear(11, 21); + shouldBeClear(21, 11); + shouldBeClear(21, 21); + } + + clearContext(ctx); + ctx.drawImage(imageBitmap, 10, 10, 10, 10, 10, 10, 10, 10); + if (option == "flipY" || option == "bottomLeft") { + shouldBeClear(9, 9); + shouldBeGreen(11, 11); + shouldBeGreen(19, 19); + shouldBeClear(1, 21); + shouldBeClear(21, 1); + shouldBeClear(21, 21); + } else { + shouldBeClear(9, 9); + shouldBeBlack(11, 11); + shouldBeBlack(19, 19); + shouldBeClear(1, 21); + shouldBeClear(21, 1); + shouldBeClear(21, 21); + } +} + +function checkCrop(imageBitmap, option) { + debug("Check crop."); + bitmap = imageBitmap; + shouldBeType("bitmap", "ImageBitmap"); + shouldBe("bitmap.width", "10"); + shouldBe("bitmap.height", "10"); + + clearContext(ctx); + ctx.drawImage(imageBitmap, 0, 0); + if (option == "flipY" || option == "bottomLeft") { + shouldBeRed(1, 1); + shouldBeRed(9, 9); + shouldBeClear(12, 12); + shouldBeClear(1, 12); + shouldBeClear(12, 1); + } else { + shouldBeRed(1, 1); + shouldBeRed(9, 9); + shouldBeClear(12, 12); + shouldBeClear(1, 12); + shouldBeClear(12, 1); + } + + clearContext(ctx); + ctx.drawImage(imageBitmap, 0, 0, 20, 20); + if (option == "flipY" || option == "bottomLeft") { + shouldBeRed(1, 1); + shouldBeRed(18, 18); + shouldBeClear(22, 22); + shouldBeClear(1, 22); + shouldBeClear(22, 1); + } else { + shouldBeRed(1, 1); + shouldBeRed(18, 18); + shouldBeClear(22, 22); + shouldBeClear(1, 22); + shouldBeClear(22, 1); + } +} + +function checkCropCenter(imageBitmap, option) { + debug("Check crop center."); + bitmap = imageBitmap; + shouldBeType("bitmap", "ImageBitmap"); + shouldBe("bitmap.width", "10"); + shouldBe("bitmap.height", "10"); + + clearContext(ctx); + ctx.drawImage(imageBitmap, 0, 0); + if (option == "flipY" || option == "bottomLeft") { + shouldBeBlue(4, 4); + shouldBeBlack(6, 4); + shouldBeRed(4, 6); + shouldBeGreen(6, 6); + shouldBeGreen(9, 9); + shouldBeClear(11, 11); + shouldBeClear(1, 11); + shouldBeClear(11, 1); + } else { + shouldBeRed(4, 4); + shouldBeGreen(6, 4); + shouldBeBlue(4, 6); + shouldBeBlack(6, 6); + shouldBeBlack(9, 9); + shouldBeClear(11, 11); + shouldBeClear(1, 11); + shouldBeClear(11, 1); + } + + clearContext(ctx); + ctx.drawImage(imageBitmap, 0, 0, 20, 20); + if (option == "flipY" || option == "bottomLeft") { + shouldBeBlue(8, 8); + shouldBeBlack(11, 8); + shouldBeRed(8, 11); + shouldBeGreen(11, 11); + shouldBeGreen(18, 18); + shouldBeClear(22, 22); + shouldBeClear(1, 21); + shouldBeClear(21, 1); + } else { + shouldBeRed(8, 8); + shouldBeGreen(11, 8); + shouldBeBlue(8, 11); + shouldBeBlack(11, 11); + shouldBeBlack(18, 18); + shouldBeClear(22, 22); + shouldBeClear(1, 21); + shouldBeClear(21, 1); + } +} + +function checkCropRight(imageBitmap, option) { + debug("Check crop right."); + bitmap = imageBitmap; + shouldBeType("bitmap", "ImageBitmap"); + shouldBe("bitmap.width", "10"); + shouldBe("bitmap.height", "10"); + + clearContext(ctx); + ctx.drawImage(imageBitmap, 0, 0); + if (option == "flipY" || option == "bottomLeft") { + shouldBeBlack(1, 1); + shouldBeBlack(9, 9); + shouldBeClear(11, 11); + shouldBeClear(1, 11); + shouldBeClear(11, 1); + } else { + shouldBeBlack(1, 1); + shouldBeBlack(9, 9); + shouldBeClear(11, 11); + shouldBeClear(1, 11); + shouldBeClear(11, 1); + } +} + +function checkOverCrop(imageBitmap, option) { + debug("Check over crop."); + bitmap = imageBitmap; + shouldBeType("bitmap", "ImageBitmap"); + shouldBe("bitmap.width", "60"); + shouldBe("bitmap.height", "60"); + + clearContext(ctx); + ctx.drawImage(imageBitmap, 0, 0); + if (option == "flipY" || option == "bottomLeft") { + shouldBeClear(1, 59); + shouldBeClear(9, 51); + shouldBeBlue(11, 31); + shouldBeBlue(19, 39); + shouldBeBlack(21, 31); + shouldBeBlack(29, 39); + shouldBeRed(11, 41); + shouldBeRed(19, 49); + shouldBeGreen(21, 41); + shouldBeGreen(29, 49); + shouldBeClear(31, 59); + shouldBeClear(1, 29); + shouldBeClear(31, 31); + } else { + shouldBeClear(1, 1); + shouldBeClear(9, 9); + shouldBeRed(11, 11); + shouldBeRed(19, 19); + shouldBeGreen(21, 19); + shouldBeBlue(19, 21); + shouldBeBlack(21, 21); + shouldBeBlack(29, 29); + shouldBeClear(32, 1); + shouldBeClear(1, 32); + shouldBeClear(32, 32); + } + + // comment out this part for now due to crbug.com/578889 + /*clearContext(ctx); + ctx.drawImage(imageBitmap, 0, 0, 30, 30); + if (option == "flipY" || option == "bottomLeft") { + shouldBeClear(1, 29); + shouldBeClear(4, 25); + shouldBeBlue(5, 15); + shouldBeBlue(9, 19); + shouldBeBlack(10, 15); + shouldBeBlack(14, 19); + shouldBeRed(5, 21); + shouldBeRed(9, 24); + shouldBeGreen(11, 21); + shouldBeGreen(14, 24); + shouldBeClear(16, 29); + shouldBeClear(1, 14); + shouldBeClear(15, 15); + } else { + shouldBeClear(1, 1); + shouldBeClear(4, 4); + shouldBeRed(6, 6); + shouldBeRed(9, 9); + shouldBeGreen(11, 9); + shouldBeBlue(9, 11); + shouldBeBlack(11, 11); + shouldBeBlack(14, 14); + shouldBeClear(16, 1); + shouldBeClear(1, 16); + shouldBeClear(16, 16); + }*/ +} + +function checkOverCropRight(imageBitmap, option) { + debug("Check over crop right."); + bitmap = imageBitmap; + shouldBe("bitmap.width", "50"); + shouldBe("bitmap.height", "50"); + + clearContext(ctx); + ctx.drawImage(imageBitmap, 0, 0); + if (option == "flipY" || option == "bottomLeft") { + shouldBeBlack(1, 40); + shouldBeBlack(9, 49); + shouldBeClear(10, 49); + shouldBeClear(1, 39); + shouldBeClear(10, 40); + } else { + shouldBeBlack(1, 1); + shouldBeBlack(9, 9); + shouldBeClear(11, 11); + shouldBeClear(1, 11); + shouldBeClear(11, 1); + } + + // comment out this part for now due to crbug.com/578889 + /*clearContext(ctx); + ctx.drawImage(imageBitmap, 0, 0, 20, 20); + if (option == "flipY" || option == "bottomLeft") { + shouldBeBlack(0, 16); + shouldBeBlack(3, 19); + shouldBeClear(4, 19); + shouldBeClear(0, 15); + shouldBeClear(4, 15); + } else { + shouldBeBlack(1, 1); + shouldBeBlack(3, 3); + shouldBeClear(5, 5); + shouldBeClear(1, 5); + shouldBeClear(5, 1); + }*/ + + clearContext(ctx); + ctx.drawImage(imageBitmap, 10, 10, 20, 20, 0, 0, 20, 20); + if (option == "flipY" || option == "bottomLeft") { + shouldBeClear(1, 1); + shouldBeClear(3, 3); + shouldBeClear(5, 5); + shouldBeClear(1, 5); + shouldBeClear(5, 1); + } else { + shouldBeClear(1, 1); + shouldBeClear(3, 3); + shouldBeClear(5, 5); + shouldBeClear(1, 5); + shouldBeClear(5, 1); + } +} + +// For an empty image, the orientation doesn't matter +function checkEmpty(imageBitmap, option) { + debug("Check empty."); + bitmap = imageBitmap; + shouldBeType("bitmap", "ImageBitmap"); + shouldBe("bitmap.width", "30"); + shouldBe("bitmap.height", "30"); + + // nothing should be drawn + clearContext(ctx); + ctx.drawImage(imageBitmap, 0, 0); + shouldBeClear(1, 1); + shouldBeClear(9, 9); + shouldBeClear(11, 11); + shouldBeClear(22, 22); +} +</script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/fast/css/background-image-size-serialization-expected.txt b/third_party/WebKit/LayoutTests/fast/css/background-image-size-serialization-expected.txt new file mode 100644 index 0000000..f1ca6ee --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/css/background-image-size-serialization-expected.txt
@@ -0,0 +1,9 @@ +PASS cssRules.length is 4 +PASS cssRules[0].cssText is ".noposition { background: url(\"foo.png\") 0% 0% / contain; }" +PASS cssRules[1].cssText is ".position1 { background: url(\"foo.png\") 1px 50% / contain; }" +PASS cssRules[2].cssText is ".position2 { background: url(\"foo.png\") 1px / contain; }" +PASS cssRules[3].cssText is ".position3 { background: url(\"foo.png\") 1px 1px / contain; }" +PASS successfullyParsed is true + +TEST COMPLETE +
diff --git a/third_party/WebKit/LayoutTests/fast/css/background-image-size-serialization.html b/third_party/WebKit/LayoutTests/fast/css/background-image-size-serialization.html new file mode 100644 index 0000000..8a90873 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/css/background-image-size-serialization.html
@@ -0,0 +1,35 @@ +<script src="../../resources/js-test.js"></script> +<style> +.noposition +{ + background: url("foo.png"); + background-size: contain; +} +.position1 +{ + background: url("foo.png"); + background-position: 1px; + background-size: contain; +} +.position2 +{ + background: url("foo.png"); + background-position-x: 1px; + background-size: contain; +} +.position3 +{ + background: url("foo.png"); + background-position: 1px 1px; + background-size: contain; +} +</style> +<script> +var cssRules = document.styleSheets[1].cssRules; + +shouldBe('cssRules.length', '4'); +shouldBeEqualToString('cssRules[0].cssText', '.noposition { background: url("foo.png") 0% 0% / contain; }'); +shouldBeEqualToString('cssRules[1].cssText', '.position1 { background: url("foo.png") 1px 50% / contain; }'); +shouldBeEqualToString('cssRules[2].cssText', '.position2 { background: url("foo.png") 1px / contain; }'); +shouldBeEqualToString('cssRules[3].cssText', '.position3 { background: url("foo.png") 1px 1px / contain; }'); +</script>
diff --git a/third_party/WebKit/LayoutTests/fast/css/quirks-mode-ignore-list-item.html b/third_party/WebKit/LayoutTests/fast/css/quirks-mode-ignore-list-item.html new file mode 100644 index 0000000..61505ab0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/css/quirks-mode-ignore-list-item.html
@@ -0,0 +1,18 @@ +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> + +<style> +div { + display:list-item; + float:right +} +</style> + +<div id="target"></div> + +<script> +test(function() { + assert_equals(getComputedStyle(target).display, "list-item"); + assert_equals(getComputedStyle(target).float, "right"); +}, "Ensure that elements with display:list-item retain their display value and are not set to 'display:block' when float is set in quirks mode."); +</script> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/fast/dom/HTMLCollection/HTMLCollection-namedItem-invalidate-no-crash-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/HTMLCollection/HTMLCollection-namedItem-invalidate-no-crash-expected.txt new file mode 100644 index 0000000..25ed90fd --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/dom/HTMLCollection/HTMLCollection-namedItem-invalidate-no-crash-expected.txt
@@ -0,0 +1,9 @@ +Invalidation of cached id-name collections must not crash. + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + +PASS successfullyParsed is true + +TEST COMPLETE +
diff --git a/third_party/WebKit/LayoutTests/fast/dom/HTMLCollection/HTMLCollection-namedItem-invalidate-no-crash.html b/third_party/WebKit/LayoutTests/fast/dom/HTMLCollection/HTMLCollection-namedItem-invalidate-no-crash.html new file mode 100644 index 0000000..5f3e8c9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/dom/HTMLCollection/HTMLCollection-namedItem-invalidate-no-crash.html
@@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<script src="../../../resources/js-test.js"></script> +</head> +<body> +<pre id=p1></pre> +<pre id=p1></pre> +<pre id=p1></pre> +<script> +description("Invalidation of cached id-name collections must not crash."); + +if (window.testRunner) + testRunner.dumpAsText(); + +var is = window["p1"]; +var div = document.createElement('div'); +document.body.appendChild(div); +div.appendChild(is[is.length - 2]); +// Invalidate the underlying cache. +is.namedItem("p1").remove(); +// Out of bounds index, updates the collection length. +is.item(13); +// Remove parent of collection member; must invalidate cached length. +div.remove(); +// Force re-caching. +is.namedItem("p1"); +</script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/access-key.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/access-key.html index 2c84f93..14a990c 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/access-key.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/access-key.html
@@ -61,7 +61,7 @@ 'shadowC/inputD', 'shadowC/inputE', 'shadowC/shadowF/inputG']; for (var i = 0; i < ids.length; ++i) { - var element = getNodeInTreeOfTrees(ids[i]); + var element = getNodeInComposedTree(ids[i]); element.addEventListener('focus', recordEvent, false); } } @@ -79,12 +79,12 @@ pressAccessKey('a'); shouldBe('dispatchedEvent("focus")', '["inputE"]'); - getNodeInTreeOfTrees('shadowC/inputD').focus(); + getNodeInComposedTree('shadowC/inputD').focus(); clearEventRecords(); pressAccessKey('a'); shouldBe('dispatchedEvent("focus")', '["inputE"]'); - getNodeInTreeOfTrees('shadowC/shadowF/inputG').focus(); + getNodeInComposedTree('shadowC/shadowF/inputG').focus(); clearEventRecords(); pressAccessKey('a'); shouldBe('dispatchedEvent("focus")', '["inputE"]');
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/attr-dir-inherit.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/attr-dir-inherit.html index 091b722..53e51c5 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/attr-dir-inherit.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/attr-dir-inherit.html
@@ -167,61 +167,61 @@ // Test dir="rtl" inherits in shadow trees test(function () { - assert_direction("dir=rtl", getNodeInTreeOfTrees("dir-rtl-inherits/target")); + assert_direction("dir=rtl", getNodeInComposedTree("dir-rtl-inherits/target")); }, "dir=rtl inherits into shadow trees"); test(function () { - assert_direction("dir=rtl", getNodeInTreeOfTrees("dir-rtl-distributed")); + assert_direction("dir=rtl", getNodeInComposedTree("dir-rtl-distributed")); }, "dir=rtl applies to the distributed content"); test(function () { - assert_direction("dir=rtl", getNodeInTreeOfTrees("dir-rtl-final")); + assert_direction("dir=rtl", getNodeInComposedTree("dir-rtl-final")); }, "dir=rtl applies to the distributed content with multiple shadow roots"); test(function () { - assert_direction("dir=rtl", getNodeInTreeOfTrees("dir-rtl-redistributed-multilevel")); + assert_direction("dir=rtl", getNodeInComposedTree("dir-rtl-redistributed-multilevel")); }, "dir=rtl applies to the distributed content (multiple levels)"); test(function () { - assert_direction("dir=rtl", getNodeInTreeOfTrees("dir-rtl-older/target")); + assert_direction("dir=rtl", getNodeInComposedTree("dir-rtl-older/target")); }, "dir=rtl applies to the content in older shadow roots"); test(function () { - assert_direction("dir=rtl", getNodeInTreeOfTrees("dir-rtl-redistributed")); + assert_direction("dir=rtl", getNodeInComposedTree("dir-rtl-redistributed")); }, "dir=rtl applies to the re-distributed content through older shadow roots"); // Test dir="auto" inherits in shadow trees // dir="auto" calculates the directionality by the first character test(function () { - assert_direction("English text", getNodeInTreeOfTrees("dir-auto-english")); - assert_direction("Hebrew text", getNodeInTreeOfTrees("dir-auto-hebrew")); - assert_direction("Hebrew text", getNodeInTreeOfTrees("dir-auto-hebrew-span")); + assert_direction("English text", getNodeInComposedTree("dir-auto-english")); + assert_direction("Hebrew text", getNodeInComposedTree("dir-auto-hebrew")); + assert_direction("Hebrew text", getNodeInComposedTree("dir-auto-hebrew-span")); }, "dir=auto the first character in the shadow trees"); test(function () { - assert_direction("English text", getNodeInTreeOfTrees("dir-auto-distributed-english")); - assert_direction("Hebrew text", getNodeInTreeOfTrees("dir-auto-distributed-hebrew")); + assert_direction("English text", getNodeInComposedTree("dir-auto-distributed-english")); + assert_direction("Hebrew text", getNodeInComposedTree("dir-auto-distributed-hebrew")); }, "dir=auto the first character in the distributed content"); test(function () { - assert_direction("English text", getNodeInTreeOfTrees("dir-auto-final-english")); - assert_direction("Hebrew text", getNodeInTreeOfTrees("dir-auto-final-hebrew")); + assert_direction("English text", getNodeInComposedTree("dir-auto-final-english")); + assert_direction("Hebrew text", getNodeInComposedTree("dir-auto-final-hebrew")); }, "dir=auto the first character in the distributed content with multiple shadow roots"); test(function () { - assert_direction("English text", getNodeInTreeOfTrees("dir-auto-multilevel-english")); - assert_direction("Hebrew text", getNodeInTreeOfTrees("dir-auto-multilevel-hebrew")); + assert_direction("English text", getNodeInComposedTree("dir-auto-multilevel-english")); + assert_direction("Hebrew text", getNodeInComposedTree("dir-auto-multilevel-hebrew")); }, "dir=auto the first character in the distributed content with multiple levels of shadow roots"); test(function () { - assert_direction("English text", getNodeInTreeOfTrees("dir-auto-older-english")); - assert_direction("Hebrew text", getNodeInTreeOfTrees("dir-auto-older-hebrew")); + assert_direction("English text", getNodeInComposedTree("dir-auto-older-english")); + assert_direction("Hebrew text", getNodeInComposedTree("dir-auto-older-hebrew")); }, "dir=auto the first character in the distributed content from older shadow roots"); test(function () { - assert_direction("English text", getNodeInTreeOfTrees("dir-auto-redistributed-english")); - assert_direction("Hebrew text", getNodeInTreeOfTrees("dir-auto-redistributed-hebrew")); + assert_direction("English text", getNodeInComposedTree("dir-auto-redistributed-english")); + assert_direction("Hebrew text", getNodeInComposedTree("dir-auto-redistributed-hebrew")); }, "dir=auto the first character in the re-distributed content through older shadow roots"); function assert_direction(description, elementToTest) {
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/attr-lang-inherit.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/attr-lang-inherit.html index f935162..02bd41c0 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/attr-lang-inherit.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/attr-lang-inherit.html
@@ -33,35 +33,35 @@ host = document.getElementById("distributed"); createShadowRootWithInnerHtml(host, style + "<div lang=fr><div>French</div><content></content></div>"); -testLangInShadow("lang of the distributed content traverses the tree of trees", +testLangInShadow("lang of the distributed content traverses the composed tree", [[host.shadowRoot.querySelector("div"), fr], [host.shadowRoot.host.firstChild, ja]]); host = document.getElementById("multiple"); createShadowRootWithInnerHtml(host, style + "<content></content>"); createShadowRootWithInnerHtml(host, style + "<div lang=fr><div>French</div><content></content></div>"); -testLangInShadow("lang of the distributed content traverses the tree of trees (multiple shadow roots)", +testLangInShadow("lang of the distributed content traverses the composed tree (multiple shadow roots)", [[host.shadowRoot.querySelector("div"), fr], [host.shadowRoot.host.firstChild, ja]]); host = document.getElementById("multilevel"); var host2ndLevel = createShadowRootWithInnerHtml(host, "<div><content></content></div>").firstChild; createShadowRootWithInnerHtml(host2ndLevel, style + "<div lang=fr><div>French</div><content></content></div>"); -testLangInShadow("lang of the distributed content traverses the tree of trees (multiple levels)", +testLangInShadow("lang of the distributed content traverses the composed tree (multiple levels)", [[host2ndLevel.shadowRoot.querySelector("div"), fr], [host.firstChild, ja]]); host = document.getElementById("older"); createShadowRootWithInnerHtml(host, style + "<div>olderShadowRoot</div>"); createShadowRootWithInnerHtml(host, style + "<div lang=fr><div>French</div><shadow></shadow></div>"); -testLangInShadow("lang of the older shadow root traverses the tree of trees", +testLangInShadow("lang of the older shadow root traverses the composed tree", [[host.shadowRoot.querySelector("div"), fr], [host.shadowRoot.olderShadowRoot.querySelector("div"), ja]]); host = document.getElementById("redistributed"); createShadowRootWithInnerHtml(host, style + "<div lang=fr><div>French</div><content></content></div>"); createShadowRootWithInnerHtml(host, style + "<shadow></shadow>"); -testLangInShadow("lang of the re-distributed content traverses the tree of trees", +testLangInShadow("lang of the re-distributed content traverses the composed tree", [[host.shadowRoot.olderShadowRoot.querySelector("div"), fr], [host.firstChild, ja]]);
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/cascade-of-treeboundary-crossing-rules-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/cascade-of-treeboundary-crossing-rules-expected.txt index 37b65d8..94f3bbf0 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/cascade-of-treeboundary-crossing-rules-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/cascade-of-treeboundary-crossing-rules-expected.txt
@@ -4,10 +4,10 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -PASS borderColorOf(getNodeInTreeOfTrees("target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/host2/target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/host2/target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/target")) is "rgb(0, 128, 0)" PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/cascade-of-treeboundary-crossing-rules.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/cascade-of-treeboundary-crossing-rules.html index 4096509..a235447 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/cascade-of-treeboundary-crossing-rules.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/cascade-of-treeboundary-crossing-rules.html
@@ -18,13 +18,13 @@ function borderColorShouldBe(selector, color) { - var text = 'borderColorOf(getNodeInTreeOfTrees("' + selector + '"))'; + var text = 'borderColorOf(getNodeInComposedTree("' + selector + '"))'; shouldBeEqualToString(text, color); } function borderColorShouldNotBe(selector, color) { - var text = 'borderColorOf(getNodeInTreeOfTrees("' + selector + '"))'; + var text = 'borderColorOf(getNodeInComposedTree("' + selector + '"))'; var unevaledString = '"' + color.replace(/\\/g, "\\\\").replace(/"/g, "\"") + '"'; shouldNotBe(text, unevaledString); }
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/closed-mode-deep-combinator-and-shadow-pseudo.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/closed-mode-deep-combinator-and-shadow-pseudo.html index 9e4808c..48b8911 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/closed-mode-deep-combinator-and-shadow-pseudo.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/closed-mode-deep-combinator-and-shadow-pseudo.html
@@ -77,28 +77,28 @@ debug('(3/6) /deep/ style on shadow tree.'); styleElement.innerHTML = ''; -var div1 = getNodeInTreeOfTrees('host_open_open/div1'); +var div1 = getNodeInComposedTree('host_open_open/div1'); div1.insertAdjacentHTML('afterbegin', '<style>div /deep/ div { background-color: blue; }</style>'); backgroundColorShouldBe('host_open_open/div1', 'rgba(0, 0, 0, 0)'); backgroundColorShouldBe('host_open_open/div1/div2', 'rgba(0, 0, 0, 0)'); backgroundColorShouldBe('host_open_open/div1b', 'rgb(0, 0, 255)'); div1.removeChild(div1.firstElementChild); -var div3 = getNodeInTreeOfTrees('host_open_closed/div3'); +var div3 = getNodeInComposedTree('host_open_closed/div3'); div3.insertAdjacentHTML('afterbegin', '<style>div /deep/ div { background-color: blue; }</style>'); backgroundColorShouldBe('host_open_closed/div3', 'rgba(0, 0, 0, 0)'); backgroundColorShouldBe('host_open_closed/div3/div4', 'rgba(0, 0, 0, 0)'); backgroundColorShouldBe('host_open_closed/div3b', 'rgb(0, 0, 255)'); div3.removeChild(div3.firstElementChild); -var div5 = getNodeInTreeOfTrees('host_closed_open/div5'); +var div5 = getNodeInComposedTree('host_closed_open/div5'); div5.insertAdjacentHTML('afterbegin', '<style>div /deep/ div { background-color: blue; }</style>'); backgroundColorShouldBe('host_closed_open/div5', 'rgba(0, 0, 0, 0)'); backgroundColorShouldBe('host_closed_open/div5/div6', 'rgba(0, 0, 0, 0)'); backgroundColorShouldBe('host_closed_open/div5b', 'rgb(0, 0, 255)'); div5.removeChild(div5.firstElementChild); -var div7 = getNodeInTreeOfTrees('host_closed_closed/div7'); +var div7 = getNodeInComposedTree('host_closed_closed/div7'); div7.insertAdjacentHTML('afterbegin', '<style>div /deep/ div { background-color: blue; }</style>'); backgroundColorShouldBe('host_closed_closed/div7', 'rgba(0, 0, 0, 0)'); backgroundColorShouldBe('host_closed_closed/div7/div8', 'rgba(0, 0, 0, 0)');
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/compare-document-position.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/compare-document-position.html index ea7e52a..3bd8b3d 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/compare-document-position.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/compare-document-position.html
@@ -29,10 +29,10 @@ a1 = document.getElementById('a1'); a2 = document.getElementById('a2'); a3 = document.getElementById('a3'); - b1 = getNodeInTreeOfTrees('a2/b1'); - b2 = getNodeInTreeOfTrees('a2/b2'); - b3 = getNodeInTreeOfTrees('a2/b3'); - c1 = getNodeInTreeOfTrees('a3/c1'); + b1 = getNodeInComposedTree('a2/b1'); + b2 = getNodeInComposedTree('a2/b2'); + b3 = getNodeInComposedTree('a2/b3'); + c1 = getNodeInComposedTree('a3/c1'); shouldBe('a1.compareDocumentPosition(a2)', 'Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_FOLLOWING'); shouldBe('a2.compareDocumentPosition(a1)', 'Node.DOCUMENT_POSITION_CONTAINS | Node.DOCUMENT_POSITION_PRECEDING');
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/compare-treescope-position.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/compare-treescope-position.html index da72905..b3f773bb 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/compare-treescope-position.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/compare-treescope-position.html
@@ -31,9 +31,9 @@ var sandbox = document.getElementById('sandbox'); document.body.offsetLeft; - sr1 = getNodeInTreeOfTrees('a2/'); - sr2 = getNodeInTreeOfTrees('a3/'); - sr3 = getNodeInTreeOfTrees('a3/c2/'); + sr1 = getNodeInComposedTree('a2/'); + sr2 = getNodeInComposedTree('a3/'); + sr3 = getNodeInComposedTree('a3/c2/'); shouldBe('internals.compareTreeScopePosition(document, sr1)', 'Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_FOLLOWING'); shouldBe('internals.compareTreeScopePosition(sr1, document)', 'Node.DOCUMENT_POSITION_CONTAINS | Node.DOCUMENT_POSITION_PRECEDING'); @@ -50,7 +50,7 @@ shouldBe('internals.compareTreeScopePosition(document, document)', '0'); shouldBe('internals.compareTreeScopePosition(sr1, sr1)', '0'); - getNodeInTreeOfTrees('a3/c1').removeChild(getNodeInTreeOfTrees('a3/c2')); + getNodeInComposedTree('a3/c1').removeChild(getNodeInComposedTree('a3/c2')); shouldBeNonZero('internals.compareTreeScopePosition(sr3, sr2) & Node.DOCUMENT_POSITION_PRECEDING || internals.compareTreeScopePosition(sr3, sr2) & Node.DOCUMENT_POSITION_FOLLOWING'); shouldBe('internals.compareTreeScopePosition(sr3, sr2) & Node.DOCUMENT_POSITION_DISCONNECTED', 'Node.DOCUMENT_POSITION_DISCONNECTED');
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/composed-shadow-tree-walker-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/composed-shadow-tree-walker-expected.txt deleted file mode 100644 index 7ff569d..0000000 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/composed-shadow-tree-walker-expected.txt +++ /dev/null
@@ -1,373 +0,0 @@ -CONSOLE WARNING: Calling Element.createShadowRoot() for an element which already hosts a shadow root is deprecated. See https://www.chromestatus.com/features/4668884095336448 for more details. -Tests for Composed Shadow DOM Tree Traversal APIs. Can only run within DRT - -On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". - - -ShadowRoot should be used. -Composed Shadow Tree: -#a - #b - -Traverse in forward. -#a -#b -Traverse in backward. -#b -#a - -A content element should select light children -Composed Shadow Tree: -#a - #b - #c - #d - -Traverse in forward. -#a -#b -#c -#d -Traverse in backward. -#d -#c -#b -#a - -Test for content element selector. -Composed Shadow Tree: -#a - #b - #d - -Traverse in forward. -#a -#b -#d -Traverse in backward. -#d -#b -#a - -Light children should be selected only at once. -Composed Shadow Tree: -#a - #b - #d - #c - #e - -Traverse in forward. -#a -#b -#d -#c -#e -Traverse in backward. -#e -#c -#d -#b -#a - -A content element can have fallback elements. -Composed Shadow Tree: -#a - #b - #f1 - #f2 - -Traverse in forward. -#a -#b -#f1 -#f2 -Traverse in backward. -#f2 -#f1 -#b -#a - -Fallback elements should not be used if a content element selects an element. -Composed Shadow Tree: -#a - #b - #c - -Traverse in forward. -#a -#b -#c -Traverse in backward. -#c -#b -#a - -Test for traversal, starting with a fallback element which is not used. -Composed Shadow Tree: -#f1 - #f2 - -Traverse in forward. -#f1 -#f2 -Traverse in backward. -#f2 -#f1 - -Next node of [#f1] is [#f2] -Next node of [#f2] is [null] - -Test for Nested ShadowRoots. -Composed Shadow Tree: -#a - #b - #c - #e - #d - #f - #h - #i - #g - -Traverse in forward. -#a -#b -#c -#e -#d -#f -#h -#i -#g -Traverse in backward. -#g -#i -#h -#f -#d -#e -#c -#b -#a - -Test for Multiple ShadowRoots. -Composed Shadow Tree: -#a - #d - #b - #f - #c - #e - -Traverse in forward. -#a -#d -#b -#f -#c -#e -Traverse in backward. -#e -#c -#f -#b -#d -#a - -Test for inactive insertion points. -Composed Shadow Tree: -#a - #b - #c - -Traverse in forward. -#a -#b -#c -Traverse in backward. -#c -#b -#a - -Test for an orphaned shadow subtree. -Composed Shadow Tree: -#a - #d - -Traverse in forward. -#a -#d -Traverse in backward. -#d -#a - -Test for traversal, starting with a node in an orphaned shadow subtree. -Composed Shadow Tree: -#b - #c - -Traverse in forward. -#b -#c -Traverse in backward. -#c -#b - -Test for a content element which does not select any nodes nor have fallback elements. -Composed Shadow Tree: -#a - #b - #c - -Traverse in forward. -#a -#b -#c -Traverse in backward. -#c -#b -#a - -Test for a nested insertion point. -Composed Shadow Tree: -#a - #b - #c - -Traverse in forward. -#a -#b -#c -Traverse in backward. -#c -#b -#a - -Test for nested insertion points. Some of them are either empty insertion points or inactive insertion points. -Composed Shadow Tree: -#a - #b - #c - #d - #e - -Traverse in forward. -#a -#b -#c -#d -#e -Traverse in backward. -#e -#d -#c -#b -#a - -Test for a re-projection. -Composed Shadow Tree: -#a - #b - #c - -Traverse in forward. -#a -#b -#c -Traverse in backward. -#c -#b -#a - -Test for a content element which is selected by another content element. -Composed Shadow Tree: -#a - #b - #most-inner-child - #host-child - -Traverse in forward. -#a -#b -#most-inner-child -#host-child -Traverse in backward. -#host-child -#most-inner-child -#b -#a - -Test for a reprojection. Content elements should be used in document order. -Composed Shadow Tree: -#a - #host-child1 - #b - #host-child2 - -Traverse in forward. -#a -#host-child1 -#b -#host-child2 -Traverse in backward. -#host-child2 -#b -#host-child1 -#a - -Test for complex re-projections. -Composed Shadow Tree: -#a - #b - #child-1 - #d - #e - #child-2 - #g - #f - #h - #c - -Traverse in forward. -#a -#b -#child-1 -#d -#e -#child-2 -#g -#f -#h -#c -Traverse in backward. -#c -#h -#f -#g -#child-2 -#e -#d -#child-1 -#b -#a - -Test for a shadow insertion point where nothing is distributed. -Composed Shadow Tree: -#a - #b - #c - -Traverse in forward. -#a -#b -#c -Traverse in backward. -#c -#b -#a - -PASS successfullyParsed is true - -TEST COMPLETE -
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/composed-shadow-tree-walker-shadow-reprojection-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/composed-shadow-tree-walker-shadow-reprojection-expected.txt deleted file mode 100644 index 3786af66..0000000 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/composed-shadow-tree-walker-shadow-reprojection-expected.txt +++ /dev/null
@@ -1,181 +0,0 @@ -CONSOLE WARNING: Calling Element.createShadowRoot() for an element which already hosts a shadow root is deprecated. See https://www.chromestatus.com/features/4668884095336448 for more details. -Tests for Composed Shadow DOM Tree Traversal APIs. Can only run within DRT - -On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". - - -Multiple shadow root without shadow element -Composed Shadow Tree: -#a - #c - -Traverse in forward. -#a -#c -Traverse in backward. -#c -#a - -Multiple shadow root with shadow element -Composed Shadow Tree: -#a - #c - #b - #e - -Traverse in forward. -#a -#c -#b -#e -Traverse in backward. -#e -#b -#c -#a - -Multiple shadow root with shadow element, case 2 -Composed Shadow Tree: -#a - #f - #c - #b - #e - #h - -Traverse in forward. -#a -#f -#c -#b -#e -#h -Traverse in backward. -#h -#e -#b -#c -#f -#a - -shadow reprojection -Composed Shadow Tree: -#a - #b - #d - #a-child - #f - -Traverse in forward. -#a -#b -#d -#a-child -#f -Traverse in backward. -#f -#a-child -#d -#b -#a - -shadow reprojection, take 2 -Composed Shadow Tree: -#a - #d - #f - #b - #h - -Traverse in forward. -#a -#d -#f -#b -#h -Traverse in backward. -#h -#b -#f -#d -#a - -Ignore shadow fallback elements -Composed Shadow Tree: -#a - #i - #k - #c - #b - #f - #g - #h - #m - -Traverse in forward. -#a -#i -#k -#c -#b -#f -#g -#h -#m -Traverse in backward. -#m -#h -#g -#f -#b -#c -#k -#i -#a - -with inactive insertion points -Composed Shadow Tree: -#a - #s - #u - #f - #b - #c - #d - #e - #l - #m - #n - #w - -Traverse in forward. -#a -#s -#u -#f -#b -#c -#d -#e -#l -#m -#n -#w -Traverse in backward. -#w -#n -#m -#l -#e -#d -#c -#b -#f -#u -#s -#a - -PASS successfullyParsed is true - -TEST COMPLETE -
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/composed-shadow-tree-walker-shadow-reprojection.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/composed-shadow-tree-walker-shadow-reprojection.html deleted file mode 100644 index 7dc7b7c..0000000 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/composed-shadow-tree-walker-shadow-reprojection.html +++ /dev/null
@@ -1,113 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<script src="../../../resources/js-test.js"></script> -<script src="resources/shadow-dom.js"></script> -</head> -<body> -<div id="console"></div> -<div id="sandbox"></div> -<script> -description("Tests for Composed Shadow DOM Tree Traversal APIs. Can only run within DRT"); - -function testComposedShadowTree(node) -{ - var sandbox = document.getElementById('sandbox'); - sandbox.innerHTML = ''; - sandbox.appendChild(node); - document.body.offsetLeft; - showComposedShadowTree(node); -} - -debug('Multiple shadow root without shadow element'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createShadowRoot(createDOM('div', {'id': 'b'})), - createShadowRoot(createDOM('div', {'id': 'c'})))); - -debug('Multiple shadow root with shadow element'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createShadowRoot(createDOM('div', {'id': 'b'})), - createShadowRoot(createDOM('div', {'id': 'c'}), - createDOM('shadow', {'id': 'd'}), - createDOM('div', {'id': 'e'})))); - -debug('Multiple shadow root with shadow element, case 2'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createShadowRoot(createDOM('div', {'id': 'b'})), - createShadowRoot(createDOM('div', {'id': 'c'}), - createDOM('shadow', {'id': 'd'}), - createDOM('div', {'id': 'e'})), - createShadowRoot(createDOM('div', {'id': 'f'}), - createDOM('shadow', {'id': 'g'}), - createDOM('div', {'id': 'h'})))); - -debug('shadow reprojection'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createDOM('div', {'id': 'a-child'}), - createShadowRoot(createDOM('div', {'id': 'b'}, - createDOM('shadow', {'id': 'c'}), - createShadowRoot(createDOM('div', {'id': 'd'}), - createDOM('content', {'id': 'e'}), - createDOM('div', {'id': 'f'})))))); - -debug('shadow reprojection, take 2'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createDOM('div', {'id': 'b'}), - createShadowRoot(createDOM('shadow', {'id': 'c'})), - createShadowRoot(createDOM('div', {'id': 'd'}, - createDOM('shadow', {'id': 'e'}), - createShadowRoot(createDOM('div', {'id': 'f'}), - createDOM('content', {'id': 'g'}), - createDOM('div', {'id': 'h'})))))); - -debug('Ignore shadow fallback elements'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createDOM('div', {'id': 'b'}), - createShadowRoot(createDOM('div', {'id': 'c'}), - createDOM('shadow', {'id': 'd'}, - createDOM('div', {'id': 'e'})), - createDOM('shadow', {'id': 'f'}, - createDOM('div', {'id': 'g'})), - createDOM('div', {'id': 'h'})), - createShadowRoot(createDOM('div', {'id': 'i'}, - createDOM('shadow', {'id': 'j'}), - createShadowRoot(createDOM('div', {'id': 'k'}), - createDOM('content', {'id': 'l'}), - createDOM('div', {'id': 'm'})))))); - -debug('with inactive insertion points') -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createDOM('content', {'id': 'b'}, - createDOM('div', {'id': 'c'})), - createDOM('shadow', {'id': 'd'}, - createDOM('div', {'id': 'e'})), - createShadowRoot(createDOM('div', {'id': 'f'}), - createDOM('content', {'id': 'g'}, - createDOM('content', {'id': 'h'}), - createDOM('shadow', {'id': 'i'}), - createDOM('div', {'id': 'j'})), - createDOM('content', {'id': 'k'}, - createDOM('content', {'id': 'l'}), - createDOM('shadow', {'id': 'm'}), - createDOM('div', {'id': 'n'})), - createDOM('shadow', {'id': 'o'}, - createDOM('content', {'id': 'p'}), - createDOM('shadow', {'id': 'q'}), - createDOM('div', {'id': 'r'}))), - createShadowRoot(createDOM('div', {'id': 's'}, - createDOM('shadow', {'id': 't'}), - createShadowRoot(createDOM('div', {'id': 'u'}), - createDOM('content', {'id': 'v'}), - createDOM('div', {'id': 'w'})))))); - - -</script> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/composed-shadow-tree-walker.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/composed-shadow-tree-walker.html deleted file mode 100644 index b989048..0000000 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/composed-shadow-tree-walker.html +++ /dev/null
@@ -1,227 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<script src="../../../resources/js-test.js"></script> -<script src="resources/shadow-dom.js"></script> -</head> -<body> -<div id="console"></div> -<div id="sandbox"></div> -<script> -description("Tests for Composed Shadow DOM Tree Traversal APIs. Can only run within DRT"); - -function testComposedShadowTree(node) -{ - var sandbox = document.getElementById('sandbox'); - sandbox.innerHTML = ''; - sandbox.appendChild(node); - document.body.offsetLeft; - showComposedShadowTree(node); -} - -debug('ShadowRoot should be used.'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createShadowRoot(createDOM('div', {'id': 'b'})), - createDOM('div', {'id': 'c'}))); - -debug('A content element should select light children'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createShadowRoot(createDOM('div', {'id': 'b'}), - createDOM('content')), - createDOM('div', {'id': 'c'}), - createDOM('div', {'id': 'd'}))); - -debug('Test for content element selector.'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createShadowRoot(createDOM('div', {'id': 'b'}), - createDOM('content', {'select': '#d'})), - createDOM('div', {'id': 'c'}), - createDOM('div', {'id': 'd'}), - createDOM('div', {'id': 'e'}))); - -debug('Light children should be selected only at once.'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createShadowRoot(createDOM('div', {'id': 'b'}), - createDOM('content', {'select': '#d'}), - createDOM('content')), - createDOM('div', {'id': 'c'}), - createDOM('div', {'id': 'd'}), - createDOM('div', {'id': 'e'}))); - -debug('A content element can have fallback elements.'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createShadowRoot(createDOM('div', {'id': 'b'}), - createDOM('content', {'select': '#z'}, - createDOM('div', {'id': 'f1'}), - createDOM('div', {'id': 'f2'}))), - createDOM('div', {'id': 'c'}))); - -debug('Fallback elements should not be used if a content element selects an element.'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createShadowRoot(createDOM('div', {'id': 'b'}), - createDOM('content', {'select': '#c'}, - createDOM('div', {'id': 'f1'}, - createDOM('div', {'id': 'f2'})))), - createDOM('div', {'id': 'c'}))); - -debug('Test for traversal, starting with a fallback element which is not used.'); -showComposedShadowTree(getNodeInTreeOfTrees('a/f1')); -showNextNode(getNodeInTreeOfTrees('a/f1')); -showNextNode(getNodeInTreeOfTrees('a/f2')); -debug(''); - -debug('Test for Nested ShadowRoots.'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createShadowRoot(createDOM('div', {'id': 'b'}, - createShadowRoot(createDOM('div', {'id': 'c'}), - createDOM('content'), - createDOM('div', {'id': 'd'})), - createDOM('div', {'id': 'e'})), - createDOM('div', {'id': 'f'}), - createDOM('content'), - createDOM('div', {'id': 'g'})), - createDOM('div', {'id': 'h'}), - createDOM('div', {'id': 'i'}))); - -debug('Test for Multiple ShadowRoots.'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createShadowRoot(createDOM('div', {'id': 'b'}), - createDOM('content'), - createDOM('div', {'id': 'c'})), - createShadowRoot(createDOM('div', {'id': 'd'}), - createDOM('shadow', {}), - createDOM('div', {'id': 'e'})), - createDOM('div', {'id': 'f'}))); - -debug('Test for inactive insertion points.'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createDOM('content', {'id': 'b'}, - createDOM('content', {'id': 'c'})))); - -debug('Test for an orphaned shadow subtree.'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createShadowRoot( - createDOM('div', {'id': 'b'}, - createDOM('div', {'id': 'c'}))), - createShadowRoot( - createDOM('div', {'id': 'd'})))); - -debug('Test for traversal, starting with a node in an orphaned shadow subtree.'); -showComposedShadowTree(getNodeInTreeOfTrees('a/b')); - -debug('Test for a content element which does not select any nodes nor have fallback elements.'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createShadowRoot(createDOM('content', {'select': '#none'}), - createDOM('div', {'id': 'b'}), - createDOM('content', {'select': '#none'}), - createDOM('div', {'id': 'c'}), - createDOM('content', {'select': '#none'})))); - -debug('Test for a nested insertion point.'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createShadowRoot(createDOM('div', {'id': 'b'}, - createShadowRoot(createDOM('content', {})), - createDOM('content', {}))), - createDOM('div', {'id': 'c'}))); - -debug('Test for nested insertion points. Some of them are either empty insertion points or inactive insertion points.'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createShadowRoot(createDOM('content', {'select': '#none'}), - createDOM('div', {'id': 'b'}, - createShadowRoot(createDOM('content', {'select': '.select-1'}), - createDOM('div', {'id': 'c'}), - createDOM('content', {'select': '.select-2'})), - createDOM('content', {'class': 'select-1', 'select': '.select-4'}), - createDOM('content', {'class': 'select-2', 'select': '#none'}), - createDOM('div', {'id': 'd', 'class': 'select-2'}), - createDOM('content', {'class': 'select-2', 'select': '#none'}), - createDOM('div', {'id': 'e', 'class': 'select-2'}), - createDOM('content', {'class': 'select-2', 'select': '#none'}))), - createDOM('content', {'id': 'inactive-insertion-point', 'class': 'select-4'}), - createDOM('div', {'id': 'should-not-be-selected'}), - createDOM('div', {'id': 'f', 'class': 'select-4'}))); - -debug('Test for a re-projection.'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createShadowRoot( - createDOM('div', {'id': 'b'}, - createShadowRoot(createDOM('content', {'select': '#c'})), - createDOM('content', {'select': '#c'}))), - createDOM('div', {'id': 'c'}))); - -debug('Test for a content element which is selected by another content element.'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createShadowRoot( - createDOM('div', {'id': 'b'}, - createShadowRoot(createDOM('content', {'select': '#content'}), - createDOM('div', {'id': 'most-inner-child'}), - createDOM('content', {'select': '#host-child'})), - createDOM('content', {'id': 'content', 'select': '#host-child'}, - createDOM('div', {'id': 'should-not-be-used'})), - createDOM('div', {'id': 'inner-child', 'class': 'foo'}))), - createDOM('div', {'id': 'host-child'}))); - -debug('Test for a reprojection. Content elements should be used in document order.'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createShadowRoot( - createDOM('content', {'select': '#host-child1'}), - createDOM('div', {'id': 'b'}, - createShadowRoot(createDOM('content', {'select': '.child'})), - createDOM('content', {'select': '.child'}))), - createDOM('div', {'id': 'host-child1', 'class': 'child'}), - createDOM('div', {'id': 'host-child2', 'class': 'child'}))); - -debug('Test for complex re-projections.'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createShadowRoot( - createDOM('div', {'id': 'b'}, - createShadowRoot(createDOM('content', {'select': '.foo'}), - createDOM('div', {'id': 'c'})), - // Select #child-1 - createDOM('content', {'select': '#child-1'}, - createDOM('div', {'class': 'should-not-be-used'}), - // Should not select any nodes since it's inactive. - createDOM('content', {'class': 'should-be-inactive', 'select': '.foo'})), - createDOM('div', {'id': 'd', 'class': 'foo'}, - createShadowRoot(createDOM('div', {'id': 'e'}), - // Should select #child-2 and #g. - createDOM('content', {'select': '.foo'}), - createDOM('div', {'id': 'f'})), - // Select #child-2 - createDOM('content', {'select': '#child-2'}), - createDOM('div', {'id': 'g', 'class': 'foo'})), - createDOM('div', {'class': 'should-not-be-selected'}), - createDOM('div', {'id': 'h', 'class': 'foo'}))), - createDOM('div', {'id': 'child-1', 'class': 'foo'}), - createDOM('div', {'id': 'not-selected', 'class': 'foo'}), - createDOM('div', {'id': 'child-2', 'class': 'foo'}))); - -debug('Test for a shadow insertion point where nothing is distributed.'); -testComposedShadowTree( - createDOM('div', {'id': 'a'}, - createShadowRoot(), - createShadowRoot( - createDOM('div', {'id': 'b'}), - createDOM('shadow', {'id': 'shadow'}, - createDOM('div', {'id': 'should-not-be-used'})), - createDOM('div', {'id': 'c'})))); -</script> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/contains-with-shadow-dom-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/contains-with-shadow-dom-expected.txt index f281ead..45946916 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/contains-with-shadow-dom-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/contains-with-shadow-dom-expected.txt
@@ -3,22 +3,22 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -PASS document.contains(getNodeInTreeOfTrees("shadowHostA/")) is false -PASS getNodeInTreeOfTrees("shadowHostA/").contains(document) is false -PASS document.contains(getNodeInTreeOfTrees("shadowHostA/divA")) is false -PASS getNodeInTreeOfTrees("shadowHostA/divA").contains(document) is false -PASS getNodeInTreeOfTrees("shadowHostA/").contains(getNodeInTreeOfTrees("shadowHostA/divA")) is true -PASS getNodeInTreeOfTrees("shadowHostA/divA").contains(getNodeInTreeOfTrees("shadowHostA/")) is false -PASS getNodeInTreeOfTrees("shadowHostA/").contains(getNodeInTreeOfTrees("shadowHostA/shadowHostB/")) is false -PASS getNodeInTreeOfTrees("shadowHostA/shadowHostB/").contains(getNodeInTreeOfTrees("shadowHostA/")) is false -PASS getNodeInTreeOfTrees("shadowHostA/divA").contains(getNodeInTreeOfTrees("shadowHostA/shadowHostB/divB")) is false -PASS getNodeInTreeOfTrees("shadowHostA/shadowHostB/divB").contains(getNodeInTreeOfTrees("shadowHostA/divA")) is false -PASS getNodeInTreeOfTrees("shadowHostA/shadowHostB/").contains(getNodeInTreeOfTrees("shadowHostA/shadowHostC/")) is false -PASS getNodeInTreeOfTrees("shadowHostA/shadowHostC/").contains(getNodeInTreeOfTrees("shadowHostA/shadowHostB/")) is false -PASS getNodeInTreeOfTrees("shadowHostA/shadowHostB/divB").contains(getNodeInTreeOfTrees("shadowHostA/shadowHostC/divC")) is false -PASS getNodeInTreeOfTrees("shadowHostA/shadowHostC/divC").contains(getNodeInTreeOfTrees("shadowHostA/shadowHostB/divB")) is false -PASS getNodeInTreeOfTrees("shadowHostA/shadowHostB").contains(getNodeInTreeOfTrees("shadowHostA/shadowHostB")) is true -PASS getNodeInTreeOfTrees("shadowHostA/shadowHostB/").contains(getNodeInTreeOfTrees("shadowHostA/shadowHostB/")) is true +PASS document.contains(getNodeInComposedTree("shadowHostA/")) is false +PASS getNodeInComposedTree("shadowHostA/").contains(document) is false +PASS document.contains(getNodeInComposedTree("shadowHostA/divA")) is false +PASS getNodeInComposedTree("shadowHostA/divA").contains(document) is false +PASS getNodeInComposedTree("shadowHostA/").contains(getNodeInComposedTree("shadowHostA/divA")) is true +PASS getNodeInComposedTree("shadowHostA/divA").contains(getNodeInComposedTree("shadowHostA/")) is false +PASS getNodeInComposedTree("shadowHostA/").contains(getNodeInComposedTree("shadowHostA/shadowHostB/")) is false +PASS getNodeInComposedTree("shadowHostA/shadowHostB/").contains(getNodeInComposedTree("shadowHostA/")) is false +PASS getNodeInComposedTree("shadowHostA/divA").contains(getNodeInComposedTree("shadowHostA/shadowHostB/divB")) is false +PASS getNodeInComposedTree("shadowHostA/shadowHostB/divB").contains(getNodeInComposedTree("shadowHostA/divA")) is false +PASS getNodeInComposedTree("shadowHostA/shadowHostB/").contains(getNodeInComposedTree("shadowHostA/shadowHostC/")) is false +PASS getNodeInComposedTree("shadowHostA/shadowHostC/").contains(getNodeInComposedTree("shadowHostA/shadowHostB/")) is false +PASS getNodeInComposedTree("shadowHostA/shadowHostB/divB").contains(getNodeInComposedTree("shadowHostA/shadowHostC/divC")) is false +PASS getNodeInComposedTree("shadowHostA/shadowHostC/divC").contains(getNodeInComposedTree("shadowHostA/shadowHostB/divB")) is false +PASS getNodeInComposedTree("shadowHostA/shadowHostB").contains(getNodeInComposedTree("shadowHostA/shadowHostB")) is true +PASS getNodeInComposedTree("shadowHostA/shadowHostB/").contains(getNodeInComposedTree("shadowHostA/shadowHostB/")) is true PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/contains-with-shadow-dom.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/contains-with-shadow-dom.html index 57730c5..d39ea196 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/contains-with-shadow-dom.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/contains-with-shadow-dom.html
@@ -22,29 +22,29 @@ // Comparing a document with a node in a shadow tree. -shouldBeFalse('document.contains(getNodeInTreeOfTrees("shadowHostA/"))'); -shouldBeFalse('getNodeInTreeOfTrees("shadowHostA/").contains(document)'); -shouldBeFalse('document.contains(getNodeInTreeOfTrees("shadowHostA/divA"))'); -shouldBeFalse('getNodeInTreeOfTrees("shadowHostA/divA").contains(document)'); +shouldBeFalse('document.contains(getNodeInComposedTree("shadowHostA/"))'); +shouldBeFalse('getNodeInComposedTree("shadowHostA/").contains(document)'); +shouldBeFalse('document.contains(getNodeInComposedTree("shadowHostA/divA"))'); +shouldBeFalse('getNodeInComposedTree("shadowHostA/divA").contains(document)'); // Comparing a node in document with a node in a shadow tree. -shouldBeTrue('getNodeInTreeOfTrees("shadowHostA/").contains(getNodeInTreeOfTrees("shadowHostA/divA"))'); -shouldBeFalse('getNodeInTreeOfTrees("shadowHostA/divA").contains(getNodeInTreeOfTrees("shadowHostA/"))'); +shouldBeTrue('getNodeInComposedTree("shadowHostA/").contains(getNodeInComposedTree("shadowHostA/divA"))'); +shouldBeFalse('getNodeInComposedTree("shadowHostA/divA").contains(getNodeInComposedTree("shadowHostA/"))'); // Comparing a node in a shadow tree with a node in a shadow tree enclosing the first tree. -shouldBeFalse('getNodeInTreeOfTrees("shadowHostA/").contains(getNodeInTreeOfTrees("shadowHostA/shadowHostB/"))'); -shouldBeFalse('getNodeInTreeOfTrees("shadowHostA/shadowHostB/").contains(getNodeInTreeOfTrees("shadowHostA/"))'); -shouldBeFalse('getNodeInTreeOfTrees("shadowHostA/divA").contains(getNodeInTreeOfTrees("shadowHostA/shadowHostB/divB"))'); -shouldBeFalse('getNodeInTreeOfTrees("shadowHostA/shadowHostB/divB").contains(getNodeInTreeOfTrees("shadowHostA/divA"))'); +shouldBeFalse('getNodeInComposedTree("shadowHostA/").contains(getNodeInComposedTree("shadowHostA/shadowHostB/"))'); +shouldBeFalse('getNodeInComposedTree("shadowHostA/shadowHostB/").contains(getNodeInComposedTree("shadowHostA/"))'); +shouldBeFalse('getNodeInComposedTree("shadowHostA/divA").contains(getNodeInComposedTree("shadowHostA/shadowHostB/divB"))'); +shouldBeFalse('getNodeInComposedTree("shadowHostA/shadowHostB/divB").contains(getNodeInComposedTree("shadowHostA/divA"))'); // Comparing a node in a shadow tree with a node in a sibling shadow tree. -shouldBeFalse('getNodeInTreeOfTrees("shadowHostA/shadowHostB/").contains(getNodeInTreeOfTrees("shadowHostA/shadowHostC/"))'); -shouldBeFalse('getNodeInTreeOfTrees("shadowHostA/shadowHostC/").contains(getNodeInTreeOfTrees("shadowHostA/shadowHostB/"))'); -shouldBeFalse('getNodeInTreeOfTrees("shadowHostA/shadowHostB/divB").contains(getNodeInTreeOfTrees("shadowHostA/shadowHostC/divC"))'); -shouldBeFalse('getNodeInTreeOfTrees("shadowHostA/shadowHostC/divC").contains(getNodeInTreeOfTrees("shadowHostA/shadowHostB/divB"))'); +shouldBeFalse('getNodeInComposedTree("shadowHostA/shadowHostB/").contains(getNodeInComposedTree("shadowHostA/shadowHostC/"))'); +shouldBeFalse('getNodeInComposedTree("shadowHostA/shadowHostC/").contains(getNodeInComposedTree("shadowHostA/shadowHostB/"))'); +shouldBeFalse('getNodeInComposedTree("shadowHostA/shadowHostB/divB").contains(getNodeInComposedTree("shadowHostA/shadowHostC/divC"))'); +shouldBeFalse('getNodeInComposedTree("shadowHostA/shadowHostC/divC").contains(getNodeInComposedTree("shadowHostA/shadowHostB/divB"))'); // Self-comparing a node in a shadow tree. -shouldBeTrue('getNodeInTreeOfTrees("shadowHostA/shadowHostB").contains(getNodeInTreeOfTrees("shadowHostA/shadowHostB"))'); -shouldBeTrue('getNodeInTreeOfTrees("shadowHostA/shadowHostB/").contains(getNodeInTreeOfTrees("shadowHostA/shadowHostB/"))'); +shouldBeTrue('getNodeInComposedTree("shadowHostA/shadowHostB").contains(getNodeInComposedTree("shadowHostA/shadowHostB"))'); +shouldBeTrue('getNodeInComposedTree("shadowHostA/shadowHostB/").contains(getNodeInComposedTree("shadowHostA/shadowHostB/"))'); </script> </body>
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/content-element-distributed-nodes.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/content-element-distributed-nodes.html index 7f94bb4..a7e5456 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/content-element-distributed-nodes.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/content-element-distributed-nodes.html
@@ -24,13 +24,13 @@ createDOM('div', {'id': 'child-2'})))); -var content1 = getNodeInTreeOfTrees('host-1/content-1'); -var content2 = getNodeInTreeOfTrees('host-2/content-2'); -var content3 = getNodeInTreeOfTrees('host-2/host-3/content-3'); +var content1 = getNodeInComposedTree('host-1/content-1'); +var content2 = getNodeInComposedTree('host-2/content-2'); +var content3 = getNodeInComposedTree('host-2/host-3/content-3'); -var child1 = getNodeInTreeOfTrees('child-1'); -var child2 = getNodeInTreeOfTrees('child-2'); -var child3 = getNodeInTreeOfTrees('host-2/child-3'); +var child1 = getNodeInComposedTree('child-1'); +var child2 = getNodeInComposedTree('child-2'); +var child3 = getNodeInComposedTree('host-2/child-3'); var distributedNodes1 = content1.getDistributedNodes(); var distributedNodes2 = content2.getDistributedNodes();
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/content-pseudo-element-overridden-2-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/content-pseudo-element-overridden-2-expected.txt index e1b0e6a..0efd555 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/content-pseudo-element-overridden-2-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/content-pseudo-element-overridden-2-expected.txt
@@ -3,7 +3,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -PASS window.getComputedStyle(getNodeInTreeOfTrees("hostChild")).color is "rgb(0, 128, 0)" +PASS window.getComputedStyle(getNodeInComposedTree("hostChild")).color is "rgb(0, 128, 0)" PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/content-pseudo-element-overridden-2.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/content-pseudo-element-overridden-2.html index 57a1b3d..18ca2dec 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/content-pseudo-element-overridden-2.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/content-pseudo-element-overridden-2.html
@@ -24,7 +24,7 @@ document.createTextNode(':host { color: red; }')), createDOM('span', {}, document.createTextNode('Hello')))))); -shouldBe('window.getComputedStyle(getNodeInTreeOfTrees("hostChild")).color', '"rgb(0, 128, 0)"'); +shouldBe('window.getComputedStyle(getNodeInComposedTree("hostChild")).color', '"rgb(0, 128, 0)"'); sandbox.innerHTML = ''; </script>
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host1.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host1.html index 0904a4d4..8e7b219 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host1.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host1.html
@@ -34,11 +34,11 @@ backgroundColorShouldBe('shadow-host', 'rgb(255, 255, 255)'); - var host = getNodeInTreeOfTrees('shadow-host'); - var innerInput = getNodeInTreeOfTrees('shadow-host/inner-input'); - var lightdomInput = getNodeInTreeOfTrees('lightdom-input'); - var outerInput1 = getNodeInTreeOfTrees('outer-input1'); - var outerInput2 = getNodeInTreeOfTrees('outer-input2'); + var host = getNodeInComposedTree('shadow-host'); + var innerInput = getNodeInComposedTree('shadow-host/inner-input'); + var lightdomInput = getNodeInComposedTree('lightdom-input'); + var outerInput1 = getNodeInComposedTree('outer-input1'); + var outerInput2 = getNodeInComposedTree('outer-input2'); debug('Test shadow host without tabindex'); outerInput1.focus();
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host2.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host2.html index e928ab5..827fd07 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host2.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host2.html
@@ -36,7 +36,7 @@ var host = document.querySelector('#shadow-host'); var lightdomInput = document.querySelector('#lightdom-input'); - var innerInput = getNodeInTreeOfTrees('shadow-host/inner-input'); + var innerInput = getNodeInComposedTree('shadow-host/inner-input'); var outerInput = document.querySelector('#outer-input'); outerInput.focus(); @@ -76,7 +76,7 @@ var host = document.querySelector('#shadow-host'); var lightdomInput = document.querySelector('#lightdom-input'); - var innerInput = getNodeInTreeOfTrees('shadow-host/inner-input'); + var innerInput = getNodeInComposedTree('shadow-host/inner-input'); var outerInput = document.querySelector('#outer-input'); outerInput.focus();
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host3-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host3-expected.txt index a792939..16491cdd 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host3-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host3-expected.txt
@@ -1,4 +1,4 @@ -testing shadow tree of trees +testing shadow composed tree (1/4) both shadow hosts' delegateFocus are false PASS backgroundColorOf('shadow-host') is "rgb(255, 255, 255)" PASS backgroundColorOf('shadow-host/inner-shadow-host') is "rgb(255, 255, 0)"
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host3.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host3.html index b20847b..7b37d1c 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host3.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host3.html
@@ -14,7 +14,7 @@ <div id="sandbox"></div> </body> <script> -function buildShadowTreeOfTrees(delegatesFocus1, delegatesFocus2) { +function buildShadowComposedTree(delegatesFocus1, delegatesFocus2) { var sandbox = document.querySelector('#sandbox'); sandbox.innerHTML = ''; sandbox.appendChild( @@ -37,19 +37,19 @@ sandbox.offsetTop; } -function testShadowTreeOfTrees() { - debug('testing shadow tree of trees'); +function testShadowComposedTree() { + debug('testing shadow composed tree'); debug('(1/4) both shadow hosts\' delegateFocus are false'); - buildShadowTreeOfTrees(false, false); + buildShadowComposedTree(false, false); backgroundColorShouldBe('shadow-host', 'rgb(255, 255, 255)'); backgroundColorShouldBe('shadow-host/inner-shadow-host', 'rgb(255, 255, 0)'); - var host = getNodeInTreeOfTrees('shadow-host'); - var innerHost = getNodeInTreeOfTrees('shadow-host/inner-shadow-host'); - var input = getNodeInTreeOfTrees('shadow-host/inner-input'); - var input2 = getNodeInTreeOfTrees('shadow-host/inner-shadow-host/inner-input2'); + var host = getNodeInComposedTree('shadow-host'); + var innerHost = getNodeInComposedTree('shadow-host/inner-shadow-host'); + var input = getNodeInComposedTree('shadow-host/inner-input'); + var input2 = getNodeInComposedTree('shadow-host/inner-shadow-host/inner-input2'); var outerInput = document.querySelector('#outer-input'); input.focus() @@ -70,12 +70,12 @@ debug('(2/4) top-level shadow host\'s delegateFocus is true'); - buildShadowTreeOfTrees(true, false); + buildShadowComposedTree(true, false); - var host = getNodeInTreeOfTrees('shadow-host'); - var innerHost = getNodeInTreeOfTrees('shadow-host/inner-shadow-host'); - var input = getNodeInTreeOfTrees('shadow-host/inner-input'); - var input2 = getNodeInTreeOfTrees('shadow-host/inner-shadow-host/inner-input2'); + var host = getNodeInComposedTree('shadow-host'); + var innerHost = getNodeInComposedTree('shadow-host/inner-shadow-host'); + var input = getNodeInComposedTree('shadow-host/inner-input'); + var input2 = getNodeInComposedTree('shadow-host/inner-shadow-host/inner-input2'); var outerInput = document.querySelector('#outer-input'); input.focus() @@ -96,12 +96,12 @@ debug('(3/4) lower-level shadow host\'s delegateFocus is true'); - buildShadowTreeOfTrees(false, true); + buildShadowComposedTree(false, true); - var host = getNodeInTreeOfTrees('shadow-host'); - var innerHost = getNodeInTreeOfTrees('shadow-host/inner-shadow-host'); - var input = getNodeInTreeOfTrees('shadow-host/inner-input'); - var input2 = getNodeInTreeOfTrees('shadow-host/inner-shadow-host/inner-input2'); + var host = getNodeInComposedTree('shadow-host'); + var innerHost = getNodeInComposedTree('shadow-host/inner-shadow-host'); + var input = getNodeInComposedTree('shadow-host/inner-input'); + var input2 = getNodeInComposedTree('shadow-host/inner-shadow-host/inner-input2'); var outerInput = document.querySelector('#outer-input'); input.focus() @@ -122,12 +122,12 @@ debug('(4/4) both shadow hosts\' delegateFocus are true'); - buildShadowTreeOfTrees(true, true); + buildShadowComposedTree(true, true); - var host = getNodeInTreeOfTrees('shadow-host'); - var innerHost = getNodeInTreeOfTrees('shadow-host/inner-shadow-host'); - var input = getNodeInTreeOfTrees('shadow-host/inner-input'); - var input2 = getNodeInTreeOfTrees('shadow-host/inner-shadow-host/inner-input2'); + var host = getNodeInComposedTree('shadow-host'); + var innerHost = getNodeInComposedTree('shadow-host/inner-shadow-host'); + var input = getNodeInComposedTree('shadow-host/inner-input'); + var input2 = getNodeInComposedTree('shadow-host/inner-shadow-host/inner-input2'); var outerInput = document.querySelector('#outer-input'); input.focus() @@ -147,5 +147,5 @@ backgroundColorShouldBe('shadow-host/inner-shadow-host', 'rgb(0, 0, 255)'); } -testShadowTreeOfTrees(); +testShadowComposedTree(); </script>
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host4.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host4.html index 83c3b01..8a43655 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host4.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host4.html
@@ -40,11 +40,11 @@ backgroundColorShouldBe('shadow-host', 'rgb(255, 255, 255)'); - var host = getNodeInTreeOfTrees('shadow-host'); - var outerInput = getNodeInTreeOfTrees('outer-input'); - var lightInput = getNodeInTreeOfTrees('light-input'); - var olderInput = getNodeInTreeOfTrees('shadow-host/older-input'); - var youngerInput = getNodeInTreeOfTrees('shadow-host//younger-input'); + var host = getNodeInComposedTree('shadow-host'); + var outerInput = getNodeInComposedTree('outer-input'); + var lightInput = getNodeInComposedTree('light-input'); + var olderInput = getNodeInComposedTree('shadow-host/older-input'); + var youngerInput = getNodeInComposedTree('shadow-host//younger-input'); debug('(1/3) shadow host without tabindex'); outerInput.focus();
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host5.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host5.html index 23194e38..227a09d 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host5.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/css-focus-pseudo-match-shadow-host5.html
@@ -44,10 +44,10 @@ backgroundColorShouldBe('shadow-host', 'rgb(255, 255, 255)'); - var outerInput = getNodeInTreeOfTrees('outer-input'); - var input1 = getNodeInTreeOfTrees('input1'); - var input2 = getNodeInTreeOfTrees('shadow-host/input2'); - var input3 = getNodeInTreeOfTrees('shadow-host/inner-shadow-host/input3'); + var outerInput = getNodeInComposedTree('outer-input'); + var input1 = getNodeInComposedTree('input1'); + var input2 = getNodeInComposedTree('shadow-host/input2'); + var input3 = getNodeInComposedTree('shadow-host/inner-shadow-host/input3'); debug('#input1, #input2 are (re)distributed in the same treescope as #input3, but :focus on shadow host only matches when a focused element is under its shadow tree.'); @@ -71,10 +71,10 @@ debug('(2/4) top shadow delegates, but inner shadow does not.'); buildNestedDistributionTree(true, false); - var outerInput = getNodeInTreeOfTrees('outer-input'); - var input1 = getNodeInTreeOfTrees('input1'); - var input2 = getNodeInTreeOfTrees('shadow-host/input2'); - var input3 = getNodeInTreeOfTrees('shadow-host/inner-shadow-host/input3'); + var outerInput = getNodeInComposedTree('outer-input'); + var input1 = getNodeInComposedTree('input1'); + var input2 = getNodeInComposedTree('shadow-host/input2'); + var input3 = getNodeInComposedTree('shadow-host/inner-shadow-host/input3'); outerInput.focus(); backgroundColorShouldBe('shadow-host', 'rgb(255, 255, 255)'); @@ -95,10 +95,10 @@ debug('(3/4) top shadow does not delegate, but inner shadow does.'); buildNestedDistributionTree(false, true); - var outerInput = getNodeInTreeOfTrees('outer-input'); - var input1 = getNodeInTreeOfTrees('input1'); - var input2 = getNodeInTreeOfTrees('shadow-host/input2'); - var input3 = getNodeInTreeOfTrees('shadow-host/inner-shadow-host/input3'); + var outerInput = getNodeInComposedTree('outer-input'); + var input1 = getNodeInComposedTree('input1'); + var input2 = getNodeInComposedTree('shadow-host/input2'); + var input3 = getNodeInComposedTree('shadow-host/inner-shadow-host/input3'); outerInput.focus(); backgroundColorShouldBe('shadow-host', 'rgb(255, 255, 255)'); @@ -119,10 +119,10 @@ debug('(4/4) both shadow hosts delagate focus.'); buildNestedDistributionTree(true, true); - var outerInput = getNodeInTreeOfTrees('outer-input'); - var input1 = getNodeInTreeOfTrees('input1'); - var input2 = getNodeInTreeOfTrees('shadow-host/input2'); - var input3 = getNodeInTreeOfTrees('shadow-host/inner-shadow-host/input3'); + var outerInput = getNodeInComposedTree('outer-input'); + var input1 = getNodeInComposedTree('input1'); + var input2 = getNodeInComposedTree('shadow-host/input2'); + var input3 = getNodeInComposedTree('shadow-host/inner-shadow-host/input3'); outerInput.focus(); backgroundColorShouldBe('shadow-host', 'rgb(255, 255, 255)');
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/distributed-node-focus.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/distributed-node-focus.html index aa00346..ed04f0f 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/distributed-node-focus.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/distributed-node-focus.html
@@ -25,7 +25,7 @@ // Focus doesn't change because non-distributed-node can't get focused. shouldBeEqualToString('document.activeElement.id', 'input1'); -var shadowRoot = getNodeInTreeOfTrees('host/'); +var shadowRoot = getNodeInComposedTree('host/'); shouldBeNull('shadowRoot.activeElement'); @@ -43,10 +43,10 @@ distributedNode.focus(); shouldBeEqualToString('document.activeElement.id', 'distributed-node'); -shadowRoot = getNodeInTreeOfTrees("host/"); +shadowRoot = getNodeInComposedTree("host/"); shouldBeEqualToString('shadowRoot.activeElement.id', 'distributed-node'); -var contentParent = getNodeInTreeOfTrees('host/content-parent'); +var contentParent = getNodeInComposedTree('host/content-parent'); contentParent.parentNode.removeChild(contentParent); // This is a similar case where 'dispaly: none' is set to the focused element. We can't guarantee this case. // The current implementation leaves the distributed node as document.activeElement.
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-closed-shadowroot.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-closed-shadowroot.html index bacb88fc..870d5037 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-closed-shadowroot.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-closed-shadowroot.html
@@ -29,8 +29,8 @@ prepareTree(); -var targetOpen = getNodeInTreeOfTrees('host_open/inner_open/target_open'); -var targetClosed = getNodeInTreeOfTrees('host_closed/inner_closed/target_closed'); +var targetOpen = getNodeInComposedTree('host_open/inner_open/target_open'); +var targetClosed = getNodeInComposedTree('host_closed/inner_closed/target_closed'); targetOpen.addEventListener('click', clickHandler, false); targetClosed.addEventListener('click', clickHandler, false);
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-closed-shadowroot2.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-closed-shadowroot2.html index 2fdba67..30297ff 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-closed-shadowroot2.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-closed-shadowroot2.html
@@ -25,7 +25,7 @@ prepareTree(); -var target = getNodeInTreeOfTrees('host_open/div2_closed/div3_open/target'); +var target = getNodeInComposedTree('host_open/div2_closed/div3_open/target'); debug('The full event path should be (length=12):\n' + 'div#target, #shadow-root (open), div#div3_open, #shadow-root (closed),\n' + @@ -37,7 +37,7 @@ 'will be trimmed (length=8).\n'); ['host_closed', 'host_open', 'host_open/div2_closed', 'host_open/div2_closed/div3_open', 'host_open/div2_closed/div3_open/target'].forEach(function(nodePath) { - var node = getNodeInTreeOfTrees(nodePath); + var node = getNodeInComposedTree(nodePath); var eventPath; var clickHandler = function(e) { eventPath = e.path; };
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-empty-shadow-element.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-empty-shadow-element.html index 36c4ebd..c616172 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-empty-shadow-element.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-empty-shadow-element.html
@@ -25,7 +25,7 @@ createDOM('shadow', {'id': 'K'})))); ['A', 'B', 'C', 'A/', 'A/E', 'A/F', 'A//', 'A//H', 'A//I', 'A///', 'A///K'].forEach(function(path) { - getNodeInTreeOfTrees(path).addEventListener('click', function(event) { + getNodeInComposedTree(path).addEventListener('click', function(event) { debug('\nevent.path on node ' + dumpNode(event.currentTarget)); debug(dumpNodeList(event.path)); });
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-for-user-agent-shadow-tree.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-for-user-agent-shadow-tree.html index af052cf..652d784 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-for-user-agent-shadow-tree.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-for-user-agent-shadow-tree.html
@@ -17,7 +17,7 @@ <pre id="console"></pre> <script> ['sandbox', 'details', 'details-child', 'summary', 'summary-child'].forEach(function(path) { - getNodeInTreeOfTrees(path).addEventListener('click', function(event) { + getNodeInComposedTree(path).addEventListener('click', function(event) { debug('\nevent.path on node ' + dumpNode(event.currentTarget)); debug(dumpNodeList(event.path)); });
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-in-shadow-tree.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-in-shadow-tree.html index 8856e55..7b595f77 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-in-shadow-tree.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-in-shadow-tree.html
@@ -29,7 +29,7 @@ createDOM('content', {'id': 'M'}))))))))); ['A', 'B', 'C', 'A/', 'A/E', 'A/F', 'A/E/', 'A/E/H', 'A/E/I', 'A/E/J', 'A/E/H/', 'A/E/H/L', 'A/E/H/M'].forEach(function(path) { - getNodeInTreeOfTrees(path).addEventListener('click', function(event) { + getNodeInComposedTree(path).addEventListener('click', function(event) { debug('\nevent.path on node ' + dumpNode(event.currentTarget)); debug(dumpNodeList(event.path)); });
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-multiple-shadow-roots-2.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-multiple-shadow-roots-2.html index 5ca9dc4e..ea0c7d7 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-multiple-shadow-roots-2.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-multiple-shadow-roots-2.html
@@ -14,7 +14,7 @@ debug('click #' + path); var clickEvent = document.createEvent("MouseEvents"); clickEvent.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); - getNodeInTreeOfTrees(path).dispatchEvent(clickEvent); + getNodeInComposedTree(path).dispatchEvent(clickEvent); } sandbox.appendChild( @@ -30,7 +30,7 @@ createDOM('div', {'id': 'G'})))); ['A', 'B', 'A/', 'A/E', 'A//', 'A//H', 'A//I', 'A///', 'A///F', 'A///G'].forEach(function(path) { - getNodeInTreeOfTrees(path).addEventListener('click', function(event) { + getNodeInComposedTree(path).addEventListener('click', function(event) { debug('\nevent.path on node ' + dumpNode(event.currentTarget) + ' (target: ' + dumpNode(event.target) + ')'); debug(dumpNodeList(event.path)); });
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-multiple-shadow-roots.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-multiple-shadow-roots.html index 285e368..ec284f22 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-multiple-shadow-roots.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-multiple-shadow-roots.html
@@ -16,7 +16,7 @@ debug('click #' + path); var clickEvent = document.createEvent("MouseEvents"); clickEvent.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); - getNodeInTreeOfTrees(path).dispatchEvent(clickEvent); + getNodeInComposedTree(path).dispatchEvent(clickEvent); } sandbox.appendChild( @@ -31,7 +31,7 @@ createDOM('shadow', {'id': 'I'}))))); ['A', 'B', 'C', 'A/', 'A/E', 'A/F', 'A//', 'A//H', 'A//I'].forEach(function(path) { - getNodeInTreeOfTrees(path).addEventListener('click', function(event) { + getNodeInComposedTree(path).addEventListener('click', function(event) { debug('\nevent.path on node ' + dumpNode(event.currentTarget) + ' (target: ' + dumpNode(event.target) + ')'); debug(dumpNodeList(event.path)); });
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-shadow-insertion-point-in-oldest-shadow-root.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-shadow-insertion-point-in-oldest-shadow-root.html index 9c0bc5f..c756163 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-shadow-insertion-point-in-oldest-shadow-root.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-shadow-insertion-point-in-oldest-shadow-root.html
@@ -23,7 +23,7 @@ createDOM('shadow', {'id': 'I'}))))); ['A', 'B', 'C', 'A/', 'A/E', 'A/X', 'A//', 'A//H', 'A//I'].forEach(function(path) { - getNodeInTreeOfTrees(path).addEventListener('click', function(event) { + getNodeInComposedTree(path).addEventListener('click', function(event) { debug('\nevent.path on node ' + dumpNode(event.currentTarget)); debug(dumpNodeList(event.path)); });
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-with-dom-mutation.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-with-dom-mutation.html index 832ccb1..4038f4f 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-with-dom-mutation.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/event-path-with-dom-mutation.html
@@ -29,13 +29,13 @@ createDOM('content', {'id': 'M'}))))))))); ['A', 'B', 'C', 'A/', 'A/E', 'A/F', 'A/E/', 'A/E/H', 'A/E/I', 'A/E/J', 'A/E/H/', 'A/E/H/L', 'A/E/H/M'].forEach(function(path) { - getNodeInTreeOfTrees(path).addEventListener('click', function(event) { + getNodeInComposedTree(path).addEventListener('click', function(event) { debug('\nevent.path on node ' + dumpNode(event.currentTarget)); debug(dumpNodeList(event.path)); }); }); ['B', 'A/E/I'].forEach(function(path) { - getNodeInTreeOfTrees(path).addEventListener('click', function(event) { + getNodeInComposedTree(path).addEventListener('click', function(event) { debug('\nRemoving node ' + dumpNode(event.currentTarget.firstChild)); event.currentTarget.removeChild(event.currentTarget.firstChild); });
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/events-stopped-at-shadow-boundary.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/events-stopped-at-shadow-boundary.html index 3310e63..19e01ed 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/events-stopped-at-shadow-boundary.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/events-stopped-at-shadow-boundary.html
@@ -56,7 +56,7 @@ function addEventListeners(nodes) { for (var i = 0; i < nodes.length; ++i) { - var node = getNodeInTreeOfTrees(nodes[i]); + var node = getNodeInComposedTree(nodes[i]); for (var j = 0; j < events.length; ++j) node.addEventListener(events[j], recordEvent, false); } @@ -83,7 +83,7 @@ eventRecords = {}; var event = document.createEvent('UIEvent'); event.initEvent(events[i], true, false); - getNodeInTreeOfTrees('host/target').dispatchEvent(event); + getNodeInComposedTree('host/target').dispatchEvent(event); dumpDispatchedEvent(events[i]); } @@ -109,7 +109,7 @@ eventRecords = {}; var event = document.createEvent('UIEvent'); event.initEvent('selectstart', true, false); - getNodeInTreeOfTrees('host1/distributed-child').dispatchEvent(event); + getNodeInComposedTree('host1/distributed-child').dispatchEvent(event); dumpDispatchedEvent('selectstart'); } @@ -132,7 +132,7 @@ eventRecords = {}; var event = document.createEvent('UIEvent'); event.initEvent('selectstart', true, false); - getNodeInTreeOfTrees('shadow-host/target').dispatchEvent(event); + getNodeInComposedTree('shadow-host/target').dispatchEvent(event); dumpDispatchedEvent('selectstart'); }
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/flat-tree-traversal-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/flat-tree-traversal-expected.txt new file mode 100644 index 0000000..2016c4ee --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/flat-tree-traversal-expected.txt
@@ -0,0 +1,373 @@ +CONSOLE WARNING: Calling Element.createShadowRoot() for an element which already hosts a shadow root is deprecated. See https://www.chromestatus.com/features/4668884095336448 for more details. +Tests for Composed Shadow DOM Tree Traversal APIs. Can only run within DRT + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + +ShadowRoot should be used. +Flat Tree: +#a + #b + +Traverse in forward. +#a +#b +Traverse in backward. +#b +#a + +A content element should select light children +Flat Tree: +#a + #b + #c + #d + +Traverse in forward. +#a +#b +#c +#d +Traverse in backward. +#d +#c +#b +#a + +Test for content element selector. +Flat Tree: +#a + #b + #d + +Traverse in forward. +#a +#b +#d +Traverse in backward. +#d +#b +#a + +Light children should be selected only at once. +Flat Tree: +#a + #b + #d + #c + #e + +Traverse in forward. +#a +#b +#d +#c +#e +Traverse in backward. +#e +#c +#d +#b +#a + +A content element can have fallback elements. +Flat Tree: +#a + #b + #f1 + #f2 + +Traverse in forward. +#a +#b +#f1 +#f2 +Traverse in backward. +#f2 +#f1 +#b +#a + +Fallback elements should not be used if a content element selects an element. +Flat Tree: +#a + #b + #c + +Traverse in forward. +#a +#b +#c +Traverse in backward. +#c +#b +#a + +Test for traversal, starting with a fallback element which is not used. +Flat Tree: +#f1 + #f2 + +Traverse in forward. +#f1 +#f2 +Traverse in backward. +#f2 +#f1 + +Next node of [#f1] is [#f2] +Next node of [#f2] is [null] + +Test for Nested ShadowRoots. +Flat Tree: +#a + #b + #c + #e + #d + #f + #h + #i + #g + +Traverse in forward. +#a +#b +#c +#e +#d +#f +#h +#i +#g +Traverse in backward. +#g +#i +#h +#f +#d +#e +#c +#b +#a + +Test for Multiple ShadowRoots. +Flat Tree: +#a + #d + #b + #f + #c + #e + +Traverse in forward. +#a +#d +#b +#f +#c +#e +Traverse in backward. +#e +#c +#f +#b +#d +#a + +Test for inactive insertion points. +Flat Tree: +#a + #b + #c + +Traverse in forward. +#a +#b +#c +Traverse in backward. +#c +#b +#a + +Test for an orphaned shadow subtree. +Flat Tree: +#a + #d + +Traverse in forward. +#a +#d +Traverse in backward. +#d +#a + +Test for traversal, starting with a node in an orphaned shadow subtree. +Flat Tree: +#b + #c + +Traverse in forward. +#b +#c +Traverse in backward. +#c +#b + +Test for a content element which does not select any nodes nor have fallback elements. +Flat Tree: +#a + #b + #c + +Traverse in forward. +#a +#b +#c +Traverse in backward. +#c +#b +#a + +Test for a nested insertion point. +Flat Tree: +#a + #b + #c + +Traverse in forward. +#a +#b +#c +Traverse in backward. +#c +#b +#a + +Test for nested insertion points. Some of them are either empty insertion points or inactive insertion points. +Flat Tree: +#a + #b + #c + #d + #e + +Traverse in forward. +#a +#b +#c +#d +#e +Traverse in backward. +#e +#d +#c +#b +#a + +Test for a re-projection. +Flat Tree: +#a + #b + #c + +Traverse in forward. +#a +#b +#c +Traverse in backward. +#c +#b +#a + +Test for a content element which is selected by another content element. +Flat Tree: +#a + #b + #most-inner-child + #host-child + +Traverse in forward. +#a +#b +#most-inner-child +#host-child +Traverse in backward. +#host-child +#most-inner-child +#b +#a + +Test for a reprojection. Content elements should be used in document order. +Flat Tree: +#a + #host-child1 + #b + #host-child2 + +Traverse in forward. +#a +#host-child1 +#b +#host-child2 +Traverse in backward. +#host-child2 +#b +#host-child1 +#a + +Test for complex re-projections. +Flat Tree: +#a + #b + #child-1 + #d + #e + #child-2 + #g + #f + #h + #c + +Traverse in forward. +#a +#b +#child-1 +#d +#e +#child-2 +#g +#f +#h +#c +Traverse in backward. +#c +#h +#f +#g +#child-2 +#e +#d +#child-1 +#b +#a + +Test for a shadow insertion point where nothing is distributed. +Flat Tree: +#a + #b + #c + +Traverse in forward. +#a +#b +#c +Traverse in backward. +#c +#b +#a + +PASS successfullyParsed is true + +TEST COMPLETE +
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/flat-tree-traversal-shadow-reprojection-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/flat-tree-traversal-shadow-reprojection-expected.txt new file mode 100644 index 0000000..c6676a1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/flat-tree-traversal-shadow-reprojection-expected.txt
@@ -0,0 +1,181 @@ +CONSOLE WARNING: Calling Element.createShadowRoot() for an element which already hosts a shadow root is deprecated. See https://www.chromestatus.com/features/4668884095336448 for more details. +Tests for Composed Shadow DOM Tree Traversal APIs. Can only run within DRT + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + +Multiple shadow root without shadow element +Flat Tree: +#a + #c + +Traverse in forward. +#a +#c +Traverse in backward. +#c +#a + +Multiple shadow root with shadow element +Flat Tree: +#a + #c + #b + #e + +Traverse in forward. +#a +#c +#b +#e +Traverse in backward. +#e +#b +#c +#a + +Multiple shadow root with shadow element, case 2 +Flat Tree: +#a + #f + #c + #b + #e + #h + +Traverse in forward. +#a +#f +#c +#b +#e +#h +Traverse in backward. +#h +#e +#b +#c +#f +#a + +shadow reprojection +Flat Tree: +#a + #b + #d + #a-child + #f + +Traverse in forward. +#a +#b +#d +#a-child +#f +Traverse in backward. +#f +#a-child +#d +#b +#a + +shadow reprojection, take 2 +Flat Tree: +#a + #d + #f + #b + #h + +Traverse in forward. +#a +#d +#f +#b +#h +Traverse in backward. +#h +#b +#f +#d +#a + +Ignore shadow fallback elements +Flat Tree: +#a + #i + #k + #c + #b + #f + #g + #h + #m + +Traverse in forward. +#a +#i +#k +#c +#b +#f +#g +#h +#m +Traverse in backward. +#m +#h +#g +#f +#b +#c +#k +#i +#a + +with inactive insertion points +Flat Tree: +#a + #s + #u + #f + #b + #c + #d + #e + #l + #m + #n + #w + +Traverse in forward. +#a +#s +#u +#f +#b +#c +#d +#e +#l +#m +#n +#w +Traverse in backward. +#w +#n +#m +#l +#e +#d +#c +#b +#f +#u +#s +#a + +PASS successfullyParsed is true + +TEST COMPLETE +
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/flat-tree-traversal-shadow-reprojection.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/flat-tree-traversal-shadow-reprojection.html new file mode 100644 index 0000000..3070501 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/flat-tree-traversal-shadow-reprojection.html
@@ -0,0 +1,113 @@ +<!DOCTYPE html> +<html> +<head> +<script src="../../../resources/js-test.js"></script> +<script src="resources/shadow-dom.js"></script> +</head> +<body> +<div id="console"></div> +<div id="sandbox"></div> +<script> +description("Tests for Composed Shadow DOM Tree Traversal APIs. Can only run within DRT"); + +function testFlatTree(node) +{ + var sandbox = document.getElementById('sandbox'); + sandbox.innerHTML = ''; + sandbox.appendChild(node); + document.body.offsetLeft; + showFlatTree(node); +} + +debug('Multiple shadow root without shadow element'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createShadowRoot(createDOM('div', {'id': 'b'})), + createShadowRoot(createDOM('div', {'id': 'c'})))); + +debug('Multiple shadow root with shadow element'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createShadowRoot(createDOM('div', {'id': 'b'})), + createShadowRoot(createDOM('div', {'id': 'c'}), + createDOM('shadow', {'id': 'd'}), + createDOM('div', {'id': 'e'})))); + +debug('Multiple shadow root with shadow element, case 2'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createShadowRoot(createDOM('div', {'id': 'b'})), + createShadowRoot(createDOM('div', {'id': 'c'}), + createDOM('shadow', {'id': 'd'}), + createDOM('div', {'id': 'e'})), + createShadowRoot(createDOM('div', {'id': 'f'}), + createDOM('shadow', {'id': 'g'}), + createDOM('div', {'id': 'h'})))); + +debug('shadow reprojection'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createDOM('div', {'id': 'a-child'}), + createShadowRoot(createDOM('div', {'id': 'b'}, + createDOM('shadow', {'id': 'c'}), + createShadowRoot(createDOM('div', {'id': 'd'}), + createDOM('content', {'id': 'e'}), + createDOM('div', {'id': 'f'})))))); + +debug('shadow reprojection, take 2'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createDOM('div', {'id': 'b'}), + createShadowRoot(createDOM('shadow', {'id': 'c'})), + createShadowRoot(createDOM('div', {'id': 'd'}, + createDOM('shadow', {'id': 'e'}), + createShadowRoot(createDOM('div', {'id': 'f'}), + createDOM('content', {'id': 'g'}), + createDOM('div', {'id': 'h'})))))); + +debug('Ignore shadow fallback elements'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createDOM('div', {'id': 'b'}), + createShadowRoot(createDOM('div', {'id': 'c'}), + createDOM('shadow', {'id': 'd'}, + createDOM('div', {'id': 'e'})), + createDOM('shadow', {'id': 'f'}, + createDOM('div', {'id': 'g'})), + createDOM('div', {'id': 'h'})), + createShadowRoot(createDOM('div', {'id': 'i'}, + createDOM('shadow', {'id': 'j'}), + createShadowRoot(createDOM('div', {'id': 'k'}), + createDOM('content', {'id': 'l'}), + createDOM('div', {'id': 'm'})))))); + +debug('with inactive insertion points') +testFlatTree( + createDOM('div', {'id': 'a'}, + createDOM('content', {'id': 'b'}, + createDOM('div', {'id': 'c'})), + createDOM('shadow', {'id': 'd'}, + createDOM('div', {'id': 'e'})), + createShadowRoot(createDOM('div', {'id': 'f'}), + createDOM('content', {'id': 'g'}, + createDOM('content', {'id': 'h'}), + createDOM('shadow', {'id': 'i'}), + createDOM('div', {'id': 'j'})), + createDOM('content', {'id': 'k'}, + createDOM('content', {'id': 'l'}), + createDOM('shadow', {'id': 'm'}), + createDOM('div', {'id': 'n'})), + createDOM('shadow', {'id': 'o'}, + createDOM('content', {'id': 'p'}), + createDOM('shadow', {'id': 'q'}), + createDOM('div', {'id': 'r'}))), + createShadowRoot(createDOM('div', {'id': 's'}, + createDOM('shadow', {'id': 't'}), + createShadowRoot(createDOM('div', {'id': 'u'}), + createDOM('content', {'id': 'v'}), + createDOM('div', {'id': 'w'})))))); + + +</script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/flat-tree-traversal.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/flat-tree-traversal.html new file mode 100644 index 0000000..1cf8777 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/flat-tree-traversal.html
@@ -0,0 +1,227 @@ +<!DOCTYPE html> +<html> +<head> +<script src="../../../resources/js-test.js"></script> +<script src="resources/shadow-dom.js"></script> +</head> +<body> +<div id="console"></div> +<div id="sandbox"></div> +<script> +description("Tests for Composed Shadow DOM Tree Traversal APIs. Can only run within DRT"); + +function testFlatTree(node) +{ + var sandbox = document.getElementById('sandbox'); + sandbox.innerHTML = ''; + sandbox.appendChild(node); + document.body.offsetLeft; + showFlatTree(node); +} + +debug('ShadowRoot should be used.'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createShadowRoot(createDOM('div', {'id': 'b'})), + createDOM('div', {'id': 'c'}))); + +debug('A content element should select light children'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createShadowRoot(createDOM('div', {'id': 'b'}), + createDOM('content')), + createDOM('div', {'id': 'c'}), + createDOM('div', {'id': 'd'}))); + +debug('Test for content element selector.'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createShadowRoot(createDOM('div', {'id': 'b'}), + createDOM('content', {'select': '#d'})), + createDOM('div', {'id': 'c'}), + createDOM('div', {'id': 'd'}), + createDOM('div', {'id': 'e'}))); + +debug('Light children should be selected only at once.'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createShadowRoot(createDOM('div', {'id': 'b'}), + createDOM('content', {'select': '#d'}), + createDOM('content')), + createDOM('div', {'id': 'c'}), + createDOM('div', {'id': 'd'}), + createDOM('div', {'id': 'e'}))); + +debug('A content element can have fallback elements.'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createShadowRoot(createDOM('div', {'id': 'b'}), + createDOM('content', {'select': '#z'}, + createDOM('div', {'id': 'f1'}), + createDOM('div', {'id': 'f2'}))), + createDOM('div', {'id': 'c'}))); + +debug('Fallback elements should not be used if a content element selects an element.'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createShadowRoot(createDOM('div', {'id': 'b'}), + createDOM('content', {'select': '#c'}, + createDOM('div', {'id': 'f1'}, + createDOM('div', {'id': 'f2'})))), + createDOM('div', {'id': 'c'}))); + +debug('Test for traversal, starting with a fallback element which is not used.'); +showFlatTree(getNodeInComposedTree('a/f1')); +showNextNode(getNodeInComposedTree('a/f1')); +showNextNode(getNodeInComposedTree('a/f2')); +debug(''); + +debug('Test for Nested ShadowRoots.'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createShadowRoot(createDOM('div', {'id': 'b'}, + createShadowRoot(createDOM('div', {'id': 'c'}), + createDOM('content'), + createDOM('div', {'id': 'd'})), + createDOM('div', {'id': 'e'})), + createDOM('div', {'id': 'f'}), + createDOM('content'), + createDOM('div', {'id': 'g'})), + createDOM('div', {'id': 'h'}), + createDOM('div', {'id': 'i'}))); + +debug('Test for Multiple ShadowRoots.'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createShadowRoot(createDOM('div', {'id': 'b'}), + createDOM('content'), + createDOM('div', {'id': 'c'})), + createShadowRoot(createDOM('div', {'id': 'd'}), + createDOM('shadow', {}), + createDOM('div', {'id': 'e'})), + createDOM('div', {'id': 'f'}))); + +debug('Test for inactive insertion points.'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createDOM('content', {'id': 'b'}, + createDOM('content', {'id': 'c'})))); + +debug('Test for an orphaned shadow subtree.'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createShadowRoot( + createDOM('div', {'id': 'b'}, + createDOM('div', {'id': 'c'}))), + createShadowRoot( + createDOM('div', {'id': 'd'})))); + +debug('Test for traversal, starting with a node in an orphaned shadow subtree.'); +showFlatTree(getNodeInComposedTree('a/b')); + +debug('Test for a content element which does not select any nodes nor have fallback elements.'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createShadowRoot(createDOM('content', {'select': '#none'}), + createDOM('div', {'id': 'b'}), + createDOM('content', {'select': '#none'}), + createDOM('div', {'id': 'c'}), + createDOM('content', {'select': '#none'})))); + +debug('Test for a nested insertion point.'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createShadowRoot(createDOM('div', {'id': 'b'}, + createShadowRoot(createDOM('content', {})), + createDOM('content', {}))), + createDOM('div', {'id': 'c'}))); + +debug('Test for nested insertion points. Some of them are either empty insertion points or inactive insertion points.'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createShadowRoot(createDOM('content', {'select': '#none'}), + createDOM('div', {'id': 'b'}, + createShadowRoot(createDOM('content', {'select': '.select-1'}), + createDOM('div', {'id': 'c'}), + createDOM('content', {'select': '.select-2'})), + createDOM('content', {'class': 'select-1', 'select': '.select-4'}), + createDOM('content', {'class': 'select-2', 'select': '#none'}), + createDOM('div', {'id': 'd', 'class': 'select-2'}), + createDOM('content', {'class': 'select-2', 'select': '#none'}), + createDOM('div', {'id': 'e', 'class': 'select-2'}), + createDOM('content', {'class': 'select-2', 'select': '#none'}))), + createDOM('content', {'id': 'inactive-insertion-point', 'class': 'select-4'}), + createDOM('div', {'id': 'should-not-be-selected'}), + createDOM('div', {'id': 'f', 'class': 'select-4'}))); + +debug('Test for a re-projection.'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createShadowRoot( + createDOM('div', {'id': 'b'}, + createShadowRoot(createDOM('content', {'select': '#c'})), + createDOM('content', {'select': '#c'}))), + createDOM('div', {'id': 'c'}))); + +debug('Test for a content element which is selected by another content element.'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createShadowRoot( + createDOM('div', {'id': 'b'}, + createShadowRoot(createDOM('content', {'select': '#content'}), + createDOM('div', {'id': 'most-inner-child'}), + createDOM('content', {'select': '#host-child'})), + createDOM('content', {'id': 'content', 'select': '#host-child'}, + createDOM('div', {'id': 'should-not-be-used'})), + createDOM('div', {'id': 'inner-child', 'class': 'foo'}))), + createDOM('div', {'id': 'host-child'}))); + +debug('Test for a reprojection. Content elements should be used in document order.'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createShadowRoot( + createDOM('content', {'select': '#host-child1'}), + createDOM('div', {'id': 'b'}, + createShadowRoot(createDOM('content', {'select': '.child'})), + createDOM('content', {'select': '.child'}))), + createDOM('div', {'id': 'host-child1', 'class': 'child'}), + createDOM('div', {'id': 'host-child2', 'class': 'child'}))); + +debug('Test for complex re-projections.'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createShadowRoot( + createDOM('div', {'id': 'b'}, + createShadowRoot(createDOM('content', {'select': '.foo'}), + createDOM('div', {'id': 'c'})), + // Select #child-1 + createDOM('content', {'select': '#child-1'}, + createDOM('div', {'class': 'should-not-be-used'}), + // Should not select any nodes since it's inactive. + createDOM('content', {'class': 'should-be-inactive', 'select': '.foo'})), + createDOM('div', {'id': 'd', 'class': 'foo'}, + createShadowRoot(createDOM('div', {'id': 'e'}), + // Should select #child-2 and #g. + createDOM('content', {'select': '.foo'}), + createDOM('div', {'id': 'f'})), + // Select #child-2 + createDOM('content', {'select': '#child-2'}), + createDOM('div', {'id': 'g', 'class': 'foo'})), + createDOM('div', {'class': 'should-not-be-selected'}), + createDOM('div', {'id': 'h', 'class': 'foo'}))), + createDOM('div', {'id': 'child-1', 'class': 'foo'}), + createDOM('div', {'id': 'not-selected', 'class': 'foo'}), + createDOM('div', {'id': 'child-2', 'class': 'foo'}))); + +debug('Test for a shadow insertion point where nothing is distributed.'); +testFlatTree( + createDOM('div', {'id': 'a'}, + createShadowRoot(), + createShadowRoot( + createDOM('div', {'id': 'b'}), + createDOM('shadow', {'id': 'shadow'}, + createDOM('div', {'id': 'should-not-be-used'})), + createDOM('div', {'id': 'c'})))); +</script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/focus-slide-on-shadow-host.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/focus-slide-on-shadow-host.html index 1bb5eb1..8ec5bac0 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/focus-slide-on-shadow-host.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/focus-slide-on-shadow-host.html
@@ -49,10 +49,10 @@ prepareDOMTree(sandbox, false); resetFocus(); - host = getNodeInTreeOfTrees('shadowHost'); - innerDiv = getNodeInTreeOfTrees('shadowHost/innerDiv'); - inputA = getNodeInTreeOfTrees('shadowHost/inputA'); - inputB = getNodeInTreeOfTrees('shadowHost/inputB'); + host = getNodeInComposedTree('shadowHost'); + innerDiv = getNodeInComposedTree('shadowHost/innerDiv'); + inputA = getNodeInComposedTree('shadowHost/inputA'); + inputB = getNodeInComposedTree('shadowHost/inputB'); debug('click on inner div should focus shadow host'); clickOn(innerDiv); @@ -71,10 +71,10 @@ prepareDOMTree(sandbox, true); resetFocus(); - host = getNodeInTreeOfTrees('shadowHost'); - innerDiv = getNodeInTreeOfTrees('shadowHost/innerDiv'); - inputA = getNodeInTreeOfTrees('shadowHost/inputA'); - inputB = getNodeInTreeOfTrees('shadowHost/inputB'); + host = getNodeInComposedTree('shadowHost'); + innerDiv = getNodeInComposedTree('shadowHost/innerDiv'); + inputA = getNodeInComposedTree('shadowHost/inputA'); + inputB = getNodeInComposedTree('shadowHost/inputB'); inputA.value = 'wonderful'; // len = 9 inputB.value = 'beautiful';
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/focus-with-dom-mutation.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/focus-with-dom-mutation.html index 3d27289..b7e26db 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/focus-with-dom-mutation.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/focus-with-dom-mutation.html
@@ -27,9 +27,9 @@ debug('(1/2) DOM mutation across shadow boundary with delegatesFocus=false'); buildTree(sandbox, false); -var host = getNodeInTreeOfTrees('host'); -var input = getNodeInTreeOfTrees('host/input'); -var dest = getNodeInTreeOfTrees('dest'); +var host = getNodeInComposedTree('host'); +var input = getNodeInComposedTree('host/input'); +var dest = getNodeInComposedTree('dest'); backgroundColorShouldBe('host', 'rgb(255, 255, 255)'); input.focus(); @@ -42,9 +42,9 @@ debug('(2/2) DOM mutation across shadow boundary with delegatesFocus=true'); buildTree(sandbox, true); -var host = getNodeInTreeOfTrees('host'); -var input = getNodeInTreeOfTrees('host/input'); -var dest = getNodeInTreeOfTrees('dest'); +var host = getNodeInComposedTree('host'); +var input = getNodeInComposedTree('host/input'); +var dest = getNodeInComposedTree('dest'); backgroundColorShouldBe('host', 'rgb(255, 255, 255)'); input.focus();
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/gesture-tap-remove-node-crash.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/gesture-tap-remove-node-crash.html index 96d460b..3b404a20 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/gesture-tap-remove-node-crash.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/gesture-tap-remove-node-crash.html
@@ -16,7 +16,7 @@ function gestureTap(elementId) { - var element = getNodeInTreeOfTrees(elementId); + var element = getNodeInComposedTree(elementId); if (window.eventSender) { eventSender.gestureTap(element.offsetLeft + element.offsetWidth / 2, element.offsetTop + element.offsetHeight / 2); eventSender.leapForward(10); @@ -24,7 +24,7 @@ } } -var shadowRootChild = getNodeInTreeOfTrees('shadow-host/shadow-root-child'); +var shadowRootChild = getNodeInComposedTree('shadow-host/shadow-root-child'); shadowRootChild.addEventListener('mousedown', function() { shadowRootChild.remove(); });
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/gesture-tap.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/gesture-tap.html index b4a4a8d..1460de94 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/gesture-tap.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/gesture-tap.html
@@ -25,7 +25,7 @@ function gestureTap(elementId) { - var element = getNodeInTreeOfTrees(elementId); + var element = getNodeInComposedTree(elementId); if (window.eventSender) { eventSender.gestureTap(element.offsetLeft + element.offsetWidth / 2, element.offsetTop + element.offsetHeight / 2); eventSender.leapForward(10);
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/get-destination-insertion-points-re-distribution.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/get-destination-insertion-points-re-distribution.html index 24a3c9fb6..a938fc4 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/get-destination-insertion-points-re-distribution.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/get-destination-insertion-points-re-distribution.html
@@ -19,7 +19,7 @@ createDOM('div', {'id': 'child-1'})))); shouldBeEqualAsArray(document.getElementById('child-1').getDestinationInsertionPoints(), - [getNodeInTreeOfTrees('host-1/content-1'), getNodeInTreeOfTrees('host-1/host-2/content-2')]); + [getNodeInComposedTree('host-1/content-1'), getNodeInComposedTree('host-1/host-2/content-2')]); document.body.appendChild( createDOM('div', {}, @@ -33,7 +33,7 @@ createDOM('div', {'id': 'child-10'})))); shouldBeEqualAsArray(document.getElementById('child-10').getDestinationInsertionPoints(), - [getNodeInTreeOfTrees('host-10/content-10')]); + [getNodeInComposedTree('host-10/content-10')]); document.body.appendChild( createDOM('div', {}, @@ -47,7 +47,7 @@ createDOM('div', {'id': 'child-11'})))); shouldBeEqualAsArray(document.getElementById('child-11').getDestinationInsertionPoints(), - [getNodeInTreeOfTrees('host-11/content-11')]); + [getNodeInComposedTree('host-11/content-11')]); document.body.appendChild( createDOM('div', {},
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/get-destination-insertion-points-shadow-insertion-points.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/get-destination-insertion-points-shadow-insertion-points.html index dd030e4..1a7efb7 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/get-destination-insertion-points-shadow-insertion-points.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/get-destination-insertion-points-shadow-insertion-points.html
@@ -16,8 +16,8 @@ createShadowRoot( createDOM('shadow', {'id': 'shadow'}))))); -shouldBeEqualAsArray(getNodeInTreeOfTrees('host/child').getDestinationInsertionPoints(), - [getNodeInTreeOfTrees('host//shadow')]); +shouldBeEqualAsArray(getNodeInComposedTree('host/child').getDestinationInsertionPoints(), + [getNodeInComposedTree('host//shadow')]); </script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/get-destination-insertion-points-skips-user-agent-shadow-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/get-destination-insertion-points-skips-user-agent-shadow-expected.txt index 31edd0fb..cc6a2c6 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/get-destination-insertion-points-skips-user-agent-shadow-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/get-destination-insertion-points-skips-user-agent-shadow-expected.txt
@@ -5,7 +5,7 @@ PASS nodeList.length is expectedNodes.length PASS nodeList.item(0) is expectedNodes[0] -PASS getNodeInTreeOfTrees('host/detail-child').getDestinationInsertionPoints().length is 0 +PASS getNodeInComposedTree('host/detail-child').getDestinationInsertionPoints().length is 0 PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/get-destination-insertion-points-skips-user-agent-shadow.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/get-destination-insertion-points-skips-user-agent-shadow.html index 8d15d5b..495be5a 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/get-destination-insertion-points-skips-user-agent-shadow.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/get-destination-insertion-points-skips-user-agent-shadow.html
@@ -18,8 +18,8 @@ createDOM('div', {'id': 'host-child'})))); shouldBeEqualAsArray(document.getElementById('host-child').getDestinationInsertionPoints(), - [getNodeInTreeOfTrees('host/content')]); -shouldBeZero("getNodeInTreeOfTrees('host/detail-child').getDestinationInsertionPoints().length"); + [getNodeInComposedTree('host/content')]); +shouldBeZero("getNodeInComposedTree('host/detail-child').getDestinationInsertionPoints().length"); </script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/get-destination-insertion-points.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/get-destination-insertion-points.html index 09bfb0f..bd291e662 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/get-destination-insertion-points.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/get-destination-insertion-points.html
@@ -13,7 +13,7 @@ createDOM('div', {'id': 'child-1'})))); shouldBeEqualAsArray(document.getElementById('child-1').getDestinationInsertionPoints(), - [getNodeInTreeOfTrees('host-1/content-1')]); + [getNodeInComposedTree('host-1/content-1')]); debug('Insertion points should be inactive in v1 shadow trees.');
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/get-element-by-id-in-shadow-root-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/get-element-by-id-in-shadow-root-expected.txt index 9fbd4a7..726cbf70 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/get-element-by-id-in-shadow-root-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/get-element-by-id-in-shadow-root-expected.txt
@@ -4,11 +4,11 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -PASS getNodeInTreeOfTrees('divA/inputB').id is "inputB" -PASS getNodeInTreeOfTrees('divA/divC').id is "divC" -PASS getNodeInTreeOfTrees('divA/divC/inputD').id is "inputD" -PASS getNodeInTreeOfTrees('divA/divC//inputE').id is "inputE" -PASS getNodeInTreeOfTrees('divA/divC///inputF').id is "inputF" +PASS getNodeInComposedTree('divA/inputB').id is "inputB" +PASS getNodeInComposedTree('divA/divC').id is "divC" +PASS getNodeInComposedTree('divA/divC/inputD').id is "inputD" +PASS getNodeInComposedTree('divA/divC//inputE').id is "inputE" +PASS getNodeInComposedTree('divA/divC///inputF').id is "inputF" PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/get-element-by-id-in-shadow-root.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/get-element-by-id-in-shadow-root.html index bf57291..f69ce9f 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/get-element-by-id-in-shadow-root.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/get-element-by-id-in-shadow-root.html
@@ -26,11 +26,11 @@ function test() { prepareDomTree(document.body); - shouldBeEqualToString("getNodeInTreeOfTrees('divA/inputB').id", 'inputB'); - shouldBeEqualToString("getNodeInTreeOfTrees('divA/divC').id", 'divC'); - shouldBeEqualToString("getNodeInTreeOfTrees('divA/divC/inputD').id", 'inputD'); - shouldBeEqualToString("getNodeInTreeOfTrees('divA/divC//inputE').id", 'inputE'); - shouldBeEqualToString("getNodeInTreeOfTrees('divA/divC///inputF').id", 'inputF'); + shouldBeEqualToString("getNodeInComposedTree('divA/inputB').id", 'inputB'); + shouldBeEqualToString("getNodeInComposedTree('divA/divC').id", 'divC'); + shouldBeEqualToString("getNodeInComposedTree('divA/divC/inputD').id", 'inputD'); + shouldBeEqualToString("getNodeInComposedTree('divA/divC//inputE').id", 'inputE'); + shouldBeEqualToString("getNodeInComposedTree('divA/divC///inputF').id", 'inputF'); } test();
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/getComputedStyle-composed-parent-dirty-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/getComputedStyle-flat-tree-parent-dirty-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/fast/dom/shadow/getComputedStyle-composed-parent-dirty-expected.txt rename to third_party/WebKit/LayoutTests/fast/dom/shadow/getComputedStyle-flat-tree-parent-dirty-expected.txt
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/getComputedStyle-composed-parent-dirty.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/getComputedStyle-flat-tree-parent-dirty.html similarity index 100% rename from third_party/WebKit/LayoutTests/fast/dom/shadow/getComputedStyle-composed-parent-dirty.html rename to third_party/WebKit/LayoutTests/fast/dom/shadow/getComputedStyle-flat-tree-parent-dirty.html
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/getComputedStyle-with-distribution-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/getComputedStyle-with-distribution-expected.txt index a5eb5681..cd1c356 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/getComputedStyle-with-distribution-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/getComputedStyle-with-distribution-expected.txt
@@ -3,8 +3,8 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -PASS window.getComputedStyle(getNodeInTreeOfTrees("child/bar")).color is "rgb(0, 128, 0)" -PASS window.getComputedStyle(getNodeInTreeOfTrees("child/bar")).color is "rgb(0, 0, 0)" +PASS window.getComputedStyle(getNodeInComposedTree("child/bar")).color is "rgb(0, 128, 0)" +PASS window.getComputedStyle(getNodeInComposedTree("child/bar")).color is "rgb(0, 0, 0)" PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/getComputedStyle-with-distribution.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/getComputedStyle-with-distribution.html index af37ddc4c..f3b7571 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/getComputedStyle-with-distribution.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/getComputedStyle-with-distribution.html
@@ -20,9 +20,9 @@ createDOM('div', {'id': 'bar'}, document.createTextNode("bar")))))); -shouldBe('window.getComputedStyle(getNodeInTreeOfTrees("child/bar")).color', '"rgb(0, 128, 0)"'); +shouldBe('window.getComputedStyle(getNodeInComposedTree("child/bar")).color', '"rgb(0, 128, 0)"'); -var content = getNodeInTreeOfTrees('host/content'); +var content = getNodeInComposedTree('host/content'); content.setAttribute('select', '.foobar'); -shouldBe('window.getComputedStyle(getNodeInTreeOfTrees("child/bar")).color', '"rgb(0, 0, 0)"'); +shouldBe('window.getComputedStyle(getNodeInComposedTree("child/bar")).color', '"rgb(0, 0, 0)"'); </script>
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/move-style-scoped-to-another-shadowroot-crash.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/move-style-scoped-to-another-shadowroot-crash.html index 52b2765..b45c0e9 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/move-style-scoped-to-another-shadowroot-crash.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/move-style-scoped-to-another-shadowroot-crash.html
@@ -17,8 +17,8 @@ createDOM('style', {'id': 'style', 'scoped': 'scoped'}, document.createTextNode('.c3 { display: inherit; transform: rotate3d(0, 1, 1, 45deg); }')))))); - olderShadowRoot = getNodeInTreeOfTrees("host/"); - youngerShadowRoot = getNodeInTreeOfTrees("host//"); + olderShadowRoot = getNodeInComposedTree("host/"); + youngerShadowRoot = getNodeInComposedTree("host//"); style = youngerShadowRoot.getElementById('style'); olderShadowRoot.appendChild(youngerShadowRoot.getElementById('child'));
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/pseudo-host-parameter-matches-shadow-host-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/pseudo-host-parameter-matches-shadow-host-expected.txt index 16746da..af28be4 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/pseudo-host-parameter-matches-shadow-host-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/pseudo-host-parameter-matches-shadow-host-expected.txt
@@ -3,13 +3,13 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -PASS borderColorOf(getNodeInTreeOfTrees("host")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host")) is "rgb(0, 128, 0)" PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/pseudo-host-parameter-matches-shadow-host.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/pseudo-host-parameter-matches-shadow-host.html index bbe1a2d..2d7da40 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/pseudo-host-parameter-matches-shadow-host.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/pseudo-host-parameter-matches-shadow-host.html
@@ -17,7 +17,7 @@ function borderColorShouldBe(selector, color) { - var text = 'borderColorOf(getNodeInTreeOfTrees("' + selector + '"))'; + var text = 'borderColorOf(getNodeInComposedTree("' + selector + '"))'; shouldBeEqualToString(text, color); }
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/querySelector-for-multiple-shadowroots.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/querySelector-for-multiple-shadowroots.html index 38400f1..c3540a9 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/querySelector-for-multiple-shadowroots.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/querySelector-for-multiple-shadowroots.html
@@ -27,9 +27,9 @@ description('crbug.com/337616: test for querySelectorAll with ::shadow and /deep/'); -var shadowRoot1 = getNodeInTreeOfTrees('foo-host/'); -var shadowRoot2 = getNodeInTreeOfTrees('foo-host//'); -var shadowRoot3 = getNodeInTreeOfTrees('foo-host///'); +var shadowRoot1 = getNodeInComposedTree('foo-host/'); +var shadowRoot2 = getNodeInComposedTree('foo-host//'); +var shadowRoot3 = getNodeInComposedTree('foo-host///'); shouldBe('document.querySelectorAll("#foo-host::shadow span").length', '6'); shouldBe('document.querySelectorAll("#foo-host::shadow span")[0].id', '"not-top1"');
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/querySelector-with-distribution.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/querySelector-with-distribution.html index 033cf0a..abd5dcd 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/querySelector-with-distribution.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/querySelector-with-distribution.html
@@ -17,10 +17,10 @@ createDOM('div', {'id': 'bar'}, document.createTextNode("bar")))))); -var barShadowRoot = getNodeInTreeOfTrees('child/'); +var barShadowRoot = getNodeInComposedTree('child/'); shouldBe('barShadowRoot.querySelectorAll(":host-context(.foo)::shadow div")[0].id', '"bar"'); -var content = getNodeInTreeOfTrees('host/content'); +var content = getNodeInComposedTree('host/content'); content.setAttribute('select', '.foobar'); shouldBe('barShadowRoot.querySelectorAll(":host-context(.foo)::shadow div")[0]', "undefined"); </script>
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/querySelector-with-shadow-all-and-shadow-deep.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/querySelector-with-shadow-all-and-shadow-deep.html index 970b538b..5f73227 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/querySelector-with-shadow-all-and-shadow-deep.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/querySelector-with-shadow-all-and-shadow-deep.html
@@ -32,7 +32,7 @@ shouldBe('document.querySelector("::before, #foo-host /deep/ span").id', '"not-top"'); // FIXME: after making "*" in shadow tree not to match shadow host, rebaseline. -var fooShadowRoot = getNodeInTreeOfTrees('foo-host/'); +var fooShadowRoot = getNodeInComposedTree('foo-host/'); shouldBe('fooShadowRoot.querySelectorAll("*::shadow span").length', '1'); shouldBe('fooShadowRoot.querySelectorAll("*::shadow span")[0].id', '"nested"'); @@ -64,7 +64,7 @@ shouldBe('barHost.querySelectorAll(":host /deep/ #bar-host span").length', '1'); shouldBe('barHost.querySelectorAll(":host /deep/ #bar-host span")[0].id', '"inner-host"'); -var barShadowRoot = getNodeInTreeOfTrees('foo-host/bar-host/'); +var barShadowRoot = getNodeInComposedTree('foo-host/bar-host/'); shouldBe('barShadowRoot.querySelectorAll("*::shadow span").length', '0'); shouldBe('barShadowRoot.querySelectorAll("* /deep/ span").length', '0');
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/resources/event-dispatching.js b/third_party/WebKit/LayoutTests/fast/dom/shadow/resources/event-dispatching.js index 17b714ed..d06e5a9 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/resources/event-dispatching.js +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/resources/event-dispatching.js
@@ -116,20 +116,10 @@ return result; } -function dumpComposedShadowTree(node, indent) -{ - indent = indent || ""; - var output = indent + dumpNode(node) + "\n"; - var child; - for (child = internals.firstChildInFlatTree(node); child; child = internals.nextSiblingInFlatTree(child)) - output += dumpComposedShadowTree(child, indent + "\t"); - return output; -} - function addEventListeners(nodes) { for (var i = 0; i < nodes.length; ++i) { - addEventListenersToNode(getNodeInTreeOfTrees(nodes[i])); + addEventListenersToNode(getNodeInComposedTree(nodes[i])); } } @@ -164,10 +154,10 @@ { clearEventRecords(); debug('\n' + 'Moving mouse from ' + oldElementId + ' to ' + newElementId); - moveMouseOver(getNodeInTreeOfTrees(oldElementId)); + moveMouseOver(getNodeInComposedTree(oldElementId)); clearEventRecords(); - moveMouseOver(getNodeInTreeOfTrees(newElementId)); + moveMouseOver(getNodeInComposedTree(newElementId)); debugDispatchedEvent('mouseout'); debugDispatchedEvent('mouseover'); @@ -179,7 +169,7 @@ debug('\n' + 'Click ' + elementId); var clickEvent = document.createEvent("MouseEvents"); clickEvent.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); - getNodeInTreeOfTrees(elementId).dispatchEvent(clickEvent); + getNodeInComposedTree(elementId).dispatchEvent(clickEvent); debugDispatchedEvent('click'); } @@ -187,5 +177,5 @@ { var sandbox = document.getElementById('sandbox'); sandbox.offsetLeft; - debug('\n\nComposed Shadow Tree will be:\n' + dumpComposedShadowTree(sandbox)); + debug('\n\nFlat Tree will be:\n' + dumpFlatTree(sandbox)); }
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/resources/shadow-dom.js b/third_party/WebKit/LayoutTests/fast/dom/shadow/resources/shadow-dom.js index 927d050a..54800d4 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/resources/shadow-dom.js +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/resources/shadow-dom.js
@@ -124,7 +124,7 @@ // You can spefify youngerShadowRoot by consecutive slashes. // See LayoutTests/fast/dom/shadow/get-element-by-id-in-shadow-root.html for actual usages. -function getNodeInTreeOfTrees(path) +function getNodeInComposedTree(path) { var ids = path.split('/'); var node = document.getElementById(ids[0]); @@ -195,7 +195,7 @@ function isInnermostActiveElement(id) { - var element = getNodeInTreeOfTrees(id); + var element = getNodeInComposedTree(id); if (!element) { debug('FAIL: There is no such element with id: '+ from); return false; @@ -209,7 +209,7 @@ function shouldNavigateFocus(from, to, direction) { debug('Should move from ' + from + ' to ' + to + ' in ' + direction); - var fromElement = getNodeInTreeOfTrees(from); + var fromElement = getNodeInComposedTree(from); if (!fromElement) { debug('FAIL: There is no such element with id: '+ from); return; @@ -251,13 +251,13 @@ shouldNavigateFocus(elements[i], elements[i + 1], 'backward'); } -function dumpComposedShadowTree(node, indent) +function dumpFlatTree(node, indent) { indent = indent || ""; var output = indent + dumpNode(node) + "\n"; var child; for (child = internals.firstChildInFlatTree(node); child; child = internals.nextSiblingInFlatTree(child)) - output += dumpComposedShadowTree(child, indent + "\t"); + output += dumpFlatTree(child, indent + "\t"); return output; } @@ -269,7 +269,7 @@ return lastNode; } -function showComposedShadowTreeByTraversingInForward(root) +function showFlatTreeByTraversingInForward(root) { var node = root; var last = lastNodeInFlatTree(root); @@ -281,7 +281,7 @@ } } -function showComposedShadowTreeByTraversingInBackward(root) +function showFlatTreeByTraversingInBackward(root) { var node = lastNodeInFlatTree(root); while (node) { @@ -292,16 +292,16 @@ } } -function showComposedShadowTree(node) +function showFlatTree(node) { - debug('Composed Shadow Tree:'); - debug(dumpComposedShadowTree(node)); + debug('Flat Tree:'); + debug(dumpFlatTree(node)); debug('Traverse in forward.'); - showComposedShadowTreeByTraversingInForward(node); + showFlatTreeByTraversingInForward(node); debug('Traverse in backward.'); - showComposedShadowTreeByTraversingInBackward(node); + showFlatTreeByTraversingInBackward(node); debug(''); } @@ -314,7 +314,7 @@ function backgroundColorOf(selector) { - return window.getComputedStyle(getNodeInTreeOfTrees(selector)).backgroundColor; + return window.getComputedStyle(getNodeInComposedTree(selector)).backgroundColor; } function backgroundColorShouldBe(selector, expected)
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/scoped-events-by-ua-stopped.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/scoped-events-by-ua-stopped.html index 336549d..1a20d95 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/scoped-events-by-ua-stopped.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/scoped-events-by-ua-stopped.html
@@ -34,8 +34,8 @@ var sandbox = document.getElementById('sandbox'); convertTemplatesToShadowRootsWithin(sandbox); -var target = getNodeInTreeOfTrees('host/target'); -var host = getNodeInTreeOfTrees('host'); +var target = getNodeInComposedTree('host/target'); +var host = getNodeInComposedTree('host'); async_test(function(t) { target.onselect = function(e) {
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-boundary-events.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-boundary-events.html index b169972ab..11614ee 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-boundary-events.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-boundary-events.html
@@ -89,7 +89,7 @@ 'shadowD/shadowF/shadowG/divH', 'shadowD/shadowF/shadowG/divI', 'shadowD/divJ', 'shadowD/shadowK', 'shadowD/shadowK/divL']; for (var i = 0; i < ids.length; ++i) { - var element = getNodeInTreeOfTrees(ids[i]); + var element = getNodeInComposedTree(ids[i]); element.addEventListener('mouseover', recordEvent, false); element.addEventListener('mouseout', recordEvent, false); element.addEventListener('focusin', recordEvent, false); @@ -102,17 +102,17 @@ function moveMouse(oldElementId, newElementId, message) { debug('\n' + message + '\n' + 'Moving mouse from ' + oldElementId + ' to ' + newElementId); - moveMouseOver(getNodeInTreeOfTrees(oldElementId)); + moveMouseOver(getNodeInComposedTree(oldElementId)); clearEventRecords(); - moveMouseOver(getNodeInTreeOfTrees(newElementId)); + moveMouseOver(getNodeInComposedTree(newElementId)); } function moveFocus(oldElementId, newElementId, message) { debug('\n' + message + '\n' + 'Moving focus from ' + oldElementId + ' to ' + newElementId); - getNodeInTreeOfTrees(oldElementId).focus(); + getNodeInComposedTree(oldElementId).focus(); clearEventRecords(); - getNodeInTreeOfTrees(newElementId).focus(); + getNodeInComposedTree(newElementId).focus(); } function test()
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-child-of-inactive-content-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-child-of-inactive-content-expected.txt index 8dbda20..192fc66 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-child-of-inactive-content-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-child-of-inactive-content-expected.txt
@@ -1,6 +1,6 @@ -Composed Shadow Tree will be: +Flat Tree will be: DIV id=sandbox DIV id=top DIV id=A
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-details-summary-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-details-summary-expected.txt index f1ccc0e..929532786 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-details-summary-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-details-summary-expected.txt
@@ -1,6 +1,6 @@ -Composed Shadow Tree will be: +Flat Tree will be: DIV id=sandbox DIV id=top DETAILS id=details
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-child-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-child-expected.txt index f3e566f3..82c9810 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-child-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-child-expected.txt
@@ -1,6 +1,6 @@ -Composed Shadow Tree will be: +Flat Tree will be: DIV id=sandbox DIV id=top DIV id=shadow-host
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-text-node-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-text-node-expected.txt index c28bd4c9..318ca78e 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-text-node-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-text-node-expected.txt
@@ -1,7 +1,7 @@ Text Node -Composed Shadow Tree will be: +Flat Tree will be: DIV id=sandbox DIV id=top DIV id=shadow-host
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-to-younger-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-to-younger-expected.txt index 938190da..5351a5f 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-to-younger-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-distributed-to-younger-expected.txt
@@ -1,7 +1,7 @@ CONSOLE WARNING: Calling Element.createShadowRoot() for an element which already hosts a shadow root is deprecated. See https://www.chromestatus.com/features/4668884095336448 for more details. -Composed Shadow Tree will be: +Flat Tree will be: DIV id=sandbox DIV id=top DIV id=A
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-empty-shadow-element-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-empty-shadow-element-expected.txt index 4b3674ba..9bd1751 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-empty-shadow-element-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-empty-shadow-element-expected.txt
@@ -1,7 +1,7 @@ CONSOLE WARNING: Calling Element.createShadowRoot() for an element which already hosts a shadow root is deprecated. See https://www.chromestatus.com/features/4668884095336448 for more details. -Composed Shadow Tree will be: +Flat Tree will be: DIV id=sandbox DIV id=top DIV id=A
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-fallback-nodes-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-fallback-nodes-expected.txt index 1b6d9141..b0fd055 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-fallback-nodes-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-fallback-nodes-expected.txt
@@ -1,6 +1,6 @@ -Composed Shadow Tree will be: +Flat Tree will be: DIV id=sandbox DIV id=top DIV id=A
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-fallback-nodes.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-fallback-nodes.html index bf93cc9..14cfc25 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-fallback-nodes.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-fallback-nodes.html
@@ -30,7 +30,7 @@ clearEventRecords(); debug('\nClick non-used-fallback node'); - getNodeInTreeOfTrees('A/non-used-fallback').click(); + getNodeInComposedTree('A/non-used-fallback').click(); debugDispatchedEvent('click'); </script> </body>
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-manually-fired-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-manually-fired-expected.txt index 12400cd4..f4517c5 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-manually-fired-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-manually-fired-expected.txt
@@ -1,6 +1,6 @@ -Composed Shadow Tree will be: +Flat Tree will be: DIV id=sandbox DIV id=top DIV id=host
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-manually-fired-with-same-related-target-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-manually-fired-with-same-related-target-expected.txt index 8753bbe..ba44ebf 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-manually-fired-with-same-related-target-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-manually-fired-with-same-related-target-expected.txt
@@ -1,6 +1,6 @@ -Composed Shadow Tree will be: +Flat Tree will be: DIV id=sandbox DIV id=top DIV id=host
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-manually-fired-with-same-related-target.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-manually-fired-with-same-related-target.html index f2187c78..6a02d37 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-manually-fired-with-same-related-target.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-manually-fired-with-same-related-target.html
@@ -21,7 +21,7 @@ addEventListeners(['top', 'host', 'host/', 'host/div1']); showSandboxTree(); - var div1 = getNodeInTreeOfTrees('host/div1'); + var div1 = getNodeInComposedTree('host/div1'); clearEventRecords(); var event = document.createEvent("MouseEvents");
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-manually-fired.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-manually-fired.html index 618a60a..47748f6 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-manually-fired.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-manually-fired.html
@@ -22,8 +22,8 @@ addEventListeners(['top', 'host', 'host/', 'host/div1', 'host/div2']); showSandboxTree(); - var div1 = getNodeInTreeOfTrees('host/div1'); - var div2 = getNodeInTreeOfTrees('host/div2'); + var div1 = getNodeInComposedTree('host/div1'); + var div2 = getNodeInComposedTree('host/div2'); clearEventRecords(); var event = document.createEvent("MouseEvents");
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-multiple-shadow-roots-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-multiple-shadow-roots-expected.txt index 7c2b7d5d..763f134 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-multiple-shadow-roots-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-multiple-shadow-roots-expected.txt
@@ -1,7 +1,7 @@ CONSOLE WARNING: Calling Element.createShadowRoot() for an element which already hosts a shadow root is deprecated. See https://www.chromestatus.com/features/4668884095336448 for more details. -Composed Shadow Tree will be: +Flat Tree will be: DIV id=sandbox DIV id=top DIV id=A
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-nested-shadow-roots-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-nested-shadow-roots-expected.txt index ce19c54..73d5d0dc 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-nested-shadow-roots-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-nested-shadow-roots-expected.txt
@@ -1,6 +1,6 @@ -Composed Shadow Tree will be: +Flat Tree will be: DIV id=sandbox DIV id=top DIV id=A
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-non-distributed-nodes-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-non-distributed-nodes-expected.txt index 77f8035..fde578a0 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-non-distributed-nodes-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-non-distributed-nodes-expected.txt
@@ -1,7 +1,7 @@ CONSOLE WARNING: Calling Element.createShadowRoot() for an element which already hosts a shadow root is deprecated. See https://www.chromestatus.com/features/4668884095336448 for more details. -Composed Shadow Tree will be: +Flat Tree will be: DIV id=sandbox DIV id=top DIV id=A
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-non-distributed-nodes.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-non-distributed-nodes.html index a6ed024..44129db 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-non-distributed-nodes.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-non-distributed-nodes.html
@@ -28,7 +28,7 @@ clearEventRecords(); debug('\nClick C'); - getNodeInTreeOfTrees('A/C').click(); + getNodeInComposedTree('A/C').click(); debugDispatchedEvent('click'); clearEventRecords();
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-svg-in-shadow-subtree-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-svg-in-shadow-subtree-expected.txt index 46333d1..b074c78 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-svg-in-shadow-subtree-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-svg-in-shadow-subtree-expected.txt
@@ -4,7 +4,7 @@ CONSOLE WARNING: 'SVGElement.offsetHeight' is deprecated and will be removed in M50, around April 2016. See https://www.chromestatus.com/features/5724912467574784 for more details. -Composed Shadow Tree will be: +Flat Tree will be: DIV id=sandbox DIV id=top DIV id=shadow-host
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-svg-in-shadow-subtree.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-svg-in-shadow-subtree.html index f3252ab..85965aaf 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-svg-in-shadow-subtree.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-svg-in-shadow-subtree.html
@@ -18,7 +18,7 @@ createShadowRoot({'id': 'shadow-root'})))); var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); svg.id = 'svg-in-shadow-tree'; - getNodeInTreeOfTrees('shadow-host/').appendChild(svg); + getNodeInComposedTree('shadow-host/').appendChild(svg); addEventListeners(['top', 'shadow-host/', 'shadow-host/svg-in-shadow-tree']); showSandboxTree();
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-text-node-in-shadow-root-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-text-node-in-shadow-root-expected.txt index 149ff84..83f72ab 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-text-node-in-shadow-root-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-text-node-in-shadow-root-expected.txt
@@ -1,6 +1,6 @@ -Composed Shadow Tree will be: +Flat Tree will be: DIV id=sandbox DIV id=top DIV id=shadow-host
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-text-node-in-shadow-root.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-text-node-in-shadow-root.html index 48cf90c..3a0b21a1 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-text-node-in-shadow-root.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-event-dispatching-text-node-in-shadow-root.html
@@ -16,7 +16,7 @@ createDOM('div', {'id': 'top'}, createDOM('div', {'id': 'shadow-host'}, createShadowRoot({'id': 'shadow-root'})))); - var shadowRoot = getNodeInTreeOfTrees('shadow-host/'); + var shadowRoot = getNodeInComposedTree('shadow-host/'); shadowRoot.innerHTML = 'Text Nodes'; addEventListeners(['top', 'shadow-host', 'shadow-host/']); showSandboxTree();
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-mouse-event-adjust-offset.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-mouse-event-adjust-offset.html index 484dddc..5459927 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-mouse-event-adjust-offset.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-dom-mouse-event-adjust-offset.html
@@ -37,7 +37,7 @@ function addEventListeners(nodes) { for (var i = 0; i < nodes.length; ++i) { - var node = getNodeInTreeOfTrees(nodes[i]); + var node = getNodeInComposedTree(nodes[i]); node.addEventListener('mouseover', recordEvent, false); } } @@ -54,7 +54,7 @@ createDOM('div', {'id': 'target', 'style': 'padding-top: 10px; width: 80px'})))))); addEventListeners(['top', 'shadow-host', 'shadow-host/parent']); sandbox.offsetLeft; - moveMouseOver(getNodeInTreeOfTrees('shadow-host/target')); + moveMouseOver(getNodeInComposedTree('shadow-host/target')); shouldBe("eventRecords['parent']['offsetY']", "5"); shouldBe("eventRecords['shadow-host']['offsetY']", "5 + 20");
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-element-distributed-nodes-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-element-distributed-nodes-expected.txt index de083c58..45f029f 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-element-distributed-nodes-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-element-distributed-nodes-expected.txt
@@ -18,11 +18,11 @@ getDistributedNodes() for "host/shadow" should return [host-child] PASS distributedNodes.length is expectedDistributedNodes.length -PASS distributedNodes.item(0) is getNodeInTreeOfTrees(expectedDistributedNodes[0]) +PASS distributedNodes.item(0) is getNodeInComposedTree(expectedDistributedNodes[0]) getDistributedNodes() for "host/shadow" should return [host-child] PASS distributedNodes.length is expectedDistributedNodes.length -PASS distributedNodes.item(0) is getNodeInTreeOfTrees(expectedDistributedNodes[0]) +PASS distributedNodes.item(0) is getNodeInComposedTree(expectedDistributedNodes[0]) getDistributedNodes() for "details//shadow" should return [] PASS distributedNodes.length is expectedDistributedNodes.length @@ -30,44 +30,44 @@ getDistributedNodes() for "host//shadow" should return [host/older-child] PASS distributedNodes.length is expectedDistributedNodes.length -PASS distributedNodes.item(0) is getNodeInTreeOfTrees(expectedDistributedNodes[0]) +PASS distributedNodes.item(0) is getNodeInComposedTree(expectedDistributedNodes[0]) getDistributedNodes() for "host//shadow" should return [host/older-child-1,host-child,host/older-child-2] PASS distributedNodes.length is expectedDistributedNodes.length -PASS distributedNodes.item(0) is getNodeInTreeOfTrees(expectedDistributedNodes[0]) -PASS distributedNodes.item(1) is getNodeInTreeOfTrees(expectedDistributedNodes[1]) -PASS distributedNodes.item(2) is getNodeInTreeOfTrees(expectedDistributedNodes[2]) +PASS distributedNodes.item(0) is getNodeInComposedTree(expectedDistributedNodes[0]) +PASS distributedNodes.item(1) is getNodeInComposedTree(expectedDistributedNodes[1]) +PASS distributedNodes.item(2) is getNodeInComposedTree(expectedDistributedNodes[2]) getDistributedNodes() for "host//shadow" should return [host/older-child-1,host-child,host/older-child-2] PASS distributedNodes.length is expectedDistributedNodes.length -PASS distributedNodes.item(0) is getNodeInTreeOfTrees(expectedDistributedNodes[0]) -PASS distributedNodes.item(1) is getNodeInTreeOfTrees(expectedDistributedNodes[1]) -PASS distributedNodes.item(2) is getNodeInTreeOfTrees(expectedDistributedNodes[2]) +PASS distributedNodes.item(0) is getNodeInComposedTree(expectedDistributedNodes[0]) +PASS distributedNodes.item(1) is getNodeInComposedTree(expectedDistributedNodes[1]) +PASS distributedNodes.item(2) is getNodeInComposedTree(expectedDistributedNodes[2]) getDistributedNodes() for "host//shadow" should return [host/older-child-1,host/older-child-2] PASS distributedNodes.length is expectedDistributedNodes.length -PASS distributedNodes.item(0) is getNodeInTreeOfTrees(expectedDistributedNodes[0]) -PASS distributedNodes.item(1) is getNodeInTreeOfTrees(expectedDistributedNodes[1]) +PASS distributedNodes.item(0) is getNodeInComposedTree(expectedDistributedNodes[0]) +PASS distributedNodes.item(1) is getNodeInComposedTree(expectedDistributedNodes[1]) getDistributedNodes() for "host//shadow" should return [host/older-child-1,host/older-content-child,host/older-child-2] PASS distributedNodes.length is expectedDistributedNodes.length -PASS distributedNodes.item(0) is getNodeInTreeOfTrees(expectedDistributedNodes[0]) -PASS distributedNodes.item(1) is getNodeInTreeOfTrees(expectedDistributedNodes[1]) -PASS distributedNodes.item(2) is getNodeInTreeOfTrees(expectedDistributedNodes[2]) +PASS distributedNodes.item(0) is getNodeInComposedTree(expectedDistributedNodes[0]) +PASS distributedNodes.item(1) is getNodeInComposedTree(expectedDistributedNodes[1]) +PASS distributedNodes.item(2) is getNodeInComposedTree(expectedDistributedNodes[2]) getDistributedNodes() for "host//older-shadow" should return [host/oldest-child-1,host-child,host/oldest-child-2] PASS distributedNodes.length is expectedDistributedNodes.length -PASS distributedNodes.item(0) is getNodeInTreeOfTrees(expectedDistributedNodes[0]) -PASS distributedNodes.item(1) is getNodeInTreeOfTrees(expectedDistributedNodes[1]) -PASS distributedNodes.item(2) is getNodeInTreeOfTrees(expectedDistributedNodes[2]) +PASS distributedNodes.item(0) is getNodeInComposedTree(expectedDistributedNodes[0]) +PASS distributedNodes.item(1) is getNodeInComposedTree(expectedDistributedNodes[1]) +PASS distributedNodes.item(2) is getNodeInComposedTree(expectedDistributedNodes[2]) getDistributedNodes() for "host///shadow" should return [host//older-child-1,host/oldest-child-1,host-child,host/oldest-child-2,host//older-child-2] PASS distributedNodes.length is expectedDistributedNodes.length -PASS distributedNodes.item(0) is getNodeInTreeOfTrees(expectedDistributedNodes[0]) -PASS distributedNodes.item(1) is getNodeInTreeOfTrees(expectedDistributedNodes[1]) -PASS distributedNodes.item(2) is getNodeInTreeOfTrees(expectedDistributedNodes[2]) -PASS distributedNodes.item(3) is getNodeInTreeOfTrees(expectedDistributedNodes[3]) -PASS distributedNodes.item(4) is getNodeInTreeOfTrees(expectedDistributedNodes[4]) +PASS distributedNodes.item(0) is getNodeInComposedTree(expectedDistributedNodes[0]) +PASS distributedNodes.item(1) is getNodeInComposedTree(expectedDistributedNodes[1]) +PASS distributedNodes.item(2) is getNodeInComposedTree(expectedDistributedNodes[2]) +PASS distributedNodes.item(3) is getNodeInComposedTree(expectedDistributedNodes[3]) +PASS distributedNodes.item(4) is getNodeInComposedTree(expectedDistributedNodes[4]) PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-element-distributed-nodes.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-element-distributed-nodes.html index 99b72c9..aada6d0 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-element-distributed-nodes.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-element-distributed-nodes.html
@@ -19,13 +19,13 @@ function assertDistributedNodes(insertionPointId, expectedDistributedNodes) { debug('\ngetDistributedNodes() for "' + insertionPointId + '" should return [' + expectedDistributedNodes + ']'); - var insertionPoint = getNodeInTreeOfTrees(insertionPointId); + var insertionPoint = getNodeInComposedTree(insertionPointId); var distributedNodes = insertionPoint.getDistributedNodes(); window.distributedNodes = distributedNodes; window.expectedDistributedNodes = expectedDistributedNodes; shouldBe("distributedNodes.length", "expectedDistributedNodes.length"); for (var i = 0; i < distributedNodes.length && i < expectedDistributedNodes.length; ++i) { - shouldBe("distributedNodes.item(" + i + ")", "getNodeInTreeOfTrees(expectedDistributedNodes[" + i + "])"); + shouldBe("distributedNodes.item(" + i + ")", "getNodeInComposedTree(expectedDistributedNodes[" + i + "])"); } }
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-pseudo-element-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-pseudo-element-expected.txt index 4c5f5926..295079b2 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-pseudo-element-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-pseudo-element-expected.txt
@@ -4,18 +4,18 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -PASS colorOf(getNodeInTreeOfTrees("host/target")) is not "rgb(255, 0, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/target")) is not "rgb(255, 0, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/target")) is not "rgb(255, 0, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/first-direct-child")) is not "rgb(255, 0, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/second-direct-child")) is not "rgb(255, 0, 0)" -PASS colorOf(getNodeInTreeOfTrees("host-sibling")) is not "rgb(255, 0, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/first-direct-child")) is not "rgb(255, 0, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/second-direct-child")) is not "rgb(255, 0, 0)" -PASS colorOf(getNodeInTreeOfTrees("host-sibling")) is not "rgb(255, 0, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/direct-child")) is "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/not-direct-child")) is not "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host-child")) is not "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/target")) is not "rgb(255, 0, 0)" +PASS colorOf(getNodeInComposedTree("host/target")) is not "rgb(255, 0, 0)" +PASS colorOf(getNodeInComposedTree("host/target")) is not "rgb(255, 0, 0)" +PASS colorOf(getNodeInComposedTree("host/first-direct-child")) is not "rgb(255, 0, 0)" +PASS colorOf(getNodeInComposedTree("host/second-direct-child")) is not "rgb(255, 0, 0)" +PASS colorOf(getNodeInComposedTree("host-sibling")) is not "rgb(255, 0, 0)" +PASS colorOf(getNodeInComposedTree("host/first-direct-child")) is not "rgb(255, 0, 0)" +PASS colorOf(getNodeInComposedTree("host/second-direct-child")) is not "rgb(255, 0, 0)" +PASS colorOf(getNodeInComposedTree("host-sibling")) is not "rgb(255, 0, 0)" +PASS colorOf(getNodeInComposedTree("host/direct-child")) is "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/not-direct-child")) is not "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host-child")) is not "rgb(0, 128, 0)" PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-pseudo-element.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-pseudo-element.html index 9bd9929..c2db559 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-pseudo-element.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-pseudo-element.html
@@ -12,13 +12,13 @@ function colorShouldBe(selector, color) { - var text = 'colorOf(getNodeInTreeOfTrees("' + selector + '"))'; + var text = 'colorOf(getNodeInComposedTree("' + selector + '"))'; shouldBeEqualToString(text, color); } function colorShouldNotBe(selector, color) { - var text = 'colorOf(getNodeInTreeOfTrees("' + selector + '"))'; + var text = 'colorOf(getNodeInComposedTree("' + selector + '"))'; var unevaledString = '"' + color.replace(/\\/g, "\\\\").replace(/"/g, "\"") + '"'; shouldNotBe(text, unevaledString); }
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-root-activeElement.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-root-activeElement.html index 87b538d..8745fa0 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-root-activeElement.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-root-activeElement.html
@@ -26,15 +26,15 @@ createDOM('content', {'select': '#distributed-light-child'})), createDOM('div', {'id': 'distributed-light-child', 'tabindex': 1})))); -var shadowHost1 = getNodeInTreeOfTrees('shadow-host-1'); -var shadowHost2 = getNodeInTreeOfTrees('shadow-host-1/shadow-host-2'); -var shadowRoot1 = getNodeInTreeOfTrees('shadow-host-1/'); -var shadowRoot2 = getNodeInTreeOfTrees('shadow-host-1/shadow-host-2/'); +var shadowHost1 = getNodeInComposedTree('shadow-host-1'); +var shadowHost2 = getNodeInComposedTree('shadow-host-1/shadow-host-2'); +var shadowRoot1 = getNodeInComposedTree('shadow-host-1/'); +var shadowRoot2 = getNodeInComposedTree('shadow-host-1/shadow-host-2/'); var nodeInDocument = document.getElementById('node-in-document'); var distributedLightChild = document.getElementById('distributed-light-child'); -var childInShadowRoot1 = getNodeInTreeOfTrees('shadow-host-1/child-in-shadow-root-1'); -var childInShadowRoot2 = getNodeInTreeOfTrees('shadow-host-1/shadow-host-2/child-in-shadow-root-2'); +var childInShadowRoot1 = getNodeInComposedTree('shadow-host-1/child-in-shadow-root-1'); +var childInShadowRoot2 = getNodeInComposedTree('shadow-host-1/shadow-host-2/child-in-shadow-root-2'); shouldBeDefined("shadowRoot1.activeElement"); shouldBeDefined("shadowRoot2.activeElement");
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-root-blur-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-root-blur-expected.txt index e9fd2146..0559f7b 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-root-blur-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-root-blur-expected.txt
@@ -4,39 +4,39 @@ -getNodeInTreeOfTrees('shadowHostA/childInTreeOne').focus() +getNodeInComposedTree('shadowHostA/childInTreeOne').focus() PASS document.activeElement.id is "shadowHostA" -getNodeInTreeOfTrees('shadowHostA').blur(); +getNodeInComposedTree('shadowHostA').blur(); shadowHostA onblur called! PASS document.activeElement is document.body -PASS getNodeInTreeOfTrees('shadowHostA/').activeElement is null -PASS getNodeInTreeOfTrees('shadowHostA/shadowHostB/').activeElement is null -PASS getNodeInTreeOfTrees('shadowHostC/').activeElement is null -getNodeInTreeOfTrees('shadowHostA/shadowHostB/childInTreeTwo').focus() +PASS getNodeInComposedTree('shadowHostA/').activeElement is null +PASS getNodeInComposedTree('shadowHostA/shadowHostB/').activeElement is null +PASS getNodeInComposedTree('shadowHostC/').activeElement is null +getNodeInComposedTree('shadowHostA/shadowHostB/childInTreeTwo').focus() PASS document.activeElement.id is "shadowHostA" -getNodeInTreeOfTrees('shadowHostA/shadowHostB').blur(); +getNodeInComposedTree('shadowHostA/shadowHostB').blur(); shadowHostB onblur called! shadowHostA onblur called! PASS document.activeElement is document.body -PASS getNodeInTreeOfTrees('shadowHostA/').activeElement is null -PASS getNodeInTreeOfTrees('shadowHostA/shadowHostB/').activeElement is null -PASS getNodeInTreeOfTrees('shadowHostC/').activeElement is null -getNodeInTreeOfTrees('shadowHostA/shadowHostB/childInTreeTwo').focus() +PASS getNodeInComposedTree('shadowHostA/').activeElement is null +PASS getNodeInComposedTree('shadowHostA/shadowHostB/').activeElement is null +PASS getNodeInComposedTree('shadowHostC/').activeElement is null +getNodeInComposedTree('shadowHostA/shadowHostB/childInTreeTwo').focus() PASS document.activeElement.id is "shadowHostA" -getNodeInTreeOfTrees('shadowHostA').blur(); +getNodeInComposedTree('shadowHostA').blur(); shadowHostB onblur called! shadowHostA onblur called! PASS document.activeElement is document.body -PASS getNodeInTreeOfTrees('shadowHostA/').activeElement is null -PASS getNodeInTreeOfTrees('shadowHostA/shadowHostB/').activeElement is null -PASS getNodeInTreeOfTrees('shadowHostC/').activeElement is null -getNodeInTreeOfTrees('shadowHostC/childInTreeThree').focus() +PASS getNodeInComposedTree('shadowHostA/').activeElement is null +PASS getNodeInComposedTree('shadowHostA/shadowHostB/').activeElement is null +PASS getNodeInComposedTree('shadowHostC/').activeElement is null +getNodeInComposedTree('shadowHostC/childInTreeThree').focus() PASS document.activeElement.id is "shadowHostC" -getNodeInTreeOfTrees('shadowHostA').blur(); +getNodeInComposedTree('shadowHostA').blur(); PASS document.activeElement.id is "shadowHostC" -PASS getNodeInTreeOfTrees('shadowHostA/').activeElement is null -PASS getNodeInTreeOfTrees('shadowHostA/shadowHostB/').activeElement is null -PASS getNodeInTreeOfTrees('shadowHostC/').activeElement.id is "childInTreeThree" +PASS getNodeInComposedTree('shadowHostA/').activeElement is null +PASS getNodeInComposedTree('shadowHostA/shadowHostB/').activeElement is null +PASS getNodeInComposedTree('shadowHostC/').activeElement.id is "childInTreeThree" PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-root-blur.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-root-blur.html index 2ac8094..6136326 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-root-blur.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-root-blur.html
@@ -27,44 +27,44 @@ createDOM('p', {'id':'childInTreeThree', 'tabindex':'3'}))) ); -getNodeInTreeOfTrees('shadowHostA').onblur = function() { debug("shadowHostA onblur called!"); } -getNodeInTreeOfTrees('shadowHostA/shadowHostB').onblur = function() { debug("shadowHostB onblur called!"); } +getNodeInComposedTree('shadowHostA').onblur = function() { debug("shadowHostA onblur called!"); } +getNodeInComposedTree('shadowHostA/shadowHostB').onblur = function() { debug("shadowHostB onblur called!"); } // childInTreeOne foucsed - shadowHostA blurred -evalAndLog("getNodeInTreeOfTrees('shadowHostA/childInTreeOne').focus()"); +evalAndLog("getNodeInComposedTree('shadowHostA/childInTreeOne').focus()"); shouldBeEqualToString("document.activeElement.id", "shadowHostA"); -evalAndLog("getNodeInTreeOfTrees('shadowHostA').blur();"); +evalAndLog("getNodeInComposedTree('shadowHostA').blur();"); shouldBe("document.activeElement", "document.body"); -shouldBe("getNodeInTreeOfTrees('shadowHostA/').activeElement", "null"); -shouldBe("getNodeInTreeOfTrees('shadowHostA/shadowHostB/').activeElement", "null"); -shouldBe("getNodeInTreeOfTrees('shadowHostC/').activeElement", "null"); +shouldBe("getNodeInComposedTree('shadowHostA/').activeElement", "null"); +shouldBe("getNodeInComposedTree('shadowHostA/shadowHostB/').activeElement", "null"); +shouldBe("getNodeInComposedTree('shadowHostC/').activeElement", "null"); // childInTreeTwo foucsed - shadowHostB blurred -evalAndLog("getNodeInTreeOfTrees('shadowHostA/shadowHostB/childInTreeTwo').focus()"); +evalAndLog("getNodeInComposedTree('shadowHostA/shadowHostB/childInTreeTwo').focus()"); shouldBeEqualToString("document.activeElement.id", "shadowHostA"); -evalAndLog("getNodeInTreeOfTrees('shadowHostA/shadowHostB').blur();"); +evalAndLog("getNodeInComposedTree('shadowHostA/shadowHostB').blur();"); shouldBe("document.activeElement", "document.body"); -shouldBe("getNodeInTreeOfTrees('shadowHostA/').activeElement", "null"); -shouldBe("getNodeInTreeOfTrees('shadowHostA/shadowHostB/').activeElement", "null"); -shouldBe("getNodeInTreeOfTrees('shadowHostC/').activeElement", "null"); +shouldBe("getNodeInComposedTree('shadowHostA/').activeElement", "null"); +shouldBe("getNodeInComposedTree('shadowHostA/shadowHostB/').activeElement", "null"); +shouldBe("getNodeInComposedTree('shadowHostC/').activeElement", "null"); // childInTreeTwo foucsed - shadowHostA blurred -evalAndLog("getNodeInTreeOfTrees('shadowHostA/shadowHostB/childInTreeTwo').focus()"); +evalAndLog("getNodeInComposedTree('shadowHostA/shadowHostB/childInTreeTwo').focus()"); shouldBeEqualToString("document.activeElement.id", "shadowHostA"); -evalAndLog("getNodeInTreeOfTrees('shadowHostA').blur();"); +evalAndLog("getNodeInComposedTree('shadowHostA').blur();"); shouldBe("document.activeElement", "document.body"); -shouldBe("getNodeInTreeOfTrees('shadowHostA/').activeElement", "null"); -shouldBe("getNodeInTreeOfTrees('shadowHostA/shadowHostB/').activeElement", "null"); -shouldBe("getNodeInTreeOfTrees('shadowHostC/').activeElement", "null"); +shouldBe("getNodeInComposedTree('shadowHostA/').activeElement", "null"); +shouldBe("getNodeInComposedTree('shadowHostA/shadowHostB/').activeElement", "null"); +shouldBe("getNodeInComposedTree('shadowHostC/').activeElement", "null"); // childInTreeThree foucsed - shadowHostA blurred -evalAndLog("getNodeInTreeOfTrees('shadowHostC/childInTreeThree').focus()"); +evalAndLog("getNodeInComposedTree('shadowHostC/childInTreeThree').focus()"); shouldBeEqualToString("document.activeElement.id", "shadowHostC"); -evalAndLog("getNodeInTreeOfTrees('shadowHostA').blur();"); +evalAndLog("getNodeInComposedTree('shadowHostA').blur();"); shouldBeEqualToString("document.activeElement.id", "shadowHostC"); -shouldBe("getNodeInTreeOfTrees('shadowHostA/').activeElement", "null"); -shouldBe("getNodeInTreeOfTrees('shadowHostA/shadowHostB/').activeElement", "null"); -shouldBeEqualToString("getNodeInTreeOfTrees('shadowHostC/').activeElement.id", "childInTreeThree"); +shouldBe("getNodeInComposedTree('shadowHostA/').activeElement", "null"); +shouldBe("getNodeInComposedTree('shadowHostA/shadowHostB/').activeElement", "null"); +shouldBeEqualToString("getNodeInComposedTree('shadowHostC/').activeElement.id", "childInTreeThree"); var successfullyParsed = true; </script>
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-root-touch-listener-crash.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-root-touch-listener-crash.html index 51c08e5b..ef6d709 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-root-touch-listener-crash.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-root-touch-listener-crash.html
@@ -10,7 +10,7 @@ function addTouchEventListeners(name) { - var node = getNodeInTreeOfTrees(name); + var node = getNodeInComposedTree(name); node.addEventListener('touchstart', recordEvent, false); }
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-tree-styles-select-host.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-tree-styles-select-host.html index c71bac76..18377e7 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-tree-styles-select-host.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-tree-styles-select-host.html
@@ -14,7 +14,7 @@ var sandbox = document.getElementById('sandbox'); function borderColorOf(selector) { - return window.getComputedStyle(getNodeInTreeOfTrees(selector)).borderColor; + return window.getComputedStyle(getNodeInComposedTree(selector)).borderColor; } function shouldHaveBorderColor(selector, color) {
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/sibling-rules-under-shadow-root-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/sibling-rules-under-shadow-root-expected.txt index bc1907a..5aedb18 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/sibling-rules-under-shadow-root-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/sibling-rules-under-shadow-root-expected.txt
@@ -3,28 +3,28 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -PASS colorOf(getNodeInTreeOfTrees("host/child2")) is "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child2")) is "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child3")) is "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child1")) is "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child2")) is not "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child3")) is not "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child1")) is not "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child2")) is not "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child3")) is "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child1")) is not "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child2")) is "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child3")) is not "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child1")) is "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child2")) is not "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child3")) is not "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child1")) is not "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child2")) is not "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child3")) is "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child4")) is not "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child1")) is not "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child2")) is "rgb(0, 128, 0)" -PASS colorOf(getNodeInTreeOfTrees("host/child3")) is not "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child2")) is "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child2")) is "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child3")) is "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child1")) is "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child2")) is not "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child3")) is not "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child1")) is not "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child2")) is not "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child3")) is "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child1")) is not "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child2")) is "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child3")) is not "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child1")) is "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child2")) is not "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child3")) is not "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child1")) is not "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child2")) is not "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child3")) is "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child4")) is not "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child1")) is not "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child2")) is "rgb(0, 128, 0)" +PASS colorOf(getNodeInComposedTree("host/child3")) is not "rgb(0, 128, 0)" PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/sibling-rules-under-shadow-root.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/sibling-rules-under-shadow-root.html index c82ba54b..495586a 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/sibling-rules-under-shadow-root.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/sibling-rules-under-shadow-root.html
@@ -18,13 +18,13 @@ function colorShouldBe(selector, color) { - var text = 'colorOf(getNodeInTreeOfTrees("' + selector + '"))'; + var text = 'colorOf(getNodeInComposedTree("' + selector + '"))'; shouldBeEqualToString(text, color); } function colorShouldNotBe(selector, color) { - var text = 'colorOf(getNodeInTreeOfTrees("' + selector + '"))'; + var text = 'colorOf(getNodeInComposedTree("' + selector + '"))'; var unevaledString = '"' + color.replace(/\\/g, "\\\\").replace(/"/g, "\"") + '"'; shouldNotBe(text, unevaledString); } @@ -46,7 +46,7 @@ createDOM('div', {'id': 'child2'}, document.createTextNode('second div'))))); document.body.offsetLeft; -getNodeInTreeOfTrees('host/child1').className = 'target'; +getNodeInComposedTree('host/child1').className = 'target'; colorShouldBe('host/child2', 'rgb(0, 128, 0)'); cleanUp(); @@ -63,7 +63,7 @@ createDOM('div', {'id': 'child3'}, document.createTextNode('third div'))))); document.body.offsetLeft; -getNodeInTreeOfTrees('host/child1').className = 'target'; +getNodeInComposedTree('host/child1').className = 'target'; colorShouldBe('host/child2', 'rgb(0, 128, 0)'); colorShouldBe('host/child3', 'rgb(0, 128, 0)');
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/style-with-deep-combinator-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/style-with-deep-combinator-expected.txt index 7d899a53..cbb219f 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/style-with-deep-combinator-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/style-with-deep-combinator-expected.txt
@@ -5,29 +5,29 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -PASS borderColorOf(getNodeInTreeOfTrees("host/target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/host2/target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("target2")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("target2")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/host2/target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host//target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host//target")) is "rgb(0, 0, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/host2/target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/host2/target")) is "rgb(0, 0, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/host2/host3/target")) is "rgb(0, 0, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/host2/target")) is "rgb(0, 0, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/host2/target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/host2/host3/target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/host2/target")) is "rgb(0, 0, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/host2/host3/target")) is "rgb(0, 0, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("child")) is not "rgb(255, 0, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("inner/target")) is not "rgb(255, 0, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host//target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/x-bar-host/x-bar-target")) is not "rgb(255, 0, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/x-bar-host/x-zot-host/x-zot-target")) is not "rgb(255, 0, 0)" +PASS borderColorOf(getNodeInComposedTree("host/target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/host2/target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("target2")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("target2")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/host2/target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host//target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host//target")) is "rgb(0, 0, 0)" +PASS borderColorOf(getNodeInComposedTree("host/host2/target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/host2/target")) is "rgb(0, 0, 0)" +PASS borderColorOf(getNodeInComposedTree("host/host2/host3/target")) is "rgb(0, 0, 0)" +PASS borderColorOf(getNodeInComposedTree("host/host2/target")) is "rgb(0, 0, 0)" +PASS borderColorOf(getNodeInComposedTree("host/host2/target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/host2/host3/target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/host2/target")) is "rgb(0, 0, 0)" +PASS borderColorOf(getNodeInComposedTree("host/host2/host3/target")) is "rgb(0, 0, 0)" +PASS borderColorOf(getNodeInComposedTree("child")) is not "rgb(255, 0, 0)" +PASS borderColorOf(getNodeInComposedTree("inner/target")) is not "rgb(255, 0, 0)" +PASS borderColorOf(getNodeInComposedTree("host//target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/x-bar-host/x-bar-target")) is not "rgb(255, 0, 0)" +PASS borderColorOf(getNodeInComposedTree("host/x-bar-host/x-zot-host/x-zot-target")) is not "rgb(255, 0, 0)" PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/style-with-deep-combinator.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/style-with-deep-combinator.html index eb41ef14..106f661 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/style-with-deep-combinator.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/style-with-deep-combinator.html
@@ -17,13 +17,13 @@ function borderColorShouldBe(selector, color) { - var text = 'borderColorOf(getNodeInTreeOfTrees("' + selector + '"))'; + var text = 'borderColorOf(getNodeInComposedTree("' + selector + '"))'; shouldBeEqualToString(text, color); } function borderColorShouldNotBe(selector, color) { - var text = 'borderColorOf(getNodeInTreeOfTrees("' + selector + '"))'; + var text = 'borderColorOf(getNodeInComposedTree("' + selector + '"))'; var unevaledString = '"' + color.replace(/\\/g, "\\\\").replace(/"/g, "\"") + '"'; shouldNotBe(text, unevaledString); }
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/style-with-shadow-pseudo-element-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/style-with-shadow-pseudo-element-expected.txt index 9b01aa6..f26a9ce4 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/style-with-shadow-pseudo-element-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/style-with-shadow-pseudo-element-expected.txt
@@ -5,28 +5,28 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -PASS borderColorOf(getNodeInTreeOfTrees("host/top-div")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/top-span")) is not "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/not-top-div")) is not "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/not-top-span")) is not "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/span1")) is not "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/host1/span2")) is not "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/host1/host2/span3")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/host1/host2/host3/span4")) is not "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/target")) is "rgb(255, 0, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host//target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host//target")) is "rgb(0, 0, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/host2/target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/target")) is "rgb(0, 0, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/host2/target")) is "rgb(0, 0, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/host2/target")) is "rgb(0, 128, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/host2/target")) is "rgb(0, 0, 0)" -PASS borderColorOf(getNodeInTreeOfTrees("host/x-bar-host/x-zot-host/x-zot-target")) is not "rgb(255, 0, 0)" +PASS borderColorOf(getNodeInComposedTree("host/top-div")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/top-span")) is not "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/not-top-div")) is not "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/not-top-span")) is not "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/span1")) is not "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/host1/span2")) is not "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/host1/host2/span3")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/host1/host2/host3/span4")) is not "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/target")) is "rgb(255, 0, 0)" +PASS borderColorOf(getNodeInComposedTree("host/target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host//target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host//target")) is "rgb(0, 0, 0)" +PASS borderColorOf(getNodeInComposedTree("host/host2/target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/target")) is "rgb(0, 0, 0)" +PASS borderColorOf(getNodeInComposedTree("host/host2/target")) is "rgb(0, 0, 0)" +PASS borderColorOf(getNodeInComposedTree("host/host2/target")) is "rgb(0, 128, 0)" +PASS borderColorOf(getNodeInComposedTree("host/host2/target")) is "rgb(0, 0, 0)" +PASS borderColorOf(getNodeInComposedTree("host/x-bar-host/x-zot-host/x-zot-target")) is not "rgb(255, 0, 0)" PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/style-with-shadow-pseudo-element.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/style-with-shadow-pseudo-element.html index 3177ccf..49297356 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/style-with-shadow-pseudo-element.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/style-with-shadow-pseudo-element.html
@@ -19,13 +19,13 @@ function borderColorShouldBe(selector, color) { - var text = 'borderColorOf(getNodeInTreeOfTrees("' + selector + '"))'; + var text = 'borderColorOf(getNodeInComposedTree("' + selector + '"))'; shouldBeEqualToString(text, color); } function borderColorShouldNotBe(selector, color) { - var text = 'borderColorOf(getNodeInTreeOfTrees("' + selector + '"))'; + var text = 'borderColorOf(getNodeInComposedTree("' + selector + '"))'; var unevaledString = '"' + color.replace(/\\/g, "\\\\").replace(/"/g, "\"") + '"'; shouldNotBe(text, unevaledString); }
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/stylesheets-order-in-shadow-dom-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/stylesheets-order-in-shadow-dom-expected.txt index b162f03..74c265d 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/stylesheets-order-in-shadow-dom-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/stylesheets-order-in-shadow-dom-expected.txt
@@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -PASS window.getComputedStyle(getNodeInTreeOfTrees("host/world")).color is "rgb(255, 255, 0)" +PASS window.getComputedStyle(getNodeInComposedTree("host/world")).color is "rgb(255, 255, 0)" PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/stylesheets-order-in-shadow-dom.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/stylesheets-order-in-shadow-dom.html index e8f5666..7072ae1 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/stylesheets-order-in-shadow-dom.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/stylesheets-order-in-shadow-dom.html
@@ -26,5 +26,5 @@ createDOM('span', {'id': 'world', 'class': 'hello world' }, document.createTextNode("World"))))); -shouldBe('window.getComputedStyle(getNodeInTreeOfTrees("host/world")).color', '"rgb(255, 255, 0)"'); +shouldBe('window.getComputedStyle(getNodeInComposedTree("host/world")).color', '"rgb(255, 255, 0)"'); </script>
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/surround-contents-with-shadow-dom.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/surround-contents-with-shadow-dom.html index 20a4593..8533cc94 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/surround-contents-with-shadow-dom.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/surround-contents-with-shadow-dom.html
@@ -31,13 +31,13 @@ function testSurroundContents(description, targetPath, newParent) { test(function () { - var target = getNodeInTreeOfTrees(targetPath); + var target = getNodeInComposedTree(targetPath); var range = document.createRange(); range.selectNode(target); assert_throws("HierarchyRequestError", function () { range.surroundContents(newParent); }); - var targetAfter = getNodeInTreeOfTrees(targetPath); + var targetAfter = getNodeInComposedTree(targetPath); assert_equals(targetAfter, target, "DOM should not change after HierarchyRequestError"); }, description); }
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/text-node-distributed-crash.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/text-node-distributed-crash.html index cbe9afe..2ff364e2 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/text-node-distributed-crash.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/text-node-distributed-crash.html
@@ -14,7 +14,7 @@ createShadowRoot()), createDOM('shadow', {})))); document.body.offsetLeft; - getNodeInTreeOfTrees('div1//div2').appendChild( + getNodeInComposedTree('div1//div2').appendChild( createDOM('div', {'id': 'div3'}, createDOM('shadow', {}))); document.body.offsetLeft;
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/tooltips-in-shadow.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/tooltips-in-shadow.html index 34732a3..c3f2cfb 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/tooltips-in-shadow.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/tooltips-in-shadow.html
@@ -17,15 +17,15 @@ label1 = 'Case1: Non-Nested'; container.appendChild(D('div', {'id': 'host1'}, S(D('a', {'id': 'target1', 'title': label1}, document.createTextNode("Hello1"))))); - cases.push({ target: getNodeInTreeOfTrees('host1/target1'), expected: label1 }); + cases.push({ target: getNodeInComposedTree('host1/target1'), expected: label1 }); label2 = 'Case 2: Nested'; container.appendChild(D('div', {'id': 'host2'}, S(D('div', {'id': 'host2b'}, S(D('a', {'id': 'target2', 'title': label2}, document.createTextNode("Hello2"))))))); - cases.push({ target: getNodeInTreeOfTrees('host2/host2b/target2'), expected: label2 }); + cases.push({ target: getNodeInComposedTree('host2/host2b/target2'), expected: label2 }); label3 = 'Case 3: Multiple Shadow'; container.appendChild(D('div', {'id': 'host3'}, S(D('div', {'id': 'scope3a'})), S(D('a', {'id': 'scope3b', 'title': label3 }, document.createTextNode("Hello3"))))); - cases.push({ target: getNodeInTreeOfTrees('host3//scope3b'), expected: label3 }); + cases.push({ target: getNodeInComposedTree('host3//scope3b'), expected: label3 }); return cases; }
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/touch-event-retargeting.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/touch-event-retargeting.html index ad6fdda..40cfc97 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/touch-event-retargeting.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/touch-event-retargeting.html
@@ -44,7 +44,7 @@ { eventSender.clearTouchPoints(); for (var i = 0; i < elements.length; ++i) - addTouchPoint(getNodeInTreeOfTrees(elements[i])); + addTouchPoint(getNodeInComposedTree(elements[i])); eventSender.touchStart(); eventSender.touchEnd(); }
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/update-text-of-style-in-shadow-dom.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/update-text-of-style-in-shadow-dom.html index dd60b7f..0217d04 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/update-text-of-style-in-shadow-dom.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/update-text-of-style-in-shadow-dom.html
@@ -27,8 +27,8 @@ document.createTextNode('This span should have green border.'))))); document.body.offsetLeft; -getNodeInTreeOfTrees('host/style').innerHTML = 'span { border: 1px solid green; }'; +getNodeInComposedTree('host/style').innerHTML = 'span { border: 1px solid green; }'; -shouldHaveBorderColor(getNodeInTreeOfTrees('host/target'), 'rgb(0, 128, 0)'); +shouldHaveBorderColor(getNodeInComposedTree('host/target'), 'rgb(0, 128, 0)'); </script> </html>
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/v1-slots-text-nodes.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/v1-slots-text-nodes.html index 979c61c..5659d49 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/v1-slots-text-nodes.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/v1-slots-text-nodes.html
@@ -14,6 +14,7 @@ <div id='child2'></div> World <div id='child3' slot='nonexistent'></div> + <!-- comment node --> </div> <script> 'use strict'; @@ -28,12 +29,16 @@ const textHello = host.childNodes[1]; const textWorld = host.childNodes[3]; +const commentNode = child3.nextSibling; test(() => { assert_equals(textHello.nodeValue.trim(), 'Hello'); assert_equals(textWorld.nodeValue.trim(), 'World'); + assert_equals(commentNode.nodeType, Node.COMMENT_NODE); + assert_equals(textHello.assignedSlot, defaultSlot); assert_equals(textWorld.assignedSlot, defaultSlot); + assert_equals(commentNode.assignedSlot, undefined, "Comment Node does not define assignedSlot"); assert_equals(child1.assignedSlot, slot1); assert_equals(child2.assignedSlot, defaultSlot); assert_equals(child3.assignedSlot, null); @@ -42,7 +47,7 @@ test(() => { assert_array_equals(defaultSlot.getAssignedNodes({flatten: true}), [textHello, child2, textWorld]); assert_array_equals(slot1.getAssignedNodes({flatten: true}), [child1]); -}, "getDistributedNodes"); +}, "getAssignedNodes"); add_completion_callback(() => { if (window.testRunner)
diff --git a/third_party/WebKit/LayoutTests/fast/events/space-scroll-textinput-canceled-expected.txt b/third_party/WebKit/LayoutTests/fast/events/space-scroll-textinput-canceled-expected.txt new file mode 100644 index 0000000..ce26baa --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/events/space-scroll-textinput-canceled-expected.txt
@@ -0,0 +1,8 @@ +Tests that page shouldn't scroll when you hit space key on input field and 'textInput' event was canceled. + +PASS document.scrollingElement.scrollTop became 0 +PASS successfullyParsed is true + +TEST COMPLETE + +
diff --git a/third_party/WebKit/LayoutTests/fast/events/space-scroll-textinput-canceled.html b/third_party/WebKit/LayoutTests/fast/events/space-scroll-textinput-canceled.html new file mode 100644 index 0000000..84ca746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/events/space-scroll-textinput-canceled.html
@@ -0,0 +1,55 @@ +<!DOCTYPE html> +<html> +<head> +<script src="../../resources/js-test.js"></script> +<style type="text/css"> +::-webkit-scrollbar { + width: 0px; + height: 0px; +} +</style> +</head> +<body style="margin:0" onload="runTest();"> +<p> + Tests that page shouldn't scroll when you hit space key on input field + and 'textInput' event was canceled. +</p> +<div id="console"></div> + +<input type="text" id="txt" /> +<div style="height: 2000px;"></div> + +<script type="text/javascript"> +var txt = document.getElementById('txt'); +txt.addEventListener('textInput', function(e) { + if (e.data === ' ') { + e.preventDefault(); + } +}, false); + +function focusAndPressSpace() +{ + document.getElementById('txt').focus(); + // Leave some space for pageUp + document.scrollingElement.scrollTop = window.innerHeight / 2; + + eventSender.keyDown("pageUp", []); + // Space key shouldn't cancel pageUp + eventSender.keyDown(" ", []); + + // pageUp should finish + shouldBecomeEqual("document.scrollingElement.scrollTop", "0", finishJSTest); +} + +jsTestIsAsync = true; + +function runTest() +{ + if (window.eventSender) { + focusAndPressSpace(); + } +} +</script> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/fast/parser/base-with-non-ascii-expected.txt b/third_party/WebKit/LayoutTests/fast/parser/base-with-non-ascii-expected.txt new file mode 100644 index 0000000..11ba6ae --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/parser/base-with-non-ascii-expected.txt
@@ -0,0 +1 @@ +http://example.com/%E5%A4%A7%E6%B4%97%E3%81%82%E3%82%93%E3%81%93%E3%81%86%E7%A5%AD%E3%82%8A/foo.html
diff --git a/third_party/WebKit/LayoutTests/fast/parser/base-with-non-ascii.html b/third_party/WebKit/LayoutTests/fast/parser/base-with-non-ascii.html new file mode 100644 index 0000000..ce0b1d1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/parser/base-with-non-ascii.html
@@ -0,0 +1,15 @@ +<html> +<head> +<meta charset="utf-8"> +<base href="http://example.com/大洗あんこう祭り/"> +</head> +<body> +<a id="a" href="foo.html"></a> +<div id="result"></div> +<script> +if (window.testRunner) + testRunner.dumpAsText(); +document.getElementById('result').innerText = document.getElementById('a').href; +</script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/fast/parser/base-with-surrogate-pair-expected.txt b/third_party/WebKit/LayoutTests/fast/parser/base-with-surrogate-pair-expected.txt new file mode 100644 index 0000000..36f636d --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/parser/base-with-surrogate-pair-expected.txt
@@ -0,0 +1 @@ +http://example.com/%F0%A0%B7%A1/foo.html
diff --git a/third_party/WebKit/LayoutTests/fast/parser/base-with-surrogate-pair.html b/third_party/WebKit/LayoutTests/fast/parser/base-with-surrogate-pair.html new file mode 100644 index 0000000..c7f3981 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/parser/base-with-surrogate-pair.html
@@ -0,0 +1,15 @@ +<html> +<head> +<meta charset="utf-8"> +<base href="http://example.com/𠷡/"> +</head> +<body> +<a id="a" href="foo.html"></a> +<div id="result"></div> +<script> +if (window.testRunner) + testRunner.dumpAsText(); +document.getElementById('result').innerText = document.getElementById('a').href; +</script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/fast/sub-pixel/sub-pixel-precision-on-height-of-replaced-element-expected.txt b/third_party/WebKit/LayoutTests/fast/sub-pixel/sub-pixel-precision-on-height-of-replaced-element-expected.txt new file mode 100644 index 0000000..298a4605 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/sub-pixel/sub-pixel-precision-on-height-of-replaced-element-expected.txt
@@ -0,0 +1,8 @@ +crbug.com/573055: There should be no scrollbars below. + +Text +PASS +Text +PASS +Text +PASS
diff --git a/third_party/WebKit/LayoutTests/fast/sub-pixel/sub-pixel-precision-on-height-of-replaced-element.html b/third_party/WebKit/LayoutTests/fast/sub-pixel/sub-pixel-precision-on-height-of-replaced-element.html new file mode 100644 index 0000000..98fa078c --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/sub-pixel/sub-pixel-precision-on-height-of-replaced-element.html
@@ -0,0 +1,25 @@ +<!DOCTYPE html> +<style> +#container { + overflow: auto; + font: 10px Ahem; +} +#replaced { + display: inline-block; +} +</style> +<script src="../../resources/check-layout.js"></script> +<p> crbug.com/573055: There should be no scrollbars below. </p> +<div id='container' data-expected-height=16> + <div id="replaced" style="padding: 3.23px">Text</div> +</div> +<div id='container' data-expected-height=17> + <div id="replaced" style="padding: 3.73px">Text</div> +</div> +<div id='container' data-expected-height=18> + <div id="replaced" style="padding: 3.77px">Text</div> +</div> +<script> + checkLayout("#container"); +</script> +
diff --git a/third_party/WebKit/LayoutTests/fast/transforms/mirror-transform-tiled-scaled-background-expected.html b/third_party/WebKit/LayoutTests/fast/transforms/mirror-transform-tiled-scaled-background-expected.html deleted file mode 100644 index 7f326a8..0000000 --- a/third_party/WebKit/LayoutTests/fast/transforms/mirror-transform-tiled-scaled-background-expected.html +++ /dev/null
@@ -1,2 +0,0 @@ -<!DOCTYPE html> -<div style="width: 100px; height: 100px; background-color: #080"></div>
diff --git a/third_party/WebKit/LayoutTests/fast/transforms/mirror-transform-tiled-scaled-background-expected.png b/third_party/WebKit/LayoutTests/fast/transforms/mirror-transform-tiled-scaled-background-expected.png new file mode 100644 index 0000000..f2d02f167 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/transforms/mirror-transform-tiled-scaled-background-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/transforms/mirror-transform-tiled-scaled-background-expected.txt b/third_party/WebKit/LayoutTests/fast/transforms/mirror-transform-tiled-scaled-background-expected.txt new file mode 100644 index 0000000..e7c4258 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/transforms/mirror-transform-tiled-scaled-background-expected.txt
@@ -0,0 +1,8 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x116 + LayoutBlockFlow {HTML} at (0,0) size 800x116 + LayoutBlockFlow {BODY} at (8,8) size 784x100 + LayoutBlockFlow {DIV} at (0,0) size 100x100 +layer at (8,8) size 100x100 + LayoutBlockFlow {DIV} at (0,0) size 100x100
diff --git a/third_party/WebKit/LayoutTests/http/tests/notifications/resources/instrumentation-service-worker.js b/third_party/WebKit/LayoutTests/http/tests/notifications/resources/instrumentation-service-worker.js index a46fa7b..6a1991e 100644 --- a/third_party/WebKit/LayoutTests/http/tests/notifications/resources/instrumentation-service-worker.js +++ b/third_party/WebKit/LayoutTests/http/tests/notifications/resources/instrumentation-service-worker.js
@@ -102,3 +102,9 @@ notification: notificationCopy, action: event.action }); }); + +addEventListener('notificationclose', function(event) { + var notificationCopy = cloneNotification(event.notification); + messagePort.postMessage({ command: 'close', + notification: notificationCopy }); +});
diff --git a/third_party/WebKit/LayoutTests/http/tests/notifications/resources/notification-data-reflection-test.js b/third_party/WebKit/LayoutTests/http/tests/notifications/resources/notification-data-reflection-test.js new file mode 100644 index 0000000..160483a --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/notifications/resources/notification-data-reflection-test.js
@@ -0,0 +1,70 @@ +// Tests that the notification available after the given operation is executed +// accurately reflects the data attributes of several types with which the +// notification was created in the document. +function runNotificationDataReflectionTest(test, notificationOperation) { + var scope = 'resources/scope/' + location.pathname, + script = 'resources/instrumentation-service-worker.js'; + + // Set notification's data of several types to a structured clone of options's data. + var notificationDataList = new Array( + true, // Check Boolean type + 1024, // Check Number type + Number.NaN, // Check Number.NaN type + 'any data', // Check String type + null, // Check null + new Array('Saab', 'Volvo', 'BMW'), // Check Array type + { first: 'first', second: 'second' } // Check object + ); + + PermissionsHelper.setPermission('notifications', 'granted').then(function() { + getActiveServiceWorkerWithMessagePort(test, script, scope).then(function(workerInfo) { + // (1) Tell the Service Worker to display a Web Notification. + var assertNotificationDataReflects = function(pos) { + workerInfo.port.postMessage({ + command: 'show', + + title: scope, + options: { + title: scope, + tag: pos, + data: notificationDataList[pos] + } + }); + }; + + workerInfo.port.addEventListener('message', function(event) { + if (typeof event.data != 'object' || !event.data.command) { + assert_unreached('Invalid message from the Service Worker.'); + return; + } + + // (2) Listen for confirmation from the Service Worker that the + // notification's display promise has been resolved. + if (event.data.command == 'show') { + assert_true(event.data.success, 'The notification must have been displayed.'); + notificationOperation.run(scope); + return; + } + + // (3) Listen for confirmation from the Service Worker that the + // notification has been closed. Make sure that all properties + // set on the Notification object are as expected. + assert_equals(event.data.command, notificationOperation.name, 'Notification was expected to receive different operation'); + + var pos = event.data.notification.tag; + + if (typeof notificationDataList[pos] === 'object' && notificationDataList[pos] !== null) + assert_object_equals(event.data.notification.data, notificationDataList[pos], 'The data field must be the same.'); + else + assert_equals(event.data.notification.data, notificationDataList[pos], 'The data field must be the same.'); + + if (++pos < notificationDataList.length) + assertNotificationDataReflects(pos); + else + test.done(); + }); + + assertNotificationDataReflects(0); + }).catch(unreached_rejection(test)); + }); +}
diff --git a/third_party/WebKit/LayoutTests/http/tests/notifications/serviceworker-notificationclick-event-data-reflection.html b/third_party/WebKit/LayoutTests/http/tests/notifications/serviceworker-notificationclick-event-data-reflection.html index 693f0ac..570fb24 100644 --- a/third_party/WebKit/LayoutTests/http/tests/notifications/serviceworker-notificationclick-event-data-reflection.html +++ b/third_party/WebKit/LayoutTests/http/tests/notifications/serviceworker-notificationclick-event-data-reflection.html
@@ -2,9 +2,11 @@ <html> <head> <title>Notifications: data property reflection in the "notificationclick" event.</title> + <script src="../resources/permissions-helper.js"></script> <script src="../resources/testharness.js"></script> <script src="../resources/testharnessreport.js"></script> <script src="../serviceworker/resources/test-helpers.js"></script> + <script src="resources/notification-data-reflection-test.js"></script> <script src="resources/test-helpers.js"></script> </head> <body> @@ -14,71 +16,12 @@ // with which the notification was created (for this test --) in the document. async_test(function(test) { - var scope = 'resources/scope/' + location.pathname, - script = 'resources/instrumentation-service-worker.js'; - - // Set notification's data of several type to a structured clone of options's data. - var notificationDataList = new Array( - true, // Check Boolean type - 1024, // Check Number type - Number.NaN, // Check Number.NaN type - 'any data', // Check String type - null, // Check null - new Array('Saab', 'Volvo', 'BMW'), // Check Array type - { first: 'first', second: 'second' } // Check object - ); - - testRunner.setPermission('notifications', 'granted', location.origin, location.origin); - getActiveServiceWorkerWithMessagePort(test, script, scope).then(function(workerInfo) { - // (1) Tell the Service Worker to display a Web Notification. - var assertNotificationDataReflects = function(pos) { - workerInfo.port.postMessage({ - command: 'show', - - title: scope, - options: { - title: scope, - tag: pos, - data: notificationDataList[pos] - } - }); - }; - - workerInfo.port.addEventListener('message', function(event) { - if (typeof event.data != 'object' || !event.data.command) { - assert_unreached('Invalid message from the Service Worker.'); - return; - } - - // (2) Listen for confirmation from the Service Worker that the - // notification's display promise has been resolved. - if (event.data.command == 'show') { - assert_true(event.data.success, 'The notification must have been displayed.'); - testRunner.simulateWebNotificationClick(scope, -1 /* action_index */); - return; - } - - // (3) Listen for confirmation from the Service Worker that the - // notification has been clicked on. Make sure that all properties - // set on the Notification object are as expected. - assert_equals(event.data.command, 'click', 'The notification was expected to be clicked.'); - - var pos = event.data.notification.tag; - - if (typeof notificationDataList[pos] === 'object' && notificationDataList[pos] !== null) - assert_object_equals(event.data.notification.data, notificationDataList[pos], 'The data field must be the same.'); - else - assert_equals(event.data.notification.data, notificationDataList[pos], 'The data field must be the same.'); - - if (++pos < notificationDataList.length) - assertNotificationDataReflects(pos); - else - test.done(); - }); - - assertNotificationDataReflects(0); - }).catch(unreached_rejection(test)); - + runNotificationDataReflectionTest(test, { + run: function (scope) { + testRunner.simulateWebNotificationClick(scope, -1 /* action_index */); + }, + name: 'click' + }); }, 'Clicking on a notification displayed by a Service Worker the notificationclick event.'); </script> </body>
diff --git a/third_party/WebKit/LayoutTests/http/tests/notifications/serviceworker-notificationclose-event-data-reflection.html b/third_party/WebKit/LayoutTests/http/tests/notifications/serviceworker-notificationclose-event-data-reflection.html new file mode 100644 index 0000000..9203c27 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/notifications/serviceworker-notificationclose-event-data-reflection.html
@@ -0,0 +1,28 @@ +<!doctype html> +<html> + <head> + <title>Notifications: Action reflection in the "notificationclose" event.</title> + <script src="../resources/permissions-helper.js"></script> + <script src="../resources/testharness.js"></script> + <script src="../resources/testharnessreport.js"></script> + <script src="../serviceworker/resources/test-helpers.js"></script> + <script src="resources/notification-data-reflection-test.js"></script> + <script src="resources/test-helpers.js"></script> + </head> + <body> + <script> + // Tests that the notification available in the "notificationclose" event in the + // Service Worker accurately reflects the data attributes of several type + // with which the notification was created (for this test --) in the document. + + async_test(function(test) { + runNotificationDataReflectionTest(test, { + run: function (scope) { + testRunner.simulateWebNotificationClose(scope, true /* by_user */); + }, + name: 'close' + }); + }, 'NotificationEvent data property should be reflected when the notification is closed by the user.'); + </script> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/opened-document-security-origin-resets-on-navigation-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/opened-document-security-origin-resets-on-navigation-expected.txt deleted file mode 100644 index 30a60f96..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/security/opened-document-security-origin-resets-on-navigation-expected.txt +++ /dev/null
@@ -1,5 +0,0 @@ -CONSOLE ERROR: line 1: Uncaught SecurityError: Blocked a frame with origin "http://127.0.0.1:8000" from accessing a frame with origin "http://localhost:8000". Protocols, domains, and ports must match. -PASS successfullyParsed is true - -TEST COMPLETE -
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/opened-document-security-origin-resets-on-navigation.html b/third_party/WebKit/LayoutTests/http/tests/security/opened-document-security-origin-resets-on-navigation.html deleted file mode 100644 index c03e0ad..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/security/opened-document-security-origin-resets-on-navigation.html +++ /dev/null
@@ -1,25 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<script src="/js-test-resources/js-test.js"></script> -<script> -var jsTestIsAsync = true; -function runTest() { - var frame = document.body.appendChild(document.createElement("iframe")); - frame.src = "http://localhost:8000/security/resources/opened-document-security-origin-resets-on-navigation-frame.html"; - frame.onload = function () { - frame.onload = null; - var blob = new Blob(["<script>(" + function () { - frame = document.documentElement.appendChild(document.createElement("iframe")); - frame.contentWindow.setTimeout("parent.document.open()", 0); - setTimeout(function () { - location = "javascript:'<script>setTimeout(top.finishJSTest, 0); parent.eval(\"alert(location)\"); top.testFailed(\"context security origin was not updated!\");</scr" + "ipt>'" }, 0); - } + "())</sc" + "ript>"], {type: "text/html"}); - frame.contentWindow[0].location = URL.createObjectURL(blob); - } -} -</script> -</head> -<body onload="runTest()"> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/referrer-policy-attribute-area-no-referrer-when-downgrade.html b/third_party/WebKit/LayoutTests/http/tests/security/referrer-policy-attribute-area-no-referrer-when-downgrade.html new file mode 100644 index 0000000..446e9d69 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/security/referrer-policy-attribute-area-no-referrer-when-downgrade.html
@@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/get-host-info.js"></script> +</head> +<body> + <map> + <area href="http://127.0.0.1:8000/security/resources/referrer-attr-anchor-target.html#no-referrer-when-downgrade" + referrerpolicy="no-referrer-when-downgrade" id="click-me"> + </map> + <script> + if (window.location.origin != get_host_info().HTTPS_ORIGIN) { + window.location = get_host_info().HTTPS_ORIGIN + window.location.pathname; + } else { + document.getElementById("click-me").click(); + } + </script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/referrer-policy-attribute-area-no-referrer.html b/third_party/WebKit/LayoutTests/http/tests/security/referrer-policy-attribute-area-no-referrer.html new file mode 100644 index 0000000..a7f8e63a --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/security/referrer-policy-attribute-area-no-referrer.html
@@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> +</head> +<body> + <map> + <area href="resources/referrer-attr-anchor-target.html#no-referrer" + referrerpolicy="no-referrer" id="click-me"> + </map> + <script> + document.getElementById("click-me").click(); + </script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/referrer-policy-attribute-area-origin-when-crossorigin.html b/third_party/WebKit/LayoutTests/http/tests/security/referrer-policy-attribute-area-origin-when-crossorigin.html new file mode 100644 index 0000000..cdbb0cc3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/security/referrer-policy-attribute-area-origin-when-crossorigin.html
@@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> +</head> +<body> + <map> + <area href="http://localhost:8000/security/resources/referrer-attr-anchor-target.html#origin-when-crossorigin" + referrerpolicy="origin-when-crossorigin" id="click-me"> + </map> + <script> + document.getElementById("click-me").click(); + </script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/referrer-policy-attribute-area-origin.html b/third_party/WebKit/LayoutTests/http/tests/security/referrer-policy-attribute-area-origin.html new file mode 100644 index 0000000..d535358 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/security/referrer-policy-attribute-area-origin.html
@@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> +</head> +<body> + <map> + <area href="resources/referrer-attr-anchor-target.html#origin" + referrerpolicy="origin" id="click-me"> + </map> + <script> + document.getElementById("click-me").click(); + </script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/referrer-policy-attribute-area-unsafe-url.html b/third_party/WebKit/LayoutTests/http/tests/security/referrer-policy-attribute-area-unsafe-url.html new file mode 100644 index 0000000..68a3004 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/security/referrer-policy-attribute-area-unsafe-url.html
@@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> +</head> +<body> + <map> + <area href="http://localhost:8000/security/resources/referrer-attr-area-unsafe-url-target.html" + referrerpolicy="unsafe-url" id="click-me"> + </map> + <script> + document.getElementById("click-me").click(); + </script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/resources/opened-document-security-origin-resets-on-navigation-frame.html b/third_party/WebKit/LayoutTests/http/tests/security/resources/opened-document-security-origin-resets-on-navigation-frame.html deleted file mode 100644 index 9edd3604..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/security/resources/opened-document-security-origin-resets-on-navigation-frame.html +++ /dev/null
@@ -1,6 +0,0 @@ -<!DOCTYPE html> -<html> -<body> -<iframe src="/resources/dummy.html"></iframe> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/resources/referrer-attr-area-unsafe-url-target.html b/third_party/WebKit/LayoutTests/http/tests/security/resources/referrer-attr-area-unsafe-url-target.html new file mode 100644 index 0000000..e1fe871 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/security/resources/referrer-attr-area-unsafe-url-target.html
@@ -0,0 +1,15 @@ +<!DOCTYPE html> +<html> +<head> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> +</head> +<body> + <script> + var expected_referrer = "http://127.0.0.1:8000/security/referrer-policy-attribute-area-unsafe-url.html"; + test(function () { + assert_equals(expected_referrer, document.referrer); + }, "unsafe-url referrer policy attribute on area element is applied"); + </script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/subresourceIntegrity/subresource-integrity-block-same-resource-twice.html b/third_party/WebKit/LayoutTests/http/tests/security/subresourceIntegrity/subresource-integrity-block-same-resource-twice.html new file mode 100644 index 0000000..2534aa64 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/security/subresourceIntegrity/subresource-integrity-block-same-resource-twice.html
@@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html> + <head> + <title>SRI allows multiple hash values, valid if any passes among strongest</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + </head> + <body> + <script> + // Regression test for https://crbug.com/584155 + function insertScript(errorCallback) { + var script = document.createElement('script'); + script.src = 'fail.js'; + script.crossOrigin = 'anonymous'; + script.integrity = "sha256-deadbeef"; + script.onload = function() { assert_unreached(); } + script.onerror = errorCallback; + document.head.appendChild(script); + } + + insertScript(function() { + insertScript(function() { done(); }); + }); + </script> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/README.md b/third_party/WebKit/LayoutTests/imported/csswg-test/README.md index e703d1a..41e833d 100644 --- a/third_party/WebKit/LayoutTests/imported/csswg-test/README.md +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/README.md
@@ -33,11 +33,11 @@ For CSS tests, you must also be sure you’re linking to a specific level of the spec, generally the first level where the feature being tested is defined. Where possible, it’s preferable to link to the official version of the spec, which will start with -http://www.w3.org/TR/. This can usually be found as the ‘Latest version’ link in the +https://www.w3.org/TR/. This can usually be found as the ‘Latest version’ link in the spec itself and will include the level of the spec in the URL. For example, the proper link to level 1 of the CSS Flexbox spec is: -http://www.w3.org/TR/css-flexbox-1/#RELEVANT_SECTION +https://www.w3.org/TR/css-flexbox-1/#RELEVANT_SECTION When testing features not yet available in an official draft, link to the appropriate Editor’s Draft found at https://drafts.csswg.org/. Be sure to include the level of the
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/border-padding-bleed-001-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/border-padding-bleed-001-expected.xht new file mode 100644 index 0000000..10fe3e0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/border-padding-bleed-001-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: green; + height: 80px; + width: 640px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a filled green rectangle and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/border-padding-bleed-001.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/border-padding-bleed-001.xht new file mode 100644 index 0000000..19622c47 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/border-padding-bleed-001.xht
@@ -0,0 +1,48 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Test: line-height - border-top and padding-top of inline non-replaced element paint over previous line box</title> + + <!-- + Inspired by + http://archive.webstandards.org/css/winie/inline.html + --> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" title="10.8.1 Leading and half-leading" /> + <link rel="bookmark" href="http://archive.webstandards.org/css/winie/inline.html" /> + <link rel="match" href="border-padding-bleed-001-ref.xht" /> + + <meta content="ahem" name="flags" /> + <meta content="Although margins, borders and padding of inline non-replaced elements do not enter into the line box calculation, they are still rendered around inline boxes. This means that if the height specified by 'line-height' (40px in this testcase) is equal to the content height (40px in this testcase) of contained boxes, then background-color of padding-top area and border-top may 'bleed' into the adjoining preceding line box. Since line boxes are rendered in document order, this causes padding-top and border-top of 2nd line box (the span element in this testcase) to be painted over border-bottom and padding-bottom of inline boxes of previous line and, in this testcase, over the 1st line box." name="assert" /> + + <style type="text/css"><![CDATA[ + div + { + color: red; + font: 40px/1 Ahem; + } + + span + { + background-color: green; /* so that padding-top area is painted green */ + border-top: green solid 15px; + color: green; + padding-top: 25px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a filled green rectangle and <strong>no red</strong>.</p> + + <div>shuldboverlaPPed<br /> + <span>bleedover1stline</span></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/border-padding-bleed-002-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/border-padding-bleed-002-expected.xht new file mode 100644 index 0000000..10fe3e0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/border-padding-bleed-002-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: green; + height: 80px; + width: 640px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a filled green rectangle and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/border-padding-bleed-002.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/border-padding-bleed-002.xht new file mode 100644 index 0000000..958c7f2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/border-padding-bleed-002.xht
@@ -0,0 +1,47 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Test: line-height - padding-top of inline non-replaced element paint over previous line box</title> + + <!-- + Inspired by + http://archive.webstandards.org/css/winie/inline.html + --> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" title="10.8.1 Leading and half-leading" /> + <link rel="bookmark" href="http://archive.webstandards.org/css/winie/inline.html" /> + <link rel="match" href="border-padding-bleed-001-ref.xht" /> + + <meta content="ahem" name="flags" /> + <meta content="Although margins, borders and padding of inline non-replaced elements do not enter into the line box calculation, they are still rendered around inline boxes. This means that if the height specified by 'line-height' (40px in this testcase) is equal to the content height (40px in this testcase) of contained boxes, then background-color of padding-top area and border-top may 'bleed' into the adjoining preceding line box. Since line boxes are rendered in document order, this causes padding-top of 2nd line box (the span element in this testcase) to be painted over border-bottom and padding-bottom of inline boxes of previous line and, in this testcase, over the 1st line box." name="assert" /> + + <style type="text/css"><![CDATA[ + div + { + color: red; + font: 40px/1 Ahem; + } + + span + { + background-color: green; /* so that padding-top area is painted green */ + color: green; + padding-top: 1em; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a filled green rectangle and <strong>no red</strong>.</p> + + <div>shuldboverlaPPed<br /> + <span>bleedover1stline</span></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/border-padding-bleed-003-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/border-padding-bleed-003-expected.xht new file mode 100644 index 0000000..10fe3e0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/border-padding-bleed-003-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: green; + height: 80px; + width: 640px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a filled green rectangle and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/border-padding-bleed-003.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/border-padding-bleed-003.xht new file mode 100644 index 0000000..51054640 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/border-padding-bleed-003.xht
@@ -0,0 +1,46 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Test: line-height - border-top of inline non-replaced element paint over previous line box</title> + + <!-- + Inspired by + http://archive.webstandards.org/css/winie/inline.html + --> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" title="10.8.1 Leading and half-leading" /> + <link rel="bookmark" href="http://archive.webstandards.org/css/winie/inline.html" /> + <link rel="match" href="border-padding-bleed-001-ref.xht" /> + + <meta content="ahem" name="flags" /> + <meta content="Although margins, borders and padding of inline non-replaced elements do not enter into the line box calculation, they are still rendered around inline boxes. This means that if the height specified by 'line-height' (40px in this testcase) is equal to the content height (40px in this testcase) of contained boxes, then background-color of padding-top area and border-top may 'bleed' into the adjoining preceding line box. Since line boxes are rendered in document order, this causes border-top of 2nd line box (the span element in this testcase) to be painted over border-bottom and padding-bottom of inline boxes of previous line and, in this testcase, over the 1st line box." name="assert" /> + + <style type="text/css"><![CDATA[ + div + { + color: red; + font: 40px/1 Ahem; + } + + span + { + border-top: green solid 1em; + color: green; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a filled green rectangle and <strong>no red</strong>.</p> + + <div>shuldboverlaPPed<br /> + <span>bleedover1stline</span></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/empty-inline-001-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/empty-inline-001-expected.xht new file mode 100644 index 0000000..a5b4e9f --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/empty-inline-001-expected.xht
@@ -0,0 +1,18 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + </head> + + <body> + + <p>Test passes if there is <strong>no red</strong>.</p> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/empty-inline-001.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/empty-inline-001.xht new file mode 100644 index 0000000..81d82fe --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/empty-inline-001.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Empty inline elements</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#inline-formatting" /> + <link rel="match" href="../reference/ref-if-there-is-no-red.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="Empty inline elements create a zero-height line box." /> + <style type="text/css"> + div + { + background: red; + } + span + { + display: inline; + } + </style> + </head> + <body> + <p>Test passes if there is <strong>no red</strong>.</p> + <div> + <span></span> + </div> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/empty-inline-002-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/empty-inline-002-expected.xht new file mode 100644 index 0000000..347b652c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/empty-inline-002-expected.xht
@@ -0,0 +1,46 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + p {margin: 1em auto 0em;} + + div + { + background-color: green; + height: 150px; + margin: 0px 125px 125px; + padding: 100px 0px; + width: 250px; + } + + div > div + { + background-color: transparent; + border: green solid 25px; + height: 100px; + padding: 0px; + position: relative; + right: 250px; + width: 500px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is <strong>no red</strong>.</p> + + <div> + <div></div> + </div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/empty-inline-002.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/empty-inline-002.xht new file mode 100644 index 0000000..0bb6817 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/empty-inline-002.xht
@@ -0,0 +1,68 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Empty line box influence</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="empty-inline-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="Empty inline elements still influence calculation just like elements with content." /> + <style type="text/css"> + div, span + { + font: 100px/1em Ahem; + } + #div1 + { + margin-top: 100px; + } + #div2, #div3 + { + width: 500px; + } + #div2 + { + border: 25px solid green; + } + span + { + background: green; + border: 25px solid green; + margin: 100px; + padding: 100px; + } + #div3 + { + border: 25px solid red; + height: 100px; + position: relative; + top: -150px; + z-index: -1; + } + #div3 div + { + background: red; + border: 25px solid red; + height: 300px; + margin: 0 100px; + position: relative; + top: -125px; + width: 200px; + } + </style> + </head> + <body> + <p>Test passes if there is <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span></span> + </div> + <div id="div3"> + <div></div> + </div> + </div> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/empty-inline-003-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/empty-inline-003-expected.xht new file mode 100644 index 0000000..c2818376 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/empty-inline-003-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + <link rel="author" title="Bruno Fassino" href="fassino[at]gmail.com" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: green; + color: white; + line-height: 5; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a wide filled green rectangle with one "X" in it and if there is <strong>no red</strong>.</p> + + <div>X</div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/empty-inline-003.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/empty-inline-003.xht new file mode 100644 index 0000000..f44f2bd5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/empty-inline-003.xht
@@ -0,0 +1,56 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Test: Line height calculations - Empty inline elements influence</title> + + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#line-height" title="10.8 Line height calculations: the 'line-height' and 'vertical-align' properties" /> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + <link rel="author" title="Bruno Fassino" href="fassino[at]gmail.com" /> + <link rel="match" href="empty-inline-003-ref.xht" /> + + <meta content="The line-height of an empty inline element influences the height of a line containing it with some other content" name="assert" /> + <meta content="" name="flags" /> + + <style type="text/css"><![CDATA[ + div#rel-pos-wrapper {position: relative;} + + div#test + { + background-color: green; + color: white; + line-height: 1; + } + + span#empty-inline-element {line-height: 5;} + + div#reference-overlapped-red + { + background-color: red; + left: 0; + line-height: 5; + position: absolute; + top: 0; + width: 100%; + z-index: -1; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a wide filled green rectangle with one "X" in it and if there is <strong>no red</strong>.</p> + + <div id="rel-pos-wrapper"> + + <div id="test"><span id="empty-inline-element"></span>X</div> + + <div id="reference-overlapped-red">X</div> + + </div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-box-001-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-box-001-expected.xht new file mode 100644 index 0000000..f900a69 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-box-001-expected.xht
@@ -0,0 +1,41 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {width: 192px;} + + span {border-color: blue;} + + span#top + { + border-style: solid none solid solid; + border-width: 2px 0px 2px 2px; + } + + div#middle {background-color: orange;} + + span#bottom + { + border-style: solid solid solid none; + border-width: 2px 2px 2px 0px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there are blue borders around the top, left and bottom but not the right side of the text "First line", and borders around the top, right, bottom but not the left of the text "Last line".</p> + + <div><span id="top">First line</span></div> + <div id="middle">Filler Text</div> + <div><span id="bottom">Last line</span></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-box-001.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-box-001.xht new file mode 100644 index 0000000..aff6b145 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-box-001.xht
@@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Inline box containing block boxes</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#anonymous-block-level" /> + <link rel="match" href="inline-box-001-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="Inline boxes that contain block boxes will break up the inline content around the block box." /> + <style type="text/css"> + #div1 + { + border: 2px solid blue; + display: inline; + } + div div + { + background: orange; + width: 2in; + } + </style> + </head> + <body> + <p>Test passes if there are blue borders around the top, left and bottom but not the right side of the text "First line", and borders around the top, right, bottom but not the left of the text "Last line".</p> + <div id="div1"> + First line + <div>Filler Text</div> + Last line + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-box-002-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-box-002-expected.xht new file mode 100644 index 0000000..c96eebc --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-box-002-expected.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {width: 192px;} + + div#yellow + { + background-color: yellow; + height: 192px; + } + + span.blue {background-color: blue;} + + div#orange {background-color: orange;} + ]]></style> + + </head> + + <body> + + <p>Test passes if an orange stripe is between two shorter blue stripes and all three stripes are below a yellow square.</p> + + <div id="yellow"></div> + + <div><span class="blue">Filler Text</span></div> + + <div id="orange">Filler Text</div> + + <div><span class="blue">Filler Text</span></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-box-002.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-box-002.xht new file mode 100644 index 0000000..32e0adc --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-box-002.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Block boxes within inline boxes are affected by positioning</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#anonymous-block-level" /> + <link rel="match" href="inline-box-002-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="Block boxes within inline boxes are also affected by relative positioning on the inline box." /> + <style type="text/css"> + #div1 + { + background: yellow; + height: 2in; + position: relative; + width: 2in; + } + #div2 + { + background: blue; + display: inline; + position: relative; + top: 2in; + } + #div3 + { + background: orange; + width: 2in; + } + </style> + </head> + <body> + <p>Test passes if an orange stripe is between two shorter blue stripes and all three stripes are below a yellow square.</p> + <div id="div1"> + <div id="div2"> + Filler Text + <div id="div3">Filler Text</div> + Filler Text + </div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-001-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-001-expected.xht new file mode 100644 index 0000000..d142292a --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-001-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + border: solid 1px black; + width: 600px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if all the words "Filler Text" are on the same line and they are contained by a black box.</p> + + <div>Filler Text Filler Text Filler Text</div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-001.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-001.xht new file mode 100644 index 0000000..5c616b4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-001.xht
@@ -0,0 +1,32 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Inline formatting context and basic horizontal Layout</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#inline-formatting" /> + <link rel="match" href="inline-formatting-context-001-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="Inline boxes are laid out horizontally or one after the other starting at the top of the containing block." /> + <style type="text/css"> + #div1 + { + border: solid 1px black; + width: 600px; + } + div div + { + display: inline; + } + </style> + </head> + <body> + <p>Test passes if all the words "Filler Text" are on the same line and they are contained by a black box.</p> + <div id="div1"> + <div>Filler Text </div> + <div>Filler Text </div> + <div>Filler Text</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-002-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-002-expected.xht new file mode 100644 index 0000000..f82f8fe --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-002-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + float: left; + padding-left: 100px; + } + + span {background-color: white;} + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a black stripe on the left side of "Filler Text".</p> + + <div><span>Filler Text</span></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-002.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-002.xht new file mode 100644 index 0000000..e95e7c2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-002.xht
@@ -0,0 +1,32 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Inline formatting context with a horizontal left margins</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#inline-formatting" /> + <link rel="match" href="inline-formatting-context-002-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="Horizontal left margins are respected between inline boxes." /> + <style type="text/css"> + div + { + background: black; + display: inline; + line-height: 1em; + } + div div + { + background: white; + margin-left: 100px; + } + </style> + </head> + <body> + <p>Test passes if there is a black stripe on the left side of "Filler Text".</p> + <div> + <div>Filler Text</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-003-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-003-expected.xht new file mode 100644 index 0000000..03ba993 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-003-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + float: left; + padding-right: 100px; + } + + span {background-color: white;} + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a black stripe on the right side of "Filler Text".</p> + + <div><span>Filler Text</span></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-003.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-003.xht new file mode 100644 index 0000000..cbef81eb --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-003.xht
@@ -0,0 +1,32 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Inline formatting context with a horizontal right margins</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#inline-formatting" /> + <link rel="match" href="inline-formatting-context-003-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="Horizontal right margins are respected between inline boxes." /> + <style type="text/css"> + div + { + background: black; + display: inline; + line-height: 1em; + } + div div + { + background: white; + margin-right: 100px; + } + </style> + </head> + <body> + <p>Test passes if there is a black stripe on the right side of "Filler Text".</p> + <div> + <div>Filler Text</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-004-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-004-expected.xht new file mode 100644 index 0000000..f82f8fe --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-004-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + float: left; + padding-left: 100px; + } + + span {background-color: white;} + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a black stripe on the left side of "Filler Text".</p> + + <div><span>Filler Text</span></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-004.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-004.xht new file mode 100644 index 0000000..5ed20084 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-004.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Inline formatting context with a left border</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#inline-formatting" /> + <link rel="match" href="inline-formatting-context-002-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="Left borders are respected between inline boxes." /> + <style type="text/css"> + div + { + display: inline; + } + div div + { + border-left: 100px solid black; + } + </style> + </head> + <body> + <p>Test passes if there is a black stripe on the left side of "Filler Text".</p> + <div> + <div>Filler Text</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-005-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-005-expected.xht new file mode 100644 index 0000000..03ba993 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-005-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + float: left; + padding-right: 100px; + } + + span {background-color: white;} + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a black stripe on the right side of "Filler Text".</p> + + <div><span>Filler Text</span></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-005.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-005.xht new file mode 100644 index 0000000..4a2f3cd --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-005.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Inline formatting context with a right border</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#inline-formatting" /> + <link rel="match" href="inline-formatting-context-003-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="Right borders are respected between inline boxes." /> + <style type="text/css"> + div + { + display: inline; + } + div div + { + border-right: 100px solid black; + } + </style> + </head> + <body> + <p>Test passes if there is a black stripe on the right side of "Filler Text".</p> + <div> + <div>Filler Text</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-006-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-006-expected.xht new file mode 100644 index 0000000..f82f8fe --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-006-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + float: left; + padding-left: 100px; + } + + span {background-color: white;} + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a black stripe on the left side of "Filler Text".</p> + + <div><span>Filler Text</span></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-006.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-006.xht new file mode 100644 index 0000000..ee602ba --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-006.xht
@@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Inline formatting context with left padding</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#inline-formatting" /> + <link rel="match" href="inline-formatting-context-002-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="Left padding are respected between inline boxes." /> + <style type="text/css"> + div + { + display: inline; + } + #div1 + { + background: black; + padding-left: 100px; + } + div div + { + background: white; + } + </style> + </head> + <body> + <p>Test passes if there is a black stripe on the left side of "Filler Text".</p> + <div id="div1"> + <div>Filler Text</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-007-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-007-expected.xht new file mode 100644 index 0000000..03ba993 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-007-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + float: left; + padding-right: 100px; + } + + span {background-color: white;} + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a black stripe on the right side of "Filler Text".</p> + + <div><span>Filler Text</span></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-007.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-007.xht new file mode 100644 index 0000000..defd8ea --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-007.xht
@@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Inline formatting context with right padding</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#inline-formatting" /> + <link rel="match" href="inline-formatting-context-003-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="Right padding are respected between inline boxes." /> + <style type="text/css"> + div + { + display: inline; + } + #div1 + { + background: black; + padding-right: 100px; + } + div div + { + background: white; + } + </style> + </head> + <body> + <p>Test passes if there is a black stripe on the right side of "Filler Text".</p> + <div id="div1"> + <div>Filler Text</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-008-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-008-expected.xht new file mode 100644 index 0000000..8650d13d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-008-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: green; + height: 200px; + width: 200px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-008.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-008.xht new file mode 100644 index 0000000..5e12981 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-008.xht
@@ -0,0 +1,32 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Inline element widths are determined by the containing block</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#inline-formatting" /> + <link rel="match" href="inline-formatting-context-008-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="Inline element width is determined by the containing block." /> + <style type="text/css"> + #div1 + { + background: red; + font: 100px/1em Ahem; + height: 2em; + width: 2em; + } + div div + { + color: green; + } + </style> + </head> + <body> + <p>Test passes if there is <strong>no red</strong>.</p> + <div id="div1"> + <div>XX XX</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-009-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-009-expected.xht new file mode 100644 index 0000000..a81d221 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-009-expected.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + table + { + background-color: blue; + border-spacing: 0px; + height: 200px; + } + + td + { + padding: 0px; + width: 100px; + } + + td#middle {background-color: orange;} + ]]></style> + + </head> + + <body> + + <p>Test passes if the filled orange rectangle has a filled blue rectangle on either side.</p> + + <table> + <tr><td></td><td id="middle"></td><td></td></tr> + </table> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-009.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-009.xht new file mode 100644 index 0000000..995e21c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-009.xht
@@ -0,0 +1,40 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Inline element widths are determined by the containing block and floated elements</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-02 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#inline-formatting" /> + <link rel="match" href="inline-formatting-context-009-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="Inline element width is determined by the containing block and any floated elements." /> + <style type="text/css"> + #div1 + { + background: orange; + font: 100px/1em Ahem; + height: 2em; + width: 3em; + } + #div2 + { + background: blue; + float: right; + height: 1em; + width: 1em; + } + div div + { + color: blue; + } + </style> + </head> + <body> + <p>Test passes if the filled orange rectangle has a filled blue rectangle on either side.</p> + <div id="div1"> + <div id="div2"></div> + <div>X X X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-011-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-011-expected.xht new file mode 100644 index 0000000..7a5681c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-011-expected.xht
@@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {border-top: orange solid medium;} + + img {vertical-align: top;} + ]]></style> + + </head> + + <body> + + <p>Test passes if the black square and blue rectangles touch the orange line.</p> + + <div><img src="support/swatch-blue.png" width="90" height="90" alt="Image download support must be enabled" /> <img src="support/swatch-blue.png" width="20" height="50" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="50" height="50" alt="Image download support must be enabled" /><img src="support/swatch-blue.png" width="20" height="50" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-011.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-011.xht new file mode 100644 index 0000000..38f6182 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-011.xht
@@ -0,0 +1,42 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align and alignment of inline boxes</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-02 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#inline-formatting" /> + <link rel="match" href="inline-formatting-context-011-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property determines the vertical alignment of a box within a line box." /> + <style type="text/css"> + div + { + border-top: solid orange; + } + span + { + border: 20px solid blue; + display: inline-block; + font: 50px Ahem; + } + #span1 + { + color: blue; + line-height: 1em; + } + #span2 + { + line-height: 10px; + vertical-align: top; + } + </style> + </head> + <body> + <p>Test passes if the black square and blue rectangles touch the orange line.</p> + <div> + <span id="span1">X</span> + <span id="span2">X</span> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-012-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-012-expected.xht new file mode 100644 index 0000000..1110982 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-012-expected.xht
@@ -0,0 +1,22 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + </head> + + <body> + + <p>Test passes if there are <strong>2 lines of "Filler text"</strong>.</p> + + <div>Filler text</div> + + <div>Filler text</div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-012.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-012.xht new file mode 100644 index 0000000..dc985d6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-012.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Inline boxes vertically stack if they do not fit horizontally</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#inline-formatting" /> + <link rel="match" href="../generated-content/after-content-display-002-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="Inline boxes stack vertically when they do not fit within an element horizontally." /> + <style type="text/css"> + div + { + width: 50px; + } + span + { + white-space: nowrap; + } + </style> + </head> + <body> + <p>Test passes if there are <strong>2 lines of "Filler text"</strong>.</p> + <div> + <span>Filler text</span> + <span>Filler text</span> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-013-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-013-expected.xht new file mode 100644 index 0000000..95b2983 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-013-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + border-bottom: green solid 20px; + border-top: green solid 20px; + width: 100px; + } + + img {vertical-align: top;} + ]]></style> + + </head> + + <body> + + <p>Test passes if there is no vertical space between the green and blue stripes.</p> + + <div><img src="support/swatch-blue.png" width="100" height="20" alt="Image download support must be enabled" /> <img src="support/green15x15.png" width="100" height="20" alt="Image download support must be enabled" /><img src="support/swatch-blue.png" width="100" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-013.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-013.xht new file mode 100644 index 0000000..56fa4d9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-013.xht
@@ -0,0 +1,40 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Wrapping inline boxes and vertical spacing</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#inline-formatting" /> + <link rel="match" href="inline-formatting-context-013-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="Line boxes are stacked with no vertical separation and they never overlap." /> + <style type="text/css"> + div + { + background: red; + font: 20px/1em Ahem; + height: 5em; + width: 5em; + } + .color1 + { + color: green; + } + .color2 + { + color: blue; + } + </style> + </head> + <body> + <p>Test passes if there is no vertical space between the green and blue stripes.</p> + <div> + <span class="color1">XXXXX</span> + <span class="color2">XXXXX</span> + <span class="color1">XXXXX</span> + <span class="color2">XXXXX</span> + <span class="color1">XXXXX</span> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-015-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-015-expected.xht new file mode 100644 index 0000000..3b543652 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-015-expected.xht
@@ -0,0 +1,47 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + p {margin: 1em 0em;} + + table + { + background-color: orange; + border-spacing: 0px; + width: 200px; + } + + td + { + padding: 0px; + vertical-align: top; + } + + td:first-child {width: 110px;} + + div + { + border: blue solid 5px; + height: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the "Filler Text" is to the right of the blue box and an orange background covers the area behind both the "Filler Text" and the blue box.</p> + + <table> + <tr><td><div></div></td><td>Filler Text Filler Text</td></tr> + </table> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-015.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-015.xht new file mode 100644 index 0000000..a69db81 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-015.xht
@@ -0,0 +1,37 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line boxes next to floats</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#inline-formatting" /> + <link rel="match" href="inline-formatting-context-015-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="Line boxes adjust for floated elements." /> + <style type="text/css"> + #div1 + { + width: 200px; + } + #div2 + { + border: 5px solid blue; + height: 20px; + float: left; + width: 50%; + } + #div3 + { + background: orange; + } + </style> + </head> + <body> + <p>Test passes if the "Filler Text" is to the right of the blue box and an orange background covers the area behind both the "Filler Text" and the blue box.</p> + <div id="div1"> + <div id="div2"></div> + <div id="div3">Filler Text Filler Text</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-022-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-022-expected.xht new file mode 100644 index 0000000..74e1df26 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-022-expected.xht
@@ -0,0 +1,31 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + line-height: 10px; + margin-top: -6px; + width: 130px; + } + + img {vertical-align: top;} + ]]></style> + + </head> + + <body> + + <p>Test passes if there is <strong>no red</strong>.</p> + + <div><img src="support/swatch-blue.png" width="130" height="10" alt="Image download support must be enabled" /><img src="support/swatch-blue.png" width="10" height="10" alt="Image download support must be enabled" /><img src="support/swatch-blue.png" width="130" height="10" alt="Image download support must be enabled" /><img src="support/swatch-blue.png" width="10" height="20" alt="Image download support must be enabled" /><img src="support/swatch-white.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/swatch-blue.png" width="100" height="20" alt="Image download support must be enabled" /><img src="support/swatch-blue.png" width="100" height="20" alt="Image download support must be enabled" /><img src="support/swatch-white.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/swatch-blue.png" width="10" height="20" alt="Image download support must be enabled" /><img src="support/swatch-blue.png" width="130" height="10" alt="Image download support must be enabled" /><img src="support/swatch-white.png" width="120" height="10" alt="Image download support must be enabled" /><img src="support/swatch-blue.png" width="10" height="10" alt="Image download support must be enabled" /><img src="support/swatch-blue.png" width="130" height="10" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-022.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-022.xht new file mode 100644 index 0000000..09cb239 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-022.xht
@@ -0,0 +1,36 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Inline boxes that are split and the margin, border, padding effect</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#inline-formatting" /> + <link rel="match" href="inline-formatting-context-022-ref.xht" /> + + <meta name="flags" content="ahem image" /> + <meta name="assert" content="Margins, borders and padding have no visual effect when inline boxes are split." /> + <style type="text/css"> + div + { + background: url('support/inline-formatting-context-022.png') no-repeat 0 -1.5em; + color: blue; + font: 15pt/1em Ahem; + margin-top: 2em; + height: 5em; + width: 6.5em; + } + span + { + margin: 1em 0; + padding: 1em; + border: 0.5em solid blue; + } + </style> + </head> + <body> + <p>Test passes if there is <strong>no red</strong>.</p> + <div> + <span>XXXXX XXXXX</span> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-023-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-023-expected.xht new file mode 100644 index 0000000..a4f783d8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-023-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + line-height: 30px; + margin: auto 2px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there are 3 instances of "Filler Text".</p> + + <div>Filler Text Filler Text Filler Text</div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-023.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-023.xht new file mode 100644 index 0000000..ab697d9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/inline-formatting-context-023.xht
@@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Bidirectional text runs can create additional line boxes</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-02 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#inline-formatting" /> + <link rel="match" href="inline-formatting-context-023-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="Additional inline boxes can be created for the bidirectional text." /> + <style type="text/css"> + #span1 + { + margin: 1px; + padding: 1px; + line-height: 25px; + } + #span2 + { + direction: rtl; + unicode-bidi: bidi-override; + line-height: 30px; + } + </style> + </head> + <body> + <p>Test passes if there are 3 instances of "Filler Text".</p> + <div> + <span id="span1">Filler Text <span id="span2">txeT relliF</span> Filler Text</span> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/leading-001-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/leading-001-expected.xht new file mode 100644 index 0000000..2d6e784d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/leading-001-expected.xht
@@ -0,0 +1,40 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + table + { + border-bottom: blue solid 50px; + border-spacing: 0px; + border-right: blue solid 100px; + border-top: blue solid 50px; + } + + td + { + background-color: orange; + height: 100px; + padding: 0px; + width: 100px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if a filled orange square is vertically centered inside a bigger filled blue square.</p> + + <table> + <tr><td></td></tr> + </table> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/leading-001.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/leading-001.xht new file mode 100644 index 0000000..56f6931 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/leading-001.xht
@@ -0,0 +1,32 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Leading and half leading line heights</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-02 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="leading-001-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="Line-height can be different from the content area so space is above and below." /> + <style type="text/css"> + div + { + font: 100px/1em Ahem; + background: blue; + width: 200px; + } + span + { + color: orange; + line-height: 200px; + } + </style> + </head> + <body> + <p>Test passes if a filled orange square is vertically centered inside a bigger filled blue square.</p> + <div> + <span>X</span> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-box-height-002-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-box-height-002-expected.xht new file mode 100644 index 0000000..5decfe5b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-box-height-002-expected.xht
@@ -0,0 +1,20 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + </head> + + <body> + + <p>Test passes if the blue and orange squares have the same height.</p> + + <div><img src="support/swatch-blue.png" width="96" height="96" alt="Image download support must be enabled" /><img src="support/swatch-orange.png" width="96" height="96" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-box-height-002.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-box-height-002.xht new file mode 100644 index 0000000..9c233826 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-box-height-002.xht
@@ -0,0 +1,40 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Height for inline replaced elements and 'line-height'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-box-height-002-ref.xht" /> + + <meta name="flags" content="image" /> + <meta name="assert" content="The 'line-height' property doe not set the height for inline replaced elements. The height of the replaced element sets the line-height'." /> + <style type="text/css"> + #div1 + { + position: relative; + } + img + { + display: inline; + line-height: 2in; + } + div div + { + background: orange; + height: 96px; + left: 1in; + position: absolute; + top: 0; + width: 96px; + } + </style> + </head> + <body> + <p>Test passes if the blue and orange squares have the same height.</p> + <div id="div1"> + <img alt="blue 96x96" src="support/blue96x96.png" /> + <div></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-002-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-002-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-002-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-002.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-002.xht new file mode 100644 index 0000000..62c16a91 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-002.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using pixels with a minimum value, 0px</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-02 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a minimum length value in pixels." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 0px; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-004-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-004-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-004-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-004.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-004.xht new file mode 100644 index 0000000..a81b5612 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-004.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using pixels with a negative zero value, -0px</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a negative zero length value in pixels." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: -0px; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-005-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-005-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-005-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-005.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-005.xht new file mode 100644 index 0000000..0a026a3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-005.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using pixels with a positive zero value, +0px</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a positive zero length value in pixels." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: +0px; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-006-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-006-expected.xht new file mode 100644 index 0000000..b8babd7b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-006-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-006.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-006.xht new file mode 100644 index 0000000..aa27104 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-006.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using pixels with a nominal value, 96px</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-006-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a nominal length value in pixels." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 96px; + } + #div3 + { + height: 96px; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-007-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-007-expected.xht new file mode 100644 index 0000000..b8babd7b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-007-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-007.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-007.xht new file mode 100644 index 0000000..f2969be --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-007.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using pixels with a positive nominal value, +96px</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-006-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a positive nominal length value in pixels." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: +96px; + } + #div3 + { + height: 96px; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-013-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-013-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-013-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-013.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-013.xht new file mode 100644 index 0000000..f8d02ab --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-013.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using points with a minimum value, 0pt</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a minimum length value in points." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 0pt; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-015-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-015-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-015-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-015.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-015.xht new file mode 100644 index 0000000..c4d8994 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-015.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using points with a negative zero value, -0pt</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a negative zero length value in points." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: -0pt; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-016-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-016-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-016-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-016.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-016.xht new file mode 100644 index 0000000..1d576d0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-016.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using points with a positive zero value, +0pt</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a positive zero length value in points." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: +0pt; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-017-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-017-expected.xht new file mode 100644 index 0000000..b8babd7b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-017-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-017.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-017.xht new file mode 100644 index 0000000..bf95cdea --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-017.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using points with a nominal value, 72pt</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-006-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a nominal length value in points." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 72pt; + } + #div3 + { + height: 72pt; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-018-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-018-expected.xht new file mode 100644 index 0000000..b8babd7b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-018-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-018.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-018.xht new file mode 100644 index 0000000..def1a940 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-018.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using points with a positive nominal value, +72pt</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-006-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a positive nominal length value in points." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: +72pt; + } + #div3 + { + height: 72pt; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-024-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-024-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-024-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-024.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-024.xht new file mode 100644 index 0000000..e91d4d5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-024.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using picas with a minimum value, 0pc</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a minimum length value in picas." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 0pc; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-025-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-025-expected.xht new file mode 100644 index 0000000..549a9a2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-025-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -2px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 vertical black stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="36" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="36" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-025.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-025.xht new file mode 100644 index 0000000..d57902af --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-025.xht
@@ -0,0 +1,54 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using picas with a minimum plus one value, 1pc</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-025-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a minimum plus one length value in picas." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 1pc; + } + #div3 + { + left: 1.1em; + position: absolute; + top: -2px; + } + #div4 + { + height: 20px; + } + #div5 + { + height: 1pc; + } + </style> + </head> + <body> + <p>Test passes if the 2 vertical black stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"> + <div id="div4"></div> + <div id="div5"></div> + </div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-026-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-026-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-026-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-026.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-026.xht new file mode 100644 index 0000000..8e95972a --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-026.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using picas with a negative zero value, -0pc</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a negative zero length value in picas." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: -0pc; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-027-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-027-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-027-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-027.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-027.xht new file mode 100644 index 0000000..93cbfd9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-027.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using picas with a positive zero value, +0pc</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a positive zero length value in picas." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: +0pc; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-028-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-028-expected.xht new file mode 100644 index 0000000..b8babd7b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-028-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-028.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-028.xht new file mode 100644 index 0000000..296996cb --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-028.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using picas with a nominal value, 6pc</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-006-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a nominal length value in picas." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 6pc; + } + #div3 + { + height: 6pc; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-029-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-029-expected.xht new file mode 100644 index 0000000..b8babd7b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-029-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-029.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-029.xht new file mode 100644 index 0000000..189ab3e --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-029.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using picas with a positive nominal value, +6pc</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-006-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a positive nominal length value in picas." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: +6pc; + } + #div3 + { + height: 6pc; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-035-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-035-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-035-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-035.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-035.xht new file mode 100644 index 0000000..6b6bbfc --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-035.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using centimeters with a minimum value, 0cm</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a minimum length value in centimeters." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 0cm; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-037-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-037-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-037-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-037.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-037.xht new file mode 100644 index 0000000..98fffa2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-037.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using centimeters with a negative zero value, -0cm</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a negative zero length value in centimeters." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: -0cm; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-038-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-038-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-038-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-038.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-038.xht new file mode 100644 index 0000000..0b93e5fa --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-038.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using centimeters with a positive zero value, +0cm</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a positive zero length value in centimeters." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: +0cm; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-039-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-039-expected.xht new file mode 100644 index 0000000..b8babd7b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-039-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-039.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-039.xht new file mode 100644 index 0000000..f79b86c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-039.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using centimeters with a nominal value, 2.54cm</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-006-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a nominal length value in centimeters." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 2.54cm; + } + #div3 + { + height: 2.54cm; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-040-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-040-expected.xht new file mode 100644 index 0000000..b8babd7b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-040-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-040.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-040.xht new file mode 100644 index 0000000..19d4ddd1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-040.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using centimeters with a positive nominal value, +2.54cm</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-006-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a positive nominal length value in centimeters." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: +2.54cm; + } + #div3 + { + height: 2.54cm; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-046-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-046-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-046-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-046.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-046.xht new file mode 100644 index 0000000..f3f04289 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-046.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using millimeters with a minimum value, 0mm</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a minimum length value in millimeters." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 0mm; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-048-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-048-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-048-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-048.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-048.xht new file mode 100644 index 0000000..8d7f1c51 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-048.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using millimeters with a negative zero value, -0mm</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a negative zero length value in millimeters." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: -0mm; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-049-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-049-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-049-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-049.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-049.xht new file mode 100644 index 0000000..451a05cf --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-049.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using millimeters with a positive zero value, +0mm</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a positive zero length value in millimeters." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: +0mm; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-050-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-050-expected.xht new file mode 100644 index 0000000..b8babd7b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-050-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-050.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-050.xht new file mode 100644 index 0000000..f3cbaed4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-050.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using millimeters with a nominal value, 25.4mm</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-006-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a nominal length value in millimeters." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 25.4mm; + } + #div3 + { + height: 25.4mm; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-051-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-051-expected.xht new file mode 100644 index 0000000..b8babd7b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-051-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-051.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-051.xht new file mode 100644 index 0000000..403d6c1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-051.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using millimeters with a positive nominal value, +25.4mm</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-006-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a positive nominal length value in millimeters." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: +25.4mm; + } + #div3 + { + height: 25.4mm; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-057-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-057-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-057-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-057.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-057.xht new file mode 100644 index 0000000..d400bd7d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-057.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using inches with a minimum value, 0in</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a minimum length value in inches." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 0in; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-058-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-058-expected.xht new file mode 100644 index 0000000..b8babd7b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-058-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-058.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-058.xht new file mode 100644 index 0000000..8ed5fce --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-058.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using inches with a minimum plus one value, 1in</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-006-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a minimum plus one length value in inches." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 1in; + } + #div3 + { + height: 1in; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-059-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-059-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-059-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-059.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-059.xht new file mode 100644 index 0000000..1d76295 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-059.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using inches with a negative zero value, -0in</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a negative zero length value in inches." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: -0in; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-060-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-060-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-060-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-060.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-060.xht new file mode 100644 index 0000000..af36b5c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-060.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using inches with a positive zero value, +0in</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a positive zero length value in inches." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: +0in; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-061-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-061-expected.xht new file mode 100644 index 0000000..fe2ab15 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-061-expected.xht
@@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 tall black vertical stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="288" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="288" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-061.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-061.xht new file mode 100644 index 0000000..eceb59bf9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-061.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using inches with a nominal value, 3in</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-061-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a nominal length value in inches." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 3in; + } + #div3 + { + height: 3in; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 tall black vertical stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-062-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-062-expected.xht new file mode 100644 index 0000000..fe2ab15 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-062-expected.xht
@@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 tall black vertical stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="288" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="288" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-062.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-062.xht new file mode 100644 index 0000000..373102b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-062.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using inches with a positive nominal value, +3in</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-061-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a positive nominal length value in inches." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: +3in; + } + #div3 + { + height: 3in; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 tall black vertical stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-068-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-068-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-068-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-068.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-068.xht new file mode 100644 index 0000000..331a56b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-068.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using 'em' units with a minimum value, 0em</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a minimum length value in 'em' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 0em; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-069-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-069-expected.xht new file mode 100644 index 0000000..fa9e924 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-069-expected.xht
@@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-069.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-069.xht new file mode 100644 index 0000000..7c420a0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-069.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using 'em' units with a minimum plus one value, 1em</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-069-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a minimum plus one length value in 'em' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 1em; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-070-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-070-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-070-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-070.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-070.xht new file mode 100644 index 0000000..1f8015c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-070.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using 'em' units with a negative zero value, -0em</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a negative zero length value in 'em' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: -0em; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-071-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-071-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-071-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-071.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-071.xht new file mode 100644 index 0000000..bfbd8e1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-071.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using 'em' units with a positive zero value, +0em</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a positive zero length value in 'em' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: +0em; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-072-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-072-expected.xht new file mode 100644 index 0000000..0596900 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-072-expected.xht
@@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="120" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="120" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-072.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-072.xht new file mode 100644 index 0000000..ea1820b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-072.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using 'em' units with a nominal value, 6em</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-072-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a nominal length value in 'em' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 6em; + } + #div3 + { + height: 6em; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-073-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-073-expected.xht new file mode 100644 index 0000000..0596900 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-073-expected.xht
@@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="120" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="120" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-073.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-073.xht new file mode 100644 index 0000000..205b3f3c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-073.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using 'em' units with a positive nominal value, +6em</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-072-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a positive nominal length value in 'em' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: +6em; + } + #div3 + { + height: 6em; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-079-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-079-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-079-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-079.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-079.xht new file mode 100644 index 0000000..1419e59 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-079.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using 'ex' units with a minimum value, 0ex</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a minimum length value in 'ex' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 0ex; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-080-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-080-expected.xht new file mode 100644 index 0000000..549a9a2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-080-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -2px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 vertical black stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="36" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="36" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-080.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-080.xht new file mode 100644 index 0000000..daca42f --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-080.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using 'ex' units with a minimum plus one value, 1ex</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-025-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a minimum plus one length value in 'ex' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 1ex; + } + #div3 + { + height: 36px; + left: 1.1em; + position: absolute; + top: -2px; + } + </style> + </head> + <body> + <p>Test passes if the 2 vertical black stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-081-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-081-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-081-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-081.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-081.xht new file mode 100644 index 0000000..d9ed59c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-081.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using 'ex' units with a negative zero value, -0ex</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a negative zero length value in 'ex' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: -0ex; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-082-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-082-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-082-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-082.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-082.xht new file mode 100644 index 0000000..5efd5fb --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-082.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using 'ex' units with a positive zero value, +0ex</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a positive zero length value in 'ex' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: +0ex; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-083-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-083-expected.xht new file mode 100644 index 0000000..b8babd7b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-083-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-083.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-083.xht new file mode 100644 index 0000000..7d64d02e --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-083.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using 'ex' units with a nominal value, 6ex</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-006-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a nominal length value in 'ex' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 6ex; + } + #div3 + { + height: 1in; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-084-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-084-expected.xht new file mode 100644 index 0000000..b8babd7b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-084-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-084.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-084.xht new file mode 100644 index 0000000..504a0efe --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-084.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using 'ex' units with a positive nominal value, +6ex</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-006-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a positive nominal length value in 'ex' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: +6ex; + } + #div3 + { + height: 1in; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-090-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-090-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-090-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-090.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-090.xht new file mode 100644 index 0000000..76e13d0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-090.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using percentages with a minimum value, 0%</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a minimum length value in percentages." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 0%; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-092-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-092-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-092-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-092.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-092.xht new file mode 100644 index 0000000..36f0530 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-092.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using percentages with a negative zero value, -0%</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a negative zero length value in percentages." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: -0%; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-093-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-093-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-093-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-093.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-093.xht new file mode 100644 index 0000000..7f05465 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-093.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using percentages with a positive zero value, +0%</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a positive zero length value in percentages." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: +0%; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-094-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-094-expected.xht new file mode 100644 index 0000000..fa9e924 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-094-expected.xht
@@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-094.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-094.xht new file mode 100644 index 0000000..642c726 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-094.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using percentages with a nominal value, 100%</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-069-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a nominal length value in percentages." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 100%; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-095-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-095-expected.xht new file mode 100644 index 0000000..fa9e924 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-095-expected.xht
@@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-095.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-095.xht new file mode 100644 index 0000000..5b785e1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-095.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using percentages with a positive nominal value, +100%</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-069-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a positive nominal length value in percentages." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: +100%; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-101-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-101-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-101-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-101.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-101.xht new file mode 100644 index 0000000..39363e5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-101.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height with a minimum value, 0</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a minimum number value." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 0; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-102-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-102-expected.xht new file mode 100644 index 0000000..12f04c5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-102-expected.xht
@@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 vertical black stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="40" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="40" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-102.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-102.xht new file mode 100644 index 0000000..8df5bc0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-102.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using pixels with a minimum plus one value, 1</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-102-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a minimum plus one number value." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 1; + } + #div3 + { + height: 2em; + left: 1.1em; + position: absolute; + top: 0em; + } + </style> + </head> + <body> + <p>Test passes if the 2 vertical black stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-103-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-103-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-103-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-103.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-103.xht new file mode 100644 index 0000000..8358b9d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-103.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height using pixels with a negative zero value, -0</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a negative zero number value." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: -0; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-104-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-104-expected.xht new file mode 100644 index 0000000..4a8731e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-104-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin-top: -10px;} + + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-104.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-104.xht new file mode 100644 index 0000000..0b6a163 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-104.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height with a positive zero value, +0</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a positive zero number value." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: +0; + } + #div3 + { + height: 1em; + left: 1.1em; + position: absolute; + top: -0.5em; + } + </style> + </head> + <body> + <p>Test passes if the 2 small black squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-105-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-105-expected.xht new file mode 100644 index 0000000..dc8d0172 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-105-expected.xht
@@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="100" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="100" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-105.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-105.xht new file mode 100644 index 0000000..c716c97 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-105.xht
@@ -0,0 +1,43 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height with a nominal value, 5</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-105-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a nominal number value." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: 5; + } + #div3 + { + height: 5em; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-106-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-106-expected.xht new file mode 100644 index 0000000..dc8d0172 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-106-expected.xht
@@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="100" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="100" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-106.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-106.xht new file mode 100644 index 0000000..48a21e8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-106.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height with a positive nominal value, +5</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-14 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-105-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property sets a positive nominal number value." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + width: 1em; + } + #div2, #div3 + { + background: black; + } + #div2 + { + line-height: +5; + } + #div3 + { + height: 5em; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-112-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-112-expected.xht new file mode 100644 index 0000000..b8babd7b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-112-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + left: 2px; + position: relative; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="96" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-112.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-112.xht new file mode 100644 index 0000000..47ce0a6b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-112.xht
@@ -0,0 +1,45 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height with keyword value of 'inherit'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-006-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'line-height' property set to 'inherit' uses the default line-height." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + line-height: 1in; + position: relative; + width: 1em; + } + div div + { + background: black; + line-height: 1em; + } + #div2 + { + line-height: inherit; + } + #div3 + { + height: 1in; + left: 1.1em; + position: absolute; + top: 0; + } + </style> + </head> + <body> + <p>Test passes if the 2 black vertical stripes have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2">X</div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-121-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-121-expected.xht new file mode 100644 index 0000000..4adadb0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-121-expected.xht
@@ -0,0 +1,20 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + </head> + + <body> + + <p>Test passes if there is a short green rectangle and <strong>no red</strong>.</p> + + <div><img src="support/green15x15.png" width="120" height="40" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-121.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-121.xht new file mode 100644 index 0000000..0fe245a --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-121.xht
@@ -0,0 +1,35 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: The 'line-height' property</title> + <link rel="author" title="Ian Hickson" href="mailto:ian@hixie.ch"/> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="alternate" href="http://www.hixie.ch/tests/adhoc/css/fonts/line-height/001.html" type="text/html"/> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#line-height" /> + <link rel="match" href="line-height-121-ref.xht" /> + + <meta name="flags" content="ahem" /> + + <style type="text/css"> + .container { background: red; height: 1.25em; width: 7.5em; } + .test { font: 2.5em/0 Ahem; background: green; color: green; } + .test { line-height: 1; } /* should override previous line */ + </style> + </head> + <body> + <p>Test passes if there is a short green rectangle and <strong>no red</strong>.</p> + <div class="container"><div class="test">ppp</div></div> + + <!-- "p" is like an underscore in Ahem. --> + + <!-- the result will be that if the line-height is 0, then the + container will be visible as the test will be height:0 and the + text will overflow the test with a small green line, leaving + the red of the container visible. otherwise, line-height is + 1, the test block will grow to be bigger than the + container, overflowing it, and hiding the red. --> + + <!-- see ../001.html --> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-125-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-125-expected.xht new file mode 100644 index 0000000..5ceb2a45 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-125-expected.xht
@@ -0,0 +1,36 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + font-size: 50px; + line-height: 50px; + width: 200px; + } + + span + { + background-color: green; + color: white; + padding-top: 10px; + } + ]]></style> + + </head> + + <body> + + <p>There should be one word on the line below, clearly saying "pass".</p> + + <div><span>PASS</span></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-125.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-125.xht new file mode 100644 index 0000000..e0c8cb0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-125.xht
@@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Inheritance of em units</title> + <link rel="author" title="Ian Hickson" href="mailto:ian@hixie.ch"/> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-14 --> + <link rel="alternate" href="http://www.hixie.ch/tests/adhoc/css/fonts/line-height/005.html" type="text/html"/> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#line-height" /> + <link rel="match" href="line-height-125-ref.xht" /> + + <style type="text/css"> + .fontsize { font-size: 10px; } + .lineheight { line-height: 1em; } + .test { font-size: 50px; width: 200px; padding-top: 10px; } + .fail { color: red; } + .pass { color: white; background: green; padding-top: 10px; } + </style> + </head> + <body> + <p>There should be one word on the line below, clearly saying "pass".</p> + <div class="fontsize"> + <div class="lineheight"> + <div class="test"><span class="fail">FAIL</span> <span class="pass">PASS</span></div> + </div> + </div> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-126-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-126-expected.xht new file mode 100644 index 0000000..56ea70a1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-126-expected.xht
@@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + border-top: green solid 1px; + width: 10em; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a short thin green line and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-126.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-126.xht new file mode 100644 index 0000000..bb979b8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-126.xht
@@ -0,0 +1,21 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: line-height of images</title> + <link rel="author" title="Ian Hickson" href="mailto:ian@hixie.ch"/> + <link rel="alternate" href="http://www.hixie.ch/tests/adhoc/css/fonts/line-height/006.html" type="text/html"/> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#line-height" /> + <link rel="match" href="line-height-126-ref.xht" /> + + <meta content="image" name="flags" /> + + <style type="text/css"> + div { background: red; line-height: 0; width: 10em; } + img { width: 10em; height: 1px; vertical-align: top; } + </style> + </head> + <body> + <p>Test passes if there is a short thin green line and <strong>no red</strong>.</p> + <div><img src="support/1x1-green.png" alt="FAIL (images required)"/></div> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-127-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-127-expected.xht new file mode 100644 index 0000000..73244080 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-127-expected.xht
@@ -0,0 +1,23 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img {vertical-align: top;} + ]]></style> + + </head> + + <body> + + <p>Test passes if there is <strong>no red</strong>.</p> + + <div><img src="support/green15x15.png" width="160" height="47" alt="Image download support must be enabled" /><img src="support/green15x15.png" width="160" height="48" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-127.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-127.xht new file mode 100644 index 0000000..65b4ffa2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-127.xht
@@ -0,0 +1,44 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: line-height of images</title> + <link rel="author" title="Ian Hickson" href="mailto:ian@hixie.ch"/> + <link rel="alternate" href="http://www.hixie.ch/tests/adhoc/css/fonts/line-height/007.html" type="text/html"/> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#line-height" /> + <link rel="match" href="line-height-127-ref.xht" /> + + <meta content="ahem image" name="flags" /> + + <style type="text/css"> + table { font: 10em/1 Ahem; border-spacing: 0; } + td { padding: 0; background: red; } + img { width: 1em; height: 1px; } + .test { line-height: 0; background: green; } + .control { height: 0.3em; background: green; width: 1em; } + </style> + </head> + <body> + + <!-- + ! The 0.3em comes from the following: + ! + ! * The font is 1em high + ! * The line height is 0 + ! * The half leading is therefore -0.5em centered around the middle of the font + ! * The baseline is 0.2em from the bottom of the font + ! * Thus the distance from the baseline to the center is 0.3em + ! * The image is placed on the baseline + | * The line box has to include the image and the middle of the font + ! * Thus the line box is 0.3em high + ! + ! --> + + <p>Test passes if there is <strong>no red</strong>.</p> + <table> + <tr> + <td><div class="test"><img src="support/1x1-white.png" alt="FAIL (images required)"/></div></td> + <td><div class="control"></div></td> + </tr> + </table> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-128-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-128-expected.xht new file mode 100644 index 0000000..698cdc7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-128-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: green; + height: 180px; + width: 360px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-128.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-128.xht new file mode 100644 index 0000000..b833c68 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-128.xht
@@ -0,0 +1,21 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> + <head> + <title>CSS Test: Test</title> + <link rel="author" title="Ian Hickson" href="mailto:ian@hixie.ch"/> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-04-04 --> + <link rel="alternate" href="http://www.hixie.ch/tests/adhoc/css/fonts/line-height/008.html" type="text/html"/> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#line-height" /> + <link rel="match" href="line-height-128-ref.xht" /> + + <meta content="ahem" name="flags" /> + + <style type="text/css"> + div { background: red; color: green; border: 1em solid; float: left; font: 3.75em/1 Ahem; } + </style> + </head> + <body> + <p>Test passes if there is <strong>no red</strong>.</p> + <div>XXXX</div> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-129-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-129-expected.xht new file mode 100644 index 0000000..27a45a8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-129-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: green; + height: 100px; + width: 100px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a filled green square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-129.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-129.xht new file mode 100644 index 0000000..e3a623e4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-129.xht
@@ -0,0 +1,47 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + + <title>CSS Test: height of line box and inline replaced elements</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + <link rel="author" title="Alan Gresley" href="alan{at}css-class.com" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" title="10.8 Line height calculations: the 'line-height' and 'vertical-align' properties" /> + <link rel="bookmark" href="http://lists.w3.org/Archives/Public/www-style/2013Oct/0546.html" title="line-height: normal and multiple descendant font sizes" /> + <link rel="match" href="../reference/ref-filled-green-100px-square.xht" /> + + <meta name="flags" content="image" /> + <meta name="assert" content="This test checks the height determination of a line box when such line box is made of a single inline replaced element. In this test, we verify that the margin box of an inline replaced element does indeed determine the line box height. div {line-height: 0px} rule only determines the minimum of the line box height." /> + + <style type="text/css"><![CDATA[ + div + { + background-color: red; + line-height: 0px; + } + + img + { + margin-bottom: -100px; + margin-top: 0px; + vertical-align: bottom; /* or top */ + /* + By default, images "sit" on the baseline (vertical-align's default value is 'baseline', not 'bottom' and not 'top') and not at the bottom of line boxes. Therefore, if we want to "nullify" the height of line box, then we must set 'vertical-align' to 'bottom' or to 'top'. "In case they [inline boxes] are [vertically-] aligned [to] 'top' or 'bottom', they must be aligned so as to minimize the line box height.": the line box height would not be minimizable to zero if the inline replaced box had been "sitting" on the baseline. + */ + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a filled green square and <strong>no red</strong>.</p> + + <div><img src="support/green_box.png" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-001-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-001-expected.xht new file mode 100644 index 0000000..594f61a --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-001-expected.xht
@@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + </head> + + <body> + + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + + <div><img src="support/swatch-blue.png" width="96" height="192" alt="Image download support must be enabled" /><img src="support/swatch-orange.png" width="96" height="192" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-001.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-001.xht new file mode 100644 index 0000000..be24a7f --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-001.xht
@@ -0,0 +1,61 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height applied to elements with 'display' set to 'table-row-group'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-applies-to-001-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="The 'line-height' property applies to elements with 'display' set to 'table-row-group'." /> + <style type="text/css"> + #div1 + { + position: relative; + } + #div2 + { + background: orange; + height: 2in; + left: 1in; + position: absolute; + top: 0; + width: 1in; + } + #test + { + display: table-row-group; + line-height: 2in; + } + #table + { + display: table; + table-layout: fixed; + } + #row + { + display: table-row; + } + #cell + { + background: blue; + display: table-cell; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="table"> + <div id="test"> + <div id="row"> + <div id="cell"> </div> + </div> + </div> + </div> + <div id="div2"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-002-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-002-expected.xht new file mode 100644 index 0000000..594f61a --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-002-expected.xht
@@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + </head> + + <body> + + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + + <div><img src="support/swatch-blue.png" width="96" height="192" alt="Image download support must be enabled" /><img src="support/swatch-orange.png" width="96" height="192" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-002.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-002.xht new file mode 100644 index 0000000..9e8f4354 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-002.xht
@@ -0,0 +1,61 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height applied to elements with 'display' set to 'table-header-group'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-applies-to-001-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="The 'line-height' property applies to elements with 'display' set to 'table-header-group'." /> + <style type="text/css"> + #div1 + { + position: relative; + } + #div2 + { + background: orange; + height: 2in; + left: 1in; + position: absolute; + top: 0; + width: 1in; + } + #test + { + display: table-header-group; + line-height: 2in; + } + #table + { + display: table; + table-layout: fixed; + } + #row + { + display: table-row; + } + #cell + { + background: blue; + display: table-cell; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="table"> + <div id="test"> + <div id="row"> + <div id="cell"> </div> + </div> + </div> + </div> + <div id="div2"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-003-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-003-expected.xht new file mode 100644 index 0000000..594f61a --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-003-expected.xht
@@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + </head> + + <body> + + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + + <div><img src="support/swatch-blue.png" width="96" height="192" alt="Image download support must be enabled" /><img src="support/swatch-orange.png" width="96" height="192" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-003.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-003.xht new file mode 100644 index 0000000..98facaf7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-003.xht
@@ -0,0 +1,61 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height applied to elements with 'display' set to 'table-footer-group'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-applies-to-001-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="The 'line-height' property applies to elements with 'display' set to 'table-footer-group'." /> + <style type="text/css"> + #div1 + { + position: relative; + } + #div2 + { + background: orange; + height: 2in; + left: 1in; + position: absolute; + top: 0; + width: 1in; + } + #test + { + display: table-footer-group; + line-height: 2in; + } + #table + { + display: table; + table-layout: fixed; + } + #row + { + display: table-row; + } + #cell + { + background: blue; + display: table-cell; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="table"> + <div id="test"> + <div id="row"> + <div id="cell"> </div> + </div> + </div> + </div> + <div id="div2"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-004-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-004-expected.xht new file mode 100644 index 0000000..594f61a --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-004-expected.xht
@@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + </head> + + <body> + + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + + <div><img src="support/swatch-blue.png" width="96" height="192" alt="Image download support must be enabled" /><img src="support/swatch-orange.png" width="96" height="192" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-004.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-004.xht new file mode 100644 index 0000000..7b572ba --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-004.xht
@@ -0,0 +1,55 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height applied to elements with 'display' set to 'table-row'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-applies-to-001-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="The 'line-height' property applies to elements with 'display' set to 'table-row'." /> + <style type="text/css"> + #div1 + { + position: relative; + } + #div2 + { + background: orange; + height: 2in; + left: 1in; + position: absolute; + top: 0; + width: 1in; + } + #table + { + display: table; + table-layout: fixed; + } + #row + { + display: table-row; + line-height: 2in; + } + #cell + { + background: blue; + display: table-cell; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="table"> + <div id="row"> + <div id="cell"> </div> + </div> + </div> + <div id="div2"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-005-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-005-expected.xht new file mode 100644 index 0000000..c648cbe --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-005-expected.xht
@@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + </head> + + <body> + + <p>Test passes if the blue and orange squares have the <strong>same height</strong>.</p> + + <div><img src="support/swatch-blue.png" width="96" height="96" alt="Image download support must be enabled" /><img src="support/swatch-orange.png" width="96" height="96" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-005.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-005.xht new file mode 100644 index 0000000..582c8d6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-005.xht
@@ -0,0 +1,61 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height applied to elements with 'display' set to 'table-column-group'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-applies-to-005-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="The 'line-height' property applies to elements with 'display' set to 'table-column-group'." /> + <style type="text/css"> + #div1 + { + position: relative; + } + #div2 + { + background: orange; + height: 1in; + left: 1in; + position: absolute; + top: 0; + width: 1in; + } + #test + { + display: table-column-group; + line-height: 2in; + } + #table + { + display: table; + table-layout: fixed; + } + #row + { + display: table-row; + } + #cell + { + background: blue; + display: table-cell; + height: 1in; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue and orange squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="table"> + <div id="test"></div> + <div id="row"> + <div id="cell"></div> + </div> + </div> + <div id="div2"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-006-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-006-expected.xht new file mode 100644 index 0000000..c648cbe --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-006-expected.xht
@@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + </head> + + <body> + + <p>Test passes if the blue and orange squares have the <strong>same height</strong>.</p> + + <div><img src="support/swatch-blue.png" width="96" height="96" alt="Image download support must be enabled" /><img src="support/swatch-orange.png" width="96" height="96" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-006.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-006.xht new file mode 100644 index 0000000..927c364 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-006.xht
@@ -0,0 +1,61 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height applied to elements with 'display' set to 'table-column'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-applies-to-005-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="The 'line-height' property applies to elements with 'display' set to 'table-column'." /> + <style type="text/css"> + #div1 + { + position: relative; + } + #div2 + { + background: orange; + height: 1in; + left: 1in; + position: absolute; + top: 0; + width: 1in; + } + #test + { + display: table-column; + line-height: 2in; + } + #table + { + display: table; + table-layout: fixed; + } + #row + { + display: table-row; + } + #cell + { + background: blue; + display: table-cell; + height: 1in; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue and orange squares have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="table"> + <div id="test"></div> + <div id="row"> + <div id="cell"></div> + </div> + </div> + <div id="div2"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-007-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-007-expected.xht new file mode 100644 index 0000000..594f61a --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-007-expected.xht
@@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + </head> + + <body> + + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + + <div><img src="support/swatch-blue.png" width="96" height="192" alt="Image download support must be enabled" /><img src="support/swatch-orange.png" width="96" height="192" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-007.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-007.xht new file mode 100644 index 0000000..4739928 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-007.xht
@@ -0,0 +1,55 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height applied to elements with 'display' set to 'table-cell'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-applies-to-001-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="The 'line-height' property applies to elements with 'display' set to 'table-cell'." /> + <style type="text/css"> + #div1 + { + position: relative; + } + #div2 + { + background: orange; + height: 2in; + left: 1in; + position: absolute; + top: 0; + width: 1in; + } + #table + { + display: table; + table-layout: fixed; + } + #row + { + display: table-row; + } + #cell + { + background: blue; + display: table-cell; + line-height: 2in; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="table"> + <div id="row"> + <div id="cell"> </div> + </div> + </div> + <div id="div2"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-008-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-008-expected.xht new file mode 100644 index 0000000..594f61a --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-008-expected.xht
@@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + </head> + + <body> + + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + + <div><img src="support/swatch-blue.png" width="96" height="192" alt="Image download support must be enabled" /><img src="support/swatch-orange.png" width="96" height="192" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-008.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-008.xht new file mode 100644 index 0000000..acc5cd7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-008.xht
@@ -0,0 +1,50 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height applied to elements with 'display' set to 'inline'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-applies-to-001-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="The 'line-height' property applies to elements with 'display' set to 'inline'." /> + <style type="text/css"> + #div1 + { + background: blue; + position: relative; + width: 2in; + } + #div2 + { + display: inline; + line-height: 1in; + } + #div3 + { + background: orange; + height: 2in; + left: 1in; + position: absolute; + top: 0; + width: 1in; + } + .box + { + background: blue; + height: 0.5in; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + <div id="div1"> + <div class="box"></div> + <div id="div2"> </div> + <div class="box"></div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-009-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-009-expected.xht new file mode 100644 index 0000000..594f61a --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-009-expected.xht
@@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + </head> + + <body> + + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + + <div><img src="support/swatch-blue.png" width="96" height="192" alt="Image download support must be enabled" /><img src="support/swatch-orange.png" width="96" height="192" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-009.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-009.xht new file mode 100644 index 0000000..133b834 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-009.xht
@@ -0,0 +1,42 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height applied to elements with 'display' set to 'block'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-applies-to-001-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="The 'line-height' property applies to elements with 'display' set to 'block'." /> + <style type="text/css"> + #div1 + { + position: relative; + } + div div + { + background: orange; + height: 2in; + left: 1in; + position: absolute; + top: 0; + width: 1in; + } + span + { + background: blue; + display: block; + line-height: 2in; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + <div id="div1"> + <span> </span> + <div></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-012-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-012-expected.xht new file mode 100644 index 0000000..594f61a --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-012-expected.xht
@@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + </head> + + <body> + + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + + <div><img src="support/swatch-blue.png" width="96" height="192" alt="Image download support must be enabled" /><img src="support/swatch-orange.png" width="96" height="192" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-012.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-012.xht new file mode 100644 index 0000000..3831b222 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-012.xht
@@ -0,0 +1,42 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height applied to elements with 'display' set to 'inline-block'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-applies-to-001-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="The 'line-height' property applies to elements with 'display' set to 'inline-block'." /> + <style type="text/css"> + #div1 + { + position: relative; + } + #div2 + { + background: blue; + display: inline-block; + line-height: 2in; + width: 1in; + } + #div3 + { + background: orange; + height: 2in; + left: 1in; + position: absolute; + top: 0; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="div2"> </div> + <div id="div3"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-013-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-013-expected.xht new file mode 100644 index 0000000..594f61a --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-013-expected.xht
@@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + </head> + + <body> + + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + + <div><img src="support/swatch-blue.png" width="96" height="192" alt="Image download support must be enabled" /><img src="support/swatch-orange.png" width="96" height="192" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-013.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-013.xht new file mode 100644 index 0000000..812fd6c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-013.xht
@@ -0,0 +1,61 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height applied to elements with 'display' set to 'table'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-applies-to-001-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="The 'line-height' property applies to elements with 'display' set to 'table'." /> + <style type="text/css"> + #div1 + { + position: relative; + } + #div2 + { + background: orange; + height: 2in; + left: 1in; + position: absolute; + top: 0; + width: 1in; + } + #table + { + display: table; + table-layout: fixed; + line-height: 2in; + } + #row + { + display: table-row; + } + #cell + { + background: blue; + display: table-cell; + width: 1in; + } + .box + { + background: black; + height: 1em; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="table"> + <div id="row"> + <div id="cell"> </div> + </div> + </div> + <div id="div2"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-014-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-014-expected.xht new file mode 100644 index 0000000..594f61a --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-014-expected.xht
@@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + </head> + + <body> + + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + + <div><img src="support/swatch-blue.png" width="96" height="192" alt="Image download support must be enabled" /><img src="support/swatch-orange.png" width="96" height="192" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-014.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-014.xht new file mode 100644 index 0000000..27ad5b3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-014.xht
@@ -0,0 +1,61 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height applied to elements with 'display' set to 'inline-table'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-applies-to-001-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="The 'line-height' property applies to elements with 'display' set to 'inline-table'." /> + <style type="text/css"> + #div1 + { + position: relative; + } + #div2 + { + background: orange; + height: 2in; + left: 1in; + position: absolute; + top: 0; + width: 1in; + } + #table + { + display: inline-table; + table-layout: fixed; + line-height: 2in; + } + #row + { + display: table-row; + } + #cell + { + background: blue; + display: table-cell; + width: 1in; + } + .box + { + background: black; + height: 1em; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="table"> + <div id="row"> + <div id="cell"> </div> + </div> + </div> + <div id="div2"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-015-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-015-expected.xht new file mode 100644 index 0000000..594f61a --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-015-expected.xht
@@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + </head> + + <body> + + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + + <div><img src="support/swatch-blue.png" width="96" height="192" alt="Image download support must be enabled" /><img src="support/swatch-orange.png" width="96" height="192" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-015.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-015.xht new file mode 100644 index 0000000..50ac82d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-015.xht
@@ -0,0 +1,61 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height applied to elements with 'display' set to 'table-caption'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-applies-to-001-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="The 'line-height' property applies to elements with 'display' set to 'table-caption'." /> + <style type="text/css"> + #div1 + { + position: relative; + } + #div2 + { + background: orange; + height: 2in; + left: 1in; + position: absolute; + top: 0; + width: 1in; + } + #table + { + display: table; + } + #caption + { + background: blue; + line-height: 2in; + display: table-caption; + width: 1in; + } + #row + { + display: table-row; + } + #cell + { + display: table-cell; + height: 1em; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue and orange rectangles have the <strong>same height</strong>.</p> + <div id="div1"> + <div id="table"> + <div id="caption"> </div> + <div id="row"> + <div id="cell"></div> + </div> + </div> + <div id="div2"></div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-016-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-016-expected.xht new file mode 100644 index 0000000..f1af3d0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-016-expected.xht
@@ -0,0 +1,23 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div {margin: 100px auto auto 100px;} + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a filled green square and <strong>no red</strong>.</p> + + <div><img src="support/green15x15.png" width="100" height="100" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-016.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-016.xht new file mode 100644 index 0000000..f24581e --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-applies-to-016.xht
@@ -0,0 +1,36 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Line-height applied to elements with 'display' set to 'none'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-applies-to-016-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="The 'line-height' property applies to elements with 'display' set to 'none'." /> + <style type="text/css"> + div + { + background-color: green; + color: green; + height: 100px; + margin: 100px; + width: 100px; + } + div div + { + background-color: red; + display: none; + font-size: 72pt; + line-height: 100px; + } + </style> + </head> + <body> + <p>Test passes if there is a filled green square and <strong>no red</strong>.</p> + <div> + <div>Filler Text</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-bleed-001-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-bleed-001-expected.xht new file mode 100644 index 0000000..91e07de --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-bleed-001-expected.xht
@@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + font: 1in/1 serif; + margin-top: 0.5in; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if "Filler Text" is completely visible without any clipping and if there is no red.</p> + + <div>Filler Text</div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-bleed-001.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-bleed-001.xht new file mode 100644 index 0000000..8510cf06 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-bleed-001.xht
@@ -0,0 +1,31 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Glyphs overflow line box</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-bleed-001-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="Glyphs bleed out of the box when 'line-height' is less than the content height and the height of the box is not increased." /> + <style type="text/css"> + #div1 + { + font: 1in/1em serif; + margin-top: 1in; + } + div div + { + background: red; + line-height: 0; + } + </style> + </head> + <body> + <p>Test passes if "Filler Text" is completely visible without any clipping and if there is no red.</p> + <div id="div1"> + <div>Filler Text</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-bleed-002-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-bleed-002-expected.xht new file mode 100644 index 0000000..942dbea3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-bleed-002-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: green; + height: 100px; + margin-top: 50px; + width: 100px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a filled green square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-bleed-002.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-bleed-002.xht new file mode 100644 index 0000000..ca945fc3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/line-height-bleed-002.xht
@@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Glyphs overflow when line height of container is less than content height</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="line-height-bleed-002-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="That glyphs bleed out of the box when 'line-height' can overlap adjoining line boxes." /> + <style type="text/css"> + div + { + color: green; + font: 100px/1em Ahem; + line-height: 0; + margin-top: 100px; + width: 100px; + } + div:first-letter + { + color: red; + } + </style> + </head> + <body> + <p>Test passes if there is a filled green square and <strong>no red</strong>.</p> + <div> + <span>X X</span> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/1x1-green.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/1x1-green.png new file mode 100644 index 0000000..b98ca0ba --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/1x1-green.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/1x1-white.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/1x1-white.png new file mode 100644 index 0000000..dd43fae --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/1x1-white.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/black15x15.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/black15x15.png new file mode 100644 index 0000000..b1bbef2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/black15x15.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/blue96x96.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/blue96x96.png new file mode 100644 index 0000000..820f8cace --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/blue96x96.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/green15x15.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/green15x15.png new file mode 100644 index 0000000..5174158 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/green15x15.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/green_box.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/green_box.png new file mode 100644 index 0000000..6ed4aa50 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/green_box.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/inline-formatting-context-022.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/inline-formatting-context-022.png new file mode 100644 index 0000000..60d6463 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/inline-formatting-context-022.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/ruler-v-100px-200px.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/ruler-v-100px-200px.png new file mode 100644 index 0000000..3eef2144 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/ruler-v-100px-200px.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/swatch-blue.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/swatch-blue.png new file mode 100644 index 0000000..bf27596 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/swatch-blue.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/swatch-orange.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/swatch-orange.png new file mode 100644 index 0000000..d3cd498b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/swatch-orange.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/swatch-teal.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/swatch-teal.png new file mode 100644 index 0000000..0293ce8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/swatch-teal.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/swatch-white.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/swatch-white.png new file mode 100644 index 0000000..1a7d4323 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/support/swatch-white.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-004-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-004-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-004-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-004.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-004.xht new file mode 100644 index 0000000..2f0db77 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-004.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using pixels with a negative zero value, -0px</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a negative zero length value in pixels." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: -0px; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-005-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-005-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-005-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-005.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-005.xht new file mode 100644 index 0000000..055edde0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-005.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using pixels with a zero value, 0px</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a zero length value in pixels." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: 0px; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-006-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-006-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-006-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-006.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-006.xht new file mode 100644 index 0000000..eb60237 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-006.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using pixels with a positive zero value, +0px</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a positive zero length value in pixels." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: +0px; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-007-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-007-expected.xht new file mode 100644 index 0000000..9fd287d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-007-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + position: relative; + top: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-007.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-007.xht new file mode 100644 index 0000000..1efe6e2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-007.xht
@@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using pixels with a nominal value, 96px</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-007-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a nominal length value in pixels." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div2 + { + color: red; + } + #div3 + { + position: absolute; + top: 0; + } + #div4 + { + position: absolute; + top: 96px; + left: 1em; + } + #span1 + { + vertical-align: 96px; + } + </style> + </head> + <body> + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span>X + </div> + <div id="div3">X</div> + <div id="div4">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-008-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-008-expected.xht new file mode 100644 index 0000000..9fd287d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-008-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + position: relative; + top: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-008.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-008.xht new file mode 100644 index 0000000..91f0dcd --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-008.xht
@@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using pixels with a positive nominal value, +96px</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-007-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a positive nominal length value in pixels." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div2 + { + color: red; + } + #div3 + { + position: absolute; + top: 0; + } + #div4 + { + position: absolute; + top: 96px; + left: 1em; + } + #span1 + { + vertical-align: +96px; + } + </style> + </head> + <body> + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span>X + </div> + <div id="div3">X</div> + <div id="div4">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-016-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-016-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-016-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-016.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-016.xht new file mode 100644 index 0000000..0786dc1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-016.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using points with a negative zero value, -0pt</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a negative zero length value in points." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: -0pt; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-017-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-017-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-017-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-017.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-017.xht new file mode 100644 index 0000000..ac8e8d0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-017.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using points with a zero value, 0pt</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a zero length value in points." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: 0pt; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-018-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-018-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-018-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-018.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-018.xht new file mode 100644 index 0000000..59cd763 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-018.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using points with a positive zero value, +0pt</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a negative zero length value in points." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: +0pt; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-019-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-019-expected.xht new file mode 100644 index 0000000..9fd287d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-019-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + position: relative; + top: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-019.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-019.xht new file mode 100644 index 0000000..659277bc8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-019.xht
@@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using points with a nominal value, 72pt</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-007-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a nominal length value in points." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div2 + { + color: red; + } + #div3 + { + position: absolute; + top: 0; + } + #div4 + { + position: absolute; + top: 72pt; + left: 1em; + } + #span1 + { + vertical-align: 72pt; + } + </style> + </head> + <body> + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span>X + </div> + <div id="div3">X</div> + <div id="div4">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-020-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-020-expected.xht new file mode 100644 index 0000000..9fd287d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-020-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + position: relative; + top: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-020.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-020.xht new file mode 100644 index 0000000..e83b15e64 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-020.xht
@@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using points with a positive nominal value, +72pt</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-007-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a nominal length value in points." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div2 + { + color: red; + } + #div3 + { + position: absolute; + top: 0; + } + #div4 + { + position: absolute; + top: 72pt; + left: 1em; + } + #span1 + { + vertical-align: +72pt; + } + </style> + </head> + <body> + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span>X + </div> + <div id="div3">X</div> + <div id="div4">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-028-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-028-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-028-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-028.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-028.xht new file mode 100644 index 0000000..e0f3f30 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-028.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using picas with a negative zero value, -0pc</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a negative zero length value in picas." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: -0pc; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-029-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-029-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-029-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-029.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-029.xht new file mode 100644 index 0000000..0eb7d3f --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-029.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using picas with a zero value, 0pc</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a zero length value in picas." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: 0pc; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-030-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-030-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-030-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-030.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-030.xht new file mode 100644 index 0000000..ac4a425 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-030.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using picas with a positive zero value, +0pc</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a positive zero length value in picas." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: +0pc; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-031-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-031-expected.xht new file mode 100644 index 0000000..9fd287d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-031-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + position: relative; + top: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-031.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-031.xht new file mode 100644 index 0000000..065ab6a7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-031.xht
@@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using picas with a nominal value, 6pc</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-007-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a nominal length value in picas." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div2 + { + color: red; + } + #div3 + { + position: absolute; + top: 0; + } + #div4 + { + position: absolute; + top: 6pc; + left: 1em; + } + #span1 + { + vertical-align: 6pc; + } + </style> + </head> + <body> + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span>X + </div> + <div id="div3">X</div> + <div id="div4">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-032-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-032-expected.xht new file mode 100644 index 0000000..9fd287d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-032-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + position: relative; + top: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-032.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-032.xht new file mode 100644 index 0000000..6796ad30 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-032.xht
@@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using picas with a positive nominal value, +6pc</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-007-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a positive nominal length value in picas." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div2 + { + color: red; + } + #div3 + { + position: absolute; + top: 0; + } + #div4 + { + position: absolute; + top: 6pc; + left: 1em; + } + #span1 + { + vertical-align: +6pc; + } + </style> + </head> + <body> + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span>X + </div> + <div id="div3">X</div> + <div id="div4">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-040-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-040-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-040-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-040.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-040.xht new file mode 100644 index 0000000..665b2a8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-040.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using centimeters with a negative zero value, -0cm</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a negative zero length value in centimeters." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: -0cm; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-041-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-041-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-041-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-041.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-041.xht new file mode 100644 index 0000000..162955c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-041.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using centimeters with a zero value, 0cm</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a zero length value in centimeters." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: 0cm; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-042-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-042-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-042-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-042.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-042.xht new file mode 100644 index 0000000..7ff11d9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-042.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using centimeters with a positive zero value, +0cm</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a positive zero length value in centimeters." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: +0cm; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-043-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-043-expected.xht new file mode 100644 index 0000000..9fd287d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-043-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + position: relative; + top: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-043.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-043.xht new file mode 100644 index 0000000..1d1146b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-043.xht
@@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using centimeters with a nominal value, 2.54cm</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-007-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a nominal length value in centimeters." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div2 + { + color: red; + } + #div3 + { + position: absolute; + top: 0; + } + #div4 + { + position: absolute; + top: 2.54cm; + left: 1em; + } + #span1 + { + vertical-align: 2.54cm; + } + </style> + </head> + <body> + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span>X + </div> + <div id="div3">X</div> + <div id="div4">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-044-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-044-expected.xht new file mode 100644 index 0000000..9fd287d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-044-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + position: relative; + top: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-044.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-044.xht new file mode 100644 index 0000000..8c5d6eb8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-044.xht
@@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using centimeters with a positive nominal value, +2.54cm</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-007-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a positive nominal length value in centimeters." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div2 + { + color: red; + } + #div3 + { + position: absolute; + top: 0; + } + #div4 + { + position: absolute; + top: 2.54cm; + left: 1em; + } + #span1 + { + vertical-align: +2.54cm; + } + </style> + </head> + <body> + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span>X + </div> + <div id="div3">X</div> + <div id="div4">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-052-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-052-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-052-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-052.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-052.xht new file mode 100644 index 0000000..7d25e77 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-052.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using millimeters with a negative zero value, -0mm</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a negative zero length value in millimeters." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: -0mm; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-053-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-053-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-053-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-053.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-053.xht new file mode 100644 index 0000000..d896056 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-053.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using millimeters with a zero value, 0mm</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a zero length value in millimeters." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: 0mm; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-054-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-054-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-054-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-054.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-054.xht new file mode 100644 index 0000000..486f0e4d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-054.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using millimeters with a positive zero value, +0mm</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a positive zero length value in millimeters." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: +0mm; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-055-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-055-expected.xht new file mode 100644 index 0000000..9fd287d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-055-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + position: relative; + top: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-055.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-055.xht new file mode 100644 index 0000000..b45c74c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-055.xht
@@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using millimeters with a nominal value, 25.4mm</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-007-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a nominal length value in millimeters." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div2 + { + color: red; + } + #div3 + { + position: absolute; + top: 0; + } + #div4 + { + position: absolute; + top: 25.4mm; + left: 1em; + } + #span1 + { + vertical-align: 25.4mm; + } + </style> + </head> + <body> + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span>X + </div> + <div id="div3">X</div> + <div id="div4">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-056-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-056-expected.xht new file mode 100644 index 0000000..9fd287d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-056-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + position: relative; + top: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-056.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-056.xht new file mode 100644 index 0000000..b910002b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-056.xht
@@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using millimeters with a positive nominal value, +25.4mm</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-007-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a positive nominal length value in millimeters." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div2 + { + color: red; + } + #div3 + { + position: absolute; + top: 0; + } + #div4 + { + position: absolute; + top: 25.4mm; + left: 1em; + } + #span1 + { + vertical-align: +25.4mm; + } + </style> + </head> + <body> + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span>X + </div> + <div id="div3">X</div> + <div id="div4">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-064-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-064-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-064-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-064.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-064.xht new file mode 100644 index 0000000..014e6176 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-064.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using inches with a negative zero value, -0in</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a negative zero length value in inches." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: -0in; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-065-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-065-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-065-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-065.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-065.xht new file mode 100644 index 0000000..e02d366 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-065.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using inches with a zero value, 0in</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a zero length value in inches." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: 0in; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-066-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-066-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-066-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-066.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-066.xht new file mode 100644 index 0000000..1d052b8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-066.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using inches with a positive zero value, +0in</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a positive zero length value in inches." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: +0in; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-067-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-067-expected.xht new file mode 100644 index 0000000..9fd287d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-067-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + position: relative; + top: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-067.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-067.xht new file mode 100644 index 0000000..d1ae9c2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-067.xht
@@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using inches with a nominal value, 1in</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-007-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a nominal length value in inches." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div2 + { + color: red; + } + #div3 + { + position: absolute; + top: 0; + } + #div4 + { + position: absolute; + top: 1in; + left: 1em; + } + #span1 + { + vertical-align: 1in; + } + </style> + </head> + <body> + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span>X + </div> + <div id="div3">X</div> + <div id="div4">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-068-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-068-expected.xht new file mode 100644 index 0000000..9fd287d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-068-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + position: relative; + top: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-068.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-068.xht new file mode 100644 index 0000000..34fca2e0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-068.xht
@@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using inches with a positive nominal value, +1in</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-007-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a positive nominal length value in inches." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div2 + { + color: red; + } + #div3 + { + position: absolute; + top: 0; + } + #div4 + { + position: absolute; + top: 1in; + left: 1em; + } + #span1 + { + vertical-align: +1in; + } + </style> + </head> + <body> + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span>X + </div> + <div id="div3">X</div> + <div id="div4">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-076-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-076-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-076-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-076.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-076.xht new file mode 100644 index 0000000..00b8911d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-076.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using 'em' units with a negative zero value, -0em</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a negative zero length value in 'em' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: -0em; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-077-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-077-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-077-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-077.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-077.xht new file mode 100644 index 0000000..75f3ad0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-077.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using 'em' units with a zero value, 0em</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a zero length value in 'em' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: 0em; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-078-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-078-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-078-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-078.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-078.xht new file mode 100644 index 0000000..7b50eff --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-078.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using 'em' units with a positive zero value, +0em</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a positive zero length value in 'em' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: +0em; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-079-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-079-expected.xht new file mode 100644 index 0000000..950508f --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-079-expected.xht
@@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + position: relative; + top: 120px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-079.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-079.xht new file mode 100644 index 0000000..2a401288 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-079.xht
@@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using 'em' units with a nominal value, 6em</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-079-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a nominal length value in 'em' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div2 + { + color: red; + } + #div3 + { + position: absolute; + top: 0; + } + #div4 + { + position: absolute; + top: 6em; + left: 1em; + } + #span1 + { + vertical-align: 6em; + } + </style> + </head> + <body> + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span>X + </div> + <div id="div3">X</div> + <div id="div4">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-080-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-080-expected.xht new file mode 100644 index 0000000..950508f --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-080-expected.xht
@@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + position: relative; + top: 120px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-080.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-080.xht new file mode 100644 index 0000000..b1ccda6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-080.xht
@@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using 'em' units with a positive nominal value, +6em</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-079-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a positive nominal length value in 'em' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div2 + { + color: red; + } + #div3 + { + position: absolute; + top: 0; + } + #div4 + { + position: absolute; + top: 6em; + left: 1em; + } + #span1 + { + vertical-align: +6em; + } + </style> + </head> + <body> + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span>X + </div> + <div id="div3">X</div> + <div id="div4">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-088-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-088-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-088-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-088.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-088.xht new file mode 100644 index 0000000..9e569dd --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-088.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using 'ex' units with a negative zero value, -0ex</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a negative zero length value in 'ex' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: -0ex; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-089-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-089-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-089-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-089.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-089.xht new file mode 100644 index 0000000..f4be5d0c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-089.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using 'ex' units with a zero value, 0ex</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a zero length value in 'ex' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: 0ex; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-090-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-090-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-090-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-090.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-090.xht new file mode 100644 index 0000000..acf5e42c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-090.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using 'ex' units with a positive zero value, +0ex</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a positive zero length value in 'ex' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: +0ex; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-091-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-091-expected.xht new file mode 100644 index 0000000..9fd287d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-091-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + position: relative; + top: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-091.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-091.xht new file mode 100644 index 0000000..b216c4e --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-091.xht
@@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using 'ex' units with a nominal value, 6ex</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-007-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a nominal length value in 'ex' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div2 + { + color: red; + } + #div3 + { + position: absolute; + top: 0; + } + #div4 + { + position: absolute; + top: 6ex; + left: 1em; + } + #span1 + { + vertical-align: 6ex; + } + </style> + </head> + <body> + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span>X + </div> + <div id="div3">X</div> + <div id="div4">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-092-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-092-expected.xht new file mode 100644 index 0000000..9fd287d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-092-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + position: relative; + top: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-092.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-092.xht new file mode 100644 index 0000000..f24bda7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-092.xht
@@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using 'ex' units with a positive nominal value, +6ex</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-007-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a positive nominal length value in 'ex' units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div2 + { + color: red; + } + #div3 + { + position: absolute; + top: 0; + } + #div4 + { + position: absolute; + top: 6ex; + left: 1em; + } + #span1 + { + vertical-align: +6ex; + } + </style> + </head> + <body> + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span>X + </div> + <div id="div3">X</div> + <div id="div4">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-100-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-100-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-100-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-100.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-100.xht new file mode 100644 index 0000000..a273de2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-100.xht
@@ -0,0 +1,42 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using percentages with a negative zero value, -0%</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a negative zero length value in percentages." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + height: 1em; + line-height: 1em; + position: relative; + width: 1em; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: -0%; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-101-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-101-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-101-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-101.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-101.xht new file mode 100644 index 0000000..629b4a1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-101.xht
@@ -0,0 +1,42 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using percentages with a zero value, 0%</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a zero length value in percentages." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + height: 1em; + line-height: 1em; + position: relative; + width: 1em; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: 0%; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-102-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-102-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-102-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-102.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-102.xht new file mode 100644 index 0000000..d4fec6b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-102.xht
@@ -0,0 +1,42 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using percentages with a positive zero value, +0%</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a positive zero length value in percentages." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + height: 1em; + line-height: 1em; + position: relative; + width: 1em; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: +0%; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-103-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-103-expected.xht new file mode 100644 index 0000000..888b457 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-103-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + position: relative; + top: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-103.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-103.xht new file mode 100644 index 0000000..eb3ea31 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-103.xht
@@ -0,0 +1,52 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using percentages with a nominal value, 100%</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-103-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a nominal length value in percentages." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + height: 1em; + line-height: 1em; + position: relative; + width: 1em; + } + #div2 + { + color: red; + } + #div3 + { + position: absolute; + top: 0; + } + #div4 + { + position: absolute; + top: 100%; + left: 1em; + } + #span1 + { + vertical-align: 100%; + } + </style> + </head> + <body> + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span>X + </div> + <div id="div3">X</div> + <div id="div4">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-104-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-104-expected.xht new file mode 100644 index 0000000..888b457 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-104-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + img + img + { + position: relative; + top: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + + <div><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /><img src="support/black15x15.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-104.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-104.xht new file mode 100644 index 0000000..7169a3f --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-104.xht
@@ -0,0 +1,52 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align using percentages with a positive nominal value, +100%</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-103-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a positive nominal length value in percentages." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + height: 1em; + line-height: 1em; + position: relative; + width: 1em; + } + #div2 + { + color: red; + } + #div3 + { + position: absolute; + top: 0; + } + #div4 + { + position: absolute; + top: 100%; + left: 1em; + } + #span1 + { + vertical-align: +100%; + } + </style> + </head> + <body> + <p>Test passes if there are 2 small black squares and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span>X + </div> + <div id="div3">X</div> + <div id="div4">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-109-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-109-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-109-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-109.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-109.xht new file mode 100644 index 0000000..95dff6fd --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-109.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align with a negative zero value and no units, -0</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a negative zero length value with no units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: -0; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-110-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-110-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-110-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-110.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-110.xht new file mode 100644 index 0000000..9e7eeebd --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-110.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align with a zero value and no units, 0</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a zero length value with no units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: 0; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-111-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-111-expected.xht new file mode 100644 index 0000000..46a4400c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-111-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: black; + height: 20px; + width: 20px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + + <div></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-111.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-111.xht new file mode 100644 index 0000000..ecfe394 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-111.xht
@@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align with a positive zero value and no units, +0</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-004-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property sets a positive zero length value with no units." /> + <style type="text/css"> + div + { + font: 20px/1 Ahem; + position: relative; + } + #div3 + { + position: absolute; + top: 0; + } + #span1 + { + color: red; + vertical-align: +0; + } + </style> + </head> + <body> + <p>Test passes if there is a small black square and <strong>no red</strong>.</p> + <div id="div1"> + <div id="div2"> + <span id="span1">X</span> + </div> + <div id="div3">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-117a-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-117a-expected.xht new file mode 100644 index 0000000..72dd617 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-117a-expected.xht
@@ -0,0 +1,50 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: yellow; + height: 175px; + position: relative; + } + + img {position: absolute;} + + img#first-black + { + left: 0px; + top: 90px; + } + + img#second-blue + { + left: 120px; + top: 45px; + } + + img#third-black + { + left: 520px; + top: 90px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the blue stripe is vertically offset <strong>above the black stripes on both sides</strong>. The blue stripe must be clearly and entirely above the black stripes.</p> + + <div><img id="first-black" src="../support/black15x15.png" width="160" height="40" alt="Image download support must be enabled" /><img id="second-blue" src="../support/blue15x15.png" width="440" height="40" alt="Image download support must be enabled" /><img id="third-black" src="../support/black15x15.png" width="160" height="40" alt="Image download support must be enabled" /> + </div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-117a.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-117a.xht new file mode 100644 index 0000000..aad0f30 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-117a.xht
@@ -0,0 +1,51 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Test: 'vertical-align: text-bottom' - line-height</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" title="Section 10.8.1 Leading and half-leading" /> + <link rel="match" href="vertical-align-117a-ref.xht" /> + + <meta content="ahem" name="flags" /> + <meta content="For inline non-replaced elements (such as the span element in this testcase), the box used for vertical-alignment is the box whose height is the 'line-height' (containing the box's glyphs and the half-leading on each side). 'vertical-align: text-bottom' will align the bottom of such box with the bottom of the parent's content area and not with the bottom of the parent's box." name="assert" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: yellow; + /* + The sole purpose for such yellow background + is to help delimit and visually identify the + content area of the block container box. + */ + font: 2.5em/3.25 Ahem; + /* + equivalent to font: 40px/130px (with top-half-leading + and bottom-half-leading each equal to 45px) but + entirely font-size-relative and perfectly + text-size-scalable in all browsers + */ + } + + span + { + color: blue; + margin: auto -1em; + vertical-align: text-bottom; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the blue stripe is vertically offset <strong>above the black stripes on both sides</strong>. The blue stripe must be clearly and entirely above the black stripes.</p> + + <div>TTTT<span>MustBeAbove</span>TTTT</div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-118a-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-118a-expected.xht new file mode 100644 index 0000000..b0f2b24 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-118a-expected.xht
@@ -0,0 +1,50 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: yellow; + height: 175px; + position: relative; + } + + img {position: absolute;} + + img#first-black + { + left: 0px; + top: 45px; + } + + img#second-blue + { + left: 120px; + top: 90px; + } + + img#third-black + { + left: 520px; + top: 45px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the blue stripe is vertically offset <strong>below the black stripes on both sides</strong>. The blue stripe must be clearly and entirely below the black stripes.</p> + + <div><img id="first-black" src="../support/black15x15.png" width="160" height="40" alt="Image download support must be enabled" /><img id="second-blue" src="../support/blue15x15.png" width="440" height="40" alt="Image download support must be enabled" /><img id="third-black" src="../support/black15x15.png" width="160" height="40" alt="Image download support must be enabled" /> + </div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-118a.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-118a.xht new file mode 100644 index 0000000..076b28a --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-118a.xht
@@ -0,0 +1,51 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Test: 'vertical-align: text-top' - line-height</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" title="Section 10.8.1 Leading and half-leading" /> + <link rel="match" href="vertical-align-118a-ref.xht" /> + + <meta content="ahem" name="flags" /> + <meta content="For inline non-replaced elements (such as the span element in this testcase), the box used for vertical-alignment is the box whose height is the 'line-height' (containing the box's glyphs and the half-leading on each side). 'vertical-align: text-top' will align the top of such box with the top of the parent's content area and not with the bottom of the parent's box." name="assert" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: yellow; + /* + The sole purpose for such yellow background + is to help delimit and visually identify the + content area of the block container box. + */ + font: 2.5em/3.25 Ahem; + /* + equivalent to font: 40px/130px (with top-half-leading + and bottom-half-leading each equal to 45px) but + entirely font-size-relative and perfectly + text-size-scalable in all browsers + */ + } + + span + { + color: blue; + margin: auto -1em; + vertical-align: text-top; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the blue stripe is vertically offset <strong>below the black stripes on both sides</strong>. The blue stripe must be clearly and entirely below the black stripes.</p> + + <div>LLLL<span>MustBeBelow</span>LLLL</div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-121-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-121-expected.xht new file mode 100644 index 0000000..6b2b234 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-121-expected.xht
@@ -0,0 +1,46 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div#table + { + border-collapse: collapse; + display: table; + font: 30px/1 Ahem; + width: 6em; + } + + div.tr {display: table-row;} + + div.td {color: white; display: table-cell;} + + div#top {border-top: blue solid medium;} + + div.navy {color: navy;} + ]]></style> + + </head> + + <body> + + <p>There should be a plus sign with a blue line traversing through its middle.</p> + + <div id="table"> + <div class="tr"><div class="td">A</div><div class="td">B</div><div class="navy td">C</div><div class="navy td">D</div><div class="td">E</div><div class="td">F</div></div> + + <div class="tr"><div class="td">G</div><div class="navy td">H</div><div class="navy td">I</div><div class="navy td">J</div><div class="navy td">K</div><div class="td">L</div></div> + + <div class="tr" id="top"><div class="td">M</div><div class="navy td">N</div><div class="navy td">O</div><div class="navy td">P</div><div class="navy td">Q</div><div class="td">R</div></div> + + <div class="tr"><div class="td">S</div><div class="td">T</div><div class="navy td">U</div><div class="navy td">V</div><div class="td">W</div><div class="td">X</div></div> + </div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-121.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-121.xht new file mode 100644 index 0000000..ee1c40b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-121.xht
@@ -0,0 +1,25 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: vertical-align: top</title> + <link rel="author" title="Ian Hickson" href="mailto:ian@hixie.ch"/> + <link rel="alternate" href="http://www.hixie.ch/tests/adhoc/css/box/inline/vertical-align/001.html" type="text/html"/> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#line-height" /> + <link rel="match" href="vertical-align-121-ref.xht" /> + + <meta name="flags" content="ahem" /> + <style type="text/css"> + div { color: navy; text-align: center; width: 6em; font: 30px/1 Ahem; } + span { font-size: 2em; } + .bottom { border-bottom: solid blue; } + .bottom span { vertical-align: bottom; } + .top span { vertical-align: top; } + </style> + </head> + <body> + + <p>There should be a plus sign with a blue line traversing through its middle.</p> + <div class="bottom">x<span>X</span>x</div> + <div class="top">x<span>X</span>x</div> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-001-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-001-expected.xht new file mode 100644 index 0000000..8ed51e0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-001-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: orange; + height: 96px; + width: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + + <div><img src="support/swatch-blue.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-001.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-001.xht new file mode 100644 index 0000000..0f70295 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-001.xht
@@ -0,0 +1,52 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align applied to elements with 'display' set to 'table-row-group'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-03-03 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-applies-to-001-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property does not apply to elements with 'display' set to 'table-row-group'." /> + <style type="text/css"> + div + { + color: blue; + font: 20px/1em Ahem; + } + #test + { + display: table-row-group; + vertical-align: bottom; + } + #table + { + display: table; + table-layout: fixed; + } + #row + { + display: table-row; + } + #cell + { + background: orange; + display: table-cell; + height: 1in; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + <div id="table"> + <div id="test"> + <div id="row"> + <div id="cell">X</div> + </div> + </div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-002-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-002-expected.xht new file mode 100644 index 0000000..8ed51e0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-002-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: orange; + height: 96px; + width: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + + <div><img src="support/swatch-blue.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-002.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-002.xht new file mode 100644 index 0000000..041e31c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-002.xht
@@ -0,0 +1,52 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align applied to elements with 'display' set to 'table-header-group'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-03-03 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-applies-to-001-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property does not apply to elements with 'display' set to 'table-header-group'." /> + <style type="text/css"> + div + { + color: blue; + font: 20px/1em Ahem; + } + #test + { + display: table-header-group; + vertical-align: bottom; + } + #table + { + display: table; + table-layout: fixed; + } + #row + { + display: table-row; + } + #cell + { + background: orange; + display: table-cell; + height: 1in; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + <div id="table"> + <div id="test"> + <div id="row"> + <div id="cell">X</div> + </div> + </div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-003-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-003-expected.xht new file mode 100644 index 0000000..8ed51e0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-003-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: orange; + height: 96px; + width: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + + <div><img src="support/swatch-blue.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-003.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-003.xht new file mode 100644 index 0000000..158e486 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-003.xht
@@ -0,0 +1,52 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align applied to elements with 'display' set to 'table-footer-group'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-03-03 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-applies-to-001-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property does not apply to elements with 'display' set to 'table-footer-group'." /> + <style type="text/css"> + div + { + color: blue; + font: 20px/1em Ahem; + } + #test + { + display: table-footer-group; + vertical-align: bottom; + } + #table + { + display: table; + table-layout: fixed; + } + #row + { + display: table-row; + } + #cell + { + background: orange; + display: table-cell; + height: 1in; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + <div id="table"> + <div id="test"> + <div id="row"> + <div id="cell">X</div> + </div> + </div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-004-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-004-expected.xht new file mode 100644 index 0000000..8ed51e0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-004-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: orange; + height: 96px; + width: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + + <div><img src="support/swatch-blue.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-004.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-004.xht new file mode 100644 index 0000000..b3dd573 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-004.xht
@@ -0,0 +1,46 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align applied to elements with 'display' set to 'table-row'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-03-03 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-applies-to-001-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property does not apply to elements with 'display' set to 'table-row'." /> + <style type="text/css"> + div + { + color: blue; + font: 20px/1em Ahem; + } + #table + { + display: table; + table-layout: fixed; + } + #row + { + display: table-row; + vertical-align: bottom; + } + #cell + { + background: orange; + display: table-cell; + height: 1in; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + <div id="table"> + <div id="row"> + <div id="cell">X</div> + </div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-005-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-005-expected.xht new file mode 100644 index 0000000..8ed51e0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-005-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: orange; + height: 96px; + width: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + + <div><img src="support/swatch-blue.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-005.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-005.xht new file mode 100644 index 0000000..7f80e43 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-005.xht
@@ -0,0 +1,51 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align applied to elements with 'display' set to 'table-column-group'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-03-03 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-applies-to-001-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property does not apply to elements with 'display' set to 'table-column-group'." /> + <style type="text/css"> + div + { + color: blue; + font: 20px/1em Ahem; + } + #test + { + display: table-column-group; + vertical-align: bottom; + } + #table + { + display: table; + table-layout: fixed; + } + #row + { + display: table-row; + } + #cell + { + background: orange; + display: table-cell; + height: 1in; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + <div id="table"> + <div id="test"></div> + <div id="row"> + <div id="cell">X</div> + </div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-006-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-006-expected.xht new file mode 100644 index 0000000..8ed51e0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-006-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: orange; + height: 96px; + width: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + + <div><img src="support/swatch-blue.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-006.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-006.xht new file mode 100644 index 0000000..f6f14f2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-006.xht
@@ -0,0 +1,52 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align applied to elements with 'display' set to 'table-column'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-03-03 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-applies-to-001-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property does not apply to elements with 'display' set to 'table-column'." /> + <link rel="alternate" href="http://www.hixie.ch/tests/adhoc/css/box/table/003.html"/> + <style type="text/css"> + div + { + color: blue; + font: 20px/1em Ahem; + } + #test + { + display: table-column; + vertical-align: bottom; + } + #table + { + display: table; + table-layout: fixed; + } + #row + { + display: table-row; + } + #cell + { + background: orange; + display: table-cell; + height: 1in; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + <div id="table"> + <div id="test"></div> + <div id="row"> + <div id="cell">X</div> + </div> + </div> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-007-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-007-expected.xht new file mode 100644 index 0000000..1d19405 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-007-expected.xht
@@ -0,0 +1,35 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: orange; + height: 96px; + width: 96px; + } + + img + { + position: relative; + top: 76px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the blue square is in the <strong>lower-left corner</strong> of a bigger orange square.</p> + + <div><img src="support/swatch-blue.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-007.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-007.xht new file mode 100644 index 0000000..828354c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-007.xht
@@ -0,0 +1,46 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align applied to elements with 'display' set to 'table-cell'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-03-03 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-applies-to-007-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property applies to elements with 'display' set to 'table-cell'." /> + <style type="text/css"> + div + { + color: blue; + font: 20px/1em Ahem; + } + #table + { + display: table; + table-layout: fixed; + } + #row + { + display: table-row; + } + #cell + { + background: orange; + display: table-cell; + height: 1in; + vertical-align: bottom; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue square is in the <strong>lower-left corner</strong> of a bigger orange square.</p> + <div id="table"> + <div id="row"> + <div id="cell">X</div> + </div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-008-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-008-expected.xht new file mode 100644 index 0000000..a7b75fc --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-008-expected.xht
@@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: orange; + height: 100px; + } + + img + { + position: relative; + top: 80px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the blue square is in the <strong>lower-left corner</strong> of a wide orange rectangle.</p> + + <div><img src="support/swatch-blue.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-008.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-008.xht new file mode 100644 index 0000000..e698ab4a --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-008.xht
@@ -0,0 +1,42 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align applied to elements with 'display' set to 'inline'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-03-03 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-applies-to-008-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property applies to elements with 'display' set to 'inline'." /> + <style type="text/css"> + div + { + background: orange; + } + div div + { + display: inline; + } + #div1 + { + color: blue; + font: 20px/1em Ahem; + vertical-align: bottom; + } + #div2 + { + color: orange; + font: 100px/1em Ahem; + } + </style> + </head> + <body> + <p>Test passes if the blue square is in the <strong>lower-left corner</strong> of a wide orange rectangle.</p> + <div> + <div id="div1">X</div> + <div id="div2">X</div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-009-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-009-expected.xht new file mode 100644 index 0000000..8ed51e0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-009-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: orange; + height: 96px; + width: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + + <div><img src="support/swatch-blue.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-009.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-009.xht new file mode 100644 index 0000000..998d92d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-009.xht
@@ -0,0 +1,32 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align applied to elements with 'display' set to 'block'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-03-03 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-applies-to-001-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property does not apply to elements with 'display' set to 'block'." /> + <style type="text/css"> + span + { + background: orange; + color: blue; + display: block; + font: 20px/1em Ahem; + height: 1in; + vertical-align: bottom; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + <div> + <span>X</span> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-012-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-012-expected.xht new file mode 100644 index 0000000..8ed51e0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-012-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: orange; + height: 96px; + width: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + + <div><img src="support/swatch-blue.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-012.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-012.xht new file mode 100644 index 0000000..0d49f55 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-012.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align applied to elements with 'display' set to 'inline-block'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-03-03 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-applies-to-001-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property does not apply to elements with 'display' set to 'inline-block'." /> + <style type="text/css"> + div + { + background: orange; + color: blue; + display: inline-block; + font: 20px/1em Ahem; + height: 1in; + vertical-align: bottom; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + <div>X</div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-013-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-013-expected.xht new file mode 100644 index 0000000..8ed51e0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-013-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: orange; + height: 96px; + width: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + + <div><img src="support/swatch-blue.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-013.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-013.xht new file mode 100644 index 0000000..1c8c395c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-013.xht
@@ -0,0 +1,46 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align applied to elements with 'display' set to 'table'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-03-03 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-applies-to-001-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property does not apply to elements with 'display' set to 'table'." /> + <style type="text/css"> + div + { + color: blue; + font: 20px/1em Ahem; + } + #table + { + display: table; + table-layout: fixed; + vertical-align: bottom; + } + #row + { + display: table-row; + } + #cell + { + background: orange; + display: table-cell; + height: 1in; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + <div id="table"> + <div id="row"> + <div id="cell">X</div> + </div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-014-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-014-expected.xht new file mode 100644 index 0000000..8ed51e0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-014-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: orange; + height: 96px; + width: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + + <div><img src="support/swatch-blue.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-014.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-014.xht new file mode 100644 index 0000000..910501c5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-014.xht
@@ -0,0 +1,46 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align applied to elements with 'display' set to 'inline-table'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-03-03 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-applies-to-001-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property does not apply to elements with 'display' set to 'inline-table'." /> + <style type="text/css"> + div + { + color: blue; + font: 20px/1em Ahem; + } + #table + { + display: inline-table; + table-layout: fixed; + vertical-align: bottom; + } + #row + { + display: table-row; + } + #cell + { + background: orange; + display: table-cell; + height: 1in; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + <div id="table"> + <div id="row"> + <div id="cell">X</div> + </div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-015-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-015-expected.xht new file mode 100644 index 0000000..8ed51e0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-015-expected.xht
@@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + background-color: orange; + height: 96px; + width: 96px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + + <div><img src="support/swatch-blue.png" width="20" height="20" alt="Image download support must be enabled" /></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-015.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-015.xht new file mode 100644 index 0000000..76106c2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-applies-to-015.xht
@@ -0,0 +1,52 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align applied to elements with 'display' set to 'table-caption'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-03-03 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-applies-to-001-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property does not apply to elements with 'display' set to 'table-caption'." /> + <style type="text/css"> + div + { + color: blue; + font: 20px/1em Ahem; + } + #table + { + display: table; + } + #caption + { + background: orange; + display: table-caption; + height: 1in; + vertical-align: bottom; + width: 1in; + } + #row + { + display: table-row; + } + #cell + { + display: table-cell; + height: 1in; + width: 1in; + } + </style> + </head> + <body> + <p>Test passes if the blue square is in the <strong>upper-left corner</strong> of a bigger orange square.</p> + <div id="table"> + <div id="caption">X</div> + <div id="row"> + <div id="cell"></div> + </div> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-001-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-001-expected.xht new file mode 100644 index 0000000..5e4bcbf --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-001-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + border-bottom: orange solid medium; + color: blue; + font: 100px/1 Ahem; + height: 100px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if 2 blue squares are touching but not overlapping the orange line.</p> + + <div>A B</div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-001.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-001.xht new file mode 100644 index 0000000..4fd8514 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-001.xht
@@ -0,0 +1,38 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align set to '0%' is equal to 'baseline'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-03-03 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-baseline-001-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property set to '0%' means the same as the 'baseline'." /> + <style type="text/css"> + div + { + border-bottom: solid orange; + color: blue; + font: 100px/1 Ahem; + height: 100px; + } + #span1 + { + vertical-align: 0%; + } + #span2 + { + vertical-align: baseline; + } + </style> + </head> + <body> + <p>Test passes if 2 blue squares are touching but not overlapping the orange line.</p> + <div> + <span id="span1">X</span> + <span id="span2">X</span> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-002-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-002-expected.xht new file mode 100644 index 0000000..5e4bcbf --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-002-expected.xht
@@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + border-bottom: orange solid medium; + color: blue; + font: 100px/1 Ahem; + height: 100px; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if 2 blue squares are touching but not overlapping the orange line.</p> + + <div>A B</div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-002.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-002.xht new file mode 100644 index 0000000..e122ab9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-002.xht
@@ -0,0 +1,38 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align set to '0' is equal to 'baseline'</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-03-03 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-baseline-001-ref.xht" /> + + <meta name="flags" content="ahem" /> + <meta name="assert" content="The 'vertical-align' property set to '0' means the same as the 'baseline'." /> + <style type="text/css"> + div + { + border-bottom: solid orange; + color: blue; + font: 100px/1 Ahem; + height: 100px; + } + #span1 + { + vertical-align: 0%; + } + #span2 + { + vertical-align: baseline; + } + </style> + </head> + <body> + <p>Test passes if 2 blue squares are touching but not overlapping the orange line.</p> + <div> + <span id="span1">X</span> + <span id="span2">X</span> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-003-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-003-expected.xht new file mode 100644 index 0000000..90b1cdb6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-003-expected.xht
@@ -0,0 +1,41 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + table + { + background-color: orange; + border-spacing: 0px; + } + + col#middle {width: 80px;} + + td {padding: 0px;} + + td.bottom + { + background-color: white; + vertical-align: bottom; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the last line of "Filler Text" inside the orange rectangle is on the same line as the arrows "-->" "<--".</p> + + <table> + <col></col> <col id="middle"></col> <col></col> + <tr><td class="bottom">--> </td><td>Filler Text Filler Text Filler Text Filler Text Filler Text Filler Text</td><td class="bottom"> <--</td></tr> + </table> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-003.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-003.xht new file mode 100644 index 0000000..dc8edbb --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-003.xht
@@ -0,0 +1,32 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align applied to 'inline-block' and baseline alignment</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-03-03 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-baseline-003-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="The 'vertical-align' property aligns the last line box of 'inline-block' elements with the baseline." /> + <style type="text/css"> + #span1 + { + font-size: 16px; + } + #span2 + { + background: orange; + display: inline-block; + width: 5em; + } + </style> + </head> + <body> + <p>Test passes if the last line of "Filler Text" inside the orange rectangle is on the same line as the arrows "-->" "<--".</p> + <div> + <span id="span1">--> <span id="span2">Filler Text Filler Text Filler Text Filler Text Filler Text Filler Text</span> <--</span> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-004a-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-004a-expected.xht new file mode 100644 index 0000000..8182e708 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-004a-expected.xht
@@ -0,0 +1,47 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + body {margin: 8px;} + + p + { + font: 1em/1.25 serif; + margin: 1em 0em; + } + + div + { + background-color: yellow; + height: 209px; + position: relative; + } + + img#blue-square, img#vertical-ruler {vertical-align: top;} + + img#black-stripe + { + bottom: 0px; + position: absolute; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the bottom edge of the blue square is flush with the 100px<br /> + line and if the top edge of the black stripe is flush with the 200px line.</p> + + <div><img id="blue-square" src="../support/blue15x15.png" width="100" height="100" alt="Image download support must be enabled" /><img id="vertical-ruler" src="../support/ruler-v-100px-200px.png" width="55" height="250" alt="Image download support must be enabled" /><img id="black-stripe" src="../support/black15x15.png" width="345" height="10" alt="Image download support must be enabled" /> + </div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-004a.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-004a.xht new file mode 100644 index 0000000..b913a6ef --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-004a.xht
@@ -0,0 +1,91 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Test: Vertical-align applied to empty 'inline-block' and baseline alignment</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" title="10.8.1 Leading and half-leading" /> + <link rel="match" href="vertical-align-baseline-004a-ref.xht" /> + + <meta content="ahem image" name="flags" /> + <meta content="The baseline of an 'inline-block' that has no in-flow line boxes is at its bottom margin edge. The bottom margin edge of an 'inline-block' that has no inflow line boxes will 'sit' on the baseline, will be located on the baseline of such 'inline-block'." name="assert" /> + + <style type="text/css"><![CDATA[ + body {margin: 8px;} + + p + { + font: 1em/1.25 serif; + margin: 1em 0em; + } + + div#wrapper + { + background-color: yellow; + /* + The sole purpose for such yellow background + is to help delimit and visually identify the + content area of the block container box. + */ + + color: black; + font: 50px/1 Ahem; + /* + So that 50px / 5 == 10 without remainder; + that way, the accurate position of baseline + does not imply fractional pixel. + Also, the height of the "p" glyph will not + create fractional pixel either. + */ + } + + div#inline-block-without-inflow-line-boxes + { + background-color: blue; + display: inline-block; + margin-bottom: 99px; + height: 2em; + width: 2em; + } + + img + { + position: absolute; + top: 72px; + + /* + + 16px : max(body's margin-top, p's margin-top) == max(8px, 16px) + + + 20px : p's first line box height + + + 20px : p's second line box height + + + 16px : p's margin-bottom + ======== + 72px + + */ + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the bottom edge of the blue square is flush with the 100px<br /> + line and if the top edge of the black stripe is flush with the 200px line.</p> + + <div id="wrapper"><div id="inline-block-without-inflow-line-boxes"></div><img src="support/ruler-v-100px-200px.png" width="55" height="250" alt="Image download support must be enabled" />pppppppp</div> + + <!-- + By definition, the top of "p" glyphs - which is the + black stripe in the rendered layout - should be + perfectly flush with the baseline. + --> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-005a-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-005a-expected.xht new file mode 100644 index 0000000..8182e708 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-005a-expected.xht
@@ -0,0 +1,47 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + body {margin: 8px;} + + p + { + font: 1em/1.25 serif; + margin: 1em 0em; + } + + div + { + background-color: yellow; + height: 209px; + position: relative; + } + + img#blue-square, img#vertical-ruler {vertical-align: top;} + + img#black-stripe + { + bottom: 0px; + position: absolute; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the bottom edge of the blue square is flush with the 100px<br /> + line and if the top edge of the black stripe is flush with the 200px line.</p> + + <div><img id="blue-square" src="../support/blue15x15.png" width="100" height="100" alt="Image download support must be enabled" /><img id="vertical-ruler" src="../support/ruler-v-100px-200px.png" width="55" height="250" alt="Image download support must be enabled" /><img id="black-stripe" src="../support/black15x15.png" width="345" height="10" alt="Image download support must be enabled" /> + </div> + + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-005a.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-005a.xht new file mode 100644 index 0000000..4bde081 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-005a.xht
@@ -0,0 +1,88 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Test: Vertical-align applied to an 'inline-block' with 'overflow' not set to 'visible' and baseline alignment</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" title="10.8.1 Leading and half-leading" /> + <link rel="match" href="vertical-align-baseline-004a-ref.xht" /> + + <meta content="ahem image" name="flags" /> + <meta content="The baseline of an 'inline-block' whose 'overflow' property has a computed value other than 'visible' is located at its bottom margin edge." name="assert" /> + + <style type="text/css"><![CDATA[ + body {margin: 8px;} + + p + { + font: 1em/1.25 serif; + margin: 1em 0em; + } + + div#wrapper + { + background-color: yellow; + /* + The sole purpose for such yellow background + is to help delimit and visually identify the + content area of the block container box. + */ + + color: black; + font: 50px/1 Ahem; + /* + So that 50px / 5 == 10 without remainder; + that way, the accurate position of baseline + does not imply fractional pixel. + Also, the height of the "p" glyph will not + create fractional pixel either. + */ + } + + div#inline-block-with-overflow-hidden + { + color: blue; + display: inline-block; + margin-bottom: 99px; + height: 2em; + overflow: hidden; + width: 2em; + } + + img + { + position: absolute; + top: 72px; + + /* + + 16px : max(body's margin-top, p's margin-top) == max(8px, 16px) + + + 20px : p's first line box height + + + 20px : p's second line box height + + + 16px : p's margin-bottom + ======== + 72px + + */ + } + ]]></style> + + </head> + + <body> + + <p>Test passes if the bottom edge of the blue square is flush with the 100px<br /> + line and if the top edge of the black stripe is flush with the 200px line.</p> + + <div id="wrapper"> + <div id="inline-block-with-overflow-hidden">XXX XXX XXX</div><img src="support/ruler-v-100px-200px.png" width="55" height="250" alt="Image download support must be enabled" />pppppppp + </div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-007-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-007-expected.xht new file mode 100644 index 0000000..d787250f --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-007-expected.xht
@@ -0,0 +1,24 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + span {font-size: 2em;} + ]]></style> + + </head> + + <body> + + <p>Test passes if the bottoms of all the 'X's are aligned.</p> + + <div>XXXXX<span>XXXXX</span></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-007.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-007.xht new file mode 100644 index 0000000..7700540e --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-007.xht
@@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Baseline alignment with a block element parent</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-03-05 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-baseline-007-ref.xht" /> + + <meta name="assert" content="The baseline of a block element is aligned with the baseline of its child inline element when 'vertical-align: baseline' is specified on the child." /> + <style type="text/css"> + span + { + font-size: 2em; + vertical-align: baseline; + } + </style> + </head> + <body> + <p>Test passes if the bottoms of all the 'X's are aligned.</p> + <div> + XXXXX<span>XXXXX</span> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-008-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-008-expected.xht new file mode 100644 index 0000000..887ae37 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-008-expected.xht
@@ -0,0 +1,31 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + left: 3px; + position: relative; + top: 3px; + } + + span {font-size: 2em;} + ]]></style> + + </head> + + <body> + + <p>Test passes if the bottoms of all the 'X's are aligned.</p> + + <div>XXXXX<span>XXXXX</span></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-008.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-008.xht new file mode 100644 index 0000000..1304e17 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-008.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Baseline alignment with a table-cell element parent</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-03-05 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-baseline-008-ref.xht" /> + + <meta name="assert" content="The baseline of a table cell element is aligned with the baseline of its child inline element when 'vertical-align: baseline' is specified on the child." /> + <style type="text/css"> + span + { + font-size: 2em; + vertical-align: baseline; + } + </style> + </head> + <body> + <p>Test passes if the bottoms of all the 'X's are aligned.</p> + <table> + <tr> + <td>XXXXX<span>XXXXX</span></td> + </tr> + </table> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-009-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-009-expected.xht new file mode 100644 index 0000000..d787250f --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-009-expected.xht
@@ -0,0 +1,24 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + span {font-size: 2em;} + ]]></style> + + </head> + + <body> + + <p>Test passes if the bottoms of all the 'X's are aligned.</p> + + <div>XXXXX<span>XXXXX</span></div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-009.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-009.xht new file mode 100644 index 0000000..a745431 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-baseline-009.xht
@@ -0,0 +1,25 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Baseline alignment with a table caption element parent</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-baseline-007-ref.xht" /> + + <meta name="assert" content="The baseline of a table caption element is aligned with the baseline of its child inline element when 'vertical-align: baseline' is specified on the child." /> + <style type="text/css"> + span + { + font-size: 2em; + vertical-align: baseline; + } + </style> + </head> + <body> + <p>Test passes if the bottoms of all the 'X's are aligned.</p> + <table> + <caption>XXXXX<span>XXXXX</span></caption> + </table> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-sub-001-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-sub-001-expected.xht new file mode 100644 index 0000000..9167843 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-sub-001-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + color: green; + font-size: 1in; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is <strong>no red</strong>.</p> + + <div>Filler Text</div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-sub-001.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-sub-001.xht new file mode 100644 index 0000000..e8b16ad --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-sub-001.xht
@@ -0,0 +1,38 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align set to 'sub' does not adjust font-size</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-03-06 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-sub-001-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="The 'vertical-align' property value 'sub' has no effect on the font-size of an element's text." /> + <style type="text/css"> + div + { + font-size: 1in; + } + #span1 + { + color: red; + position: absolute; + } + #span2 + { + color: green; + position: absolute; + vertical-align: sub; + } + </style> + </head> + <body> + <p>Test passes if there is <strong>no red</strong>.</p> + <div> + <span id="span1">Filler Text</span> + <span id="span2">Filler Text</span> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-super-001-expected.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-super-001-expected.xht new file mode 100644 index 0000000..9167843 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-super-001-expected.xht
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + + <title>CSS Reftest Reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + + <style type="text/css"><![CDATA[ + div + { + color: green; + font-size: 1in; + } + ]]></style> + + </head> + + <body> + + <p>Test passes if there is <strong>no red</strong>.</p> + + <div>Filler Text</div> + + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-super-001.xht b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-super-001.xht new file mode 100644 index 0000000..6584061c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/linebox/vertical-align-super-001.xht
@@ -0,0 +1,38 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Vertical-align set to 'super' does not adjust font-size</title> + <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> + <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2012-03-06 --> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> + <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> + <link rel="match" href="vertical-align-sub-001-ref.xht" /> + + <meta name="flags" content="" /> + <meta name="assert" content="The 'vertical-align' property value 'super' has no effect on the font-size of an element's text." /> + <style type="text/css"> + div + { + font-size: 1in; + } + #span1 + { + color: red; + position: absolute; + } + #span2 + { + color: green; + position: absolute; + vertical-align: super; + } + </style> + </head> + <body> + <p>Test passes if there is <strong>no red</strong>.</p> + <div> + <span id="span1">Filler Text</span> + <span id="span2">Filler Text</span> + </div> + </body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/100x100-lime.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/100x100-lime.png new file mode 100644 index 0000000..1b94770 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/100x100-lime.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/100x100-red.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/100x100-red.png new file mode 100644 index 0000000..57bf3dd --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/100x100-red.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/1x1-green.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/1x1-green.png new file mode 100644 index 0000000..b98ca0ba --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/1x1-green.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/1x1-lime.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/1x1-lime.png new file mode 100644 index 0000000..cb397fb --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/1x1-lime.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/1x1-maroon.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/1x1-maroon.png new file mode 100644 index 0000000..3f86b07 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/1x1-maroon.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/1x1-navy.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/1x1-navy.png new file mode 100644 index 0000000..9b9a0395 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/1x1-navy.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/1x1-red.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/1x1-red.png new file mode 100644 index 0000000..6bd73ac --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/1x1-red.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/1x1-white.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/1x1-white.png new file mode 100644 index 0000000..dd43fae --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/1x1-white.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/200x200-red.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/200x200-red.png new file mode 100644 index 0000000..f55ed7b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/200x200-red.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/50x50-green.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/50x50-green.png new file mode 100644 index 0000000..6c1406b7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/50x50-green.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/60x60-gg-rr.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/60x60-gg-rr.png new file mode 100644 index 0000000..84f5b2a4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/60x60-gg-rr.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/60x60-green.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/60x60-green.png new file mode 100644 index 0000000..b3c8cf3eb --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/60x60-green.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/60x60-red.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/60x60-red.png new file mode 100644 index 0000000..823f125 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/60x60-red.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/README b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/README new file mode 100644 index 0000000..69d1737 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/README
@@ -0,0 +1,29 @@ +CSS Global Support Directory +============================ + +This directory contains common support files (such as images and external +style sheets). These are sync'ed into the support directories of all our +test suites. If you have test-suite-specific support files, please add +them to the appropriate test-suite-specific support/ directory. + +If you add to a support/ directory, please run the tools/supportprop.py +script from the top of the repository to cascade support files into the +lower-level support directories. + +Description of the Common Support File Collection +------------------------------------------------- + +The 1x1-* images are all exactly one pixel. + +The swatch-* images all use 15x15 cells. + +The square-* images all use 15x15 cells with one pixel borders. + +The pattern-* images use cells of various sizes: + + pattern-gg-gr.png 20x20 + pattern-grg-rgr-grg.png 20x20 + pattern-rgr-grg-rgr.png 20x20 + pattern-tr.png 15x15 + pattern-grg-rrg-rgg.png 15x15 +
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/abspos-zero-width-001.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/abspos-zero-width-001.png new file mode 100644 index 0000000..4049819a --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/abspos-zero-width-001.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/bar_with_corner_dot.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/bar_with_corner_dot.png new file mode 100644 index 0000000..fbbc56de --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/bar_with_corner_dot.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/black15x15.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/black15x15.png new file mode 100644 index 0000000..b1bbef2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/black15x15.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/black96x96.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/black96x96.png new file mode 100644 index 0000000..4e5a7c7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/black96x96.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/blue-orange-rectangle.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/blue-orange-rectangle.png new file mode 100644 index 0000000..f43f193 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/blue-orange-rectangle.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/blue15x15.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/blue15x15.png new file mode 100644 index 0000000..89de32f --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/blue15x15.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/blue20x20.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/blue20x20.png new file mode 100644 index 0000000..e0af555 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/blue20x20.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/blue96x96.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/blue96x96.png new file mode 100644 index 0000000..820f8cace --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/blue96x96.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/cat.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/cat.png new file mode 100644 index 0000000..85dd732 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/cat.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/diamond.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/diamond.png new file mode 100644 index 0000000..51112ef --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/diamond.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/green15x15.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/green15x15.png new file mode 100644 index 0000000..5174158 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/green15x15.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/green200x200.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/green200x200.png new file mode 100644 index 0000000..7a47c0e --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/green200x200.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/green_box.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/green_box.png new file mode 100644 index 0000000..6ed4aa50 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/green_box.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/margin-collapse-2em-space.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/margin-collapse-2em-space.png new file mode 100644 index 0000000..2c381ef --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/margin-collapse-2em-space.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/margin-collapse-4em-space.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/margin-collapse-4em-space.png new file mode 100644 index 0000000..dc338c0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/margin-collapse-4em-space.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/orange15x15.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/orange15x15.png new file mode 100644 index 0000000..f0c26367 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/orange15x15.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/orange_box.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/orange_box.png new file mode 100644 index 0000000..793e6c9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/orange_box.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/pattern-gg-gr-100x100.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/pattern-gg-gr-100x100.png new file mode 100644 index 0000000..fd9b7e1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/pattern-gg-gr-100x100.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/pattern-gg-gr.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/pattern-gg-gr.png new file mode 100644 index 0000000..091de70b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/pattern-gg-gr.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/pattern-grg-rgr-grg.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/pattern-grg-rgr-grg.png new file mode 100644 index 0000000..9b88fbd --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/pattern-grg-rgr-grg.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/pattern-grg-rrg-rgg.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/pattern-grg-rrg-rgg.png new file mode 100644 index 0000000..fcf4f3f --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/pattern-grg-rrg-rgg.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/pattern-rgr-grg-rgr.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/pattern-rgr-grg-rgr.png new file mode 100644 index 0000000..d454e3a --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/pattern-rgr-grg-rgr.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/pattern-tr.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/pattern-tr.png new file mode 100644 index 0000000..8b4b253 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/pattern-tr.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/red15x15.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/red15x15.png new file mode 100644 index 0000000..39005d7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/red15x15.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/red_box.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/red_box.png new file mode 100644 index 0000000..57bf3dd --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/red_box.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/ring.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/ring.png new file mode 100644 index 0000000..061bb94 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/ring.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/ruler-h-200px-400px.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/ruler-h-200px-400px.png new file mode 100644 index 0000000..a6461c3d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/ruler-h-200px-400px.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/ruler-v-100px-200px.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/ruler-v-100px-200px.png new file mode 100644 index 0000000..3eef2144 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/ruler-v-100px-200px.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/square-outline-32x32.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/square-outline-32x32.png new file mode 100644 index 0000000..917163f --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/square-outline-32x32.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/square-purple.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/square-purple.png new file mode 100644 index 0000000..0f522d7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/square-purple.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/square-teal.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/square-teal.png new file mode 100644 index 0000000..e567f51 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/square-teal.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/square-white.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/square-white.png new file mode 100644 index 0000000..5853cbb --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/square-white.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-aqua.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-aqua.png new file mode 100644 index 0000000..dd47e286 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-aqua.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-blue.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-blue.png new file mode 100644 index 0000000..bf27596 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-blue.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-fuchsia.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-fuchsia.png new file mode 100644 index 0000000..746f7ce --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-fuchsia.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-green.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-green.png new file mode 100644 index 0000000..0aa79b0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-green.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-lime.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-lime.png new file mode 100644 index 0000000..55fd7fd --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-lime.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-olive.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-olive.png new file mode 100644 index 0000000..8fff8179 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-olive.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-orange.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-orange.png new file mode 100644 index 0000000..d3cd498b --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-orange.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-red.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-red.png new file mode 100644 index 0000000..1caf25c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-red.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-teal.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-teal.png new file mode 100644 index 0000000..0293ce8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-teal.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-white.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-white.png new file mode 100644 index 0000000..1a7d4323 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-white.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-yellow.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-yellow.png new file mode 100644 index 0000000..1591aa0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/swatch-yellow.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/test-bl.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/test-bl.png new file mode 100644 index 0000000..904e24e9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/test-bl.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/test-br.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/test-br.png new file mode 100644 index 0000000..f413ff5c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/test-br.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/test-outer.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/test-outer.png new file mode 100644 index 0000000..82eeace7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/test-outer.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/test-tl.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/test-tl.png new file mode 100644 index 0000000..f6ac0ef --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/test-tl.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/test-tr.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/test-tr.png new file mode 100644 index 0000000..59843ae5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/test-tr.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/transparent_green.png b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/transparent_green.png new file mode 100644 index 0000000..d5f50d32 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/csswg-test/css21/support/transparent_green.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/imported/web-platform-tests/shadow-dom/Element-interface-attachShadow-expected.txt b/third_party/WebKit/LayoutTests/imported/web-platform-tests/shadow-dom/Element-interface-attachShadow-expected.txt new file mode 100644 index 0000000..47dee12c --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/web-platform-tests/shadow-dom/Element-interface-attachShadow-expected.txt
@@ -0,0 +1,11 @@ +This is a testharness.js-based test. +PASS Check the existence of Element.attachShadow +PASS Nodes other than Element should not have attachShadow +FAIL Element.attachShadow must throw a TypeError if mode is not "open" or "closed" assert_throws: attachShadow must throw a TypeError when mode is omitted function "function () { + document.createElement('div').attac..." did not throw +PASS Element.attachShadow must create an instance of ShadowRoot +PASS Element.attachShadow must throw a InvalidStateError if the context object already hosts a shadow tree +FAIL Element.attachShadow must throw a NotSupportedError for button, details, input, marquee, meter, progress, select, textarea, and keygen elements assert_throws: Calling attachShadow({mode: "open"}) on button element must throw function "function () { + document.createElement(elementN..." did not throw +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/imported/web-platform-tests/shadow-dom/Element-interface-attachShadow.html b/third_party/WebKit/LayoutTests/imported/web-platform-tests/shadow-dom/Element-interface-attachShadow.html new file mode 100644 index 0000000..d4eba1a3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/web-platform-tests/shadow-dom/Element-interface-attachShadow.html
@@ -0,0 +1,95 @@ +<!DOCTYPE html> +<html> +<head> +<title>Shadow DOM: Attaching a ShadowRoot</title> +<meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"> +<meta name="assert" content="Element.prototype.attachShadow should create an instance of ShadowRoot"> +<link rel="help" href="https://w3c.github.io/webcomponents/spec/shadow/#widl-Element-attachShadow-ShadowRoot-ShadowRootInit-shadowRootInitDict"> +<script src="../../../resources/testharness.js"></script> +<script src="../../../resources/testharnessreport.js"></script> +<link rel='stylesheet' href='../../../resources/testharness.css'> +</head> +<body> +<div id="log"></div> +<script> + +test(function () { + assert_true('attachShadow' in Element.prototype, 'Element.prototype.attachShadow must exist'); + assert_equals(typeof(document.createElement('div').attachShadow), 'function', 'An instance of div must have attachShadow which is a function'); +}, 'Check the existence of Element.attachShadow'); + +test(function () { + assert_false('attachShadow' in Node.prototype, 'Node.prototype.attachShadow must not exist'); + assert_false('attachShadow' in CharacterData.prototype, 'CharacterData.prototype.attachShadow must not exist'); + assert_false('attachShadow' in Comment.prototype, 'Comment.prototype.attachShadow must not exist'); + assert_equals(typeof(document.createComment('').attachShadow), 'undefined', 'An instance of comment must not have attachShadow'); + assert_false('attachShadow' in Document.prototype, 'Document.prototype.attachShadow must not exist'); + assert_equals(typeof(document.attachShadow), 'undefined', 'An instance of document must not have attachShadow which is a function'); + assert_false('attachShadow' in DocumentFragment.prototype, 'DocumentFragment.prototype.attachShadow must not exist'); + assert_equals(typeof((new DOMParser()).parseFromString('', 'text/html').attachShadow), 'undefined', 'An instance of document must not have attachShadow which is a function'); + assert_false('attachShadow' in Text.prototype, 'Text.prototype.attachShadow must not exist'); + assert_equals(typeof(document.createTextNode('').attachShadow), 'undefined', 'An instance of text node must not have attachShadow'); +}, 'Nodes other than Element should not have attachShadow'); + +test(function () { + assert_throws({'name': 'TypeError'}, function () { + document.createElement('div').attachShadow({}) + }, 'attachShadow must throw a TypeError when mode is omitted'); + + assert_throws({'name': 'TypeError'}, function () { + document.createElement('div').attachShadow({mode: true}) + }, 'attachShadow must throw a TypeError when mode is a boolean'); + + assert_throws({'name': 'TypeError'}, function () { + document.createElement('div').attachShadow({mode: 1}) + }, 'attachShadow must throw a TypeError when mode is 1'); +}, 'Element.attachShadow must throw a TypeError if mode is not "open" or "closed"'); + +test(function () { + assert_true(document.createElement('div').attachShadow({mode: "open"}) instanceof ShadowRoot, + 'attachShadow({mode: "open"}) should create an instance of ShadowRoot'); + assert_true(document.createElement('div').attachShadow({mode: "closed"}) instanceof ShadowRoot, + 'attachShadow({mode: "closed"}) should create an instance of ShadowRoot'); +}, 'Element.attachShadow must create an instance of ShadowRoot'); + +test(function () { + assert_throws({'name': 'InvalidStateError'}, function () { + var div = document.createElement('div'); + div.attachShadow({mode: "open"}); + div.attachShadow({mode: "open"}); + }, 'Calling attachShadow({mode: "open"}) twice on the same element must throw'); + + assert_throws({'name': 'InvalidStateError'}, function () { + var div = document.createElement('div'); + div.attachShadow({mode: "closed"}); + div.attachShadow({mode: "closed"}); + }, 'Calling attachShadow({mode: "closed"}) twice on the same element must throw'); + + assert_throws({'name': 'InvalidStateError'}, function () { + var div = document.createElement('div'); + div.attachShadow({mode: "open"}); + div.attachShadow({mode: "closed"}); + }, 'Calling attachShadow({mode: "closed"}) after attachShadow({mode: "open"}) on the same element must throw'); + + assert_throws({'name': 'InvalidStateError'}, function () { + var div = document.createElement('div'); + div.attachShadow({mode: "closed"}); + div.attachShadow({mode: "open"}); + }, 'Calling attachShadow({mode: "open"}) after attachShadow({mode: "closed"}) on the same element must throw'); +}, 'Element.attachShadow must throw a InvalidStateError if the context object already hosts a shadow tree'); + +test(function () { + for (var elementName of ['button', 'details', 'input', 'marquee', 'meter', 'progress', 'select', 'textarea', 'keygen']) { + assert_throws({'name': 'NotSupportedError'}, function () { + document.createElement(elementName).attachShadow({mode: "open"}); + }, 'Calling attachShadow({mode: "open"}) on ' + elementName + ' element must throw'); + + assert_throws({'name': 'NotSupportedError'}, function () { + document.createElement(elementName).attachShadow({mode: "closed"}); + }, 'Calling attachShadow({mode: "closed"}) on ' + elementName + ' element must throw'); + } +}, 'Element.attachShadow must throw a NotSupportedError for button, details, input, marquee, meter, progress, select, textarea, and keygen elements'); + +</script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/web-platform-tests/shadow-dom/Element-interface-shadowRoot-attribute.html b/third_party/WebKit/LayoutTests/imported/web-platform-tests/shadow-dom/Element-interface-shadowRoot-attribute.html new file mode 100644 index 0000000..8b57c06 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/web-platform-tests/shadow-dom/Element-interface-shadowRoot-attribute.html
@@ -0,0 +1,46 @@ +<!DOCTYPE html> +<html> +<head> +<title>Shadow DOM: Element interface shadowRoot attribute</title> +<meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"> +<meta name="assert" content="shadowRoot attribute on Element interface must return the associated open shadow tree if there is one"> +<link rel="help" href="https://w3c.github.io/webcomponents/spec/shadow/#the-shadowroot-interface"> +<script src="../../../resources/testharness.js"></script> +<script src="../../../resources/testharnessreport.js"></script> +<link rel='stylesheet' href='../../../resources/testharness.css'> +</head> +<body> +<div id="log"></div> +<script> + +test(function () { + assert_true('shadowRoot' in Element.prototype, 'shadowRoot must be defined on Element prototype'); + assert_true('shadowRoot' in document.createElement('div'), 'shadowRoot must be defined on an instance of div element'); + assert_false('shadowRoot' in Node.prototype, 'shadowRoot must not be defined on Node prototype'); + assert_false('shadowRoot' in Text.prototype, 'shadowRoot must not be defined on Text prototype'); + assert_false('shadowRoot' in document.createTextNode(''), 'shadowRoot must not be defined on an instance of Text node'); + assert_false('shadowRoot' in Comment.prototype, 'shadowRoot must not be defined on Comment prototype'); + assert_false('shadowRoot' in document.createComment(''), 'shadowRoot must not be defined on an instance of Comment node'); + assert_false('shadowRoot' in Document.prototype, 'shadowRoot must not be defined on Document prototype'); + assert_false('shadowRoot' in document, 'shadowRoot must not be defined on an instance of Document'); + assert_false('shadowRoot' in DocumentFragment.prototype, 'shadowRoot must not be defined on DocumentFragment prototype'); + assert_false('shadowRoot' in (new DOMParser).parseFromString('', 'text/html'), 'shadowRoot must not be defined on an instance of DocumentFragment node'); +}, 'shadowRoot must be defined on Element prototype'); + +test(function () { + var host = document.createElement('div'); + assert_equals(host.shadowRoot, null, 'shadowRoot must return null when the host does not have a shadow tree attached to it'); + + var openShadowRoot = host.attachShadow({mode: 'open'}); + assert_equals(host.shadowRoot, openShadowRoot, 'shadowRoot must return the open shadow root attachShadow attached'); +}, 'shadowRoot attribute must return the open shadow root associated with the element'); + +test(function () { + var host = document.createElement('div'); + host.attachShadow({mode: 'closed'}); + assert_equals(host.shadowRoot, null); +}, 'shadowRoot attribute must return null if the shadow root attached to the element is closed'); + +</script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/imported/web-platform-tests/shadow-dom/ShadowRoot-interface-expected.txt b/third_party/WebKit/LayoutTests/imported/web-platform-tests/shadow-dom/ShadowRoot-interface-expected.txt new file mode 100644 index 0000000..e3e977fb --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/web-platform-tests/shadow-dom/ShadowRoot-interface-expected.txt
@@ -0,0 +1,15 @@ +This is a testharness.js-based test. +PASS Check the existence of ShadowRoot interface +PASS ShadowRoot must inherit from DocumentFragment +PASS ShadowRoot must not be a constructor +PASS ShadowRoot.activeElement must return the focused element of the context object when shadow root is open. +PASS ShadowRoot.activeElement must return the focused element of the context object when shadow root is closed. +PASS ShadowRoot.host must return the shadow host of the context object. +PASS ShadowRoot.innerHTML must return the result of the HTML fragment serialization algorithm when shadow root is open. +PASS ShadowRoot.innerHTML must return the result of the HTML fragment serialization algorithm when shadow root is closed. +PASS ShadowRoot.innerHTML must replace all with the result of invoking the fragment parsing algorithm when shadow root is open. +PASS ShadowRoot.innerHTML must replace all with the result of invoking the fragment parsing algorithm when shadow root is closed. +FAIL ShadowRoot.styleSheets must return a StyleSheetList sequence containing the shadow root style sheets when shadow root is open. assert_equals: shadowRoot.styleSheets must contain two items when the shadow root has two style elements expected 2 but got 0 +FAIL ShadowRoot.styleSheets must return a StyleSheetList sequence containing the shadow root style sheets when shadow root is closed. assert_equals: shadowRoot.styleSheets must contain two items when the shadow root has two style elements expected 2 but got 0 +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/imported/web-platform-tests/shadow-dom/ShadowRoot-interface.html b/third_party/WebKit/LayoutTests/imported/web-platform-tests/shadow-dom/ShadowRoot-interface.html new file mode 100644 index 0000000..8bd2c9d --- /dev/null +++ b/third_party/WebKit/LayoutTests/imported/web-platform-tests/shadow-dom/ShadowRoot-interface.html
@@ -0,0 +1,112 @@ +<!DOCTYPE html> +<html> +<head> +<title>Shadow DOM: ShadowRoot interface</title> +<meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"> +<meta name="assert" content="ShadowRoot interface and its attributes must be defined"> +<link rel="help" href="https://w3c.github.io/webcomponents/spec/shadow/#the-shadowroot-interface"> +<script src="../../../resources/testharness.js"></script> +<script src="../../../resources/testharnessreport.js"></script> +<link rel='stylesheet' href='../../../resources/testharness.css'> +</head> +<body> +<div id="log"></div> +<script> + +test(function () { + assert_true('ShadowRoot' in window, '"ShadowRoot" exists on window'); +}, 'Check the existence of ShadowRoot interface'); + +test(function () { + assert_equals(ShadowRoot.prototype.__proto__, DocumentFragment.prototype, 'ShadowRoot must inherit from DocumentFragment'); +}, 'ShadowRoot must inherit from DocumentFragment'); + +test(function () { + assert_throws({'name': 'TypeError'}, function () { new ShadowRoot(); }, 'new ShadowRoot() must throw a TypeError'); +}, 'ShadowRoot must not be a constructor'); + +function testActiveElement(mode) { + test(function () { + var host = document.createElement('div'); + document.body.appendChild(host); + var shadowRoot = host.attachShadow({'mode': mode}); + shadowRoot.appendChild(document.createElement('input')); + assert_equals(shadowRoot.activeElement, null, 'ShadowRoot.host must return null if an ' + mode + ' shadow tree does not have a focused element'); + shadowRoot.firstChild.focus(); + assert_equals(shadowRoot.activeElement, shadowRoot.firstChild, 'ShadowRoot.host must return the focused element of an ' + mode + ' shadow tree'); + host.remove(); + assert_equals(shadowRoot.activeElement, null, 'ShadowRoot.host must return null if an ' + mode + ' shadow tree lost focus'); + }, 'ShadowRoot.activeElement must return the focused element of the context object when shadow root is ' + mode + '.'); +} + +testActiveElement('open'); +testActiveElement('closed'); + +test(function () { + var host1 = document.createElement('div'); + assert_equals(host1.attachShadow({'mode': 'open'}).host, host1, 'ShadowRoot.host must return the shadow host of an open shadow tree') + + var host2 = document.createElement('div'); + assert_equals(host2.attachShadow({'mode': 'closed'}).host, host2, 'ShadowRoot.host must return the shadow host of a closed shadow tree'); +}, 'ShadowRoot.host must return the shadow host of the context object.'); + +function testInnerHTML(mode) { + test(function () { + var host = document.createElement('div'); + var shadowRoot = host.attachShadow({'mode': mode}); + assert_equals(shadowRoot.innerHTML, '', 'ShadowRoot.innerHTML must be an empty string when the shadow root does not have any children'); + + shadowRoot.appendChild(document.createTextNode('hello')); + assert_equals(shadowRoot.innerHTML, 'hello', 'ShadowRoot.innerHTML must serialize a text node child'); + + shadowRoot.appendChild(document.createElement('span')); + assert_equals(shadowRoot.innerHTML, 'hello<span></span>', 'ShadowRoot.innerHTML must serialize a HTML element child'); + }, 'ShadowRoot.innerHTML must return the result of the HTML fragment serialization algorithm when shadow root is ' + mode + '.'); +} + +testInnerHTML('open'); +testInnerHTML('closed'); + +function testSetInnerHTML(mode) { + test(function () { + var host = document.createElement('div'); + var shadowRoot = host.attachShadow({'mode': mode}); + shadowRoot.innerHTML = 'hello'; + assert_equals(shadowRoot.childNodes.length, 1, 'ShadowRoot.innerHTML = "hello" must insert a single child (text node)'); + assert_true(shadowRoot.firstChild instanceof Text, 'The first child of the shadow root after ShadowRoot.innerHTML = "hello" must be a Text node'); + assert_equals(shadowRoot.firstChild.data, 'hello', 'The first Text node should contain the string "hello" after ShadowRoot.innerHTML = "hello"'); + + shadowRoot.innerHTML = '<b>hello</b>'; + assert_equals(shadowRoot.childNodes.length, 1, 'ShadowRoot.innerHTML = "<b>hello</b>" must insert a single child (b)'); + assert_true(shadowRoot.firstChild instanceof HTMLElement, 'The first child of the shadow root after ShadowRoot.innerHTML = "<b>hello</b>" must be a HTML element'); + assert_equals(shadowRoot.firstChild.localName, 'b', 'The local name of the shadow root\'s first child after ShadowRoot.innerHTML = "<b>hello</b>" must be "b"'); + assert_equals(shadowRoot.innerHTML, '<b>hello</b>', 'ShadowRoot.innerHTML must be "<b>hello</b>" after ShadowRoot.innerHTML = "<b>hello</b>"'); + + shadowRoot.innerHTML = ''; + assert_equals(shadowRoot.childNodes.length, 0, 'ShadowRoot.innerHTML = "" must remove all its children'); + }, 'ShadowRoot.innerHTML must replace all with the result of invoking the fragment parsing algorithm when shadow root is ' + mode + '.'); +} + +testSetInnerHTML('open'); +testSetInnerHTML('closed'); + +function testStyleSheets(mode) { + test(function () { + var host = document.createElement('div'); + var shadowRoot = host.attachShadow({'mode': mode}); + + assert_equals(shadowRoot.styleSheets.length, 0, 'shadowRoot.styleSheets must be empty when the shadow root does not contain any stylesheets'); + shadowRoot.innerHTML = '<span></span><style> a.rule {} </style><style> b.rule {} </style>'; + assert_equals(shadowRoot.styleSheets.length, 2, 'shadowRoot.styleSheets must contain two items when the shadow root has two style elements'); + var styles = shadowRoot.querySelectorAll('style'); + assert_equals(shadowRoot.styleSheets[0], styles[0].sheet, 'shadowRoot.styleSheets[0] must be the first style element in the shadow root'); + assert_equals(shadowRoot.styleSheets[1], styles[1].sheet, 'shadowRoot.styleSheets[1] must be the second style element in the shadow root'); + }, 'ShadowRoot.styleSheets must return a StyleSheetList sequence containing the shadow root style sheets when shadow root is ' + mode + '.'); +} + +testStyleSheets('open'); +testStyleSheets('closed'); + +</script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/console/command-line-api-getEventListeners-expected.txt b/third_party/WebKit/LayoutTests/inspector/console/command-line-api-getEventListeners-expected.txt index 94a2b35..8fd4c3da 100644 --- a/third_party/WebKit/LayoutTests/inspector/console/command-line-api-getEventListeners-expected.txt +++ b/third_party/WebKit/LayoutTests/inspector/console/command-line-api-getEventListeners-expected.txt
@@ -8,13 +8,13 @@ [page] listener: function listener1() { } [page] useCapture: false [page] type: "keydown" -[page] remove: function () { node.removeEventListener(this.type, this.listener, this.useCapture) } +[page] remove: function () {node.removeEventListener(this.type,this.listener,this.useCapture);} [page] } [page] 1: { [page] listener: function listener2() { } [page] useCapture: true [page] type: "keydown" -[page] remove: function () { node.removeEventListener(this.type, this.listener, this.useCapture) } +[page] remove: function () {node.removeEventListener(this.type,this.listener,this.useCapture);} [page] } [page] } [page] - inner after a removal - @@ -23,7 +23,7 @@ [page] listener: function listener2() { } [page] useCapture: true [page] type: "keydown" -[page] remove: function () { node.removeEventListener(this.type, this.listener, this.useCapture) } +[page] remove: function () {node.removeEventListener(this.type,this.listener,this.useCapture);} [page] } [page] } [page] - outer - @@ -32,7 +32,7 @@ [page] listener: function listener2() { } [page] useCapture: true [page] type: "keydown" -[page] remove: function () { node.removeEventListener(this.type, this.listener, this.useCapture) } +[page] remove: function () {node.removeEventListener(this.type,this.listener,this.useCapture);} [page] } [page] } [page] mousedown: { @@ -40,7 +40,7 @@ [page] listener: function listener2() { } [page] useCapture: true [page] type: "mousedown" -[page] remove: function () { node.removeEventListener(this.type, this.listener, this.useCapture) } +[page] remove: function () {node.removeEventListener(this.type,this.listener,this.useCapture);} [page] } [page] } [page] mousemove: { @@ -48,7 +48,7 @@ [page] listener: function listener1() { } [page] useCapture: false [page] type: "mousemove" -[page] remove: function () { node.removeEventListener(this.type, this.listener, this.useCapture) } +[page] remove: function () {node.removeEventListener(this.type,this.listener,this.useCapture);} [page] } [page] } [page] - attribute event listeners - @@ -57,7 +57,7 @@ [page] listener: function onclick(event) { alert(1) } [page] useCapture: false [page] type: "click" -[page] remove: function () { node.removeEventListener(this.type, this.listener, this.useCapture) } +[page] remove: function () {node.removeEventListener(this.type,this.listener,this.useCapture);} [page] } [page] } [page] mouseover: { @@ -65,7 +65,7 @@ [page] listener: function onmouseover(event) { listener2() } [page] useCapture: false [page] type: "mouseover" -[page] remove: function () { node.removeEventListener(this.type, this.listener, this.useCapture) } +[page] remove: function () {node.removeEventListener(this.type,this.listener,this.useCapture);} [page] } [page] } [page] - window - @@ -74,7 +74,7 @@ [page] listener: function onload(event) { runTest() } [page] useCapture: false [page] type: "load" -[page] remove: function () { node.removeEventListener(this.type, this.listener, this.useCapture) } +[page] remove: function () {node.removeEventListener(this.type,this.listener,this.useCapture);} [page] } [page] } [page] popstate: { @@ -82,7 +82,7 @@ [page] listener: function listener1() { } [page] useCapture: false [page] type: "popstate" -[page] remove: function () { node.removeEventListener(this.type, this.listener, this.useCapture) } +[page] remove: function () {node.removeEventListener(this.type,this.listener,this.useCapture);} [page] } [page] } [page] - empty -
diff --git a/third_party/WebKit/LayoutTests/inspector/user-metrics-expected.txt b/third_party/WebKit/LayoutTests/inspector/user-metrics-expected.txt index 0cf01e1..3505c84 100644 --- a/third_party/WebKit/LayoutTests/inspector/user-metrics-expected.txt +++ b/third_party/WebKit/LayoutTests/inspector/user-metrics-expected.txt
@@ -27,6 +27,12 @@ { audits : 7 console : 8 + drawer-animations : 11 + drawer-console : 10 + drawer-network.config : 12 + drawer-rendering : 13 + drawer-sensors : 14 + drawer-sources.search : 15 elements : 1 layers : 9 network : 3
diff --git a/third_party/WebKit/LayoutTests/platform/android/css3/flexbox/flexbox-baseline-expected.png b/third_party/WebKit/LayoutTests/platform/android/css3/flexbox/flexbox-baseline-expected.png new file mode 100644 index 0000000..48d5b1a --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/android/css3/flexbox/flexbox-baseline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/forms/basic-buttons-expected.png b/third_party/WebKit/LayoutTests/platform/android/fast/forms/basic-buttons-expected.png new file mode 100644 index 0000000..d53045a1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/android/fast/forms/basic-buttons-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png b/third_party/WebKit/LayoutTests/platform/android/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png new file mode 100644 index 0000000..5b7cb3f --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/android/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/lists/001-expected.png b/third_party/WebKit/LayoutTests/platform/android/fast/lists/001-expected.png new file mode 100644 index 0000000..0942740 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/android/fast/lists/001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/lists/001-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/lists/001-expected.txt new file mode 100644 index 0000000..42ae8aad --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/android/fast/lists/001-expected.txt
@@ -0,0 +1,20 @@ +layer at (0,0) size 800x600 scrollWidth 810 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x576 + LayoutBlockFlow {DIV} at (0,0) size 784x108 [border: (3px solid #FFA500)] + LayoutBlockFlow (floating) {DIV} at (11,11) size 122x122 [bgcolor=#FFA500] [border: (3px solid #FFA500)] + LayoutListItem {DIV} at (11,11) size 762x86 [border: (3px solid #FFA500)] + LayoutListItem {DIV} at (11,11) size 740x64 [border: (3px solid #FFA500)] + LayoutListItem {DIV} at (11,11) size 718x42 [border: (3px solid #FFA500)] + LayoutListMarker (anonymous) at (103,11) size 7x19: bullet + LayoutListMarker (anonymous) at (103,11) size 7x19: bullet + LayoutListMarker (anonymous) at (103,11) size 7x19: bullet + LayoutText {#text} at (132,11) size 81x19 + text run at (132,11) width 81: "List item text." + LayoutBlockFlow {UL} at (0,124) size 784x124 + LayoutListItem {LI} at (40,0) size 744x124 [border: (2px solid #FF0000)] + LayoutListMarker (anonymous) at (755,52) size 7x19: bullet + LayoutText {#text} at (52,52) size 477x19 + text run at (52,52) width 477: "Foo fofodfosjlkdf dslkdjlk asdlksjald djklsd klasjdkas sdajd lsadjkl asjdlksajdk"
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/lists/001-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/android/fast/lists/001-vertical-expected.png new file mode 100644 index 0000000..ec53a6b --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/android/fast/lists/001-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/lists/001-vertical-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/lists/001-vertical-expected.txt new file mode 100644 index 0000000..6fe1ec9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/android/fast/lists/001-vertical-expected.txt
@@ -0,0 +1,21 @@ +layer at (0,0) size 800x600 scrollHeight 622 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 776x584 + LayoutBlockFlow {DIV} at (0,0) size 108x584 [border: (3px solid #FFA500)] + LayoutBlockFlow (floating) {DIV} at (11,11) size 122x122 [bgcolor=#FFA500] [border: (3px solid #FFA500)] + LayoutListItem {DIV} at (11,11) size 86x562 [border: (3px solid #FFA500)] + LayoutListItem {DIV} at (11,11) size 64x540 [border: (3px solid #FFA500)] + LayoutListItem {DIV} at (11,11) size 42x518 [border: (3px solid #FFA500)] + LayoutListMarker (anonymous) at (11,103) size 19x7: bullet + LayoutListMarker (anonymous) at (11,103) size 19x7: bullet + LayoutListMarker (anonymous) at (11,103) size 19x7: bullet + LayoutText {#text} at (11,132) size 19x81 + text run at (11,132) width 81: "List item text." + LayoutBlockFlow {UL} at (124,0) size 144x584 + LayoutListItem {LI} at (0,40) size 144x544 [border: (2px solid #FF0000)] + LayoutListMarker (anonymous) at (52,555) size 19x7: bullet + LayoutText {#text} at (52,52) size 39x404 + text run at (52,52) width 404: "Foo fofodfosjlkdf dslkdjlk asdlksjald djklsd klasjdkas sdajd lsadjkl" + text run at (72,52) width 69: "asjdlksajdk"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/flexbox/flexbox-baseline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/flexbox/flexbox-baseline-expected.png index 48d5b1a..4ec73c5 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css3/flexbox/flexbox-baseline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/css3/flexbox/flexbox-baseline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/flexbox/flexbox-baseline-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/css3/flexbox/flexbox-baseline-expected.txt index 86c38d9..becba82 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css3/flexbox/flexbox-baseline-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/css3/flexbox/flexbox-baseline-expected.txt
@@ -1,9 +1,9 @@ layer at (0,0) size 800x600 LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x502 - LayoutBlockFlow {HTML} at (0,0) size 800x502 -layer at (0,0) size 800x502 - LayoutBlockFlow (relative positioned) {BODY} at (0,0) size 800x502 +layer at (0,0) size 800x504 + LayoutBlockFlow {HTML} at (0,0) size 800x504 +layer at (0,0) size 800x504 + LayoutBlockFlow (relative positioned) {BODY} at (0,0) size 800x504 LayoutBlockFlow {DIV} at (0,0) size 800x55 LayoutText {#text} at (0,20) size 69x19 text run at (0,20) width 69: "before text " @@ -32,7 +32,7 @@ text run at (0,0) width 37: "above" LayoutText {#text} at (154,25) size 57x19 text run at (154,25) width 57: " after text" - LayoutBlockFlow {DIV} at (0,100) size 800x71 + LayoutBlockFlow {DIV} at (0,100) size 800x72 LayoutText {#text} at (0,30) size 69x19 text run at (0,30) width 69: "before text " LayoutFlexibleBox {DIV} at (69,5) size 151x66.81 [bgcolor=#D3D3D3] @@ -44,7 +44,7 @@ text run at (0,0) width 37: "above" LayoutText {#text} at (220,30) size 57x19 text run at (220,30) width 57: " after text" - LayoutBlockFlow {DIV} at (0,171) size 800x71 + LayoutBlockFlow {DIV} at (0,172) size 800x72 LayoutText {#text} at (0,5) size 69x19 text run at (0,5) width 69: "before text " LayoutFlexibleBox {DIV} at (69,5) size 139x66.81 [bgcolor=#D3D3D3] @@ -56,20 +56,20 @@ text run at (0,0) width 91: "h2 below" LayoutText {#text} at (208,5) size 57x19 text run at (208,5) width 57: " after text" - LayoutBlockFlow {DIV} at (0,242) size 800x45 + LayoutBlockFlow {DIV} at (0,244) size 800x45 LayoutText {#text} at (0,11) size 169x19 text run at (0,11) width 169: "should align with the middle " LayoutFlexibleBox {DIV} at (169,5) size 40x40 [bgcolor=#D3D3D3] LayoutBlockFlow {DIV} at (0,0) size 40x21 [border: none (1px solid #000000) none] LayoutText {#text} at (209,11) size 116x19 text run at (209,11) width 116: " of the grey flexbox" - LayoutBlockFlow {DIV} at (0,287) size 800x40 + LayoutBlockFlow {DIV} at (0,289) size 800x40 LayoutText {#text} at (0,20) size 172x19 text run at (0,20) width 172: "should align with the bottom " LayoutFlexibleBox {DIV} at (172,5) size 30x30 [bgcolor=#D3D3D3] LayoutText {#text} at (202,20) size 116x19 text run at (202,20) width 116: " of the grey flexbox" - LayoutBlockFlow {DIV} at (0,327) size 800x45 + LayoutBlockFlow {DIV} at (0,329) size 800x45 LayoutText {#text} at (0,5) size 69x19 text run at (0,5) width 69: "before text " LayoutFlexibleBox {DIV} at (69,5) size 48x40 [bgcolor=#D3D3D3] @@ -81,7 +81,7 @@ text run at (0,0) width 37: "below" LayoutText {#text} at (117,5) size 57x19 text run at (117,5) width 57: " after text" - LayoutBlockFlow {DIV} at (0,372) size 800x45 + LayoutBlockFlow {DIV} at (0,374) size 800x45 LayoutText {#text} at (0,25) size 69x19 text run at (0,25) width 69: "before text " LayoutFlexibleBox {DIV} at (69,5) size 48x40 [bgcolor=#D3D3D3] @@ -93,7 +93,7 @@ text run at (0,0) width 37: "above" LayoutText {#text} at (117,25) size 57x19 text run at (117,25) width 57: " after text" - LayoutBlockFlow {DIV} at (0,417) size 800x45 + LayoutBlockFlow {DIV} at (0,419) size 800x45 LayoutText {#text} at (0,10) size 169x19 text run at (0,10) width 169: "should align with the middle " LayoutFlexibleBox {DIV} at (169,5) size 40x40 [bgcolor=#D3D3D3] @@ -101,7 +101,7 @@ LayoutBlockFlow {DIV} at (0,20.50) size 40x19.50 LayoutText {#text} at (209,10) size 116x19 text run at (209,10) width 116: " of the grey flexbox" - LayoutBlockFlow {DIV} at (0,462) size 800x40 + LayoutBlockFlow {DIV} at (0,464) size 800x40 LayoutText {#text} at (0,20) size 172x19 text run at (0,20) width 172: "should align with the bottom " LayoutFlexibleBox {DIV} at (172,5) size 30x30 [bgcolor=#D3D3D3]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/basic-buttons-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/basic-buttons-expected.png index d53045a1..e030f3f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/basic-buttons-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/basic-buttons-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/basic-buttons-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/basic-buttons-expected.txt index cd47869..8ced244 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/basic-buttons-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/basic-buttons-expected.txt
@@ -1,8 +1,8 @@ layer at (0,0) size 800x600 LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x353 - LayoutBlockFlow {HTML} at (0,0) size 800x353 - LayoutBlockFlow {BODY} at (8,8) size 784x337 +layer at (0,0) size 800x354 + LayoutBlockFlow {HTML} at (0,0) size 800x354 + LayoutBlockFlow {BODY} at (8,8) size 784x338 LayoutBlockFlow (anonymous) at (0,0) size 784x80 LayoutText {#text} at (0,0) size 514x19 text run at (0,0) width 514: "Tests for basic button rendering. Creates a table with seven columns and seven rows. " @@ -14,8 +14,8 @@ text run at (0,40) width 616: "with text (\"foo\") and then uses six different paddings to make sure each of the buttons render properly. " LayoutBR {BR} at (615,40) size 1x19 LayoutBR {BR} at (0,60) size 0x19 - LayoutTable {TABLE} at (0,80) size 655x257 - LayoutTableSection {TBODY} at (0,0) size 655x257 + LayoutTable {TABLE} at (0,80) size 655x258 + LayoutTableSection {TBODY} at (0,0) size 655x258 LayoutTableRow {TR} at (0,0) size 655x22 LayoutTableCell {TD} at (0,0) size 161x22 [r=0 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 37x19 @@ -70,18 +70,18 @@ LayoutTableCell {TD} at (495,46) size 160x22 [r=2 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 104x19 text run at (1,1) width 104: "(20, 21) (16, 17)" - LayoutTableRow {TR} at (0,68) size 655x46 + LayoutTableRow {TR} at (0,68) size 655x47 LayoutTableCell {TD} at (0,80) size 161x22 [r=3 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 84x19 text run at (1,1) width 84: "padding: 10%" - LayoutTableCell {TD} at (161,74) size 58x33 [r=3 c=1 rs=1 cs=1] + LayoutTableCell {TD} at (161,75) size 58x33 [r=3 c=1 rs=1 cs=1] LayoutButton {BUTTON} at (1,1) size 25.19x31.19 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (7.59,7.59) size 10x16 LayoutImage {IMG} at (0,3) size 10x10 LayoutTableCell {TD} at (219,80) size 150x22 [r=3 c=2 rs=1 cs=1] LayoutText {#text} at (1,1) size 104x19 text run at (1,1) width 104: "(31, 25) (27, 21)" - LayoutTableCell {TD} at (369,68) size 126x46 [r=3 c=3 rs=1 cs=1] + LayoutTableCell {TD} at (369,68) size 126x47 [r=3 c=3 rs=1 cs=1] LayoutButton {INPUT} at (1,1) size 45.78x44.78 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (14.39,14.39) size 17x16 LayoutText {#text} at (0,0) size 17x16 @@ -89,79 +89,79 @@ LayoutTableCell {TD} at (495,80) size 160x22 [r=3 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 104x19 text run at (1,1) width 104: "(45, 46) (41, 42)" - LayoutTableRow {TR} at (0,114) size 655x26 - LayoutTableCell {TD} at (0,116) size 161x22 [r=4 c=0 rs=1 cs=1] + LayoutTableRow {TR} at (0,115) size 655x26 + LayoutTableCell {TD} at (0,117) size 161x22 [r=4 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 78x19 text run at (1,1) width 78: "padding: 2px" - LayoutTableCell {TD} at (161,114) size 58x26 [r=4 c=1 rs=1 cs=1] + LayoutTableCell {TD} at (161,115) size 58x26 [r=4 c=1 rs=1 cs=1] LayoutButton {BUTTON} at (1,1) size 18x24 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (4,4) size 10x16 LayoutImage {IMG} at (0,3) size 10x10 - LayoutTableCell {TD} at (219,116) size 150x22 [r=4 c=2 rs=1 cs=1] + LayoutTableCell {TD} at (219,117) size 150x22 [r=4 c=2 rs=1 cs=1] LayoutText {#text} at (1,1) size 104x19 text run at (1,1) width 104: "(24, 18) (20, 14)" - LayoutTableCell {TD} at (369,114) size 126x26 [r=4 c=3 rs=1 cs=1] + LayoutTableCell {TD} at (369,115) size 126x26 [r=4 c=3 rs=1 cs=1] LayoutButton {INPUT} at (1,1) size 25x24 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (4,4) size 17x16 LayoutText {#text} at (0,0) size 17x16 text run at (0,0) width 17: "foo" - LayoutTableCell {TD} at (495,116) size 160x22 [r=4 c=4 rs=1 cs=1] + LayoutTableCell {TD} at (495,117) size 160x22 [r=4 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 104x19 text run at (1,1) width 104: "(24, 25) (20, 21)" - LayoutTableRow {TR} at (0,140) size 655x27 - LayoutTableCell {TD} at (0,142) size 161x22 [r=5 c=0 rs=1 cs=1] + LayoutTableRow {TR} at (0,141) size 655x27 + LayoutTableCell {TD} at (0,143) size 161x22 [r=5 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 159x19 text run at (1,1) width 159: "padding: 2px 6px 3px 6px" - LayoutTableCell {TD} at (161,140) size 58x27 [r=5 c=1 rs=1 cs=1] + LayoutTableCell {TD} at (161,141) size 58x27 [r=5 c=1 rs=1 cs=1] LayoutButton {BUTTON} at (1,1) size 26x25 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (8,4) size 10x16 LayoutImage {IMG} at (0,3) size 10x10 - LayoutTableCell {TD} at (219,142) size 150x22 [r=5 c=2 rs=1 cs=1] + LayoutTableCell {TD} at (219,143) size 150x22 [r=5 c=2 rs=1 cs=1] LayoutText {#text} at (1,1) size 104x19 text run at (1,1) width 104: "(25, 26) (21, 22)" - LayoutTableCell {TD} at (369,140) size 126x27 [r=5 c=3 rs=1 cs=1] + LayoutTableCell {TD} at (369,141) size 126x27 [r=5 c=3 rs=1 cs=1] LayoutButton {INPUT} at (1,1) size 33x25 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (8,4) size 17x16 LayoutText {#text} at (0,0) size 17x16 text run at (0,0) width 17: "foo" - LayoutTableCell {TD} at (495,142) size 160x22 [r=5 c=4 rs=1 cs=1] + LayoutTableCell {TD} at (495,143) size 160x22 [r=5 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 104x19 text run at (1,1) width 104: "(25, 33) (21, 29)" - LayoutTableRow {TR} at (0,167) size 655x28 - LayoutTableCell {TD} at (0,170) size 161x22 [r=6 c=0 rs=1 cs=1] + LayoutTableRow {TR} at (0,168) size 655x28 + LayoutTableCell {TD} at (0,171) size 161x22 [r=6 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 105x19 text run at (1,1) width 105: "padding: 3px 7px" - LayoutTableCell {TD} at (161,167) size 58x28 [r=6 c=1 rs=1 cs=1] + LayoutTableCell {TD} at (161,168) size 58x28 [r=6 c=1 rs=1 cs=1] LayoutButton {BUTTON} at (1,1) size 28x26 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (9,5) size 10x16 LayoutImage {IMG} at (0,3) size 10x10 - LayoutTableCell {TD} at (219,170) size 150x22 [r=6 c=2 rs=1 cs=1] + LayoutTableCell {TD} at (219,171) size 150x22 [r=6 c=2 rs=1 cs=1] LayoutText {#text} at (1,1) size 104x19 text run at (1,1) width 104: "(26, 28) (22, 24)" - LayoutTableCell {TD} at (369,167) size 126x28 [r=6 c=3 rs=1 cs=1] + LayoutTableCell {TD} at (369,168) size 126x28 [r=6 c=3 rs=1 cs=1] LayoutButton {INPUT} at (1,1) size 35x26 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (9,5) size 17x16 LayoutText {#text} at (0,0) size 17x16 text run at (0,0) width 17: "foo" - LayoutTableCell {TD} at (495,170) size 160x22 [r=6 c=4 rs=1 cs=1] + LayoutTableCell {TD} at (495,171) size 160x22 [r=6 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 104x19 text run at (1,1) width 104: "(26, 35) (22, 31)" - LayoutTableRow {TR} at (0,195) size 655x62 - LayoutTableCell {TD} at (0,215) size 161x22 [r=7 c=0 rs=1 cs=1] + LayoutTableRow {TR} at (0,196) size 655x62 + LayoutTableCell {TD} at (0,216) size 161x22 [r=7 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 86x19 text run at (1,1) width 86: "padding: 20px" - LayoutTableCell {TD} at (161,195) size 58x62 [r=7 c=1 rs=1 cs=1] + LayoutTableCell {TD} at (161,196) size 58x62 [r=7 c=1 rs=1 cs=1] LayoutButton {BUTTON} at (1,1) size 54x60 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (22,22) size 10x16 LayoutImage {IMG} at (0,3) size 10x10 - LayoutTableCell {TD} at (219,215) size 150x22 [r=7 c=2 rs=1 cs=1] + LayoutTableCell {TD} at (219,216) size 150x22 [r=7 c=2 rs=1 cs=1] LayoutText {#text} at (1,1) size 104x19 text run at (1,1) width 104: "(60, 54) (56, 50)" - LayoutTableCell {TD} at (369,195) size 126x62 [r=7 c=3 rs=1 cs=1] + LayoutTableCell {TD} at (369,196) size 126x62 [r=7 c=3 rs=1 cs=1] LayoutButton {INPUT} at (1,1) size 61x60 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (22,22) size 17x16 LayoutText {#text} at (0,0) size 17x16 text run at (0,0) width 17: "foo" - LayoutTableCell {TD} at (495,215) size 160x22 [r=7 c=4 rs=1 cs=1] + LayoutTableCell {TD} at (495,216) size 160x22 [r=7 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 104x19 text run at (1,1) width 104: "(60, 61) (56, 57)"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png index 8b7c13b..cc8c419 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png index 037e661..760121e3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/select/select-item-background-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/select/select-item-background-clip-expected.txt index 60b5500..3b6e37b6 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/select/select-item-background-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/select/select-item-background-clip-expected.txt
@@ -16,7 +16,7 @@ text run at (0,20) width 163: "not clipped to the list box" LayoutText {#text} at (163,20) size 4x19 text run at (163,20) width 4: "." - LayoutBlockFlow (anonymous) at (0,56) size 784x67 + LayoutBlockFlow (anonymous) at (0,56) size 784x68 LayoutText {#text} at (0,0) size 0x0 LayoutText {#text} at (0,0) size 0x0 layer at (8,64) size 60x68 clip at (11,67) size 39x62 scrollHeight 74
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png index 5b7cb3f..80029a3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/lists/001-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/lists/001-expected.png index 0942740..fad89f5 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/lists/001-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/lists/001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/lists/001-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/lists/001-expected.txt index 42ae8aad..616c339 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/lists/001-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/lists/001-expected.txt
@@ -4,7 +4,8 @@ LayoutBlockFlow {HTML} at (0,0) size 800x600 LayoutBlockFlow {BODY} at (8,8) size 784x576 LayoutBlockFlow {DIV} at (0,0) size 784x108 [border: (3px solid #FFA500)] - LayoutBlockFlow (floating) {DIV} at (11,11) size 122x122 [bgcolor=#FFA500] [border: (3px solid #FFA500)] + LayoutListItem (floating) {DIV} at (11,11) size 122x122 [bgcolor=#FFA500] [border: (3px solid #FFA500)] + LayoutListMarker (anonymous) at (-18,11) size 7x19: bullet LayoutListItem {DIV} at (11,11) size 762x86 [border: (3px solid #FFA500)] LayoutListItem {DIV} at (11,11) size 740x64 [border: (3px solid #FFA500)] LayoutListItem {DIV} at (11,11) size 718x42 [border: (3px solid #FFA500)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/lists/001-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/lists/001-vertical-expected.png index ec53a6b..face3a3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/lists/001-vertical-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/lists/001-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/lists/001-vertical-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/lists/001-vertical-expected.txt index 6fe1ec9..344b072 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/lists/001-vertical-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/lists/001-vertical-expected.txt
@@ -4,7 +4,8 @@ LayoutBlockFlow {HTML} at (0,0) size 800x600 LayoutBlockFlow {BODY} at (8,8) size 776x584 LayoutBlockFlow {DIV} at (0,0) size 108x584 [border: (3px solid #FFA500)] - LayoutBlockFlow (floating) {DIV} at (11,11) size 122x122 [bgcolor=#FFA500] [border: (3px solid #FFA500)] + LayoutListItem (floating) {DIV} at (11,11) size 122x122 [bgcolor=#FFA500] [border: (3px solid #FFA500)] + LayoutListMarker (anonymous) at (11,-18) size 19x7: bullet LayoutListItem {DIV} at (11,11) size 86x562 [border: (3px solid #FFA500)] LayoutListItem {DIV} at (11,11) size 64x540 [border: (3px solid #FFA500)] LayoutListItem {DIV} at (11,11) size 42x518 [border: (3px solid #FFA500)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac-lion/css3/flexbox/flexbox-baseline-expected.png b/third_party/WebKit/LayoutTests/platform/mac-lion/css3/flexbox/flexbox-baseline-expected.png index cb189ac..6b2bfbb7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-lion/css3/flexbox/flexbox-baseline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-lion/css3/flexbox/flexbox-baseline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/basic-buttons-expected.png b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/basic-buttons-expected.png index c4322c3..d9d278f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/basic-buttons-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/basic-buttons-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png index ac25c53..053d31a5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/date/date-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/date/date-appearance-basic-expected.png index d81259b..c49e231 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/date/date-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/date/date-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/date/date-appearance-l10n-expected.png b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/date/date-appearance-l10n-expected.png index d1b0080..c4cfb65 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/date/date-appearance-l10n-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/date/date-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/date/date-appearance-pseudo-elements-expected.png b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/date/date-appearance-pseudo-elements-expected.png index b34475b..917f1fc5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/date/date-appearance-pseudo-elements-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/date/date-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png index 76ea731..fe40381 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png index 6f6a797..da59f375 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/form-element-geometry-expected.png b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/form-element-geometry-expected.png index 1778ec7..204a308 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/form-element-geometry-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/form-element-geometry-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/month/month-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/month/month-appearance-basic-expected.png index b135f93..39d6973 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/month/month-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/month/month-appearance-l10n-expected.png b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/month/month-appearance-l10n-expected.png index fb5d16fa..b90b64b5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/month/month-appearance-l10n-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/month/month-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/month/month-appearance-pseudo-elements-expected.png b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/month/month-appearance-pseudo-elements-expected.png index 29123dc854..df00cab2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/month/month-appearance-pseudo-elements-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/month/month-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/select/select-overflow-scroll-inherited-expected.png b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/select/select-overflow-scroll-inherited-expected.png index ac04a8b..a0693aad 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/select/select-overflow-scroll-inherited-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/select/select-overflow-scroll-inherited-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png index 4d38d5d..38862e2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/time/time-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/time/time-appearance-basic-expected.png index ea28de3..b5c71a3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/time/time-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/time/time-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/time/time-appearance-pseudo-elements-expected.png b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/time/time-appearance-pseudo-elements-expected.png index 0c58e0c..2bcf1bfe 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/time/time-appearance-pseudo-elements-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/time/time-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/week/week-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/week/week-appearance-basic-expected.png index 2485b526..ea08a4c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/week/week-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/week/week-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/week/week-appearance-pseudo-elements-expected.png b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/week/week-appearance-pseudo-elements-expected.png index 9c9f6cb3..7856be092 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/week/week-appearance-pseudo-elements-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/forms/week/week-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/replaced/replaced-breaking-expected.png b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/replaced/replaced-breaking-expected.png index d8d6971..6f104ecc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-lion/fast/replaced/replaced-breaking-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-lion/fast/replaced/replaced-breaking-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/css3/flexbox/flexbox-baseline-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mavericks/css3/flexbox/flexbox-baseline-expected.png index 4a43cfe2..94ee421 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/css3/flexbox/flexbox-baseline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/css3/flexbox/flexbox-baseline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/basic-buttons-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/basic-buttons-expected.png index 240887c..8e064ee 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/basic-buttons-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/basic-buttons-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/basic-buttons-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/basic-buttons-expected.txt index 14bd0c5..6eae3a1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/basic-buttons-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/basic-buttons-expected.txt
@@ -1,8 +1,8 @@ layer at (0,0) size 800x600 LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x294 - LayoutBlockFlow {HTML} at (0,0) size 800x294 - LayoutBlockFlow {BODY} at (8,8) size 784x278 +layer at (0,0) size 800x295 + LayoutBlockFlow {HTML} at (0,0) size 800x295 + LayoutBlockFlow {BODY} at (8,8) size 784x279 LayoutBlockFlow (anonymous) at (0,0) size 784x72 LayoutText {#text} at (0,0) size 547x18 text run at (0,0) width 547: "Tests for basic button rendering. Creates a table with seven columns and seven rows. " @@ -14,8 +14,8 @@ text run at (0,36) width 660: "with text (\"foo\") and then uses six different paddings to make sure each of the buttons render properly. " LayoutBR {BR} at (660,36) size 0x18 LayoutBR {BR} at (0,54) size 0x18 - LayoutTable {TABLE} at (0,72) size 697x206 - LayoutTableSection {TBODY} at (0,0) size 697x206 + LayoutTable {TABLE} at (0,72) size 697x207 + LayoutTableSection {TBODY} at (0,0) size 697x207 LayoutTableRow {TR} at (0,0) size 697x20 LayoutTableCell {TD} at (0,0) size 170x20 [r=0 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 44x18 @@ -70,18 +70,18 @@ LayoutTableCell {TD} at (527,41) size 170x20 [r=2 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(18, 34) (18, 34)" - LayoutTableRow {TR} at (0,62) size 697x26 + LayoutTableRow {TR} at (0,62) size 697x27 LayoutTableCell {TD} at (0,65) size 170x20 [r=3 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 90x18 text run at (1,1) width 90: "padding: 10%" - LayoutTableCell {TD} at (170,62) size 61x26 [r=3 c=1 rs=1 cs=1] + LayoutTableCell {TD} at (170,62) size 61x27 [r=3 c=1 rs=1 cs=1] LayoutButton {BUTTON} at (1,1) size 25.78x24.78 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (7.89,5.89) size 10x13 LayoutImage {IMG} at (0,1) size 10x10 LayoutTableCell {TD} at (231,65) size 161x20 [r=3 c=2 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(25, 26) (25, 22)" - LayoutTableCell {TD} at (392,64) size 135x21 [r=3 c=3 rs=1 cs=1] + LayoutTableCell {TD} at (392,65) size 135x21 [r=3 c=3 rs=1 cs=1] LayoutButton {INPUT} at (1,2) size 33.56x18 [bgcolor=#C0C0C0] LayoutBlockFlow (anonymous) at (8,2) size 17.56x13 LayoutText {#text} at (0,0) size 18x13 @@ -89,79 +89,79 @@ LayoutTableCell {TD} at (527,65) size 170x20 [r=3 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(18, 34) (18, 34)" - LayoutTableRow {TR} at (0,88) size 697x21 - LayoutTableCell {TD} at (0,88) size 170x20 [r=4 c=0 rs=1 cs=1] + LayoutTableRow {TR} at (0,89) size 697x21 + LayoutTableCell {TD} at (0,89) size 170x20 [r=4 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 84x18 text run at (1,1) width 84: "padding: 2px" - LayoutTableCell {TD} at (170,88) size 61x20 [r=4 c=1 rs=1 cs=1] + LayoutTableCell {TD} at (170,89) size 61x20 [r=4 c=1 rs=1 cs=1] LayoutButton {BUTTON} at (1,2) size 18x17 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (4,2) size 10x13 LayoutImage {IMG} at (0,1) size 10x10 - LayoutTableCell {TD} at (231,88) size 161x20 [r=4 c=2 rs=1 cs=1] + LayoutTableCell {TD} at (231,89) size 161x20 [r=4 c=2 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(17, 18) (17, 14)" - LayoutTableCell {TD} at (392,88) size 135x21 [r=4 c=3 rs=1 cs=1] + LayoutTableCell {TD} at (392,89) size 135x21 [r=4 c=3 rs=1 cs=1] LayoutButton {INPUT} at (1,2) size 33.56x18 [bgcolor=#C0C0C0] LayoutBlockFlow (anonymous) at (8,2) size 17.56x13 LayoutText {#text} at (0,0) size 18x13 text run at (0,0) width 18: "foo" - LayoutTableCell {TD} at (527,88) size 170x20 [r=4 c=4 rs=1 cs=1] + LayoutTableCell {TD} at (527,89) size 170x20 [r=4 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(18, 34) (18, 34)" - LayoutTableRow {TR} at (0,109) size 697x21 - LayoutTableCell {TD} at (0,109) size 170x20 [r=5 c=0 rs=1 cs=1] + LayoutTableRow {TR} at (0,110) size 697x21 + LayoutTableCell {TD} at (0,110) size 170x20 [r=5 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 168x18 text run at (1,1) width 168: "padding: 2px 6px 3px 6px" - LayoutTableCell {TD} at (170,109) size 61x21 [r=5 c=1 rs=1 cs=1] + LayoutTableCell {TD} at (170,110) size 61x21 [r=5 c=1 rs=1 cs=1] LayoutButton {BUTTON} at (1,2) size 26x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (8,2) size 10x13 LayoutImage {IMG} at (0,1) size 10x10 - LayoutTableCell {TD} at (231,109) size 161x20 [r=5 c=2 rs=1 cs=1] + LayoutTableCell {TD} at (231,110) size 161x20 [r=5 c=2 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(18, 26) (18, 22)" - LayoutTableCell {TD} at (392,109) size 135x21 [r=5 c=3 rs=1 cs=1] + LayoutTableCell {TD} at (392,110) size 135x21 [r=5 c=3 rs=1 cs=1] LayoutButton {INPUT} at (1,2) size 33.56x18 [bgcolor=#C0C0C0] LayoutBlockFlow (anonymous) at (8,2) size 17.56x13 LayoutText {#text} at (0,0) size 18x13 text run at (0,0) width 18: "foo" - LayoutTableCell {TD} at (527,109) size 170x20 [r=5 c=4 rs=1 cs=1] + LayoutTableCell {TD} at (527,110) size 170x20 [r=5 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(18, 34) (18, 34)" - LayoutTableRow {TR} at (0,130) size 697x21 - LayoutTableCell {TD} at (0,130) size 170x20 [r=6 c=0 rs=1 cs=1] + LayoutTableRow {TR} at (0,131) size 697x21 + LayoutTableCell {TD} at (0,131) size 170x20 [r=6 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 112x18 text run at (1,1) width 112: "padding: 3px 7px" - LayoutTableCell {TD} at (170,130) size 61x21 [r=6 c=1 rs=1 cs=1] + LayoutTableCell {TD} at (170,131) size 61x21 [r=6 c=1 rs=1 cs=1] LayoutButton {BUTTON} at (1,1) size 28x19 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (9,3) size 10x13 LayoutImage {IMG} at (0,1) size 10x10 - LayoutTableCell {TD} at (231,130) size 161x20 [r=6 c=2 rs=1 cs=1] + LayoutTableCell {TD} at (231,131) size 161x20 [r=6 c=2 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(19, 28) (19, 24)" - LayoutTableCell {TD} at (392,130) size 135x21 [r=6 c=3 rs=1 cs=1] + LayoutTableCell {TD} at (392,131) size 135x21 [r=6 c=3 rs=1 cs=1] LayoutButton {INPUT} at (1,2) size 33.56x18 [bgcolor=#C0C0C0] LayoutBlockFlow (anonymous) at (8,2) size 17.56x13 LayoutText {#text} at (0,0) size 18x13 text run at (0,0) width 18: "foo" - LayoutTableCell {TD} at (527,130) size 170x20 [r=6 c=4 rs=1 cs=1] + LayoutTableCell {TD} at (527,131) size 170x20 [r=6 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(18, 34) (18, 34)" - LayoutTableRow {TR} at (0,151) size 697x55 - LayoutTableCell {TD} at (0,168) size 170x20 [r=7 c=0 rs=1 cs=1] + LayoutTableRow {TR} at (0,152) size 697x55 + LayoutTableCell {TD} at (0,169) size 170x20 [r=7 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 92x18 text run at (1,1) width 92: "padding: 20px" - LayoutTableCell {TD} at (170,151) size 61x55 [r=7 c=1 rs=1 cs=1] + LayoutTableCell {TD} at (170,152) size 61x55 [r=7 c=1 rs=1 cs=1] LayoutButton {BUTTON} at (1,1) size 54x53 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (22,20) size 10x13 LayoutImage {IMG} at (0,1) size 10x10 - LayoutTableCell {TD} at (231,168) size 161x20 [r=7 c=2 rs=1 cs=1] + LayoutTableCell {TD} at (231,169) size 161x20 [r=7 c=2 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(53, 54) (53, 50)" - LayoutTableCell {TD} at (392,168) size 135x21 [r=7 c=3 rs=1 cs=1] + LayoutTableCell {TD} at (392,169) size 135x21 [r=7 c=3 rs=1 cs=1] LayoutButton {INPUT} at (1,2) size 33.56x18 [bgcolor=#C0C0C0] LayoutBlockFlow (anonymous) at (8,2) size 17.56x13 LayoutText {#text} at (0,0) size 18x13 text run at (0,0) width 18: "foo" - LayoutTableCell {TD} at (527,168) size 170x20 [r=7 c=4 rs=1 cs=1] + LayoutTableCell {TD} at (527,169) size 170x20 [r=7 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(18, 34) (18, 34)"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png index 40896ab3..de101fb4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/date/date-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/date/date-appearance-basic-expected.png index 2636efad..e8806516 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/date/date-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/date/date-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/date/date-appearance-l10n-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/date/date-appearance-l10n-expected.png index 6998bfc..447e5a46 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/date/date-appearance-l10n-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/date/date-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/date/date-appearance-pseudo-elements-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/date/date-appearance-pseudo-elements-expected.png index 22711d3..285717c8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/date/date-appearance-pseudo-elements-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/date/date-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png index c93fdfc..e856e9dc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png index bd217f74..8095fe1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/form-element-geometry-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/form-element-geometry-expected.png index f7b34de3..9a0339c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/form-element-geometry-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/form-element-geometry-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/form-element-geometry-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/form-element-geometry-expected.txt index 3d5f66d..6487a3a3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/form-element-geometry-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/form-element-geometry-expected.txt
@@ -1,8 +1,8 @@ -layer at (0,0) size 800x600 scrollHeight 616 +layer at (0,0) size 800x600 scrollHeight 617 LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x616 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 - LayoutBlockFlow {HTML} at (0,0) size 800x615.88 - LayoutBlockFlow {BODY} at (8,8) size 784x599.88 +layer at (0,0) size 800x617 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x616.88 + LayoutBlockFlow {BODY} at (8,8) size 784x600.88 LayoutBlockFlow {H1} at (0,0) size 784x37 LayoutText {#text} at (0,0) size 420x37 text run at (0,0) width 420: "Form Element Geometry Tests" @@ -83,14 +83,14 @@ LayoutBlockFlow {DIV} at (1,1) size 16x16 [border: (2px solid #0000FF)] LayoutInline {FONT} at (0,0) size 12x13 LayoutBlockFlow {INPUT} at (2,2) size 12x12 - LayoutTable {TABLE} at (0,228.25) size 539x68 - LayoutTableSection {TBODY} at (0,0) size 539x68 - LayoutTableRow {TR} at (0,2) size 539x64 + LayoutTable {TABLE} at (0,228.25) size 539x69 + LayoutTableSection {TBODY} at (0,0) size 539x69 + LayoutTableRow {TR} at (0,2) size 539x65 LayoutTableCell {TD} at (2,2) size 79x25 [r=0 c=0 rs=1 cs=1] LayoutBlockFlow {DIV} at (1,1) size 77x23 [border: (2px solid #0000FF)] LayoutTextControl {INPUT} at (2,2) size 73x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] - LayoutTableCell {TD} at (83,2) size 40x64 [r=0 c=1 rs=1 cs=1] - LayoutBlockFlow {DIV} at (1,1) size 38x62 [border: (2px solid #0000FF)] + LayoutTableCell {TD} at (83,2) size 40x65 [r=0 c=1 rs=1 cs=1] + LayoutBlockFlow {DIV} at (1,1) size 38x63 [border: (2px solid #0000FF)] LayoutTableCell {TD} at (125,2) size 243x24 [r=0 c=2 rs=1 cs=1] LayoutBlockFlow {DIV} at (1,1) size 241x22 [border: (2px solid #0000FF)] LayoutFileUploadControl {INPUT} at (2,2) size 237x18 "No file chosen" @@ -100,10 +100,10 @@ text run at (0,0) width 62: "Choose File" LayoutTableCell {TD} at (370,2) size 167x38 [r=0 c=3 rs=1 cs=1] LayoutBlockFlow {DIV} at (1,1) size 165x36 [border: (2px solid #0000FF)] - LayoutBlockFlow {H2} at (0,316.16) size 784x28 + LayoutBlockFlow {H2} at (0,317.16) size 784x28 LayoutText {#text} at (0,0) size 200x28 text run at (0,0) width 200: "Baseline Alignment" - LayoutBlockFlow {DIV} at (0,364.06) size 784x28 + LayoutBlockFlow {DIV} at (0,365.06) size 784x28 LayoutInline {FONT} at (0,0) size 210x28 LayoutText {#text} at (0,0) size 42x28 text run at (0,0) width 42: "text " @@ -124,7 +124,7 @@ text run at (185,0) width 7: " " LayoutBlockFlow {INPUT} at (194.27,12) size 12x12 LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (0,392.06) size 784x19 + LayoutBlockFlow {DIV} at (0,393.06) size 784x19 LayoutText {#text} at (0,0) size 28x18 text run at (0,0) width 28: "text " LayoutButton {INPUT} at (27.98,1) size 51.56x18 [bgcolor=#C0C0C0] @@ -144,7 +144,7 @@ text run at (167,0) width 5: " " LayoutBlockFlow {INPUT} at (174.27,4) size 12x12 LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (0,411.06) size 784x19 + LayoutBlockFlow {DIV} at (0,412.06) size 784x19 LayoutInline {FONT} at (0,0) size 175x13 LayoutText {#text} at (0,4) size 18x13 text run at (0,4) width 18: "text " @@ -165,7 +165,7 @@ text run at (153,4) width 4: " " LayoutBlockFlow {INPUT} at (159.27,4) size 12x12 LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (0,430.06) size 784x37 + LayoutBlockFlow {DIV} at (0,431.06) size 784x37 LayoutText {#text} at (0,18) size 28x18 text run at (0,18) width 28: "text " LayoutTextControl {INPUT} at (27.98,18) size 73x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] @@ -179,10 +179,10 @@ LayoutText {#text} at (341,18) size 5x18 text run at (341,18) width 5: " " LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {H2} at (0,486.97) size 784x28 + LayoutBlockFlow {H2} at (0,487.97) size 784x28 LayoutText {#text} at (0,0) size 198x28 text run at (0,0) width 198: "Pop-up Menu Sizes" - LayoutBlockFlow {DIV} at (0,534.88) size 784x28 + LayoutBlockFlow {DIV} at (0,535.88) size 784x28 LayoutInline {FONT} at (0,0) size 169x28 LayoutText {#text} at (0,0) size 0x0 LayoutMenuList {SELECT} at (0,9) size 36x18 [bgcolor=#F8F8F8] @@ -202,7 +202,7 @@ LayoutText (anonymous) at (8,2) size 54x13 text run at (8,2) width 54: "xxxxxxxx" LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (0,562.88) size 784x19 + LayoutBlockFlow {DIV} at (0,563.88) size 784x19 LayoutMenuList {SELECT} at (0,1) size 36x18 [bgcolor=#F8F8F8] LayoutBlockFlow (anonymous) at (0,0) size 36x18 LayoutText (anonymous) at (8,2) size 4x13 @@ -220,7 +220,7 @@ LayoutText (anonymous) at (8,2) size 54x13 text run at (8,2) width 54: "xxxxxxxx" LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (0,581.88) size 784x18 + LayoutBlockFlow {DIV} at (0,582.88) size 784x18 LayoutInline {FONT} at (0,0) size 162x13 LayoutText {#text} at (0,0) size 0x0 LayoutMenuList {SELECT} at (0,0) size 36x18 [bgcolor=#F8F8F8] @@ -266,11 +266,11 @@ LayoutBlockFlow {DIV} at (3,3) size 155x13 LayoutText {#text} at (0,0) size 44x13 text run at (0,0) width 44: "textarea" -layer at (39,459) size 67x13 +layer at (39,460) size 67x13 LayoutBlockFlow {DIV} at (3,3) size 67x13 LayoutText {#text} at (0,0) size 48x13 text run at (0,0) width 48: "text field" -layer at (354,438) size 161x32 clip at (355,439) size 159x30 +layer at (354,439) size 161x32 clip at (355,440) size 159x30 LayoutTextControl {TEXTAREA} at (345.98,0) size 161x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (3,3) size 155x13 LayoutText {#text} at (0,0) size 44x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/month/month-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/month/month-appearance-basic-expected.png index d5a8188..9e20335 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/month/month-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/month/month-appearance-l10n-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/month/month-appearance-l10n-expected.png index a1fc9998..8b5d8e8d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/month/month-appearance-l10n-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/month/month-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/month/month-appearance-pseudo-elements-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/month/month-appearance-pseudo-elements-expected.png index c424dba9..7740278 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/month/month-appearance-pseudo-elements-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/month/month-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/select/listbox-scrollbar-incremental-load-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/select/listbox-scrollbar-incremental-load-expected.txt index ebda3135..59f323f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/select/listbox-scrollbar-incremental-load-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/select/listbox-scrollbar-incremental-load-expected.txt
@@ -22,7 +22,7 @@ text run at (500,0) width 244: "\x{201C}Seven\x{201D}. The scroller should be at the" text run at (0,18) width 155: "bottom of the scroll bar " text run at (154,18) width 88: "to reflect this." - LayoutBlockFlow (anonymous) at (0,104) size 784x58 + LayoutBlockFlow (anonymous) at (0,104) size 784x59 LayoutText {#text} at (0,0) size 0x0 layer at (8,112) size 48x59 clip at (9,113) size 35x57 scrollY 43.00 scrollHeight 100 LayoutListBox {SELECT} at (0,0.25) size 47.70x58.75 [bgcolor=#FFFFFF] [border: (1px solid #999999)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/select/listbox-with-display-none-option-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/select/listbox-with-display-none-option-expected.txt index a9ff0e9a..9e5754e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/select/listbox-with-display-none-option-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/select/listbox-with-display-none-option-expected.txt
@@ -1,12 +1,12 @@ layer at (0,0) size 800x600 LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x173 - LayoutBlockFlow {HTML} at (0,0) size 800x173 - LayoutBlockFlow {BODY} at (8,16) size 784x149 +layer at (0,0) size 800x174 + LayoutBlockFlow {HTML} at (0,0) size 800x174 + LayoutBlockFlow {BODY} at (8,16) size 784x150 LayoutBlockFlow {P} at (0,0) size 784x18 LayoutText {#text} at (0,0) size 608x18 text run at (0,0) width 608: "The select list box should not display items (options and optgroups) with style \"display: none\"." - LayoutBlockFlow (anonymous) at (0,34) size 784x115 + LayoutBlockFlow (anonymous) at (0,34) size 784x116 LayoutText {#text} at (47,97) size 5x18 text run at (47,97) width 5: " " LayoutText {#text} at (114,97) size 4x18
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/select/select-item-background-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/select/select-item-background-clip-expected.txt index 77268c7..652aa6b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/select/select-item-background-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/select/select-item-background-clip-expected.txt
@@ -16,7 +16,7 @@ text run at (0,18) width 163: "not clipped to the list box" LayoutText {#text} at (162,18) size 5x18 text run at (162,18) width 5: "." - LayoutBlockFlow (anonymous) at (0,52) size 784x59 + LayoutBlockFlow (anonymous) at (0,52) size 784x60 LayoutText {#text} at (0,0) size 0x0 LayoutText {#text} at (0,0) size 0x0 layer at (8,60) size 55x59 clip at (11,63) size 38x53 scrollHeight 62
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/select/select-overflow-scroll-inherited-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/select/select-overflow-scroll-inherited-expected.png index 932f9ab..914acb9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/select/select-overflow-scroll-inherited-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/select/select-overflow-scroll-inherited-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/select/select-overflow-scroll-inherited-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/select/select-overflow-scroll-inherited-expected.txt index 5a1ef36..ff003732 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/select/select-overflow-scroll-inherited-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/select/select-overflow-scroll-inherited-expected.txt
@@ -3,8 +3,8 @@ layer at (0,0) size 800x600 LayoutBlockFlow {HTML} at (0,0) size 800x600 LayoutBlockFlow {BODY} at (8,8) size 784x584 -layer at (8,8) size 784x130 clip at (8,8) size 769x115 - LayoutBlockFlow {DIV} at (0,0) size 784x130 +layer at (8,8) size 784x131 clip at (8,8) size 769x116 + LayoutBlockFlow {DIV} at (0,0) size 784x131 LayoutText {#text} at (0,0) size 0x0 layer at (8,8) size 48x115 clip at (9,9) size 35x102 scrollHeight 141 LayoutListBox {SELECT} at (0,-0.50) size 47.70x115.50 [bgcolor=#FFFFFF] [border: (1px solid #999999)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png index 8b4e49e4..e92047e0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/time/time-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/time/time-appearance-basic-expected.png index 22fb57b..54b10c4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/time/time-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/time/time-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/time/time-appearance-pseudo-elements-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/time/time-appearance-pseudo-elements-expected.png index d26adbfb..a0164f5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/time/time-appearance-pseudo-elements-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/time/time-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/week/week-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/week/week-appearance-basic-expected.png index 63aa9199..c51dc83 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/week/week-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/week/week-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/week/week-appearance-pseudo-elements-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/week/week-appearance-pseudo-elements-expected.png index a154ab3..79c88c2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/week/week-appearance-pseudo-elements-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/forms/week/week-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/replaced/replaced-breaking-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/replaced/replaced-breaking-expected.png index 7bc1388..9c0b6c7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/replaced/replaced-breaking-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/replaced/replaced-breaking-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/replaced/replaced-breaking-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/replaced/replaced-breaking-expected.txt index d539f72..b6b7225 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/replaced/replaced-breaking-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/replaced/replaced-breaking-expected.txt
@@ -3,7 +3,7 @@ layer at (0,0) size 800x600 LayoutBlockFlow {HTML} at (0,0) size 800x600 LayoutBlockFlow {BODY} at (8,8) size 784x584 - LayoutBlockFlow {DIV} at (0,0) size 32x472 [border: (1px solid #FF0000)] + LayoutBlockFlow {DIV} at (0,0) size 32x474 [border: (1px solid #FF0000)] LayoutTextControl {INPUT} at (1,1) size 123x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] LayoutTextControl {INPUT} at (1,20) size 123x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] LayoutText {#text} at (0,0) size 0x0 @@ -38,11 +38,11 @@ text run at (8,2) width 31: "select" LayoutText {#text} at (0,0) size 0x0 LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {INPUT} at (3.91,292) size 12x12 - LayoutBlockFlow {INPUT} at (3.91,310) size 12x12 + LayoutBlockFlow {INPUT} at (3.91,294) size 12x12 + LayoutBlockFlow {INPUT} at (3.91,312) size 12x12 LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {INPUT} at (3.91,328) size 12x13 - LayoutBlockFlow {INPUT} at (3.91,347) size 12x13 + LayoutBlockFlow {INPUT} at (3.91,330) size 12x13 + LayoutBlockFlow {INPUT} at (3.91,349) size 12x13 LayoutText {#text} at (0,0) size 0x0 LayoutText {#text} at (0,0) size 0x0 LayoutText {#text} at (0,0) size 0x0 @@ -55,26 +55,26 @@ LayoutBlockFlow {OPTION} at (1,1) size 34.80x14.19 LayoutText {#text} at (2,0) size 31x13 text run at (2,0) width 31: "select" -layer at (9,253) size 48x45 clip at (10,254) size 35x43 - LayoutListBox {SELECT} at (1,245.44) size 47.80x44.56 [bgcolor=#FFFFFF] [border: (1px solid #999999)] +layer at (9,254) size 48x45 clip at (10,255) size 35x43 + LayoutListBox {SELECT} at (1,246.44) size 47.80x44.56 [bgcolor=#FFFFFF] [border: (1px solid #999999)] LayoutBlockFlow {OPTION} at (1,1) size 34.80x14.19 LayoutText {#text} at (2,0) size 31x13 text run at (2,0) width 31: "select" -layer at (9,371) size 27x27 - LayoutIFrame {IFRAME} at (1,363) size 27x27 [border: (1px solid #000000)] +layer at (9,373) size 27x27 + LayoutIFrame {IFRAME} at (1,365) size 27x27 [border: (1px solid #000000)] layer at (0,0) size 25x25 LayoutView at (0,0) size 25x25 layer at (0,0) size 25x25 LayoutBlockFlow {HTML} at (0,0) size 25x25 LayoutBlockFlow {BODY} at (8,8) size 9x9 -layer at (9,398) size 27x27 - LayoutIFrame {IFRAME} at (1,390) size 27x27 [border: (1px solid #000000)] +layer at (9,400) size 27x27 + LayoutIFrame {IFRAME} at (1,392) size 27x27 [border: (1px solid #000000)] layer at (0,0) size 25x25 LayoutView at (0,0) size 25x25 layer at (0,0) size 25x25 LayoutBlockFlow {HTML} at (0,0) size 25x25 LayoutBlockFlow {BODY} at (8,8) size 9x9 -layer at (9,425) size 27x27 - LayoutEmbeddedObject {EMBED} at (1,417) size 27x27 [border: (1px solid #000000)] -layer at (9,452) size 27x27 - LayoutEmbeddedObject {EMBED} at (1,444) size 27x27 [border: (1px solid #000000)] +layer at (9,427) size 27x27 + LayoutEmbeddedObject {EMBED} at (1,419) size 27x27 [border: (1px solid #000000)] +layer at (9,454) size 27x27 + LayoutEmbeddedObject {EMBED} at (1,446) size 27x27 [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/text/updateNewFont-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/text/updateNewFont-expected.txt index caee6d4..3652907 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/text/updateNewFont-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mavericks/fast/text/updateNewFont-expected.txt
@@ -1,8 +1,8 @@ layer at (0,0) size 800x600 LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x127 - LayoutBlockFlow {HTML} at (0,0) size 800x127 - LayoutBlockFlow {BODY} at (8,8) size 784x111 +layer at (0,0) size 800x128 + LayoutBlockFlow {HTML} at (0,0) size 800x128 + LayoutBlockFlow {BODY} at (8,8) size 784x112 LayoutText {#text} at (0,0) size 0x0 layer at (8,8) size 34x112 clip at (9,9) size 21x110 LayoutListBox {SELECT} at (0,0.31) size 33.94x111.69 [bgcolor=#FFFFFF] [border: (1px solid #999999)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mountainlion/fast/forms/basic-buttons-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mountainlion/fast/forms/basic-buttons-expected.png index ee78ec6..d0dd2273 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mountainlion/fast/forms/basic-buttons-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mountainlion/fast/forms/basic-buttons-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mountainlion/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mountainlion/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png index 132a735..2639a65 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mountainlion/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mountainlion/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mountainlion/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mountainlion/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png index 2647cb3..9a6e2df 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mountainlion/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mountainlion/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mountainlion/fast/forms/month/month-appearance-l10n-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mountainlion/fast/forms/month/month-appearance-l10n-expected.png index 438a1d9..b444ea94 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mountainlion/fast/forms/month/month-appearance-l10n-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mountainlion/fast/forms/month/month-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/css3/flexbox/flexbox-baseline-expected.png b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/css3/flexbox/flexbox-baseline-expected.png index 429dd78..14cb78f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/css3/flexbox/flexbox-baseline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/css3/flexbox/flexbox-baseline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/basic-buttons-expected.png b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/basic-buttons-expected.png index 124b2d7..0d8b97a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/basic-buttons-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/basic-buttons-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png index a7821db..0a85a331 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/date/date-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/date/date-appearance-basic-expected.png index 301df52..9de425b3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/date/date-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/date/date-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/date/date-appearance-l10n-expected.png b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/date/date-appearance-l10n-expected.png index 21529ef..75471f8c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/date/date-appearance-l10n-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/date/date-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/date/date-appearance-pseudo-elements-expected.png b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/date/date-appearance-pseudo-elements-expected.png index 0d7ba39..330e24e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/date/date-appearance-pseudo-elements-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/date/date-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png index 474b918..61f8b52c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png index a938c04..f2f0d6e4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/form-element-geometry-expected.png b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/form-element-geometry-expected.png index 4ed8e49..698345ff 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/form-element-geometry-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/form-element-geometry-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/month/month-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/month/month-appearance-basic-expected.png index 10c66cc..2c9ee14 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/month/month-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/month/month-appearance-l10n-expected.png b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/month/month-appearance-l10n-expected.png index a3823e6..27c22df7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/month/month-appearance-l10n-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/month/month-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/month/month-appearance-pseudo-elements-expected.png b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/month/month-appearance-pseudo-elements-expected.png index 3c5b4509a..fc9a088 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/month/month-appearance-pseudo-elements-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/month/month-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/select/select-overflow-scroll-inherited-expected.png b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/select/select-overflow-scroll-inherited-expected.png index 021971b..eadbf1b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/select/select-overflow-scroll-inherited-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/select/select-overflow-scroll-inherited-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png index 8a9e978..e7d603b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/time/time-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/time/time-appearance-basic-expected.png index 8c142b0..8030a7f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/time/time-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/time/time-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/time/time-appearance-pseudo-elements-expected.png b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/time/time-appearance-pseudo-elements-expected.png index 992d65d..edd1bacc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/time/time-appearance-pseudo-elements-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/time/time-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/week/week-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/week/week-appearance-basic-expected.png index 03b5741..bebeacd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/week/week-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/week/week-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/week/week-appearance-pseudo-elements-expected.png b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/week/week-appearance-pseudo-elements-expected.png index 7e4f99e..0b332a4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/week/week-appearance-pseudo-elements-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/forms/week/week-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/replaced/replaced-breaking-expected.png b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/replaced/replaced-breaking-expected.png index 1ac08f4..2788792 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/replaced/replaced-breaking-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-snowleopard/fast/replaced/replaced-breaking-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/flexbox/flexbox-baseline-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css3/flexbox/flexbox-baseline-expected.png index cebcf0c..db23b28 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css3/flexbox/flexbox-baseline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/css3/flexbox/flexbox-baseline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/flexbox/flexbox-baseline-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/css3/flexbox/flexbox-baseline-expected.txt index 5abab1c..bad613ca4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css3/flexbox/flexbox-baseline-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/css3/flexbox/flexbox-baseline-expected.txt
@@ -1,9 +1,9 @@ layer at (0,0) size 800x600 LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x494 - LayoutBlockFlow {HTML} at (0,0) size 800x494 -layer at (0,0) size 800x494 - LayoutBlockFlow (relative positioned) {BODY} at (0,0) size 800x494 +layer at (0,0) size 800x496 + LayoutBlockFlow {HTML} at (0,0) size 800x496 +layer at (0,0) size 800x496 + LayoutBlockFlow (relative positioned) {BODY} at (0,0) size 800x496 LayoutBlockFlow {DIV} at (0,0) size 800x55 LayoutText {#text} at (0,20) size 73x18 text run at (0,20) width 73: "before text " @@ -32,7 +32,7 @@ text run at (0,0) width 39: "above" LayoutText {#text} at (163,27) size 62x18 text run at (163,27) width 62: " after text" - LayoutBlockFlow {DIV} at (0,100) size 800x72 + LayoutBlockFlow {DIV} at (0,100) size 800x73 LayoutText {#text} at (0,32) size 73x18 text run at (0,32) width 73: "before text " LayoutFlexibleBox {DIV} at (72.84,5) size 152.23x67.81 [bgcolor=#D3D3D3] @@ -44,7 +44,7 @@ text run at (0,0) width 39: "above" LayoutText {#text} at (225,32) size 62x18 text run at (225,32) width 62: " after text" - LayoutBlockFlow {DIV} at (0,172) size 800x72 + LayoutBlockFlow {DIV} at (0,173) size 800x73 LayoutText {#text} at (0,5) size 73x18 text run at (0,5) width 73: "before text " LayoutFlexibleBox {DIV} at (72.84,5) size 143.78x67.81 [bgcolor=#D3D3D3] @@ -56,20 +56,20 @@ text run at (0,0) width 92: "h2 below" LayoutText {#text} at (216,5) size 62x18 text run at (216,5) width 62: " after text" - LayoutBlockFlow {DIV} at (0,244) size 800x45 + LayoutBlockFlow {DIV} at (0,246) size 800x45 LayoutText {#text} at (0,12) size 188x18 text run at (0,12) width 188: "should align with the middle " LayoutFlexibleBox {DIV} at (187.09,5) size 40x40 [bgcolor=#D3D3D3] LayoutBlockFlow {DIV} at (0,0) size 40x21 [border: none (1px solid #000000) none] LayoutText {#text} at (227,12) size 126x18 text run at (227,12) width 126: " of the grey flexbox" - LayoutBlockFlow {DIV} at (0,289) size 800x39 + LayoutBlockFlow {DIV} at (0,291) size 800x39 LayoutText {#text} at (0,21) size 188x18 text run at (0,21) width 188: "should align with the bottom " LayoutFlexibleBox {DIV} at (187.98,5) size 30x30 [bgcolor=#D3D3D3] LayoutText {#text} at (217,21) size 127x18 text run at (217,21) width 127: " of the grey flexbox" - LayoutBlockFlow {DIV} at (0,328) size 800x41 + LayoutBlockFlow {DIV} at (0,330) size 800x41 LayoutText {#text} at (0,5) size 73x18 text run at (0,5) width 73: "before text " LayoutFlexibleBox {DIV} at (72.84,5) size 52.42x36 [bgcolor=#D3D3D3] @@ -81,7 +81,7 @@ text run at (0,0) width 40: "below" LayoutText {#text} at (125,5) size 62x18 text run at (125,5) width 62: " after text" - LayoutBlockFlow {DIV} at (0,369) size 800x41 + LayoutBlockFlow {DIV} at (0,371) size 800x41 LayoutText {#text} at (0,23) size 73x18 text run at (0,23) width 73: "before text " LayoutFlexibleBox {DIV} at (72.84,5) size 52.42x36 [bgcolor=#D3D3D3] @@ -93,7 +93,7 @@ text run at (0,0) width 39: "above" LayoutText {#text} at (125,23) size 62x18 text run at (125,23) width 62: " after text" - LayoutBlockFlow {DIV} at (0,410) size 800x45 + LayoutBlockFlow {DIV} at (0,412) size 800x45 LayoutText {#text} at (0,11) size 188x18 text run at (0,11) width 188: "should align with the middle " LayoutFlexibleBox {DIV} at (187.09,5) size 40x40 [bgcolor=#D3D3D3] @@ -101,7 +101,7 @@ LayoutBlockFlow {DIV} at (0,20.50) size 40x19.50 LayoutText {#text} at (227,11) size 126x18 text run at (227,11) width 126: " of the grey flexbox" - LayoutBlockFlow {DIV} at (0,455) size 800x39 + LayoutBlockFlow {DIV} at (0,457) size 800x39 LayoutText {#text} at (0,21) size 188x18 text run at (0,21) width 188: "should align with the bottom " LayoutFlexibleBox {DIV} at (187.98,5) size 30x30 [bgcolor=#D3D3D3]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/basic-buttons-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/basic-buttons-expected.png index cb37a2c..14aa6b2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/basic-buttons-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/basic-buttons-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/basic-buttons-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/basic-buttons-expected.txt index 766de7b..5f7d832 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/basic-buttons-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/basic-buttons-expected.txt
@@ -1,8 +1,8 @@ layer at (0,0) size 800x600 LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x294 - LayoutBlockFlow {HTML} at (0,0) size 800x294 - LayoutBlockFlow {BODY} at (8,8) size 784x278 +layer at (0,0) size 800x295 + LayoutBlockFlow {HTML} at (0,0) size 800x295 + LayoutBlockFlow {BODY} at (8,8) size 784x279 LayoutBlockFlow (anonymous) at (0,0) size 784x72 LayoutText {#text} at (0,0) size 547x18 text run at (0,0) width 547: "Tests for basic button rendering. Creates a table with seven columns and seven rows. " @@ -14,8 +14,8 @@ text run at (0,36) width 660: "with text (\"foo\") and then uses six different paddings to make sure each of the buttons render properly. " LayoutBR {BR} at (660,36) size 0x18 LayoutBR {BR} at (0,54) size 0x18 - LayoutTable {TABLE} at (0,72) size 697x206 - LayoutTableSection {TBODY} at (0,0) size 697x206 + LayoutTable {TABLE} at (0,72) size 697x207 + LayoutTableSection {TBODY} at (0,0) size 697x207 LayoutTableRow {TR} at (0,0) size 697x20 LayoutTableCell {TD} at (0,0) size 170x20 [r=0 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 44x18 @@ -70,18 +70,18 @@ LayoutTableCell {TD} at (527,41) size 170x20 [r=2 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(18, 32) (18, 32)" - LayoutTableRow {TR} at (0,62) size 697x26 + LayoutTableRow {TR} at (0,62) size 697x27 LayoutTableCell {TD} at (0,65) size 170x20 [r=3 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 90x18 text run at (1,1) width 90: "padding: 10%" - LayoutTableCell {TD} at (170,62) size 61x26 [r=3 c=1 rs=1 cs=1] + LayoutTableCell {TD} at (170,62) size 61x27 [r=3 c=1 rs=1 cs=1] LayoutButton {BUTTON} at (1,1) size 25.78x24.78 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (7.89,5.89) size 10x13 LayoutImage {IMG} at (0,1) size 10x10 LayoutTableCell {TD} at (231,65) size 161x20 [r=3 c=2 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(25, 26) (25, 22)" - LayoutTableCell {TD} at (392,64) size 135x21 [r=3 c=3 rs=1 cs=1] + LayoutTableCell {TD} at (392,65) size 135x21 [r=3 c=3 rs=1 cs=1] LayoutButton {INPUT} at (1,2) size 32.16x18 [bgcolor=#C0C0C0] LayoutBlockFlow (anonymous) at (8,2) size 16.16x13 LayoutText {#text} at (0,0) size 17x13 @@ -89,79 +89,79 @@ LayoutTableCell {TD} at (527,65) size 170x20 [r=3 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(18, 32) (18, 32)" - LayoutTableRow {TR} at (0,88) size 697x21 - LayoutTableCell {TD} at (0,88) size 170x20 [r=4 c=0 rs=1 cs=1] + LayoutTableRow {TR} at (0,89) size 697x21 + LayoutTableCell {TD} at (0,89) size 170x20 [r=4 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 84x18 text run at (1,1) width 84: "padding: 2px" - LayoutTableCell {TD} at (170,88) size 61x20 [r=4 c=1 rs=1 cs=1] + LayoutTableCell {TD} at (170,89) size 61x20 [r=4 c=1 rs=1 cs=1] LayoutButton {BUTTON} at (1,2) size 18x17 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (4,2) size 10x13 LayoutImage {IMG} at (0,1) size 10x10 - LayoutTableCell {TD} at (231,88) size 161x20 [r=4 c=2 rs=1 cs=1] + LayoutTableCell {TD} at (231,89) size 161x20 [r=4 c=2 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(17, 18) (17, 14)" - LayoutTableCell {TD} at (392,88) size 135x21 [r=4 c=3 rs=1 cs=1] + LayoutTableCell {TD} at (392,89) size 135x21 [r=4 c=3 rs=1 cs=1] LayoutButton {INPUT} at (1,2) size 32.16x18 [bgcolor=#C0C0C0] LayoutBlockFlow (anonymous) at (8,2) size 16.16x13 LayoutText {#text} at (0,0) size 17x13 text run at (0,0) width 17: "foo" - LayoutTableCell {TD} at (527,88) size 170x20 [r=4 c=4 rs=1 cs=1] + LayoutTableCell {TD} at (527,89) size 170x20 [r=4 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(18, 32) (18, 32)" - LayoutTableRow {TR} at (0,109) size 697x21 - LayoutTableCell {TD} at (0,109) size 170x20 [r=5 c=0 rs=1 cs=1] + LayoutTableRow {TR} at (0,110) size 697x21 + LayoutTableCell {TD} at (0,110) size 170x20 [r=5 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 168x18 text run at (1,1) width 168: "padding: 2px 6px 3px 6px" - LayoutTableCell {TD} at (170,109) size 61x21 [r=5 c=1 rs=1 cs=1] + LayoutTableCell {TD} at (170,110) size 61x21 [r=5 c=1 rs=1 cs=1] LayoutButton {BUTTON} at (1,2) size 26x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (8,2) size 10x13 LayoutImage {IMG} at (0,1) size 10x10 - LayoutTableCell {TD} at (231,109) size 161x20 [r=5 c=2 rs=1 cs=1] + LayoutTableCell {TD} at (231,110) size 161x20 [r=5 c=2 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(18, 26) (18, 22)" - LayoutTableCell {TD} at (392,109) size 135x21 [r=5 c=3 rs=1 cs=1] + LayoutTableCell {TD} at (392,110) size 135x21 [r=5 c=3 rs=1 cs=1] LayoutButton {INPUT} at (1,2) size 32.16x18 [bgcolor=#C0C0C0] LayoutBlockFlow (anonymous) at (8,2) size 16.16x13 LayoutText {#text} at (0,0) size 17x13 text run at (0,0) width 17: "foo" - LayoutTableCell {TD} at (527,109) size 170x20 [r=5 c=4 rs=1 cs=1] + LayoutTableCell {TD} at (527,110) size 170x20 [r=5 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(18, 32) (18, 32)" - LayoutTableRow {TR} at (0,130) size 697x21 - LayoutTableCell {TD} at (0,130) size 170x20 [r=6 c=0 rs=1 cs=1] + LayoutTableRow {TR} at (0,131) size 697x21 + LayoutTableCell {TD} at (0,131) size 170x20 [r=6 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 112x18 text run at (1,1) width 112: "padding: 3px 7px" - LayoutTableCell {TD} at (170,130) size 61x21 [r=6 c=1 rs=1 cs=1] + LayoutTableCell {TD} at (170,131) size 61x21 [r=6 c=1 rs=1 cs=1] LayoutButton {BUTTON} at (1,1) size 28x19 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (9,3) size 10x13 LayoutImage {IMG} at (0,1) size 10x10 - LayoutTableCell {TD} at (231,130) size 161x20 [r=6 c=2 rs=1 cs=1] + LayoutTableCell {TD} at (231,131) size 161x20 [r=6 c=2 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(19, 28) (19, 24)" - LayoutTableCell {TD} at (392,130) size 135x21 [r=6 c=3 rs=1 cs=1] + LayoutTableCell {TD} at (392,131) size 135x21 [r=6 c=3 rs=1 cs=1] LayoutButton {INPUT} at (1,2) size 32.16x18 [bgcolor=#C0C0C0] LayoutBlockFlow (anonymous) at (8,2) size 16.16x13 LayoutText {#text} at (0,0) size 17x13 text run at (0,0) width 17: "foo" - LayoutTableCell {TD} at (527,130) size 170x20 [r=6 c=4 rs=1 cs=1] + LayoutTableCell {TD} at (527,131) size 170x20 [r=6 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(18, 32) (18, 32)" - LayoutTableRow {TR} at (0,151) size 697x55 - LayoutTableCell {TD} at (0,168) size 170x20 [r=7 c=0 rs=1 cs=1] + LayoutTableRow {TR} at (0,152) size 697x55 + LayoutTableCell {TD} at (0,169) size 170x20 [r=7 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 92x18 text run at (1,1) width 92: "padding: 20px" - LayoutTableCell {TD} at (170,151) size 61x55 [r=7 c=1 rs=1 cs=1] + LayoutTableCell {TD} at (170,152) size 61x55 [r=7 c=1 rs=1 cs=1] LayoutButton {BUTTON} at (1,1) size 54x53 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (22,20) size 10x13 LayoutImage {IMG} at (0,1) size 10x10 - LayoutTableCell {TD} at (231,168) size 161x20 [r=7 c=2 rs=1 cs=1] + LayoutTableCell {TD} at (231,169) size 161x20 [r=7 c=2 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(53, 54) (53, 50)" - LayoutTableCell {TD} at (392,168) size 135x21 [r=7 c=3 rs=1 cs=1] + LayoutTableCell {TD} at (392,169) size 135x21 [r=7 c=3 rs=1 cs=1] LayoutButton {INPUT} at (1,2) size 32.16x18 [bgcolor=#C0C0C0] LayoutBlockFlow (anonymous) at (8,2) size 16.16x13 LayoutText {#text} at (0,0) size 17x13 text run at (0,0) width 17: "foo" - LayoutTableCell {TD} at (527,168) size 170x20 [r=7 c=4 rs=1 cs=1] + LayoutTableCell {TD} at (527,169) size 170x20 [r=7 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x18 text run at (1,1) width 106: "(18, 32) (18, 32)"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png index 70856bc..44a64ec 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/date/date-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/date/date-appearance-basic-expected.png index 978044a..30dd808 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/date/date-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/date/date-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/date/date-appearance-l10n-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/date/date-appearance-l10n-expected.png index 717e988c..3e261e0c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/date/date-appearance-l10n-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/date/date-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/date/date-appearance-pseudo-elements-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/date/date-appearance-pseudo-elements-expected.png index f9165722..dd521067 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/date/date-appearance-pseudo-elements-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/date/date-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png index 83c8cf2..f9b9812 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png index 1f853ec..783e2f4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/form-element-geometry-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/form-element-geometry-expected.png index 3beb66c..015d69f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/form-element-geometry-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/form-element-geometry-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/form-element-geometry-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/form-element-geometry-expected.txt index 1b08550..c252edc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/form-element-geometry-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/form-element-geometry-expected.txt
@@ -1,8 +1,8 @@ -layer at (0,0) size 800x600 scrollHeight 616 +layer at (0,0) size 800x600 scrollHeight 617 LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x616 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 - LayoutBlockFlow {HTML} at (0,0) size 800x615.88 - LayoutBlockFlow {BODY} at (8,8) size 784x599.88 +layer at (0,0) size 800x617 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x616.88 + LayoutBlockFlow {BODY} at (8,8) size 784x600.88 LayoutBlockFlow {H1} at (0,0) size 784x37 LayoutText {#text} at (0,0) size 420x37 text run at (0,0) width 420: "Form Element Geometry Tests" @@ -83,14 +83,14 @@ LayoutBlockFlow {DIV} at (1,1) size 16x16 [border: (2px solid #0000FF)] LayoutInline {FONT} at (0,0) size 12x13 LayoutBlockFlow {INPUT} at (2,2) size 12x12 - LayoutTable {TABLE} at (0,228.25) size 490x68 - LayoutTableSection {TBODY} at (0,0) size 490x68 - LayoutTableRow {TR} at (0,2) size 490x64 + LayoutTable {TABLE} at (0,228.25) size 490x69 + LayoutTableSection {TBODY} at (0,0) size 490x69 + LayoutTableRow {TR} at (0,2) size 490x65 LayoutTableCell {TD} at (2,2) size 77x25 [r=0 c=0 rs=1 cs=1] LayoutBlockFlow {DIV} at (1,1) size 75x23 [border: (2px solid #0000FF)] LayoutTextControl {INPUT} at (2,2) size 71x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] - LayoutTableCell {TD} at (81,2) size 38x64 [r=0 c=1 rs=1 cs=1] - LayoutBlockFlow {DIV} at (1,1) size 36x62 [border: (2px solid #0000FF)] + LayoutTableCell {TD} at (81,2) size 38x65 [r=0 c=1 rs=1 cs=1] + LayoutBlockFlow {DIV} at (1,1) size 36x63 [border: (2px solid #0000FF)] LayoutTableCell {TD} at (121,2) size 218x24 [r=0 c=2 rs=1 cs=1] LayoutBlockFlow {DIV} at (1,1) size 216x22 [border: (2px solid #0000FF)] LayoutFileUploadControl {INPUT} at (2,2) size 212x18 "No file chosen" @@ -100,10 +100,10 @@ text run at (0,0) width 60: "Choose File" LayoutTableCell {TD} at (341,2) size 147x38 [r=0 c=3 rs=1 cs=1] LayoutBlockFlow {DIV} at (1,1) size 145x36 [border: (2px solid #0000FF)] - LayoutBlockFlow {H2} at (0,316.16) size 784x28 + LayoutBlockFlow {H2} at (0,317.16) size 784x28 LayoutText {#text} at (0,0) size 200x28 text run at (0,0) width 200: "Baseline Alignment" - LayoutBlockFlow {DIV} at (0,364.06) size 784x28 + LayoutBlockFlow {DIV} at (0,365.06) size 784x28 LayoutInline {FONT} at (0,0) size 204x28 LayoutText {#text} at (0,0) size 42x28 text run at (0,0) width 42: "text " @@ -124,7 +124,7 @@ text run at (179,0) width 7: " " LayoutBlockFlow {INPUT} at (188.14,12) size 12x12 LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (0,392.06) size 784x19 + LayoutBlockFlow {DIV} at (0,393.06) size 784x19 LayoutText {#text} at (0,0) size 28x18 text run at (0,0) width 28: "text " LayoutButton {INPUT} at (27.98,1) size 48.53x18 [bgcolor=#C0C0C0] @@ -144,7 +144,7 @@ text run at (161,0) width 5: " " LayoutBlockFlow {INPUT} at (168.14,4) size 12x12 LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (0,411.06) size 784x19 + LayoutBlockFlow {DIV} at (0,412.06) size 784x19 LayoutInline {FONT} at (0,0) size 169x13 LayoutText {#text} at (0,4) size 18x13 text run at (0,4) width 18: "text " @@ -165,7 +165,7 @@ text run at (147,4) width 4: " " LayoutBlockFlow {INPUT} at (153.14,4) size 12x12 LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (0,430.06) size 784x37 + LayoutBlockFlow {DIV} at (0,431.06) size 784x37 LayoutText {#text} at (0,18) size 28x18 text run at (0,18) width 28: "text " LayoutTextControl {INPUT} at (27.98,18) size 71x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] @@ -179,10 +179,10 @@ LayoutText {#text} at (314,18) size 5x18 text run at (314,18) width 5: " " LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {H2} at (0,486.97) size 784x28 + LayoutBlockFlow {H2} at (0,487.97) size 784x28 LayoutText {#text} at (0,0) size 198x28 text run at (0,0) width 198: "Pop-up Menu Sizes" - LayoutBlockFlow {DIV} at (0,534.88) size 784x28 + LayoutBlockFlow {DIV} at (0,535.88) size 784x28 LayoutInline {FONT} at (0,0) size 162x28 LayoutText {#text} at (0,0) size 0x0 LayoutMenuList {SELECT} at (0,9) size 36x18 [bgcolor=#F8F8F8] @@ -202,7 +202,7 @@ LayoutText (anonymous) at (8,2) size 47x13 text run at (8,2) width 47: "xxxxxxxx" LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (0,562.88) size 784x19 + LayoutBlockFlow {DIV} at (0,563.88) size 784x19 LayoutMenuList {SELECT} at (0,1) size 36x18 [bgcolor=#F8F8F8] LayoutBlockFlow (anonymous) at (0,0) size 36x18 LayoutText (anonymous) at (8,2) size 4x13 @@ -220,7 +220,7 @@ LayoutText (anonymous) at (8,2) size 47x13 text run at (8,2) width 47: "xxxxxxxx" LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (0,581.88) size 784x18 + LayoutBlockFlow {DIV} at (0,582.88) size 784x18 LayoutInline {FONT} at (0,0) size 155x13 LayoutText {#text} at (0,0) size 0x0 LayoutMenuList {SELECT} at (0,0) size 36x18 [bgcolor=#F8F8F8] @@ -266,11 +266,11 @@ LayoutBlockFlow {DIV} at (3,3) size 135x13 LayoutText {#text} at (0,0) size 41x13 text run at (0,0) width 41: "textarea" -layer at (39,459) size 65x13 +layer at (39,460) size 65x13 LayoutBlockFlow {DIV} at (3,3) size 65x13 LayoutText {#text} at (0,0) size 43x13 text run at (0,0) width 43: "text field" -layer at (327,438) size 141x32 clip at (328,439) size 139x30 +layer at (327,439) size 141x32 clip at (328,440) size 139x30 LayoutTextControl {TEXTAREA} at (318.98,0) size 141x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (3,3) size 135x13 LayoutText {#text} at (0,0) size 41x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/month/month-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/month/month-appearance-basic-expected.png index 8d783d41..0773adb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/month/month-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/month/month-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/month/month-appearance-l10n-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/month/month-appearance-l10n-expected.png index c4715ab..dd941d74 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/month/month-appearance-l10n-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/month/month-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/month/month-appearance-pseudo-elements-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/month/month-appearance-pseudo-elements-expected.png index 803d8e5..e9aa681 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/month/month-appearance-pseudo-elements-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/month/month-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/listbox-scrollbar-incremental-load-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/listbox-scrollbar-incremental-load-expected.txt index 4654751..00e3ae3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/listbox-scrollbar-incremental-load-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/listbox-scrollbar-incremental-load-expected.txt
@@ -22,7 +22,7 @@ text run at (500,0) width 244: "\x{201C}Seven\x{201D}. The scroller should be at the" text run at (0,18) width 155: "bottom of the scroll bar " text run at (154,18) width 88: "to reflect this." - LayoutBlockFlow (anonymous) at (0,104) size 784x58 + LayoutBlockFlow (anonymous) at (0,104) size 784x59 LayoutText {#text} at (0,0) size 0x0 layer at (8,112) size 48x59 clip at (9,113) size 35x57 scrollY 43.00 scrollHeight 100 LayoutListBox {SELECT} at (0,0.25) size 48.06x58.75 [bgcolor=#FFFFFF] [border: (1px solid #999999)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/listbox-with-display-none-option-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/listbox-with-display-none-option-expected.txt index 89c833c..c12a75f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/listbox-with-display-none-option-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/listbox-with-display-none-option-expected.txt
@@ -1,12 +1,12 @@ layer at (0,0) size 800x600 LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x173 - LayoutBlockFlow {HTML} at (0,0) size 800x173 - LayoutBlockFlow {BODY} at (8,16) size 784x149 +layer at (0,0) size 800x174 + LayoutBlockFlow {HTML} at (0,0) size 800x174 + LayoutBlockFlow {BODY} at (8,16) size 784x150 LayoutBlockFlow {P} at (0,0) size 784x18 LayoutText {#text} at (0,0) size 608x18 text run at (0,0) width 608: "The select list box should not display items (options and optgroups) with style \"display: none\"." - LayoutBlockFlow (anonymous) at (0,34) size 784x115 + LayoutBlockFlow (anonymous) at (0,34) size 784x116 LayoutText {#text} at (48,97) size 5x18 text run at (48,97) width 5: " " LayoutText {#text} at (108,97) size 5x18
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/select-item-background-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/select-item-background-clip-expected.txt index 5b7c8a2..93dafff 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/select-item-background-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/select-item-background-clip-expected.txt
@@ -16,7 +16,7 @@ text run at (0,18) width 163: "not clipped to the list box" LayoutText {#text} at (162,18) size 5x18 text run at (162,18) width 5: "." - LayoutBlockFlow (anonymous) at (0,52) size 784x59 + LayoutBlockFlow (anonymous) at (0,52) size 784x60 LayoutText {#text} at (0,0) size 0x0 LayoutText {#text} at (0,0) size 0x0 layer at (8,60) size 52x59 clip at (11,63) size 35x53 scrollHeight 62
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/select-overflow-scroll-inherited-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/select-overflow-scroll-inherited-expected.png index bd10ebd..28f322ce 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/select-overflow-scroll-inherited-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/select-overflow-scroll-inherited-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/select-overflow-scroll-inherited-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/select-overflow-scroll-inherited-expected.txt index 5573bf8..f7ee289 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/select-overflow-scroll-inherited-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/select-overflow-scroll-inherited-expected.txt
@@ -3,8 +3,8 @@ layer at (0,0) size 800x600 LayoutBlockFlow {HTML} at (0,0) size 800x600 LayoutBlockFlow {BODY} at (8,8) size 784x584 -layer at (8,8) size 784x130 clip at (8,8) size 769x115 - LayoutBlockFlow {DIV} at (0,0) size 784x130 +layer at (8,8) size 784x131 clip at (8,8) size 769x116 + LayoutBlockFlow {DIV} at (0,0) size 784x131 LayoutText {#text} at (0,0) size 0x0 layer at (8,8) size 48x115 clip at (9,9) size 35x102 scrollHeight 141 LayoutListBox {SELECT} at (0,-0.50) size 48.06x115.50 [bgcolor=#FFFFFF] [border: (1px solid #999999)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png index df894b7..afbedfc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/time/time-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/time/time-appearance-basic-expected.png index 541a6389..0ee4a5e1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/time/time-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/time/time-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/time/time-appearance-pseudo-elements-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/time/time-appearance-pseudo-elements-expected.png index 9e247d5..7c51569 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/time/time-appearance-pseudo-elements-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/time/time-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/week/week-appearance-basic-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/week/week-appearance-basic-expected.png index ad3a53bc..66a1af1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/week/week-appearance-basic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/week/week-appearance-basic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/week/week-appearance-pseudo-elements-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/week/week-appearance-pseudo-elements-expected.png index 62da2bd5..dc04789 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/week/week-appearance-pseudo-elements-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/week/week-appearance-pseudo-elements-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/lists/001-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/lists/001-expected.png index bf33a85..86380aad 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/lists/001-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/lists/001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/lists/001-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/lists/001-expected.txt index 2a8c4c4..d80614e0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/lists/001-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/lists/001-expected.txt
@@ -4,7 +4,8 @@ LayoutBlockFlow {HTML} at (0,0) size 800x600 LayoutBlockFlow {BODY} at (8,8) size 784x576 LayoutBlockFlow {DIV} at (0,0) size 784x106 [border: (3px solid #FFA500)] - LayoutBlockFlow (floating) {DIV} at (11,11) size 122x122 [bgcolor=#FFA500] [border: (3px solid #FFA500)] + LayoutListItem (floating) {DIV} at (11,11) size 122x122 [bgcolor=#FFA500] [border: (3px solid #FFA500)] + LayoutListMarker (anonymous) at (-17,11) size 7x18: bullet LayoutListItem {DIV} at (11,11) size 762x84 [border: (3px solid #FFA500)] LayoutListItem {DIV} at (11,11) size 740x62 [border: (3px solid #FFA500)] LayoutListItem {DIV} at (11,11) size 718x40 [border: (3px solid #FFA500)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/lists/001-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/lists/001-vertical-expected.png index 904379d..6738f58 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/lists/001-vertical-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/lists/001-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/lists/001-vertical-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/lists/001-vertical-expected.txt index 92fecb8..33564e1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/lists/001-vertical-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/lists/001-vertical-expected.txt
@@ -4,7 +4,8 @@ LayoutBlockFlow {HTML} at (0,0) size 800x600 LayoutBlockFlow {BODY} at (8,8) size 776x584 LayoutBlockFlow {DIV} at (0,0) size 106x584 [border: (3px solid #FFA500)] - LayoutBlockFlow (floating) {DIV} at (11,11) size 122x122 [bgcolor=#FFA500] [border: (3px solid #FFA500)] + LayoutListItem (floating) {DIV} at (11,11) size 122x122 [bgcolor=#FFA500] [border: (3px solid #FFA500)] + LayoutListMarker (anonymous) at (11,-17) size 18x7: bullet LayoutListItem {DIV} at (11,11) size 84x562 [border: (3px solid #FFA500)] LayoutListItem {DIV} at (11,11) size 62x540 [border: (3px solid #FFA500)] LayoutListItem {DIV} at (11,11) size 40x518 [border: (3px solid #FFA500)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-breaking-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-breaking-expected.png index 6085053..2ccccde 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-breaking-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-breaking-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-breaking-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-breaking-expected.txt index cabed4b5e..23ece810 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-breaking-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-breaking-expected.txt
@@ -3,7 +3,7 @@ layer at (0,0) size 800x600 LayoutBlockFlow {HTML} at (0,0) size 800x600 LayoutBlockFlow {BODY} at (8,8) size 784x584 - LayoutBlockFlow {DIV} at (0,0) size 32x472 [border: (1px solid #FF0000)] + LayoutBlockFlow {DIV} at (0,0) size 32x474 [border: (1px solid #FF0000)] LayoutTextControl {INPUT} at (1,1) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] LayoutTextControl {INPUT} at (1,20) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] LayoutText {#text} at (0,0) size 0x0 @@ -38,11 +38,11 @@ text run at (8,2) width 30: "select" LayoutText {#text} at (0,0) size 0x0 LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {INPUT} at (3.88,292) size 12x12 - LayoutBlockFlow {INPUT} at (3.88,310) size 12x12 + LayoutBlockFlow {INPUT} at (3.88,294) size 12x12 + LayoutBlockFlow {INPUT} at (3.88,312) size 12x12 LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {INPUT} at (3.88,328) size 12x13 - LayoutBlockFlow {INPUT} at (3.88,347) size 12x13 + LayoutBlockFlow {INPUT} at (3.88,330) size 12x13 + LayoutBlockFlow {INPUT} at (3.88,349) size 12x13 LayoutText {#text} at (0,0) size 0x0 LayoutText {#text} at (0,0) size 0x0 LayoutText {#text} at (0,0) size 0x0 @@ -55,26 +55,26 @@ LayoutBlockFlow {OPTION} at (1,1) size 33.61x14.19 LayoutText {#text} at (2,0) size 30x13 text run at (2,0) width 30: "select" -layer at (9,253) size 47x45 clip at (10,254) size 34x43 - LayoutListBox {SELECT} at (1,245.44) size 46.61x44.56 [bgcolor=#FFFFFF] [border: (1px solid #999999)] +layer at (9,254) size 47x45 clip at (10,255) size 34x43 + LayoutListBox {SELECT} at (1,246.44) size 46.61x44.56 [bgcolor=#FFFFFF] [border: (1px solid #999999)] LayoutBlockFlow {OPTION} at (1,1) size 33.61x14.19 LayoutText {#text} at (2,0) size 30x13 text run at (2,0) width 30: "select" -layer at (9,371) size 27x27 - LayoutIFrame {IFRAME} at (1,363) size 27x27 [border: (1px solid #000000)] +layer at (9,373) size 27x27 + LayoutIFrame {IFRAME} at (1,365) size 27x27 [border: (1px solid #000000)] layer at (0,0) size 25x25 LayoutView at (0,0) size 25x25 layer at (0,0) size 25x25 LayoutBlockFlow {HTML} at (0,0) size 25x25 LayoutBlockFlow {BODY} at (8,8) size 9x9 -layer at (9,398) size 27x27 - LayoutIFrame {IFRAME} at (1,390) size 27x27 [border: (1px solid #000000)] +layer at (9,400) size 27x27 + LayoutIFrame {IFRAME} at (1,392) size 27x27 [border: (1px solid #000000)] layer at (0,0) size 25x25 LayoutView at (0,0) size 25x25 layer at (0,0) size 25x25 LayoutBlockFlow {HTML} at (0,0) size 25x25 LayoutBlockFlow {BODY} at (8,8) size 9x9 -layer at (9,425) size 27x27 - LayoutEmbeddedObject {EMBED} at (1,417) size 27x27 [border: (1px solid #000000)] -layer at (9,452) size 27x27 - LayoutEmbeddedObject {EMBED} at (1,444) size 27x27 [border: (1px solid #000000)] +layer at (9,427) size 27x27 + LayoutEmbeddedObject {EMBED} at (1,419) size 27x27 [border: (1px solid #000000)] +layer at (9,454) size 27x27 + LayoutEmbeddedObject {EMBED} at (1,446) size 27x27 [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/updateNewFont-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/text/updateNewFont-expected.txt index 8b3a0d3..8fd09d5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/updateNewFont-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/updateNewFont-expected.txt
@@ -1,8 +1,8 @@ layer at (0,0) size 800x600 LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x127 - LayoutBlockFlow {HTML} at (0,0) size 800x127 - LayoutBlockFlow {BODY} at (8,8) size 784x111 +layer at (0,0) size 800x128 + LayoutBlockFlow {HTML} at (0,0) size 800x128 + LayoutBlockFlow {BODY} at (8,8) size 784x112 LayoutText {#text} at (0,0) size 0x0 layer at (8,8) size 33x112 clip at (9,9) size 20x110 LayoutListBox {SELECT} at (0,0.31) size 32.81x111.69 [bgcolor=#FFFFFF] [border: (1px solid #999999)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/flexbox/flexbox-baseline-expected.png b/third_party/WebKit/LayoutTests/platform/win/css3/flexbox/flexbox-baseline-expected.png index 3c05c34..5b06582c4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css3/flexbox/flexbox-baseline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/css3/flexbox/flexbox-baseline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/flexbox/flexbox-baseline-expected.txt b/third_party/WebKit/LayoutTests/platform/win/css3/flexbox/flexbox-baseline-expected.txt index 70372e68..503983d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css3/flexbox/flexbox-baseline-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/css3/flexbox/flexbox-baseline-expected.txt
@@ -1,9 +1,9 @@ layer at (0,0) size 800x600 LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x492 - LayoutBlockFlow {HTML} at (0,0) size 800x492 -layer at (0,0) size 800x492 - LayoutBlockFlow (relative positioned) {BODY} at (0,0) size 800x492 +layer at (0,0) size 800x494 + LayoutBlockFlow {HTML} at (0,0) size 800x494 +layer at (0,0) size 800x494 + LayoutBlockFlow (relative positioned) {BODY} at (0,0) size 800x494 LayoutBlockFlow {DIV} at (0,0) size 800x55 LayoutText {#text} at (0,20) size 73x17 text run at (0,20) width 73: "before text " @@ -32,7 +32,7 @@ text run at (0,0) width 39: "above" LayoutText {#text} at (163,27) size 62x17 text run at (163,27) width 62: " after text" - LayoutBlockFlow {DIV} at (0,100) size 800x71 + LayoutBlockFlow {DIV} at (0,100) size 800x72 LayoutText {#text} at (0,31) size 73x17 text run at (0,31) width 73: "before text " LayoutFlexibleBox {DIV} at (72.84,5) size 152.23x66.81 [bgcolor=#D3D3D3] @@ -44,7 +44,7 @@ text run at (0,0) width 39: "above" LayoutText {#text} at (225,31) size 62x17 text run at (225,31) width 62: " after text" - LayoutBlockFlow {DIV} at (0,171) size 800x71 + LayoutBlockFlow {DIV} at (0,172) size 800x72 LayoutText {#text} at (0,5) size 73x17 text run at (0,5) width 73: "before text " LayoutFlexibleBox {DIV} at (72.84,5) size 143.78x66.81 [bgcolor=#D3D3D3] @@ -56,20 +56,20 @@ text run at (0,0) width 92: "h2 below" LayoutText {#text} at (216,5) size 62x17 text run at (216,5) width 62: " after text" - LayoutBlockFlow {DIV} at (0,242) size 800x45 + LayoutBlockFlow {DIV} at (0,244) size 800x45 LayoutText {#text} at (0,12) size 188x17 text run at (0,12) width 188: "should align with the middle " LayoutFlexibleBox {DIV} at (187.09,5) size 40x40 [bgcolor=#D3D3D3] LayoutBlockFlow {DIV} at (0,0) size 40x21 [border: none (1px solid #000000) none] LayoutText {#text} at (227,12) size 127x17 text run at (227,12) width 127: " of the grey flexbox" - LayoutBlockFlow {DIV} at (0,287) size 800x39 + LayoutBlockFlow {DIV} at (0,289) size 800x39 LayoutText {#text} at (0,21) size 188x17 text run at (0,21) width 188: "should align with the bottom " LayoutFlexibleBox {DIV} at (187.98,5) size 30x30 [bgcolor=#D3D3D3] LayoutText {#text} at (217,21) size 128x17 text run at (217,21) width 128: " of the grey flexbox" - LayoutBlockFlow {DIV} at (0,326) size 800x41 + LayoutBlockFlow {DIV} at (0,328) size 800x41 LayoutText {#text} at (0,5) size 73x17 text run at (0,5) width 73: "before text " LayoutFlexibleBox {DIV} at (72.84,5) size 52.42x36 [bgcolor=#D3D3D3] @@ -81,7 +81,7 @@ text run at (0,0) width 40: "below" LayoutText {#text} at (125,5) size 62x17 text run at (125,5) width 62: " after text" - LayoutBlockFlow {DIV} at (0,367) size 800x41 + LayoutBlockFlow {DIV} at (0,369) size 800x41 LayoutText {#text} at (0,23) size 73x17 text run at (0,23) width 73: "before text " LayoutFlexibleBox {DIV} at (72.84,5) size 52.42x36 [bgcolor=#D3D3D3] @@ -93,7 +93,7 @@ text run at (0,0) width 39: "above" LayoutText {#text} at (125,23) size 62x17 text run at (125,23) width 62: " after text" - LayoutBlockFlow {DIV} at (0,408) size 800x45 + LayoutBlockFlow {DIV} at (0,410) size 800x45 LayoutText {#text} at (0,11) size 188x17 text run at (0,11) width 188: "should align with the middle " LayoutFlexibleBox {DIV} at (187.09,5) size 40x40 [bgcolor=#D3D3D3] @@ -101,7 +101,7 @@ LayoutBlockFlow {DIV} at (0,20.50) size 40x19.50 LayoutText {#text} at (227,11) size 127x17 text run at (227,11) width 127: " of the grey flexbox" - LayoutBlockFlow {DIV} at (0,453) size 800x39 + LayoutBlockFlow {DIV} at (0,455) size 800x39 LayoutText {#text} at (0,21) size 188x17 text run at (0,21) width 188: "should align with the bottom " LayoutFlexibleBox {DIV} at (187.98,5) size 30x30 [bgcolor=#D3D3D3]
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/basic-buttons-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/forms/basic-buttons-expected.png index acf86cea..730fe9bf 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/basic-buttons-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/basic-buttons-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/basic-buttons-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/basic-buttons-expected.txt index 79865567..4b3b118 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/basic-buttons-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/basic-buttons-expected.txt
@@ -1,8 +1,8 @@ layer at (0,0) size 800x600 LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x345 - LayoutBlockFlow {HTML} at (0,0) size 800x345 - LayoutBlockFlow {BODY} at (8,8) size 784x329 +layer at (0,0) size 800x346 + LayoutBlockFlow {HTML} at (0,0) size 800x346 + LayoutBlockFlow {BODY} at (8,8) size 784x330 LayoutBlockFlow (anonymous) at (0,0) size 784x72 LayoutText {#text} at (0,0) size 547x17 text run at (0,0) width 547: "Tests for basic button rendering. Creates a table with seven columns and seven rows. " @@ -14,8 +14,8 @@ text run at (0,36) width 660: "with text (\"foo\") and then uses six different paddings to make sure each of the buttons render properly. " LayoutBR {BR} at (659,36) size 1x17 LayoutBR {BR} at (0,54) size 0x17 - LayoutTable {TABLE} at (0,72) size 697x257 - LayoutTableSection {TBODY} at (0,0) size 697x257 + LayoutTable {TABLE} at (0,72) size 697x258 + LayoutTableSection {TBODY} at (0,0) size 697x258 LayoutTableRow {TR} at (0,0) size 697x20 LayoutTableCell {TD} at (0,0) size 170x20 [r=0 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 44x17 @@ -70,18 +70,18 @@ LayoutTableCell {TD} at (527,45) size 170x20 [r=2 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x17 text run at (1,1) width 106: "(20, 21) (16, 17)" - LayoutTableRow {TR} at (0,66) size 697x48 + LayoutTableRow {TR} at (0,66) size 697x49 LayoutTableCell {TD} at (0,80) size 170x20 [r=3 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 90x17 text run at (1,1) width 90: "padding: 10%" - LayoutTableCell {TD} at (170,73) size 61x33 [r=3 c=1 rs=1 cs=1] + LayoutTableCell {TD} at (170,73) size 61x34 [r=3 c=1 rs=1 cs=1] LayoutButton {BUTTON} at (1,1) size 25.78x31.78 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (7.89,7.89) size 10x16 LayoutImage {IMG} at (0,3) size 10x10 LayoutTableCell {TD} at (231,80) size 161x20 [r=3 c=2 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x17 text run at (1,1) width 106: "(32, 26) (28, 22)" - LayoutTableCell {TD} at (392,66) size 135x48 [r=3 c=3 rs=1 cs=1] + LayoutTableCell {TD} at (392,66) size 135x49 [r=3 c=3 rs=1 cs=1] LayoutButton {INPUT} at (1,1) size 47.59x46.59 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (15.30,15.30) size 17x16 LayoutText {#text} at (0,0) size 17x16 @@ -89,79 +89,79 @@ LayoutTableCell {TD} at (527,80) size 170x20 [r=3 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x17 text run at (1,1) width 106: "(47, 48) (43, 44)" - LayoutTableRow {TR} at (0,114) size 697x26 - LayoutTableCell {TD} at (0,117) size 170x20 [r=4 c=0 rs=1 cs=1] + LayoutTableRow {TR} at (0,115) size 697x26 + LayoutTableCell {TD} at (0,118) size 170x20 [r=4 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 84x17 text run at (1,1) width 84: "padding: 2px" - LayoutTableCell {TD} at (170,114) size 61x26 [r=4 c=1 rs=1 cs=1] + LayoutTableCell {TD} at (170,115) size 61x26 [r=4 c=1 rs=1 cs=1] LayoutButton {BUTTON} at (1,1) size 18x24 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (4,4) size 10x16 LayoutImage {IMG} at (0,3) size 10x10 - LayoutTableCell {TD} at (231,117) size 161x20 [r=4 c=2 rs=1 cs=1] + LayoutTableCell {TD} at (231,118) size 161x20 [r=4 c=2 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x17 text run at (1,1) width 106: "(24, 18) (20, 14)" - LayoutTableCell {TD} at (392,114) size 135x26 [r=4 c=3 rs=1 cs=1] + LayoutTableCell {TD} at (392,115) size 135x26 [r=4 c=3 rs=1 cs=1] LayoutButton {INPUT} at (1,1) size 25x24 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (4,4) size 17x16 LayoutText {#text} at (0,0) size 17x16 text run at (0,0) width 17: "foo" - LayoutTableCell {TD} at (527,117) size 170x20 [r=4 c=4 rs=1 cs=1] + LayoutTableCell {TD} at (527,118) size 170x20 [r=4 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x17 text run at (1,1) width 106: "(24, 25) (20, 21)" - LayoutTableRow {TR} at (0,140) size 697x27 - LayoutTableCell {TD} at (0,143) size 170x20 [r=5 c=0 rs=1 cs=1] + LayoutTableRow {TR} at (0,141) size 697x27 + LayoutTableCell {TD} at (0,144) size 170x20 [r=5 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 168x17 text run at (1,1) width 168: "padding: 2px 6px 3px 6px" - LayoutTableCell {TD} at (170,140) size 61x27 [r=5 c=1 rs=1 cs=1] + LayoutTableCell {TD} at (170,141) size 61x27 [r=5 c=1 rs=1 cs=1] LayoutButton {BUTTON} at (1,1) size 26x25 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (8,4) size 10x16 LayoutImage {IMG} at (0,3) size 10x10 - LayoutTableCell {TD} at (231,143) size 161x20 [r=5 c=2 rs=1 cs=1] + LayoutTableCell {TD} at (231,144) size 161x20 [r=5 c=2 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x17 text run at (1,1) width 106: "(25, 26) (21, 22)" - LayoutTableCell {TD} at (392,140) size 135x27 [r=5 c=3 rs=1 cs=1] + LayoutTableCell {TD} at (392,141) size 135x27 [r=5 c=3 rs=1 cs=1] LayoutButton {INPUT} at (1,1) size 33x25 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (8,4) size 17x16 LayoutText {#text} at (0,0) size 17x16 text run at (0,0) width 17: "foo" - LayoutTableCell {TD} at (527,143) size 170x20 [r=5 c=4 rs=1 cs=1] + LayoutTableCell {TD} at (527,144) size 170x20 [r=5 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x17 text run at (1,1) width 106: "(25, 33) (21, 29)" - LayoutTableRow {TR} at (0,167) size 697x28 - LayoutTableCell {TD} at (0,171) size 170x20 [r=6 c=0 rs=1 cs=1] + LayoutTableRow {TR} at (0,168) size 697x28 + LayoutTableCell {TD} at (0,172) size 170x20 [r=6 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 112x17 text run at (1,1) width 112: "padding: 3px 7px" - LayoutTableCell {TD} at (170,167) size 61x28 [r=6 c=1 rs=1 cs=1] + LayoutTableCell {TD} at (170,168) size 61x28 [r=6 c=1 rs=1 cs=1] LayoutButton {BUTTON} at (1,1) size 28x26 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (9,5) size 10x16 LayoutImage {IMG} at (0,3) size 10x10 - LayoutTableCell {TD} at (231,171) size 161x20 [r=6 c=2 rs=1 cs=1] + LayoutTableCell {TD} at (231,172) size 161x20 [r=6 c=2 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x17 text run at (1,1) width 106: "(26, 28) (22, 24)" - LayoutTableCell {TD} at (392,167) size 135x28 [r=6 c=3 rs=1 cs=1] + LayoutTableCell {TD} at (392,168) size 135x28 [r=6 c=3 rs=1 cs=1] LayoutButton {INPUT} at (1,1) size 35x26 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (9,5) size 17x16 LayoutText {#text} at (0,0) size 17x16 text run at (0,0) width 17: "foo" - LayoutTableCell {TD} at (527,171) size 170x20 [r=6 c=4 rs=1 cs=1] + LayoutTableCell {TD} at (527,172) size 170x20 [r=6 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x17 text run at (1,1) width 106: "(26, 35) (22, 31)" - LayoutTableRow {TR} at (0,195) size 697x62 - LayoutTableCell {TD} at (0,216) size 170x20 [r=7 c=0 rs=1 cs=1] + LayoutTableRow {TR} at (0,196) size 697x62 + LayoutTableCell {TD} at (0,217) size 170x20 [r=7 c=0 rs=1 cs=1] LayoutText {#text} at (1,1) size 92x17 text run at (1,1) width 92: "padding: 20px" - LayoutTableCell {TD} at (170,195) size 61x62 [r=7 c=1 rs=1 cs=1] + LayoutTableCell {TD} at (170,196) size 61x62 [r=7 c=1 rs=1 cs=1] LayoutButton {BUTTON} at (1,1) size 54x60 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (22,22) size 10x16 LayoutImage {IMG} at (0,3) size 10x10 - LayoutTableCell {TD} at (231,216) size 161x20 [r=7 c=2 rs=1 cs=1] + LayoutTableCell {TD} at (231,217) size 161x20 [r=7 c=2 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x17 text run at (1,1) width 106: "(60, 54) (56, 50)" - LayoutTableCell {TD} at (392,195) size 135x62 [r=7 c=3 rs=1 cs=1] + LayoutTableCell {TD} at (392,196) size 135x62 [r=7 c=3 rs=1 cs=1] LayoutButton {INPUT} at (1,1) size 61x60 [bgcolor=#C0C0C0] [border: (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (22,22) size 17x16 LayoutText {#text} at (0,0) size 17x16 text run at (0,0) width 17: "foo" - LayoutTableCell {TD} at (527,216) size 170x20 [r=7 c=4 rs=1 cs=1] + LayoutTableCell {TD} at (527,217) size 170x20 [r=7 c=4 rs=1 cs=1] LayoutText {#text} at (1,1) size 106x17 text run at (1,1) width 106: "(60, 61) (56, 57)"
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png index 2dd6cf1..2029a39 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/color/color-suggestion-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/select/select-item-background-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/select/select-item-background-clip-expected.txt index af09609..7ac24f9 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/select/select-item-background-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/select/select-item-background-clip-expected.txt
@@ -16,7 +16,7 @@ text run at (0,18) width 163: "not clipped to the list box" LayoutText {#text} at (162,18) size 5x17 text run at (162,18) width 5: "." - LayoutBlockFlow (anonymous) at (0,52) size 784x67 + LayoutBlockFlow (anonymous) at (0,52) size 784x68 LayoutText {#text} at (0,0) size 0x0 LayoutText {#text} at (0,0) size 0x0 layer at (8,60) size 60x68 clip at (11,63) size 39x62 scrollHeight 74
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/lists/001-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/lists/001-expected.png index a69530e6..559a1f55 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/lists/001-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/lists/001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/lists/001-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/lists/001-expected.txt index f5d2565..b0d2f9a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/lists/001-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/lists/001-expected.txt
@@ -4,7 +4,8 @@ LayoutBlockFlow {HTML} at (0,0) size 800x600 LayoutBlockFlow {BODY} at (8,8) size 784x576 LayoutBlockFlow {DIV} at (0,0) size 784x106 [border: (3px solid #FFA500)] - LayoutBlockFlow (floating) {DIV} at (11,11) size 122x122 [bgcolor=#FFA500] [border: (3px solid #FFA500)] + LayoutListItem (floating) {DIV} at (11,11) size 122x122 [bgcolor=#FFA500] [border: (3px solid #FFA500)] + LayoutListMarker (anonymous) at (-17,11) size 7x17: bullet LayoutListItem {DIV} at (11,11) size 762x84 [border: (3px solid #FFA500)] LayoutListItem {DIV} at (11,11) size 740x62 [border: (3px solid #FFA500)] LayoutListItem {DIV} at (11,11) size 718x40 [border: (3px solid #FFA500)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/lists/001-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/lists/001-vertical-expected.png index d16eefa..e7f28be 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/lists/001-vertical-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/lists/001-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/lists/001-vertical-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/lists/001-vertical-expected.txt index a970bfb..a3b7df7 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/lists/001-vertical-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/lists/001-vertical-expected.txt
@@ -4,7 +4,8 @@ LayoutBlockFlow {HTML} at (0,0) size 800x600 LayoutBlockFlow {BODY} at (8,8) size 776x584 LayoutBlockFlow {DIV} at (0,0) size 106x584 [border: (3px solid #FFA500)] - LayoutBlockFlow (floating) {DIV} at (11,11) size 122x122 [bgcolor=#FFA500] [border: (3px solid #FFA500)] + LayoutListItem (floating) {DIV} at (11,11) size 122x122 [bgcolor=#FFA500] [border: (3px solid #FFA500)] + LayoutListMarker (anonymous) at (11,-17) size 17x7: bullet LayoutListItem {DIV} at (11,11) size 84x562 [border: (3px solid #FFA500)] LayoutListItem {DIV} at (11,11) size 62x540 [border: (3px solid #FFA500)] LayoutListItem {DIV} at (11,11) size 40x518 [border: (3px solid #FFA500)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text/updateNewFont-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/text/updateNewFont-expected.txt index b2e02f23..b3f4e83 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text/updateNewFont-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/text/updateNewFont-expected.txt
@@ -1,8 +1,8 @@ layer at (0,0) size 800x600 LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x127 - LayoutBlockFlow {HTML} at (0,0) size 800x127 - LayoutBlockFlow {BODY} at (8,8) size 784x111 +layer at (0,0) size 800x128 + LayoutBlockFlow {HTML} at (0,0) size 800x128 + LayoutBlockFlow {BODY} at (8,8) size 784x112 LayoutText {#text} at (0,0) size 0x0 layer at (8,8) size 37x112 clip at (9,9) size 20x110 LayoutListBox {SELECT} at (0,0.31) size 37x111.69 [bgcolor=#FFFFFF] [border: (1px solid #A9A9A9)]
diff --git a/third_party/WebKit/LayoutTests/svg/custom/object-sizing-zero-intrinsic-width-height-expected.html b/third_party/WebKit/LayoutTests/svg/custom/object-sizing-zero-intrinsic-width-height-expected.html deleted file mode 100644 index 0e76edd6..0000000 --- a/third_party/WebKit/LayoutTests/svg/custom/object-sizing-zero-intrinsic-width-height-expected.html +++ /dev/null
@@ -1 +0,0 @@ -<!DOCTYPE html>
diff --git a/third_party/WebKit/LayoutTests/svg/custom/object-sizing-zero-intrinsic-width-height.html b/third_party/WebKit/LayoutTests/svg/custom/object-sizing-zero-intrinsic-width-height.html index c50f6b28..6632396 100644 --- a/third_party/WebKit/LayoutTests/svg/custom/object-sizing-zero-intrinsic-width-height.html +++ b/third_party/WebKit/LayoutTests/svg/custom/object-sizing-zero-intrinsic-width-height.html
@@ -1,36 +1,36 @@ <!DOCTYPE html> -<html> -<style> -object { - background: red; -} -</style> -<body style="margin: 0px; padding: 0px;"> - <!--There should not be any red rectangle visible. --> - <object data="data:image/svg+xml, +<title>SVG in <object> with zero intrinsic size</title> +<script src=../../resources/testharness.js></script> +<script src=../../resources/testharnessreport.js></script> +<object data-expected="0x0" data="data:image/svg+xml, <svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='0' height='0'> <rect width='50' height='50' fill='red'/> - </svg> - "></object> - <object data="data:image/svg+xml, + </svg>"></object> +<object data-expected="50x0" data="data:image/svg+xml, <svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='50' height='0'> <rect width='50' height='50' fill='red'/> - </svg> - "></object> - <object data="data:image/svg+xml, + </svg>"></object> +<object data-expected="0x50" data="data:image/svg+xml, <svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='0' height='50'> <rect width='50' height='50' fill='red'/> - </svg> - "></object> - <object data="data:image/svg+xml, + </svg>"></object> +<object data-expected="0x150" data="data:image/svg+xml, <svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='0'> <rect width='50' height='50' fill='red'/> - </svg> - "></object> - <object data="data:image/svg+xml, + </svg>"></object> +<object data-expected="300x0" data="data:image/svg+xml, <svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' height='0'> <rect width='50' height='50' fill='red'/> - </svg> - "></object> -</body> -</html> + </svg>"></object> +<script> +Array.prototype.forEach.call(document.querySelectorAll('object'), function(element) { + var t = async_test(document.title + " - " + element.dataset.expected); + element.onload = function() { + requestAnimationFrame(t.step_func(function() { + var clientRect = element.getBoundingClientRect(); + assert_equals(clientRect.width + "x" + clientRect.height, element.dataset.expected); + t.done(); + })); + } +}); +</script>
diff --git a/third_party/WebKit/LayoutTests/typedcssom/keywordValue-expected.txt b/third_party/WebKit/LayoutTests/typedcssom/keywordValue-expected.txt new file mode 100644 index 0000000..1cd37a49 --- /dev/null +++ b/third_party/WebKit/LayoutTests/typedcssom/keywordValue-expected.txt
@@ -0,0 +1,6 @@ +This is a testharness.js-based test. +PASS Constructor should throw an error if given an empty string +FAIL cssString returns a string with a format similar to CSS.escape. This test also implies that toCSSValue supports all keywords including custom identifiers assert_equals: expected "\\ Hello\ World" but got "' Hello World'" +PASS keywordValue returns a string equal to the string used in the constructor +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/typedcssom/keywordValue.html b/third_party/WebKit/LayoutTests/typedcssom/keywordValue.html new file mode 100644 index 0000000..7ecbee5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/typedcssom/keywordValue.html
@@ -0,0 +1,30 @@ +<!DOCTYPE html> +<script src='../resources/testharness.js'></script> +<script src='../resources/testharnessreport.js'></script> +<script> + +test(function() { + assert_throws(TypeError(), function() { new KeywordValue("") }); +}, "Constructor should throw an error if given an empty string"); + +//This test fails due to bug: 584999 +test(function() { + assert_equals(new KeywordValue('initial').cssString, 'initial'); + assert_equals(new KeywordValue('center').cssString, 'center'); + assert_equals(new KeywordValue('customLemon').cssString, 'customLemon'); + assert_equals(new KeywordValue(' Hello World').cssString, CSS.escape(' Hello World')); + assert_equals(new KeywordValue('3').cssString, CSS.escape('3')); +}, 'cssString returns a string with a format similar to CSS.escape. This test also ' + + 'implies that toCSSValue supports all keywords including custom identifiers'); + +test(function() { + assert_equals(new KeywordValue('initial').keywordValue, 'initial'); + assert_equals(new KeywordValue('center').keywordValue, 'center'); + assert_equals(new KeywordValue('customLemon').keywordValue, 'customLemon'); + assert_equals(new KeywordValue(' Hello World').keywordValue, ' Hello World'); + assert_equals(new KeywordValue('3').keywordValue, '3'); +}, 'keywordValue returns a string equal to the string used in the constructor'); + +</script> +<body> +</body>
diff --git a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-expected.txt index f6ac413..e15644f 100644 --- a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -5878,6 +5878,7 @@ attribute ondblclick attribute ondevicemotion attribute ondeviceorientation + attribute ondeviceorientationabsolute attribute ondrag attribute ondragend attribute ondragenter
diff --git a/third_party/WebKit/LayoutTests/virtual/threaded/fast/scroll-behavior/smooth-scroll/mousewheel-scroll-interrupted-expected.txt b/third_party/WebKit/LayoutTests/virtual/threaded/fast/scroll-behavior/smooth-scroll/mousewheel-scroll-interrupted-expected.txt new file mode 100644 index 0000000..e251cfda --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/threaded/fast/scroll-behavior/smooth-scroll/mousewheel-scroll-interrupted-expected.txt
@@ -0,0 +1,12 @@ +This test ensures that input driven user scrolls get cancelled by non-input driven scrolls. + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + +PASS internals.getScrollAnimationState(document) == RUNNING_ON_COMPOSITOR is true +PASS isOrWillBeCancelled(document) is true +PASS document.scrollingElement.scrollTop < 40 && document.scrollingElement.scrollLeft == 0 became true +PASS successfullyParsed is true + +TEST COMPLETE +
diff --git a/third_party/WebKit/LayoutTests/virtual/threaded/fast/scroll-behavior/smooth-scroll/mousewheel-scroll-interrupted.html b/third_party/WebKit/LayoutTests/virtual/threaded/fast/scroll-behavior/smooth-scroll/mousewheel-scroll-interrupted.html new file mode 100644 index 0000000..154b115 --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/threaded/fast/scroll-behavior/smooth-scroll/mousewheel-scroll-interrupted.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<script src="../../../../../resources/js-test.js"></script> +<style> + body { + height: 2000px; + width: 2000px; + } +</style> + +<script> +window.jsTestIsAsync = true; + +description("This test ensures that input driven user scrolls get cancelled\ + by non-input driven scrolls."); + +// From ScrollAnimatorCompositorCoordinator::RunState. +var IDLE = 0; +var RUNNING_ON_COMPOSITOR = 2; +var WAITING_TO_CANCEL_ON_COMPOSITOR = 5; +function isOrWillBeCancelled(node) { + var state = internals.getScrollAnimationState(node); + return state == WAITING_TO_CANCEL_ON_COMPOSITOR || state == IDLE; +} + +function runTest() { + if (document.scrollingElement.scrollTop == 0) { + requestAnimationFrame(runTest); + } else { + shouldBeTrue("internals.getScrollAnimationState(document) " + + "== RUNNING_ON_COMPOSITOR"); + + // Programmatic scroll should cancel smooth scroll. + document.scrollingElement.scrollBy({top: 1, behavior: "smooth"}); + shouldBeTrue("isOrWillBeCancelled(document)"); + shouldBecomeEqual("document.scrollingElement.scrollTop < 40 && " + + "document.scrollingElement.scrollLeft == 0", "true", finishJSTest); + } +} + +onload = function() { + if (!window.eventSender || !window.internals) { + finishJSTest(); + return; + } + + // Turn on smooth scrolling. + internals.settings.setScrollAnimatorEnabled(true); + + document.scrollingElement.scrollTop = 0; + + // Scroll down 1 tick (40px). + eventSender.mouseMoveTo(20, 20); + eventSender.mouseScrollBy(0, -1); + + requestAnimationFrame(runTest); +} +</script>
diff --git a/third_party/WebKit/LayoutTests/webaudio/audiobuffersource-playbackrate-expected.txt b/third_party/WebKit/LayoutTests/webaudio/audiobuffersource-playbackrate-expected.txt new file mode 100644 index 0000000..e1f27dd --- /dev/null +++ b/third_party/WebKit/LayoutTests/webaudio/audiobuffersource-playbackrate-expected.txt
@@ -0,0 +1,24 @@ +Test if AudioBufferSourceNode.playbackRate can playback at different rates properly. + +On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". + + +PASS Exceeded SNR threshold of 103.8508 dB. +PASS Maximum difference below threshold of 0.3028 ulp (16-bits). +PASS Number of differences between results is 0 out of 14400. +PASS Exceeded SNR threshold of 103.8657 dB. +PASS Maximum difference below threshold of 0.3029 ulp (16-bits). +PASS Number of differences between results is 0 out of 14400. +PASS Exceeded SNR threshold of 103.8141 dB. +PASS Maximum difference below threshold of 0.3047 ulp (16-bits). +PASS Number of differences between results is 0 out of 14400. +PASS Exceeded SNR threshold of 103.6818 dB. +PASS Maximum difference below threshold of 0.3262 ulp (16-bits). +PASS Number of differences between results is 0 out of 14400. +PASS Exceeded SNR threshold of 103.1514 dB. +PASS Maximum difference below threshold of 0.3946 ulp (16-bits). +PASS Number of differences between results is 0 out of 14400. +PASS successfullyParsed is true + +TEST COMPLETE +
diff --git a/third_party/WebKit/LayoutTests/webaudio/audiobuffersource-playbackrate-expected.wav b/third_party/WebKit/LayoutTests/webaudio/audiobuffersource-playbackrate-expected.wav deleted file mode 100644 index 97ff13c..0000000 --- a/third_party/WebKit/LayoutTests/webaudio/audiobuffersource-playbackrate-expected.wav +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/webaudio/audiobuffersource-playbackrate.html b/third_party/WebKit/LayoutTests/webaudio/audiobuffersource-playbackrate.html index d1ca700..a1bb51da 100644 --- a/third_party/WebKit/LayoutTests/webaudio/audiobuffersource-playbackrate.html +++ b/third_party/WebKit/LayoutTests/webaudio/audiobuffersource-playbackrate.html
@@ -1,101 +1,117 @@ <!DOCTYPE html> - -<!-- -Tests that AudioBufferSourceNode can playback at different rates properly. -Render 60 notes over a 5 octave range. ---> - <html> <head> -<script type="text/javascript" src="resources/audio-testing.js"></script> -<script type="text/javascript" src="resources/buffer-loader.js"></script> - + <title>AudioBufferSourceNode - playbackRate test</title> + <script src="../resources/js-test.js"></script> + <script src="resources/compatibility.js"></script> + <script src="resources/audio-testing.js"></script> </head> <body> + <script> + description("Test if AudioBufferSourceNode.playbackRate can playback at different rates properly."); + window.jsTestIsAsync = true; -<script> + // Any sample rate mutiple of 128 is valid for this test, but here it uses + // 48000Hz because it is a commonly used number that happens to be multiple + // of 128. + var sampleRate = 48000; -window.onload = init; + // The test iterates over 60 pitches starting from 36. (MIDI pitch of C2) + var fundamentalPitch = 36; + var numberOfPitches = 60; -var sampleRate = 44100.0; -var numberOfNotes = 60; // play over a 5 octave range -var noteDuration = 0.025; -var noteSpacing = noteDuration + 0.005; // leave 5ms of silence between each "note" -var lengthInSeconds = numberOfNotes * noteSpacing; + var noteDuration = 0.025; + var totalDuration = noteDuration * numberOfPitches; -var context = 0; -var sinWaveBuffer = 0; + // Test constraints for each octave. + var testConstraints = [{ + thresholdSNR: 103.8508, + thresholdDiffULP: 0.3028 + }, { + thresholdSNR: 103.8657, + thresholdDiffULP: 0.3029 + }, { + thresholdSNR: 103.8141, + thresholdDiffULP: 0.3047 + }, { + thresholdSNR: 103.6818, + thresholdDiffULP: 0.3262 + }, { + thresholdSNR: 103.1514, + thresholdDiffULP: 0.3946 + }]; -function createOneCycleSinWaveBuffer(frequency, sampleRate) { - var duration = 1 / frequency; - var sampleFrameLength = duration * sampleRate; - - var audioBuffer = context.createBuffer(2, sampleFrameLength, sampleRate); + function pitchToFrequency(midiPitch) { + return 440 * Math.pow(2, (Math.floor(midiPitch) - 69) / 12); + } - var n = audioBuffer.length; - var channelL = audioBuffer.getChannelData(0); - var channelR = audioBuffer.getChannelData(1); + function pitchDiffToPlaybackRate(midiPitchDiff) { + return Math.pow(2, midiPitchDiff / 12); + } - for (var i = 0; i < n; ++i) { - channelL[i] = Math.sin(frequency * 2.0*Math.PI * i / sampleRate); - channelR[i] = channelL[i]; + function createSineWaveBuffer(context, frequency, duration) { + var buffer = context.createBuffer(1, duration * sampleRate, sampleRate); + var data = buffer.getChannelData(0); + var omega = 2 * Math.PI * frequency / sampleRate; + for (var i = 0; i < data.length; i++) + data[i] = Math.sin(omega * i); + + return buffer; + } + + var context = new OfflineAudioContext(2, totalDuration * sampleRate, sampleRate); + + // This is the fundamental buffer for playbackRate modulation. The duration of + // this buffer is arbitrary but long enough to produce the sound without + // running short. + var fundamentalBuffer = createSineWaveBuffer(context, pitchToFrequency(fundamentalPitch), totalDuration); + + // A unit test consists of 2 sources: the 'actual' source runs a buffer with + // the playback rate modulated and the 'expected' source runs a mathmatically + // generated sound buffer. + function runUnitTest(context, noteStart, notePitch) { + var actualSrc = context.createBufferSource(); + var expectedSrc = context.createBufferSource(); + var merger = context.createChannelMerger(2); + + actualSrc.buffer = fundamentalBuffer; + expectedSrc.buffer = createSineWaveBuffer(context, pitchToFrequency(notePitch), noteDuration); + actualSrc.playbackRate.value = pitchDiffToPlaybackRate(notePitch - fundamentalPitch); + + actualSrc.connect(merger, 0, 0); + expectedSrc.connect(merger, 0, 1); + merger.connect(context.destination); + + actualSrc.start(noteStart); + actualSrc.stop(noteStart + noteDuration); + expectedSrc.start(noteStart); + expectedSrc.stop(noteStart + noteDuration); + } + + // Schedule tests up to 60 pitches above from the fundamental pitch. + for (var iteration = 0; iteration < numberOfPitches; iteration++) + runUnitTest(context, noteDuration * iteration, fundamentalPitch + iteration); + + // Once the rendering is complete, split the buffer into 5 octaves. Then + // perform the SNR and the maximum difference ULP check for each octave with + // different constraints. + context.startRendering().then(function (renderedBuffer) { + var actual = renderedBuffer.getChannelData(0); + var expected = renderedBuffer.getChannelData(1); + var octaveLength = Math.floor(noteDuration * 12 * sampleRate); + + for (var i = 0; i < numberOfPitches / 12; i++) { + var start = i * octaveLength, end = (i + 1) * octaveLength; + var octaveActual = actual.subarray(start, end); + var octaveExpected = expected.subarray(start, end); + + compareBuffersWithConstraints(octaveActual, octaveExpected, testConstraints[i]); } - return audioBuffer; -} + finishJSTest(); + }); -function playNote(time, duration, playbackRate) { - var source = context.createBufferSource(); - source.buffer = sinWaveBuffer; - source.playbackRate.value = playbackRate; - - var gainNode = context.createGain(); - source.connect(gainNode); - gainNode.connect(context.destination); - - // Loop and play for the given duration. - source.loop = true; - source.start(time); - source.stop(time + duration); - - // Apply quick fade-in and fade-out to avoid clicks. - gainNode.gain.value = 0; - gainNode.gain.setValueAtTime(0, time); - gainNode.gain.linearRampToValueAtTime(1, time + 0.005); - gainNode.gain.setValueAtTime(1, time + duration - 0.005); - gainNode.gain.linearRampToValueAtTime(0, time + duration); -} - -function init() { - if (!window.testRunner) - return; - - // Create offline audio context. - context = new OfflineAudioContext(2, sampleRate * lengthInSeconds, sampleRate); - - // Create a single cycle of a sine wave. - // We'll loop this to play notes of a given duration, at a given playback rate. - sinWaveBuffer = createOneCycleSinWaveBuffer(440.0, sampleRate); - - // Play 60 notes over a 5 octave range. - for (var i = 0; i < numberOfNotes; ++i) { - var time = i * noteSpacing; - - var semitone = i - numberOfNotes/2; // start three octaves down - - // Convert from semitone to rate. - var playbackRate = Math.pow(2, semitone / 12); - - playNote(time, noteDuration, playbackRate); - } - - context.oncomplete = finishAudioTest; - context.startRendering(); - - testRunner.waitUntilDone(); -} - -</script> - + successfullyParsed = true; + </script> </body> -</html> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/webaudio/audioparam-setTargetAtTime-limit-expected.txt b/third_party/WebKit/LayoutTests/webaudio/audioparam-setTargetAtTime-limit-expected.txt index c306059..52eb0aa5 100644 --- a/third_party/WebKit/LayoutTests/webaudio/audioparam-setTargetAtTime-limit-expected.txt +++ b/third_party/WebKit/LayoutTests/webaudio/audioparam-setTargetAtTime-limit-expected.txt
@@ -3,11 +3,11 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -PASS Initial output of 774 samples for setTargetAtTime(1, 0, 0.001) equals [0,0.02061781866875989,0.04081054289086172,0.0605869371865243,0.07995558537067682,0.09892489427870932,0.11750309741540466,0.13569825852863593,0.15351827510938598,0.17097088181959974,0.18806365384936496,0.20480401020487426,0.22119921692859523,0.23725639025304945,0.25298249968956743,0.2683843710533582,...] with an element-wise tolerance of 2.4273e-7. +PASS Initial output of 774 samples for setTargetAtTime(1, 0, 0.001) equals [0,0.02061781866875989,0.04081054289086172,0.0605869371865243,0.07995558537067682,0.09892489427870932,0.11750309741540466,0.13569825852863593,...] with an element-wise tolerance of 0.000024. PASS Tail output for setTargetAtTime(1, 0, 0.001) contains all the expected values in the correct order: [1]. PASS setTargetAtTime(1, 0, 0.001) had the expected values. -PASS Initial output of 2322 samples for setTargetAtTime(0, 0, 0.001) equals [1,0.9793821813312401,0.9591894571091383,0.9394130628134757,0.9200444146293232,0.9010751057212907,0.8824969025845953,0.8643017414713641,0.846481724890614,0.8290291181804003,0.811936346150635,0.7951959897951257,0.7788007830714048,0.7627436097469505,0.7470175003104326,0.7316156289466418,...] with an element-wise tolerance of 4.747e-8. +PASS Initial output of 2322 samples for setTargetAtTime(0, 0, 0.001) equals [1,0.9793821813312401,0.9591894571091383,0.9394130628134757,0.9200444146293232,0.9010751057212907,0.8824969025845953,0.8643017414713641,...] with an element-wise tolerance of 1.3e-7. PASS Tail output for setTargetAtTime(0, 0, 0.001) contains all the expected values in the correct order: [0]. PASS setTargetAtTime(0, 0, 0.001) had the expected values.
diff --git a/third_party/WebKit/LayoutTests/webaudio/audioparam-setTargetAtTime-limit.html b/third_party/WebKit/LayoutTests/webaudio/audioparam-setTargetAtTime-limit.html index a0d4e6f..402b9be 100644 --- a/third_party/WebKit/LayoutTests/webaudio/audioparam-setTargetAtTime-limit.html +++ b/third_party/WebKit/LayoutTests/webaudio/audioparam-setTargetAtTime-limit.html
@@ -35,7 +35,7 @@ timeConstant: timeConstant, eps: limitThreshold, // Experimentally determined - threshold: 2.4273e-7 + threshold: 2.4e-5 }).then(done); }) @@ -67,7 +67,7 @@ timeConstant: timeConstant, eps: limitThreshold, // Experimentally determined - threshold: 4.7470e-8 + threshold: 1.3e-7 }).then(done); }); @@ -134,7 +134,7 @@ var success = true; success = Should("Initial output of " + tailFrame + " samples for " + message, - actual.slice(0, tailFrame)) + actual.slice(0, tailFrame), { numberOfArrayLog: 8 }) .beCloseToArray(expected.slice(0, tailFrame), options.threshold) && success; success = Should("Tail output for " + message,
diff --git a/third_party/WebKit/LayoutTests/webexposed/element-instance-property-listing-expected.txt b/third_party/WebKit/LayoutTests/webexposed/element-instance-property-listing-expected.txt index 0c54499..488b06b 100644 --- a/third_party/WebKit/LayoutTests/webexposed/element-instance-property-listing-expected.txt +++ b/third_party/WebKit/LayoutTests/webexposed/element-instance-property-listing-expected.txt
@@ -270,6 +270,7 @@ property ping property port property protocol + property referrerpolicy property search property shape property target
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt index 485914b..fa8940d 100644 --- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt +++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
@@ -598,7 +598,6 @@ interface ChannelSplitterNode : AudioNode method constructor interface CharacterData : Node - getter assignedSlot getter data getter length getter nextElementSibling @@ -1615,6 +1614,7 @@ getter ping getter port getter protocol + getter referrerpolicy getter search getter shape getter target @@ -1633,6 +1633,7 @@ setter ping setter port setter protocol + setter referrerpolicy setter search setter shape setter target @@ -5330,6 +5331,7 @@ method getTags method register interface Text : CharacterData + getter assignedSlot getter wholeText method constructor method getDestinationInsertionPoints
diff --git a/third_party/WebKit/PerformanceTests/Events/EventsDispatchingInDeeplyNestedShadowTrees.html b/third_party/WebKit/PerformanceTests/Events/EventsDispatchingInDeeplyNestedShadowTrees.html index bee2ef22..38c8a73 100644 --- a/third_party/WebKit/PerformanceTests/Events/EventsDispatchingInDeeplyNestedShadowTrees.html +++ b/third_party/WebKit/PerformanceTests/Events/EventsDispatchingInDeeplyNestedShadowTrees.html
@@ -6,7 +6,7 @@ <body> <div id="root"><div id="child1"></div><div id="child2"></div></div> <script> -function createTreeOfTrees(root, depth, eachTreeHeight) +function createComposedTree(root, depth, eachTreeHeight) { var node = root; var i; @@ -20,7 +20,7 @@ var child = document.createElement('div'); node.appendChild(child); var shadowRoot = child.createShadowRoot(); - createTreeOfTrees(shadowRoot, depth - 1, eachTreeHeight); + createComposedTree(shadowRoot, depth - 1, eachTreeHeight); } function leftMostLeaf(root) @@ -44,8 +44,8 @@ } var root = document.getElementById('root'); -createTreeOfTrees(document.getElementById('child1'), 50, 20); -createTreeOfTrees(document.getElementById('child2'), 50, 20); +createComposedTree(document.getElementById('child1'), 50, 20); +createComposedTree(document.getElementById('child2'), 50, 20); var leaf1 = leftMostLeaf(root); var leaf2 = rightMostLeaf(root);
diff --git a/third_party/WebKit/PerformanceTests/Events/EventsDispatchingInShadowTrees.html b/third_party/WebKit/PerformanceTests/Events/EventsDispatchingInShadowTrees.html index 3b42efaed..fcaa61a 100644 --- a/third_party/WebKit/PerformanceTests/Events/EventsDispatchingInShadowTrees.html +++ b/third_party/WebKit/PerformanceTests/Events/EventsDispatchingInShadowTrees.html
@@ -6,7 +6,7 @@ <body> <div id="root"></div> <script> -function createTreeOfTrees(root, depth, branch, eachTreeHeight) +function createComposedTree(root, depth, branch, eachTreeHeight) { var node = root; var i; @@ -21,7 +21,7 @@ var child = document.createElement('div'); node.appendChild(child); var shadowRoot = child.createShadowRoot(); - createTreeOfTrees(shadowRoot, depth - 1, branch, eachTreeHeight); + createComposedTree(shadowRoot, depth - 1, branch, eachTreeHeight); } } @@ -46,7 +46,7 @@ } var root = document.getElementById('root'); -createTreeOfTrees(root, 10, 2, 50); +createComposedTree(root, 10, 2, 50); var leaf1 = leftMostLeaf(root); var leaf2 = rightMostLeaf(root);
diff --git a/third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperations.cpp b/third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperations.cpp index 024320b..05b554ea 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperations.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperations.cpp
@@ -6,10 +6,34 @@ #include "bindings/core/v8/ExceptionState.h" #include "bindings/core/v8/ScriptState.h" +#include "bindings/core/v8/ToV8.h" #include "bindings/core/v8/V8ScriptRunner.h" +#include "core/streams/UnderlyingSourceBase.h" namespace blink { +ScriptValue ReadableStreamOperations::createReadableStream(ScriptState* scriptState, UnderlyingSourceBase* underlyingSource, ScriptValue strategy) +{ + ScriptState::Scope scope(scriptState); + + v8::Local<v8::Value> jsUnderlyingSource = toV8(underlyingSource, scriptState); + v8::Local<v8::Value> jsStrategy = strategy.v8Value(); + v8::Local<v8::Value> args[] = { jsUnderlyingSource, jsStrategy }; + v8::Local<v8::Value> jsStream = V8ScriptRunner::callExtraOrCrash(scriptState, "createReadableStreamWithExternalController", args); + + return ScriptValue(scriptState, jsStream); +} + +ScriptValue ReadableStreamOperations::createCountQueuingStrategy(ScriptState* scriptState, size_t highWaterMark) +{ + ScriptState::Scope scope(scriptState); + + v8::Local<v8::Value> args[] = { v8::Number::New(scriptState->isolate(), highWaterMark) }; + v8::Local<v8::Value> jsStrategy = V8ScriptRunner::callExtraOrCrash(scriptState, "createBuiltInCountQueuingStrategy", args); + + return ScriptValue(scriptState, jsStrategy); +} + ScriptValue ReadableStreamOperations::getReader(ScriptState* scriptState, ScriptValue stream, ExceptionState& es) { ASSERT(isReadableStream(scriptState, stream));
diff --git a/third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperations.h b/third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperations.h index 5ff0f429..2a0d064 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperations.h +++ b/third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperations.h
@@ -11,6 +11,7 @@ namespace blink { +class UnderlyingSourceBase; class ExceptionState; class ScriptState; @@ -21,6 +22,14 @@ class CORE_EXPORT ReadableStreamOperations { STATIC_ONLY(ReadableStreamOperations); public: + // createReadableStreamWithExternalController + // If the caller supplies an invalid strategy (e.g. one that returns + // negative sizes, or doesn't have appropriate properties), this will crash. + static ScriptValue createReadableStream(ScriptState*, UnderlyingSourceBase*, ScriptValue strategy); + + // createBuiltInCountQueuingStrategy + static ScriptValue createCountQueuingStrategy(ScriptState*, size_t highWaterMark); + // AcquireReadableStreamReader // This function assumes |isReadableStream(stream)|. // Returns an empty value and throws an error via the ExceptionState when
diff --git a/third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperationsTest.cpp b/third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperationsTest.cpp index 9715147..a76e6d0 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperationsTest.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperationsTest.cpp
@@ -14,6 +14,8 @@ #include "bindings/core/v8/V8IteratorResultValue.h" #include "bindings/core/v8/V8ThrowException.h" #include "core/dom/Document.h" +#include "core/streams/ReadableStreamController.h" +#include "core/streams/UnderlyingSourceBase.h" #include "platform/heap/Handle.h" #include "testing/gtest/include/gtest/gtest.h" #include <v8.h> @@ -110,6 +112,20 @@ Member<Iteration> m_iteration; }; +class TestUnderlyingSource final : public UnderlyingSourceBase { +public: + explicit TestUnderlyingSource(ScriptState* scriptState) + : UnderlyingSourceBase(scriptState) + { + } + + // Just expose the controller methods for easy testing + void enqueue(ScriptValue value) { controller()->enqueue(value); } + void close() { controller()->close(); } + void error(ScriptValue value) { controller()->error(value); } + double desiredSize() { return controller()->desiredSize(); } +}; + class ReadableStreamOperationsTest : public ::testing::Test { public: ReadableStreamOperationsTest() @@ -260,6 +276,63 @@ EXPECT_TRUE(it2->isDone()); } +TEST_F(ReadableStreamOperationsTest, CreateReadableStreamWithCustomUnderlyingSourceAndStrategy) +{ + auto underlyingSource = new TestUnderlyingSource(scriptState()); + + ScriptValue strategy = ReadableStreamOperations::createCountQueuingStrategy(scriptState(), 10); + ASSERT_FALSE(strategy.isEmpty()); + + ScriptValue stream = ReadableStreamOperations::createReadableStream(scriptState(), underlyingSource, strategy); + ASSERT_FALSE(stream.isEmpty()); + + EXPECT_EQ(10, underlyingSource->desiredSize()); + + underlyingSource->enqueue(ScriptValue::from(scriptState(), "a")); + EXPECT_EQ(9, underlyingSource->desiredSize()); + + underlyingSource->enqueue(ScriptValue::from(scriptState(), "b")); + EXPECT_EQ(8, underlyingSource->desiredSize()); + + ScriptValue reader; + { + TrackExceptionState es; + reader = ReadableStreamOperations::getReader(scriptState(), stream, es); + ASSERT_FALSE(es.hadException()); + } + ASSERT_FALSE(reader.isEmpty()); + + Iteration* it1 = new Iteration(); + Iteration* it2 = new Iteration(); + Iteration* it3 = new Iteration(); + ReadableStreamOperations::read(scriptState(), reader).then(Function::createFunction(scriptState(), it1), NotReached::createFunction(scriptState())); + ReadableStreamOperations::read(scriptState(), reader).then(Function::createFunction(scriptState(), it2), NotReached::createFunction(scriptState())); + ReadableStreamOperations::read(scriptState(), reader).then(Function::createFunction(scriptState(), it3), NotReached::createFunction(scriptState())); + + isolate()->RunMicrotasks(); + + EXPECT_EQ(10, underlyingSource->desiredSize()); + + EXPECT_TRUE(it1->isSet()); + EXPECT_TRUE(it1->isValid()); + EXPECT_FALSE(it1->isDone()); + EXPECT_EQ("a", it1->value()); + + EXPECT_TRUE(it2->isSet()); + EXPECT_TRUE(it2->isValid()); + EXPECT_FALSE(it2->isDone()); + EXPECT_EQ("b", it2->value()); + + EXPECT_FALSE(it3->isSet()); + + underlyingSource->close(); + isolate()->RunMicrotasks(); + + EXPECT_TRUE(it3->isSet()); + EXPECT_TRUE(it3->isValid()); + EXPECT_TRUE(it3->isDone()); +} + } // namespace } // namespace blink
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptCallStack.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptCallStack.cpp index 284eae5..1b05e3f 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptCallStack.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptCallStack.cpp
@@ -33,8 +33,8 @@ #include "bindings/core/v8/V8PerIsolateData.h" #include "core/inspector/InspectorInstrumentation.h" #include "core/inspector/ThreadDebugger.h" -#include "core/inspector/v8/V8Debugger.h" -#include "core/inspector/v8/V8StackTrace.h" +#include "core/inspector/v8/public/V8Debugger.h" +#include "core/inspector/v8/public/V8StackTrace.h" #include "platform/ScriptForbiddenScope.h" #include "platform/TracedValue.h"
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptCallStack.h b/third_party/WebKit/Source/bindings/core/v8/ScriptCallStack.h index 5e90910..ef5a879 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptCallStack.h +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptCallStack.h
@@ -33,7 +33,7 @@ #include "core/CoreExport.h" #include "core/InspectorTypeBuilder.h" -#include "core/inspector/v8/V8StackTrace.h" +#include "core/inspector/v8/public/V8StackTrace.h" #include "wtf/Forward.h" #include "wtf/RefCounted.h"
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptController.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptController.cpp index 6ca4b80..5ee9ac43 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptController.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptController.cpp
@@ -61,7 +61,7 @@ #include "core/inspector/ConsoleMessage.h" #include "core/inspector/InspectorInstrumentation.h" #include "core/inspector/InspectorTraceEvents.h" -#include "core/inspector/v8/V8StackTrace.h" +#include "core/inspector/v8/public/V8StackTrace.h" #include "core/loader/DocumentLoader.h" #include "core/loader/FrameLoader.h" #include "core/loader/FrameLoaderClient.h"
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.cpp index dfb64233..bc41b08 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.cpp
@@ -7,8 +7,7 @@ namespace blink { ScriptSourceCode::ScriptSourceCode() - : m_resource(0) - , m_startPosition(TextPosition::minimumPosition()) + : m_startPosition(TextPosition::minimumPosition()) { } @@ -19,7 +18,6 @@ ScriptSourceCode::ScriptSourceCode(const CompressibleString& source, const KURL& url, const TextPosition& startPosition) : m_source(source) - , m_resource(0) , m_url(url) , m_startPosition(startPosition) { @@ -51,6 +49,7 @@ DEFINE_TRACE(ScriptSourceCode) { + visitor->trace(m_resource); visitor->trace(m_streamer); }
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.h b/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.h index 0d4056e..0cc57e4 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.h +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.h
@@ -33,7 +33,6 @@ #include "bindings/core/v8/ScriptStreamer.h" #include "core/CoreExport.h" -#include "core/fetch/ResourcePtr.h" #include "core/fetch/ScriptResource.h" #include "platform/heap/Handle.h" #include "platform/weborigin/KURL.h" @@ -42,9 +41,6 @@ namespace blink { -template <class R> class ResourcePtr; -class ScriptResource; - class CORE_EXPORT ScriptSourceCode final { DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); public: @@ -78,7 +74,7 @@ void treatNullSourceAsEmpty(); CompressibleString m_source; - ResourcePtr<ScriptResource> m_resource; + RefPtrWillBeMember<ScriptResource> m_resource; RefPtrWillBeMember<ScriptStreamer> m_streamer; mutable KURL m_url; TextPosition m_startPosition;
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptState.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptState.cpp index d29d151..5e4a2fe 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptState.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptState.cpp
@@ -8,7 +8,7 @@ #include "core/dom/ExecutionContext.h" #include "core/frame/LocalDOMWindow.h" #include "core/frame/LocalFrame.h" -#include "core/inspector/v8/V8Debugger.h" +#include "core/inspector/v8/public/V8Debugger.h" namespace blink {
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.cpp index 2dc568e..1cf24ad 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.cpp
@@ -577,11 +577,11 @@ notifyFinishedToClient(); } -ScriptStreamer::ScriptStreamer(ScriptResource* resource, Type scriptType, ScriptState* scriptState, v8::ScriptCompiler::CompileOptions compileOptions, WebTaskRunner* loadingTaskRunner) - : m_resource(resource) +ScriptStreamer::ScriptStreamer(PendingScript* script, Type scriptType, ScriptState* scriptState, v8::ScriptCompiler::CompileOptions compileOptions, WebTaskRunner* loadingTaskRunner) + : m_pendingScript(script) + , m_resource(script->resource()) , m_detached(false) , m_stream(0) - , m_client(0) , m_loadingFinished(false) , m_parsingFinished(false) , m_haveEnoughDataForStreaming(false) @@ -600,6 +600,7 @@ DEFINE_TRACE(ScriptStreamer) { + visitor->trace(m_pendingScript); visitor->trace(m_resource); } @@ -642,8 +643,7 @@ if (!isFinished()) return; - if (m_client) - m_client->notifyFinished(m_resource); + m_pendingScript->streamingFinished(); } bool ScriptStreamer::startStreamingInternal(PendingScript* script, Type scriptType, Settings* settings, ScriptState* scriptState, WebTaskRunner* loadingTaskRunner) @@ -679,7 +679,7 @@ // The Resource might go out of scope if the script is no longer // needed. This makes PendingScript notify the ScriptStreamer when it is // destroyed. - script->setStreamer(ScriptStreamer::create(resource, scriptType, scriptState, compileOption, loadingTaskRunner)); + script->setStreamer(ScriptStreamer::create(script, scriptType, scriptState, compileOption, loadingTaskRunner)); return true; }
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.h b/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.h index 784bc80a..251e58d 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.h +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.h
@@ -16,7 +16,6 @@ class PendingScript; class Resource; class ScriptResource; -class ScriptResourceClient; class ScriptState; class Settings; class SourceStream; @@ -38,11 +37,6 @@ Async }; - static PassRefPtrWillBeRawPtr<ScriptStreamer> create(ScriptResource* resource, Type scriptType, ScriptState* scriptState, v8::ScriptCompiler::CompileOptions compileOptions, WebTaskRunner* loadingTaskRunner) - { - return adoptRefWillBeNoop(new ScriptStreamer(resource, scriptType, scriptState, compileOptions, loadingTaskRunner)); - } - ~ScriptStreamer(); DECLARE_TRACE(); @@ -78,19 +72,6 @@ return m_compileOptions; } - void addClient(ScriptResourceClient* client) - { - ASSERT(!m_client); - m_client = client; - notifyFinishedToClient(); - } - - void removeClient(ScriptResourceClient* client) - { - ASSERT(m_client == client); - m_client = 0; - } - // Called by PendingScript when data arrives from the network. void notifyAppendData(ScriptResource*); void notifyFinished(Resource*); @@ -113,13 +94,18 @@ // streamed. Non-const for testing. static size_t s_smallScriptThreshold; - ScriptStreamer(ScriptResource*, Type, ScriptState*, v8::ScriptCompiler::CompileOptions, WebTaskRunner*); + static PassRefPtrWillBeRawPtr<ScriptStreamer> create(PendingScript* script, Type scriptType, ScriptState* scriptState, v8::ScriptCompiler::CompileOptions compileOptions, WebTaskRunner* loadingTaskRunner) + { + return adoptRefWillBeNoop(new ScriptStreamer(script, scriptType, scriptState, compileOptions, loadingTaskRunner)); + } + ScriptStreamer(PendingScript*, Type, ScriptState*, v8::ScriptCompiler::CompileOptions, WebTaskRunner*); void streamingComplete(); void notifyFinishedToClient(); static bool startStreamingInternal(PendingScript*, Type, Settings*, ScriptState*, WebTaskRunner*); + RawPtrWillBeMember<PendingScript> m_pendingScript; // This pointer is weak. If PendingScript and its Resource are deleted // before ScriptStreamer, PendingScript will notify ScriptStreamer of its // deletion by calling cancel(). @@ -131,7 +117,6 @@ SourceStream* m_stream; OwnPtr<v8::ScriptCompiler::StreamedSource> m_source; - ScriptResourceClient* m_client; bool m_loadingFinished; // Whether loading from the network is done. // Whether the V8 side processing is done. Will be used by the main thread // and the streamer thread; guarded by m_mutex.
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptStreamerTest.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptStreamerTest.cpp index 4056578c..1fc8ec2 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptStreamerTest.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptStreamerTest.cpp
@@ -32,7 +32,7 @@ , m_scope(v8::Isolate::GetCurrent()) , m_settings(Settings::create()) , m_resourceRequest("http://www.streaming-test.com/") - , m_resource(new ScriptResource(m_resourceRequest, "UTF-8")) + , m_resource(ScriptResource::create(m_resourceRequest, "UTF-8")) , m_pendingScript(PendingScript::create(0, m_resource.get())) { m_resource->setLoading(true); @@ -89,7 +89,7 @@ // fetch any data outside the test; the test controls the data by calling // ScriptResource::appendData. ResourceRequest m_resourceRequest; - ResourcePtr<ScriptResource> m_resource; + RefPtrWillBePersistent<ScriptResource> m_resource; OwnPtrWillBePersistent<PendingScript> m_pendingScript; }; @@ -191,10 +191,10 @@ // Simulate cancelling the network load (e.g., because the user navigated // away). EXPECT_FALSE(client.finished()); - pendingScript()->stopWatchingForLoad(&client); + pendingScript()->stopWatchingForLoad(); pendingScript()->releaseElementAndClear(); m_pendingScript = nullptr; // This will destroy m_resource. - m_resource = 0; + m_resource = nullptr; // The V8 side will complete too. This should not crash. We don't receive // any results from the streaming and the client doesn't get notified.
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptValue.h b/third_party/WebKit/Source/bindings/core/v8/ScriptValue.h index 539bf11..06b5c25 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptValue.h +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptValue.h
@@ -45,11 +45,9 @@ class CORE_EXPORT ScriptValue final { DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); public: + // Defined in ToV8.h due to circular dependency template<typename T> - static ScriptValue from(ScriptState* scriptState, T value) - { - return ScriptValue(scriptState, toV8(value, scriptState->context()->Global(), scriptState->isolate())); - } + static ScriptValue from(ScriptState*, T&& value); template<typename T, typename... Arguments> static inline T to(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& exceptionState, Arguments const&... arguments)
diff --git a/third_party/WebKit/Source/bindings/core/v8/ToV8.h b/third_party/WebKit/Source/bindings/core/v8/ToV8.h index e211d9c..926cec8 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ToV8.h +++ b/third_party/WebKit/Source/bindings/core/v8/ToV8.h
@@ -262,6 +262,13 @@ // This hack helps detect such unwanted implicit conversions from T* to bool. v8::Local<v8::Value> toV8(void* value, v8::Local<v8::Object> creationContext, v8::Isolate*) = delete; +// Cannot define in ScriptValue because of the circular dependency between toV8 and ScriptValue +template<typename T> +inline ScriptValue ScriptValue::from(ScriptState* scriptState, T&& value) +{ + return ScriptValue(scriptState, toV8(std::forward<T>(value), scriptState)); +} + } // namespace blink #endif // ToV8_h
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8Binding.cpp b/third_party/WebKit/Source/bindings/core/v8/V8Binding.cpp index fda660b6..a8759f4 100644 --- a/third_party/WebKit/Source/bindings/core/v8/V8Binding.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/V8Binding.cpp
@@ -957,14 +957,12 @@ void v8ConstructorAttributeGetter(v8::Local<v8::Name> propertyName, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); v8::Local<v8::Value> data = info.Data(); ASSERT(data->IsExternal()); V8PerContextData* perContextData = V8PerContextData::from(info.Holder()->CreationContext()); if (!perContextData) return; v8SetReturnValue(info, perContextData->constructorForType(WrapperTypeInfo::unwrap(data))); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } } // namespace blink
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp b/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp index f8b4d1a..d2b0dcd 100644 --- a/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp
@@ -267,16 +267,7 @@ void gcPrologueForMajorGC(v8::Isolate* isolate, bool constructRetainedObjectInfos) { - if (isMainThread()) { - { - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "DOMMajorGC"); - objectGroupingForMajorGC(isolate, constructRetainedObjectInfos); - } - V8PerIsolateData::from(isolate)->setPreviousSamplingState(TRACE_EVENT_GET_SAMPLING_STATE()); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8MajorGC"); - } else { - objectGroupingForMajorGC(isolate, constructRetainedObjectInfos); - } + objectGroupingForMajorGC(isolate, constructRetainedObjectInfos); } } // namespace @@ -299,14 +290,7 @@ ThreadState::current()->willStartV8GC(BlinkGC::V8MinorGC); TRACE_EVENT_BEGIN1("devtools.timeline,v8", "MinorGC", "usedHeapSizeBefore", usedHeapSize(isolate)); - if (isMainThread()) { - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "DOMMinorGC"); - } visitWeakHandlesForMinorGC(isolate); - if (isMainThread()) { - V8PerIsolateData::from(isolate)->setPreviousSamplingState(TRACE_EVENT_GET_SAMPLING_STATE()); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8MinorGC"); - } break; case v8::kGCTypeMarkSweepCompact: if (ThreadState::current()) @@ -324,10 +308,6 @@ break; case v8::kGCTypeProcessWeakCallbacks: TRACE_EVENT_BEGIN2("devtools.timeline,v8", "MajorGC", "usedHeapSizeBefore", usedHeapSize(isolate), "type", "weak processing"); - if (isMainThread()) { - V8PerIsolateData::from(isolate)->setPreviousSamplingState(TRACE_EVENT_GET_SAMPLING_STATE()); - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMajorGC"); - } break; default: ASSERT_NOT_REACHED(); @@ -339,32 +319,20 @@ switch (type) { case v8::kGCTypeScavenge: TRACE_EVENT_END1("devtools.timeline,v8", "MinorGC", "usedHeapSizeAfter", usedHeapSize(isolate)); - if (isMainThread()) { - TRACE_EVENT_SET_NONCONST_SAMPLING_STATE(V8PerIsolateData::from(isolate)->previousSamplingState()); - } // TODO(haraken): Remove this. See the comment in gcPrologue. if (ThreadState::current()) ThreadState::current()->scheduleV8FollowupGCIfNeeded(BlinkGC::V8MinorGC); break; case v8::kGCTypeMarkSweepCompact: TRACE_EVENT_END1("devtools.timeline,v8", "MajorGC", "usedHeapSizeAfter", usedHeapSize(isolate)); - if (isMainThread()) { - TRACE_EVENT_SET_NONCONST_SAMPLING_STATE(V8PerIsolateData::from(isolate)->previousSamplingState()); - } if (ThreadState::current()) ThreadState::current()->scheduleV8FollowupGCIfNeeded(BlinkGC::V8MajorGC); break; case v8::kGCTypeIncrementalMarking: TRACE_EVENT_END1("devtools.timeline,v8", "MajorGC", "usedHeapSizeAfter", usedHeapSize(isolate)); - if (isMainThread()) { - TRACE_EVENT_SET_NONCONST_SAMPLING_STATE(V8PerIsolateData::from(isolate)->previousSamplingState()); - } break; case v8::kGCTypeProcessWeakCallbacks: TRACE_EVENT_END1("devtools.timeline,v8", "MajorGC", "usedHeapSizeAfter", usedHeapSize(isolate)); - if (isMainThread()) { - TRACE_EVENT_SET_NONCONST_SAMPLING_STATE(V8PerIsolateData::from(isolate)->previousSamplingState()); - } break; default: ASSERT_NOT_REACHED();
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8PagePopupControllerBinding.cpp b/third_party/WebKit/Source/bindings/core/v8/V8PagePopupControllerBinding.cpp index 615e677a..b2a88bd 100644 --- a/third_party/WebKit/Source/bindings/core/v8/V8PagePopupControllerBinding.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/V8PagePopupControllerBinding.cpp
@@ -27,9 +27,7 @@ void pagePopupControllerAttributeGetterCallback(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); pagePopupControllerAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } } // namespace
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.h b/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.h index 7672a71a..5d709e736 100644 --- a/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.h +++ b/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.h
@@ -111,9 +111,6 @@ v8::Local<v8::Context> ensureScriptRegexpContext(); void clearScriptRegexpContext(); - const char* previousSamplingState() const { return m_previousSamplingState; } - void setPreviousSamplingState(const char* name) { m_previousSamplingState = name; } - // EndOfScopeTasks are run by V8RecursionScope when control is returning // to C++ from script, after executing a script task (e.g. callback, // event) or microtasks (e.g. promise). This is explicitly needed for @@ -143,8 +140,6 @@ ScopedPersistent<v8::Value> m_liveRoot; RefPtr<ScriptState> m_scriptRegexpScriptState; - const char* m_previousSamplingState; - bool m_constructorMode; friend class ConstructorMode;
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8ScriptRunnerTest.cpp b/third_party/WebKit/Source/bindings/core/v8/V8ScriptRunnerTest.cpp index 1cf157a..a974e8bc 100644 --- a/third_party/WebKit/Source/bindings/core/v8/V8ScriptRunnerTest.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/V8ScriptRunnerTest.cpp
@@ -73,13 +73,13 @@ void setEmptyResource() { m_resourceRequest = ResourceRequest(); - m_resource = new ScriptResource(m_resourceRequest, "UTF-8"); + m_resource = ScriptResource::create(m_resourceRequest, "UTF-8"); } void setResource() { m_resourceRequest = ResourceRequest(url()); - m_resource = new ScriptResource(m_resourceRequest, "UTF-8"); + m_resource = ScriptResource::create(m_resourceRequest, "UTF-8"); } CachedMetadataHandler* cacheHandler() @@ -89,7 +89,7 @@ protected: ResourceRequest m_resourceRequest; - ResourcePtr<ScriptResource> m_resource; + RefPtrWillBePersistent<ScriptResource> m_resource; V8TestingScope m_scope; static int counter; @@ -118,7 +118,7 @@ EXPECT_FALSE(cacheHandler()->cachedMetadata(tagForCodeCache(cacheHandler()))); // The cached data is associated with the encoding. ResourceRequest request(url()); - ResourcePtr<ScriptResource> anotherResource = new ScriptResource(request, "UTF-16"); + RefPtrWillBeRawPtr<ScriptResource> anotherResource = ScriptResource::create(request, "UTF-16"); EXPECT_FALSE(cacheHandler()->cachedMetadata(tagForParserCache(anotherResource->cacheHandler()))); } @@ -134,7 +134,7 @@ EXPECT_TRUE(cacheHandler()->cachedMetadata(tagForCodeCache(cacheHandler()))); // The cached data is associated with the encoding. ResourceRequest request(url()); - ResourcePtr<ScriptResource> anotherResource = new ScriptResource(request, "UTF-16"); + RefPtrWillBeRawPtr<ScriptResource> anotherResource = ScriptResource::create(request, "UTF-16"); EXPECT_FALSE(cacheHandler()->cachedMetadata(tagForCodeCache(anotherResource->cacheHandler()))); }
diff --git a/third_party/WebKit/Source/bindings/core/v8/generated.gyp b/third_party/WebKit/Source/bindings/core/v8/generated.gyp index 050d0302..c0607aa 100644 --- a/third_party/WebKit/Source/bindings/core/v8/generated.gyp +++ b/third_party/WebKit/Source/bindings/core/v8/generated.gyp
@@ -29,7 +29,7 @@ 'target_name': 'bindings_core_v8_generated_individual', 'type': 'none', # The 'binding' rule generates .h files, so mark as hard_dependency, per: - # https://code.google.com/p/gyp/wiki/InputFormatReference#Linking_Dependencies + # https://gyp.gsrc.io/docs/InputFormatReference.md#Linking-Dependencies 'hard_dependency': 1, 'dependencies': [ '../../../core/core_generated.gyp:generated_testing_idls',
diff --git a/third_party/WebKit/Source/bindings/modules/v8/generated.gyp b/third_party/WebKit/Source/bindings/modules/v8/generated.gyp index 23a6bd29..7c244119 100644 --- a/third_party/WebKit/Source/bindings/modules/v8/generated.gyp +++ b/third_party/WebKit/Source/bindings/modules/v8/generated.gyp
@@ -26,7 +26,7 @@ 'target_name': 'bindings_modules_v8_generated_individual', 'type': 'none', # The 'binding' rule generates .h files, so mark as hard_dependency, per: - # https://code.google.com/p/gyp/wiki/InputFormatReference#Linking_Dependencies + # https://gyp.gsrc.io/docs/InputFormatReference.md#Linking-Dependencies 'hard_dependency': 1, 'dependencies': [ '../../core/generated.gyp:core_global_constructors_idls', @@ -172,7 +172,7 @@ 'target_name': 'bindings_modules_v8_generated_partial_individual', 'type': 'none', # The 'partial_binding' rule generates .h files, so mark as hard_dependency, per: - # https://code.google.com/p/gyp/wiki/InputFormatReference#Linking_Dependencies + # https://gyp.gsrc.io/docs/InputFormatReference.md#Linking-Dependencies 'hard_dependency': 1, 'dependencies': [ '../../core/generated.gyp:core_global_constructors_idls',
diff --git a/third_party/WebKit/Source/bindings/templates/attributes.cpp b/third_party/WebKit/Source/bindings/templates/attributes.cpp index 4a9df1d..190b3a5 100644 --- a/third_party/WebKit/Source/bindings/templates/attributes.cpp +++ b/third_party/WebKit/Source/bindings/templates/attributes.cpp
@@ -170,7 +170,6 @@ const v8::FunctionCallbackInfo<v8::Value>& info {%- endif %}) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); {% if attribute.deprecate_as %} UseCounter::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::{{attribute.deprecate_as}}); {% endif %} @@ -195,7 +194,6 @@ {% else %} {{cpp_class_or_partial}}V8Internal::{{attribute.name}}AttributeGetter{{world_suffix}}(info); {% endif %} - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } {% endmacro %} @@ -204,7 +202,6 @@ {% macro constructor_getter_callback(attribute, world_suffix) %} static void {{attribute.name}}ConstructorGetterCallback{{world_suffix}}(v8::Local<v8::Name> property, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); {% if attribute.deprecate_as %} UseCounter::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::{{attribute.deprecate_as}}); {% endif %} @@ -215,7 +212,6 @@ {{check_api_experiment(attribute) | indent}} {% endif %} v8ConstructorAttributeGetter(property, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } {% endmacro %} @@ -365,7 +361,6 @@ {% if not attribute.is_data_type_property %} v8::Local<v8::Value> v8Value = info[0]; {% endif %} - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); {% if attribute.deprecate_as %} UseCounter::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::{{attribute.deprecate_as}}); {% endif %} @@ -391,7 +386,6 @@ {% else %} {{cpp_class_or_partial}}V8Internal::{{attribute.name}}AttributeSetter{{world_suffix}}(v8Value, info); {% endif %} - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } {% endmacro %}
diff --git a/third_party/WebKit/Source/bindings/templates/constants.cpp b/third_party/WebKit/Source/bindings/templates/constants.cpp index 8814b25..06b8ae7 100644 --- a/third_party/WebKit/Source/bindings/templates/constants.cpp +++ b/third_party/WebKit/Source/bindings/templates/constants.cpp
@@ -4,7 +4,6 @@ {% macro constant_getter_callback(constant) %} static void {{constant.name}}ConstantGetterCallback(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); {% if constant.deprecate_as %} UseCounter::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::{{constant.deprecate_as}}); {% endif %} @@ -21,7 +20,6 @@ {% else %} v8SetReturnValueInt(info, {{constant.value}}); {% endif %} - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } {% endmacro %}
diff --git a/third_party/WebKit/Source/bindings/templates/interface.cpp b/third_party/WebKit/Source/bindings/templates/interface.cpp index 01c71ef4ef3..344b798b 100644 --- a/third_party/WebKit/Source/bindings/templates/interface.cpp +++ b/third_party/WebKit/Source/bindings/templates/interface.cpp
@@ -40,13 +40,11 @@ {% set getter = indexed_property_getter %} static void indexedPropertyGetterCallback(uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); {% if getter.is_custom %} {{v8_class}}::indexedPropertyGetterCustom(index, info); {% else %} {{cpp_class}}V8Internal::indexedPropertyGetter(index, info); {% endif %} - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } {% endif %} @@ -103,13 +101,11 @@ {% set setter = indexed_property_setter %} static void indexedPropertySetterCallback(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); {% if setter.is_custom %} {{v8_class}}::indexedPropertySetterCustom(index, v8Value, info); {% else %} {{cpp_class}}V8Internal::indexedPropertySetter(index, v8Value, info); {% endif %} - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } {% endif %} @@ -154,13 +150,11 @@ {% set deleter = indexed_property_deleter %} static void indexedPropertyDeleterCallback(uint32_t index, const v8::PropertyCallbackInfo<v8::Boolean>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); {% if deleter.is_custom %} {{v8_class}}::indexedPropertyDeleterCustom(index, info); {% else %} {{cpp_class}}V8Internal::indexedPropertyDeleter(index, info); {% endif %} - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } {% endif %} @@ -208,13 +202,11 @@ {% set getter = named_property_getter %} static void namedPropertyGetterCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); {% if getter.is_custom %} {{v8_class}}::namedPropertyGetterCustom(name, info); {% else %} {{cpp_class}}V8Internal::namedPropertyGetter(name, info); {% endif %} - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } {% endif %} @@ -279,13 +271,11 @@ {% set setter = named_property_setter %} static void namedPropertySetterCallback(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); {% if setter.is_custom %} {{v8_class}}::namedPropertySetterCustom(name, v8Value, info); {% else %} {{cpp_class}}V8Internal::namedPropertySetter(name, v8Value, info); {% endif %} - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } {% endif %} @@ -328,13 +318,11 @@ {% set getter = named_property_getter %} static void namedPropertyQueryCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Integer>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); {% if getter.is_custom_property_query %} {{v8_class}}::namedPropertyQueryCustom(name, info); {% else %} {{cpp_class}}V8Internal::namedPropertyQuery(name, info); {% endif %} - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } {% endif %} @@ -383,13 +371,11 @@ {% set deleter = named_property_deleter %} static void namedPropertyDeleterCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Boolean>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); {% if deleter.is_custom %} {{v8_class}}::namedPropertyDeleterCustom(name, info); {% else %} {{cpp_class}}V8Internal::namedPropertyDeleter(name, info); {% endif %} - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } {% endif %} @@ -426,13 +412,11 @@ {% set getter = named_property_getter %} static void namedPropertyEnumeratorCallback(const v8::PropertyCallbackInfo<v8::Array>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); {% if getter.is_custom_property_enumerator %} {{v8_class}}::namedPropertyEnumeratorCustom(info); {% else %} {{cpp_class}}V8Internal::namedPropertyEnumerator(info); {% endif %} - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } {% endif %} @@ -461,9 +445,7 @@ static void {{cpp_class}}OriginSafeMethodSetterCallback(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); {{cpp_class}}V8Internal::{{cpp_class}}OriginSafeMethodSetter(name, v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } {% endif %} @@ -496,7 +478,6 @@ if (!result.IsEmpty()) return result; - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "BuildDOMTemplate"); result = v8::FunctionTemplate::New(isolate, {{v8_class}}ConstructorCallback); v8::Local<v8::ObjectTemplate> instanceTemplate = result->InstanceTemplate(); instanceTemplate->SetInternalFieldCount({{v8_class}}::internalFieldCount); @@ -588,7 +569,6 @@ {% if constructors or has_custom_constructor or has_event_constructor %} void {{v8_class}}::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "DOMConstructor"); {% if measure_as %} UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::{{measure_as('Constructor')}}); {% endif %}
diff --git a/third_party/WebKit/Source/bindings/templates/interface_base.cpp b/third_party/WebKit/Source/bindings/templates/interface_base.cpp index b5f5649..f890f49 100644 --- a/third_party/WebKit/Source/bindings/templates/interface_base.cpp +++ b/third_party/WebKit/Source/bindings/templates/interface_base.cpp
@@ -73,7 +73,6 @@ {% if needs_constructor_setter_callback %} static void {{cpp_class}}ConstructorAttributeSetterCallback(v8::Local<v8::Name>, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); do { v8::Local<v8::Value> data = info.Data(); ASSERT(data->IsExternal()); @@ -85,7 +84,6 @@ break; {{cpp_class}}CreateDataProperty(v8String(info.GetIsolate(), wrapperTypeInfo->interfaceName), v8Value, info); } while (false); // do ... while (false) just for use of break - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } {% endif %}
diff --git a/third_party/WebKit/Source/bindings/templates/methods.cpp b/third_party/WebKit/Source/bindings/templates/methods.cpp index ae4d90c6..9635de42 100644 --- a/third_party/WebKit/Source/bindings/templates/methods.cpp +++ b/third_party/WebKit/Source/bindings/templates/methods.cpp
@@ -499,7 +499,6 @@ {% macro method_callback(method, world_suffix) %} static void {{method.name}}MethodCallback{{world_suffix}}(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); {% if not method.overloads %}{# Overloaded methods are measured in overload_resolution_method() #} {% if method.measure_as %} UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::{{method.measure_as('Method')}}); @@ -531,7 +530,6 @@ {% else %} {{cpp_class_or_partial}}V8Internal::{{method.name}}Method{{world_suffix}}(info); {% endif %} - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } {% endmacro %} @@ -573,9 +571,7 @@ static void {{method.name}}OriginSafeMethodGetterCallback{{world_suffix}}(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); {{cpp_class}}V8Internal::{{method.name}}OriginSafeMethodGetter{{world_suffix}}(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } {% endmacro %}
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp index 6990df2..56afd4c 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp
@@ -47,9 +47,7 @@ static void typeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); SVGTestInterfaceV8Internal::typeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void typeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -66,10 +64,8 @@ static void typeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; SVGTestInterfaceV8Internal::typeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } } // namespace SVGTestInterfaceV8Internal
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp index 5a69ffff1..e491557 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp
@@ -46,9 +46,7 @@ static void readonlyUnsignedShortAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestExceptionV8Internal::readonlyUnsignedShortAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void readonlyStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -60,9 +58,7 @@ static void readonlyStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestExceptionV8Internal::readonlyStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void toStringMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -73,9 +69,7 @@ static void toStringMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestExceptionV8Internal::toStringMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void constructor(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -111,7 +105,6 @@ void V8TestException::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "DOMConstructor"); if (!info.IsConstructCall()) { V8ThrowException::throwTypeError(info.GetIsolate(), ExceptionMessages::constructorNotCallableAsFunction("TestException")); return;
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp index 14c65de8..d0a12d0 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp
@@ -47,9 +47,7 @@ static void lengthAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestIntegerIndexedV8Internal::lengthAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void lengthAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -66,9 +64,7 @@ static void lengthAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestIntegerIndexedV8Internal::lengthAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDocumentMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -91,65 +87,47 @@ static void voidMethodDocumentMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestIntegerIndexedV8Internal::voidMethodDocumentMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertyGetterCallback(uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); V8TestIntegerIndexed::indexedPropertyGetterCustom(index, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertySetterCallback(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); V8TestIntegerIndexed::indexedPropertySetterCustom(index, v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertyDeleterCallback(uint32_t index, const v8::PropertyCallbackInfo<v8::Boolean>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); V8TestIntegerIndexed::indexedPropertyDeleterCustom(index, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyGetterCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); V8TestIntegerIndexed::namedPropertyGetterCustom(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertySetterCallback(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); V8TestIntegerIndexed::namedPropertySetterCustom(name, v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyQueryCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Integer>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); V8TestIntegerIndexed::namedPropertyQueryCustom(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyDeleterCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Boolean>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); V8TestIntegerIndexed::namedPropertyDeleterCustom(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyEnumeratorCallback(const v8::PropertyCallbackInfo<v8::Array>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); V8TestIntegerIndexed::namedPropertyEnumeratorCustom(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } } // namespace TestIntegerIndexedV8Internal
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp index d7e8fe86..072d0f3b 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp
@@ -47,9 +47,7 @@ static void lengthAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestIntegerIndexedGlobalV8Internal::lengthAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void lengthAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -66,9 +64,7 @@ static void lengthAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestIntegerIndexedGlobalV8Internal::lengthAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDocumentMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -91,65 +87,47 @@ static void voidMethodDocumentMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestIntegerIndexedGlobalV8Internal::voidMethodDocumentMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertyGetterCallback(uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); V8TestIntegerIndexedGlobal::indexedPropertyGetterCustom(index, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertySetterCallback(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); V8TestIntegerIndexedGlobal::indexedPropertySetterCustom(index, v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertyDeleterCallback(uint32_t index, const v8::PropertyCallbackInfo<v8::Boolean>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); V8TestIntegerIndexedGlobal::indexedPropertyDeleterCustom(index, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyGetterCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); V8TestIntegerIndexedGlobal::namedPropertyGetterCustom(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertySetterCallback(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); V8TestIntegerIndexedGlobal::namedPropertySetterCustom(name, v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyQueryCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Integer>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); V8TestIntegerIndexedGlobal::namedPropertyQueryCustom(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyDeleterCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Boolean>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); V8TestIntegerIndexedGlobal::namedPropertyDeleterCustom(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyEnumeratorCallback(const v8::PropertyCallbackInfo<v8::Array>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); V8TestIntegerIndexedGlobal::namedPropertyEnumeratorCustom(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } } // namespace TestIntegerIndexedGlobalV8Internal
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp index 9bbd0c2..fbe76861 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp
@@ -47,9 +47,7 @@ static void lengthAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestIntegerIndexedPrimaryGlobalV8Internal::lengthAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void lengthAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -66,9 +64,7 @@ static void lengthAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestIntegerIndexedPrimaryGlobalV8Internal::lengthAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDocumentMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -91,65 +87,47 @@ static void voidMethodDocumentMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestIntegerIndexedPrimaryGlobalV8Internal::voidMethodDocumentMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertyGetterCallback(uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); V8TestIntegerIndexedPrimaryGlobal::indexedPropertyGetterCustom(index, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertySetterCallback(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); V8TestIntegerIndexedPrimaryGlobal::indexedPropertySetterCustom(index, v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertyDeleterCallback(uint32_t index, const v8::PropertyCallbackInfo<v8::Boolean>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); V8TestIntegerIndexedPrimaryGlobal::indexedPropertyDeleterCustom(index, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyGetterCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); V8TestIntegerIndexedPrimaryGlobal::namedPropertyGetterCustom(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertySetterCallback(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); V8TestIntegerIndexedPrimaryGlobal::namedPropertySetterCustom(name, v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyQueryCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Integer>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); V8TestIntegerIndexedPrimaryGlobal::namedPropertyQueryCustom(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyDeleterCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Boolean>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); V8TestIntegerIndexedPrimaryGlobal::namedPropertyDeleterCustom(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyEnumeratorCallback(const v8::PropertyCallbackInfo<v8::Array>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); V8TestIntegerIndexedPrimaryGlobal::namedPropertyEnumeratorCustom(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } } // namespace TestIntegerIndexedPrimaryGlobalV8Internal
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp index dda3329b..a210e1a 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp
@@ -74,7 +74,6 @@ static void TestInterfaceImplementationConstructorAttributeSetterCallback(v8::Local<v8::Name>, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); do { v8::Local<v8::Value> data = info.Data(); ASSERT(data->IsExternal()); @@ -86,7 +85,6 @@ break; TestInterfaceImplementationCreateDataProperty(v8String(info.GetIsolate(), wrapperTypeInfo->interfaceName), v8Value, info); } while (false); // do ... while (false) just for use of break - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -107,7 +105,6 @@ static void testInterfaceAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::V8TestInterface_TestInterfaceAttribute_AttributeGetter); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; @@ -119,7 +116,6 @@ return; } TestInterfaceImplementationV8Internal::testInterfaceAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -139,10 +135,8 @@ static void testInterfaceAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::V8TestInterface_TestInterfaceAttribute_AttributeSetter); TestInterfaceImplementationV8Internal::testInterfaceAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceConstructorAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) @@ -153,9 +147,7 @@ static void testInterfaceConstructorAttributeAttributeSetterCallback(v8::Local<v8::Name>, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::testInterfaceConstructorAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doubleAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -176,7 +168,6 @@ static void doubleAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -187,7 +178,6 @@ return; } TestInterfaceImplementationV8Internal::doubleAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doubleAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -204,9 +194,7 @@ static void doubleAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::doubleAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void floatAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -227,7 +215,6 @@ static void floatAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -238,7 +225,6 @@ return; } TestInterfaceImplementationV8Internal::floatAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void floatAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -255,9 +241,7 @@ static void floatAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::floatAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unrestrictedDoubleAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -278,7 +262,6 @@ static void unrestrictedDoubleAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -289,7 +272,6 @@ return; } TestInterfaceImplementationV8Internal::unrestrictedDoubleAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unrestrictedDoubleAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -306,9 +288,7 @@ static void unrestrictedDoubleAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::unrestrictedDoubleAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unrestrictedFloatAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -329,7 +309,6 @@ static void unrestrictedFloatAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -340,7 +319,6 @@ return; } TestInterfaceImplementationV8Internal::unrestrictedFloatAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unrestrictedFloatAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -357,9 +335,7 @@ static void unrestrictedFloatAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::unrestrictedFloatAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testEnumAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -380,7 +356,6 @@ static void testEnumAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -391,7 +366,6 @@ return; } TestInterfaceImplementationV8Internal::testEnumAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testEnumAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -418,9 +392,7 @@ static void testEnumAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::testEnumAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringOrDoubleAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -443,7 +415,6 @@ static void stringOrDoubleAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -454,7 +425,6 @@ return; } TestInterfaceImplementationV8Internal::stringOrDoubleAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringOrDoubleAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -472,9 +442,7 @@ static void stringOrDoubleAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::stringOrDoubleAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void conditionalLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -495,7 +463,6 @@ static void conditionalLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -506,7 +473,6 @@ return; } TestInterfaceImplementationV8Internal::conditionalLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void conditionalLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -523,9 +489,7 @@ static void conditionalLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::conditionalLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void conditionalReadOnlyLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -546,7 +510,6 @@ static void conditionalReadOnlyLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -557,7 +520,6 @@ return; } TestInterfaceImplementationV8Internal::conditionalReadOnlyLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void staticStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -576,7 +538,6 @@ static void staticStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -587,7 +548,6 @@ return; } TestInterfaceImplementationV8Internal::staticStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void staticStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -601,9 +561,7 @@ static void staticStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::staticStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void staticReturnDOMWrapperAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -622,7 +580,6 @@ static void staticReturnDOMWrapperAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -633,7 +590,6 @@ return; } TestInterfaceImplementationV8Internal::staticReturnDOMWrapperAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void staticReturnDOMWrapperAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -652,9 +608,7 @@ static void staticReturnDOMWrapperAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::staticReturnDOMWrapperAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void staticReadOnlyStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -673,7 +627,6 @@ static void staticReadOnlyStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -684,7 +637,6 @@ return; } TestInterfaceImplementationV8Internal::staticReadOnlyStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void staticReadOnlyReturnDOMWrapperAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -710,7 +662,6 @@ static void staticReadOnlyReturnDOMWrapperAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -721,7 +672,6 @@ return; } TestInterfaceImplementationV8Internal::staticReadOnlyReturnDOMWrapperAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void staticConditionalReadOnlyLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -740,7 +690,6 @@ static void staticConditionalReadOnlyLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -751,7 +700,6 @@ return; } TestInterfaceImplementationV8Internal::staticConditionalReadOnlyLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void legacyInterfaceTypeCheckingAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -772,7 +720,6 @@ static void legacyInterfaceTypeCheckingAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -783,7 +730,6 @@ return; } TestInterfaceImplementationV8Internal::legacyInterfaceTypeCheckingAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void legacyInterfaceTypeCheckingAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -797,9 +743,7 @@ static void legacyInterfaceTypeCheckingAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::legacyInterfaceTypeCheckingAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void alwaysExposedAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -820,7 +764,6 @@ static void alwaysExposedAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -831,7 +774,6 @@ return; } TestInterfaceImplementationV8Internal::alwaysExposedAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void alwaysExposedAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -848,9 +790,7 @@ static void alwaysExposedAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::alwaysExposedAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void workerExposedAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -871,7 +811,6 @@ static void workerExposedAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -882,7 +821,6 @@ return; } TestInterfaceImplementationV8Internal::workerExposedAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void workerExposedAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -899,9 +837,7 @@ static void workerExposedAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::workerExposedAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void windowExposedAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -922,7 +858,6 @@ static void windowExposedAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -933,7 +868,6 @@ return; } TestInterfaceImplementationV8Internal::windowExposedAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void windowExposedAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -950,9 +884,7 @@ static void windowExposedAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::windowExposedAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void lenientThisAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -975,7 +907,6 @@ static void lenientThisAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -986,7 +917,6 @@ return; } TestInterfaceImplementationV8Internal::lenientThisAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void lenientThisAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1002,9 +932,7 @@ static void lenientThisAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::lenientThisAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implementsStaticReadOnlyLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1023,7 +951,6 @@ static void implementsStaticReadOnlyLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1034,7 +961,6 @@ return; } TestInterfaceImplementationV8Internal::implementsStaticReadOnlyLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implementsStaticStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1053,7 +979,6 @@ static void implementsStaticStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1064,7 +989,6 @@ return; } TestInterfaceImplementationV8Internal::implementsStaticStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implementsStaticStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1078,9 +1002,7 @@ static void implementsStaticStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::implementsStaticStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implementsReadonlyStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1101,7 +1023,6 @@ static void implementsReadonlyStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1112,7 +1033,6 @@ return; } TestInterfaceImplementationV8Internal::implementsReadonlyStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implementsStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1133,7 +1053,6 @@ static void implementsStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1144,7 +1063,6 @@ return; } TestInterfaceImplementationV8Internal::implementsStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implementsStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1160,9 +1078,7 @@ static void implementsStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::implementsStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implementsNodeAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1183,7 +1099,6 @@ static void implementsNodeAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1194,7 +1109,6 @@ return; } TestInterfaceImplementationV8Internal::implementsNodeAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implementsNodeAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1214,9 +1128,7 @@ static void implementsNodeAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::implementsNodeAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implementsEventHandlerAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1238,7 +1150,6 @@ static void implementsEventHandlerAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1249,7 +1160,6 @@ return; } TestInterfaceImplementationV8Internal::implementsEventHandlerAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implementsEventHandlerAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1263,9 +1173,7 @@ static void implementsEventHandlerAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::implementsEventHandlerAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implementsRuntimeEnabledNodeAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1286,7 +1194,6 @@ static void implementsRuntimeEnabledNodeAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1297,7 +1204,6 @@ return; } TestInterfaceImplementationV8Internal::implementsRuntimeEnabledNodeAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implementsRuntimeEnabledNodeAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1317,9 +1223,7 @@ static void implementsRuntimeEnabledNodeAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::implementsRuntimeEnabledNodeAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implements2StaticStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1338,7 +1242,6 @@ static void implements2StaticStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1349,7 +1252,6 @@ return; } TestInterfaceImplementationV8Internal::implements2StaticStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implements2StaticStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1363,9 +1265,7 @@ static void implements2StaticStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::implements2StaticStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implements2StringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1386,7 +1286,6 @@ static void implements2StringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1397,7 +1296,6 @@ return; } TestInterfaceImplementationV8Internal::implements2StringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implements2StringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1413,9 +1311,7 @@ static void implements2StringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::implements2StringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implements3StringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1436,7 +1332,6 @@ static void implements3StringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1447,7 +1342,6 @@ return; } TestInterfaceImplementationV8Internal::implements3StringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implements3StringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1463,9 +1357,7 @@ static void implements3StringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::implements3StringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implements3StaticStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1484,7 +1376,6 @@ static void implements3StaticStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1495,7 +1386,6 @@ return; } TestInterfaceImplementationV8Internal::implements3StaticStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implements3StaticStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1509,9 +1399,7 @@ static void implements3StaticStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::implements3StaticStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partialLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1532,7 +1420,6 @@ static void partialLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1543,7 +1430,6 @@ return; } TestInterfaceImplementationV8Internal::partialLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partialLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1560,9 +1446,7 @@ static void partialLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::partialLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partialStaticLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1581,7 +1465,6 @@ static void partialStaticLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1592,7 +1475,6 @@ return; } TestInterfaceImplementationV8Internal::partialStaticLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partialStaticLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1608,9 +1490,7 @@ static void partialStaticLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::partialStaticLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partialCallWithExecutionContextLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1632,7 +1512,6 @@ static void partialCallWithExecutionContextLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1643,7 +1522,6 @@ return; } TestInterfaceImplementationV8Internal::partialCallWithExecutionContextLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partialCallWithExecutionContextLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1661,9 +1539,7 @@ static void partialCallWithExecutionContextLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::partialCallWithExecutionContextLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partialPartialEnumTypeAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1684,7 +1560,6 @@ static void partialPartialEnumTypeAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1695,7 +1570,6 @@ return; } TestInterfaceImplementationV8Internal::partialPartialEnumTypeAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partialPartialEnumTypeAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1720,9 +1594,7 @@ static void partialPartialEnumTypeAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::partialPartialEnumTypeAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1746,7 +1618,6 @@ static void stringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1757,7 +1628,6 @@ return; } TestInterfaceImplementationV8Internal::stringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1773,9 +1643,7 @@ static void stringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::stringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partial2LongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1796,7 +1664,6 @@ static void partial2LongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1807,7 +1674,6 @@ return; } TestInterfaceImplementationV8Internal::partial2LongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partial2LongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1824,9 +1690,7 @@ static void partial2LongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::partial2LongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partial2StaticLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1845,7 +1709,6 @@ static void partial2StaticLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1856,7 +1719,6 @@ return; } TestInterfaceImplementationV8Internal::partial2StaticLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partial2StaticLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1872,9 +1734,7 @@ static void partial2StaticLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceImplementationV8Internal::partial2StaticLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodTestInterfaceEmptyArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1897,7 +1757,6 @@ static void voidMethodTestInterfaceEmptyArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1908,7 +1767,6 @@ return; } TestInterfaceImplementationV8Internal::voidMethodTestInterfaceEmptyArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDoubleArgFloatArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1935,7 +1793,6 @@ static void voidMethodDoubleArgFloatArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1946,7 +1803,6 @@ return; } TestInterfaceImplementationV8Internal::voidMethodDoubleArgFloatArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodUnrestrictedDoubleArgUnrestrictedFloatArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1973,7 +1829,6 @@ static void voidMethodUnrestrictedDoubleArgUnrestrictedFloatArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -1984,7 +1839,6 @@ return; } TestInterfaceImplementationV8Internal::voidMethodUnrestrictedDoubleArgUnrestrictedFloatArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodTestEnumArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2017,7 +1871,6 @@ static void voidMethodTestEnumArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2028,7 +1881,6 @@ return; } TestInterfaceImplementationV8Internal::voidMethodTestEnumArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2039,7 +1891,6 @@ static void voidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2050,7 +1901,6 @@ return; } TestInterfaceImplementationV8Internal::voidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodMethodForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2061,7 +1911,6 @@ static void voidMethodMethodCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2072,7 +1921,6 @@ return; } TestInterfaceImplementationV8Internal::voidMethodMethodForMainWorld(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void alwaysExposedMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2083,7 +1931,6 @@ static void alwaysExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2094,7 +1941,6 @@ return; } TestInterfaceImplementationV8Internal::alwaysExposedMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void workerExposedMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2105,7 +1951,6 @@ static void workerExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2116,7 +1961,6 @@ return; } TestInterfaceImplementationV8Internal::workerExposedMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void windowExposedMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2127,7 +1971,6 @@ static void windowExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2138,7 +1981,6 @@ return; } TestInterfaceImplementationV8Internal::windowExposedMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void alwaysExposedStaticMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2148,7 +1990,6 @@ static void alwaysExposedStaticMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2159,7 +2000,6 @@ return; } TestInterfaceImplementationV8Internal::alwaysExposedStaticMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void workerExposedStaticMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2169,7 +2009,6 @@ static void workerExposedStaticMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2180,7 +2019,6 @@ return; } TestInterfaceImplementationV8Internal::workerExposedStaticMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void windowExposedStaticMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2190,7 +2028,6 @@ static void windowExposedStaticMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2201,7 +2038,6 @@ return; } TestInterfaceImplementationV8Internal::windowExposedStaticMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void staticReturnDOMWrapperMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2211,7 +2047,6 @@ static void staticReturnDOMWrapperMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2222,7 +2057,6 @@ return; } TestInterfaceImplementationV8Internal::staticReturnDOMWrapperMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void methodWithExposedAndRuntimeEnabledFlagMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2233,7 +2067,6 @@ static void methodWithExposedAndRuntimeEnabledFlagMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2244,7 +2077,6 @@ return; } TestInterfaceImplementationV8Internal::methodWithExposedAndRuntimeEnabledFlagMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void overloadMethodWithExposedAndRuntimeEnabledFlag1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2327,9 +2159,7 @@ static void overloadMethodWithExposedAndRuntimeEnabledFlagMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceImplementationV8Internal::overloadMethodWithExposedAndRuntimeEnabledFlagMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void methodWithExposedHavingRuntimeEnabldFlagMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2340,7 +2170,6 @@ static void methodWithExposedHavingRuntimeEnabldFlagMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2351,7 +2180,6 @@ return; } TestInterfaceImplementationV8Internal::methodWithExposedHavingRuntimeEnabldFlagMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void windowAndServiceWorkerExposedMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2362,7 +2190,6 @@ static void windowAndServiceWorkerExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2373,7 +2200,6 @@ return; } TestInterfaceImplementationV8Internal::windowAndServiceWorkerExposedMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodPartialOverload1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2441,7 +2267,6 @@ static void legacyInterfaceTypeCheckingMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2452,7 +2277,6 @@ return; } TestInterfaceImplementationV8Internal::legacyInterfaceTypeCheckingMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implementsVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2463,7 +2287,6 @@ static void implementsVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2474,7 +2297,6 @@ return; } TestInterfaceImplementationV8Internal::implementsVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implementsComplexMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2510,7 +2332,6 @@ static void implementsComplexMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2521,12 +2342,10 @@ return; } TestInterfaceImplementationV8Internal::implementsComplexMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implementsCustomVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2537,7 +2356,6 @@ return; } V8TestInterface::implementsCustomVoidMethodMethodCustom(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implementsStaticVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2547,7 +2365,6 @@ static void implementsStaticVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2558,7 +2375,6 @@ return; } TestInterfaceImplementationV8Internal::implementsStaticVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implements2VoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2569,7 +2385,6 @@ static void implements2VoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2580,7 +2395,6 @@ return; } TestInterfaceImplementationV8Internal::implements2VoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implements3VoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2591,7 +2405,6 @@ static void implements3VoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2602,7 +2415,6 @@ return; } TestInterfaceImplementationV8Internal::implements3VoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implements3StaticVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2612,7 +2424,6 @@ static void implements3StaticVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2623,7 +2434,6 @@ return; } TestInterfaceImplementationV8Internal::implements3StaticVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partialVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2634,7 +2444,6 @@ static void partialVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2645,7 +2454,6 @@ return; } TestInterfaceImplementationV8Internal::partialVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partialStaticVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2655,7 +2463,6 @@ static void partialStaticVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2666,7 +2473,6 @@ return; } TestInterfaceImplementationV8Internal::partialStaticVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partialVoidMethodLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2689,7 +2495,6 @@ static void partialVoidMethodLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2700,7 +2505,6 @@ return; } TestInterfaceImplementationV8Internal::partialVoidMethodLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partialCallWithExecutionContextRaisesExceptionVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2717,7 +2521,6 @@ static void partialCallWithExecutionContextRaisesExceptionVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2728,7 +2531,6 @@ return; } TestInterfaceImplementationV8Internal::partialCallWithExecutionContextRaisesExceptionVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partialVoidMethodPartialCallbackTypeArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2751,7 +2553,6 @@ static void partialVoidMethodPartialCallbackTypeArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2762,7 +2563,6 @@ return; } TestInterfaceImplementationV8Internal::partialVoidMethodPartialCallbackTypeArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void shortMethodWithShortArgumentImplementedInPrivateScriptMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2788,7 +2588,6 @@ static void shortMethodWithShortArgumentImplementedInPrivateScriptMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2799,7 +2598,6 @@ return; } TestInterfaceImplementationV8Internal::shortMethodWithShortArgumentImplementedInPrivateScriptMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partial2VoidMethod1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2840,9 +2638,7 @@ static void voidMethodPartialOverloadMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceImplementationV8Internal::voidMethodPartialOverloadMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void staticVoidMethodPartialOverloadMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2864,9 +2660,7 @@ static void staticVoidMethodPartialOverloadMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceImplementationV8Internal::staticVoidMethodPartialOverloadMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void promiseMethodPartialOverloadMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2892,9 +2686,7 @@ static void promiseMethodPartialOverloadMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceImplementationV8Internal::promiseMethodPartialOverloadMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void staticPromiseMethodPartialOverloadMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2916,9 +2708,7 @@ static void staticPromiseMethodPartialOverloadMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceImplementationV8Internal::staticPromiseMethodPartialOverloadMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partial2VoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2940,9 +2730,7 @@ static void partial2VoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceImplementationV8Internal::partial2VoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partial2StaticVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2964,9 +2752,7 @@ static void partial2StaticVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceImplementationV8Internal::partial2StaticVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void toJSONMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2984,7 +2770,6 @@ static void toJSONMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -2995,7 +2780,6 @@ return; } TestInterfaceImplementationV8Internal::toJSONMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void toStringMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3006,7 +2790,6 @@ static void toStringMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -3017,7 +2800,6 @@ return; } TestInterfaceImplementationV8Internal::toStringMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void iteratorMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3035,7 +2817,6 @@ static void iteratorMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -3046,7 +2827,6 @@ return; } TestInterfaceImplementationV8Internal::iteratorMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertyGetter(uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) @@ -3060,9 +2840,7 @@ static void indexedPropertyGetterCallback(uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); TestInterfaceImplementationV8Internal::indexedPropertyGetter(index, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertySetter(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) @@ -3079,9 +2857,7 @@ static void indexedPropertySetterCallback(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); TestInterfaceImplementationV8Internal::indexedPropertySetter(index, v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertyDeleter(uint32_t index, const v8::PropertyCallbackInfo<v8::Boolean>& info) @@ -3094,9 +2870,7 @@ static void indexedPropertyDeleterCallback(uint32_t index, const v8::PropertyCallbackInfo<v8::Boolean>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); TestInterfaceImplementationV8Internal::indexedPropertyDeleter(index, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyGetter(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) @@ -3112,9 +2886,7 @@ static void namedPropertyGetterCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestInterfaceImplementationV8Internal::namedPropertyGetter(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertySetter(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) @@ -3135,9 +2907,7 @@ static void namedPropertySetterCallback(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestInterfaceImplementationV8Internal::namedPropertySetter(name, v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyQuery(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Integer>& info) @@ -3156,9 +2926,7 @@ static void namedPropertyQueryCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Integer>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestInterfaceImplementationV8Internal::namedPropertyQuery(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyDeleter(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Boolean>& info) @@ -3172,9 +2940,7 @@ static void namedPropertyDeleterCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Boolean>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestInterfaceImplementationV8Internal::namedPropertyDeleter(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyEnumerator(const v8::PropertyCallbackInfo<v8::Array>& info) @@ -3195,9 +2961,7 @@ static void namedPropertyEnumeratorCallback(const v8::PropertyCallbackInfo<v8::Array>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestInterfaceImplementationV8Internal::namedPropertyEnumerator(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } } // namespace TestInterfaceImplementationV8Internal
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp index 4eac556..dd15d9c6 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp
@@ -68,9 +68,7 @@ static void itemMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface2V8Internal::itemMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void setItemMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -105,9 +103,7 @@ static void setItemMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface2V8Internal::setItemMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void deleteItemMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -135,9 +131,7 @@ static void deleteItemMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface2V8Internal::deleteItemMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedItemMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -165,9 +159,7 @@ static void namedItemMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface2V8Internal::namedItemMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void setNamedItemMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -202,9 +194,7 @@ static void setNamedItemMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface2V8Internal::setNamedItemMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void deleteNamedItemMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -232,9 +222,7 @@ static void deleteNamedItemMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface2V8Internal::deleteNamedItemMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringifierMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -245,9 +233,7 @@ static void stringifierMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface2V8Internal::stringifierMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void keysMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -265,9 +251,7 @@ static void keysMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface2V8Internal::keysMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void valuesMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -285,9 +269,7 @@ static void valuesMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface2V8Internal::valuesMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void entriesMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -305,9 +287,7 @@ static void entriesMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface2V8Internal::entriesMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void forEachMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -340,9 +320,7 @@ static void forEachMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface2V8Internal::forEachMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void hasMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -374,9 +352,7 @@ static void hasMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface2V8Internal::hasMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void toStringMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -387,9 +363,7 @@ static void toStringMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface2V8Internal::toStringMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void iteratorMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -407,9 +381,7 @@ static void iteratorMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface2V8Internal::iteratorMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void constructor(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -434,9 +406,7 @@ static void indexedPropertyGetterCallback(uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); TestInterface2V8Internal::indexedPropertyGetter(index, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertySetter(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) @@ -459,9 +429,7 @@ static void indexedPropertySetterCallback(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); TestInterface2V8Internal::indexedPropertySetter(index, v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertyDeleter(uint32_t index, const v8::PropertyCallbackInfo<v8::Boolean>& info) @@ -477,9 +445,7 @@ static void indexedPropertyDeleterCallback(uint32_t index, const v8::PropertyCallbackInfo<v8::Boolean>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); TestInterface2V8Internal::indexedPropertyDeleter(index, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyGetter(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) @@ -499,9 +465,7 @@ static void namedPropertyGetterCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestInterface2V8Internal::namedPropertyGetter(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertySetter(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) @@ -529,9 +493,7 @@ static void namedPropertySetterCallback(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestInterface2V8Internal::namedPropertySetter(name, v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyQuery(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Integer>& info) @@ -550,9 +512,7 @@ static void namedPropertyQueryCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Integer>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestInterface2V8Internal::namedPropertyQuery(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyDeleter(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Boolean>& info) @@ -570,9 +530,7 @@ static void namedPropertyDeleterCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Boolean>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestInterface2V8Internal::namedPropertyDeleter(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyEnumerator(const v8::PropertyCallbackInfo<v8::Array>& info) @@ -593,9 +551,7 @@ static void namedPropertyEnumeratorCallback(const v8::PropertyCallbackInfo<v8::Array>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestInterface2V8Internal::namedPropertyEnumerator(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } } // namespace TestInterface2V8Internal @@ -629,7 +585,6 @@ void V8TestInterface2::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "DOMConstructor"); if (!info.IsConstructCall()) { V8ThrowException::throwTypeError(info.GetIsolate(), ExceptionMessages::constructorNotCallableAsFunction("TestInterface2")); return;
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp index 1370817..c3b889e6 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp
@@ -61,9 +61,7 @@ static void voidMethodDocumentMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface3V8Internal::voidMethodDocumentMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void keysMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -81,9 +79,7 @@ static void keysMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface3V8Internal::keysMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void valuesMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -101,9 +97,7 @@ static void valuesMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface3V8Internal::valuesMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void entriesMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -121,9 +115,7 @@ static void entriesMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface3V8Internal::entriesMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void forEachMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -156,9 +148,7 @@ static void forEachMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface3V8Internal::forEachMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void iteratorMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -176,65 +166,47 @@ static void iteratorMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface3V8Internal::iteratorMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertyGetterCallback(uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); V8TestInterface3::indexedPropertyGetterCustom(index, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertySetterCallback(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); V8TestInterface3::indexedPropertySetterCustom(index, v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertyDeleterCallback(uint32_t index, const v8::PropertyCallbackInfo<v8::Boolean>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); V8TestInterface3::indexedPropertyDeleterCustom(index, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyGetterCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); V8TestInterface3::namedPropertyGetterCustom(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertySetterCallback(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); V8TestInterface3::namedPropertySetterCustom(name, v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyQueryCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Integer>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); V8TestInterface3::namedPropertyQueryCustom(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyDeleterCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Boolean>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); V8TestInterface3::namedPropertyDeleterCustom(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyEnumeratorCallback(const v8::PropertyCallbackInfo<v8::Array>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); V8TestInterface3::namedPropertyEnumeratorCustom(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } } // namespace TestInterface3V8Internal
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp index eaf710d..0c24619 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp
@@ -66,9 +66,7 @@ static void readonlyLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceCheckSecurityV8Internal::readonlyLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void longAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -86,9 +84,7 @@ static void longAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceCheckSecurityV8Internal::longAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void longAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -110,9 +106,7 @@ static void longAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceCheckSecurityV8Internal::longAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doNotCheckSecurityLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -124,9 +118,7 @@ static void doNotCheckSecurityLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceCheckSecurityV8Internal::doNotCheckSecurityLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doNotCheckSecurityLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -143,9 +135,7 @@ static void doNotCheckSecurityLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceCheckSecurityV8Internal::doNotCheckSecurityLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doNotCheckSecurityReadonlyLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -157,9 +147,7 @@ static void doNotCheckSecurityReadonlyLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceCheckSecurityV8Internal::doNotCheckSecurityReadonlyLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doNotCheckSecurityOnSetterLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -171,9 +159,7 @@ static void doNotCheckSecurityOnSetterLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceCheckSecurityV8Internal::doNotCheckSecurityOnSetterLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doNotCheckSecurityOnSetterLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -190,9 +176,7 @@ static void doNotCheckSecurityOnSetterLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceCheckSecurityV8Internal::doNotCheckSecurityOnSetterLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doNotCheckSecurityReplaceableReadonlyLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -204,9 +188,7 @@ static void doNotCheckSecurityReplaceableReadonlyLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceCheckSecurityV8Internal::doNotCheckSecurityReplaceableReadonlyLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doNotCheckSecurityReplaceableReadonlyLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -218,9 +200,7 @@ static void doNotCheckSecurityReplaceableReadonlyLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceCheckSecurityV8Internal::doNotCheckSecurityReplaceableReadonlyLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } bool securityCheck(v8::Local<v8::Context> accessingContext, v8::Local<v8::Object> accessedObject) @@ -243,9 +223,7 @@ static void voidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceCheckSecurityV8Internal::voidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doNotCheckSecurityVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -256,9 +234,7 @@ static void doNotCheckSecurityVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceCheckSecurityV8Internal::doNotCheckSecurityVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doNotCheckSecurityVoidMethodOriginSafeMethodGetter(const v8::PropertyCallbackInfo<v8::Value>& info) @@ -291,9 +267,7 @@ static void doNotCheckSecurityVoidMethodOriginSafeMethodGetterCallback(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceCheckSecurityV8Internal::doNotCheckSecurityVoidMethodOriginSafeMethodGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doNotCheckSecurityDoNotCheckSignatureVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -304,9 +278,7 @@ static void doNotCheckSecurityDoNotCheckSignatureVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceCheckSecurityV8Internal::doNotCheckSecurityDoNotCheckSignatureVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doNotCheckSecurityDoNotCheckSignatureVoidMethodOriginSafeMethodGetter(const v8::PropertyCallbackInfo<v8::Value>& info) @@ -339,9 +311,7 @@ static void doNotCheckSecurityDoNotCheckSignatureVoidMethodOriginSafeMethodGetterCallback(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceCheckSecurityV8Internal::doNotCheckSecurityDoNotCheckSignatureVoidMethodOriginSafeMethodGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doNotCheckSecurityPerWorldBindingsVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -352,9 +322,7 @@ static void doNotCheckSecurityPerWorldBindingsVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceCheckSecurityV8Internal::doNotCheckSecurityPerWorldBindingsVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetter(const v8::PropertyCallbackInfo<v8::Value>& info) @@ -387,9 +355,7 @@ static void doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetterCallback(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceCheckSecurityV8Internal::doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doNotCheckSecurityPerWorldBindingsVoidMethodMethodForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -400,9 +366,7 @@ static void doNotCheckSecurityPerWorldBindingsVoidMethodMethodCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceCheckSecurityV8Internal::doNotCheckSecurityPerWorldBindingsVoidMethodMethodForMainWorld(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetterForMainWorld(const v8::PropertyCallbackInfo<v8::Value>& info) @@ -435,9 +399,7 @@ static void doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetterCallbackForMainWorld(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceCheckSecurityV8Internal::doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetterForMainWorld(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doNotCheckSecurityUnforgeableVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -448,9 +410,7 @@ static void doNotCheckSecurityUnforgeableVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceCheckSecurityV8Internal::doNotCheckSecurityUnforgeableVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doNotCheckSecurityUnforgeableVoidMethodOriginSafeMethodGetter(const v8::PropertyCallbackInfo<v8::Value>& info) @@ -483,9 +443,7 @@ static void doNotCheckSecurityUnforgeableVoidMethodOriginSafeMethodGetterCallback(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceCheckSecurityV8Internal::doNotCheckSecurityUnforgeableVoidMethodOriginSafeMethodGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void TestInterfaceCheckSecurityOriginSafeMethodSetter(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) @@ -506,9 +464,7 @@ static void TestInterfaceCheckSecurityOriginSafeMethodSetterCallback(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceCheckSecurityV8Internal::TestInterfaceCheckSecurityOriginSafeMethodSetter(name, v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } } // namespace TestInterfaceCheckSecurityV8Internal
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp index e75d4976..ecdf110 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp
@@ -345,7 +345,6 @@ if (!result.IsEmpty()) return result; - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "BuildDOMTemplate"); result = v8::FunctionTemplate::New(isolate, V8TestInterfaceConstructorConstructorCallback); v8::Local<v8::ObjectTemplate> instanceTemplate = result->InstanceTemplate(); instanceTemplate->SetInternalFieldCount(V8TestInterfaceConstructor::internalFieldCount); @@ -357,7 +356,6 @@ void V8TestInterfaceConstructor::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "DOMConstructor"); UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::TestFeature); if (!info.IsConstructCall()) { V8ThrowException::throwTypeError(info.GetIsolate(), ExceptionMessages::constructorNotCallableAsFunction("TestInterfaceConstructor"));
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp index d050543..d1d6260 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp
@@ -209,7 +209,6 @@ void V8TestInterfaceConstructor2::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "DOMConstructor"); if (!info.IsConstructCall()) { V8ThrowException::throwTypeError(info.GetIsolate(), ExceptionMessages::constructorNotCallableAsFunction("TestInterfaceConstructor2")); return;
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp index 4f074ad..47b1d67 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp
@@ -59,7 +59,6 @@ void V8TestInterfaceConstructor3::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "DOMConstructor"); if (!info.IsConstructCall()) { V8ThrowException::throwTypeError(info.GetIsolate(), ExceptionMessages::constructorNotCallableAsFunction("TestInterfaceConstructor3")); return;
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp index 066749b..2523108e 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp
@@ -96,7 +96,6 @@ void V8TestInterfaceConstructor4::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "DOMConstructor"); if (!info.IsConstructCall()) { V8ThrowException::throwTypeError(info.GetIsolate(), ExceptionMessages::constructorNotCallableAsFunction("TestInterfaceConstructor4")); return;
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp index 32320a1b..8117563 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp
@@ -41,7 +41,6 @@ void V8TestInterfaceCustomConstructor::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "DOMConstructor"); if (!info.IsConstructCall()) { V8ThrowException::throwTypeError(info.GetIsolate(), ExceptionMessages::constructorNotCallableAsFunction("TestInterfaceCustomConstructor")); return;
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp index d41e506..83be05e 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp
@@ -51,9 +51,7 @@ static void locationAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceDocumentV8Internal::locationAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -72,9 +70,7 @@ static void locationAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceDocumentV8Internal::locationAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } } // namespace TestInterfaceDocumentV8Internal
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp index 4086861..80a80b1 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp
@@ -47,9 +47,7 @@ static void readonlyStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceEventInitConstructorV8Internal::readonlyStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void isTrustedAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -61,9 +59,7 @@ static void isTrustedAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceEventInitConstructorV8Internal::isTrustedAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void constructor(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -103,7 +99,6 @@ void V8TestInterfaceEventInitConstructor::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "DOMConstructor"); if (!info.IsConstructCall()) { V8ThrowException::throwTypeError(info.GetIsolate(), ExceptionMessages::constructorNotCallableAsFunction("TestInterfaceEventInitConstructor")); return;
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp index 11e3431..603fc98 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp
@@ -76,7 +76,6 @@ if (!result.IsEmpty()) return result; - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "BuildDOMTemplate"); result = v8::FunctionTemplate::New(isolate, V8TestInterfaceEventTargetConstructorCallback); v8::Local<v8::ObjectTemplate> instanceTemplate = result->InstanceTemplate(); instanceTemplate->SetInternalFieldCount(V8TestInterfaceEventTarget::internalFieldCount);
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp index 1f971b2..a2f23fe 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp
@@ -50,9 +50,7 @@ static void attr1AttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceGarbageCollectedV8Internal::attr1AttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void attr1AttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -72,9 +70,7 @@ static void attr1AttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceGarbageCollectedV8Internal::attr1AttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void funcMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -97,9 +93,7 @@ static void funcMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceGarbageCollectedV8Internal::funcMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void keysMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -117,9 +111,7 @@ static void keysMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceGarbageCollectedV8Internal::keysMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void valuesMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -137,9 +129,7 @@ static void valuesMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceGarbageCollectedV8Internal::valuesMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void entriesMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -157,9 +147,7 @@ static void entriesMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceGarbageCollectedV8Internal::entriesMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void forEachMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -192,9 +180,7 @@ static void forEachMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceGarbageCollectedV8Internal::forEachMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void hasMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -223,9 +209,7 @@ static void hasMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceGarbageCollectedV8Internal::hasMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void addMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -254,9 +238,7 @@ static void addMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceGarbageCollectedV8Internal::addMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void clearMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -273,9 +255,7 @@ static void clearMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceGarbageCollectedV8Internal::clearMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void deleteMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -304,9 +284,7 @@ static void deleteMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceGarbageCollectedV8Internal::deleteMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void iteratorMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -324,9 +302,7 @@ static void iteratorMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceGarbageCollectedV8Internal::iteratorMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void constructor(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -367,7 +343,6 @@ void V8TestInterfaceGarbageCollected::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "DOMConstructor"); if (!info.IsConstructCall()) { V8ThrowException::throwTypeError(info.GetIsolate(), ExceptionMessages::constructorNotCallableAsFunction("TestInterfaceGarbageCollected")); return;
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp index 0c8acef66..865074dd 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp
@@ -52,9 +52,7 @@ static void testNamedConstructorConstructorAttributeAttributeSetterCallback(v8::Local<v8::Name>, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceNamedConstructorV8Internal::testNamedConstructorConstructorAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } } // namespace TestInterfaceNamedConstructorV8Internal @@ -167,7 +165,6 @@ if (!result.IsEmpty()) return result; - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "BuildDOMTemplate"); result = v8::FunctionTemplate::New(isolate, V8TestInterfaceNamedConstructorConstructorCallback); v8::Local<v8::ObjectTemplate> instanceTemplate = result->InstanceTemplate(); instanceTemplate->SetInternalFieldCount(V8TestInterfaceNamedConstructor::internalFieldCount);
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp index 0f2e941..266618f 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp
@@ -85,7 +85,6 @@ if (!result.IsEmpty()) return result; - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "BuildDOMTemplate"); result = v8::FunctionTemplate::New(isolate, V8TestInterfaceNamedConstructor2ConstructorCallback); v8::Local<v8::ObjectTemplate> instanceTemplate = result->InstanceTemplate(); instanceTemplate->SetInternalFieldCount(V8TestInterfaceNamedConstructor2::internalFieldCount);
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp index 4977e0a..99538e4 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp
@@ -50,9 +50,7 @@ static void nodeNameAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceNodeV8Internal::nodeNameAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void nodeNameAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -68,9 +66,7 @@ static void nodeNameAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceNodeV8Internal::nodeNameAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -82,9 +78,7 @@ static void stringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceNodeV8Internal::stringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -100,9 +94,7 @@ static void stringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceNodeV8Internal::stringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void readonlyTestInterfaceEmptyAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -114,9 +106,7 @@ static void readonlyTestInterfaceEmptyAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceNodeV8Internal::readonlyTestInterfaceEmptyAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void eventHandlerAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -129,9 +119,7 @@ static void eventHandlerAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceNodeV8Internal::eventHandlerAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void eventHandlerAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -144,9 +132,7 @@ static void eventHandlerAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceNodeV8Internal::eventHandlerAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -158,9 +144,7 @@ static void perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceNodeV8Internal::perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -172,9 +156,7 @@ static void perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceNodeV8Internal::perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterForMainWorld(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -186,9 +168,7 @@ static void reflectStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceNodeV8Internal::reflectStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -204,10 +184,8 @@ static void reflectStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestInterfaceNodeV8Internal::reflectStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectUrlStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -219,9 +197,7 @@ static void reflectUrlStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceNodeV8Internal::reflectUrlStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectUrlStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -237,10 +213,8 @@ static void reflectUrlStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestInterfaceNodeV8Internal::reflectUrlStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceEmptyMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -251,9 +225,7 @@ static void testInterfaceEmptyMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceNodeV8Internal::testInterfaceEmptyMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void perWorldBindingsTestInterfaceEmptyMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -264,9 +236,7 @@ static void perWorldBindingsTestInterfaceEmptyMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceNodeV8Internal::perWorldBindingsTestInterfaceEmptyMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void perWorldBindingsTestInterfaceEmptyMethodMethodForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -277,9 +247,7 @@ static void perWorldBindingsTestInterfaceEmptyMethodMethodCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceNodeV8Internal::perWorldBindingsTestInterfaceEmptyMethodMethodForMainWorld(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void perWorldBindingsTestInterfaceEmptyMethodOptionalBooleanArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -307,9 +275,7 @@ static void perWorldBindingsTestInterfaceEmptyMethodOptionalBooleanArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceNodeV8Internal::perWorldBindingsTestInterfaceEmptyMethodOptionalBooleanArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void perWorldBindingsTestInterfaceEmptyMethodOptionalBooleanArgMethodForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -337,9 +303,7 @@ static void perWorldBindingsTestInterfaceEmptyMethodOptionalBooleanArgMethodCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceNodeV8Internal::perWorldBindingsTestInterfaceEmptyMethodOptionalBooleanArgMethodForMainWorld(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } } // namespace TestInterfaceNodeV8Internal
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceWillBeGarbageCollected.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceWillBeGarbageCollected.cpp index c343522..ea891f6 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceWillBeGarbageCollected.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceWillBeGarbageCollected.cpp
@@ -47,9 +47,7 @@ static void attr1AttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterfaceWillBeGarbageCollectedV8Internal::attr1AttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void attr1AttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -69,9 +67,7 @@ static void attr1AttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterfaceWillBeGarbageCollectedV8Internal::attr1AttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void funcMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -94,9 +90,7 @@ static void funcMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterfaceWillBeGarbageCollectedV8Internal::funcMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void constructor(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -173,7 +167,6 @@ if (!result.IsEmpty()) return result; - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "BuildDOMTemplate"); result = v8::FunctionTemplate::New(isolate, V8TestInterfaceWillBeGarbageCollectedConstructorCallback); v8::Local<v8::ObjectTemplate> instanceTemplate = result->InstanceTemplate(); instanceTemplate->SetInternalFieldCount(V8TestInterfaceWillBeGarbageCollected::internalFieldCount); @@ -185,7 +178,6 @@ void V8TestInterfaceWillBeGarbageCollected::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "DOMConstructor"); if (!info.IsConstructCall()) { V8ThrowException::throwTypeError(info.GetIsolate(), ExceptionMessages::constructorNotCallableAsFunction("TestInterfaceWillBeGarbageCollected")); return;
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp index 3d755bfb..d1ab744e 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp
@@ -46,9 +46,7 @@ static void hrefAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestNodeV8Internal::hrefAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void hrefAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -64,9 +62,7 @@ static void hrefAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestNodeV8Internal::hrefAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void hrefThrowsAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -78,9 +74,7 @@ static void hrefThrowsAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestNodeV8Internal::hrefThrowsAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void hrefThrowsAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -98,9 +92,7 @@ static void hrefThrowsAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestNodeV8Internal::hrefThrowsAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void hrefCallWithAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -112,9 +104,7 @@ static void hrefCallWithAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestNodeV8Internal::hrefCallWithAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void hrefCallWithAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -131,9 +121,7 @@ static void hrefCallWithAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestNodeV8Internal::hrefCallWithAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void hrefByteStringAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -145,9 +133,7 @@ static void hrefByteStringAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestNodeV8Internal::hrefByteStringAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void hrefByteStringAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -164,9 +150,7 @@ static void hrefByteStringAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestNodeV8Internal::hrefByteStringAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void constructor(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -188,7 +172,6 @@ void V8TestNode::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "DOMConstructor"); if (!info.IsConstructCall()) { V8ThrowException::throwTypeError(info.GetIsolate(), ExceptionMessages::constructorNotCallableAsFunction("TestNode")); return;
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp index a640522..856f721 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp
@@ -98,23 +98,18 @@ static void DEPRECATED_CONSTANTConstantGetterCallback(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); UseCounter::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::Constant); v8SetReturnValueInt(info, 1); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void MEASURED_CONSTANTConstantGetterCallback(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::Constant); v8SetReturnValueInt(info, 1); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void FEATURE1_RUNTIME_AND_EXPERIMENT_ENABLED_CONST1ConstantGetterCallback(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String memberErrorMessage; if (!OriginTrials::featureName1Enabled(executionContext, memberErrorMessage)) { @@ -125,12 +120,10 @@ return; } v8SetReturnValueInt(info, 1); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void FEATURE1_RUNTIME_AND_EXPERIMENT_ENABLED_CONST2ConstantGetterCallback(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String memberErrorMessage; if (!OriginTrials::featureName1Enabled(executionContext, memberErrorMessage)) { @@ -141,12 +134,10 @@ return; } v8SetReturnValueInt(info, 2); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void FEATURE2_RUNTIME_AND_EXPERIMENT_ENABLED_CONST1ConstantGetterCallback(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String memberErrorMessage; if (!OriginTrials::featureName2Enabled(executionContext, memberErrorMessage)) { @@ -157,12 +148,10 @@ return; } v8SetReturnValueInt(info, 3); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void FEATURE2_RUNTIME_AND_EXPERIMENT_ENABLED_CONST2ConstantGetterCallback(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String memberErrorMessage; if (!OriginTrials::featureName2Enabled(executionContext, memberErrorMessage)) { @@ -173,12 +162,10 @@ return; } v8SetReturnValueInt(info, 4); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void FEATURE3_RUNTIME_AND_EXPERIMENT_ENABLED_CONST1ConstantGetterCallback(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String memberErrorMessage; if (!OriginTrials::featureName3Enabled(executionContext, memberErrorMessage)) { @@ -189,7 +176,6 @@ return; } v8SetReturnValueInt(info, 5); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } template<class CallbackInfo> @@ -208,9 +194,7 @@ static void stringifierAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::stringifierAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringifierAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -226,9 +210,7 @@ static void stringifierAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::stringifierAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void readonlyStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -240,9 +222,7 @@ static void readonlyStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::readonlyStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void readonlyTestInterfaceEmptyAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -261,9 +241,7 @@ static void readonlyTestInterfaceEmptyAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::readonlyTestInterfaceEmptyAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void readonlyLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -275,9 +253,7 @@ static void readonlyLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::readonlyLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void dateAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -289,9 +265,7 @@ static void dateAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::dateAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void dateAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -305,9 +279,7 @@ static void dateAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::dateAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -319,9 +291,7 @@ static void stringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::stringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -337,9 +307,7 @@ static void stringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::stringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void byteStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -351,9 +319,7 @@ static void byteStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::byteStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void byteStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -370,9 +336,7 @@ static void byteStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::byteStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void usvStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -384,9 +348,7 @@ static void usvStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::usvStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void usvStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -403,9 +365,7 @@ static void usvStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::usvStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void domTimeStampAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -417,9 +377,7 @@ static void domTimeStampAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::domTimeStampAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void domTimeStampAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -436,9 +394,7 @@ static void domTimeStampAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::domTimeStampAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void booleanAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -450,9 +406,7 @@ static void booleanAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::booleanAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void booleanAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -469,9 +423,7 @@ static void booleanAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::booleanAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void byteAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -483,9 +435,7 @@ static void byteAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::byteAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void byteAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -502,9 +452,7 @@ static void byteAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::byteAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doubleAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -516,9 +464,7 @@ static void doubleAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::doubleAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doubleAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -535,9 +481,7 @@ static void doubleAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::doubleAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void floatAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -549,9 +493,7 @@ static void floatAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::floatAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void floatAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -568,9 +510,7 @@ static void floatAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::floatAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void longAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -582,9 +522,7 @@ static void longAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::longAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void longAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -601,9 +539,7 @@ static void longAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::longAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void longLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -615,9 +551,7 @@ static void longLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::longLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void longLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -634,9 +568,7 @@ static void longLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::longLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void octetAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -648,9 +580,7 @@ static void octetAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::octetAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void octetAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -667,9 +597,7 @@ static void octetAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::octetAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void shortAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -681,9 +609,7 @@ static void shortAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::shortAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void shortAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -700,9 +626,7 @@ static void shortAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::shortAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unrestrictedDoubleAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -714,9 +638,7 @@ static void unrestrictedDoubleAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::unrestrictedDoubleAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unrestrictedDoubleAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -733,9 +655,7 @@ static void unrestrictedDoubleAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::unrestrictedDoubleAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unrestrictedFloatAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -747,9 +667,7 @@ static void unrestrictedFloatAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::unrestrictedFloatAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unrestrictedFloatAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -766,9 +684,7 @@ static void unrestrictedFloatAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::unrestrictedFloatAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unsignedLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -780,9 +696,7 @@ static void unsignedLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::unsignedLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unsignedLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -799,9 +713,7 @@ static void unsignedLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::unsignedLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unsignedLongLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -813,9 +725,7 @@ static void unsignedLongLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::unsignedLongLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unsignedLongLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -832,9 +742,7 @@ static void unsignedLongLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::unsignedLongLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unsignedShortAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -846,9 +754,7 @@ static void unsignedShortAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::unsignedShortAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unsignedShortAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -865,9 +771,7 @@ static void unsignedShortAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::unsignedShortAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceEmptyAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -879,9 +783,7 @@ static void testInterfaceEmptyAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::testInterfaceEmptyAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceEmptyAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -901,9 +803,7 @@ static void testInterfaceEmptyAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::testInterfaceEmptyAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testObjectAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -915,9 +815,7 @@ static void testObjectAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::testObjectAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testObjectAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -937,9 +835,7 @@ static void testObjectAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::testObjectAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidCallbackFunctionAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -951,9 +847,7 @@ static void voidCallbackFunctionAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::voidCallbackFunctionAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidCallbackFunctionAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -967,9 +861,7 @@ static void voidCallbackFunctionAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::voidCallbackFunctionAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void anyCallbackFunctionOptionalAnyArgAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -981,9 +873,7 @@ static void anyCallbackFunctionOptionalAnyArgAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::anyCallbackFunctionOptionalAnyArgAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void anyCallbackFunctionOptionalAnyArgAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -997,9 +887,7 @@ static void anyCallbackFunctionOptionalAnyArgAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::anyCallbackFunctionOptionalAnyArgAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void cssAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1011,9 +899,7 @@ static void cssAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::cssAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void cssAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1030,9 +916,7 @@ static void cssAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::cssAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void imeAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1044,9 +928,7 @@ static void imeAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::imeAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void imeAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1063,9 +945,7 @@ static void imeAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::imeAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void svgAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1077,9 +957,7 @@ static void svgAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::svgAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void svgAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1096,9 +974,7 @@ static void svgAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::svgAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void xmlAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1110,9 +986,7 @@ static void xmlAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::xmlAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void xmlAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1129,9 +1003,7 @@ static void xmlAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::xmlAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void nodeFilterAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1143,9 +1015,7 @@ static void nodeFilterAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::nodeFilterAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void nodeFilterAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1159,9 +1029,7 @@ static void nodeFilterAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::nodeFilterAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void serializedScriptValueAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1173,9 +1041,7 @@ static void serializedScriptValueAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::serializedScriptValueAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void serializedScriptValueAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1192,9 +1058,7 @@ static void serializedScriptValueAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::serializedScriptValueAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void anyAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1206,9 +1070,7 @@ static void anyAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::anyAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void anyAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1222,9 +1084,7 @@ static void anyAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::anyAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void promiseAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1236,9 +1096,7 @@ static void promiseAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::promiseAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void promiseAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1252,9 +1110,7 @@ static void promiseAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::promiseAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void windowAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1266,9 +1122,7 @@ static void windowAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::windowAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void windowAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1288,9 +1142,7 @@ static void windowAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::windowAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void documentAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1302,9 +1154,7 @@ static void documentAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::documentAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void documentAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1324,9 +1174,7 @@ static void documentAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::documentAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void documentFragmentAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1338,9 +1186,7 @@ static void documentFragmentAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::documentFragmentAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void documentFragmentAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1360,9 +1206,7 @@ static void documentFragmentAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::documentFragmentAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void documentTypeAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1374,9 +1218,7 @@ static void documentTypeAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::documentTypeAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void documentTypeAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1396,9 +1238,7 @@ static void documentTypeAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::documentTypeAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void elementAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1410,9 +1250,7 @@ static void elementAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::elementAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void elementAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1432,9 +1270,7 @@ static void elementAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::elementAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void nodeAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1446,9 +1282,7 @@ static void nodeAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::nodeAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void nodeAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1468,9 +1302,7 @@ static void nodeAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::nodeAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void shadowRootAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1482,9 +1314,7 @@ static void shadowRootAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::shadowRootAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void shadowRootAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1504,9 +1334,7 @@ static void shadowRootAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::shadowRootAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void arrayBufferAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1518,9 +1346,7 @@ static void arrayBufferAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::arrayBufferAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void arrayBufferAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1540,9 +1366,7 @@ static void arrayBufferAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::arrayBufferAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void float32ArrayAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1554,9 +1378,7 @@ static void float32ArrayAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::float32ArrayAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void float32ArrayAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1576,9 +1398,7 @@ static void float32ArrayAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::float32ArrayAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void uint8ArrayAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1590,9 +1410,7 @@ static void uint8ArrayAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::uint8ArrayAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void uint8ArrayAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1612,9 +1430,7 @@ static void uint8ArrayAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::uint8ArrayAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void selfAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1626,9 +1442,7 @@ static void selfAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::selfAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void readonlyEventTargetAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1640,9 +1454,7 @@ static void readonlyEventTargetAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::readonlyEventTargetAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void readonlyEventTargetOrNullAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1654,9 +1466,7 @@ static void readonlyEventTargetOrNullAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::readonlyEventTargetOrNullAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void readonlyWindowAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1668,9 +1478,7 @@ static void readonlyWindowAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::readonlyWindowAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void htmlCollectionAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1682,9 +1490,7 @@ static void htmlCollectionAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::htmlCollectionAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void htmlElementAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1696,9 +1502,7 @@ static void htmlElementAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::htmlElementAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringArrayAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1710,9 +1514,7 @@ static void stringArrayAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::stringArrayAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringArrayAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1729,9 +1531,7 @@ static void stringArrayAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::stringArrayAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceEmptyArrayAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1743,9 +1543,7 @@ static void testInterfaceEmptyArrayAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::testInterfaceEmptyArrayAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceEmptyArrayAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1762,9 +1560,7 @@ static void testInterfaceEmptyArrayAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::testInterfaceEmptyArrayAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void floatArrayAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1776,9 +1572,7 @@ static void floatArrayAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::floatArrayAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void floatArrayAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1795,9 +1589,7 @@ static void floatArrayAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::floatArrayAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringOrNullAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1809,9 +1601,7 @@ static void stringOrNullAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::stringOrNullAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringOrNullAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1827,9 +1617,7 @@ static void stringOrNullAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::stringOrNullAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void longOrNullAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1847,9 +1635,7 @@ static void longOrNullAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::longOrNullAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void longOrNullAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1866,9 +1652,7 @@ static void longOrNullAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::longOrNullAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceOrNullAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1880,9 +1664,7 @@ static void testInterfaceOrNullAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::testInterfaceOrNullAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceOrNullAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1902,9 +1684,7 @@ static void testInterfaceOrNullAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::testInterfaceOrNullAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testEnumAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1916,9 +1696,7 @@ static void testEnumAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::testEnumAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testEnumAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1945,9 +1723,7 @@ static void testEnumAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::testEnumAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testEnumOrNullAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1959,9 +1735,7 @@ static void testEnumOrNullAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::testEnumOrNullAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testEnumOrNullAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -1988,9 +1762,7 @@ static void testEnumOrNullAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::testEnumOrNullAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void staticStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2000,9 +1772,7 @@ static void staticStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::staticStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void staticStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2016,9 +1786,7 @@ static void staticStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::staticStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void staticLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2028,9 +1796,7 @@ static void staticLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::staticLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void staticLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2046,9 +1812,7 @@ static void staticLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::staticLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void eventHandlerAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2061,9 +1825,7 @@ static void eventHandlerAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::eventHandlerAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void eventHandlerAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2077,9 +1839,7 @@ static void eventHandlerAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::eventHandlerAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doubleOrStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2093,9 +1853,7 @@ static void doubleOrStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::doubleOrStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doubleOrStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2113,9 +1871,7 @@ static void doubleOrStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::doubleOrStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doubleOrStringOrNullAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2129,9 +1885,7 @@ static void doubleOrStringOrNullAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::doubleOrStringOrNullAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doubleOrStringOrNullAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2149,9 +1903,7 @@ static void doubleOrStringOrNullAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::doubleOrStringOrNullAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doubleOrNullStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2165,9 +1917,7 @@ static void doubleOrNullStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::doubleOrNullStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doubleOrNullStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2185,9 +1935,7 @@ static void doubleOrNullStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::doubleOrNullStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringOrStringSequenceAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2201,9 +1949,7 @@ static void stringOrStringSequenceAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::stringOrStringSequenceAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringOrStringSequenceAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2221,9 +1967,7 @@ static void stringOrStringSequenceAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::stringOrStringSequenceAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testEnumOrDoubleAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2237,9 +1981,7 @@ static void testEnumOrDoubleAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::testEnumOrDoubleAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testEnumOrDoubleAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2257,9 +1999,7 @@ static void testEnumOrDoubleAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::testEnumOrDoubleAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unrestrictedDoubleOrStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2273,9 +2013,7 @@ static void unrestrictedDoubleOrStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::unrestrictedDoubleOrStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unrestrictedDoubleOrStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2293,9 +2031,7 @@ static void unrestrictedDoubleOrStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::unrestrictedDoubleOrStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingAccessForAllWorldsLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2307,13 +2043,11 @@ static void activityLoggingAccessForAllWorldsLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ScriptState* scriptState = ScriptState::from(info.GetIsolate()->GetCurrentContext()); V8PerContextData* contextData = scriptState->perContextData(); if (contextData && contextData->activityLogger()) contextData->activityLogger()->logGetter("TestObject.activityLoggingAccessForAllWorldsLongAttribute"); TestObjectV8Internal::activityLoggingAccessForAllWorldsLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingAccessForAllWorldsLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2330,14 +2064,12 @@ static void activityLoggingAccessForAllWorldsLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); ScriptState* scriptState = ScriptState::from(info.GetIsolate()->GetCurrentContext()); V8PerContextData* contextData = scriptState->perContextData(); if (contextData && contextData->activityLogger()) { contextData->activityLogger()->logSetter("TestObject.activityLoggingAccessForAllWorldsLongAttribute", v8Value); } TestObjectV8Internal::activityLoggingAccessForAllWorldsLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingGetterForAllWorldsLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2349,13 +2081,11 @@ static void activityLoggingGetterForAllWorldsLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ScriptState* scriptState = ScriptState::from(info.GetIsolate()->GetCurrentContext()); V8PerContextData* contextData = scriptState->perContextData(); if (contextData && contextData->activityLogger()) contextData->activityLogger()->logGetter("TestObject.activityLoggingGetterForAllWorldsLongAttribute"); TestObjectV8Internal::activityLoggingGetterForAllWorldsLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingGetterForAllWorldsLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2372,9 +2102,7 @@ static void activityLoggingGetterForAllWorldsLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::activityLoggingGetterForAllWorldsLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingSetterForAllWorldsLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2386,9 +2114,7 @@ static void activityLoggingSetterForAllWorldsLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::activityLoggingSetterForAllWorldsLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingSetterForAllWorldsLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2405,14 +2131,12 @@ static void activityLoggingSetterForAllWorldsLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); ScriptState* scriptState = ScriptState::from(info.GetIsolate()->GetCurrentContext()); V8PerContextData* contextData = scriptState->perContextData(); if (contextData && contextData->activityLogger()) { contextData->activityLogger()->logSetter("TestObject.activityLoggingSetterForAllWorldsLongAttribute", v8Value); } TestObjectV8Internal::activityLoggingSetterForAllWorldsLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void cachedAttributeAnyAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2435,9 +2159,7 @@ static void cachedAttributeAnyAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::cachedAttributeAnyAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void cachedAttributeAnyAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2452,9 +2174,7 @@ static void cachedAttributeAnyAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::cachedAttributeAnyAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void cachedArrayAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2477,9 +2197,7 @@ static void cachedArrayAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::cachedArrayAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void cachedArrayAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2497,9 +2215,7 @@ static void cachedArrayAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::cachedArrayAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void cachedStringOrNoneAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2522,9 +2238,7 @@ static void cachedStringOrNoneAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::cachedStringOrNoneAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void cachedStringOrNoneAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2541,9 +2255,7 @@ static void cachedStringOrNoneAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::cachedStringOrNoneAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void callWithExecutionContextAnyAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2556,9 +2268,7 @@ static void callWithExecutionContextAnyAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::callWithExecutionContextAnyAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void callWithExecutionContextAnyAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2573,9 +2283,7 @@ static void callWithExecutionContextAnyAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::callWithExecutionContextAnyAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void callWithScriptStateAnyAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2588,9 +2296,7 @@ static void callWithScriptStateAnyAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::callWithScriptStateAnyAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void callWithScriptStateAnyAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2605,9 +2311,7 @@ static void callWithScriptStateAnyAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::callWithScriptStateAnyAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void callWithExecutionContextAndScriptStateAnyAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2621,9 +2325,7 @@ static void callWithExecutionContextAndScriptStateAnyAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::callWithExecutionContextAndScriptStateAnyAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void callWithExecutionContextAndScriptStateAnyAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2639,9 +2341,7 @@ static void callWithExecutionContextAndScriptStateAnyAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::callWithExecutionContextAndScriptStateAnyAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void checkSecurityForNodeReadonlyDocumentAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2659,9 +2359,7 @@ static void checkSecurityForNodeReadonlyDocumentAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::checkSecurityForNodeReadonlyDocumentAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceEmptyConstructorAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) @@ -2672,9 +2370,7 @@ static void testInterfaceEmptyConstructorAttributeAttributeSetterCallback(v8::Local<v8::Name>, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::testInterfaceEmptyConstructorAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceEmptyConstructorAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) @@ -2685,10 +2381,8 @@ static void testInterfaceEmptyConstructorAttributeAttributeSetterCallback(v8::Local<v8::Name>, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); UseCounter::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::deprecatedTestInterfaceEmptyConstructorAttribute); TestObjectV8Internal::testInterfaceEmptyConstructorAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void measureAsFeatureNameTestInterfaceEmptyConstructorAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) @@ -2699,32 +2393,24 @@ static void measureAsFeatureNameTestInterfaceEmptyConstructorAttributeAttributeSetterCallback(v8::Local<v8::Name>, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::FeatureName); TestObjectV8Internal::measureAsFeatureNameTestInterfaceEmptyConstructorAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void customObjectAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); V8TestObject::customObjectAttributeAttributeGetterCustom(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void customObjectAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); V8TestObject::customObjectAttributeAttributeSetterCustom(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void customGetterLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); V8TestObject::customGetterLongAttributeAttributeGetterCustom(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void customGetterLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2741,16 +2427,12 @@ static void customGetterLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::customGetterLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void customGetterReadonlyObjectAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); V8TestObject::customGetterReadonlyObjectAttributeAttributeGetterCustom(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void customSetterLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2762,17 +2444,13 @@ static void customSetterLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::customSetterLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void customSetterLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); V8TestObject::customSetterLongAttributeAttributeSetterCustom(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void customElementsCallbacksReadonlyLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2784,9 +2462,7 @@ static void customElementsCallbacksReadonlyLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::customElementsCallbacksReadonlyLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void deprecatedLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2798,10 +2474,8 @@ static void deprecatedLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); UseCounter::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::LongAttribute); TestObjectV8Internal::deprecatedLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void deprecatedLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2818,10 +2492,8 @@ static void deprecatedLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); UseCounter::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::LongAttribute); TestObjectV8Internal::deprecatedLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void enforceRangeLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2833,9 +2505,7 @@ static void enforceRangeLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::enforceRangeLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void enforceRangeLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2852,9 +2522,7 @@ static void enforceRangeLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::enforceRangeLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void experimentRuntimeEnabledLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2875,7 +2543,6 @@ static void experimentRuntimeEnabledLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String memberErrorMessage; if (!OriginTrials::featureNameEnabled(executionContext, memberErrorMessage)) { @@ -2886,7 +2553,6 @@ return; } TestObjectV8Internal::experimentRuntimeEnabledLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void experimentRuntimeEnabledLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2903,9 +2569,7 @@ static void experimentRuntimeEnabledLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::experimentRuntimeEnabledLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implementedAsLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2917,9 +2581,7 @@ static void implementedAsLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::implementedAsLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implementedAsLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2936,31 +2598,23 @@ static void implementedAsLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::implementedAsLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void customImplementedAsLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); V8TestObject::customImplementedAsLongAttributeAttributeGetterCustom(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void customImplementedAsLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); V8TestObject::customImplementedAsLongAttributeAttributeSetterCustom(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void customGetterImplementedAsLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); V8TestObject::customGetterImplementedAsLongAttributeAttributeGetterCustom(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void customGetterImplementedAsLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2977,9 +2631,7 @@ static void customGetterImplementedAsLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::customGetterImplementedAsLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void customSetterImplementedAsLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -2991,17 +2643,13 @@ static void customSetterImplementedAsLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::customSetterImplementedAsLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void customSetterImplementedAsLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); V8TestObject::customSetterImplementedAsLongAttributeAttributeSetterCustom(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void measureAsLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3013,10 +2661,8 @@ static void measureAsLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::TestFeature); TestObjectV8Internal::measureAsLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void measureAsLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3033,10 +2679,8 @@ static void measureAsLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::TestFeature); TestObjectV8Internal::measureAsLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void notEnumerableLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3048,9 +2692,7 @@ static void notEnumerableLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::notEnumerableLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void notEnumerableLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3067,9 +2709,7 @@ static void notEnumerableLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::notEnumerableLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3088,9 +2728,7 @@ static void perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3109,9 +2747,7 @@ static void perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterForMainWorld(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingAccessPerWorldBindingsLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3123,13 +2759,11 @@ static void activityLoggingAccessPerWorldBindingsLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ScriptState* scriptState = ScriptState::from(info.GetIsolate()->GetCurrentContext()); V8PerContextData* contextData = scriptState->perContextData(); if (contextData && contextData->activityLogger()) contextData->activityLogger()->logGetter("TestObject.activityLoggingAccessPerWorldBindingsLongAttribute"); TestObjectV8Internal::activityLoggingAccessPerWorldBindingsLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingAccessPerWorldBindingsLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3146,14 +2780,12 @@ static void activityLoggingAccessPerWorldBindingsLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); ScriptState* scriptState = ScriptState::from(info.GetIsolate()->GetCurrentContext()); V8PerContextData* contextData = scriptState->perContextData(); if (contextData && contextData->activityLogger()) { contextData->activityLogger()->logSetter("TestObject.activityLoggingAccessPerWorldBindingsLongAttribute", v8Value); } TestObjectV8Internal::activityLoggingAccessPerWorldBindingsLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingAccessPerWorldBindingsLongAttributeAttributeGetterForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3165,13 +2797,11 @@ static void activityLoggingAccessPerWorldBindingsLongAttributeAttributeGetterCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ScriptState* scriptState = ScriptState::from(info.GetIsolate()->GetCurrentContext()); V8PerContextData* contextData = scriptState->perContextData(); if (contextData && contextData->activityLogger()) contextData->activityLogger()->logGetter("TestObject.activityLoggingAccessPerWorldBindingsLongAttribute"); TestObjectV8Internal::activityLoggingAccessPerWorldBindingsLongAttributeAttributeGetterForMainWorld(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingAccessPerWorldBindingsLongAttributeAttributeSetterForMainWorld(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3188,14 +2818,12 @@ static void activityLoggingAccessPerWorldBindingsLongAttributeAttributeSetterCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); ScriptState* scriptState = ScriptState::from(info.GetIsolate()->GetCurrentContext()); V8PerContextData* contextData = scriptState->perContextData(); if (contextData && contextData->activityLogger()) { contextData->activityLogger()->logSetter("TestObject.activityLoggingAccessPerWorldBindingsLongAttribute", v8Value); } TestObjectV8Internal::activityLoggingAccessPerWorldBindingsLongAttributeAttributeSetterForMainWorld(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3207,13 +2835,11 @@ static void activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ScriptState* scriptState = ScriptState::from(info.GetIsolate()->GetCurrentContext()); V8PerContextData* contextData = scriptState->perContextData(); if (contextData && contextData->activityLogger()) contextData->activityLogger()->logGetter("TestObject.activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttribute"); TestObjectV8Internal::activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3230,14 +2856,12 @@ static void activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); ScriptState* scriptState = ScriptState::from(info.GetIsolate()->GetCurrentContext()); V8PerContextData* contextData = scriptState->perContextData(); if (contextData && contextData->activityLogger()) { contextData->activityLogger()->logSetter("TestObject.activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttribute", v8Value); } TestObjectV8Internal::activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3249,9 +2873,7 @@ static void activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterForMainWorld(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterForMainWorld(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3268,9 +2890,7 @@ static void activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterForMainWorld(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingGetterPerWorldBindingsLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3282,13 +2902,11 @@ static void activityLoggingGetterPerWorldBindingsLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ScriptState* scriptState = ScriptState::from(info.GetIsolate()->GetCurrentContext()); V8PerContextData* contextData = scriptState->perContextData(); if (contextData && contextData->activityLogger()) contextData->activityLogger()->logGetter("TestObject.activityLoggingGetterPerWorldBindingsLongAttribute"); TestObjectV8Internal::activityLoggingGetterPerWorldBindingsLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingGetterPerWorldBindingsLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3305,9 +2923,7 @@ static void activityLoggingGetterPerWorldBindingsLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::activityLoggingGetterPerWorldBindingsLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingGetterPerWorldBindingsLongAttributeAttributeGetterForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3319,13 +2935,11 @@ static void activityLoggingGetterPerWorldBindingsLongAttributeAttributeGetterCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ScriptState* scriptState = ScriptState::from(info.GetIsolate()->GetCurrentContext()); V8PerContextData* contextData = scriptState->perContextData(); if (contextData && contextData->activityLogger()) contextData->activityLogger()->logGetter("TestObject.activityLoggingGetterPerWorldBindingsLongAttribute"); TestObjectV8Internal::activityLoggingGetterPerWorldBindingsLongAttributeAttributeGetterForMainWorld(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingGetterPerWorldBindingsLongAttributeAttributeSetterForMainWorld(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3342,9 +2956,7 @@ static void activityLoggingGetterPerWorldBindingsLongAttributeAttributeSetterCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::activityLoggingGetterPerWorldBindingsLongAttributeAttributeSetterForMainWorld(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3356,13 +2968,11 @@ static void activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ScriptState* scriptState = ScriptState::from(info.GetIsolate()->GetCurrentContext()); V8PerContextData* contextData = scriptState->perContextData(); if (contextData && contextData->activityLogger()) contextData->activityLogger()->logGetter("TestObject.activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttribute"); TestObjectV8Internal::activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3379,9 +2989,7 @@ static void activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3393,9 +3001,7 @@ static void activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterForMainWorld(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterForMainWorld(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3412,9 +3018,7 @@ static void activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterForMainWorld(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3426,9 +3030,7 @@ static void locationAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::locationAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3447,9 +3049,7 @@ static void locationAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::locationAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationWithExceptionAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3461,9 +3061,7 @@ static void locationWithExceptionAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::locationWithExceptionAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationWithExceptionAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3484,9 +3082,7 @@ static void locationWithExceptionAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::locationWithExceptionAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationWithCallWithAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3498,9 +3094,7 @@ static void locationWithCallWithAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::locationWithCallWithAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationWithCallWithAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3520,9 +3114,7 @@ static void locationWithCallWithAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::locationWithCallWithAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationByteStringAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3534,9 +3126,7 @@ static void locationByteStringAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::locationByteStringAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationByteStringAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3556,9 +3146,7 @@ static void locationByteStringAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::locationByteStringAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationWithPerWorldBindingsAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3570,9 +3158,7 @@ static void locationWithPerWorldBindingsAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::locationWithPerWorldBindingsAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationWithPerWorldBindingsAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3591,9 +3177,7 @@ static void locationWithPerWorldBindingsAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::locationWithPerWorldBindingsAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationWithPerWorldBindingsAttributeGetterForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3605,9 +3189,7 @@ static void locationWithPerWorldBindingsAttributeGetterCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::locationWithPerWorldBindingsAttributeGetterForMainWorld(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationWithPerWorldBindingsAttributeSetterForMainWorld(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3626,9 +3208,7 @@ static void locationWithPerWorldBindingsAttributeSetterCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::locationWithPerWorldBindingsAttributeSetterForMainWorld(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationLegacyInterfaceTypeCheckingAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3640,9 +3220,7 @@ static void locationLegacyInterfaceTypeCheckingAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::locationLegacyInterfaceTypeCheckingAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationLegacyInterfaceTypeCheckingAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3661,9 +3239,7 @@ static void locationLegacyInterfaceTypeCheckingAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::locationLegacyInterfaceTypeCheckingAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationGarbageCollectedAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3682,9 +3258,7 @@ static void locationGarbageCollectedAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::locationGarbageCollectedAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationGarbageCollectedAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3707,9 +3281,7 @@ static void locationGarbageCollectedAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::locationGarbageCollectedAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationWillBeGarbageCollectedAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3728,9 +3300,7 @@ static void locationWillBeGarbageCollectedAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::locationWillBeGarbageCollectedAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationWillBeGarbageCollectedAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3753,9 +3323,7 @@ static void locationWillBeGarbageCollectedAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::locationWillBeGarbageCollectedAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void raisesExceptionLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3771,9 +3339,7 @@ static void raisesExceptionLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::raisesExceptionLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void raisesExceptionLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3791,9 +3357,7 @@ static void raisesExceptionLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::raisesExceptionLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void raisesExceptionGetterLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3809,9 +3373,7 @@ static void raisesExceptionGetterLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::raisesExceptionGetterLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void raisesExceptionGetterLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3828,9 +3390,7 @@ static void raisesExceptionGetterLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::raisesExceptionGetterLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void setterRaisesExceptionLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3842,9 +3402,7 @@ static void setterRaisesExceptionLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::setterRaisesExceptionLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void setterRaisesExceptionLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3862,9 +3420,7 @@ static void setterRaisesExceptionLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::setterRaisesExceptionLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void raisesExceptionTestInterfaceEmptyAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3880,9 +3436,7 @@ static void raisesExceptionTestInterfaceEmptyAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::raisesExceptionTestInterfaceEmptyAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void raisesExceptionTestInterfaceEmptyAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3903,9 +3457,7 @@ static void raisesExceptionTestInterfaceEmptyAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::raisesExceptionTestInterfaceEmptyAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void cachedAttributeRaisesExceptionGetterAnyAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3931,9 +3483,7 @@ static void cachedAttributeRaisesExceptionGetterAnyAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::cachedAttributeRaisesExceptionGetterAnyAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void cachedAttributeRaisesExceptionGetterAnyAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3950,9 +3500,7 @@ static void cachedAttributeRaisesExceptionGetterAnyAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::cachedAttributeRaisesExceptionGetterAnyAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectTestInterfaceAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3964,9 +3512,7 @@ static void reflectTestInterfaceAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::reflectTestInterfaceAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectTestInterfaceAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -3987,10 +3533,8 @@ static void reflectTestInterfaceAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestObjectV8Internal::reflectTestInterfaceAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectReflectedNameAttributeTestAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4002,9 +3546,7 @@ static void reflectReflectedNameAttributeTestAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::reflectReflectedNameAttributeTestAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectReflectedNameAttributeTestAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4025,10 +3567,8 @@ static void reflectReflectedNameAttributeTestAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestObjectV8Internal::reflectReflectedNameAttributeTestAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectBooleanAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4040,9 +3580,7 @@ static void reflectBooleanAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::reflectBooleanAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectBooleanAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4060,10 +3598,8 @@ static void reflectBooleanAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestObjectV8Internal::reflectBooleanAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4075,9 +3611,7 @@ static void reflectLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::reflectLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4095,10 +3629,8 @@ static void reflectLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestObjectV8Internal::reflectLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectUnsignedShortAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4110,9 +3642,7 @@ static void reflectUnsignedShortAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::reflectUnsignedShortAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectUnsignedShortAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4130,10 +3660,8 @@ static void reflectUnsignedShortAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestObjectV8Internal::reflectUnsignedShortAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectUnsignedLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4145,9 +3673,7 @@ static void reflectUnsignedLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::reflectUnsignedLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectUnsignedLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4165,10 +3691,8 @@ static void reflectUnsignedLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestObjectV8Internal::reflectUnsignedLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void idAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4180,9 +3704,7 @@ static void idAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::idAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void idAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4199,10 +3721,8 @@ static void idAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestObjectV8Internal::idAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void nameAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4214,9 +3734,7 @@ static void nameAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::nameAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void nameAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4233,10 +3751,8 @@ static void nameAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestObjectV8Internal::nameAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void classAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4248,9 +3764,7 @@ static void classAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::classAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void classAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4267,10 +3781,8 @@ static void classAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestObjectV8Internal::classAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectedIdAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4282,9 +3794,7 @@ static void reflectedIdAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::reflectedIdAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectedIdAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4301,10 +3811,8 @@ static void reflectedIdAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestObjectV8Internal::reflectedIdAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectedNameAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4316,9 +3824,7 @@ static void reflectedNameAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::reflectedNameAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectedNameAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4335,10 +3841,8 @@ static void reflectedNameAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestObjectV8Internal::reflectedNameAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectedClassAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4350,9 +3854,7 @@ static void reflectedClassAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::reflectedClassAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void reflectedClassAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4369,10 +3871,8 @@ static void reflectedClassAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestObjectV8Internal::reflectedClassAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void limitedToOnlyOneAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4392,9 +3892,7 @@ static void limitedToOnlyOneAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::limitedToOnlyOneAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void limitedToOnlyOneAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4411,10 +3909,8 @@ static void limitedToOnlyOneAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestObjectV8Internal::limitedToOnlyOneAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void limitedToOnlyAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4438,9 +3934,7 @@ static void limitedToOnlyAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::limitedToOnlyAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void limitedToOnlyAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4457,10 +3951,8 @@ static void limitedToOnlyAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestObjectV8Internal::limitedToOnlyAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void limitedToOnlyOtherAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4482,9 +3974,7 @@ static void limitedToOnlyOtherAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::limitedToOnlyOtherAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void limitedToOnlyOtherAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4501,10 +3991,8 @@ static void limitedToOnlyOtherAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestObjectV8Internal::limitedToOnlyOtherAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void limitedWithMissingDefaultAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4526,9 +4014,7 @@ static void limitedWithMissingDefaultAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::limitedWithMissingDefaultAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void limitedWithMissingDefaultAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4545,10 +4031,8 @@ static void limitedWithMissingDefaultAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestObjectV8Internal::limitedWithMissingDefaultAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void limitedWithInvalidMissingDefaultAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4572,9 +4056,7 @@ static void limitedWithInvalidMissingDefaultAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::limitedWithInvalidMissingDefaultAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void limitedWithInvalidMissingDefaultAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4591,10 +4073,8 @@ static void limitedWithInvalidMissingDefaultAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestObjectV8Internal::limitedWithInvalidMissingDefaultAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void corsSettingAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4618,9 +4098,7 @@ static void corsSettingAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::corsSettingAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void limitedWithEmptyMissingInvalidAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4648,9 +4126,7 @@ static void limitedWithEmptyMissingInvalidAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::limitedWithEmptyMissingInvalidAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void replaceableReadonlyLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4662,9 +4138,7 @@ static void replaceableReadonlyLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::replaceableReadonlyLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void replaceableReadonlyLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4676,9 +4150,7 @@ static void replaceableReadonlyLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::replaceableReadonlyLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationPutForwardsAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4690,9 +4162,7 @@ static void locationPutForwardsAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::locationPutForwardsAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void locationPutForwardsAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4711,9 +4181,7 @@ static void locationPutForwardsAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::locationPutForwardsAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void runtimeEnabledLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4725,9 +4193,7 @@ static void runtimeEnabledLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::runtimeEnabledLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void runtimeEnabledLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4744,9 +4210,7 @@ static void runtimeEnabledLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::runtimeEnabledLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void setterCallWithActiveWindowAndFirstWindowStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4758,9 +4222,7 @@ static void setterCallWithActiveWindowAndFirstWindowStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::setterCallWithActiveWindowAndFirstWindowStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void setterCallWithActiveWindowAndFirstWindowStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4776,9 +4238,7 @@ static void setterCallWithActiveWindowAndFirstWindowStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::setterCallWithActiveWindowAndFirstWindowStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void setterCallWithExecutionContextStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4790,9 +4250,7 @@ static void setterCallWithExecutionContextStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::setterCallWithExecutionContextStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void setterCallWithExecutionContextStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4809,9 +4267,7 @@ static void setterCallWithExecutionContextStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::setterCallWithExecutionContextStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatNullAsEmptyStringStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4823,9 +4279,7 @@ static void treatNullAsEmptyStringStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::treatNullAsEmptyStringStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatNullAsEmptyStringStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4841,9 +4295,7 @@ static void treatNullAsEmptyStringStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::treatNullAsEmptyStringStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatNullAsNullStringStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4855,9 +4307,7 @@ static void treatNullAsNullStringStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::treatNullAsNullStringStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatNullAsNullStringStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4873,9 +4323,7 @@ static void treatNullAsNullStringStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::treatNullAsNullStringStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatReturnedNullStringAsNullStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4887,9 +4335,7 @@ static void treatReturnedNullStringAsNullStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::treatReturnedNullStringAsNullStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatReturnedNullStringAsNullStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4905,9 +4351,7 @@ static void treatReturnedNullStringAsNullStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::treatReturnedNullStringAsNullStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatReturnedNullStringAsUndefinedStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4919,9 +4363,7 @@ static void treatReturnedNullStringAsUndefinedStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::treatReturnedNullStringAsUndefinedStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatReturnedNullStringAsUndefinedStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4937,9 +4379,7 @@ static void treatReturnedNullStringAsUndefinedStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::treatReturnedNullStringAsUndefinedStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void cachedTreatReturnedNullStringAsUndefinedStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4962,9 +4402,7 @@ static void cachedTreatReturnedNullStringAsUndefinedStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::cachedTreatReturnedNullStringAsUndefinedStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void cachedTreatReturnedNullStringAsUndefinedStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4981,9 +4419,7 @@ static void cachedTreatReturnedNullStringAsUndefinedStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::cachedTreatReturnedNullStringAsUndefinedStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatReturnedNullStringAsNullByteStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -4995,9 +4431,7 @@ static void treatReturnedNullStringAsNullByteStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::treatReturnedNullStringAsNullByteStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatReturnedNullStringAsNullByteStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5014,9 +4448,7 @@ static void treatReturnedNullStringAsNullByteStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::treatReturnedNullStringAsNullByteStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatReturnedNullStringAsUndefinedByteStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5028,9 +4460,7 @@ static void treatReturnedNullStringAsUndefinedByteStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::treatReturnedNullStringAsUndefinedByteStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatReturnedNullStringAsUndefinedByteStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5047,9 +4477,7 @@ static void treatReturnedNullStringAsUndefinedByteStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::treatReturnedNullStringAsUndefinedByteStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatReturnedNullStringAsNullUSVStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5061,9 +4489,7 @@ static void treatReturnedNullStringAsNullUSVStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::treatReturnedNullStringAsNullUSVStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatReturnedNullStringAsNullUSVStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5080,9 +4506,7 @@ static void treatReturnedNullStringAsNullUSVStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::treatReturnedNullStringAsNullUSVStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatReturnedNullStringAsUndefinedUSVStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5094,9 +4518,7 @@ static void treatReturnedNullStringAsUndefinedUSVStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::treatReturnedNullStringAsUndefinedUSVStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatReturnedNullStringAsUndefinedUSVStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5113,9 +4535,7 @@ static void treatReturnedNullStringAsUndefinedUSVStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::treatReturnedNullStringAsUndefinedUSVStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void legacyInterfaceTypeCheckingFloatAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5127,9 +4547,7 @@ static void legacyInterfaceTypeCheckingFloatAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::legacyInterfaceTypeCheckingFloatAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void legacyInterfaceTypeCheckingFloatAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5146,9 +4564,7 @@ static void legacyInterfaceTypeCheckingFloatAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::legacyInterfaceTypeCheckingFloatAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void legacyInterfaceTypeCheckingTestInterfaceAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5160,9 +4576,7 @@ static void legacyInterfaceTypeCheckingTestInterfaceAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::legacyInterfaceTypeCheckingTestInterfaceAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void legacyInterfaceTypeCheckingTestInterfaceAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5176,9 +4590,7 @@ static void legacyInterfaceTypeCheckingTestInterfaceAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::legacyInterfaceTypeCheckingTestInterfaceAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void legacyInterfaceTypeCheckingTestInterfaceOrNullAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5190,9 +4602,7 @@ static void legacyInterfaceTypeCheckingTestInterfaceOrNullAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::legacyInterfaceTypeCheckingTestInterfaceOrNullAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void legacyInterfaceTypeCheckingTestInterfaceOrNullAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5206,9 +4616,7 @@ static void legacyInterfaceTypeCheckingTestInterfaceOrNullAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::legacyInterfaceTypeCheckingTestInterfaceOrNullAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void urlStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5220,9 +4628,7 @@ static void urlStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::urlStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void urlStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5239,10 +4645,8 @@ static void urlStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestObjectV8Internal::urlStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void urlStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5254,9 +4658,7 @@ static void urlStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::urlStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void urlStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5273,10 +4675,8 @@ static void urlStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); CustomElementProcessingStack::CallbackDeliveryScope deliveryScope; TestObjectV8Internal::urlStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unforgeableLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5288,9 +4688,7 @@ static void unforgeableLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::unforgeableLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unforgeableLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5307,9 +4705,7 @@ static void unforgeableLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::unforgeableLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void measuredLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5321,10 +4717,8 @@ static void measuredLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::V8TestObject_MeasuredLongAttribute_AttributeGetter); TestObjectV8Internal::measuredLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void measuredLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5341,10 +4735,8 @@ static void measuredLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::V8TestObject_MeasuredLongAttribute_AttributeSetter); TestObjectV8Internal::measuredLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void sameObjectAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5356,9 +4748,7 @@ static void sameObjectAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::sameObjectAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void sameObjectAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5378,9 +4768,7 @@ static void sameObjectAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::sameObjectAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unscopeableLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5392,9 +4780,7 @@ static void unscopeableLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::unscopeableLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unscopeableLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5411,9 +4797,7 @@ static void unscopeableLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::unscopeableLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unscopeableExperimentEnabledLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5434,7 +4818,6 @@ static void unscopeableExperimentEnabledLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String memberErrorMessage; if (!OriginTrials::featureNameEnabled(executionContext, memberErrorMessage)) { @@ -5445,7 +4828,6 @@ return; } TestObjectV8Internal::unscopeableExperimentEnabledLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unscopeableExperimentEnabledLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5462,9 +4844,7 @@ static void unscopeableExperimentEnabledLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::unscopeableExperimentEnabledLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unscopeableRuntimeEnabledLongAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5476,9 +4856,7 @@ static void unscopeableRuntimeEnabledLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::unscopeableRuntimeEnabledLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unscopeableRuntimeEnabledLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5495,9 +4873,7 @@ static void unscopeableRuntimeEnabledLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::unscopeableRuntimeEnabledLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5509,9 +4885,7 @@ static void testInterfaceAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::testInterfaceAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5531,9 +4905,7 @@ static void testInterfaceAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::testInterfaceAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceGarbageCollectedAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5545,9 +4917,7 @@ static void testInterfaceGarbageCollectedAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::testInterfaceGarbageCollectedAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceGarbageCollectedAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5567,9 +4937,7 @@ static void testInterfaceGarbageCollectedAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::testInterfaceGarbageCollectedAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceGarbageCollectedOrNullAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5581,9 +4949,7 @@ static void testInterfaceGarbageCollectedOrNullAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::testInterfaceGarbageCollectedOrNullAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceGarbageCollectedOrNullAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5603,9 +4969,7 @@ static void testInterfaceGarbageCollectedOrNullAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::testInterfaceGarbageCollectedOrNullAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceWillBeGarbageCollectedAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5617,9 +4981,7 @@ static void testInterfaceWillBeGarbageCollectedAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::testInterfaceWillBeGarbageCollectedAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceWillBeGarbageCollectedAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5639,9 +5001,7 @@ static void testInterfaceWillBeGarbageCollectedAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::testInterfaceWillBeGarbageCollectedAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceWillBeGarbageCollectedOrNullAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5653,9 +5013,7 @@ static void testInterfaceWillBeGarbageCollectedOrNullAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::testInterfaceWillBeGarbageCollectedOrNullAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceWillBeGarbageCollectedOrNullAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5675,9 +5033,7 @@ static void testInterfaceWillBeGarbageCollectedOrNullAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::testInterfaceWillBeGarbageCollectedOrNullAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void readonlyShortAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5692,9 +5048,7 @@ static void readonlyShortAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::readonlyShortAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void shortAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5709,9 +5063,7 @@ static void shortAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::shortAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void shortAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5728,9 +5080,7 @@ static void shortAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::shortAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5745,9 +5095,7 @@ static void stringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::stringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5763,9 +5111,7 @@ static void stringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::stringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void nodeAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5780,9 +5126,7 @@ static void nodeAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::nodeAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void nodeAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5802,9 +5146,7 @@ static void nodeAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::nodeAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void attributeImplementedInCPPForPrivateScriptOnlyAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5816,9 +5158,7 @@ static void attributeImplementedInCPPForPrivateScriptOnlyAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::attributeImplementedInCPPForPrivateScriptOnlyAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void attributeImplementedInCPPForPrivateScriptOnlyAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5834,9 +5174,7 @@ static void attributeImplementedInCPPForPrivateScriptOnlyAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::attributeImplementedInCPPForPrivateScriptOnlyAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void enumForPrivateScriptAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5851,9 +5189,7 @@ static void enumForPrivateScriptAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestObjectV8Internal::enumForPrivateScriptAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void enumForPrivateScriptAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5880,25 +5216,19 @@ static void enumForPrivateScriptAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestObjectV8Internal::enumForPrivateScriptAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceEmptyConstructorAttributeConstructorGetterCallback(v8::Local<v8::Name> property, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); UseCounter::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::deprecatedTestInterfaceEmptyConstructorAttribute); v8ConstructorAttributeGetter(property, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void measureAsFeatureNameTestInterfaceEmptyConstructorAttributeConstructorGetterCallback(v8::Local<v8::Name> property, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::FeatureName); v8ConstructorAttributeGetter(property, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unscopeableVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5909,9 +5239,7 @@ static void unscopeableVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::unscopeableVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unscopeableRuntimeEnabledVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5922,9 +5250,7 @@ static void unscopeableRuntimeEnabledVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::unscopeableRuntimeEnabledVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5935,9 +5261,7 @@ static void voidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void staticVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5947,9 +5271,7 @@ static void staticVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::staticVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void dateMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5960,9 +5282,7 @@ static void dateMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::dateMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5973,9 +5293,7 @@ static void stringMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::stringMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void byteStringMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5986,9 +5304,7 @@ static void byteStringMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::byteStringMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void usvStringMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -5999,9 +5315,7 @@ static void usvStringMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::usvStringMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void readonlyDOMTimeStampMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6012,9 +5326,7 @@ static void readonlyDOMTimeStampMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::readonlyDOMTimeStampMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void booleanMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6025,9 +5337,7 @@ static void booleanMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::booleanMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void byteMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6038,9 +5348,7 @@ static void byteMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::byteMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doubleMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6051,9 +5359,7 @@ static void doubleMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::doubleMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void floatMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6064,9 +5370,7 @@ static void floatMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::floatMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void longMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6077,9 +5381,7 @@ static void longMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::longMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void longLongMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6090,9 +5392,7 @@ static void longLongMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::longLongMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void octetMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6103,9 +5403,7 @@ static void octetMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::octetMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void shortMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6116,9 +5414,7 @@ static void shortMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::shortMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unsignedLongMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6129,9 +5425,7 @@ static void unsignedLongMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::unsignedLongMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unsignedLongLongMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6142,9 +5436,7 @@ static void unsignedLongLongMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::unsignedLongLongMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unsignedShortMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6155,9 +5447,7 @@ static void unsignedShortMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::unsignedShortMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDateArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6176,9 +5466,7 @@ static void voidMethodDateArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDateArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6199,9 +5487,7 @@ static void voidMethodStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodByteStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6224,9 +5510,7 @@ static void voidMethodByteStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodByteStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodUSVStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6249,9 +5533,7 @@ static void voidMethodUSVStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodUSVStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDOMTimeStampArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6274,9 +5556,7 @@ static void voidMethodDOMTimeStampArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDOMTimeStampArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodBooleanArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6299,9 +5579,7 @@ static void voidMethodBooleanArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodBooleanArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodByteArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6324,9 +5602,7 @@ static void voidMethodByteArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodByteArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDoubleArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6349,9 +5625,7 @@ static void voidMethodDoubleArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDoubleArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodFloatArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6374,9 +5648,7 @@ static void voidMethodFloatArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodFloatArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6399,9 +5671,7 @@ static void voidMethodLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodLongLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6424,9 +5694,7 @@ static void voidMethodLongLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodLongLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodOctetArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6449,9 +5717,7 @@ static void voidMethodOctetArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodOctetArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodShortArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6474,9 +5740,7 @@ static void voidMethodShortArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodShortArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodUnsignedLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6499,9 +5763,7 @@ static void voidMethodUnsignedLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodUnsignedLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodUnsignedLongLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6524,9 +5786,7 @@ static void voidMethodUnsignedLongLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodUnsignedLongLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodUnsignedShortArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6549,9 +5809,7 @@ static void voidMethodUnsignedShortArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodUnsignedShortArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceEmptyMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6562,9 +5820,7 @@ static void testInterfaceEmptyMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::testInterfaceEmptyMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodTestInterfaceEmptyArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6587,9 +5843,7 @@ static void voidMethodTestInterfaceEmptyArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodTestInterfaceEmptyArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodLongArgTestInterfaceEmptyArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6619,9 +5873,7 @@ static void voidMethodLongArgTestInterfaceEmptyArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodLongArgTestInterfaceEmptyArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidCallbackFunctionMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6632,9 +5884,7 @@ static void voidCallbackFunctionMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidCallbackFunctionMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void anyCallbackFunctionOptionalAnyArgMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6645,9 +5895,7 @@ static void anyCallbackFunctionOptionalAnyArgMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::anyCallbackFunctionOptionalAnyArgMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodVoidCallbackFunctionArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6670,9 +5918,7 @@ static void voidMethodVoidCallbackFunctionArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodVoidCallbackFunctionArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodOptionalVoidCallbackFunctionArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6701,9 +5947,7 @@ static void voidMethodOptionalVoidCallbackFunctionArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodOptionalVoidCallbackFunctionArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodNullableVoidCallbackFunctionArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6726,9 +5970,7 @@ static void voidMethodNullableVoidCallbackFunctionArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodNullableVoidCallbackFunctionArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodAnyCallbackFunctionOptionalAnyArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6751,9 +5993,7 @@ static void voidMethodAnyCallbackFunctionOptionalAnyArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodAnyCallbackFunctionOptionalAnyArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void anyMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6764,9 +6004,7 @@ static void anyMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::anyMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodEventTargetArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6789,9 +6027,7 @@ static void voidMethodEventTargetArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodEventTargetArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodAnyArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6810,9 +6046,7 @@ static void voidMethodAnyArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodAnyArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodAttrArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6835,9 +6069,7 @@ static void voidMethodAttrArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodAttrArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDocumentArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6860,9 +6092,7 @@ static void voidMethodDocumentArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDocumentArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDocumentTypeArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6885,9 +6115,7 @@ static void voidMethodDocumentTypeArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDocumentTypeArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodElementArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6910,9 +6138,7 @@ static void voidMethodElementArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodElementArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodNodeArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6935,9 +6161,7 @@ static void voidMethodNodeArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodNodeArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void arrayBufferMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6948,9 +6172,7 @@ static void arrayBufferMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::arrayBufferMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void arrayBufferViewMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6961,9 +6183,7 @@ static void arrayBufferViewMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::arrayBufferViewMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void float32ArrayMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6974,9 +6194,7 @@ static void float32ArrayMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::float32ArrayMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void int32ArrayMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -6987,9 +6205,7 @@ static void int32ArrayMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::int32ArrayMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void uint8ArrayMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7000,9 +6216,7 @@ static void uint8ArrayMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::uint8ArrayMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodArrayBufferArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7025,9 +6239,7 @@ static void voidMethodArrayBufferArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodArrayBufferArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodArrayBufferOrNullArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7050,9 +6262,7 @@ static void voidMethodArrayBufferOrNullArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodArrayBufferOrNullArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodArrayBufferViewArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7075,9 +6285,7 @@ static void voidMethodArrayBufferViewArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodArrayBufferViewArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodFlexibleArrayBufferViewArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7100,9 +6308,7 @@ static void voidMethodFlexibleArrayBufferViewArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodFlexibleArrayBufferViewArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodFlexibleArrayBufferViewTypedArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7125,9 +6331,7 @@ static void voidMethodFlexibleArrayBufferViewTypedArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodFlexibleArrayBufferViewTypedArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodFloat32ArrayArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7150,9 +6354,7 @@ static void voidMethodFloat32ArrayArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodFloat32ArrayArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodInt32ArrayArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7175,9 +6377,7 @@ static void voidMethodInt32ArrayArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodInt32ArrayArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodUint8ArrayArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7200,9 +6400,7 @@ static void voidMethodUint8ArrayArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodUint8ArrayArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void longArrayMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7213,9 +6411,7 @@ static void longArrayMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::longArrayMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringArrayMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7226,9 +6422,7 @@ static void stringArrayMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::stringArrayMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceEmptyArrayMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7239,9 +6433,7 @@ static void testInterfaceEmptyArrayMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::testInterfaceEmptyArrayMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodArrayLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7264,9 +6456,7 @@ static void voidMethodArrayLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodArrayLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodArrayStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7289,9 +6479,7 @@ static void voidMethodArrayStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodArrayStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodArrayTestInterfaceEmptyArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7314,9 +6502,7 @@ static void voidMethodArrayTestInterfaceEmptyArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodArrayTestInterfaceEmptyArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodNullableArrayLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7341,9 +6527,7 @@ static void voidMethodNullableArrayLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodNullableArrayLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void longSequenceMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7354,9 +6538,7 @@ static void longSequenceMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::longSequenceMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringSequenceMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7367,9 +6549,7 @@ static void stringSequenceMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::stringSequenceMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceEmptySequenceMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7380,9 +6560,7 @@ static void testInterfaceEmptySequenceMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::testInterfaceEmptySequenceMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodSequenceLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7405,9 +6583,7 @@ static void voidMethodSequenceLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodSequenceLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodSequenceStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7430,9 +6606,7 @@ static void voidMethodSequenceStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodSequenceStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodSequenceTestInterfaceEmptyArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7455,9 +6629,7 @@ static void voidMethodSequenceTestInterfaceEmptyArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodSequenceTestInterfaceEmptyArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodSequenceSequenceDOMStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7480,9 +6652,7 @@ static void voidMethodSequenceSequenceDOMStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodSequenceSequenceDOMStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodNullableSequenceLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7507,9 +6677,7 @@ static void voidMethodNullableSequenceLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodNullableSequenceLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void nullableLongMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7524,9 +6692,7 @@ static void nullableLongMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::nullableLongMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void nullableStringMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7537,9 +6703,7 @@ static void nullableStringMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::nullableStringMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void nullableTestInterfaceMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7550,9 +6714,7 @@ static void nullableTestInterfaceMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::nullableTestInterfaceMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void nullableLongSequenceMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7567,9 +6729,7 @@ static void nullableLongSequenceMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::nullableLongSequenceMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceGarbageCollectedOrDOMStringMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7582,9 +6742,7 @@ static void testInterfaceGarbageCollectedOrDOMStringMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::testInterfaceGarbageCollectedOrDOMStringMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceWillBeGarbageCollectedOrTestDictionaryMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7597,9 +6755,7 @@ static void testInterfaceWillBeGarbageCollectedOrTestDictionaryMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::testInterfaceWillBeGarbageCollectedOrTestDictionaryMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void booleanOrDOMStringOrUnrestrictedDoubleMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7612,9 +6768,7 @@ static void booleanOrDOMStringOrUnrestrictedDoubleMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::booleanOrDOMStringOrUnrestrictedDoubleMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceOrLongMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7627,9 +6781,7 @@ static void testInterfaceOrLongMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::testInterfaceOrLongMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDoubleOrDOMStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7652,9 +6804,7 @@ static void voidMethodDoubleOrDOMStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDoubleOrDOMStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDoubleOrDOMStringOrNullArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7677,9 +6827,7 @@ static void voidMethodDoubleOrDOMStringOrNullArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDoubleOrDOMStringOrNullArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDoubleOrNullOrDOMStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7702,9 +6850,7 @@ static void voidMethodDoubleOrNullOrDOMStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDoubleOrNullOrDOMStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDOMStringOrArrayBufferOrArrayBufferViewArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7727,9 +6873,7 @@ static void voidMethodDOMStringOrArrayBufferOrArrayBufferViewArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDOMStringOrArrayBufferOrArrayBufferViewArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodArrayBufferOrArrayBufferViewOrDictionaryArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7752,9 +6896,7 @@ static void voidMethodArrayBufferOrArrayBufferViewOrDictionaryArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodArrayBufferOrArrayBufferViewOrDictionaryArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodArrayOfDoubleOrDOMStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7772,9 +6914,7 @@ static void voidMethodArrayOfDoubleOrDOMStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodArrayOfDoubleOrDOMStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodTestInterfaceEmptyOrNullArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7797,9 +6937,7 @@ static void voidMethodTestInterfaceEmptyOrNullArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodTestInterfaceEmptyOrNullArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodTestCallbackInterfaceArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7822,9 +6960,7 @@ static void voidMethodTestCallbackInterfaceArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodTestCallbackInterfaceArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodOptionalTestCallbackInterfaceArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7847,9 +6983,7 @@ static void voidMethodOptionalTestCallbackInterfaceArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodOptionalTestCallbackInterfaceArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodTestCallbackInterfaceOrNullArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7872,9 +7006,7 @@ static void voidMethodTestCallbackInterfaceOrNullArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodTestCallbackInterfaceOrNullArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testEnumMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7885,9 +7017,7 @@ static void testEnumMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::testEnumMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodTestEnumArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7920,9 +7050,7 @@ static void voidMethodTestEnumArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodTestEnumArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void dictionaryMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7933,9 +7061,7 @@ static void dictionaryMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::dictionaryMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testDictionaryMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7948,9 +7074,7 @@ static void testDictionaryMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::testDictionaryMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void nullableTestDictionaryMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7966,9 +7090,7 @@ static void nullableTestDictionaryMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::nullableTestDictionaryMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void passPermissiveDictionaryMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7986,9 +7108,7 @@ static void passPermissiveDictionaryMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::passPermissiveDictionaryMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void nodeFilterMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -7999,9 +7119,7 @@ static void nodeFilterMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::nodeFilterMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void promiseMethodMethodPromise(const v8::FunctionCallbackInfo<v8::Value>& info, ExceptionState& exceptionState) @@ -8046,9 +7164,7 @@ static void promiseMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::promiseMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void promiseMethodWithoutExceptionStateMethodPromise(const v8::FunctionCallbackInfo<v8::Value>& info, ExceptionState& exceptionState) @@ -8081,9 +7197,7 @@ static void promiseMethodWithoutExceptionStateMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::promiseMethodWithoutExceptionStateMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void serializedScriptValueMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8094,9 +7208,7 @@ static void serializedScriptValueMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::serializedScriptValueMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void xPathNSResolverMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8107,9 +7219,7 @@ static void xPathNSResolverMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::xPathNSResolverMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDictionaryArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8137,9 +7247,7 @@ static void voidMethodDictionaryArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDictionaryArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodNodeFilterArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8158,9 +7266,7 @@ static void voidMethodNodeFilterArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodNodeFilterArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodPromiseArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8183,9 +7289,7 @@ static void voidMethodPromiseArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodPromiseArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodSerializedScriptValueArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8208,9 +7312,7 @@ static void voidMethodSerializedScriptValueArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodSerializedScriptValueArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodXPathNSResolverArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8233,9 +7335,7 @@ static void voidMethodXPathNSResolverArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodXPathNSResolverArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDictionarySequenceArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8258,9 +7358,7 @@ static void voidMethodDictionarySequenceArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDictionarySequenceArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodStringArgLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8287,9 +7385,7 @@ static void voidMethodStringArgLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodStringArgLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodOptionalStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8316,9 +7412,7 @@ static void voidMethodOptionalStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodOptionalStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodOptionalTestInterfaceEmptyArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8347,9 +7441,7 @@ static void voidMethodOptionalTestInterfaceEmptyArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodOptionalTestInterfaceEmptyArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodOptionalLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8377,9 +7469,7 @@ static void voidMethodOptionalLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodOptionalLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringMethodOptionalLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8407,9 +7497,7 @@ static void stringMethodOptionalLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::stringMethodOptionalLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceEmptyMethodOptionalLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8437,9 +7525,7 @@ static void testInterfaceEmptyMethodOptionalLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::testInterfaceEmptyMethodOptionalLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void longMethodOptionalLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8467,9 +7553,7 @@ static void longMethodOptionalLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::longMethodOptionalLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodLongArgOptionalLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8506,9 +7590,7 @@ static void voidMethodLongArgOptionalLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodLongArgOptionalLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodLongArgOptionalLongArgOptionalLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8553,9 +7635,7 @@ static void voidMethodLongArgOptionalLongArgOptionalLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodLongArgOptionalLongArgOptionalLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodLongArgOptionalTestInterfaceEmptyArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8595,9 +7675,7 @@ static void voidMethodLongArgOptionalTestInterfaceEmptyArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodLongArgOptionalTestInterfaceEmptyArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodTestInterfaceEmptyArgOptionalLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8637,9 +7715,7 @@ static void voidMethodTestInterfaceEmptyArgOptionalLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodTestInterfaceEmptyArgOptionalLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodOptionalDictionaryArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8662,9 +7738,7 @@ static void voidMethodOptionalDictionaryArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodOptionalDictionaryArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDefaultByteStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8686,9 +7760,7 @@ static void voidMethodDefaultByteStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDefaultByteStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDefaultStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8709,9 +7781,7 @@ static void voidMethodDefaultStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDefaultStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDefaultIntegerArgsMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8749,9 +7819,7 @@ static void voidMethodDefaultIntegerArgsMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDefaultIntegerArgsMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDefaultDoubleArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8773,9 +7841,7 @@ static void voidMethodDefaultDoubleArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDefaultDoubleArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDefaultTrueBooleanArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8797,9 +7863,7 @@ static void voidMethodDefaultTrueBooleanArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDefaultTrueBooleanArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDefaultFalseBooleanArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8821,9 +7885,7 @@ static void voidMethodDefaultFalseBooleanArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDefaultFalseBooleanArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDefaultNullableByteStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8845,9 +7907,7 @@ static void voidMethodDefaultNullableByteStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDefaultNullableByteStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDefaultNullableStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8868,9 +7928,7 @@ static void voidMethodDefaultNullableStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDefaultNullableStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDefaultNullableTestInterfaceArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8893,9 +7951,7 @@ static void voidMethodDefaultNullableTestInterfaceArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDefaultNullableTestInterfaceArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDefaultDoubleOrStringArgsMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8933,9 +7989,7 @@ static void voidMethodDefaultDoubleOrStringArgsMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDefaultDoubleOrStringArgsMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDefaultStringSequenceArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8957,9 +8011,7 @@ static void voidMethodDefaultStringSequenceArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDefaultStringSequenceArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodVariadicStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -8977,9 +8029,7 @@ static void voidMethodVariadicStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodVariadicStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodStringArgVariadicStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -9006,9 +8056,7 @@ static void voidMethodStringArgVariadicStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodStringArgVariadicStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodVariadicTestInterfaceEmptyArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -9031,9 +8079,7 @@ static void voidMethodVariadicTestInterfaceEmptyArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodVariadicTestInterfaceEmptyArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodTestInterfaceEmptyArgVariadicTestInterfaceEmptyArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -9068,9 +8114,7 @@ static void voidMethodTestInterfaceEmptyArgVariadicTestInterfaceEmptyArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodTestInterfaceEmptyArgVariadicTestInterfaceEmptyArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodVariadicTestInterfaceGarbageCollectedArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -9093,9 +8137,7 @@ static void voidMethodVariadicTestInterfaceGarbageCollectedArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodVariadicTestInterfaceGarbageCollectedArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodVariadicTestInterfaceWillBeGarbageCollectedArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -9118,9 +8160,7 @@ static void voidMethodVariadicTestInterfaceWillBeGarbageCollectedArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodVariadicTestInterfaceWillBeGarbageCollectedArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void overloadedMethodA1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -9184,9 +8224,7 @@ static void overloadedMethodAMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::overloadedMethodAMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void overloadedMethodB1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -9268,9 +8306,7 @@ static void overloadedMethodBMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::overloadedMethodBMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void overloadedMethodC1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -9329,9 +8365,7 @@ static void overloadedMethodCMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::overloadedMethodCMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void overloadedMethodD1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -9389,9 +8423,7 @@ static void overloadedMethodDMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::overloadedMethodDMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void overloadedMethodE1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -9454,9 +8486,7 @@ static void overloadedMethodEMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::overloadedMethodEMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void overloadedMethodF1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -9532,9 +8562,7 @@ static void overloadedMethodFMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::overloadedMethodFMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void overloadedMethodG1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -9606,9 +8634,7 @@ static void overloadedMethodGMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::overloadedMethodGMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void overloadedMethodH1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -9668,9 +8694,7 @@ static void overloadedMethodHMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::overloadedMethodHMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void overloadedMethodI1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -9731,9 +8755,7 @@ static void overloadedMethodIMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::overloadedMethodIMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void overloadedMethodJ1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -9795,9 +8817,7 @@ static void overloadedMethodJMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::overloadedMethodJMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void overloadedMethodK1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -9855,9 +8875,7 @@ static void overloadedMethodKMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::overloadedMethodKMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void overloadedMethodL1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -9941,9 +8959,7 @@ static void overloadedMethodLMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::overloadedMethodLMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void promiseOverloadMethod1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10039,9 +9055,7 @@ static void promiseOverloadMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::promiseOverloadMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void overloadedPerWorldBindingsMethod1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10095,9 +9109,7 @@ static void overloadedPerWorldBindingsMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::overloadedPerWorldBindingsMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void overloadedPerWorldBindingsMethod2MethodForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10139,9 +9151,7 @@ static void overloadedPerWorldBindingsMethodMethodCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::overloadedPerWorldBindingsMethodMethodForMainWorld(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void overloadedStaticMethod1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10203,9 +9213,7 @@ static void overloadedStaticMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::overloadedStaticMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void itemMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10230,9 +9238,7 @@ static void itemMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::itemMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void setItemMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10261,9 +9267,7 @@ static void setItemMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::setItemMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodClampUnsignedShortArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10286,9 +9290,7 @@ static void voidMethodClampUnsignedShortArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodClampUnsignedShortArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodClampUnsignedLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10311,9 +9313,7 @@ static void voidMethodClampUnsignedLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodClampUnsignedLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDefaultUndefinedTestInterfaceEmptyArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10332,9 +9332,7 @@ static void voidMethodDefaultUndefinedTestInterfaceEmptyArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDefaultUndefinedTestInterfaceEmptyArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDefaultUndefinedLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10352,9 +9350,7 @@ static void voidMethodDefaultUndefinedLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDefaultUndefinedLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDefaultUndefinedStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10371,9 +9367,7 @@ static void voidMethodDefaultUndefinedStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodDefaultUndefinedStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodEnforceRangeLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10396,9 +9390,7 @@ static void voidMethodEnforceRangeLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodEnforceRangeLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodTreatNullAsEmptyStringStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10419,9 +9411,7 @@ static void voidMethodTreatNullAsEmptyStringStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodTreatNullAsEmptyStringStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodTreatNullAsNullStringStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10442,9 +9432,7 @@ static void voidMethodTreatNullAsNullStringStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodTreatNullAsNullStringStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodTreatNullAsNullStringTreatUndefinedAsNullStringStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10465,9 +9453,7 @@ static void voidMethodTreatNullAsNullStringTreatUndefinedAsNullStringStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodTreatNullAsNullStringTreatUndefinedAsNullStringStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingAccessForAllWorldsMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10478,7 +9464,6 @@ static void activityLoggingAccessForAllWorldsMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ScriptState* scriptState = ScriptState::from(info.GetIsolate()->GetCurrentContext()); V8PerContextData* contextData = scriptState->perContextData(); if (contextData && contextData->activityLogger()) { @@ -10487,7 +9472,6 @@ contextData->activityLogger()->logMethod("TestObject.activityLoggingAccessForAllWorldsMethod", info.Length(), loggerArgs.data()); } TestObjectV8Internal::activityLoggingAccessForAllWorldsMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void callWithExecutionContextVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10499,9 +9483,7 @@ static void callWithExecutionContextVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::callWithExecutionContextVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void callWithScriptStateVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10513,9 +9495,7 @@ static void callWithScriptStateVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::callWithScriptStateVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void callWithScriptStateLongMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10528,9 +9508,7 @@ static void callWithScriptStateLongMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::callWithScriptStateLongMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void callWithScriptStateExecutionContextVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10543,9 +9521,7 @@ static void callWithScriptStateExecutionContextVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::callWithScriptStateExecutionContextVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void callWithScriptStateScriptArgumentsVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10558,9 +9534,7 @@ static void callWithScriptStateScriptArgumentsVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::callWithScriptStateScriptArgumentsVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void callWithScriptStateScriptArgumentsVoidMethodOptionalBooleanArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10592,9 +9566,7 @@ static void callWithScriptStateScriptArgumentsVoidMethodOptionalBooleanArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::callWithScriptStateScriptArgumentsVoidMethodOptionalBooleanArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void callWithActiveWindowMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10605,9 +9577,7 @@ static void callWithActiveWindowMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::callWithActiveWindowMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void callWithActiveWindowScriptWindowMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10618,9 +9588,7 @@ static void callWithActiveWindowScriptWindowMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::callWithActiveWindowScriptWindowMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void callWithThisValueMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10632,9 +9600,7 @@ static void callWithThisValueMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::callWithThisValueMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void checkSecurityForNodeVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10650,16 +9616,12 @@ static void checkSecurityForNodeVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::checkSecurityForNodeVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void customVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); V8TestObject::customVoidMethodMethodCustom(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void customCallPrologueVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10671,9 +9633,7 @@ static void customCallPrologueVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::customCallPrologueVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void customCallEpilogueVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10685,9 +9645,7 @@ static void customCallEpilogueVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::customCallEpilogueVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void customElementCallbacksVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10699,9 +9657,7 @@ static void customElementCallbacksVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::customElementCallbacksVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void deprecatedVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10712,10 +9668,8 @@ static void deprecatedVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); UseCounter::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::voidMethod); TestObjectV8Internal::deprecatedVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doNotCheckSignatureVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10726,9 +9680,7 @@ static void doNotCheckSignatureVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::doNotCheckSignatureVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void experimentEnabledVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10739,7 +9691,6 @@ static void experimentEnabledVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String memberErrorMessage; if (!OriginTrials::featureName1Enabled(executionContext, memberErrorMessage)) { @@ -10750,7 +9701,6 @@ return; } TestObjectV8Internal::experimentEnabledVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void perWorldBindingsExperimentEnabledVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10761,7 +9711,6 @@ static void perWorldBindingsExperimentEnabledVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String memberErrorMessage; if (!OriginTrials::featureName1Enabled(executionContext, memberErrorMessage)) { @@ -10772,7 +9721,6 @@ return; } TestObjectV8Internal::perWorldBindingsExperimentEnabledVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void perWorldBindingsExperimentEnabledVoidMethodMethodForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10783,7 +9731,6 @@ static void perWorldBindingsExperimentEnabledVoidMethodMethodCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String memberErrorMessage; if (!OriginTrials::featureName1Enabled(executionContext, memberErrorMessage)) { @@ -10794,7 +9741,6 @@ return; } TestObjectV8Internal::perWorldBindingsExperimentEnabledVoidMethodMethodForMainWorld(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void experimentEnabledOverloadedVoidMethod1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10855,9 +9801,7 @@ static void experimentEnabledOverloadedVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::experimentEnabledOverloadedVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partiallyExperimentEnabledOverloadedVoidMethod1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10968,9 +9912,7 @@ static void partiallyExperimentEnabledOverloadedVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::partiallyExperimentEnabledOverloadedVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void implementedAsVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10981,9 +9923,7 @@ static void implementedAsVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::implementedAsVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void measureAsVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -10994,10 +9934,8 @@ static void measureAsVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::TestFeature); TestObjectV8Internal::measureAsVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void measureMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11008,10 +9946,8 @@ static void measureMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::V8TestObject_MeasureMethod_Method); TestObjectV8Internal::measureMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void measureOverloadedMethod1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11061,9 +9997,7 @@ static void measureOverloadedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::measureOverloadedMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void DeprecateAsOverloadedMethod1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11113,9 +10047,7 @@ static void DeprecateAsOverloadedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::DeprecateAsOverloadedMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void DeprecateAsSameValueOverloadedMethod1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11164,9 +10096,7 @@ static void DeprecateAsSameValueOverloadedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::DeprecateAsSameValueOverloadedMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void measureAsOverloadedMethod1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11216,9 +10146,7 @@ static void measureAsOverloadedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::measureAsOverloadedMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void measureAsSameValueOverloadedMethod1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11268,9 +10196,7 @@ static void measureAsSameValueOverloadedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::measureAsSameValueOverloadedMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void deprecateAsMeasureAsSameValueOverloadedMethod1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11322,9 +10248,7 @@ static void deprecateAsMeasureAsSameValueOverloadedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::deprecateAsMeasureAsSameValueOverloadedMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void deprecateAsSameValueMeasureAsOverloadedMethod1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11375,9 +10299,7 @@ static void deprecateAsSameValueMeasureAsOverloadedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::deprecateAsSameValueMeasureAsOverloadedMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void deprecateAsSameValueMeasureAsSameValueOverloadedMethod1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11428,9 +10350,7 @@ static void deprecateAsSameValueMeasureAsSameValueOverloadedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::deprecateAsSameValueMeasureAsSameValueOverloadedMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void notEnumerableVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11441,9 +10361,7 @@ static void notEnumerableVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::notEnumerableVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void perWorldBindingsVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11454,9 +10372,7 @@ static void perWorldBindingsVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::perWorldBindingsVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void perWorldBindingsVoidMethodMethodForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11467,9 +10383,7 @@ static void perWorldBindingsVoidMethodMethodCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::perWorldBindingsVoidMethodMethodForMainWorld(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void perWorldBindingsVoidMethodTestInterfaceEmptyArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11492,9 +10406,7 @@ static void perWorldBindingsVoidMethodTestInterfaceEmptyArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::perWorldBindingsVoidMethodTestInterfaceEmptyArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void perWorldBindingsVoidMethodTestInterfaceEmptyArgMethodForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11517,9 +10429,7 @@ static void perWorldBindingsVoidMethodTestInterfaceEmptyArgMethodCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::perWorldBindingsVoidMethodTestInterfaceEmptyArgMethodForMainWorld(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } void postMessageImpl(const char* interfaceName, TestObject* instance, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11551,9 +10461,7 @@ static void postMessageMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); postMessageImpl("TestObject", V8TestObject::toImpl(info.Holder()), info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingForAllWorldsPerWorldBindingsVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11564,7 +10472,6 @@ static void activityLoggingForAllWorldsPerWorldBindingsVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ScriptState* scriptState = ScriptState::from(info.GetIsolate()->GetCurrentContext()); V8PerContextData* contextData = scriptState->perContextData(); if (contextData && contextData->activityLogger()) { @@ -11573,7 +10480,6 @@ contextData->activityLogger()->logMethod("TestObject.activityLoggingForAllWorldsPerWorldBindingsVoidMethod", info.Length(), loggerArgs.data()); } TestObjectV8Internal::activityLoggingForAllWorldsPerWorldBindingsVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingForAllWorldsPerWorldBindingsVoidMethodMethodForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11584,7 +10490,6 @@ static void activityLoggingForAllWorldsPerWorldBindingsVoidMethodMethodCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ScriptState* scriptState = ScriptState::from(info.GetIsolate()->GetCurrentContext()); V8PerContextData* contextData = scriptState->perContextData(); if (contextData && contextData->activityLogger()) { @@ -11593,7 +10498,6 @@ contextData->activityLogger()->logMethod("TestObject.activityLoggingForAllWorldsPerWorldBindingsVoidMethod", info.Length(), loggerArgs.data()); } TestObjectV8Internal::activityLoggingForAllWorldsPerWorldBindingsVoidMethodMethodForMainWorld(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingForIsolatedWorldsPerWorldBindingsVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11604,7 +10508,6 @@ static void activityLoggingForIsolatedWorldsPerWorldBindingsVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ScriptState* scriptState = ScriptState::from(info.GetIsolate()->GetCurrentContext()); V8PerContextData* contextData = scriptState->perContextData(); if (contextData && contextData->activityLogger()) { @@ -11613,7 +10516,6 @@ contextData->activityLogger()->logMethod("TestObject.activityLoggingForIsolatedWorldsPerWorldBindingsVoidMethod", info.Length(), loggerArgs.data()); } TestObjectV8Internal::activityLoggingForIsolatedWorldsPerWorldBindingsVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void activityLoggingForIsolatedWorldsPerWorldBindingsVoidMethodMethodForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11624,9 +10526,7 @@ static void activityLoggingForIsolatedWorldsPerWorldBindingsVoidMethodMethodCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::activityLoggingForIsolatedWorldsPerWorldBindingsVoidMethodMethodForMainWorld(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void raisesExceptionVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11642,9 +10542,7 @@ static void raisesExceptionVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::raisesExceptionVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void raisesExceptionStringMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11661,9 +10559,7 @@ static void raisesExceptionStringMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::raisesExceptionStringMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void raisesExceptionVoidMethodOptionalLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11699,9 +10595,7 @@ static void raisesExceptionVoidMethodOptionalLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::raisesExceptionVoidMethodOptionalLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void raisesExceptionVoidMethodTestCallbackInterfaceArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11731,9 +10625,7 @@ static void raisesExceptionVoidMethodTestCallbackInterfaceArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::raisesExceptionVoidMethodTestCallbackInterfaceArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void raisesExceptionVoidMethodOptionalTestCallbackInterfaceArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11762,9 +10654,7 @@ static void raisesExceptionVoidMethodOptionalTestCallbackInterfaceArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::raisesExceptionVoidMethodOptionalTestCallbackInterfaceArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void raisesExceptionTestInterfaceEmptyVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11781,9 +10671,7 @@ static void raisesExceptionTestInterfaceEmptyVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::raisesExceptionTestInterfaceEmptyVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void raisesExceptionXPathNSResolverVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11800,9 +10688,7 @@ static void raisesExceptionXPathNSResolverVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::raisesExceptionXPathNSResolverVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void callWithExecutionContextRaisesExceptionVoidMethodLongArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11830,9 +10716,7 @@ static void callWithExecutionContextRaisesExceptionVoidMethodLongArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::callWithExecutionContextRaisesExceptionVoidMethodLongArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void runtimeEnabledVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11843,9 +10727,7 @@ static void runtimeEnabledVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::runtimeEnabledVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void perWorldBindingsRuntimeEnabledVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11856,9 +10738,7 @@ static void perWorldBindingsRuntimeEnabledVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::perWorldBindingsRuntimeEnabledVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void perWorldBindingsRuntimeEnabledVoidMethodMethodForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11869,9 +10749,7 @@ static void perWorldBindingsRuntimeEnabledVoidMethodMethodCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::perWorldBindingsRuntimeEnabledVoidMethodMethodForMainWorld(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void runtimeEnabledOverloadedVoidMethod1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -11932,9 +10810,7 @@ static void runtimeEnabledOverloadedVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::runtimeEnabledOverloadedVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partiallyRuntimeEnabledOverloadedVoidMethod1Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12070,9 +10946,7 @@ static void partiallyRuntimeEnabledOverloadedVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::partiallyRuntimeEnabledOverloadedVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatReturnedNullStringAsNullStringMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12083,9 +10957,7 @@ static void treatReturnedNullStringAsNullStringMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::treatReturnedNullStringAsNullStringMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatReturnedNullStringAsUndefinedStringMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12096,9 +10968,7 @@ static void treatReturnedNullStringAsUndefinedStringMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::treatReturnedNullStringAsUndefinedStringMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatReturnedNullStringAsNullByteStringMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12109,9 +10979,7 @@ static void treatReturnedNullStringAsNullByteStringMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::treatReturnedNullStringAsNullByteStringMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatReturnedNullStringAsUndefinedByteStringMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12122,9 +10990,7 @@ static void treatReturnedNullStringAsUndefinedByteStringMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::treatReturnedNullStringAsUndefinedByteStringMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatReturnedNullStringAsNullUSVStringMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12135,9 +11001,7 @@ static void treatReturnedNullStringAsNullUSVStringMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::treatReturnedNullStringAsNullUSVStringMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void treatReturnedNullStringAsUndefinedUSVStringMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12148,9 +11012,7 @@ static void treatReturnedNullStringAsUndefinedUSVStringMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::treatReturnedNullStringAsUndefinedUSVStringMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void legacyInterfaceTypeCheckingVoidMethodTestInterfaceEmptyArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12169,9 +11031,7 @@ static void legacyInterfaceTypeCheckingVoidMethodTestInterfaceEmptyArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::legacyInterfaceTypeCheckingVoidMethodTestInterfaceEmptyArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void legacyInterfaceTypeCheckingVoidMethodTestInterfaceEmptyVariadicArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12194,9 +11054,7 @@ static void legacyInterfaceTypeCheckingVoidMethodTestInterfaceEmptyVariadicArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::legacyInterfaceTypeCheckingVoidMethodTestInterfaceEmptyVariadicArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void useToImpl4ArgumentsCheckingIfPossibleWithOptionalArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12235,9 +11093,7 @@ static void useToImpl4ArgumentsCheckingIfPossibleWithOptionalArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::useToImpl4ArgumentsCheckingIfPossibleWithOptionalArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void useToImpl4ArgumentsCheckingIfPossibleWithNullableArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12266,9 +11122,7 @@ static void useToImpl4ArgumentsCheckingIfPossibleWithNullableArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::useToImpl4ArgumentsCheckingIfPossibleWithNullableArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void useToImpl4ArgumentsCheckingIfPossibleWithUndefinedArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12297,9 +11151,7 @@ static void useToImpl4ArgumentsCheckingIfPossibleWithUndefinedArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::useToImpl4ArgumentsCheckingIfPossibleWithUndefinedArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unforgeableVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12310,9 +11162,7 @@ static void unforgeableVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::unforgeableVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodTestInterfaceGarbageCollectedSequenceArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12335,9 +11185,7 @@ static void voidMethodTestInterfaceGarbageCollectedSequenceArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodTestInterfaceGarbageCollectedSequenceArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodTestInterfaceGarbageCollectedArrayArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12360,9 +11208,7 @@ static void voidMethodTestInterfaceGarbageCollectedArrayArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodTestInterfaceGarbageCollectedArrayArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodTestInterfaceWillBeGarbageCollectedSequenceArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12385,9 +11231,7 @@ static void voidMethodTestInterfaceWillBeGarbageCollectedSequenceArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodTestInterfaceWillBeGarbageCollectedSequenceArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodTestInterfaceWillBeGarbageCollectedArrayArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12410,9 +11254,7 @@ static void voidMethodTestInterfaceWillBeGarbageCollectedArrayArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodTestInterfaceWillBeGarbageCollectedArrayArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void newObjectTestInterfaceMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12423,9 +11265,7 @@ static void newObjectTestInterfaceMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::newObjectTestInterfaceMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void serializerMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12436,9 +11276,7 @@ static void serializerMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::serializerMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodImplementedInPrivateScriptMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12449,9 +11287,7 @@ static void voidMethodImplementedInPrivateScriptMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::voidMethodImplementedInPrivateScriptMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void shortMethodImplementedInPrivateScriptMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12465,9 +11301,7 @@ static void shortMethodImplementedInPrivateScriptMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::shortMethodImplementedInPrivateScriptMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void shortMethodWithShortArgumentImplementedInPrivateScriptMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12493,9 +11327,7 @@ static void shortMethodWithShortArgumentImplementedInPrivateScriptMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::shortMethodWithShortArgumentImplementedInPrivateScriptMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringMethodWithStringArgumentImplementedInPrivateScriptMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12519,9 +11351,7 @@ static void stringMethodWithStringArgumentImplementedInPrivateScriptMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::stringMethodWithStringArgumentImplementedInPrivateScriptMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void nodeMethodWithNodeArgumentImplementedInPrivateScriptMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12547,9 +11377,7 @@ static void nodeMethodWithNodeArgumentImplementedInPrivateScriptMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::nodeMethodWithNodeArgumentImplementedInPrivateScriptMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void nodeMethodWithVariousArgumentsImplementedInPrivateScriptMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12597,9 +11425,7 @@ static void nodeMethodWithVariousArgumentsImplementedInPrivateScriptMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::nodeMethodWithVariousArgumentsImplementedInPrivateScriptMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void methodImplementedInCPPForPrivateScriptOnlyMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12626,9 +11452,7 @@ static void methodImplementedInCPPForPrivateScriptOnlyMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::methodImplementedInCPPForPrivateScriptOnlyMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void keysMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12646,9 +11470,7 @@ static void keysMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::keysMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void valuesMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12666,9 +11488,7 @@ static void valuesMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::valuesMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void entriesMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12686,9 +11506,7 @@ static void entriesMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::entriesMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void forEachMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12721,9 +11539,7 @@ static void forEachMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::forEachMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void hasMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12752,9 +11568,7 @@ static void hasMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::hasMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void getMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12783,9 +11597,7 @@ static void getMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::getMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void clearMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12802,9 +11614,7 @@ static void clearMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::clearMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void deleteMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12833,9 +11643,7 @@ static void deleteMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::deleteMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void setMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12868,9 +11676,7 @@ static void setMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::setMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void toJSONMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12881,9 +11687,7 @@ static void toJSONMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::toJSONMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void toStringMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12894,9 +11698,7 @@ static void toStringMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::toStringMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void iteratorMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -12914,9 +11716,7 @@ static void iteratorMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestObjectV8Internal::iteratorMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertyGetter(uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) @@ -12931,9 +11731,7 @@ static void indexedPropertyGetterCallback(uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); TestObjectV8Internal::indexedPropertyGetter(index, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertySetter(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) @@ -12951,9 +11749,7 @@ static void indexedPropertySetterCallback(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); TestObjectV8Internal::indexedPropertySetter(index, v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertyDeleter(uint32_t index, const v8::PropertyCallbackInfo<v8::Boolean>& info) @@ -12970,9 +11766,7 @@ static void indexedPropertyDeleterCallback(uint32_t index, const v8::PropertyCallbackInfo<v8::Boolean>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); TestObjectV8Internal::indexedPropertyDeleter(index, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyGetter(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) @@ -12989,9 +11783,7 @@ static void namedPropertyGetterCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestObjectV8Internal::namedPropertyGetter(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertySetter(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) @@ -13013,9 +11805,7 @@ static void namedPropertySetterCallback(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestObjectV8Internal::namedPropertySetter(name, v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyQuery(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Integer>& info) @@ -13035,9 +11825,7 @@ static void namedPropertyQueryCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Integer>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestObjectV8Internal::namedPropertyQuery(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyDeleter(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Boolean>& info) @@ -13052,9 +11840,7 @@ static void namedPropertyDeleterCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Boolean>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestObjectV8Internal::namedPropertyDeleter(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyEnumerator(const v8::PropertyCallbackInfo<v8::Array>& info) @@ -13075,9 +11861,7 @@ static void namedPropertyEnumeratorCallback(const v8::PropertyCallbackInfo<v8::Array>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestObjectV8Internal::namedPropertyEnumerator(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } } // namespace TestObjectV8Internal
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp index 645687c..78ca243d 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp
@@ -63,9 +63,7 @@ static void namedItemMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestSpecialOperationsV8Internal::namedItemMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyGetter(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) @@ -82,9 +80,7 @@ static void namedPropertyGetterCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestSpecialOperationsV8Internal::namedPropertyGetter(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertySetter(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) @@ -108,9 +104,7 @@ static void namedPropertySetterCallback(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestSpecialOperationsV8Internal::namedPropertySetter(name, v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyQuery(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Integer>& info) @@ -129,9 +123,7 @@ static void namedPropertyQueryCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Integer>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestSpecialOperationsV8Internal::namedPropertyQuery(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyEnumerator(const v8::PropertyCallbackInfo<v8::Array>& info) @@ -152,9 +144,7 @@ static void namedPropertyEnumeratorCallback(const v8::PropertyCallbackInfo<v8::Array>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestSpecialOperationsV8Internal::namedPropertyEnumerator(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } } // namespace TestSpecialOperationsV8Internal
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp index 5002485..f08e79e 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp
@@ -47,9 +47,7 @@ static void indexedPropertyGetterCallback(uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); TestSpecialOperationsNotEnumerableV8Internal::indexedPropertyGetter(index, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyGetter(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) @@ -65,9 +63,7 @@ static void namedPropertyGetterCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestSpecialOperationsNotEnumerableV8Internal::namedPropertyGetter(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } } // namespace TestSpecialOperationsNotEnumerableV8Internal
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp index 7200de6f..0dea0892 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp
@@ -57,9 +57,7 @@ static void uLongLongAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestTypedefsV8Internal::uLongLongAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void uLongLongAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -76,9 +74,7 @@ static void uLongLongAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestTypedefsV8Internal::uLongLongAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void tAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) @@ -89,9 +85,7 @@ static void tAttributeAttributeSetterCallback(v8::Local<v8::Name>, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestTypedefsV8Internal::tAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void domStringOrDoubleOrNullAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -105,9 +99,7 @@ static void domStringOrDoubleOrNullAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestTypedefsV8Internal::domStringOrDoubleOrNullAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void domStringOrDoubleOrNullAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -125,9 +117,7 @@ static void domStringOrDoubleOrNullAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestTypedefsV8Internal::domStringOrDoubleOrNullAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodArrayOfLongsArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -155,9 +145,7 @@ static void voidMethodArrayOfLongsArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestTypedefsV8Internal::voidMethodArrayOfLongsArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodFloatArgStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -184,9 +172,7 @@ static void voidMethodFloatArgStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestTypedefsV8Internal::voidMethodFloatArgStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodTestCallbackInterfaceTypeArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -209,9 +195,7 @@ static void voidMethodTestCallbackInterfaceTypeArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestTypedefsV8Internal::voidMethodTestCallbackInterfaceTypeArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void uLongLongMethodTestInterfaceEmptyTypeSequenceArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -234,9 +218,7 @@ static void uLongLongMethodTestInterfaceEmptyTypeSequenceArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestTypedefsV8Internal::uLongLongMethodTestInterfaceEmptyTypeSequenceArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceOrTestInterfaceEmptyMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -249,9 +231,7 @@ static void testInterfaceOrTestInterfaceEmptyMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestTypedefsV8Internal::testInterfaceOrTestInterfaceEmptyMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void domStringOrDoubleMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -264,9 +244,7 @@ static void domStringOrDoubleMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestTypedefsV8Internal::domStringOrDoubleMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void arrayOfStringsMethodArrayOfStringsArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -289,9 +267,7 @@ static void arrayOfStringsMethodArrayOfStringsArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestTypedefsV8Internal::arrayOfStringsMethodArrayOfStringsArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void stringArrayMethodStringArrayArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -314,9 +290,7 @@ static void stringArrayMethodStringArrayArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestTypedefsV8Internal::stringArrayMethodStringArrayArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void constructor(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -370,7 +344,6 @@ void V8TestTypedefs::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "DOMConstructor"); if (!info.IsConstructCall()) { V8ThrowException::throwTypeError(info.GetIsolate(), ExceptionMessages::constructorNotCallableAsFunction("TestTypedefs")); return;
diff --git a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp index 91c5884..ad3c2e84 100644 --- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp
@@ -58,9 +58,7 @@ static void testInterfaceAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterface5ImplementationV8Internal::testInterfaceAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -80,9 +78,7 @@ static void testInterfaceAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterface5ImplementationV8Internal::testInterfaceAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void testInterfaceConstructorAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) @@ -93,9 +89,7 @@ static void testInterfaceConstructorAttributeAttributeSetterCallback(v8::Local<v8::Name>, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterface5ImplementationV8Internal::testInterfaceConstructorAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doubleAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -107,9 +101,7 @@ static void doubleAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterface5ImplementationV8Internal::doubleAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void doubleAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -126,9 +118,7 @@ static void doubleAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterface5ImplementationV8Internal::doubleAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void floatAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -140,9 +130,7 @@ static void floatAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterface5ImplementationV8Internal::floatAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void floatAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -159,9 +147,7 @@ static void floatAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterface5ImplementationV8Internal::floatAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unrestrictedDoubleAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -173,9 +159,7 @@ static void unrestrictedDoubleAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterface5ImplementationV8Internal::unrestrictedDoubleAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unrestrictedDoubleAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -192,9 +176,7 @@ static void unrestrictedDoubleAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterface5ImplementationV8Internal::unrestrictedDoubleAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unrestrictedFloatAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -206,9 +188,7 @@ static void unrestrictedFloatAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterface5ImplementationV8Internal::unrestrictedFloatAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void unrestrictedFloatAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -225,9 +205,7 @@ static void unrestrictedFloatAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterface5ImplementationV8Internal::unrestrictedFloatAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void staticStringAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -237,9 +215,7 @@ static void staticStringAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterface5ImplementationV8Internal::staticStringAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void staticStringAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -253,9 +229,7 @@ static void staticStringAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterface5ImplementationV8Internal::staticStringAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void alwaysExposedAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -267,9 +241,7 @@ static void alwaysExposedAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterface5ImplementationV8Internal::alwaysExposedAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void alwaysExposedAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -286,9 +258,7 @@ static void alwaysExposedAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterface5ImplementationV8Internal::alwaysExposedAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void workerExposedAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -300,9 +270,7 @@ static void workerExposedAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterface5ImplementationV8Internal::workerExposedAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void workerExposedAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -319,9 +287,7 @@ static void workerExposedAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterface5ImplementationV8Internal::workerExposedAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void windowExposedAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -333,9 +299,7 @@ static void windowExposedAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter"); TestInterface5ImplementationV8Internal::windowExposedAttributeAttributeGetter(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void windowExposedAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) @@ -352,9 +316,7 @@ static void windowExposedAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Value> v8Value = info[0]; - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMSetter"); TestInterface5ImplementationV8Internal::windowExposedAttributeAttributeSetter(v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodTestInterfaceEmptyArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -377,9 +339,7 @@ static void voidMethodTestInterfaceEmptyArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface5ImplementationV8Internal::voidMethodTestInterfaceEmptyArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDoubleArgFloatArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -406,9 +366,7 @@ static void voidMethodDoubleArgFloatArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface5ImplementationV8Internal::voidMethodDoubleArgFloatArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodUnrestrictedDoubleArgUnrestrictedFloatArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -435,9 +393,7 @@ static void voidMethodUnrestrictedDoubleArgUnrestrictedFloatArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface5ImplementationV8Internal::voidMethodUnrestrictedDoubleArgUnrestrictedFloatArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -448,9 +404,7 @@ static void voidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface5ImplementationV8Internal::voidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodMethodForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -461,9 +415,7 @@ static void voidMethodMethodCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface5ImplementationV8Internal::voidMethodMethodForMainWorld(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void alwaysExposedMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -474,9 +426,7 @@ static void alwaysExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface5ImplementationV8Internal::alwaysExposedMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void workerExposedMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -487,9 +437,7 @@ static void workerExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface5ImplementationV8Internal::workerExposedMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void windowExposedMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -500,9 +448,7 @@ static void windowExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface5ImplementationV8Internal::windowExposedMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void alwaysExposedStaticMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -512,9 +458,7 @@ static void alwaysExposedStaticMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface5ImplementationV8Internal::alwaysExposedStaticMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void workerExposedStaticMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -524,9 +468,7 @@ static void workerExposedStaticMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface5ImplementationV8Internal::workerExposedStaticMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void windowExposedStaticMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -536,9 +478,7 @@ static void windowExposedStaticMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface5ImplementationV8Internal::windowExposedStaticMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void windowAndServiceWorkerExposedMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -549,9 +489,7 @@ static void windowAndServiceWorkerExposedMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface5ImplementationV8Internal::windowAndServiceWorkerExposedMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodBooleanOrDOMStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -574,9 +512,7 @@ static void voidMethodBooleanOrDOMStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface5ImplementationV8Internal::voidMethodBooleanOrDOMStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void voidMethodDoubleOrDOMStringArgMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -599,9 +535,7 @@ static void voidMethodDoubleOrDOMStringArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface5ImplementationV8Internal::voidMethodDoubleOrDOMStringArgMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void keysMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -619,9 +553,7 @@ static void keysMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface5ImplementationV8Internal::keysMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void valuesMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -639,9 +571,7 @@ static void valuesMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface5ImplementationV8Internal::valuesMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void entriesMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -659,9 +589,7 @@ static void entriesMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface5ImplementationV8Internal::entriesMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void forEachMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -694,9 +622,7 @@ static void forEachMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface5ImplementationV8Internal::forEachMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void toStringMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -707,9 +633,7 @@ static void toStringMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface5ImplementationV8Internal::toStringMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void iteratorMethod(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -727,9 +651,7 @@ static void iteratorMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); TestInterface5ImplementationV8Internal::iteratorMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertyGetter(uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) @@ -743,9 +665,7 @@ static void indexedPropertyGetterCallback(uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); TestInterface5ImplementationV8Internal::indexedPropertyGetter(index, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertySetter(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) @@ -762,9 +682,7 @@ static void indexedPropertySetterCallback(uint32_t index, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); TestInterface5ImplementationV8Internal::indexedPropertySetter(index, v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void indexedPropertyDeleter(uint32_t index, const v8::PropertyCallbackInfo<v8::Boolean>& info) @@ -777,9 +695,7 @@ static void indexedPropertyDeleterCallback(uint32_t index, const v8::PropertyCallbackInfo<v8::Boolean>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMIndexedProperty"); TestInterface5ImplementationV8Internal::indexedPropertyDeleter(index, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyGetter(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) @@ -795,9 +711,7 @@ static void namedPropertyGetterCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestInterface5ImplementationV8Internal::namedPropertyGetter(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertySetter(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) @@ -818,9 +732,7 @@ static void namedPropertySetterCallback(v8::Local<v8::Name> name, v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestInterface5ImplementationV8Internal::namedPropertySetter(name, v8Value, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyQuery(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Integer>& info) @@ -839,9 +751,7 @@ static void namedPropertyQueryCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Integer>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestInterface5ImplementationV8Internal::namedPropertyQuery(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyDeleter(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Boolean>& info) @@ -855,9 +765,7 @@ static void namedPropertyDeleterCallback(v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Boolean>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestInterface5ImplementationV8Internal::namedPropertyDeleter(name, info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void namedPropertyEnumerator(const v8::PropertyCallbackInfo<v8::Array>& info) @@ -878,9 +786,7 @@ static void namedPropertyEnumeratorCallback(const v8::PropertyCallbackInfo<v8::Array>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMNamedProperty"); TestInterface5ImplementationV8Internal::namedPropertyEnumerator(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } } // namespace TestInterface5ImplementationV8Internal
diff --git a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.cpp b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.cpp index fa83579c..65e31cc 100644 --- a/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.cpp
@@ -244,7 +244,6 @@ static void partialVoidTestEnumModulesArgMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -255,7 +254,6 @@ return; } TestInterfaceImplementationPartialV8Internal::partialVoidTestEnumModulesArgMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } static void partial2StaticVoidMethod2Method(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -297,7 +295,6 @@ static void unscopeableVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMMethod"); ExecutionContext* executionContext = currentExecutionContext(info.GetIsolate()); String errorMessage; if (!OriginTrials::featureNameEnabled(executionContext, errorMessage)) { @@ -308,7 +305,6 @@ return; } TestInterfaceImplementationPartialV8Internal::unscopeableVoidMethodMethod(info); - TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution"); } } // namespace TestInterfaceImplementationPartialV8Internal
diff --git a/third_party/WebKit/Source/core/BUILD.gn b/third_party/WebKit/Source/core/BUILD.gn index b17343c..1f20d25 100644 --- a/third_party/WebKit/Source/core/BUILD.gn +++ b/third_party/WebKit/Source/core/BUILD.gn
@@ -51,6 +51,7 @@ ":prerequisites", "inspector:instrumentation_sources", "inspector:protocol_sources", + "inspector/v8:injected_script_sources", "//gin", "//skia", "//third_party/WebKit/Source/bindings/core/v8:bindings_core_v8_generated", @@ -99,6 +100,7 @@ ":make_core_generated", "inspector:instrumentation_sources", "inspector:protocol_sources", + "inspector/v8:injected_script_sources", "//third_party/WebKit/Source/bindings/core/v8:bindings_core_v8_generated", # FIXME: don't depend on bindings_modules http://crbug.com/358074 @@ -398,6 +400,10 @@ "$blink_core_output_dir/InspectorOverridesInl.h", "$blink_core_output_dir/InstrumentingAgentsInl.h", + # Additional files from injected_script_sources list. + "$blink_core_output_dir/inspector/v8/DebuggerScript.h", + "$blink_core_output_dir/inspector/v8/InjectedScriptSource.h", + # Additional .cpp files for SVG. "$blink_core_output_dir/SVGElementFactory.cpp", @@ -422,6 +428,7 @@ ":prerequisites", "inspector:instrumentation_sources", "inspector:protocol_sources", + "inspector/v8:injected_script_sources", "//gin", "//skia", "//third_party/WebKit/Source/bindings/core/v8:bindings_core_v8_generated",
diff --git a/third_party/WebKit/Source/core/DEPS b/third_party/WebKit/Source/core/DEPS index 4ed419f..c34e54f 100644 --- a/third_party/WebKit/Source/core/DEPS +++ b/third_party/WebKit/Source/core/DEPS
@@ -2,6 +2,8 @@ "+bindings/core", "-bindings/modules", "+core", + "-inspector/v8", + "+inspector/v8/public", "-modules", "+platform", "+public/platform",
diff --git a/third_party/WebKit/Source/core/animation/InvalidatableInterpolation.h b/third_party/WebKit/Source/core/animation/InvalidatableInterpolation.h index 2d14d4f..856fe69 100644 --- a/third_party/WebKit/Source/core/animation/InvalidatableInterpolation.h +++ b/third_party/WebKit/Source/core/animation/InvalidatableInterpolation.h
@@ -7,13 +7,12 @@ #include "core/animation/InterpolationType.h" #include "core/animation/PrimitiveInterpolation.h" +#include "core/animation/PropertyInterpolationTypesMapping.h" #include "core/animation/StyleInterpolation.h" #include "core/animation/TypedInterpolationValue.h" namespace blink { -using InterpolationTypes = Vector<OwnPtr<const InterpolationType>>; - // TODO(alancutter): This class will replace *StyleInterpolation and Interpolation. // For now it needs to distinguish itself during the refactor and temporarily has an ugly name. class CORE_EXPORT InvalidatableInterpolation : public Interpolation {
diff --git a/third_party/WebKit/Source/core/animation/PropertyInterpolationTypesMapping.cpp b/third_party/WebKit/Source/core/animation/PropertyInterpolationTypesMapping.cpp new file mode 100644 index 0000000..4cf12c72 --- /dev/null +++ b/third_party/WebKit/Source/core/animation/PropertyInterpolationTypesMapping.cpp
@@ -0,0 +1,305 @@ +// Copyright 2016 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 "core/animation/PropertyInterpolationTypesMapping.h" + +#include "core/HTMLNames.h" +#include "core/XLinkNames.h" +#include "core/animation/CSSColorInterpolationType.h" +#include "core/animation/CSSFontWeightInterpolationType.h" +#include "core/animation/CSSImageInterpolationType.h" +#include "core/animation/CSSImageListInterpolationType.h" +#include "core/animation/CSSLengthInterpolationType.h" +#include "core/animation/CSSLengthListInterpolationType.h" +#include "core/animation/CSSNumberInterpolationType.h" +#include "core/animation/CSSPaintInterpolationType.h" +#include "core/animation/CSSPathInterpolationType.h" +#include "core/animation/CSSShadowListInterpolationType.h" +#include "core/animation/CSSValueInterpolationType.h" +#include "core/animation/CSSVisibilityInterpolationType.h" +#include "core/animation/InterpolationType.h" +#include "core/animation/SVGAngleInterpolationType.h" +#include "core/animation/SVGIntegerInterpolationType.h" +#include "core/animation/SVGIntegerOptionalIntegerInterpolationType.h" +#include "core/animation/SVGLengthInterpolationType.h" +#include "core/animation/SVGLengthListInterpolationType.h" +#include "core/animation/SVGNumberInterpolationType.h" +#include "core/animation/SVGNumberListInterpolationType.h" +#include "core/animation/SVGNumberOptionalNumberInterpolationType.h" +#include "core/animation/SVGPathInterpolationType.h" +#include "core/animation/SVGPointListInterpolationType.h" +#include "core/animation/SVGRectInterpolationType.h" +#include "core/animation/SVGTransformListInterpolationType.h" +#include "core/animation/SVGValueInterpolationType.h" + +namespace blink { + +const InterpolationTypes* PropertyInterpolationTypesMapping::get(const PropertyHandle& property) +{ + using ApplicableTypesMap = HashMap<PropertyHandle, OwnPtr<const InterpolationTypes>>; + DEFINE_STATIC_LOCAL(ApplicableTypesMap, applicableTypesMap, ()); + auto entry = applicableTypesMap.find(property); + if (entry != applicableTypesMap.end()) + return entry->value.get(); + + // TODO(alancutter): Remove legacy interpolation code and stop returning nullptr. + bool fallbackToLegacy = false; + OwnPtr<InterpolationTypes> applicableTypes = adoptPtr(new InterpolationTypes()); + + if (property.isCSSProperty() || property.isPresentationAttribute()) { + CSSPropertyID cssProperty = property.isCSSProperty() ? property.cssProperty() : property.presentationAttribute(); + switch (cssProperty) { + case CSSPropertyBaselineShift: + case CSSPropertyBorderBottomWidth: + case CSSPropertyBorderLeftWidth: + case CSSPropertyBorderRightWidth: + case CSSPropertyBorderTopWidth: + case CSSPropertyBottom: + case CSSPropertyCx: + case CSSPropertyCy: + case CSSPropertyFlexBasis: + case CSSPropertyHeight: + case CSSPropertyLeft: + case CSSPropertyLetterSpacing: + case CSSPropertyMarginBottom: + case CSSPropertyMarginLeft: + case CSSPropertyMarginRight: + case CSSPropertyMarginTop: + case CSSPropertyMaxHeight: + case CSSPropertyMaxWidth: + case CSSPropertyMinHeight: + case CSSPropertyMinWidth: + case CSSPropertyMotionOffset: + case CSSPropertyOutlineOffset: + case CSSPropertyOutlineWidth: + case CSSPropertyPaddingBottom: + case CSSPropertyPaddingLeft: + case CSSPropertyPaddingRight: + case CSSPropertyPaddingTop: + case CSSPropertyPerspective: + case CSSPropertyR: + case CSSPropertyRight: + case CSSPropertyRx: + case CSSPropertyRy: + case CSSPropertyShapeMargin: + case CSSPropertyStrokeDashoffset: + case CSSPropertyStrokeWidth: + case CSSPropertyTop: + case CSSPropertyVerticalAlign: + case CSSPropertyWebkitBorderHorizontalSpacing: + case CSSPropertyWebkitBorderVerticalSpacing: + case CSSPropertyWebkitColumnGap: + case CSSPropertyWebkitColumnRuleWidth: + case CSSPropertyWebkitColumnWidth: + case CSSPropertyWebkitPerspectiveOriginX: + case CSSPropertyWebkitPerspectiveOriginY: + case CSSPropertyWebkitTransformOriginX: + case CSSPropertyWebkitTransformOriginY: + case CSSPropertyWebkitTransformOriginZ: + case CSSPropertyWidth: + case CSSPropertyWordSpacing: + case CSSPropertyX: + case CSSPropertyY: + applicableTypes->append(adoptPtr(new CSSLengthInterpolationType(cssProperty))); + break; + case CSSPropertyFlexGrow: + case CSSPropertyFlexShrink: + case CSSPropertyFillOpacity: + case CSSPropertyFloodOpacity: + case CSSPropertyFontSizeAdjust: + case CSSPropertyOpacity: + case CSSPropertyOrphans: + case CSSPropertyShapeImageThreshold: + case CSSPropertyStopOpacity: + case CSSPropertyStrokeMiterlimit: + case CSSPropertyStrokeOpacity: + case CSSPropertyWebkitColumnCount: + case CSSPropertyWidows: + case CSSPropertyZIndex: + applicableTypes->append(adoptPtr(new CSSNumberInterpolationType(cssProperty))); + break; + case CSSPropertyLineHeight: + applicableTypes->append(adoptPtr(new CSSLengthInterpolationType(cssProperty))); + applicableTypes->append(adoptPtr(new CSSNumberInterpolationType(cssProperty))); + break; + case CSSPropertyBackgroundColor: + case CSSPropertyBorderBottomColor: + case CSSPropertyBorderLeftColor: + case CSSPropertyBorderRightColor: + case CSSPropertyBorderTopColor: + case CSSPropertyColor: + case CSSPropertyFloodColor: + case CSSPropertyLightingColor: + case CSSPropertyOutlineColor: + case CSSPropertyStopColor: + case CSSPropertyTextDecorationColor: + case CSSPropertyWebkitColumnRuleColor: + case CSSPropertyWebkitTextStrokeColor: + applicableTypes->append(adoptPtr(new CSSColorInterpolationType(cssProperty))); + break; + case CSSPropertyFill: + case CSSPropertyStroke: + applicableTypes->append(adoptPtr(new CSSPaintInterpolationType(cssProperty))); + break; + case CSSPropertyD: + applicableTypes->append(adoptPtr(new CSSPathInterpolationType(cssProperty))); + break; + case CSSPropertyBoxShadow: + case CSSPropertyTextShadow: + applicableTypes->append(adoptPtr(new CSSShadowListInterpolationType(cssProperty))); + break; + case CSSPropertyBorderImageSource: + case CSSPropertyListStyleImage: + case CSSPropertyWebkitMaskBoxImageSource: + applicableTypes->append(adoptPtr(new CSSImageInterpolationType(cssProperty))); + break; + case CSSPropertyBackgroundImage: + case CSSPropertyWebkitMaskImage: + applicableTypes->append(adoptPtr(new CSSImageListInterpolationType(cssProperty))); + break; + case CSSPropertyStrokeDasharray: + applicableTypes->append(adoptPtr(new CSSLengthListInterpolationType(cssProperty))); + break; + case CSSPropertyFontWeight: + applicableTypes->append(adoptPtr(new CSSFontWeightInterpolationType(cssProperty))); + break; + case CSSPropertyVisibility: + applicableTypes->append(adoptPtr(new CSSVisibilityInterpolationType(cssProperty))); + break; + default: + // TODO(alancutter): Support all interpolable CSS properties here so we can stop falling back to the old StyleInterpolation implementation. + if (CSSPropertyMetadata::isInterpolableProperty(cssProperty)) + fallbackToLegacy = true; + break; + } + + if (!fallbackToLegacy) + applicableTypes->append(adoptPtr(new CSSValueInterpolationType(cssProperty))); + + } else { + const QualifiedName& attribute = property.svgAttribute(); + if (attribute == SVGNames::orientAttr) { + applicableTypes->append(adoptPtr(new SVGAngleInterpolationType(attribute))); + } else if (attribute == SVGNames::numOctavesAttr + || attribute == SVGNames::targetXAttr + || attribute == SVGNames::targetYAttr) { + applicableTypes->append(adoptPtr(new SVGIntegerInterpolationType(attribute))); + } else if (attribute == SVGNames::orderAttr) { + applicableTypes->append(adoptPtr(new SVGIntegerOptionalIntegerInterpolationType(attribute))); + } else if (attribute == SVGNames::cxAttr + || attribute == SVGNames::cyAttr + || attribute == SVGNames::fxAttr + || attribute == SVGNames::fyAttr + || attribute == SVGNames::heightAttr + || attribute == SVGNames::markerHeightAttr + || attribute == SVGNames::markerWidthAttr + || attribute == SVGNames::rAttr + || attribute == SVGNames::refXAttr + || attribute == SVGNames::refYAttr + || attribute == SVGNames::rxAttr + || attribute == SVGNames::ryAttr + || attribute == SVGNames::startOffsetAttr + || attribute == SVGNames::textLengthAttr + || attribute == SVGNames::widthAttr + || attribute == SVGNames::x1Attr + || attribute == SVGNames::x2Attr + || attribute == SVGNames::y1Attr + || attribute == SVGNames::y2Attr) { + applicableTypes->append(adoptPtr(new SVGLengthInterpolationType(attribute))); + } else if (attribute == SVGNames::dxAttr + || attribute == SVGNames::dyAttr) { + applicableTypes->append(adoptPtr(new SVGNumberInterpolationType(attribute))); + applicableTypes->append(adoptPtr(new SVGLengthListInterpolationType(attribute))); + } else if (attribute == SVGNames::xAttr + || attribute == SVGNames::yAttr) { + applicableTypes->append(adoptPtr(new SVGLengthInterpolationType(attribute))); + applicableTypes->append(adoptPtr(new SVGLengthListInterpolationType(attribute))); + } else if (attribute == SVGNames::amplitudeAttr + || attribute == SVGNames::azimuthAttr + || attribute == SVGNames::biasAttr + || attribute == SVGNames::diffuseConstantAttr + || attribute == SVGNames::divisorAttr + || attribute == SVGNames::elevationAttr + || attribute == SVGNames::exponentAttr + || attribute == SVGNames::interceptAttr + || attribute == SVGNames::k1Attr + || attribute == SVGNames::k2Attr + || attribute == SVGNames::k3Attr + || attribute == SVGNames::k4Attr + || attribute == SVGNames::limitingConeAngleAttr + || attribute == SVGNames::offsetAttr + || attribute == SVGNames::pathLengthAttr + || attribute == SVGNames::pointsAtXAttr + || attribute == SVGNames::pointsAtYAttr + || attribute == SVGNames::pointsAtZAttr + || attribute == SVGNames::scaleAttr + || attribute == SVGNames::seedAttr + || attribute == SVGNames::slopeAttr + || attribute == SVGNames::specularConstantAttr + || attribute == SVGNames::specularExponentAttr + || attribute == SVGNames::surfaceScaleAttr + || attribute == SVGNames::zAttr) { + applicableTypes->append(adoptPtr(new SVGNumberInterpolationType(attribute))); + } else if (attribute == SVGNames::kernelMatrixAttr + || attribute == SVGNames::rotateAttr + || attribute == SVGNames::tableValuesAttr + || attribute == SVGNames::valuesAttr) { + applicableTypes->append(adoptPtr(new SVGNumberListInterpolationType(attribute))); + } else if (attribute == SVGNames::baseFrequencyAttr + || attribute == SVGNames::kernelUnitLengthAttr + || attribute == SVGNames::radiusAttr + || attribute == SVGNames::stdDeviationAttr) { + applicableTypes->append(adoptPtr(new SVGNumberOptionalNumberInterpolationType(attribute))); + } else if (attribute == SVGNames::dAttr) { + applicableTypes->append(adoptPtr(new SVGPathInterpolationType(attribute))); + } else if (attribute == SVGNames::pointsAttr) { + applicableTypes->append(adoptPtr(new SVGPointListInterpolationType(attribute))); + } else if (attribute == SVGNames::viewBoxAttr) { + applicableTypes->append(adoptPtr(new SVGRectInterpolationType(attribute))); + } else if (attribute == SVGNames::gradientTransformAttr + || attribute == SVGNames::patternTransformAttr + || attribute == SVGNames::transformAttr) { + applicableTypes->append(adoptPtr(new SVGTransformListInterpolationType(attribute))); + } else if (attribute == HTMLNames::classAttr + || attribute == SVGNames::clipPathUnitsAttr + || attribute == SVGNames::edgeModeAttr + || attribute == SVGNames::filterUnitsAttr + || attribute == SVGNames::gradientUnitsAttr + || attribute == SVGNames::inAttr + || attribute == SVGNames::in2Attr + || attribute == SVGNames::lengthAdjustAttr + || attribute == SVGNames::markerUnitsAttr + || attribute == SVGNames::maskContentUnitsAttr + || attribute == SVGNames::maskUnitsAttr + || attribute == SVGNames::methodAttr + || attribute == SVGNames::modeAttr + || attribute == SVGNames::operatorAttr + || attribute == SVGNames::patternContentUnitsAttr + || attribute == SVGNames::patternUnitsAttr + || attribute == SVGNames::preserveAlphaAttr + || attribute == SVGNames::preserveAspectRatioAttr + || attribute == SVGNames::primitiveUnitsAttr + || attribute == SVGNames::resultAttr + || attribute == SVGNames::spacingAttr + || attribute == SVGNames::spreadMethodAttr + || attribute == SVGNames::stitchTilesAttr + || attribute == SVGNames::targetAttr + || attribute == SVGNames::typeAttr + || attribute == SVGNames::xChannelSelectorAttr + || attribute == SVGNames::yChannelSelectorAttr + || attribute == XLinkNames::hrefAttr) { + // Use default SVGValueInterpolationType. + } else { + fallbackToLegacy = true; + } + + if (!fallbackToLegacy) + applicableTypes->append(adoptPtr(new SVGValueInterpolationType(attribute))); + } + + auto addResult = applicableTypesMap.add(property, fallbackToLegacy ? nullptr : applicableTypes.release()); + return addResult.storedValue->value.get(); +} + +} // namespace blink
diff --git a/third_party/WebKit/Source/core/animation/PropertyInterpolationTypesMapping.h b/third_party/WebKit/Source/core/animation/PropertyInterpolationTypesMapping.h new file mode 100644 index 0000000..37e1317 --- /dev/null +++ b/third_party/WebKit/Source/core/animation/PropertyInterpolationTypesMapping.h
@@ -0,0 +1,25 @@ +// Copyright 2016 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 PropertyInterpolationTypesMapping_h +#define PropertyInterpolationTypesMapping_h + +#include "wtf/Vector.h" + +namespace blink { + +class InterpolationType; +class PropertyHandle; + +using InterpolationTypes = Vector<OwnPtr<const InterpolationType>>; + +class PropertyInterpolationTypesMapping { + STATIC_ONLY(PropertyInterpolationTypesMapping); +public: + static const InterpolationTypes* get(const PropertyHandle&); +}; + +} // namespace blink + +#endif // PropertyInterpolationTypesMapping_h
diff --git a/third_party/WebKit/Source/core/animation/StringKeyframe.cpp b/third_party/WebKit/Source/core/animation/StringKeyframe.cpp index 39e26c5..15628a5a 100644 --- a/third_party/WebKit/Source/core/animation/StringKeyframe.cpp +++ b/third_party/WebKit/Source/core/animation/StringKeyframe.cpp
@@ -5,45 +5,18 @@ #include "core/animation/StringKeyframe.h" #include "core/StylePropertyShorthand.h" -#include "core/XLinkNames.h" -#include "core/animation/CSSColorInterpolationType.h" -#include "core/animation/CSSFontWeightInterpolationType.h" -#include "core/animation/CSSImageInterpolationType.h" -#include "core/animation/CSSImageListInterpolationType.h" -#include "core/animation/CSSLengthInterpolationType.h" -#include "core/animation/CSSLengthListInterpolationType.h" -#include "core/animation/CSSNumberInterpolationType.h" -#include "core/animation/CSSPaintInterpolationType.h" -#include "core/animation/CSSPathInterpolationType.h" -#include "core/animation/CSSShadowListInterpolationType.h" -#include "core/animation/CSSValueInterpolationType.h" -#include "core/animation/CSSVisibilityInterpolationType.h" -#include "core/animation/CompositorAnimations.h" #include "core/animation/ConstantStyleInterpolation.h" #include "core/animation/DeferredLegacyStyleInterpolation.h" #include "core/animation/DoubleStyleInterpolation.h" #include "core/animation/FilterStyleInterpolation.h" #include "core/animation/ImageSliceStyleInterpolation.h" -#include "core/animation/InterpolationType.h" #include "core/animation/InvalidatableInterpolation.h" #include "core/animation/LegacyStyleInterpolation.h" #include "core/animation/LengthBoxStyleInterpolation.h" #include "core/animation/LengthPairStyleInterpolation.h" #include "core/animation/LengthStyleInterpolation.h" #include "core/animation/ListStyleInterpolation.h" -#include "core/animation/SVGAngleInterpolationType.h" -#include "core/animation/SVGIntegerInterpolationType.h" -#include "core/animation/SVGIntegerOptionalIntegerInterpolationType.h" -#include "core/animation/SVGLengthInterpolationType.h" -#include "core/animation/SVGLengthListInterpolationType.h" -#include "core/animation/SVGNumberInterpolationType.h" -#include "core/animation/SVGNumberListInterpolationType.h" -#include "core/animation/SVGNumberOptionalNumberInterpolationType.h" -#include "core/animation/SVGPathInterpolationType.h" -#include "core/animation/SVGPointListInterpolationType.h" -#include "core/animation/SVGRectInterpolationType.h" -#include "core/animation/SVGTransformListInterpolationType.h" -#include "core/animation/SVGValueInterpolationType.h" +#include "core/animation/PropertyInterpolationTypesMapping.h" #include "core/animation/css/CSSAnimations.h" #include "core/css/CSSPropertyMetadata.h" #include "core/css/resolver/StyleResolver.h" @@ -150,278 +123,6 @@ return true; } -namespace { - -// TODO(alancutter): Move this into its own file. -const InterpolationTypes* applicableTypesForProperty(PropertyHandle property) -{ - // TODO(alancutter): Initialise this entire HashMap once instead of initialising each property individually. - using ApplicableTypesMap = HashMap<PropertyHandle, OwnPtr<const InterpolationTypes>>; - DEFINE_STATIC_LOCAL(ApplicableTypesMap, applicableTypesMap, ()); - auto entry = applicableTypesMap.find(property); - if (entry != applicableTypesMap.end()) - return entry->value.get(); - - bool fallbackToLegacy = false; - OwnPtr<InterpolationTypes> applicableTypes = adoptPtr(new InterpolationTypes()); - - if (property.isCSSProperty() || property.isPresentationAttribute()) { - CSSPropertyID cssProperty = property.isCSSProperty() ? property.cssProperty() : property.presentationAttribute(); - switch (cssProperty) { - case CSSPropertyBaselineShift: - case CSSPropertyBorderBottomWidth: - case CSSPropertyBorderLeftWidth: - case CSSPropertyBorderRightWidth: - case CSSPropertyBorderTopWidth: - case CSSPropertyBottom: - case CSSPropertyCx: - case CSSPropertyCy: - case CSSPropertyFlexBasis: - case CSSPropertyHeight: - case CSSPropertyLeft: - case CSSPropertyLetterSpacing: - case CSSPropertyMarginBottom: - case CSSPropertyMarginLeft: - case CSSPropertyMarginRight: - case CSSPropertyMarginTop: - case CSSPropertyMaxHeight: - case CSSPropertyMaxWidth: - case CSSPropertyMinHeight: - case CSSPropertyMinWidth: - case CSSPropertyMotionOffset: - case CSSPropertyOutlineOffset: - case CSSPropertyOutlineWidth: - case CSSPropertyPaddingBottom: - case CSSPropertyPaddingLeft: - case CSSPropertyPaddingRight: - case CSSPropertyPaddingTop: - case CSSPropertyPerspective: - case CSSPropertyR: - case CSSPropertyRight: - case CSSPropertyRx: - case CSSPropertyRy: - case CSSPropertyShapeMargin: - case CSSPropertyStrokeDashoffset: - case CSSPropertyStrokeWidth: - case CSSPropertyTop: - case CSSPropertyVerticalAlign: - case CSSPropertyWebkitBorderHorizontalSpacing: - case CSSPropertyWebkitBorderVerticalSpacing: - case CSSPropertyWebkitColumnGap: - case CSSPropertyWebkitColumnRuleWidth: - case CSSPropertyWebkitColumnWidth: - case CSSPropertyWebkitPerspectiveOriginX: - case CSSPropertyWebkitPerspectiveOriginY: - case CSSPropertyWebkitTransformOriginX: - case CSSPropertyWebkitTransformOriginY: - case CSSPropertyWebkitTransformOriginZ: - case CSSPropertyWidth: - case CSSPropertyWordSpacing: - case CSSPropertyX: - case CSSPropertyY: - applicableTypes->append(adoptPtr(new CSSLengthInterpolationType(cssProperty))); - break; - case CSSPropertyFlexGrow: - case CSSPropertyFlexShrink: - case CSSPropertyFillOpacity: - case CSSPropertyFloodOpacity: - case CSSPropertyFontSizeAdjust: - case CSSPropertyOpacity: - case CSSPropertyOrphans: - case CSSPropertyShapeImageThreshold: - case CSSPropertyStopOpacity: - case CSSPropertyStrokeMiterlimit: - case CSSPropertyStrokeOpacity: - case CSSPropertyWebkitColumnCount: - case CSSPropertyWidows: - case CSSPropertyZIndex: - applicableTypes->append(adoptPtr(new CSSNumberInterpolationType(cssProperty))); - break; - case CSSPropertyLineHeight: - applicableTypes->append(adoptPtr(new CSSLengthInterpolationType(cssProperty))); - applicableTypes->append(adoptPtr(new CSSNumberInterpolationType(cssProperty))); - break; - case CSSPropertyBackgroundColor: - case CSSPropertyBorderBottomColor: - case CSSPropertyBorderLeftColor: - case CSSPropertyBorderRightColor: - case CSSPropertyBorderTopColor: - case CSSPropertyColor: - case CSSPropertyFloodColor: - case CSSPropertyLightingColor: - case CSSPropertyOutlineColor: - case CSSPropertyStopColor: - case CSSPropertyTextDecorationColor: - case CSSPropertyWebkitColumnRuleColor: - case CSSPropertyWebkitTextStrokeColor: - applicableTypes->append(adoptPtr(new CSSColorInterpolationType(cssProperty))); - break; - case CSSPropertyFill: - case CSSPropertyStroke: - applicableTypes->append(adoptPtr(new CSSPaintInterpolationType(cssProperty))); - break; - case CSSPropertyD: - applicableTypes->append(adoptPtr(new CSSPathInterpolationType(cssProperty))); - break; - case CSSPropertyBoxShadow: - case CSSPropertyTextShadow: - applicableTypes->append(adoptPtr(new CSSShadowListInterpolationType(cssProperty))); - break; - case CSSPropertyBorderImageSource: - case CSSPropertyListStyleImage: - case CSSPropertyWebkitMaskBoxImageSource: - applicableTypes->append(adoptPtr(new CSSImageInterpolationType(cssProperty))); - break; - case CSSPropertyBackgroundImage: - case CSSPropertyWebkitMaskImage: - applicableTypes->append(adoptPtr(new CSSImageListInterpolationType(cssProperty))); - break; - case CSSPropertyStrokeDasharray: - applicableTypes->append(adoptPtr(new CSSLengthListInterpolationType(cssProperty))); - break; - case CSSPropertyFontWeight: - applicableTypes->append(adoptPtr(new CSSFontWeightInterpolationType(cssProperty))); - break; - case CSSPropertyVisibility: - applicableTypes->append(adoptPtr(new CSSVisibilityInterpolationType(cssProperty))); - break; - default: - // TODO(alancutter): Support all interpolable CSS properties here so we can stop falling back to the old StyleInterpolation implementation. - if (CSSPropertyMetadata::isInterpolableProperty(cssProperty)) - fallbackToLegacy = true; - break; - } - - if (!fallbackToLegacy) - applicableTypes->append(adoptPtr(new CSSValueInterpolationType(cssProperty))); - - } else { - const QualifiedName& attribute = property.svgAttribute(); - if (attribute == SVGNames::orientAttr) { - applicableTypes->append(adoptPtr(new SVGAngleInterpolationType(attribute))); - } else if (attribute == SVGNames::numOctavesAttr - || attribute == SVGNames::targetXAttr - || attribute == SVGNames::targetYAttr) { - applicableTypes->append(adoptPtr(new SVGIntegerInterpolationType(attribute))); - } else if (attribute == SVGNames::orderAttr) { - applicableTypes->append(adoptPtr(new SVGIntegerOptionalIntegerInterpolationType(attribute))); - } else if (attribute == SVGNames::cxAttr - || attribute == SVGNames::cyAttr - || attribute == SVGNames::fxAttr - || attribute == SVGNames::fyAttr - || attribute == SVGNames::heightAttr - || attribute == SVGNames::markerHeightAttr - || attribute == SVGNames::markerWidthAttr - || attribute == SVGNames::rAttr - || attribute == SVGNames::refXAttr - || attribute == SVGNames::refYAttr - || attribute == SVGNames::rxAttr - || attribute == SVGNames::ryAttr - || attribute == SVGNames::startOffsetAttr - || attribute == SVGNames::textLengthAttr - || attribute == SVGNames::widthAttr - || attribute == SVGNames::x1Attr - || attribute == SVGNames::x2Attr - || attribute == SVGNames::y1Attr - || attribute == SVGNames::y2Attr) { - applicableTypes->append(adoptPtr(new SVGLengthInterpolationType(attribute))); - } else if (attribute == SVGNames::dxAttr - || attribute == SVGNames::dyAttr) { - applicableTypes->append(adoptPtr(new SVGNumberInterpolationType(attribute))); - applicableTypes->append(adoptPtr(new SVGLengthListInterpolationType(attribute))); - } else if (attribute == SVGNames::xAttr - || attribute == SVGNames::yAttr) { - applicableTypes->append(adoptPtr(new SVGLengthInterpolationType(attribute))); - applicableTypes->append(adoptPtr(new SVGLengthListInterpolationType(attribute))); - } else if (attribute == SVGNames::amplitudeAttr - || attribute == SVGNames::azimuthAttr - || attribute == SVGNames::biasAttr - || attribute == SVGNames::diffuseConstantAttr - || attribute == SVGNames::divisorAttr - || attribute == SVGNames::elevationAttr - || attribute == SVGNames::exponentAttr - || attribute == SVGNames::interceptAttr - || attribute == SVGNames::k1Attr - || attribute == SVGNames::k2Attr - || attribute == SVGNames::k3Attr - || attribute == SVGNames::k4Attr - || attribute == SVGNames::limitingConeAngleAttr - || attribute == SVGNames::offsetAttr - || attribute == SVGNames::pathLengthAttr - || attribute == SVGNames::pointsAtXAttr - || attribute == SVGNames::pointsAtYAttr - || attribute == SVGNames::pointsAtZAttr - || attribute == SVGNames::scaleAttr - || attribute == SVGNames::seedAttr - || attribute == SVGNames::slopeAttr - || attribute == SVGNames::specularConstantAttr - || attribute == SVGNames::specularExponentAttr - || attribute == SVGNames::surfaceScaleAttr - || attribute == SVGNames::zAttr) { - applicableTypes->append(adoptPtr(new SVGNumberInterpolationType(attribute))); - } else if (attribute == SVGNames::kernelMatrixAttr - || attribute == SVGNames::rotateAttr - || attribute == SVGNames::tableValuesAttr - || attribute == SVGNames::valuesAttr) { - applicableTypes->append(adoptPtr(new SVGNumberListInterpolationType(attribute))); - } else if (attribute == SVGNames::baseFrequencyAttr - || attribute == SVGNames::kernelUnitLengthAttr - || attribute == SVGNames::radiusAttr - || attribute == SVGNames::stdDeviationAttr) { - applicableTypes->append(adoptPtr(new SVGNumberOptionalNumberInterpolationType(attribute))); - } else if (attribute == SVGNames::dAttr) { - applicableTypes->append(adoptPtr(new SVGPathInterpolationType(attribute))); - } else if (attribute == SVGNames::pointsAttr) { - applicableTypes->append(adoptPtr(new SVGPointListInterpolationType(attribute))); - } else if (attribute == SVGNames::viewBoxAttr) { - applicableTypes->append(adoptPtr(new SVGRectInterpolationType(attribute))); - } else if (attribute == SVGNames::gradientTransformAttr - || attribute == SVGNames::patternTransformAttr - || attribute == SVGNames::transformAttr) { - applicableTypes->append(adoptPtr(new SVGTransformListInterpolationType(attribute))); - } else if (attribute == HTMLNames::classAttr - || attribute == SVGNames::clipPathUnitsAttr - || attribute == SVGNames::edgeModeAttr - || attribute == SVGNames::filterUnitsAttr - || attribute == SVGNames::gradientUnitsAttr - || attribute == SVGNames::inAttr - || attribute == SVGNames::in2Attr - || attribute == SVGNames::lengthAdjustAttr - || attribute == SVGNames::markerUnitsAttr - || attribute == SVGNames::maskContentUnitsAttr - || attribute == SVGNames::maskUnitsAttr - || attribute == SVGNames::methodAttr - || attribute == SVGNames::modeAttr - || attribute == SVGNames::operatorAttr - || attribute == SVGNames::patternContentUnitsAttr - || attribute == SVGNames::patternUnitsAttr - || attribute == SVGNames::preserveAlphaAttr - || attribute == SVGNames::preserveAspectRatioAttr - || attribute == SVGNames::primitiveUnitsAttr - || attribute == SVGNames::resultAttr - || attribute == SVGNames::spacingAttr - || attribute == SVGNames::spreadMethodAttr - || attribute == SVGNames::stitchTilesAttr - || attribute == SVGNames::targetAttr - || attribute == SVGNames::typeAttr - || attribute == SVGNames::xChannelSelectorAttr - || attribute == SVGNames::yChannelSelectorAttr - || attribute == XLinkNames::hrefAttr) { - // Use default SVGValueInterpolationType. - } else { - fallbackToLegacy = true; - } - - if (!fallbackToLegacy) - applicableTypes->append(adoptPtr(new SVGValueInterpolationType(attribute))); - } - - auto addResult = applicableTypesMap.add(property, fallbackToLegacy ? nullptr : applicableTypes.release()); - return addResult.storedValue->value.get(); -} - -} // namespace - PassRefPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyframe::createLegacyStyleInterpolation(CSSPropertyID property, Keyframe::PropertySpecificKeyframe& end, Element* element, const ComputedStyle* baseStyle) const { CSSValue& fromCSSValue = *m_value.get(); @@ -440,7 +141,7 @@ PassRefPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyframe::maybeCreateInterpolation(PropertyHandle propertyHandle, Keyframe::PropertySpecificKeyframe& end, Element* element, const ComputedStyle* baseStyle) const { - const InterpolationTypes* applicableTypes = applicableTypesForProperty(propertyHandle); + const InterpolationTypes* applicableTypes = PropertyInterpolationTypesMapping::get(propertyHandle); if (applicableTypes) return InvalidatableInterpolation::create(propertyHandle, *applicableTypes, *this, end); @@ -620,7 +321,7 @@ PassRefPtr<Interpolation> SVGPropertySpecificKeyframe::maybeCreateInterpolation(PropertyHandle propertyHandle, Keyframe::PropertySpecificKeyframe& end, Element*, const ComputedStyle*) const { - const InterpolationTypes* applicableTypes = applicableTypesForProperty(propertyHandle); + const InterpolationTypes* applicableTypes = PropertyInterpolationTypesMapping::get(propertyHandle); ASSERT(applicableTypes); return InvalidatableInterpolation::create(propertyHandle, *applicableTypes, *this, end); }
diff --git a/third_party/WebKit/Source/core/clipboard/DataTransfer.cpp b/third_party/WebKit/Source/core/clipboard/DataTransfer.cpp index 8e1e9c1d0..3b01ec0 100644 --- a/third_party/WebKit/Source/core/clipboard/DataTransfer.cpp +++ b/third_party/WebKit/Source/core/clipboard/DataTransfer.cpp
@@ -230,7 +230,7 @@ if (!canSetDragImage()) return; - m_dragImage = 0; + m_dragImage = nullptr; m_dragLoc = IntPoint(); m_dragImageElement = nullptr; } @@ -513,6 +513,7 @@ DEFINE_TRACE(DataTransfer) { visitor->trace(m_dataObject); + visitor->trace(m_dragImage); #if ENABLE(OILPAN) visitor->trace(m_dragImageElement); #endif
diff --git a/third_party/WebKit/Source/core/clipboard/DataTransfer.h b/third_party/WebKit/Source/core/clipboard/DataTransfer.h index ff489c30..c36b790 100644 --- a/third_party/WebKit/Source/core/clipboard/DataTransfer.h +++ b/third_party/WebKit/Source/core/clipboard/DataTransfer.h
@@ -28,7 +28,6 @@ #include "core/CoreExport.h" #include "core/clipboard/DataTransferAccessPolicy.h" #include "core/fetch/ImageResource.h" -#include "core/fetch/ResourcePtr.h" #include "core/page/DragActions.h" #include "platform/geometry/IntPoint.h" #include "platform/heap/Handle.h" @@ -131,7 +130,7 @@ Member<DataObject> m_dataObject; IntPoint m_dragLoc; - ResourcePtr<ImageResource> m_dragImage; + RefPtrWillBeMember<ImageResource> m_dragImage; RefPtrWillBeMember<Node> m_dragImageElement; };
diff --git a/third_party/WebKit/Source/core/core.gyp b/third_party/WebKit/Source/core/core.gyp index 1272f45..28361dc 100644 --- a/third_party/WebKit/Source/core/core.gyp +++ b/third_party/WebKit/Source/core/core.gyp
@@ -169,8 +169,9 @@ 'dependencies': [ 'webcore_prerequisites', 'core_generated.gyp:make_core_generated', - 'inspector_protocol_sources', 'inspector_instrumentation_sources', + 'inspector_protocol_sources', + 'inspector/v8/v8_inspector.gyp:injected_script_sources', '../bindings/core/v8/generated.gyp:bindings_core_v8_generated', # FIXME: don't depend on bindings_modules http://crbug.com/358074 '../bindings/modules/generated.gyp:modules_event_generated', @@ -234,8 +235,9 @@ 'target_name': 'webcore_prerequisites', 'type': 'none', 'dependencies': [ - 'inspector_protocol_sources', 'inspector_instrumentation_sources', + 'inspector_protocol_sources', + 'inspector/v8/v8_inspector.gyp:injected_script_sources', 'core_generated.gyp:make_core_generated', '../bindings/core/v8/generated.gyp:bindings_core_v8_generated', # FIXME: don't depend on bindings_modules http://crbug.com/358074 @@ -649,8 +651,9 @@ # webcore_generated dependency 'core_generated.gyp:make_core_generated', - 'inspector_protocol_sources', 'inspector_instrumentation_sources', + 'inspector_protocol_sources', + 'inspector/v8/v8_inspector.gyp:injected_script_sources', '../bindings/core/v8/generated.gyp:bindings_core_v8_generated', # FIXME: don't depend on bindings_modules http://crbug.com/358074 '../bindings/modules/generated.gyp:modules_event_generated',
diff --git a/third_party/WebKit/Source/core/core.gypi b/third_party/WebKit/Source/core/core.gypi index 98f075a3..a230010 100644 --- a/third_party/WebKit/Source/core/core.gypi +++ b/third_party/WebKit/Source/core/core.gypi
@@ -267,6 +267,7 @@ 'streams/ReadableByteStreamReader.idl', 'streams/ReadableStreamReader.idl', 'streams/Stream.idl', + 'streams/UnderlyingSourceBase.idl', 'svg/SVGAElement.idl', 'svg/SVGAngle.idl', 'svg/SVGAnimateElement.idl', @@ -937,6 +938,8 @@ 'animation/PrimitiveInterpolation.h', 'animation/PropertyHandle.cpp', 'animation/PropertyHandle.h', + 'animation/PropertyInterpolationTypesMapping.cpp', + 'animation/PropertyInterpolationTypesMapping.h', 'animation/SVGAngleInterpolationType.cpp', 'animation/SVGAngleInterpolationType.h', 'animation/SVGIntegerInterpolationType.cpp', @@ -1441,6 +1444,8 @@ 'editing/commands/DeleteSelectionCommand.h', 'editing/commands/EditCommand.cpp', 'editing/commands/EditCommand.h', + 'editing/commands/EditingState.cpp', + 'editing/commands/EditingState.h', 'editing/commands/EditorCommand.cpp', 'editing/commands/FormatBlockCommand.cpp', 'editing/commands/FormatBlockCommand.h', @@ -1582,8 +1587,6 @@ 'fetch/ResourceLoaderOptions.h', 'fetch/ResourceLoaderSet.cpp', 'fetch/ResourceLoaderSet.h', - 'fetch/ResourcePtr.cpp', - 'fetch/ResourcePtr.h', 'fetch/ScriptResource.cpp', 'fetch/ScriptResource.h', 'fetch/SubstituteData.h', @@ -1813,9 +1816,18 @@ 'inspector/ScriptArguments.h', 'inspector/ThreadDebugger.cpp', 'inspector/ThreadDebugger.h', + 'inspector/WorkerConsoleAgent.cpp', + 'inspector/WorkerConsoleAgent.h', + 'inspector/WorkerDebuggerAgent.cpp', + 'inspector/WorkerDebuggerAgent.h', + 'inspector/WorkerInspectorController.cpp', + 'inspector/WorkerInspectorController.h', + 'inspector/WorkerRuntimeAgent.cpp', + 'inspector/WorkerRuntimeAgent.h', + 'inspector/WorkerThreadDebugger.cpp', + 'inspector/WorkerThreadDebugger.h', 'inspector/v8/AsyncCallChain.cpp', 'inspector/v8/AsyncCallChain.h', - 'inspector/v8/EventListenerInfo.h', 'inspector/v8/InspectorWrapper.cpp', 'inspector/v8/InspectorWrapper.h', 'inspector/v8/IgnoreExceptionsScope.h', @@ -1833,17 +1845,12 @@ 'inspector/v8/PromiseTracker.cpp', 'inspector/v8/PromiseTracker.h', 'inspector/v8/ScriptBreakpoint.h', - 'inspector/v8/SourceMap.cpp', - 'inspector/v8/SourceMap.h', 'inspector/v8/RemoteObjectId.cpp', 'inspector/v8/RemoteObjectId.h', 'inspector/v8/V8AsyncCallTracker.cpp', 'inspector/v8/V8AsyncCallTracker.h', - 'inspector/v8/V8DebuggerAgent.h', 'inspector/v8/V8DebuggerAgentImpl.cpp', 'inspector/v8/V8DebuggerAgentImpl.h', - 'inspector/v8/V8Debugger.h', - 'inspector/v8/V8DebuggerClient.h', 'inspector/v8/V8DebuggerImpl.cpp', 'inspector/v8/V8DebuggerImpl.h', 'inspector/v8/V8DebuggerScript.cpp', @@ -1854,29 +1861,24 @@ 'inspector/v8/V8InjectedScriptHost.h', 'inspector/v8/V8JavaScriptCallFrame.cpp', 'inspector/v8/V8JavaScriptCallFrame.h', - 'inspector/v8/V8ProfilerAgent.h', 'inspector/v8/V8ProfilerAgentImpl.cpp', 'inspector/v8/V8ProfilerAgentImpl.h', 'inspector/v8/V8Regex.cpp', 'inspector/v8/V8Regex.h', - 'inspector/v8/V8RuntimeAgent.h', 'inspector/v8/V8RuntimeAgentImpl.cpp', 'inspector/v8/V8RuntimeAgentImpl.h', - 'inspector/v8/V8StackTrace.h', 'inspector/v8/V8StackTraceImpl.cpp', 'inspector/v8/V8StackTraceImpl.h', 'inspector/v8/V8StringUtil.cpp', 'inspector/v8/V8StringUtil.h', - 'inspector/WorkerConsoleAgent.cpp', - 'inspector/WorkerConsoleAgent.h', - 'inspector/WorkerDebuggerAgent.cpp', - 'inspector/WorkerDebuggerAgent.h', - 'inspector/WorkerInspectorController.cpp', - 'inspector/WorkerInspectorController.h', - 'inspector/WorkerRuntimeAgent.cpp', - 'inspector/WorkerRuntimeAgent.h', - 'inspector/WorkerThreadDebugger.cpp', - 'inspector/WorkerThreadDebugger.h', + 'inspector/v8/public/V8EventListenerInfo.h', + 'inspector/v8/public/V8ContentSearchUtil.h', + 'inspector/v8/public/V8Debugger.h', + 'inspector/v8/public/V8DebuggerAgent.h', + 'inspector/v8/public/V8DebuggerClient.h', + 'inspector/v8/public/V8ProfilerAgent.h', + 'inspector/v8/public/V8RuntimeAgent.h', + 'inspector/v8/public/V8StackTrace.h', 'loader/BeaconLoader.cpp', 'loader/BeaconLoader.h', 'loader/CookieJar.cpp', @@ -2157,12 +2159,15 @@ 'streams/ReadableByteStreamReader.h', 'streams/ReadableStream.cpp', 'streams/ReadableStream.h', + 'streams/ReadableStreamController.h', 'streams/ReadableStreamImpl.h', 'streams/ReadableStreamReader.cpp', 'streams/ReadableStreamReader.h', 'streams/Stream.cpp', 'streams/Stream.h', 'streams/UnderlyingSource.h', + 'streams/UnderlyingSourceBase.h', + 'streams/UnderlyingSourceBase.cpp', 'timing/ConsoleMemory.cpp', 'timing/ConsoleMemory.h', 'timing/DOMWindowPerformance.cpp', @@ -3954,6 +3959,7 @@ 'editing/VisibleSelectionTest.cpp', 'editing/VisibleUnitsTest.cpp', 'editing/serializers/StyledMarkupSerializerTest.cpp', + 'editing/spellcheck/SpellCheckerTest.cpp', 'events/EventPathTest.cpp', 'events/PointerEventManagerTest.cpp', 'fetch/CachingCorrectnessTest.cpp', @@ -3978,7 +3984,6 @@ 'frame/csp/CSPSourceListTest.cpp', 'frame/csp/CSPSourceTest.cpp', 'frame/csp/ContentSecurityPolicyTest.cpp', - 'inspector/v8/SourceMapTest.cpp', 'html/FormDataTest.cpp', 'html/HTMLDimensionTest.cpp', 'html/HTMLFormControlElementTest.cpp',
diff --git a/third_party/WebKit/Source/core/core_generated.gypi b/third_party/WebKit/Source/core/core_generated.gypi index 190a07c..c07b12f 100644 --- a/third_party/WebKit/Source/core/core_generated.gypi +++ b/third_party/WebKit/Source/core/core_generated.gypi
@@ -110,6 +110,10 @@ '<(blink_core_output_dir)/InstrumentingAgentsInl.h', '<(blink_core_output_dir)/InspectorInstrumentationImpl.cpp', + # Additional files from injected_script_sources list. + '<(blink_core_output_dir)/inspector/v8/DebuggerScript.h', + '<(blink_core_output_dir)/inspector/v8/InjectedScriptSource.h', + # Additional .cpp files for SVG. '<(blink_core_output_dir)/SVGElementFactory.cpp',
diff --git a/third_party/WebKit/Source/core/css/CSSCrossfadeValue.cpp b/third_party/WebKit/Source/core/css/CSSCrossfadeValue.cpp index ec59447..f852653 100644 --- a/third_party/WebKit/Source/core/css/CSSCrossfadeValue.cpp +++ b/third_party/WebKit/Source/core/css/CSSCrossfadeValue.cpp
@@ -125,10 +125,14 @@ void CSSCrossfadeValue::dispose() { - if (m_cachedFromImage) + if (m_cachedFromImage) { m_cachedFromImage->removeClient(&m_crossfadeSubimageObserver); - if (m_cachedToImage) + m_cachedFromImage = nullptr; + } + if (m_cachedToImage) { m_cachedToImage->removeClient(&m_crossfadeSubimageObserver); + m_cachedToImage = nullptr; + } } String CSSCrossfadeValue::customCSSText() const @@ -190,8 +194,8 @@ void CSSCrossfadeValue::loadSubimages(Document* document) { - ResourcePtr<ImageResource> oldCachedFromImage = m_cachedFromImage; - ResourcePtr<ImageResource> oldCachedToImage = m_cachedToImage; + RefPtrWillBeRawPtr<ImageResource> oldCachedFromImage = m_cachedFromImage; + RefPtrWillBeRawPtr<ImageResource> oldCachedToImage = m_cachedToImage; m_cachedFromImage = cachedImageForCSSValue(m_fromValue.get(), document); m_cachedToImage = cachedImageForCSSValue(m_toValue.get(), document); @@ -273,6 +277,8 @@ visitor->trace(m_fromValue); visitor->trace(m_toValue); visitor->trace(m_percentageValue); + visitor->trace(m_cachedFromImage); + visitor->trace(m_cachedToImage); visitor->trace(m_crossfadeSubimageObserver); CSSImageGeneratorValue::traceAfterDispatch(visitor); }
diff --git a/third_party/WebKit/Source/core/css/CSSCrossfadeValue.h b/third_party/WebKit/Source/core/css/CSSCrossfadeValue.h index 8f93a01a..0a3a9d6 100644 --- a/third_party/WebKit/Source/core/css/CSSCrossfadeValue.h +++ b/third_party/WebKit/Source/core/css/CSSCrossfadeValue.h
@@ -31,7 +31,6 @@ #include "core/css/CSSPrimitiveValue.h" #include "core/fetch/ImageResource.h" #include "core/fetch/ImageResourceClient.h" -#include "core/fetch/ResourcePtr.h" #include "platform/graphics/Image.h" namespace blink { @@ -102,8 +101,8 @@ RefPtrWillBeMember<CSSValue> m_toValue; RefPtrWillBeMember<CSSPrimitiveValue> m_percentageValue; - ResourcePtr<ImageResource> m_cachedFromImage; - ResourcePtr<ImageResource> m_cachedToImage; + RefPtrWillBeMember<ImageResource> m_cachedFromImage; + RefPtrWillBeMember<ImageResource> m_cachedToImage; RefPtr<Image> m_generatedImage;
diff --git a/third_party/WebKit/Source/core/css/CSSFontFaceSrcValue.cpp b/third_party/WebKit/Source/core/css/CSSFontFaceSrcValue.cpp index 2244957..0befa011 100644 --- a/third_party/WebKit/Source/core/css/CSSFontFaceSrcValue.cpp +++ b/third_party/WebKit/Source/core/css/CSSFontFaceSrcValue.cpp
@@ -72,7 +72,7 @@ bool CSSFontFaceSrcValue::hasFailedOrCanceledSubresources() const { - return m_fetched && m_fetched->loadFailedOrCanceled(); + return m_fetched && m_fetched->resource()->loadFailedOrCanceled(); } static void setCrossOriginAccessControl(FetchRequest& request, SecurityOrigin* securityOrigin) @@ -93,13 +93,16 @@ SecurityOrigin* securityOrigin = document->securityOrigin(); setCrossOriginAccessControl(request, securityOrigin); request.mutableResourceRequest().setHTTPReferrer(SecurityPolicy::generateReferrer(m_referrer.referrerPolicy, request.url(), m_referrer.referrer)); - m_fetched = FontResource::fetch(request, document->fetcher()); + RefPtrWillBeRawPtr<FontResource> resource = FontResource::fetch(request, document->fetcher()); + if (!resource) + return nullptr; + m_fetched = FontResourceHelper::create(resource.release()); } else { // FIXME: CSSFontFaceSrcValue::fetch is invoked when @font-face rule // is processed by StyleResolver / StyleEngine. restoreCachedResourceIfNeeded(document); } - return m_fetched.get(); + return m_fetched->resource(); } void CSSFontFaceSrcValue::restoreCachedResourceIfNeeded(Document* document) @@ -113,9 +116,9 @@ FetchRequest request(ResourceRequest(resourceURL), FetchInitiatorTypeNames::css); request.setContentSecurityCheck(m_shouldCheckContentSecurityPolicy); - MixedContentChecker::shouldBlockFetch(document->frame(), m_fetched->lastResourceRequest(), - m_fetched->lastResourceRequest().url(), MixedContentChecker::SendReport); - document->fetcher()->requestLoadStarted(m_fetched.get(), request, ResourceFetcher::ResourceLoadingFromCache); + MixedContentChecker::shouldBlockFetch(document->frame(), m_fetched->resource()->lastResourceRequest(), + m_fetched->resource()->lastResourceRequest().url(), MixedContentChecker::SendReport); + document->fetcher()->requestLoadStarted(m_fetched->resource(), request, ResourceFetcher::ResourceLoadingFromCache); } bool CSSFontFaceSrcValue::equals(const CSSFontFaceSrcValue& other) const
diff --git a/third_party/WebKit/Source/core/css/CSSFontFaceSrcValue.h b/third_party/WebKit/Source/core/css/CSSFontFaceSrcValue.h index ab53370..eea8f3e 100644 --- a/third_party/WebKit/Source/core/css/CSSFontFaceSrcValue.h +++ b/third_party/WebKit/Source/core/css/CSSFontFaceSrcValue.h
@@ -27,14 +27,14 @@ #define CSSFontFaceSrcValue_h #include "core/css/CSSValue.h" -#include "core/fetch/ResourcePtr.h" +#include "core/fetch/FontResource.h" +#include "core/fetch/ResourceOwner.h" #include "platform/weborigin/Referrer.h" #include "wtf/PassRefPtr.h" #include "wtf/text/WTFString.h" namespace blink { -class FontResource; class Document; class CSSFontFaceSrcValue : public CSSValue { @@ -65,7 +65,11 @@ bool equals(const CSSFontFaceSrcValue&) const; - DEFINE_INLINE_TRACE_AFTER_DISPATCH() { CSSValue::traceAfterDispatch(visitor); } + DEFINE_INLINE_TRACE_AFTER_DISPATCH() + { + visitor->trace(m_fetched); + CSSValue::traceAfterDispatch(visitor); + } private: CSSFontFaceSrcValue(const String& resource, bool local, ContentSecurityPolicyDisposition shouldCheckContentSecurityPolicy) @@ -84,7 +88,26 @@ bool m_isLocal; ContentSecurityPolicyDisposition m_shouldCheckContentSecurityPolicy; - ResourcePtr<FontResource> m_fetched; + + class FontResourceHelper : public NoBaseWillBeGarbageCollectedFinalized<FontResourceHelper>, public ResourceOwner<FontResource> { + WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(FontResourceHelper); + public: + static PassOwnPtrWillBeRawPtr<FontResourceHelper> create(PassRefPtrWillBeRawPtr<FontResource> resource) + { + return adoptPtrWillBeNoop(new FontResourceHelper(resource)); + } + + DEFINE_INLINE_VIRTUAL_TRACE() { ResourceOwner<FontResource>::trace(visitor); } + + private: + FontResourceHelper(PassRefPtrWillBeRawPtr<FontResource> resource) + { + setResource(resource); + } + + String debugName() const override { return "CSSFontFaceSrcValue::FontResourceHelper"; } + }; + OwnPtrWillBeMember<FontResourceHelper> m_fetched; }; DEFINE_CSS_VALUE_TYPE_CASTS(CSSFontFaceSrcValue, isFontFaceSrcValue());
diff --git a/third_party/WebKit/Source/core/css/CSSImageSetValue.cpp b/third_party/WebKit/Source/core/css/CSSImageSetValue.cpp index b68a44a..aaf2bb08 100644 --- a/third_party/WebKit/Source/core/css/CSSImageSetValue.cpp +++ b/third_party/WebKit/Source/core/css/CSSImageSetValue.cpp
@@ -122,7 +122,7 @@ if (crossOrigin != CrossOriginAttributeNotSet) request.setCrossOriginAccessControl(document->securityOrigin(), crossOrigin); - if (ResourcePtr<ImageResource> cachedImage = ImageResource::fetch(request, document->fetcher())) + if (RefPtrWillBeRawPtr<ImageResource> cachedImage = ImageResource::fetch(request, document->fetcher())) m_cachedImage = StyleFetchedImageSet::create(cachedImage.get(), image.scaleFactor, this, request.url()); else m_cachedImage = StyleInvalidImage::create(image.imageURL);
diff --git a/third_party/WebKit/Source/core/css/CSSImageValue.cpp b/third_party/WebKit/Source/core/css/CSSImageValue.cpp index 25a52502..fcbe961 100644 --- a/third_party/WebKit/Source/core/css/CSSImageValue.cpp +++ b/third_party/WebKit/Source/core/css/CSSImageValue.cpp
@@ -68,7 +68,7 @@ if (crossOrigin != CrossOriginAttributeNotSet) request.setCrossOriginAccessControl(document->securityOrigin(), crossOrigin); - if (ResourcePtr<ImageResource> cachedImage = ImageResource::fetch(request, document->fetcher())) + if (RefPtrWillBeRawPtr<ImageResource> cachedImage = ImageResource::fetch(request, document->fetcher())) m_cachedImage = StyleFetchedImage::create(cachedImage.get(), document, request.url()); }
diff --git a/third_party/WebKit/Source/core/css/CSSMatrix.cpp b/third_party/WebKit/Source/core/css/CSSMatrix.cpp index 4b9c196..3c4d5a3 100644 --- a/third_party/WebKit/Source/core/css/CSSMatrix.cpp +++ b/third_party/WebKit/Source/core/css/CSSMatrix.cpp
@@ -47,12 +47,12 @@ } CSSMatrix::CSSMatrix(const TransformationMatrix& m) - : m_matrix(adoptPtr(new TransformationMatrix(m))) + : m_matrix(TransformationMatrix::create(m)) { } CSSMatrix::CSSMatrix(const String& s, ExceptionState& exceptionState) - : m_matrix(adoptPtr(new TransformationMatrix)) + : m_matrix(TransformationMatrix::create()) { setMatrixValue(s, exceptionState); } @@ -82,7 +82,7 @@ // if a param has a percentage ('%') if (operations.dependsOnBoxSize()) exceptionState.throwDOMException(SyntaxError, "The transformation depends on the box size, which is not supported."); - m_matrix = adoptPtr(new TransformationMatrix); + m_matrix = TransformationMatrix::create(); operations.apply(FloatSize(0, 0), *m_matrix); } else { // There is something there but parsing failed. exceptionState.throwDOMException(SyntaxError, "Failed to parse '" + string + "'.");
diff --git a/third_party/WebKit/Source/core/css/CSSSVGDocumentValue.h b/third_party/WebKit/Source/core/css/CSSSVGDocumentValue.h index edd2357..11dd452 100644 --- a/third_party/WebKit/Source/core/css/CSSSVGDocumentValue.h +++ b/third_party/WebKit/Source/core/css/CSSSVGDocumentValue.h
@@ -27,7 +27,6 @@ #include "core/css/CSSValue.h" #include "core/fetch/DocumentResource.h" -#include "core/fetch/ResourcePtr.h" namespace blink { @@ -49,13 +48,17 @@ bool loadRequested() const { return m_loadRequested; } bool equals(const CSSSVGDocumentValue&) const; - DEFINE_INLINE_TRACE_AFTER_DISPATCH() { CSSValue::traceAfterDispatch(visitor); } + DEFINE_INLINE_TRACE_AFTER_DISPATCH() + { + visitor->trace(m_document); + CSSValue::traceAfterDispatch(visitor); + } private: CSSSVGDocumentValue(const String& url); String m_url; - ResourcePtr<DocumentResource> m_document; + RefPtrWillBeMember<DocumentResource> m_document; bool m_loadRequested; };
diff --git a/third_party/WebKit/Source/core/css/CSSStyleSheetResourceTest.cpp b/third_party/WebKit/Source/core/css/CSSStyleSheetResourceTest.cpp index 4c16737..5080f8e 100644 --- a/third_party/WebKit/Source/core/css/CSSStyleSheetResourceTest.cpp +++ b/third_party/WebKit/Source/core/css/CSSStyleSheetResourceTest.cpp
@@ -71,7 +71,7 @@ // the image resource. document()->fetcher()->setAutoLoadImages(false); - ResourcePtr<CSSStyleSheetResource> cssResource = CSSStyleSheetResource::createForTest(ResourceRequest(cssURL), "utf-8"); + RefPtrWillBeRawPtr<CSSStyleSheetResource> cssResource = CSSStyleSheetResource::createForTest(ResourceRequest(cssURL), "utf-8"); memoryCache()->add(cssResource.get()); cssResource->responseReceived(ResourceResponse(cssURL, "style/css", 0, nullAtom, String()), nullptr); cssResource->finish(); @@ -92,7 +92,7 @@ StyleRule::create(CSSSelectorList::adoptSelectorVector(selectors), ImmutableStylePropertySet::create(&property, 1, HTMLStandardMode))); crossfade->loadSubimages(document()); - ResourcePtr<Resource> imageResource = memoryCache()->resourceForURL(imageURL, MemoryCache::defaultCacheIdentifier()); + RefPtrWillBeRawPtr<Resource> imageResource = memoryCache()->resourceForURL(imageURL, MemoryCache::defaultCacheIdentifier()); ASSERT_TRUE(imageResource); ResourceResponse imageResponse; imageResponse.setURL(imageURL);
diff --git a/third_party/WebKit/Source/core/css/FontFace.cpp b/third_party/WebKit/Source/core/css/FontFace.cpp index c1e0181..11a1c2a6 100644 --- a/third_party/WebKit/Source/core/css/FontFace.cpp +++ b/third_party/WebKit/Source/core/css/FontFace.cpp
@@ -588,10 +588,10 @@ const Settings* settings = document ? document->settings() : nullptr; bool allowDownloading = settings && settings->downloadableBinaryFontsEnabled(); if (allowDownloading && item->isSupportedFormat() && document) { - FontResource* fetched = item->fetch(document); + RefPtrWillBeRawPtr<FontResource> fetched = item->fetch(document); if (fetched) { FontLoader* fontLoader = document->styleEngine().fontSelector()->fontLoader(); - source = adoptPtrWillBeNoop(new RemoteFontFaceSource(fetched, fontLoader, CSSValueToFontDisplay(m_display.get()))); + source = adoptPtrWillBeNoop(new RemoteFontFaceSource(fetched.release(), fontLoader, CSSValueToFontDisplay(m_display.get()))); } } } else {
diff --git a/third_party/WebKit/Source/core/css/FontLoader.cpp b/third_party/WebKit/Source/core/css/FontLoader.cpp index fda44d7..54958908 100644 --- a/third_party/WebKit/Source/core/css/FontLoader.cpp +++ b/third_party/WebKit/Source/core/css/FontLoader.cpp
@@ -12,16 +12,29 @@ namespace blink { -struct FontLoader::FontToLoad { +struct FontLoader::FontToLoad : public NoBaseWillBeGarbageCollectedFinalized<FontLoader::FontToLoad> { public: - static PassOwnPtr<FontToLoad> create(FontResource* fontResource, Document& document) + static PassOwnPtrWillBeRawPtr<FontToLoad> create(FontResource* fontResource, Document& document) { - return adoptPtr(new FontToLoad(fontResource, document)); + return adoptPtrWillBeNoop(new FontToLoad(fontResource, document)); } - ResourcePtr<FontResource> fontResource; + virtual ~FontToLoad() + { + ASSERT(!fontResource); + } + + RefPtrWillBeMember<FontResource> fontResource; OwnPtr<IncrementLoadEventDelayCount> delay; + void dispose() + { + fontResource = nullptr; + delay.clear(); + } + + DEFINE_INLINE_TRACE() { visitor->trace(fontResource); } + private: FontToLoad(FontResource* resource, Document& document) : fontResource(resource) @@ -78,6 +91,7 @@ fontToLoad->fontResource->beginLoadIfNeeded(m_document->fetcher()); else fontToLoad->fontResource->error(Resource::LoadError); + fontToLoad->dispose(); } // When the local fontsToBeginLoading vector goes out of scope it will @@ -119,13 +133,16 @@ void FontLoader::clearPendingFonts() { - for (const auto& fontToLoad : m_fontsToBeginLoading) + for (const auto& fontToLoad : m_fontsToBeginLoading) { fontToLoad->fontResource->didUnscheduleLoad(); + fontToLoad->dispose(); + } m_fontsToBeginLoading.clear(); } DEFINE_TRACE(FontLoader) { + visitor->trace(m_fontsToBeginLoading); visitor->trace(m_document); visitor->trace(m_fontSelector); }
diff --git a/third_party/WebKit/Source/core/css/FontLoader.h b/third_party/WebKit/Source/core/css/FontLoader.h index a7e7634..9221b4f5 100644 --- a/third_party/WebKit/Source/core/css/FontLoader.h +++ b/third_party/WebKit/Source/core/css/FontLoader.h
@@ -6,7 +6,6 @@ #define FontLoader_h #include "core/fetch/ResourceLoader.h" -#include "core/fetch/ResourcePtr.h" #include "platform/Timer.h" #include "platform/heap/Handle.h" #include "wtf/Vector.h" @@ -44,7 +43,7 @@ Timer<FontLoader> m_beginLoadingTimer; struct FontToLoad; - using FontsToLoadVector = Vector<OwnPtr<FontToLoad>>; + using FontsToLoadVector = WillBeHeapVector<OwnPtrWillBeMember<FontToLoad>>; FontsToLoadVector m_fontsToBeginLoading; RawPtrWillBeMember<CSSFontSelector> m_fontSelector; RawPtrWillBeWeakMember<Document> m_document;
diff --git a/third_party/WebKit/Source/core/css/RemoteFontFaceSource.cpp b/third_party/WebKit/Source/core/css/RemoteFontFaceSource.cpp index 160e397..c34eea7 100644 --- a/third_party/WebKit/Source/core/css/RemoteFontFaceSource.cpp +++ b/third_party/WebKit/Source/core/css/RemoteFontFaceSource.cpp
@@ -17,7 +17,7 @@ namespace blink { -RemoteFontFaceSource::RemoteFontFaceSource(FontResource* font, PassRefPtrWillBeRawPtr<FontLoader> fontLoader, FontDisplay display) +RemoteFontFaceSource::RemoteFontFaceSource(PassRefPtrWillBeRawPtr<FontResource> font, PassRefPtrWillBeRawPtr<FontLoader> fontLoader, FontDisplay display) : m_font(font) , m_fontLoader(fontLoader) , m_display(display) @@ -49,6 +49,7 @@ void RemoteFontFaceSource::dispose() { m_font->removeClient(this); + m_font = nullptr; pruneTable(); } @@ -186,6 +187,7 @@ DEFINE_TRACE(RemoteFontFaceSource) { + visitor->trace(m_font); visitor->trace(m_fontLoader); CSSFontFaceSource::trace(visitor); }
diff --git a/third_party/WebKit/Source/core/css/RemoteFontFaceSource.h b/third_party/WebKit/Source/core/css/RemoteFontFaceSource.h index 3faa5a7..006213c09 100644 --- a/third_party/WebKit/Source/core/css/RemoteFontFaceSource.h +++ b/third_party/WebKit/Source/core/css/RemoteFontFaceSource.h
@@ -7,7 +7,6 @@ #include "core/css/CSSFontFaceSource.h" #include "core/fetch/FontResource.h" -#include "core/fetch/ResourcePtr.h" #include "wtf/Allocator.h" namespace blink { @@ -28,7 +27,7 @@ public: enum DisplayPeriod { BlockPeriod, SwapPeriod, FailurePeriod }; - explicit RemoteFontFaceSource(FontResource*, PassRefPtrWillBeRawPtr<FontLoader>, FontDisplay); + explicit RemoteFontFaceSource(PassRefPtrWillBeRawPtr<FontResource>, PassRefPtrWillBeRawPtr<FontLoader>, FontDisplay); ~RemoteFontFaceSource() override; void dispose(); @@ -80,7 +79,7 @@ void switchToSwapPeriod(); void switchToFailurePeriod(); - ResourcePtr<FontResource> m_font; + RefPtrWillBeMember<FontResource> m_font; RefPtrWillBeMember<FontLoader> m_fontLoader; const FontDisplay m_display; DisplayPeriod m_period;
diff --git a/third_party/WebKit/Source/core/css/SelectorChecker.cpp b/third_party/WebKit/Source/core/css/SelectorChecker.cpp index 22d4d5f..2738219 100644 --- a/third_party/WebKit/Source/core/css/SelectorChecker.cpp +++ b/third_party/WebKit/Source/core/css/SelectorChecker.cpp
@@ -180,50 +180,6 @@ return !ElementTraversal::nextSibling(element, HasTagName(type)); } -static int nthChildIndex(Element& element) -{ - if (NthIndexCache* nthIndexCache = element.document().nthIndexCache()) - return nthIndexCache->nthChildIndex(element); - - int index = 1; - for (const Element* sibling = ElementTraversal::previousSibling(element); sibling; sibling = ElementTraversal::previousSibling(*sibling)) - index++; - - return index; -} - -static int nthOfTypeIndex(Element& element, const QualifiedName& type) -{ - if (NthIndexCache* nthIndexCache = element.document().nthIndexCache()) - return nthIndexCache->nthChildIndexOfType(element, type); - int index = 1; - for (const Element* sibling = ElementTraversal::previousSibling(element, HasTagName(type)); sibling; sibling = ElementTraversal::previousSibling(*sibling, HasTagName(type))) - ++index; - return index; -} - -static int nthLastChildIndex(Element& element) -{ - if (NthIndexCache* nthIndexCache = element.document().nthIndexCache()) - return nthIndexCache->nthLastChildIndex(element); - - int index = 1; - for (const Element* sibling = ElementTraversal::nextSibling(element); sibling; sibling = ElementTraversal::nextSibling(*sibling)) - ++index; - return index; -} - -static int nthLastOfTypeIndex(Element& element, const QualifiedName& type) -{ - if (NthIndexCache* nthIndexCache = element.document().nthIndexCache()) - return nthIndexCache->nthLastChildIndexOfType(element, type); - - int index = 1; - for (const Element* sibling = ElementTraversal::nextSibling(element, HasTagName(type)); sibling; sibling = ElementTraversal::nextSibling(*sibling, HasTagName(type))) - ++index; - return index; -} - // Recursive check of selectors and combinators // It can return 4 different values: // * SelectorMatches - the selector matches the element e @@ -770,14 +726,14 @@ if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { if (m_mode == ResolvingStyle) parent->setChildrenAffectedByForwardPositionalRules(); - return selector.matchNth(nthChildIndex(element)); + return selector.matchNth(NthIndexCache::nthChildIndex(element)); } break; case CSSSelector::PseudoNthOfType: if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { if (m_mode == ResolvingStyle) parent->setChildrenAffectedByForwardPositionalRules(); - return selector.matchNth(nthOfTypeIndex(element, element.tagQName())); + return selector.matchNth(NthIndexCache::nthOfTypeIndex(element)); } break; case CSSSelector::PseudoNthLastChild: @@ -786,7 +742,7 @@ parent->setChildrenAffectedByBackwardPositionalRules(); if (!parent->isFinishedParsingChildren()) return false; - return selector.matchNth(nthLastChildIndex(element)); + return selector.matchNth(NthIndexCache::nthLastChildIndex(element)); } break; case CSSSelector::PseudoNthLastOfType: @@ -795,7 +751,7 @@ parent->setChildrenAffectedByBackwardPositionalRules(); if (!parent->isFinishedParsingChildren()) return false; - return selector.matchNth(nthLastOfTypeIndex(element, element.tagQName())); + return selector.matchNth(NthIndexCache::nthLastOfTypeIndex(element)); } break; case CSSSelector::PseudoTarget:
diff --git a/third_party/WebKit/Source/core/css/StylePropertySerializer.cpp b/third_party/WebKit/Source/core/css/StylePropertySerializer.cpp index bac63e9..d9af51ef 100644 --- a/third_party/WebKit/Source/core/css/StylePropertySerializer.cpp +++ b/third_party/WebKit/Source/core/css/StylePropertySerializer.cpp
@@ -659,6 +659,7 @@ bool useRepeatXShorthand = false; bool useRepeatYShorthand = false; bool useSingleWordShorthand = false; + bool foundPositionXCSSProperty = false; bool foundPositionYCSSProperty = false; for (unsigned propertyIndex = 0; propertyIndex < size; propertyIndex++) { @@ -709,10 +710,10 @@ if (!(value->isInitialValue() && toCSSInitialValue(value)->isImplicit())) { if (property == CSSPropertyBackgroundSize || property == CSSPropertyWebkitMaskSize) { - if (foundPositionYCSSProperty) + if (foundPositionYCSSProperty || foundPositionXCSSProperty) layerResult.appendLiteral(" / "); else - continue; + layerResult.appendLiteral(" 0% 0% / "); } else if (!layerResult.isEmpty()) { // Do this second to avoid ending up with an extra space in the output if we hit the continue above. layerResult.append(' '); @@ -729,6 +730,8 @@ useSingleWordShorthand = false; layerResult.append(value->cssText()); } + if (property == CSSPropertyBackgroundPositionX || property == CSSPropertyWebkitMaskPositionX) + foundPositionXCSSProperty = true; if (property == CSSPropertyBackgroundPositionY || property == CSSPropertyWebkitMaskPositionY) { foundPositionYCSSProperty = true; // background-position is a special case. If only the first offset is specified,
diff --git a/third_party/WebKit/Source/core/css/StyleRuleImport.cpp b/third_party/WebKit/Source/core/css/StyleRuleImport.cpp index cc09ce7..b252d3f 100644 --- a/third_party/WebKit/Source/core/css/StyleRuleImport.cpp +++ b/third_party/WebKit/Source/core/css/StyleRuleImport.cpp
@@ -41,11 +41,14 @@ , m_styleSheetClient(this) , m_strHref(href) , m_mediaQueries(media) - , m_resource(nullptr) , m_loading(false) { if (!m_mediaQueries) m_mediaQueries = MediaQuerySet::create(String()); + +#if ENABLE(OILPAN) + ThreadState::current()->registerPreFinalizer(this); +#endif } StyleRuleImport::~StyleRuleImport() @@ -53,9 +56,15 @@ #if !ENABLE(OILPAN) if (m_styleSheet) m_styleSheet->clearOwnerRule(); + dispose(); #endif +} + +void StyleRuleImport::dispose() +{ if (m_resource) m_resource->removeClient(&m_styleSheetClient); + m_resource = nullptr; } DEFINE_TRACE_AFTER_DISPATCH(StyleRuleImport) @@ -64,6 +73,7 @@ visitor->trace(m_parentStyleSheet); visitor->trace(m_mediaQueries); visitor->trace(m_styleSheet); + visitor->trace(m_resource); StyleRuleBase::traceAfterDispatch(visitor); }
diff --git a/third_party/WebKit/Source/core/css/StyleRuleImport.h b/third_party/WebKit/Source/core/css/StyleRuleImport.h index 2c795e1..d7cb9d153 100644 --- a/third_party/WebKit/Source/core/css/StyleRuleImport.h +++ b/third_party/WebKit/Source/core/css/StyleRuleImport.h
@@ -23,7 +23,6 @@ #define StyleRuleImport_h #include "core/css/StyleRule.h" -#include "core/fetch/ResourcePtr.h" #include "core/fetch/StyleSheetResourceClient.h" #include "platform/heap/Handle.h" @@ -35,6 +34,7 @@ class StyleRuleImport : public StyleRuleBase { USING_FAST_MALLOC_WILL_BE_REMOVED(StyleRuleImport); + WILL_BE_USING_PRE_FINALIZER(StyleRuleImport, dispose); public: static PassRefPtrWillBeRawPtr<StyleRuleImport> create(const String& href, PassRefPtrWillBeRawPtr<MediaQuerySet>); @@ -83,13 +83,15 @@ StyleRuleImport(const String& href, PassRefPtrWillBeRawPtr<MediaQuerySet>); + void dispose(); + RawPtrWillBeMember<StyleSheetContents> m_parentStyleSheet; ImportedStyleSheetClient m_styleSheetClient; String m_strHref; RefPtrWillBeMember<MediaQuerySet> m_mediaQueries; RefPtrWillBeMember<StyleSheetContents> m_styleSheet; - ResourcePtr<CSSStyleSheetResource> m_resource; + RefPtrWillBeMember<CSSStyleSheetResource> m_resource; bool m_loading; };
diff --git a/third_party/WebKit/Source/core/css/cssom/KeywordValue.cpp b/third_party/WebKit/Source/core/css/cssom/KeywordValue.cpp index abc8083..cb4bb81c 100644 --- a/third_party/WebKit/Source/core/css/cssom/KeywordValue.cpp +++ b/third_party/WebKit/Source/core/css/cssom/KeywordValue.cpp
@@ -4,32 +4,22 @@ #include "core/css/cssom/KeywordValue.h" -#include "wtf/HashMap.h" +#include "bindings/core/v8/ExceptionState.h" +#include "core/css/CSSCustomIdentValue.h" +#include "core/css/parser/CSSParserString.h" +#include "core/css/parser/CSSPropertyParser.h" namespace blink { -namespace { - -using KeywordTable = HashMap<String, KeywordValue::KeywordValueName>; - -KeywordTable createKeywordTable() +KeywordValue* KeywordValue::create(const String& keyword, ExceptionState& exceptionState) { - KeywordTable table; - table.set(String("initial"), KeywordValue::KeywordValueName::Initial); - table.set(String("inherit"), KeywordValue::KeywordValueName::Inherit); - table.set(String("revert"), KeywordValue::KeywordValueName::Revert); - table.set(String("unset"), KeywordValue::KeywordValueName::Unset); - return table; + if (keyword.isEmpty()) { + exceptionState.throwTypeError("KeywordValue does not support empty strings"); + return nullptr; + } + return new KeywordValue(keyword); } -KeywordTable& keywordTable() -{ - DEFINE_STATIC_LOCAL(KeywordTable, keywordTable, (createKeywordTable())); - return keywordTable; -} - -} // namespace - const String& KeywordValue::keywordValue() const { return m_keywordValue; @@ -37,20 +27,13 @@ PassRefPtrWillBeRawPtr<CSSValue> KeywordValue::toCSSValue() const { - switch (keywordTable().get(m_keywordValue)) { - case Initial: - return cssValuePool().createExplicitInitialValue(); - case Inherit: - return cssValuePool().createInheritedValue(); - case Revert: - return cssValuePool().createIdentifierValue(CSSValueID::CSSValueRevert); - case Unset: - return cssValuePool().createUnsetValue(); - default: - // TODO: Support other keywords - ASSERT_NOT_REACHED(); - return nullptr; + CSSParserString cssKeywordString; + cssKeywordString.init(m_keywordValue); + CSSValueID keywordID = cssValueKeywordID(cssKeywordString); + if (keywordID == CSSValueID::CSSValueInvalid) { + return CSSCustomIdentValue::create(m_keywordValue); } + return cssValuePool().createIdentifierValue(keywordID); } } // namespace blink
diff --git a/third_party/WebKit/Source/core/css/cssom/KeywordValue.h b/third_party/WebKit/Source/core/css/cssom/KeywordValue.h index 1e628e1e..3a5748e 100644 --- a/third_party/WebKit/Source/core/css/cssom/KeywordValue.h +++ b/third_party/WebKit/Source/core/css/cssom/KeywordValue.h
@@ -10,18 +10,13 @@ namespace blink { +class ExceptionState; + class CORE_EXPORT KeywordValue final : public StyleValue { WTF_MAKE_NONCOPYABLE(KeywordValue); DEFINE_WRAPPERTYPEINFO(); public: - enum KeywordValueName { - Initial, Inherit, Revert, Unset - }; - - static KeywordValue* create(const String& keyword) - { - return new KeywordValue(keyword); - } + static KeywordValue* create(const String& keyword, ExceptionState&); StyleValueType type() const override { return KeywordValueType; } @@ -30,7 +25,7 @@ PassRefPtrWillBeRawPtr<CSSValue> toCSSValue() const override; private: - KeywordValue(const String& keyword) : m_keywordValue(keyword.lower()) {} + KeywordValue(const String& keyword) : m_keywordValue(keyword) {} String m_keywordValue; };
diff --git a/third_party/WebKit/Source/core/css/cssom/KeywordValue.idl b/third_party/WebKit/Source/core/css/cssom/KeywordValue.idl index 9ce2890..8b7f660b 100644 --- a/third_party/WebKit/Source/core/css/cssom/KeywordValue.idl +++ b/third_party/WebKit/Source/core/css/cssom/KeywordValue.idl
@@ -4,7 +4,8 @@ [ Constructor(DOMString keyword), - RuntimeEnabled=CSSTypedOM + RuntimeEnabled=CSSTypedOM, + RaisesException=Constructor ] interface KeywordValue : StyleValue { readonly attribute DOMString keywordValue; };
diff --git a/third_party/WebKit/Source/core/css/cssom/MatrixTransformComponent.h b/third_party/WebKit/Source/core/css/cssom/MatrixTransformComponent.h index 4063e338..50c2ce6 100644 --- a/third_party/WebKit/Source/core/css/cssom/MatrixTransformComponent.h +++ b/third_party/WebKit/Source/core/css/cssom/MatrixTransformComponent.h
@@ -60,7 +60,7 @@ private: MatrixTransformComponent(double a, double b, double c, double d, double e, double f) : TransformComponent() - , m_matrix(adoptPtr(new TransformationMatrix(a, b, c, d, e, f))) + , m_matrix(TransformationMatrix::create(a, b, c, d, e, f)) , m_is2D(true) { } @@ -69,7 +69,7 @@ double m31, double m32, double m33, double m34, double m41, double m42, double m43, double m44) : TransformComponent() - , m_matrix(adoptPtr(new TransformationMatrix(m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44))) + , m_matrix(TransformationMatrix::create(m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44)) , m_is2D(false) { }
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp index 6ca22bca..45ffcb5 100644 --- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp +++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
@@ -20,6 +20,7 @@ #include "core/css/CSSPathValue.h" #include "core/css/CSSPrimitiveValueMappings.h" #include "core/css/CSSQuadValue.h" +#include "core/css/CSSReflectValue.h" #include "core/css/CSSSVGDocumentValue.h" #include "core/css/CSSShadowValue.h" #include "core/css/CSSStringValue.h" @@ -273,6 +274,15 @@ return true; } +static bool consumeSlashIncludingWhitespace(CSSParserTokenRange& range) +{ + CSSParserToken value = range.peek(); + if (value.type() != DelimiterToken || value.delimiter() != '/') + return false; + range.consumeIncludingWhitespace(); + return true; +} + static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> consumeIdent(CSSParserTokenRange& range) { if (range.peek().type() != IdentToken) @@ -3046,9 +3056,8 @@ return true; } } else { - if (range.peek().type() != DelimiterToken || range.peek().delimiter() != '/') + if (!consumeSlashIncludingWhitespace(range)) return false; - range.consumeIncludingWhitespace(); for (i = 0; i < 4 && !range.atEnd(); ++i) { verticalRadii[i] = consumeLengthOrPercent(range, cssParserMode, ValueRangeNonNegative); if (!verticalRadii[i]) @@ -3282,6 +3291,69 @@ return CSSQuadValue::create(widths[0].release(), widths[1].release(), widths[2].release(), widths[3].release(), CSSQuadValue::SerializeAsQuad); } +static bool consumeBorderImageComponents(CSSPropertyID property, CSSParserTokenRange& range, const CSSParserContext& context, RefPtrWillBeRawPtr<CSSValue>& source, + RefPtrWillBeRawPtr<CSSValue>& slice, RefPtrWillBeRawPtr<CSSValue>& width, RefPtrWillBeRawPtr<CSSValue>& outset, RefPtrWillBeRawPtr<CSSValue>& repeat) +{ + do { + if (!source && (source = consumeImage(range, context))) + continue; + if (!repeat && (repeat = consumeBorderImageRepeat(range))) + continue; + if (!slice && (slice = consumeBorderImageSlice(property, range, context.mode()))) { + ASSERT(!width && !outset); + if (consumeSlashIncludingWhitespace(range)) { + width = consumeBorderImageWidth(range); + if (consumeSlashIncludingWhitespace(range)) { + outset = consumeBorderImageOutset(range); + if (!outset) + return false; + } else if (!width) { + return false; + } + } + } else { + return false; + } + } while (!range.atEnd()); + return true; +} + +static PassRefPtrWillBeRawPtr<CSSValue> consumeWebkitBorderImage(CSSPropertyID property, CSSParserTokenRange& range, const CSSParserContext& context) +{ + RefPtrWillBeRawPtr<CSSValue> source = nullptr; + RefPtrWillBeRawPtr<CSSValue> slice = nullptr; + RefPtrWillBeRawPtr<CSSValue> width = nullptr; + RefPtrWillBeRawPtr<CSSValue> outset = nullptr; + RefPtrWillBeRawPtr<CSSValue> repeat = nullptr; + if (consumeBorderImageComponents(property, range, context, source, slice, width, outset, repeat)) + return createBorderImageValue(source, slice, width, outset, repeat); + return nullptr; +} + +static PassRefPtrWillBeRawPtr<CSSValue> consumeReflect(CSSParserTokenRange& range, const CSSParserContext& context) +{ + RefPtrWillBeRawPtr<CSSPrimitiveValue> direction = consumeIdent<CSSValueAbove, CSSValueBelow, CSSValueLeft, CSSValueRight>(range); + if (!direction) + return nullptr; + + RefPtrWillBeRawPtr<CSSPrimitiveValue> offset = nullptr; + if (range.atEnd()) { + offset = cssValuePool().createValue(0, CSSPrimitiveValue::UnitType::Pixels); + } else { + offset = consumeLengthOrPercent(range, context.mode(), ValueRangeAll, UnitlessQuirk::Forbid); + if (!offset) + return nullptr; + } + + RefPtrWillBeRawPtr<CSSValue> mask = nullptr; + if (!range.atEnd()) { + mask = consumeWebkitBorderImage(CSSPropertyWebkitBoxReflect, range, context); + if (!mask) + return nullptr; + } + return CSSReflectValue::create(direction.release(), offset.release(), mask.release()); +} + PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseSingleValue(CSSPropertyID unresolvedProperty) { CSSPropertyID property = resolveCSSPropertyID(unresolvedProperty); @@ -3598,6 +3670,10 @@ case CSSPropertyBorderImageWidth: case CSSPropertyWebkitMaskBoxImageWidth: return consumeBorderImageWidth(m_range); + case CSSPropertyWebkitBorderImage: + return consumeWebkitBorderImage(property, m_range, m_context); + case CSSPropertyWebkitBoxReflect: + return consumeReflect(m_range, m_context); default: CSSParserValueList valueList(m_range); if (valueList.size()) { @@ -3812,8 +3888,7 @@ addProperty(CSSPropertyFontSize, fontSize.release(), important); - if (m_range.peek().type() == DelimiterToken && m_range.peek().delimiter() == '/') { - m_range.consumeIncludingWhitespace(); + if (consumeSlashIncludingWhitespace(m_range)) { RefPtrWillBeRawPtr<CSSPrimitiveValue> lineHeight = consumeLineHeight(m_range, m_context.mode()); if (!lineHeight) return false; @@ -3935,7 +4010,7 @@ } } -static bool consumeColumnWidthOrCount(CSSParserTokenRange& range, CSSParserMode cssParserMode, RefPtrWillBeRawPtr<CSSValue> &columnWidth, RefPtrWillBeRawPtr<CSSValue> &columnCount) +static bool consumeColumnWidthOrCount(CSSParserTokenRange& range, CSSParserMode cssParserMode, RefPtrWillBeRawPtr<CSSValue>& columnWidth, RefPtrWillBeRawPtr<CSSValue>& columnCount) { if (range.peek().id() == CSSValueAuto) { consumeIdent(range); @@ -4116,6 +4191,38 @@ return m_range.atEnd(); } +bool CSSPropertyParser::consumeBorderImage(CSSPropertyID property, bool important) +{ + RefPtrWillBeRawPtr<CSSValue> source = nullptr; + RefPtrWillBeRawPtr<CSSValue> slice = nullptr; + RefPtrWillBeRawPtr<CSSValue> width = nullptr; + RefPtrWillBeRawPtr<CSSValue> outset = nullptr; + RefPtrWillBeRawPtr<CSSValue> repeat = nullptr; + if (consumeBorderImageComponents(property, m_range, m_context, source, slice, width, outset, repeat)) { + ImplicitScope implicitScope(this); + switch (property) { + case CSSPropertyWebkitMaskBoxImage: + addProperty(CSSPropertyWebkitMaskBoxImageSource, source ? source : cssValuePool().createImplicitInitialValue(), important); + addProperty(CSSPropertyWebkitMaskBoxImageSlice, slice ? slice : cssValuePool().createImplicitInitialValue(), important); + addProperty(CSSPropertyWebkitMaskBoxImageWidth, width ? width : cssValuePool().createImplicitInitialValue(), important); + addProperty(CSSPropertyWebkitMaskBoxImageOutset, outset ? outset : cssValuePool().createImplicitInitialValue(), important); + addProperty(CSSPropertyWebkitMaskBoxImageRepeat, repeat ? repeat : cssValuePool().createImplicitInitialValue(), important); + return true; + case CSSPropertyBorderImage: + addProperty(CSSPropertyBorderImageSource, source ? source : cssValuePool().createImplicitInitialValue(), important); + addProperty(CSSPropertyBorderImageSlice, slice ? slice : cssValuePool().createImplicitInitialValue(), important); + addProperty(CSSPropertyBorderImageWidth, width ? width : cssValuePool().createImplicitInitialValue(), important); + addProperty(CSSPropertyBorderImageOutset, outset ? outset : cssValuePool().createImplicitInitialValue(), important); + addProperty(CSSPropertyBorderImageRepeat, repeat ? repeat : cssValuePool().createImplicitInitialValue(), important); + return true; + default: + ASSERT_NOT_REACHED(); + return false; + } + } + return false; +} + bool CSSPropertyParser::parseShorthand(CSSPropertyID unresolvedProperty, bool important) { CSSPropertyID property = resolveCSSPropertyID(unresolvedProperty); @@ -4247,6 +4354,9 @@ return consumeShorthandGreedily(borderLeftShorthand(), important); case CSSPropertyBorder: return consumeBorder(important); + case CSSPropertyBorderImage: + case CSSPropertyWebkitMaskBoxImage: + return consumeBorderImage(property, important); default: m_currentShorthand = oldShorthand; CSSParserValueList valueList(m_range);
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.h b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.h index 371420ce..23db75c3 100644 --- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.h +++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.h
@@ -33,8 +33,6 @@ namespace blink { -class BorderImageParseContext; -class CSSBorderImageSliceValue; class CSSCustomIdentValue; class CSSFunctionValue; class CSSGradientValue; @@ -44,9 +42,6 @@ class CSSParserValueList; class CSSPrimitiveValue; class CSSProperty; -class CSSQuadValue; -class CSSShadowValue; -class CSSStringValue; class CSSValue; class CSSValueList; class StylePropertyShorthand; @@ -156,8 +151,6 @@ void addFillValue(RefPtrWillBeRawPtr<CSSValue>& lval, PassRefPtrWillBeRawPtr<CSSValue> rval); - bool parseCubicBezierTimingFunctionValue(CSSParserValueList*& args, double& result); - // Legacy parsing allows <string>s for animation-name bool consumeAnimationShorthand(const StylePropertyShorthand&, bool useLegacyParsing, bool important); @@ -196,15 +189,7 @@ bool parseColorFromValue(const CSSParserValue*, RGBA32&, bool acceptQuirkyColors = false); // CSS3 Parsing Routines (for properties specific to CSS3) - bool parseBorderImageShorthand(CSSPropertyID, bool important); - PassRefPtrWillBeRawPtr<CSSValue> parseBorderImage(CSSPropertyID); - bool parseBorderImageRepeat(RefPtrWillBeRawPtr<CSSValue>&); - bool parseBorderImageSlice(CSSPropertyID, RefPtrWillBeRawPtr<CSSBorderImageSliceValue>&); - bool parseBorderImageWidth(RefPtrWillBeRawPtr<CSSQuadValue>&); - bool parseBorderImageOutset(RefPtrWillBeRawPtr<CSSQuadValue>&); - bool parseRadii(RefPtrWillBeRawPtr<CSSPrimitiveValue> radii[4], RefPtrWillBeRawPtr<CSSPrimitiveValue> radii2[4], CSSParserValueList*, CSSPropertyID = CSSPropertyInvalid); - - PassRefPtrWillBeRawPtr<CSSValue> parseReflect(); + bool consumeBorderImage(CSSPropertyID, bool important); bool consumeFlex(bool important); @@ -220,15 +205,11 @@ PassRefPtrWillBeRawPtr<CSSValue> parseImageSet(CSSParserValueList*); - PassRefPtrWillBeRawPtr<CSSValueList> parseFilter(); - PassRefPtrWillBeRawPtr<CSSFunctionValue> parseBuiltinFilterArguments(CSSParserValueList*, CSSValueID); - bool parseCalculation(CSSParserValue*, ValueRange); bool parseGeneratedImage(CSSParserValueList*, RefPtrWillBeRawPtr<CSSValue>&); PassRefPtrWillBeRawPtr<CSSPrimitiveValue> createPrimitiveNumericValue(CSSParserValue*); - PassRefPtrWillBeRawPtr<CSSStringValue> createPrimitiveStringValue(CSSParserValue*); PassRefPtrWillBeRawPtr<CSSCustomIdentValue> createPrimitiveCustomIdentValue(CSSParserValue*); class ImplicitScope { @@ -285,16 +266,11 @@ inline bool validUnit(CSSParserValue* value, Units unitflags, ReleaseParsedCalcValueCondition releaseCalc = DoNotReleaseParsedCalcValue) { return validUnit(value, unitflags, m_context.mode(), releaseCalc); } bool validUnit(CSSParserValue*, Units, CSSParserMode, ReleaseParsedCalcValueCondition releaseCalc = DoNotReleaseParsedCalcValue); - bool parseBorderImageQuad(Units, RefPtrWillBeRawPtr<CSSQuadValue>&); int colorIntFromValue(CSSParserValue*); - bool buildBorderImageParseContext(CSSPropertyID, BorderImageParseContext&); - bool parseDeprecatedGradientColorStop(CSSParserValue*, CSSGradientColorStop&); PassRefPtrWillBeRawPtr<CSSValue> parseDeprecatedGradientStopColor(const CSSParserValue*); - void commitBorderImageProperty(CSSPropertyID, PassRefPtrWillBeRawPtr<CSSValue>, bool important); - private: // Inputs: CSSParserValueList* m_valueList;
diff --git a/third_party/WebKit/Source/core/css/parser/LegacyCSSPropertyParser.cpp b/third_party/WebKit/Source/core/css/parser/LegacyCSSPropertyParser.cpp index e3c41b2e..0469982 100644 --- a/third_party/WebKit/Source/core/css/parser/LegacyCSSPropertyParser.cpp +++ b/third_party/WebKit/Source/core/css/parser/LegacyCSSPropertyParser.cpp
@@ -27,25 +27,14 @@ #include "core/css/parser/CSSPropertyParser.h" #include "core/StylePropertyShorthand.h" -#include "core/css/CSSBorderImage.h" #include "core/css/CSSCrossfadeValue.h" #include "core/css/CSSCustomIdentValue.h" #include "core/css/CSSFunctionValue.h" #include "core/css/CSSGridLineNamesValue.h" #include "core/css/CSSImageSetValue.h" #include "core/css/CSSPrimitiveValueMappings.h" -#include "core/css/CSSProperty.h" -#include "core/css/CSSPropertyMetadata.h" -#include "core/css/CSSQuadValue.h" -#include "core/css/CSSReflectValue.h" -#include "core/css/CSSShadowValue.h" -#include "core/css/CSSStringValue.h" -#include "core/css/CSSTimingFunctionValue.h" -#include "core/css/CSSURIValue.h" #include "core/css/CSSValuePair.h" #include "core/css/CSSValuePool.h" -#include "core/css/CSSVariableReferenceValue.h" -#include "core/css/parser/CSSParserFastPaths.h" #include "core/css/parser/CSSParserValues.h" #include "core/frame/UseCounter.h" #include "core/style/GridArea.h" @@ -357,16 +346,6 @@ validPrimitive = validUnit(value, FLength | FPercent | FUnitlessQuirk); break; - case CSSPropertyWebkitBorderImage: - parsedValue = parseBorderImage(propId); - break; - - case CSSPropertyWebkitBoxReflect: - if (id == CSSValueNone) - validPrimitive = true; - else - parsedValue = parseReflect(); - break; case CSSPropertyFontSizeAdjust: // none | <number> ASSERT(RuntimeEnabledFeatures::cssFontSizeAdjustEnabled()); validPrimitive = (id == CSSValueNone) ? true : validUnit(value, FNumber | FNonNeg); @@ -465,10 +444,6 @@ return true; } - case CSSPropertyBorderImage: - case CSSPropertyWebkitMaskBoxImage: - return parseBorderImageShorthand(propertyID, important); - case CSSPropertyGridGap: ASSERT(RuntimeEnabledFeatures::cssGridLayoutEnabled()); return parseGridGapShorthand(important); @@ -2395,517 +2370,6 @@ return true; } -PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseReflect() -{ - // box-reflect: <direction> <offset> <mask> - - // Direction comes first. - CSSParserValue* val = m_valueList->current(); - RefPtrWillBeRawPtr<CSSPrimitiveValue> direction = nullptr; - switch (val->id) { - case CSSValueAbove: - case CSSValueBelow: - case CSSValueLeft: - case CSSValueRight: - direction = cssValuePool().createIdentifierValue(val->id); - break; - default: - return nullptr; - } - - // The offset comes next. - val = m_valueList->next(); - RefPtrWillBeRawPtr<CSSPrimitiveValue> offset = nullptr; - if (!val) - offset = cssValuePool().createValue(0, CSSPrimitiveValue::UnitType::Pixels); - else { - if (!validUnit(val, FLength | FPercent)) - return nullptr; - offset = createPrimitiveNumericValue(val); - } - - // Now for the mask. - RefPtrWillBeRawPtr<CSSValue> mask = nullptr; - val = m_valueList->next(); - if (val) { - mask = parseBorderImage(CSSPropertyWebkitBoxReflect); - if (!mask) - return nullptr; - } - - return CSSReflectValue::create(direction.release(), offset.release(), mask.release()); -} - -class BorderImageParseContext { - STACK_ALLOCATED(); -public: - BorderImageParseContext() - : m_canAdvance(false) - , m_allowCommit(true) - , m_allowImage(true) - , m_allowImageSlice(true) - , m_allowRepeat(true) - , m_allowForwardSlashOperator(false) - , m_allowWidth(false) - , m_requireOutset(false) - {} - - bool canAdvance() const { return m_canAdvance; } - void setCanAdvance(bool canAdvance) { m_canAdvance = canAdvance; } - - bool allowCommit() const { return m_allowCommit; } - bool allowImage() const { return m_allowImage; } - bool allowImageSlice() const { return m_allowImageSlice; } - bool allowRepeat() const { return m_allowRepeat; } - bool allowForwardSlashOperator() const { return m_allowForwardSlashOperator; } - - bool allowWidth() const { return m_allowWidth; } - bool requireOutset() const { return m_requireOutset; } - - void commitImage(PassRefPtrWillBeRawPtr<CSSValue> image) - { - m_image = image; - m_canAdvance = true; - m_allowCommit = true; - m_allowImage = false; - m_allowForwardSlashOperator = false; - m_allowWidth = false; - m_requireOutset = false; - m_allowImageSlice = !m_imageSlice; - m_allowRepeat = !m_repeat; - } - void commitImageSlice(PassRefPtrWillBeRawPtr<CSSBorderImageSliceValue> slice) - { - m_imageSlice = slice; - m_canAdvance = true; - m_allowCommit = true; - m_allowForwardSlashOperator = true; - m_allowImageSlice = false; - m_allowWidth = false; - m_requireOutset = false; - m_allowImage = !m_image; - m_allowRepeat = !m_repeat; - } - void commitForwardSlashOperator() - { - m_canAdvance = true; - m_allowCommit = false; - m_allowImage = false; - m_allowImageSlice = false; - m_allowRepeat = false; - if (!m_borderWidth && !m_allowWidth) { - m_allowForwardSlashOperator = true; - m_allowWidth = true; - m_requireOutset = false; - } else { - m_allowForwardSlashOperator = false; - m_requireOutset = true; - m_allowWidth = false; - } - } - void commitBorderWidth(PassRefPtrWillBeRawPtr<CSSQuadValue> width) - { - m_borderWidth = width; - m_canAdvance = true; - m_allowCommit = true; - m_allowForwardSlashOperator = true; - m_allowImageSlice = false; - m_allowWidth = false; - m_requireOutset = false; - m_allowImage = !m_image; - m_allowRepeat = !m_repeat; - } - void commitBorderOutset(PassRefPtrWillBeRawPtr<CSSQuadValue> outset) - { - m_outset = outset; - m_canAdvance = true; - m_allowCommit = true; - m_allowImageSlice = false; - m_allowForwardSlashOperator = false; - m_allowWidth = false; - m_requireOutset = false; - m_allowImage = !m_image; - m_allowRepeat = !m_repeat; - } - void commitRepeat(PassRefPtrWillBeRawPtr<CSSValue> repeat) - { - m_repeat = repeat; - m_canAdvance = true; - m_allowCommit = true; - m_allowRepeat = false; - m_allowForwardSlashOperator = false; - m_allowWidth = false; - m_requireOutset = false; - m_allowImageSlice = !m_imageSlice; - m_allowImage = !m_image; - } - - PassRefPtrWillBeRawPtr<CSSValue> commitCSSValue() - { - return createBorderImageValue(m_image, m_imageSlice.get(), m_borderWidth.get(), m_outset.get(), m_repeat.get()); - } - - bool m_canAdvance; - - bool m_allowCommit; - bool m_allowImage; - bool m_allowImageSlice; - bool m_allowRepeat; - bool m_allowForwardSlashOperator; - - bool m_allowWidth; - bool m_requireOutset; - - RefPtrWillBeMember<CSSValue> m_image; - RefPtrWillBeMember<CSSBorderImageSliceValue> m_imageSlice; - RefPtrWillBeMember<CSSQuadValue> m_borderWidth; - RefPtrWillBeMember<CSSQuadValue> m_outset; - - RefPtrWillBeMember<CSSValue> m_repeat; -}; - -bool CSSPropertyParser::buildBorderImageParseContext(CSSPropertyID propId, BorderImageParseContext& context) -{ - CSSPropertyParser::ShorthandScope scope(this, propId); - while (CSSParserValue* val = m_valueList->current()) { - context.setCanAdvance(false); - - if (!context.canAdvance() && context.allowForwardSlashOperator() && isForwardSlashOperator(val)) - context.commitForwardSlashOperator(); - - if (!context.canAdvance() && context.allowImage()) { - if (val->m_unit == CSSParserValue::URI) { - context.commitImage(createCSSImageValueWithReferrer(val->string, m_context)); - } else if (val->m_unit == CSSParserValue::Function) { - if (CSSPropertyParser::isGeneratedImage(val->function->id)) { - RefPtrWillBeRawPtr<CSSValue> value = nullptr; - if (parseGeneratedImage(m_valueList, value)) - context.commitImage(value.release()); - else - return false; - } else if (val->function->id == CSSValueWebkitImageSet) { - RefPtrWillBeRawPtr<CSSValue> value = parseImageSet(m_valueList); - if (value) - context.commitImage(value.release()); - else - return false; - } - } else if (val->id == CSSValueNone) - context.commitImage(cssValuePool().createIdentifierValue(CSSValueNone)); - } - - if (!context.canAdvance() && context.allowImageSlice()) { - RefPtrWillBeRawPtr<CSSBorderImageSliceValue> imageSlice = nullptr; - if (parseBorderImageSlice(propId, imageSlice)) - context.commitImageSlice(imageSlice.release()); - } - - if (!context.canAdvance() && context.allowRepeat()) { - RefPtrWillBeRawPtr<CSSValue> repeat = nullptr; - if (parseBorderImageRepeat(repeat)) - context.commitRepeat(repeat.release()); - } - - if (!context.canAdvance() && context.allowWidth()) { - RefPtrWillBeRawPtr<CSSQuadValue> borderWidth = nullptr; - if (parseBorderImageWidth(borderWidth)) - context.commitBorderWidth(borderWidth.release()); - } - - if (!context.canAdvance() && context.requireOutset()) { - RefPtrWillBeRawPtr<CSSQuadValue> borderOutset = nullptr; - if (parseBorderImageOutset(borderOutset)) - context.commitBorderOutset(borderOutset.release()); - } - - if (!context.canAdvance()) - return false; - - m_valueList->next(); - } - - return context.allowCommit(); -} - -void CSSPropertyParser::commitBorderImageProperty(CSSPropertyID propId, PassRefPtrWillBeRawPtr<CSSValue> value, bool important) -{ - if (value) - addProperty(propId, value, important); - else - addProperty(propId, cssValuePool().createImplicitInitialValue(), important, true); -} - -bool CSSPropertyParser::parseBorderImageShorthand(CSSPropertyID propId, bool important) -{ - BorderImageParseContext context; - if (buildBorderImageParseContext(propId, context)) { - switch (propId) { - case CSSPropertyWebkitMaskBoxImage: - commitBorderImageProperty(CSSPropertyWebkitMaskBoxImageSource, context.m_image, important); - commitBorderImageProperty(CSSPropertyWebkitMaskBoxImageSlice, context.m_imageSlice.get(), important); - commitBorderImageProperty(CSSPropertyWebkitMaskBoxImageWidth, context.m_borderWidth.get(), important); - commitBorderImageProperty(CSSPropertyWebkitMaskBoxImageOutset, context.m_outset.get(), important); - commitBorderImageProperty(CSSPropertyWebkitMaskBoxImageRepeat, context.m_repeat.get(), important); - return true; - case CSSPropertyBorderImage: - commitBorderImageProperty(CSSPropertyBorderImageSource, context.m_image, important); - commitBorderImageProperty(CSSPropertyBorderImageSlice, context.m_imageSlice.get(), important); - commitBorderImageProperty(CSSPropertyBorderImageWidth, context.m_borderWidth.get(), important); - commitBorderImageProperty(CSSPropertyBorderImageOutset, context.m_outset.get(), important); - commitBorderImageProperty(CSSPropertyBorderImageRepeat, context.m_repeat, important); - return true; - default: - ASSERT_NOT_REACHED(); - return false; - } - } - return false; -} - -PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseBorderImage(CSSPropertyID propId) -{ - BorderImageParseContext context; - if (buildBorderImageParseContext(propId, context)) { - return context.commitCSSValue(); - } - return nullptr; -} - -static bool isBorderImageRepeatKeyword(int id) -{ - return id == CSSValueStretch || id == CSSValueRepeat || id == CSSValueSpace || id == CSSValueRound; -} - -bool CSSPropertyParser::parseBorderImageRepeat(RefPtrWillBeRawPtr<CSSValue>& result) -{ - RefPtrWillBeRawPtr<CSSPrimitiveValue> firstValue = nullptr; - RefPtrWillBeRawPtr<CSSPrimitiveValue> secondValue = nullptr; - CSSParserValue* val = m_valueList->current(); - if (!val) - return false; - if (isBorderImageRepeatKeyword(val->id)) - firstValue = cssValuePool().createIdentifierValue(val->id); - else - return false; - - val = m_valueList->next(); - if (val) { - if (isBorderImageRepeatKeyword(val->id)) - secondValue = cssValuePool().createIdentifierValue(val->id); - else if (!inShorthand()) { - // If we're not parsing a shorthand then we are invalid. - return false; - } else { - // We need to rewind the value list, so that when its advanced we'll - // end up back at this value. - m_valueList->previous(); - secondValue = firstValue; - } - } else - secondValue = firstValue; - - result = CSSValuePair::create(firstValue, secondValue, CSSValuePair::DropIdenticalValues); - return true; -} - -class BorderImageSliceParseContext { - STACK_ALLOCATED(); -public: - BorderImageSliceParseContext() - : m_allowNumber(true) - , m_allowFill(true) - , m_allowFinalCommit(false) - , m_fill(false) - { } - - bool allowNumber() const { return m_allowNumber; } - bool allowFill() const { return m_allowFill; } - bool allowFinalCommit() const { return m_allowFinalCommit; } - CSSPrimitiveValue* top() const { return m_top.get(); } - - void commitNumber(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> val) - { - if (!m_top) - m_top = val; - else if (!m_right) - m_right = val; - else if (!m_bottom) - m_bottom = val; - else { - ASSERT(!m_left); - m_left = val; - } - - m_allowNumber = !m_left; - m_allowFinalCommit = true; - } - - void commitFill() { m_fill = true; m_allowFill = false; m_allowNumber = !m_top; } - - PassRefPtrWillBeRawPtr<CSSBorderImageSliceValue> commitBorderImageSlice() - { - // We need to clone and repeat values for any omissions. - ASSERT(m_top); - if (!m_right) { - m_right = m_top; - m_bottom = m_top; - m_left = m_top; - } - if (!m_bottom) { - m_bottom = m_top; - m_left = m_right; - } - if (!m_left) - m_left = m_right; - - return CSSBorderImageSliceValue::create(CSSQuadValue::create(m_top.release(), m_right.release(), m_bottom.release(), m_left.release(), CSSQuadValue::SerializeAsQuad), m_fill); - } - -private: - bool m_allowNumber; - bool m_allowFill; - bool m_allowFinalCommit; - - RefPtrWillBeMember<CSSPrimitiveValue> m_top; - RefPtrWillBeMember<CSSPrimitiveValue> m_right; - RefPtrWillBeMember<CSSPrimitiveValue> m_bottom; - RefPtrWillBeMember<CSSPrimitiveValue> m_left; - - bool m_fill; -}; - -bool CSSPropertyParser::parseBorderImageSlice(CSSPropertyID propId, RefPtrWillBeRawPtr<CSSBorderImageSliceValue>& result) -{ - BorderImageSliceParseContext context; - for (CSSParserValue* val = m_valueList->current(); val; val = m_valueList->next()) { - // FIXME calc() http://webkit.org/b/16662 : calc is parsed but values are not created yet. - if (context.allowNumber() && !isCalculation(val) && validUnit(val, FNumber | FNonNeg | FPercent)) { - context.commitNumber(createPrimitiveNumericValue(val)); - } else if (context.allowFill() && val->id == CSSValueFill) { - context.commitFill(); - } else if (!inShorthand()) { - // If we're not parsing a shorthand then we are invalid. - return false; - } else { - if (context.allowFinalCommit()) { - // We're going to successfully parse, but we don't want to consume this token. - m_valueList->previous(); - } - break; - } - } - - if (context.allowFinalCommit()) { - // FIXME: For backwards compatibility, -webkit-border-image, -webkit-mask-box-image and -webkit-box-reflect have to do a fill by default. - // FIXME: What do we do with -webkit-box-reflect and -webkit-mask-box-image? Probably just have to leave them filling... - if (propId == CSSPropertyWebkitBorderImage || propId == CSSPropertyWebkitMaskBoxImage || propId == CSSPropertyWebkitBoxReflect) - context.commitFill(); - - // Need to fully commit as a single value. - result = context.commitBorderImageSlice(); - return true; - } - - return false; -} - -class BorderImageQuadParseContext { - STACK_ALLOCATED(); -public: - BorderImageQuadParseContext() - : m_allowNumber(true) - , m_allowFinalCommit(false) - { } - - bool allowNumber() const { return m_allowNumber; } - bool allowFinalCommit() const { return m_allowFinalCommit; } - CSSPrimitiveValue* top() const { return m_top.get(); } - - void commitNumber(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> val) - { - if (!m_top) - m_top = val; - else if (!m_right) - m_right = val; - else if (!m_bottom) - m_bottom = val; - else { - ASSERT(!m_left); - m_left = val; - } - - m_allowNumber = !m_left; - m_allowFinalCommit = true; - } - - void setTop(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> val) { m_top = val; } - - PassRefPtrWillBeRawPtr<CSSQuadValue> commitBorderImageQuad() - { - // We need to clone and repeat values for any omissions. - ASSERT(m_top); - if (!m_right) { - m_right = m_top; - m_bottom = m_top; - m_left = m_top; - } - if (!m_bottom) { - m_bottom = m_top; - m_left = m_right; - } - if (!m_left) - m_left = m_right; - - return CSSQuadValue::create(m_top.release(), m_right.release(), m_bottom.release(), m_left.release(), CSSQuadValue::SerializeAsQuad); - } - -private: - bool m_allowNumber; - bool m_allowFinalCommit; - - RefPtrWillBeMember<CSSPrimitiveValue> m_top; - RefPtrWillBeMember<CSSPrimitiveValue> m_right; - RefPtrWillBeMember<CSSPrimitiveValue> m_bottom; - RefPtrWillBeMember<CSSPrimitiveValue> m_left; -}; - -bool CSSPropertyParser::parseBorderImageQuad(Units validUnits, RefPtrWillBeRawPtr<CSSQuadValue>& result) -{ - BorderImageQuadParseContext context; - for (CSSParserValue* val = m_valueList->current(); val; val = m_valueList->next()) { - if (context.allowNumber() && (validUnit(val, validUnits, HTMLStandardMode) || val->id == CSSValueAuto)) { - if (val->id == CSSValueAuto) - context.commitNumber(cssValuePool().createIdentifierValue(val->id)); - else - context.commitNumber(createPrimitiveNumericValue(val)); - } else if (!inShorthand()) { - // If we're not parsing a shorthand then we are invalid. - return false; - } else { - if (context.allowFinalCommit()) - m_valueList->previous(); // The shorthand loop will advance back to this point. - break; - } - } - - if (context.allowFinalCommit()) { - // Need to fully commit as a single value. - result = context.commitBorderImageQuad(); - return true; - } - return false; -} - -bool CSSPropertyParser::parseBorderImageWidth(RefPtrWillBeRawPtr<CSSQuadValue>& result) -{ - return parseBorderImageQuad(FLength | FNumber | FNonNeg | FPercent, result); -} - -bool CSSPropertyParser::parseBorderImageOutset(RefPtrWillBeRawPtr<CSSQuadValue>& result) -{ - return parseBorderImageQuad(FLength | FNumber | FNonNeg, result); -} - // This should go away once we drop support for -webkit-gradient static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> parseDeprecatedGradientPoint(CSSParserValue* a, bool horizontal) {
diff --git a/third_party/WebKit/Source/core/css/resolver/StyleAdjuster.cpp b/third_party/WebKit/Source/core/css/resolver/StyleAdjuster.cpp index 1a95192..80bb11b 100644 --- a/third_party/WebKit/Source/core/css/resolver/StyleAdjuster.cpp +++ b/third_party/WebKit/Source/core/css/resolver/StyleAdjuster.cpp
@@ -54,7 +54,7 @@ using namespace HTMLNames; -static EDisplay equivalentBlockDisplay(EDisplay display, bool isFloating, bool strictParsing) +static EDisplay equivalentBlockDisplay(EDisplay display) { switch (display) { case BLOCK: @@ -62,12 +62,7 @@ case BOX: case FLEX: case GRID: - return display; - case LIST_ITEM: - // It is a WinIE bug that floated list items lose their bullets, so we'll emulate the quirk, but only in quirks mode. - if (!strictParsing && isFloating) - return BLOCK; return display; case INLINE_TABLE: return TABLE; @@ -169,7 +164,7 @@ // Absolute/fixed positioned elements, floating elements and the document element need block-like outside display. if (style.hasOutOfFlowPosition() || style.isFloating() || (element && element->document().documentElement() == element)) - style.setDisplay(equivalentBlockDisplay(style.display(), style.isFloating(), !m_useQuirksModeStyles)); + style.setDisplay(equivalentBlockDisplay(style.display())); // We don't adjust the first letter style earlier because we may change the display setting in // adjustStyeForTagName() above. @@ -457,7 +452,7 @@ if (parentStyle.isDisplayFlexibleOrGridBox()) { style.setFloating(NoFloat); - style.setDisplay(equivalentBlockDisplay(style.display(), style.isFloating(), !m_useQuirksModeStyles)); + style.setDisplay(equivalentBlockDisplay(style.display())); // We want to count vertical percentage paddings/margins on flex items because our current // behavior is different from the spec and we want to gather compatibility data.
diff --git a/third_party/WebKit/Source/core/css/resolver/StyleAdjuster.h b/third_party/WebKit/Source/core/css/resolver/StyleAdjuster.h index 7fd4868..89ba40b 100644 --- a/third_party/WebKit/Source/core/css/resolver/StyleAdjuster.h +++ b/third_party/WebKit/Source/core/css/resolver/StyleAdjuster.h
@@ -37,8 +37,7 @@ class StyleAdjuster { STACK_ALLOCATED(); public: - StyleAdjuster(bool useQuirksModeStyles) - : m_useQuirksModeStyles(useQuirksModeStyles) + StyleAdjuster() { } void adjustComputedStyle(ComputedStyle& styleToAdjust, const ComputedStyle& parentStyle, Element*); @@ -49,8 +48,6 @@ void adjustStyleForHTMLElement(ComputedStyle& styleToAdjust, const ComputedStyle& parentStyle, HTMLElement&); void adjustOverflow(ComputedStyle& styleToAdjust); void adjustStyleForAlignment(ComputedStyle& styleToAdjust, const ComputedStyle& parentStyle); - - bool m_useQuirksModeStyles; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp b/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp index b187cb39..cc13a8e7 100644 --- a/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp +++ b/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp
@@ -543,7 +543,7 @@ void StyleResolver::adjustComputedStyle(StyleResolverState& state, Element* element) { - StyleAdjuster adjuster(document().inQuirksMode()); + StyleAdjuster adjuster; adjuster.adjustComputedStyle(state.mutableStyleRef(), *state.parentStyle(), element); }
diff --git a/third_party/WebKit/Source/core/dom/AXObjectCache.h b/third_party/WebKit/Source/core/dom/AXObjectCache.h index 5e85533..c8df706 100644 --- a/third_party/WebKit/Source/core/dom/AXObjectCache.h +++ b/third_party/WebKit/Source/core/dom/AXObjectCache.h
@@ -59,6 +59,7 @@ AXBlur, AXCheckedStateChanged, AXChildrenChanged, + AXClicked, AXDocumentSelectionChanged, AXFocusedUIElementChanged, AXHide, @@ -117,7 +118,7 @@ virtual void didHideMenuListPopup(LayoutMenuList*) = 0; virtual void handleLoadComplete(Document*) = 0; virtual void handleLayoutComplete(Document*) = 0; - + virtual void handleClicked(Node*) = 0; virtual void setCanvasObjectBounds(Element*, const LayoutRect&) = 0;
diff --git a/third_party/WebKit/Source/core/dom/DOMMatrix.cpp b/third_party/WebKit/Source/core/dom/DOMMatrix.cpp index f5c727a..802ab17 100644 --- a/third_party/WebKit/Source/core/dom/DOMMatrix.cpp +++ b/third_party/WebKit/Source/core/dom/DOMMatrix.cpp
@@ -18,7 +18,7 @@ DOMMatrix::DOMMatrix(const TransformationMatrix& matrix, bool is2D) { - m_matrix = adoptPtr(new TransformationMatrix(matrix)); + m_matrix = TransformationMatrix::create(matrix); m_is2D = is2D; }
diff --git a/third_party/WebKit/Source/core/dom/Document.cpp b/third_party/WebKit/Source/core/dom/Document.cpp index 3f705a6..45b1267 100644 --- a/third_party/WebKit/Source/core/dom/Document.cpp +++ b/third_party/WebKit/Source/core/dom/Document.cpp
@@ -316,9 +316,16 @@ return true; } -static bool shouldInheritContentSecurityPolicyFromOwner(const KURL& url) +static bool shouldInheritSecurityOriginFromOwner(const KURL& url) { - // TODO(jochen): Somehow unify this with DocumentInit::shouldInheritSecurityOriginFromOwner. + // http://www.whatwg.org/specs/web-apps/current-work/#origin-0 + // + // If a Document has the address "about:blank" + // The origin of the Document is the origin it was assigned when its browsing context was created. + // + // Note: We generalize this to all "blank" URLs and invalid URLs because we + // treat all of these URLs as about:blank. + // return url.isEmpty() || url.protocolIsAbout(); } @@ -1887,26 +1894,31 @@ m_lifecycle.advanceTo(DocumentLifecycle::LayoutSubtreeChangeClean); } +bool Document::needsLayoutTreeUpdateForNode(const Node& node) const +{ + if (!node.canParticipateInFlatTree()) + return false; + if (!needsLayoutTreeUpdate()) + return false; + if (!node.inDocument()) + return false; + + if (needsFullLayoutTreeUpdate() || node.needsStyleRecalc() || node.needsStyleInvalidation()) + return true; + for (const ContainerNode* ancestor = LayoutTreeBuilderTraversal::parent(node); ancestor; ancestor = LayoutTreeBuilderTraversal::parent(*ancestor)) { + if (ancestor->needsStyleRecalc() || ancestor->needsStyleInvalidation() || ancestor->needsAdjacentStyleRecalc()) + return true; + } + return false; +} + void Document::updateLayoutTreeForNodeIfNeeded(Node* node) { - DocumentLifecycle::PreventThrottlingScope preventThrottling(lifecycle()); ASSERT(node); - if (!node->canParticipateInFlatTree()) + if (!needsLayoutTreeUpdateForNode(*node)) return; - if (!needsLayoutTreeUpdate()) - return; - if (!node->inDocument()) - return; - - bool needsRecalc = needsFullLayoutTreeUpdate() || node->needsStyleRecalc() || node->needsStyleInvalidation(); - - if (!needsRecalc) { - for (const ContainerNode* ancestor = LayoutTreeBuilderTraversal::parent(*node); ancestor && !needsRecalc; ancestor = LayoutTreeBuilderTraversal::parent(*ancestor)) - needsRecalc = ancestor->needsStyleRecalc() || ancestor->needsStyleInvalidation() || ancestor->needsAdjacentStyleRecalc(); - } - - if (needsRecalc) - updateLayoutTreeIfNeeded(); + DocumentLifecycle::PreventThrottlingScope preventThrottling(lifecycle()); + updateLayoutTreeIfNeeded(); } void Document::updateLayout() @@ -3622,7 +3634,7 @@ } if (newFocusedElement) - updateLayoutTreeIgnorePendingStylesheets(); + updateLayoutTreeForNodeIfNeeded(newFocusedElement.get()); if (newFocusedElement && newFocusedElement->isFocusable()) { if (newFocusedElement->isRootEditableElement() && !acceptsEditingFocus(*newFocusedElement)) { // delegate blocks focus change @@ -3726,6 +3738,7 @@ void Document::registerNodeList(const LiveNodeListBase* list) { #if ENABLE(OILPAN) + ASSERT(!m_nodeLists[list->invalidationType()].contains(list)); m_nodeLists[list->invalidationType()].add(list); #else m_nodeListCounts[list->invalidationType()]++; @@ -4931,7 +4944,7 @@ setBaseURLOverride(initializer.parentBaseURL()); } - if (!initializer.shouldInheritSecurityOriginFromOwner()) + if (!shouldInheritSecurityOriginFromOwner(m_url)) return; // If we do not obtain a meaningful origin from the URL, then we try to @@ -4963,7 +4976,7 @@ setContentSecurityPolicy(csp ? csp : ContentSecurityPolicy::create()); if (m_frame && m_frame->tree().parent() && m_frame->tree().parent()->isLocalFrame()) { ContentSecurityPolicy* parentCSP = toLocalFrame(m_frame->tree().parent())->document()->contentSecurityPolicy(); - if (shouldInheritContentSecurityPolicyFromOwner(m_url)) { + if (shouldInheritSecurityOriginFromOwner(m_url)) { contentSecurityPolicy()->copyStateFrom(parentCSP); } else if (isPluginDocument()) { // Per CSP2, plugin-types for plugin documents in nested browsing
diff --git a/third_party/WebKit/Source/core/dom/Document.h b/third_party/WebKit/Source/core/dom/Document.h index db364c0..f1333905 100644 --- a/third_party/WebKit/Source/core/dom/Document.h +++ b/third_party/WebKit/Source/core/dom/Document.h
@@ -431,6 +431,7 @@ void setupFontBuilder(ComputedStyle& documentStyle); bool needsLayoutTreeUpdate() const; + bool needsLayoutTreeUpdateForNode(const Node&) const; // Update ComputedStyles and attach LayoutObjects if necessary, but don't // lay out. void updateLayoutTreeIfNeeded() { updateLayoutTree(NoChange); }
diff --git a/third_party/WebKit/Source/core/dom/DocumentInit.cpp b/third_party/WebKit/Source/core/dom/DocumentInit.cpp index 55a8952..389db7b 100644 --- a/third_party/WebKit/Source/core/dom/DocumentInit.cpp +++ b/third_party/WebKit/Source/core/dom/DocumentInit.cpp
@@ -72,7 +72,6 @@ , m_importsController(importsController) , m_createNewRegistrationContext(false) , m_shouldReuseDefaultView(frame && frame->shouldReuseDefaultView(url)) - , m_shouldInheritSecurityOriginFromOwner(url.isEmpty() || url.protocolIsAbout()) { } @@ -162,12 +161,6 @@ return *this; } -DocumentInit& DocumentInit::withoutInheritingSecurityOrigin() -{ - m_shouldInheritSecurityOriginFromOwner = false; - return *this; -} - PassRefPtrWillBeRawPtr<CustomElementRegistrationContext> DocumentInit::registrationContext(Document* document) const { if (!document->isHTMLDocument() && !document->isXHTMLDocument())
diff --git a/third_party/WebKit/Source/core/dom/DocumentInit.h b/third_party/WebKit/Source/core/dom/DocumentInit.h index 9ff2340..4b3437bf 100644 --- a/third_party/WebKit/Source/core/dom/DocumentInit.h +++ b/third_party/WebKit/Source/core/dom/DocumentInit.h
@@ -66,7 +66,6 @@ bool isHostedInReservedIPRange() const; SecurityContext::InsecureRequestsPolicy insecureRequestsPolicy() const; SecurityContext::InsecureNavigationsSet* insecureNavigationsToUpgrade() const; - bool shouldInheritSecurityOriginFromOwner() const { return m_shouldInheritSecurityOriginFromOwner; } Document* parent() const { return m_parent.get(); } Document* owner() const { return m_owner.get(); } @@ -76,7 +75,6 @@ DocumentInit& withRegistrationContext(CustomElementRegistrationContext*); DocumentInit& withNewRegistrationContext(); - DocumentInit& withoutInheritingSecurityOrigin(); PassRefPtrWillBeRawPtr<CustomElementRegistrationContext> registrationContext(Document*) const; WeakPtrWillBeRawPtr<Document> contextDocument() const; @@ -103,16 +101,6 @@ // the network load. See also SecurityContext::isSecureTransitionTo. // FIXME: This is for DocumentWriter creation, not for one of Document. bool m_shouldReuseDefaultView; - - // http://www.whatwg.org/specs/web-apps/current-work/#origin-0 - // - // If a Document has the address "about:blank" - // The origin of the Document is the origin it was assigned when its browsing context was created. - // - // Note: We generalize this to all "blank" URLs and invalid URLs because we - // treat all of these URLs as about:blank. - // - bool m_shouldInheritSecurityOriginFromOwner; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/Element.cpp b/third_party/WebKit/Source/core/dom/Element.cpp index 7fbdd94c..14628de4 100644 --- a/third_party/WebKit/Source/core/dom/Element.cpp +++ b/third_party/WebKit/Source/core/dom/Element.cpp
@@ -2431,12 +2431,9 @@ bool Element::isFocusable() const { - // We can't just use needsStyleRecalc() because if the node is in a - // display:none tree it might say it needs style recalc but the whole - // document is actually up to date. - // In addition, style cannot be cleared out for non-active documents, so in - // that case the childNeedsStyleRecalc check is invalid. - ASSERT(!document().isActive() || !document().childNeedsStyleRecalc()); + // Style cannot be cleared out for non-active documents, so in that case the + // needsLayoutTreeUpdateForNode check is invalid. + ASSERT(!document().isActive() || !document().needsLayoutTreeUpdateForNode(*this)); return inDocument() && supportsFocus() && !isInert() && layoutObjectIsFocusable(); }
diff --git a/third_party/WebKit/Source/core/dom/Element.idl b/third_party/WebKit/Source/core/dom/Element.idl index c5db75a4..8d72994 100644 --- a/third_party/WebKit/Source/core/dom/Element.idl +++ b/third_party/WebKit/Source/core/dom/Element.idl
@@ -72,6 +72,7 @@ NodeList getDestinationInsertionPoints(); [PerWorldBindings, ImplementedAs=openShadowRoot] readonly attribute ShadowRoot? shadowRoot; [RuntimeEnabled=ShadowDOMV1, Reflect] attribute DOMString slot; + [RuntimeEnabled=ShadowDOMV1, ImplementedAs=assignedSlotForBinding] readonly attribute HTMLSlotElement assignedSlot; // Pointer Lock // https://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html#extensions-to-the-element-interface
diff --git a/third_party/WebKit/Source/core/dom/Node.cpp b/third_party/WebKit/Source/core/dom/Node.cpp index 897430f..832a3275 100644 --- a/third_party/WebKit/Source/core/dom/Node.cpp +++ b/third_party/WebKit/Source/core/dom/Node.cpp
@@ -612,7 +612,7 @@ } #endif -inline static Node& rootInTreeOfTrees(const Node& node) +inline static Node& rootInComposedTree(const Node& node) { if (node.inDocument()) return node.document(); @@ -628,7 +628,7 @@ #if ENABLE(ASSERT) bool Node::needsDistributionRecalc() const { - return rootInTreeOfTrees(*this).childNeedsDistributionRecalc(); + return rootInComposedTree(*this).childNeedsDistributionRecalc(); } #endif @@ -639,7 +639,7 @@ return; TRACE_EVENT0("blink", "Node::updateDistribution"); ScriptForbiddenScope forbidScript; - Node& root = rootInTreeOfTrees(*this); + Node& root = rootInComposedTree(*this); if (root.childNeedsDistributionRecalc()) root.recalcDistribution(); }
diff --git a/third_party/WebKit/Source/core/dom/Node.h b/third_party/WebKit/Source/core/dom/Node.h index fced988a..6ad4cca 100644 --- a/third_party/WebKit/Source/core/dom/Node.h +++ b/third_party/WebKit/Source/core/dom/Node.h
@@ -490,6 +490,7 @@ bool isInV0ShadowTree() const; bool isChildOfV1ShadowHost() const; bool isChildOfV0ShadowHost() const; + bool isSlotAssignable() const { return isTextNode() || isElementNode(); } bool isDocumentTypeNode() const { return nodeType() == DOCUMENT_TYPE_NODE; } virtual bool childTypeAllowed(NodeType) const { return false; }
diff --git a/third_party/WebKit/Source/core/dom/NonDocumentTypeChildNode.h b/third_party/WebKit/Source/core/dom/NonDocumentTypeChildNode.h index c64af764..24ce87a7 100644 --- a/third_party/WebKit/Source/core/dom/NonDocumentTypeChildNode.h +++ b/third_party/WebKit/Source/core/dom/NonDocumentTypeChildNode.h
@@ -21,11 +21,6 @@ { return ElementTraversal::nextSibling(node); } - - static HTMLSlotElement* assignedSlotForBinding(Node& node) - { - return node.assignedSlotForBinding(); - } }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/NonDocumentTypeChildNode.idl b/third_party/WebKit/Source/core/dom/NonDocumentTypeChildNode.idl index 1d1c90c..b2883c4 100644 --- a/third_party/WebKit/Source/core/dom/NonDocumentTypeChildNode.idl +++ b/third_party/WebKit/Source/core/dom/NonDocumentTypeChildNode.idl
@@ -10,5 +10,4 @@ ] interface NonDocumentTypeChildNode { [PerWorldBindings] readonly attribute Element previousElementSibling; [PerWorldBindings] readonly attribute Element nextElementSibling; - [RuntimeEnabled=ShadowDOMV1, ImplementedAs=assignedSlotForBinding] readonly attribute HTMLSlotElement assignedSlot; };
diff --git a/third_party/WebKit/Source/core/dom/NthIndexCache.cpp b/third_party/WebKit/Source/core/dom/NthIndexCache.cpp index a039019..de8c37d 100644 --- a/third_party/WebKit/Source/core/dom/NthIndexCache.cpp +++ b/third_party/WebKit/Source/core/dom/NthIndexCache.cpp
@@ -24,20 +24,146 @@ m_document->setNthIndexCache(nullptr); } -NthIndexData& NthIndexCache::ensureNthIndexDataFor(Node& parent) +namespace { + +// Generating the cached nth-index counts when the number of children +// exceeds this count. This number is picked based on testing +// querySelectorAll for :nth-child(3n+2) and :nth-of-type(3n+2) on an +// increasing number of children. + +const unsigned kCachedSiblingCountLimit = 32; + +unsigned uncachedNthChildIndex(Element& element) { + int index = 1; + for (const Element* sibling = ElementTraversal::previousSibling(element); sibling; sibling = ElementTraversal::previousSibling(*sibling)) + index++; + + return index; +} + +unsigned uncachedNthLastChildIndex(Element& element) +{ + int index = 1; + for (const Element* sibling = ElementTraversal::nextSibling(element); sibling; sibling = ElementTraversal::nextSibling(*sibling)) + ++index; + return index; +} + +unsigned uncachedNthOfTypeIndex(Element& element, unsigned& siblingCount) +{ + int index = 1; + const QualifiedName& tag = element.tagQName(); + for (const Element* sibling = ElementTraversal::previousSibling(element); sibling; sibling = ElementTraversal::previousSibling(*sibling)) { + if (sibling->tagQName() == tag) + ++index; + ++siblingCount; + } + return index; +} + +unsigned uncachedNthLastOfTypeIndex(Element& element, unsigned& siblingCount) +{ + int index = 1; + const QualifiedName& tag = element.tagQName(); + for (const Element* sibling = ElementTraversal::nextSibling(element); sibling; sibling = ElementTraversal::nextSibling(*sibling)) { + if (sibling->tagQName() == tag) + ++index; + ++siblingCount; + } + return index; +} + +} // namespace + +unsigned NthIndexCache::nthChildIndex(Element& element) +{ + if (element.isPseudoElement()) + return 1; + ASSERT(element.parentNode()); + NthIndexCache* nthIndexCache = element.document().nthIndexCache(); + NthIndexData* nthIndexData = nullptr; + if (nthIndexCache && nthIndexCache->m_parentMap) + nthIndexData = nthIndexCache->m_parentMap->get(element.parentNode()); + if (nthIndexData) + return nthIndexData->nthIndex(element); + unsigned index = uncachedNthChildIndex(element); + if (nthIndexCache && index > kCachedSiblingCountLimit) + nthIndexCache->cacheNthIndexDataForParent(element); + return index; +} + +unsigned NthIndexCache::nthLastChildIndex(Element& element) +{ + if (element.isPseudoElement()) + return 1; + ASSERT(element.parentNode()); + NthIndexCache* nthIndexCache = element.document().nthIndexCache(); + NthIndexData* nthIndexData = nullptr; + if (nthIndexCache && nthIndexCache->m_parentMap) + nthIndexData = nthIndexCache->m_parentMap->get(element.parentNode()); + if (nthIndexData) + return nthIndexData->nthLastIndex(element); + unsigned index = uncachedNthLastChildIndex(element); + if (nthIndexCache && index > kCachedSiblingCountLimit) + nthIndexCache->cacheNthIndexDataForParent(element); + return index; +} + +NthIndexData* NthIndexCache::nthTypeIndexDataForParent(Element& element) const +{ + ASSERT(element.parentNode()); + if (!m_parentMapForType) + return nullptr; + if (const IndexByType* map = m_parentMapForType->get(element.parentNode())) + return map->get(element.tagName()); + return nullptr; +} + +unsigned NthIndexCache::nthOfTypeIndex(Element& element) +{ + if (element.isPseudoElement()) + return 1; + NthIndexCache* nthIndexCache = element.document().nthIndexCache(); + if (nthIndexCache) { + if (NthIndexData* nthIndexData = nthIndexCache->nthTypeIndexDataForParent(element)) + return nthIndexData->nthOfTypeIndex(element); + } + unsigned siblingCount = 0; + unsigned index = uncachedNthOfTypeIndex(element, siblingCount); + if (nthIndexCache && siblingCount > kCachedSiblingCountLimit) + nthIndexCache->cacheNthOfTypeIndexDataForParent(element); + return index; +} + +unsigned NthIndexCache::nthLastOfTypeIndex(Element& element) +{ + if (element.isPseudoElement()) + return 1; + NthIndexCache* nthIndexCache = element.document().nthIndexCache(); + if (nthIndexCache) { + if (NthIndexData* nthIndexData = nthIndexCache->nthTypeIndexDataForParent(element)) + return nthIndexData->nthLastOfTypeIndex(element); + } + unsigned siblingCount = 0; + unsigned index = uncachedNthLastOfTypeIndex(element, siblingCount); + if (nthIndexCache && siblingCount > kCachedSiblingCountLimit) + nthIndexCache->cacheNthOfTypeIndexDataForParent(element); + return index; +} + +void NthIndexCache::cacheNthIndexDataForParent(Element& element) +{ + ASSERT(element.parentNode()); if (!m_parentMap) m_parentMap = adoptPtrWillBeNoop(new ParentMap()); - ParentMap::AddResult addResult = m_parentMap->add(&parent, nullptr); - if (addResult.isNewEntry) - addResult.storedValue->value = adoptPtrWillBeNoop(new NthIndexData()); - - ASSERT(addResult.storedValue->value); - return *addResult.storedValue->value; + ParentMap::AddResult addResult = m_parentMap->add(element.parentNode(), nullptr); + ASSERT(addResult.isNewEntry); + addResult.storedValue->value = adoptPtrWillBeNoop(new NthIndexData(*element.parentNode())); } -NthIndexCache::IndexByType& NthIndexCache::ensureTypeIndexMap(Node& parent) +NthIndexCache::IndexByType& NthIndexCache::ensureTypeIndexMap(ContainerNode& parent) { if (!m_parentMapForType) m_parentMapForType = adoptPtrWillBeNoop(new ParentMapForType()); @@ -50,20 +176,17 @@ return *addResult.storedValue->value; } -NthIndexData& NthIndexCache::nthIndexDataWithTagName(Element& element) +void NthIndexCache::cacheNthOfTypeIndexDataForParent(Element& element) { + ASSERT(element.parentNode()); IndexByType::AddResult addResult = ensureTypeIndexMap(*element.parentNode()).add(element.tagName(), nullptr); - if (addResult.isNewEntry) - addResult.storedValue->value = adoptPtrWillBeNoop(new NthIndexData()); - return *addResult.storedValue->value; + ASSERT(addResult.isNewEntry); + addResult.storedValue->value = adoptPtrWillBeNoop(new NthIndexData(*element.parentNode(), element.tagQName())); } -unsigned NthIndexData::nthIndex(Element& element) +unsigned NthIndexData::nthIndex(Element& element) const { - if (element.isPseudoElement()) - return 1; - if (!m_count) - return cacheNthIndices(element); + ASSERT(!element.isPseudoElement()); unsigned index = 0; for (Element* sibling = &element; sibling; sibling = ElementTraversal::previousSibling(*sibling), index++) { @@ -74,14 +197,12 @@ return index; } -unsigned NthIndexData::nthIndexOfType(Element& element, const QualifiedName& type) +unsigned NthIndexData::nthOfTypeIndex(Element& element) const { - if (element.isPseudoElement()) - return 1; - if (!m_count) - return cacheNthIndicesOfType(element, type); + ASSERT(!element.isPseudoElement()); + unsigned index = 0; - for (Element* sibling = &element; sibling; sibling = ElementTraversal::previousSibling(*sibling, HasTagName(type)), index++) { + for (Element* sibling = &element; sibling; sibling = ElementTraversal::previousSibling(*sibling, HasTagName(element.tagQName())), index++) { auto it = m_elementIndexMap.find(sibling); if (it != m_elementIndexMap.end()) return it->value + index; @@ -89,27 +210,18 @@ return index; } -unsigned NthIndexData::nthLastIndex(Element& element) +unsigned NthIndexData::nthLastIndex(Element& element) const { - if (element.isPseudoElement()) - return 1; - unsigned index = nthIndex(element); - return m_count - index + 1; + return m_count - nthIndex(element) + 1; } -unsigned NthIndexData::nthLastIndexOfType(Element& element, const QualifiedName& type) +unsigned NthIndexData::nthLastOfTypeIndex(Element& element) const { - if (element.isPseudoElement()) - return 1; - unsigned index = nthIndexOfType(element, type); - return m_count - index + 1; + return m_count - nthOfTypeIndex(element) + 1; } -unsigned NthIndexData::cacheNthIndices(Element& element) +NthIndexData::NthIndexData(ContainerNode& parent) { - ASSERT(!element.isPseudoElement()); - ASSERT(m_elementIndexMap.isEmpty()); - unsigned index = 0; // The frequency at which we cache the nth-index for a set of siblings. // A spread value of 3 means every third Element will have its nth-index cached. // Using a spread value > 1 is done to save memory. Looking up the nth-index will @@ -117,22 +229,16 @@ // elements will be traversed. const unsigned spread = 3; unsigned count = 0; - for (Element* sibling = ElementTraversal::firstChild(*element.parentNode()); sibling; sibling = ElementTraversal::nextSibling(*sibling)) { + for (Element* sibling = ElementTraversal::firstChild(parent); sibling; sibling = ElementTraversal::nextSibling(*sibling)) { if (!(++count % spread)) m_elementIndexMap.add(sibling, count); - if (sibling == &element) - index = count; } - ASSERT(count && index); + ASSERT(count); m_count = count; - return index; } -unsigned NthIndexData::cacheNthIndicesOfType(Element& element, const QualifiedName& type) +NthIndexData::NthIndexData(ContainerNode& parent, const QualifiedName& type) { - ASSERT(!element.isPseudoElement()); - ASSERT(m_elementIndexMap.isEmpty()); - unsigned index = 0; // The frequency at which we cache the nth-index of type for a set of siblings. // A spread value of 3 means every third Element of its type will have its nth-index cached. // Using a spread value > 1 is done to save memory. Looking up the nth-index of its type will @@ -140,15 +246,12 @@ // will be equal to find 'spread' elements in the sibling set. const unsigned spread = 3; unsigned count = 0; - for (Element* sibling = ElementTraversal::firstChild(*element.parentNode(), HasTagName(type)); sibling; sibling = ElementTraversal::nextSibling(*sibling, HasTagName(type))) { + for (Element* sibling = ElementTraversal::firstChild(parent, HasTagName(type)); sibling; sibling = ElementTraversal::nextSibling(*sibling, HasTagName(type))) { if (!(++count % spread)) m_elementIndexMap.add(sibling, count); - if (sibling == &element) - index = count; } - ASSERT(count && index); + ASSERT(count); m_count = count; - return index; } DEFINE_TRACE(NthIndexData)
diff --git a/third_party/WebKit/Source/core/dom/NthIndexCache.h b/third_party/WebKit/Source/core/dom/NthIndexCache.h index 074994b..5ae0d46 100644 --- a/third_party/WebKit/Source/core/dom/NthIndexCache.h +++ b/third_party/WebKit/Source/core/dom/NthIndexCache.h
@@ -21,17 +21,15 @@ WTF_MAKE_NONCOPYABLE(NthIndexData); DECLARE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(NthIndexData); public: - NthIndexData() { } + NthIndexData(ContainerNode&); + NthIndexData(ContainerNode&, const QualifiedName& type); - unsigned nthIndex(Element&); - unsigned nthIndexOfType(Element&, const QualifiedName&); - unsigned nthLastIndex(Element&); - unsigned nthLastIndexOfType(Element&, const QualifiedName&); + unsigned nthIndex(Element&) const; + unsigned nthLastIndex(Element&) const; + unsigned nthOfTypeIndex(Element&) const; + unsigned nthLastOfTypeIndex(Element&) const; private: - unsigned cacheNthIndices(Element&); - unsigned cacheNthIndicesOfType(Element&, const QualifiedName&); - WillBeHeapHashMap<RawPtrWillBeMember<Element>, unsigned> m_elementIndexMap; unsigned m_count = 0; @@ -45,38 +43,20 @@ explicit NthIndexCache(Document&); ~NthIndexCache(); - unsigned nthChildIndex(Element& element) - { - ASSERT(element.parentNode()); - return ensureNthIndexDataFor(*element.parentNode()).nthIndex(element); - } - - unsigned nthChildIndexOfType(Element& element, const QualifiedName& type) - { - ASSERT(element.parentNode()); - return nthIndexDataWithTagName(element).nthIndexOfType(element, type); - } - - unsigned nthLastChildIndex(Element& element) - { - ASSERT(element.parentNode()); - return ensureNthIndexDataFor(*element.parentNode()).nthLastIndex(element); - } - - unsigned nthLastChildIndexOfType(Element& element, const QualifiedName& type) - { - ASSERT(element.parentNode()); - return nthIndexDataWithTagName(element).nthLastIndexOfType(element, type); - } + static unsigned nthChildIndex(Element&); + static unsigned nthLastChildIndex(Element&); + static unsigned nthOfTypeIndex(Element&); + static unsigned nthLastOfTypeIndex(Element&); private: using IndexByType = WillBeHeapHashMap<String, OwnPtrWillBeMember<NthIndexData>>; using ParentMap = WillBeHeapHashMap<RefPtrWillBeMember<Node>, OwnPtrWillBeMember<NthIndexData>>; using ParentMapForType = WillBeHeapHashMap<RefPtrWillBeMember<Node>, OwnPtrWillBeMember<IndexByType>>; - NthIndexData& ensureNthIndexDataFor(Node&); - IndexByType& ensureTypeIndexMap(Node&); - NthIndexData& nthIndexDataWithTagName(Element&); + void cacheNthIndexDataForParent(Element&); + void cacheNthOfTypeIndexDataForParent(Element&); + IndexByType& ensureTypeIndexMap(ContainerNode&); + NthIndexData* nthTypeIndexDataForParent(Element&) const; RawPtrWillBeMember<Document> m_document; OwnPtrWillBeMember<ParentMap> m_parentMap;
diff --git a/third_party/WebKit/Source/core/dom/PendingScript.cpp b/third_party/WebKit/Source/core/dom/PendingScript.cpp index 8b3ca3a1..5058b05 100644 --- a/third_party/WebKit/Source/core/dom/PendingScript.cpp +++ b/third_party/WebKit/Source/core/dom/PendingScript.cpp
@@ -42,14 +42,26 @@ : m_watchingForLoad(false) , m_element(element) , m_integrityFailure(false) + , m_client(nullptr) { setScriptResource(resource); +#if ENABLE(OILPAN) + ThreadState::current()->registerPreFinalizer(this); +#endif } PendingScript::~PendingScript() { } +void PendingScript::dispose() +{ + if (!m_client) + return; + stopWatchingForLoad(); + releaseElementAndClear(); +} + PendingScript& PendingScript::operator=(const PendingScript& other) { if (this == &other) @@ -67,32 +79,35 @@ void PendingScript::watchForLoad(ScriptResourceClient* client) { ASSERT(!m_watchingForLoad); - // addClient() will call notifyFinished() if the load is complete. Callers + // addClient() will call streamingFinished() if the load is complete. Callers // who do not expect to be re-entered from this call should not call // watchForLoad for a PendingScript which isReady. We also need to set // m_watchingForLoad early, since addClient() can result in calling // notifyFinished and further stopWatchingForLoad(). m_watchingForLoad = true; - if (m_streamer) { - m_streamer->addClient(client); - } else { + m_client = client; + if (!m_streamer) resource()->addClient(client); - } } -void PendingScript::stopWatchingForLoad(ScriptResourceClient* client) +void PendingScript::stopWatchingForLoad() { if (!m_watchingForLoad) return; ASSERT(resource()); - if (m_streamer) { - m_streamer->removeClient(client); - } else { - resource()->removeClient(client); - } + if (!m_streamer) + resource()->removeClient(m_client); + m_client = nullptr; m_watchingForLoad = false; } +void PendingScript::streamingFinished() +{ + ASSERT(resource()); + if (m_client) + m_client->notifyFinished(resource()); +} + void PendingScript::setElement(Element* element) { m_element = element; @@ -150,9 +165,15 @@ // integrity attribute isn't empty in addition to checking if the // resource has empty integrity metadata. if (!integrityAttr.isEmpty() && !scriptResource->integrityMetadata().isEmpty()) { - if (!scriptResource->integrityAlreadyChecked() && resource->resourceBuffer()) { - scriptResource->setIntegrityAlreadyChecked(true); + ScriptIntegrityDisposition disposition = scriptResource->integrityDisposition(); + if (disposition == ScriptIntegrityDisposition::Failed) { + // TODO(jww): This should probably also generate a console + // message identical to the one produced by + // CheckSubresourceIntegrity below. See https://crbug.com/585267. + m_integrityFailure = true; + } else if (disposition == ScriptIntegrityDisposition::NotChecked && resource->resourceBuffer()) { m_integrityFailure = !SubresourceIntegrity::CheckSubresourceIntegrity(scriptResource->integrityMetadata(), *m_element, resource->resourceBuffer()->data(), resource->resourceBuffer()->size(), resource->url(), *resource); + scriptResource->setIntegrityDisposition(m_integrityFailure ? ScriptIntegrityDisposition::Failed : ScriptIntegrityDisposition::Passed); } } }
diff --git a/third_party/WebKit/Source/core/dom/PendingScript.h b/third_party/WebKit/Source/core/dom/PendingScript.h index 1fdf269..f7d694a 100644 --- a/third_party/WebKit/Source/core/dom/PendingScript.h +++ b/third_party/WebKit/Source/core/dom/PendingScript.h
@@ -42,11 +42,12 @@ // A container for an external script which may be loaded and executed. // -// A ResourcePtr alone does not prevent the underlying Resource +// A RefPtr alone does not prevent the underlying Resource // from purging its data buffer. This class holds a dummy client open for its // lifetime in order to guarantee that the data buffer will not be purged. class CORE_EXPORT PendingScript final : public NoBaseWillBeGarbageCollectedFinalized<PendingScript>, public ResourceOwner<ScriptResource> { WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(PendingScript); + WILL_BE_USING_PRE_FINALIZER(PendingScript, dispose); public: static PassOwnPtrWillBeRawPtr<PendingScript> create(Element*, ScriptResource*); ~PendingScript() override; @@ -57,7 +58,7 @@ void setStartingPosition(const TextPosition& position) { m_startingPosition = position; } void watchForLoad(ScriptResourceClient*); - void stopWatchingForLoad(ScriptResourceClient*); + void stopWatchingForLoad(); Element* element() const { return m_element.get(); } void setElement(Element*); @@ -74,9 +75,12 @@ ScriptSourceCode getSource(const KURL& documentURL, bool& errorOccurred) const; void setStreamer(PassRefPtrWillBeRawPtr<ScriptStreamer>); + void streamingFinished(); bool isReady() const; + void dispose(); + private: PendingScript(Element*, ScriptResource*); @@ -86,6 +90,7 @@ bool m_integrityFailure; RefPtrWillBeMember<ScriptStreamer> m_streamer; + ScriptResourceClient* m_client; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/ProcessingInstruction.cpp b/third_party/WebKit/Source/core/dom/ProcessingInstruction.cpp index fd53c61..c41eaf7 100644 --- a/third_party/WebKit/Source/core/dom/ProcessingInstruction.cpp +++ b/third_party/WebKit/Source/core/dom/ProcessingInstruction.cpp
@@ -165,7 +165,7 @@ String url = document().completeURL(href).string(); - ResourcePtr<StyleSheetResource> resource; + RefPtrWillBeRawPtr<StyleSheetResource> resource = nullptr; FetchRequest request(ResourceRequest(document().completeURL(href)), FetchInitiatorTypeNames::processinginstruction); if (m_isXSL) { if (RuntimeEnabledFeatures::xsltEnabled())
diff --git a/third_party/WebKit/Source/core/dom/ScriptLoader.cpp b/third_party/WebKit/Source/core/dom/ScriptLoader.cpp index 28469a5..910288e 100644 --- a/third_party/WebKit/Source/core/dom/ScriptLoader.cpp +++ b/third_party/WebKit/Source/core/dom/ScriptLoader.cpp
@@ -59,7 +59,6 @@ ScriptLoader::ScriptLoader(Element* element, bool parserInserted, bool alreadyStarted) : m_element(element) - , m_resource(0) , m_startLineNumber(WTF::OrdinalNumber::beforeFirst()) , m_parserInserted(parserInserted) , m_isExternalScript(false) @@ -74,21 +73,16 @@ ASSERT(m_element); if (parserInserted && element->document().scriptableDocumentParser() && !element->document().isInDocumentWrite()) m_startLineNumber = element->document().scriptableDocumentParser()->lineNumber(); -#if ENABLE(OILPAN) - ThreadState::current()->registerPreFinalizer(this); -#endif } ScriptLoader::~ScriptLoader() { -#if !ENABLE(OILPAN) - detach(); -#endif } DEFINE_TRACE(ScriptLoader) { visitor->trace(m_element); + visitor->trace(m_resource); visitor->trace(m_pendingScript); } @@ -121,8 +115,7 @@ { if (!m_pendingScript) return; - m_pendingScript->stopWatchingForLoad(this); - m_pendingScript->releaseElementAndClear(); + m_pendingScript->dispose(); m_pendingScript = nullptr; } @@ -454,7 +447,7 @@ else dispatchErrorEvent(); } - m_resource = 0; + m_resource = nullptr; } void ScriptLoader::notifyFinished(Resource* resource) @@ -481,7 +474,7 @@ return; } contextDocument->scriptRunner()->notifyScriptReady(this, runOrder); - m_pendingScript->stopWatchingForLoad(this); + m_pendingScript->stopWatchingForLoad(); } bool ScriptLoader::ignoresLoadRequest() const
diff --git a/third_party/WebKit/Source/core/dom/ScriptLoader.h b/third_party/WebKit/Source/core/dom/ScriptLoader.h index 34f3faaf..b98e90fd 100644 --- a/third_party/WebKit/Source/core/dom/ScriptLoader.h +++ b/third_party/WebKit/Source/core/dom/ScriptLoader.h
@@ -25,7 +25,6 @@ #include "core/dom/PendingScript.h" #include "core/fetch/FetchRequest.h" #include "core/fetch/ResourceClient.h" -#include "core/fetch/ResourcePtr.h" #include "core/fetch/ScriptResource.h" #include "wtf/text/TextPosition.h" #include "wtf/text/WTFString.h" @@ -37,9 +36,8 @@ class ScriptSourceCode; class LocalFrame; -class CORE_EXPORT ScriptLoader : public NoBaseWillBeGarbageCollectedFinalized<ScriptLoader>, private ScriptResourceClient { +class CORE_EXPORT ScriptLoader : public NoBaseWillBeGarbageCollectedFinalized<ScriptLoader>, public ScriptResourceClient { USING_FAST_MALLOC_WILL_BE_REMOVED(ScriptLoader); - WILL_BE_USING_PRE_FINALIZER(ScriptLoader, detach); public: static PassOwnPtrWillBeRawPtr<ScriptLoader> create(Element* element, bool createdByParser, bool isEvaluated) { @@ -69,7 +67,7 @@ bool willBeParserExecuted() const { return m_willBeParserExecuted; } bool readyToBeParserExecuted() const { return m_readyToBeParserExecuted; } bool willExecuteWhenDocumentFinishedParsing() const { return m_willExecuteWhenDocumentFinishedParsing; } - ResourcePtr<ScriptResource> resource() { return m_resource; } + ScriptResource* resource() { return m_resource.get(); } void setHaveFiredLoadEvent(bool haveFiredLoad) { m_haveFiredLoad = haveFiredLoad; } bool isParserInserted() const { return m_parserInserted; } @@ -104,7 +102,7 @@ String debugName() const override { return "ScriptLoader"; } RawPtrWillBeMember<Element> m_element; - ResourcePtr<ScriptResource> m_resource; + RefPtrWillBeMember<ScriptResource> m_resource; WTF::OrdinalNumber m_startLineNumber; String m_characterEncoding; String m_fallbackCharacterEncoding;
diff --git a/third_party/WebKit/Source/core/dom/ScriptRunner.h b/third_party/WebKit/Source/core/dom/ScriptRunner.h index a553e51..0303b62 100644 --- a/third_party/WebKit/Source/core/dom/ScriptRunner.h +++ b/third_party/WebKit/Source/core/dom/ScriptRunner.h
@@ -27,7 +27,6 @@ #define ScriptRunner_h #include "core/CoreExport.h" -#include "core/fetch/ResourcePtr.h" #include "platform/heap/Handle.h" #include "wtf/Deque.h" #include "wtf/HashMap.h"
diff --git a/third_party/WebKit/Source/core/dom/Text.idl b/third_party/WebKit/Source/core/dom/Text.idl index 1d733b9..f970d49 100644 --- a/third_party/WebKit/Source/core/dom/Text.idl +++ b/third_party/WebKit/Source/core/dom/Text.idl
@@ -29,4 +29,5 @@ // Shadow DOM // http://w3c.github.io/webcomponents/spec/shadow/#extensions-to-text-interface NodeList getDestinationInsertionPoints(); + [RuntimeEnabled=ShadowDOMV1, ImplementedAs=assignedSlotForBinding] readonly attribute HTMLSlotElement assignedSlot; };
diff --git a/third_party/WebKit/Source/core/dom/shadow/SlotAssignment.cpp b/third_party/WebKit/Source/core/dom/shadow/SlotAssignment.cpp index 982401aa..6ee8312c 100644 --- a/third_party/WebKit/Source/core/dom/shadow/SlotAssignment.cpp +++ b/third_party/WebKit/Source/core/dom/shadow/SlotAssignment.cpp
@@ -65,7 +65,7 @@ else detachNotAssignedNode(child); } - } else if (defaultSlot) { + } else if (defaultSlot && child.isTextNode()) { assign(child, *defaultSlot); } else { detachNotAssignedNode(child); @@ -79,6 +79,7 @@ void SlotAssignment::assign(Node& hostChild, HTMLSlotElement& slot) { + ASSERT(hostChild.isSlotAssignable()); m_assignment.add(&hostChild, &slot); slot.appendAssignedNode(hostChild); if (isHTMLSlotElement(hostChild))
diff --git a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp index 28b1b18..1c2cc34 100644 --- a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp +++ b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp
@@ -1270,7 +1270,7 @@ static inline LayoutPoint absoluteLineDirectionPointToLocalPointInBlock(RootInlineBox* root, LayoutUnit lineDirectionPoint) { ASSERT(root); - LayoutBlockFlow& containingBlock = root->block(); + LineLayoutBlockFlow containingBlock = root->block(); FloatPoint absoluteBlockPoint = containingBlock.localToAbsolute(FloatPoint()); if (containingBlock.hasOverflowClip()) absoluteBlockPoint -= FloatSize(containingBlock.scrolledContentOffset());
diff --git a/third_party/WebKit/Source/core/editing/commands/AppendNodeCommand.cpp b/third_party/WebKit/Source/core/editing/commands/AppendNodeCommand.cpp index 0312f0d2..2f706e8 100644 --- a/third_party/WebKit/Source/core/editing/commands/AppendNodeCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/AppendNodeCommand.cpp
@@ -41,7 +41,7 @@ ASSERT(m_parent->hasEditableStyle() || !m_parent->inActiveDocument()); } -void AppendNodeCommand::doApply() +void AppendNodeCommand::doApply(EditingState*) { if (!m_parent->hasEditableStyle() && m_parent->inActiveDocument()) return;
diff --git a/third_party/WebKit/Source/core/editing/commands/AppendNodeCommand.h b/third_party/WebKit/Source/core/editing/commands/AppendNodeCommand.h index b3abc5b..46db77d2 100644 --- a/third_party/WebKit/Source/core/editing/commands/AppendNodeCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/AppendNodeCommand.h
@@ -42,7 +42,7 @@ private: AppendNodeCommand(PassRefPtrWillBeRawPtr<ContainerNode> parent, PassRefPtrWillBeRawPtr<Node>); - void doApply() override; + void doApply(EditingState*) override; void doUnapply() override; RefPtrWillBeMember<ContainerNode> m_parent;
diff --git a/third_party/WebKit/Source/core/editing/commands/ApplyBlockElementCommand.cpp b/third_party/WebKit/Source/core/editing/commands/ApplyBlockElementCommand.cpp index 83c7d0f..bfb980f 100644 --- a/third_party/WebKit/Source/core/editing/commands/ApplyBlockElementCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/ApplyBlockElementCommand.cpp
@@ -55,7 +55,7 @@ { } -void ApplyBlockElementCommand::doApply() +void ApplyBlockElementCommand::doApply(EditingState*) { if (!endingSelection().rootEditableElement()) return;
diff --git a/third_party/WebKit/Source/core/editing/commands/ApplyBlockElementCommand.h b/third_party/WebKit/Source/core/editing/commands/ApplyBlockElementCommand.h index b40e5bc1..c8fa631 100644 --- a/third_party/WebKit/Source/core/editing/commands/ApplyBlockElementCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/ApplyBlockElementCommand.h
@@ -48,7 +48,7 @@ DECLARE_VIRTUAL_TRACE(); private: - void doApply() final; + void doApply(EditingState*) final; virtual void formatRange(const Position& start, const Position& end, const Position& endOfSelection, RefPtrWillBeRawPtr<HTMLElement>&) = 0; void rangeForParagraphSplittingTextNodesIfNeeded(const VisiblePosition&, Position&, Position&); VisiblePosition endOfNextParagrahSplittingTextNodesIfNeeded(VisiblePosition&, Position&, Position&);
diff --git a/third_party/WebKit/Source/core/editing/commands/ApplyStyleCommand.cpp b/third_party/WebKit/Source/core/editing/commands/ApplyStyleCommand.cpp index 873de78..b6dd604 100644 --- a/third_party/WebKit/Source/core/editing/commands/ApplyStyleCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/ApplyStyleCommand.cpp
@@ -196,7 +196,7 @@ return m_end; } -void ApplyStyleCommand::doApply() +void ApplyStyleCommand::doApply(EditingState*) { switch (m_propertyLevel) { case PropertyDefault: {
diff --git a/third_party/WebKit/Source/core/editing/commands/ApplyStyleCommand.h b/third_party/WebKit/Source/core/editing/commands/ApplyStyleCommand.h index 97bf2e7..66e57de 100644 --- a/third_party/WebKit/Source/core/editing/commands/ApplyStyleCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/ApplyStyleCommand.h
@@ -73,7 +73,7 @@ ApplyStyleCommand(PassRefPtrWillBeRawPtr<Element>, bool removeOnly, EditAction); ApplyStyleCommand(Document&, const EditingStyle*, bool (*isInlineElementToRemove)(const Element*), EditAction); - void doApply() override; + void doApply(EditingState*) override; EditAction editingAction() const override; // style-removal helpers
diff --git a/third_party/WebKit/Source/core/editing/commands/BreakBlockquoteCommand.cpp b/third_party/WebKit/Source/core/editing/commands/BreakBlockquoteCommand.cpp index bb9b72b4..8c5f5b2 100644 --- a/third_party/WebKit/Source/core/editing/commands/BreakBlockquoteCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/BreakBlockquoteCommand.cpp
@@ -72,7 +72,7 @@ { } -void BreakBlockquoteCommand::doApply() +void BreakBlockquoteCommand::doApply(EditingState*) { if (endingSelection().isNone()) return;
diff --git a/third_party/WebKit/Source/core/editing/commands/BreakBlockquoteCommand.h b/third_party/WebKit/Source/core/editing/commands/BreakBlockquoteCommand.h index 063cf9d..112ab37 100644 --- a/third_party/WebKit/Source/core/editing/commands/BreakBlockquoteCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/BreakBlockquoteCommand.h
@@ -39,7 +39,7 @@ private: explicit BreakBlockquoteCommand(Document&); - void doApply() override; + void doApply(EditingState*) override; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp b/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp index dd132745..4a16fba 100644 --- a/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp
@@ -204,7 +204,8 @@ ASSERT(frame); { EventQueueScope eventQueueScope; - doApply(); + EditingState editingState; + doApply(&editingState); } // Only need to call appliedEditing for top-level commands, @@ -246,11 +247,15 @@ // // sugary-sweet convenience functions to help create and apply edit commands in composite commands // -void CompositeEditCommand::applyCommandToComposite(PassRefPtrWillBeRawPtr<EditCommand> prpCommand) +void CompositeEditCommand::applyCommandToComposite(PassRefPtrWillBeRawPtr<EditCommand> prpCommand, EditingState* editingState) { RefPtrWillBeRawPtr<EditCommand> command = prpCommand; command->setParent(this); - command->doApply(); + command->doApply(editingState); + if (editingState->isAborted()) { + command->setParent(nullptr); + return; + } if (command->isSimpleEditCommand()) { command->setParent(0); ensureComposition()->append(toSimpleEditCommand(command.get())); @@ -258,15 +263,16 @@ m_commands.append(command.release()); } -void CompositeEditCommand::applyCommandToComposite(PassRefPtrWillBeRawPtr<CompositeEditCommand> command, const VisibleSelection& selection) +void CompositeEditCommand::applyCommandToComposite(PassRefPtrWillBeRawPtr<CompositeEditCommand> command, const VisibleSelection& selection, EditingState* editingState) { command->setParent(this); if (!equalSelectionsInDOMTree(selection, command->endingSelection())) { command->setStartingSelection(selection); command->setEndingSelection(selection); } - command->doApply(); - m_commands.append(command); + command->doApply(editingState); + if (!editingState->isAborted()) + m_commands.append(command); } void CompositeEditCommand::applyStyle(const EditingStyle* style, EditAction editingAction)
diff --git a/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.h b/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.h index 16ad1a2..a3bc1b0 100644 --- a/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.h
@@ -28,6 +28,7 @@ #include "core/CSSPropertyNames.h" #include "core/editing/commands/EditCommand.h" +#include "core/editing/commands/EditingState.h" #include "core/editing/commands/UndoStep.h" #include "wtf/Vector.h" @@ -95,8 +96,9 @@ // sugary-sweet convenience functions to help create and apply edit commands in composite commands // void appendNode(PassRefPtrWillBeRawPtr<Node>, PassRefPtrWillBeRawPtr<ContainerNode> parent); - void applyCommandToComposite(PassRefPtrWillBeRawPtr<EditCommand>); - void applyCommandToComposite(PassRefPtrWillBeRawPtr<CompositeEditCommand>, const VisibleSelection&); + // TODO(tkent): EditingState argument should not be optional. + void applyCommandToComposite(PassRefPtrWillBeRawPtr<EditCommand>, EditingState* = ASSERT_NO_EDITING_ABORT); + void applyCommandToComposite(PassRefPtrWillBeRawPtr<CompositeEditCommand>, const VisibleSelection&, EditingState* = ASSERT_NO_EDITING_ABORT); void applyStyle(const EditingStyle*, EditAction = EditActionChangeAttributes); void applyStyle(const EditingStyle*, const Position& start, const Position& end, EditAction = EditActionChangeAttributes); void applyStyledElement(PassRefPtrWillBeRawPtr<Element>);
diff --git a/third_party/WebKit/Source/core/editing/commands/CreateLinkCommand.cpp b/third_party/WebKit/Source/core/editing/commands/CreateLinkCommand.cpp index 05323be..e77f6a2 100644 --- a/third_party/WebKit/Source/core/editing/commands/CreateLinkCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/CreateLinkCommand.cpp
@@ -36,7 +36,7 @@ m_url = url; } -void CreateLinkCommand::doApply() +void CreateLinkCommand::doApply(EditingState*) { if (endingSelection().isNone()) return;
diff --git a/third_party/WebKit/Source/core/editing/commands/CreateLinkCommand.h b/third_party/WebKit/Source/core/editing/commands/CreateLinkCommand.h index 97e7acd5..a4ac6d5 100644 --- a/third_party/WebKit/Source/core/editing/commands/CreateLinkCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/CreateLinkCommand.h
@@ -40,7 +40,7 @@ private: CreateLinkCommand(Document&, const String& linkURL); - void doApply() override; + void doApply(EditingState*) override; EditAction editingAction() const override { return EditActionCreateLink; } String m_url;
diff --git a/third_party/WebKit/Source/core/editing/commands/DeleteFromTextNodeCommand.cpp b/third_party/WebKit/Source/core/editing/commands/DeleteFromTextNodeCommand.cpp index 5f1723d..d66aa626 100644 --- a/third_party/WebKit/Source/core/editing/commands/DeleteFromTextNodeCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/DeleteFromTextNodeCommand.cpp
@@ -42,7 +42,7 @@ ASSERT(m_offset + m_count <= m_node->length()); } -void DeleteFromTextNodeCommand::doApply() +void DeleteFromTextNodeCommand::doApply(EditingState*) { ASSERT(m_node);
diff --git a/third_party/WebKit/Source/core/editing/commands/DeleteFromTextNodeCommand.h b/third_party/WebKit/Source/core/editing/commands/DeleteFromTextNodeCommand.h index 52e5c88f..8f4469e 100644 --- a/third_party/WebKit/Source/core/editing/commands/DeleteFromTextNodeCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/DeleteFromTextNodeCommand.h
@@ -44,7 +44,7 @@ private: DeleteFromTextNodeCommand(PassRefPtrWillBeRawPtr<Text>, unsigned offset, unsigned count); - void doApply() override; + void doApply(EditingState*) override; void doUnapply() override; RefPtrWillBeMember<Text> m_node;
diff --git a/third_party/WebKit/Source/core/editing/commands/DeleteSelectionCommand.cpp b/third_party/WebKit/Source/core/editing/commands/DeleteSelectionCommand.cpp index a577a52..a69c291d 100644 --- a/third_party/WebKit/Source/core/editing/commands/DeleteSelectionCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/DeleteSelectionCommand.cpp
@@ -784,7 +784,7 @@ } } -void DeleteSelectionCommand::doApply() +void DeleteSelectionCommand::doApply(EditingState*) { // If selection has not been set to a custom selection when the command was created, // use the current ending selection.
diff --git a/third_party/WebKit/Source/core/editing/commands/DeleteSelectionCommand.h b/third_party/WebKit/Source/core/editing/commands/DeleteSelectionCommand.h index bfb6a1a..27b5dde9 100644 --- a/third_party/WebKit/Source/core/editing/commands/DeleteSelectionCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/DeleteSelectionCommand.h
@@ -50,7 +50,7 @@ DeleteSelectionCommand(Document&, bool smartDelete, bool mergeBlocksAfterDelete, bool expandForSpecialElements, bool santizeMarkup); DeleteSelectionCommand(const VisibleSelection&, bool smartDelete, bool mergeBlocksAfterDelete, bool expandForSpecialElements, bool sanitizeMarkup); - void doApply() override; + void doApply(EditingState*) override; EditAction editingAction() const override; bool preservesTypingStyle() const override;
diff --git a/third_party/WebKit/Source/core/editing/commands/EditCommand.cpp b/third_party/WebKit/Source/core/editing/commands/EditCommand.cpp index f7a74e9..0581ae6d 100644 --- a/third_party/WebKit/Source/core/editing/commands/EditCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/EditCommand.cpp
@@ -117,7 +117,8 @@ void SimpleEditCommand::doReapply() { - doApply(); + EditingState editingState; + doApply(&editingState); } DEFINE_TRACE(EditCommand)
diff --git a/third_party/WebKit/Source/core/editing/commands/EditCommand.h b/third_party/WebKit/Source/core/editing/commands/EditCommand.h index 3e2bddbc..18a3b11 100644 --- a/third_party/WebKit/Source/core/editing/commands/EditCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/EditCommand.h
@@ -34,6 +34,7 @@ class CompositeEditCommand; class Document; +class EditingState; class EditCommand : public RefCountedWillBeGarbageCollectedFinalized<EditCommand> { public: @@ -50,7 +51,8 @@ virtual bool isCompositeEditCommand() const { return false; } bool isTopLevelCommand() const { return !m_parent; } - virtual void doApply() = 0; + // The |EditingState*| argument must not be nullptr. + virtual void doApply(EditingState*) = 0; DECLARE_VIRTUAL_TRACE();
diff --git a/third_party/WebKit/Source/core/editing/commands/EditingState.cpp b/third_party/WebKit/Source/core/editing/commands/EditingState.cpp new file mode 100644 index 0000000..03da028 --- /dev/null +++ b/third_party/WebKit/Source/core/editing/commands/EditingState.cpp
@@ -0,0 +1,46 @@ +// Copyright 2016 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 "core/editing/commands/EditingState.h" + +namespace blink { + +EditingState::EditingState() +{ +} + +EditingState::~EditingState() +{ +} + +void EditingState::abort() +{ + ASSERT(!m_isAborted); + m_isAborted = true; +} + +// --- +IgnorableEditingAbortState::IgnorableEditingAbortState() +{ +} + +IgnorableEditingAbortState::~IgnorableEditingAbortState() +{ +} + +#if ENABLE(ASSERT) +// --- + +NoEditingAbortChecker::NoEditingAbortChecker(const char* file, int line) + : m_file(file) + , m_line(line) { } + +NoEditingAbortChecker::~NoEditingAbortChecker() +{ + ASSERT_AT(!m_editingState.isAborted(), m_file, m_line, ""); +} + +#endif + +} // namespace blink
diff --git a/third_party/WebKit/Source/core/editing/commands/EditingState.h b/third_party/WebKit/Source/core/editing/commands/EditingState.h new file mode 100644 index 0000000..a1a739a --- /dev/null +++ b/third_party/WebKit/Source/core/editing/commands/EditingState.h
@@ -0,0 +1,96 @@ +// Copyright 2016 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 EditingState_h +#define EditingState_h + +#include "wtf/Allocator.h" +#include "wtf/Assertions.h" +#include "wtf/Noncopyable.h" + +namespace blink { + +// EditingState represents current editing command running state for propagating +// DOM tree mutation operation failure to callers. +// +// Example usage: +// EditingState editingState; +// ... +// functionMutatesDOMTree(..., &editingState); +// if (editingState.isAborted()) +// return; +// +class EditingState final { + STACK_ALLOCATED(); + WTF_MAKE_NONCOPYABLE(EditingState); +public: + EditingState(); + ~EditingState(); + + void abort(); + bool isAborted() const { return m_isAborted; } + +private: + bool m_isAborted = false; +}; + + +// TODO(yosin): Once all commands aware |EditingState|, we get rid of +// |IgnorableEditingAbortState | class +class IgnorableEditingAbortState final { + STACK_ALLOCATED(); + WTF_MAKE_NONCOPYABLE(IgnorableEditingAbortState); + +public: + IgnorableEditingAbortState(); + ~IgnorableEditingAbortState(); + + EditingState* editingState() { return &m_editingState; } + +private: + EditingState m_editingState; +}; + +#if ENABLE(ASSERT) +// TODO(yosin): Once all commands aware |EditingState|, we get rid of +// |NoEditingAbortChecker| class +// This class is inspired by |NoExceptionStateAssertionChecke|. +class NoEditingAbortChecker final { + STACK_ALLOCATED(); + WTF_MAKE_NONCOPYABLE(NoEditingAbortChecker); +public: + NoEditingAbortChecker(const char* file, int line); + ~NoEditingAbortChecker(); + + EditingState* editingState() { return &m_editingState; } + +private: + EditingState m_editingState; + const char* const m_file; + int const m_line; +}; + +// All assertion in "core/editing/commands" should use +// |ASSERT_IN_EDITING_COMMAND()| instead of |ASSERT()|. +#define ASSERT_IN_EDITING_COMMAND(expr) \ + do { \ + if (!(expr)) { \ + editingState->abort(); \ + return; \ + } \ + break; \ + } while (true) + +// A macro for default parameter of |EditingState*| parameter. +// TODO(yosin): Once all commands aware |EditingState|, we get rid of +// |ASSERT_NO_EDITING_ABORT| macro. +#define ASSERT_NO_EDITING_ABORT (NoEditingAbortChecker(__FILE__, __LINE__).editingState()) +#else +#define ASSERT_IN_EDITING_COMMAND(expr) +#define ASSERT_NO_EDITING_ABORT (IgnorableEditingAbortState().editingState()) +#endif + +} // namespace blink + +#endif // EditingState_h
diff --git a/third_party/WebKit/Source/core/editing/commands/InsertIntoTextNodeCommand.cpp b/third_party/WebKit/Source/core/editing/commands/InsertIntoTextNodeCommand.cpp index a9e1a29..f689f5af 100644 --- a/third_party/WebKit/Source/core/editing/commands/InsertIntoTextNodeCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/InsertIntoTextNodeCommand.cpp
@@ -44,7 +44,7 @@ ASSERT(!m_text.isEmpty()); } -void InsertIntoTextNodeCommand::doApply() +void InsertIntoTextNodeCommand::doApply(EditingState*) { bool passwordEchoEnabled = document().settings() && document().settings()->passwordEchoEnabled(); if (passwordEchoEnabled)
diff --git a/third_party/WebKit/Source/core/editing/commands/InsertIntoTextNodeCommand.h b/third_party/WebKit/Source/core/editing/commands/InsertIntoTextNodeCommand.h index f16ad707..963192c3 100644 --- a/third_party/WebKit/Source/core/editing/commands/InsertIntoTextNodeCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/InsertIntoTextNodeCommand.h
@@ -44,7 +44,7 @@ private: InsertIntoTextNodeCommand(PassRefPtrWillBeRawPtr<Text> node, unsigned offset, const String& text); - void doApply() override; + void doApply(EditingState*) override; void doUnapply() override; RefPtrWillBeMember<Text> m_node;
diff --git a/third_party/WebKit/Source/core/editing/commands/InsertLineBreakCommand.cpp b/third_party/WebKit/Source/core/editing/commands/InsertLineBreakCommand.cpp index 8a50c657..f7842e4 100644 --- a/third_party/WebKit/Source/core/editing/commands/InsertLineBreakCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/InsertLineBreakCommand.cpp
@@ -63,7 +63,7 @@ return p.anchorNode()->layoutObject() && !p.anchorNode()->layoutObject()->style()->preserveNewline(); } -void InsertLineBreakCommand::doApply() +void InsertLineBreakCommand::doApply(EditingState*) { deleteSelection(); VisibleSelection selection = endingSelection();
diff --git a/third_party/WebKit/Source/core/editing/commands/InsertLineBreakCommand.h b/third_party/WebKit/Source/core/editing/commands/InsertLineBreakCommand.h index cd5296f3..16b32e0b 100644 --- a/third_party/WebKit/Source/core/editing/commands/InsertLineBreakCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/InsertLineBreakCommand.h
@@ -40,7 +40,7 @@ private: explicit InsertLineBreakCommand(Document&); - void doApply() override; + void doApply(EditingState*) override; bool preservesTypingStyle() const override;
diff --git a/third_party/WebKit/Source/core/editing/commands/InsertListCommand.cpp b/third_party/WebKit/Source/core/editing/commands/InsertListCommand.cpp index 404efc7..d60e6b6 100644 --- a/third_party/WebKit/Source/core/editing/commands/InsertListCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/InsertListCommand.cpp
@@ -111,7 +111,7 @@ return Position::commonAncestorTreeScope(formerPosition, laterPosition) && comparePositions(formerPosition, laterPosition) <= 0; } -void InsertListCommand::doApply() +void InsertListCommand::doApply(EditingState*) { if (!endingSelection().isNonOrphanedCaretOrRange()) return;
diff --git a/third_party/WebKit/Source/core/editing/commands/InsertListCommand.h b/third_party/WebKit/Source/core/editing/commands/InsertListCommand.h index 5341a68..334aaf6e 100644 --- a/third_party/WebKit/Source/core/editing/commands/InsertListCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/InsertListCommand.h
@@ -49,7 +49,7 @@ private: InsertListCommand(Document&, Type); - void doApply() override; + void doApply(EditingState*) override; EditAction editingAction() const override { return EditActionInsertList; } HTMLUListElement* fixOrphanedListChild(Node*);
diff --git a/third_party/WebKit/Source/core/editing/commands/InsertNodeBeforeCommand.cpp b/third_party/WebKit/Source/core/editing/commands/InsertNodeBeforeCommand.cpp index ed00c38..d1b6460 100644 --- a/third_party/WebKit/Source/core/editing/commands/InsertNodeBeforeCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/InsertNodeBeforeCommand.cpp
@@ -44,7 +44,7 @@ ASSERT(m_refChild->parentNode()->hasEditableStyle() || !m_refChild->parentNode()->inActiveDocument()); } -void InsertNodeBeforeCommand::doApply() +void InsertNodeBeforeCommand::doApply(EditingState*) { ContainerNode* parent = m_refChild->parentNode(); if (!parent || (m_shouldAssumeContentIsAlwaysEditable == DoNotAssumeContentIsAlwaysEditable && !parent->isContentEditable(Node::UserSelectAllIsAlwaysNonEditable)))
diff --git a/third_party/WebKit/Source/core/editing/commands/InsertNodeBeforeCommand.h b/third_party/WebKit/Source/core/editing/commands/InsertNodeBeforeCommand.h index dd668cf86..4c8569e 100644 --- a/third_party/WebKit/Source/core/editing/commands/InsertNodeBeforeCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/InsertNodeBeforeCommand.h
@@ -43,7 +43,7 @@ private: InsertNodeBeforeCommand(PassRefPtrWillBeRawPtr<Node> childToInsert, PassRefPtrWillBeRawPtr<Node> childToInsertBefore, ShouldAssumeContentIsAlwaysEditable); - void doApply() override; + void doApply(EditingState*) override; void doUnapply() override; RefPtrWillBeMember<Node> m_insertChild;
diff --git a/third_party/WebKit/Source/core/editing/commands/InsertParagraphSeparatorCommand.cpp b/third_party/WebKit/Source/core/editing/commands/InsertParagraphSeparatorCommand.cpp index 0c757f1d..eff1fee 100644 --- a/third_party/WebKit/Source/core/editing/commands/InsertParagraphSeparatorCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/InsertParagraphSeparatorCommand.cpp
@@ -148,7 +148,7 @@ return parent.release(); } -void InsertParagraphSeparatorCommand::doApply() +void InsertParagraphSeparatorCommand::doApply(EditingState*) { if (!endingSelection().isNonOrphanedCaretOrRange()) return;
diff --git a/third_party/WebKit/Source/core/editing/commands/InsertParagraphSeparatorCommand.h b/third_party/WebKit/Source/core/editing/commands/InsertParagraphSeparatorCommand.h index 332e58e4..c2124ad 100644 --- a/third_party/WebKit/Source/core/editing/commands/InsertParagraphSeparatorCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/InsertParagraphSeparatorCommand.h
@@ -44,7 +44,7 @@ private: InsertParagraphSeparatorCommand(Document&, bool useDefaultParagraphElement, bool pasteBlockquoteIntoUnquotedArea); - void doApply() override; + void doApply(EditingState*) override; void calculateStyleBeforeInsertion(const Position&); void applyStyleAfterInsertion(Element* originalEnclosingBlock);
diff --git a/third_party/WebKit/Source/core/editing/commands/InsertTextCommand.cpp b/third_party/WebKit/Source/core/editing/commands/InsertTextCommand.cpp index 3b9d657..5390dae 100644 --- a/third_party/WebKit/Source/core/editing/commands/InsertTextCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/InsertTextCommand.cpp
@@ -120,7 +120,7 @@ return true; } -void InsertTextCommand::doApply() +void InsertTextCommand::doApply(EditingState*) { ASSERT(m_text.find('\n') == kNotFound);
diff --git a/third_party/WebKit/Source/core/editing/commands/InsertTextCommand.h b/third_party/WebKit/Source/core/editing/commands/InsertTextCommand.h index 5ef99640..4a4d992 100644 --- a/third_party/WebKit/Source/core/editing/commands/InsertTextCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/InsertTextCommand.h
@@ -46,7 +46,7 @@ private: InsertTextCommand(Document&, const String& text, bool selectInsertedText, RebalanceType); - void doApply() override; + void doApply(EditingState*) override; Position positionInsideTextNode(const Position&); Position insertTab(const Position&);
diff --git a/third_party/WebKit/Source/core/editing/commands/MergeIdenticalElementsCommand.cpp b/third_party/WebKit/Source/core/editing/commands/MergeIdenticalElementsCommand.cpp index 81f9c19..fbe0e46 100644 --- a/third_party/WebKit/Source/core/editing/commands/MergeIdenticalElementsCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/MergeIdenticalElementsCommand.cpp
@@ -41,7 +41,7 @@ ASSERT(m_element1->nextSibling() == m_element2); } -void MergeIdenticalElementsCommand::doApply() +void MergeIdenticalElementsCommand::doApply(EditingState*) { if (m_element1->nextSibling() != m_element2 || !m_element1->hasEditableStyle() || !m_element2->hasEditableStyle()) return;
diff --git a/third_party/WebKit/Source/core/editing/commands/MergeIdenticalElementsCommand.h b/third_party/WebKit/Source/core/editing/commands/MergeIdenticalElementsCommand.h index a44433a..cdd0a1e 100644 --- a/third_party/WebKit/Source/core/editing/commands/MergeIdenticalElementsCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/MergeIdenticalElementsCommand.h
@@ -42,7 +42,7 @@ private: MergeIdenticalElementsCommand(PassRefPtrWillBeRawPtr<Element>, PassRefPtrWillBeRawPtr<Element>); - void doApply() override; + void doApply(EditingState*) override; void doUnapply() override; RefPtrWillBeMember<Element> m_element1;
diff --git a/third_party/WebKit/Source/core/editing/commands/MoveSelectionCommand.cpp b/third_party/WebKit/Source/core/editing/commands/MoveSelectionCommand.cpp index 82522ac..2e34626a 100644 --- a/third_party/WebKit/Source/core/editing/commands/MoveSelectionCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/MoveSelectionCommand.cpp
@@ -36,7 +36,7 @@ ASSERT(m_fragment); } -void MoveSelectionCommand::doApply() +void MoveSelectionCommand::doApply(EditingState*) { ASSERT(endingSelection().isNonOrphanedRange());
diff --git a/third_party/WebKit/Source/core/editing/commands/MoveSelectionCommand.h b/third_party/WebKit/Source/core/editing/commands/MoveSelectionCommand.h index 806a9c0..72c862d 100644 --- a/third_party/WebKit/Source/core/editing/commands/MoveSelectionCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/MoveSelectionCommand.h
@@ -44,7 +44,7 @@ private: MoveSelectionCommand(PassRefPtrWillBeRawPtr<DocumentFragment>, const Position&, bool smartInsert, bool smartDelete); - void doApply() override; + void doApply(EditingState*) override; EditAction editingAction() const override; RefPtrWillBeMember<DocumentFragment> m_fragment;
diff --git a/third_party/WebKit/Source/core/editing/commands/RemoveCSSPropertyCommand.cpp b/third_party/WebKit/Source/core/editing/commands/RemoveCSSPropertyCommand.cpp index 61964b3..1017bef 100644 --- a/third_party/WebKit/Source/core/editing/commands/RemoveCSSPropertyCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/RemoveCSSPropertyCommand.cpp
@@ -46,7 +46,7 @@ { } -void RemoveCSSPropertyCommand::doApply() +void RemoveCSSPropertyCommand::doApply(EditingState*) { const StylePropertySet* style = m_element->inlineStyle(); if (!style)
diff --git a/third_party/WebKit/Source/core/editing/commands/RemoveCSSPropertyCommand.h b/third_party/WebKit/Source/core/editing/commands/RemoveCSSPropertyCommand.h index 2d9d6306..6fce4aee 100644 --- a/third_party/WebKit/Source/core/editing/commands/RemoveCSSPropertyCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/RemoveCSSPropertyCommand.h
@@ -46,7 +46,7 @@ RemoveCSSPropertyCommand(Document&, PassRefPtrWillBeRawPtr<Element>, CSSPropertyID); ~RemoveCSSPropertyCommand() override; - void doApply() override; + void doApply(EditingState*) override; void doUnapply() override; RefPtrWillBeMember<Element> m_element;
diff --git a/third_party/WebKit/Source/core/editing/commands/RemoveFormatCommand.cpp b/third_party/WebKit/Source/core/editing/commands/RemoveFormatCommand.cpp index f072161..ddcfedb 100644 --- a/third_party/WebKit/Source/core/editing/commands/RemoveFormatCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/RemoveFormatCommand.cpp
@@ -77,7 +77,7 @@ return elements.contains(element->tagQName()); } -void RemoveFormatCommand::doApply() +void RemoveFormatCommand::doApply(EditingState*) { LocalFrame* frame = document().frame();
diff --git a/third_party/WebKit/Source/core/editing/commands/RemoveFormatCommand.h b/third_party/WebKit/Source/core/editing/commands/RemoveFormatCommand.h index ced795b..79294ab7 100644 --- a/third_party/WebKit/Source/core/editing/commands/RemoveFormatCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/RemoveFormatCommand.h
@@ -40,7 +40,7 @@ private: explicit RemoveFormatCommand(Document&); - void doApply() override; + void doApply(EditingState*) override; EditAction editingAction() const override { return EditActionUnspecified; } };
diff --git a/third_party/WebKit/Source/core/editing/commands/RemoveNodeCommand.cpp b/third_party/WebKit/Source/core/editing/commands/RemoveNodeCommand.cpp index 4510a8b..a9b8ead 100644 --- a/third_party/WebKit/Source/core/editing/commands/RemoveNodeCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/RemoveNodeCommand.cpp
@@ -40,7 +40,7 @@ ASSERT(m_node->parentNode()); } -void RemoveNodeCommand::doApply() +void RemoveNodeCommand::doApply(EditingState*) { ContainerNode* parent = m_node->parentNode(); if (!parent || (m_shouldAssumeContentIsAlwaysEditable == DoNotAssumeContentIsAlwaysEditable
diff --git a/third_party/WebKit/Source/core/editing/commands/RemoveNodeCommand.h b/third_party/WebKit/Source/core/editing/commands/RemoveNodeCommand.h index 101ef7e..9bb703c 100644 --- a/third_party/WebKit/Source/core/editing/commands/RemoveNodeCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/RemoveNodeCommand.h
@@ -42,7 +42,7 @@ private: explicit RemoveNodeCommand(PassRefPtrWillBeRawPtr<Node>, ShouldAssumeContentIsAlwaysEditable); - void doApply() override; + void doApply(EditingState*) override; void doUnapply() override; RefPtrWillBeMember<Node> m_node;
diff --git a/third_party/WebKit/Source/core/editing/commands/RemoveNodePreservingChildrenCommand.cpp b/third_party/WebKit/Source/core/editing/commands/RemoveNodePreservingChildrenCommand.cpp index fb02ef79..55fb5d7 100644 --- a/third_party/WebKit/Source/core/editing/commands/RemoveNodePreservingChildrenCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/RemoveNodePreservingChildrenCommand.cpp
@@ -38,7 +38,7 @@ ASSERT(m_node); } -void RemoveNodePreservingChildrenCommand::doApply() +void RemoveNodePreservingChildrenCommand::doApply(EditingState*) { if (m_node->isContainerNode()) { NodeVector children;
diff --git a/third_party/WebKit/Source/core/editing/commands/RemoveNodePreservingChildrenCommand.h b/third_party/WebKit/Source/core/editing/commands/RemoveNodePreservingChildrenCommand.h index 04c99b0..c6a4f7dc 100644 --- a/third_party/WebKit/Source/core/editing/commands/RemoveNodePreservingChildrenCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/RemoveNodePreservingChildrenCommand.h
@@ -42,7 +42,7 @@ private: RemoveNodePreservingChildrenCommand(PassRefPtrWillBeRawPtr<Node>, ShouldAssumeContentIsAlwaysEditable); - void doApply() override; + void doApply(EditingState*) override; RefPtrWillBeMember<Node> m_node; ShouldAssumeContentIsAlwaysEditable m_shouldAssumeContentIsAlwaysEditable;
diff --git a/third_party/WebKit/Source/core/editing/commands/ReplaceNodeWithSpanCommand.cpp b/third_party/WebKit/Source/core/editing/commands/ReplaceNodeWithSpanCommand.cpp index 029da6a..31e8423 100644 --- a/third_party/WebKit/Source/core/editing/commands/ReplaceNodeWithSpanCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/ReplaceNodeWithSpanCommand.cpp
@@ -65,7 +65,7 @@ parentNode->removeChild(&elementToReplace, ASSERT_NO_EXCEPTION); } -void ReplaceNodeWithSpanCommand::doApply() +void ReplaceNodeWithSpanCommand::doApply(EditingState*) { if (!m_elementToReplace->inDocument()) return;
diff --git a/third_party/WebKit/Source/core/editing/commands/ReplaceNodeWithSpanCommand.h b/third_party/WebKit/Source/core/editing/commands/ReplaceNodeWithSpanCommand.h index 5087d519d..067d8b2 100644 --- a/third_party/WebKit/Source/core/editing/commands/ReplaceNodeWithSpanCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/ReplaceNodeWithSpanCommand.h
@@ -53,7 +53,7 @@ private: explicit ReplaceNodeWithSpanCommand(PassRefPtrWillBeRawPtr<HTMLElement>); - void doApply() override; + void doApply(EditingState*) override; void doUnapply() override; RefPtrWillBeMember<HTMLElement> m_elementToReplace;
diff --git a/third_party/WebKit/Source/core/editing/commands/ReplaceSelectionCommand.cpp b/third_party/WebKit/Source/core/editing/commands/ReplaceSelectionCommand.cpp index 612ea9e..84af819d 100644 --- a/third_party/WebKit/Source/core/editing/commands/ReplaceSelectionCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/ReplaceSelectionCommand.cpp
@@ -920,7 +920,7 @@ return toHTMLElement(highestEnclosingNodeOfType(insertionPos, isInlineHTMLElementWithStyle, CannotCrossEditingBoundary, containingBlock)); } -void ReplaceSelectionCommand::doApply() +void ReplaceSelectionCommand::doApply(EditingState*) { const VisibleSelection selection = endingSelection(); ASSERT(selection.isCaretOrRange());
diff --git a/third_party/WebKit/Source/core/editing/commands/ReplaceSelectionCommand.h b/third_party/WebKit/Source/core/editing/commands/ReplaceSelectionCommand.h index 2966c4b..4a36cb3 100644 --- a/third_party/WebKit/Source/core/editing/commands/ReplaceSelectionCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/ReplaceSelectionCommand.h
@@ -59,7 +59,7 @@ private: ReplaceSelectionCommand(Document&, PassRefPtrWillBeRawPtr<DocumentFragment>, CommandOptions, EditAction); - void doApply() override; + void doApply(EditingState*) override; EditAction editingAction() const override; bool isReplaceSelectionCommand() const override;
diff --git a/third_party/WebKit/Source/core/editing/commands/SetNodeAttributeCommand.cpp b/third_party/WebKit/Source/core/editing/commands/SetNodeAttributeCommand.cpp index 53c0c79..9ec30165 100644 --- a/third_party/WebKit/Source/core/editing/commands/SetNodeAttributeCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/SetNodeAttributeCommand.cpp
@@ -40,7 +40,7 @@ ASSERT(m_element); } -void SetNodeAttributeCommand::doApply() +void SetNodeAttributeCommand::doApply(EditingState*) { m_oldValue = m_element->getAttribute(m_attribute); m_element->setAttribute(m_attribute, m_value);
diff --git a/third_party/WebKit/Source/core/editing/commands/SetNodeAttributeCommand.h b/third_party/WebKit/Source/core/editing/commands/SetNodeAttributeCommand.h index 3009926..33e901e 100644 --- a/third_party/WebKit/Source/core/editing/commands/SetNodeAttributeCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/SetNodeAttributeCommand.h
@@ -43,7 +43,7 @@ private: SetNodeAttributeCommand(PassRefPtrWillBeRawPtr<Element>, const QualifiedName& attribute, const AtomicString& value); - void doApply() override; + void doApply(EditingState*) override; void doUnapply() override; RefPtrWillBeMember<Element> m_element;
diff --git a/third_party/WebKit/Source/core/editing/commands/SimplifyMarkupCommand.cpp b/third_party/WebKit/Source/core/editing/commands/SimplifyMarkupCommand.cpp index f201ad3d..cdfd62e 100644 --- a/third_party/WebKit/Source/core/editing/commands/SimplifyMarkupCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/SimplifyMarkupCommand.cpp
@@ -38,7 +38,7 @@ { } -void SimplifyMarkupCommand::doApply() +void SimplifyMarkupCommand::doApply(EditingState*) { ContainerNode* rootNode = m_firstNode->parentNode(); WillBeHeapVector<RefPtrWillBeMember<ContainerNode>> nodesToRemove;
diff --git a/third_party/WebKit/Source/core/editing/commands/SimplifyMarkupCommand.h b/third_party/WebKit/Source/core/editing/commands/SimplifyMarkupCommand.h index 49eeaba..634e24e 100644 --- a/third_party/WebKit/Source/core/editing/commands/SimplifyMarkupCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/SimplifyMarkupCommand.h
@@ -42,7 +42,7 @@ private: SimplifyMarkupCommand(Document&, Node* firstNode, Node* nodeAfterLast); - void doApply() override; + void doApply(EditingState*) override; int pruneSubsequentAncestorsToRemove(WillBeHeapVector<RefPtrWillBeMember<ContainerNode>>& nodesToRemove, size_t startNodeIndex); RefPtrWillBeMember<Node> m_firstNode;
diff --git a/third_party/WebKit/Source/core/editing/commands/SplitElementCommand.cpp b/third_party/WebKit/Source/core/editing/commands/SplitElementCommand.cpp index 06b6163..fa3f458b 100644 --- a/third_party/WebKit/Source/core/editing/commands/SplitElementCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/SplitElementCommand.cpp
@@ -68,7 +68,7 @@ m_element1->appendChild(child, exceptionState); } -void SplitElementCommand::doApply() +void SplitElementCommand::doApply(EditingState*) { m_element1 = m_element2->cloneElementWithoutChildren();
diff --git a/third_party/WebKit/Source/core/editing/commands/SplitElementCommand.h b/third_party/WebKit/Source/core/editing/commands/SplitElementCommand.h index 6aaad421..ee619d5 100644 --- a/third_party/WebKit/Source/core/editing/commands/SplitElementCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/SplitElementCommand.h
@@ -42,7 +42,7 @@ private: SplitElementCommand(PassRefPtrWillBeRawPtr<Element>, PassRefPtrWillBeRawPtr<Node> splitPointChild); - void doApply() override; + void doApply(EditingState*) override; void doUnapply() override; void doReapply() override; void executeApply();
diff --git a/third_party/WebKit/Source/core/editing/commands/SplitTextNodeCommand.cpp b/third_party/WebKit/Source/core/editing/commands/SplitTextNodeCommand.cpp index e1e9aa9..7f3b6771 100644 --- a/third_party/WebKit/Source/core/editing/commands/SplitTextNodeCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/SplitTextNodeCommand.cpp
@@ -49,7 +49,7 @@ ASSERT(m_offset < m_text2->length()); } -void SplitTextNodeCommand::doApply() +void SplitTextNodeCommand::doApply(EditingState*) { ContainerNode* parent = m_text2->parentNode(); if (!parent || !parent->hasEditableStyle())
diff --git a/third_party/WebKit/Source/core/editing/commands/SplitTextNodeCommand.h b/third_party/WebKit/Source/core/editing/commands/SplitTextNodeCommand.h index 952b9ff..f743c13 100644 --- a/third_party/WebKit/Source/core/editing/commands/SplitTextNodeCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/SplitTextNodeCommand.h
@@ -44,7 +44,7 @@ private: SplitTextNodeCommand(PassRefPtrWillBeRawPtr<Text>, int offset); - void doApply() override; + void doApply(EditingState*) override; void doUnapply() override; void doReapply() override; void insertText1AndTrimText2();
diff --git a/third_party/WebKit/Source/core/editing/commands/SplitTextNodeContainingElementCommand.cpp b/third_party/WebKit/Source/core/editing/commands/SplitTextNodeContainingElementCommand.cpp index 39920119..496fe88 100644 --- a/third_party/WebKit/Source/core/editing/commands/SplitTextNodeContainingElementCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/SplitTextNodeContainingElementCommand.cpp
@@ -39,7 +39,7 @@ ASSERT(m_text->length() > 0); } -void SplitTextNodeContainingElementCommand::doApply() +void SplitTextNodeContainingElementCommand::doApply(EditingState*) { ASSERT(m_text); ASSERT(m_offset > 0);
diff --git a/third_party/WebKit/Source/core/editing/commands/SplitTextNodeContainingElementCommand.h b/third_party/WebKit/Source/core/editing/commands/SplitTextNodeContainingElementCommand.h index 52f4b116e..c17b43f 100644 --- a/third_party/WebKit/Source/core/editing/commands/SplitTextNodeContainingElementCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/SplitTextNodeContainingElementCommand.h
@@ -42,7 +42,7 @@ private: SplitTextNodeContainingElementCommand(PassRefPtrWillBeRawPtr<Text>, int offset); - void doApply() override; + void doApply(EditingState*) override; RefPtrWillBeMember<Text> m_text; int m_offset;
diff --git a/third_party/WebKit/Source/core/editing/commands/TypingCommand.cpp b/third_party/WebKit/Source/core/editing/commands/TypingCommand.cpp index 352c1e12..0cf1150b 100644 --- a/third_party/WebKit/Source/core/editing/commands/TypingCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/TypingCommand.cpp
@@ -246,7 +246,7 @@ lastTypingCommand->closeTyping(); } -void TypingCommand::doApply() +void TypingCommand::doApply(EditingState*) { if (!endingSelection().isNonOrphanedCaretOrRange()) return;
diff --git a/third_party/WebKit/Source/core/editing/commands/TypingCommand.h b/third_party/WebKit/Source/core/editing/commands/TypingCommand.h index 698b0e56..20a1d66 100644 --- a/third_party/WebKit/Source/core/editing/commands/TypingCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/TypingCommand.h
@@ -96,7 +96,7 @@ static PassRefPtrWillBeRawPtr<TypingCommand> lastTypingCommandIfStillOpenForTyping(LocalFrame*); - void doApply() override; + void doApply(EditingState*) override; EditAction editingAction() const override; bool isTypingCommand() const override; bool preservesTypingStyle() const override { return m_preservesTypingStyle; }
diff --git a/third_party/WebKit/Source/core/editing/commands/UnlinkCommand.cpp b/third_party/WebKit/Source/core/editing/commands/UnlinkCommand.cpp index fe7652e..8cccefa6 100644 --- a/third_party/WebKit/Source/core/editing/commands/UnlinkCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/UnlinkCommand.cpp
@@ -34,7 +34,7 @@ { } -void UnlinkCommand::doApply() +void UnlinkCommand::doApply(EditingState*) { // FIXME: If a caret is inside a link, we should remove it, but currently we don't. if (!endingSelection().isNonOrphanedRange())
diff --git a/third_party/WebKit/Source/core/editing/commands/UnlinkCommand.h b/third_party/WebKit/Source/core/editing/commands/UnlinkCommand.h index 75df0a4..22b0d28 100644 --- a/third_party/WebKit/Source/core/editing/commands/UnlinkCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/UnlinkCommand.h
@@ -40,7 +40,7 @@ private: explicit UnlinkCommand(Document&); - void doApply() override; + void doApply(EditingState*) override; EditAction editingAction() const override { return EditActionUnlink; } };
diff --git a/third_party/WebKit/Source/core/editing/commands/WrapContentsInDummySpanCommand.cpp b/third_party/WebKit/Source/core/editing/commands/WrapContentsInDummySpanCommand.cpp index 0666f234..bf3b4a0 100644 --- a/third_party/WebKit/Source/core/editing/commands/WrapContentsInDummySpanCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/WrapContentsInDummySpanCommand.cpp
@@ -49,7 +49,7 @@ m_element->appendChild(m_dummySpan.get(), IGNORE_EXCEPTION); } -void WrapContentsInDummySpanCommand::doApply() +void WrapContentsInDummySpanCommand::doApply(EditingState*) { m_dummySpan = HTMLSpanElement::create(document());
diff --git a/third_party/WebKit/Source/core/editing/commands/WrapContentsInDummySpanCommand.h b/third_party/WebKit/Source/core/editing/commands/WrapContentsInDummySpanCommand.h index b9283bec..eb38e28 100644 --- a/third_party/WebKit/Source/core/editing/commands/WrapContentsInDummySpanCommand.h +++ b/third_party/WebKit/Source/core/editing/commands/WrapContentsInDummySpanCommand.h
@@ -44,7 +44,7 @@ private: explicit WrapContentsInDummySpanCommand(PassRefPtrWillBeRawPtr<Element>); - void doApply() override; + void doApply(EditingState*) override; void doUnapply() override; void doReapply() override; void executeApply();
diff --git a/third_party/WebKit/Source/core/editing/spellcheck/SpellChecker.cpp b/third_party/WebKit/Source/core/editing/spellcheck/SpellChecker.cpp index 4dac0578..63ef51d 100644 --- a/third_party/WebKit/Source/core/editing/spellcheck/SpellChecker.cpp +++ b/third_party/WebKit/Source/core/editing/spellcheck/SpellChecker.cpp
@@ -208,8 +208,8 @@ // next word so we start checking at a word boundary. Going back by one char // and then forward by a word does the trick. if (startedWithSelection) { - VisiblePosition oneBeforeStart = previousPositionOf(createVisiblePosition(spellingSearchStart)); - if (oneBeforeStart.isNotNull()) + VisiblePosition oneBeforeStart = previousPositionOf(createVisiblePosition(spellingSearchStart)); + if (oneBeforeStart.isNotNull() && rootEditableElementOf(oneBeforeStart) == rootEditableElementOf(spellingSearchStart)) spellingSearchStart = endOfWord(oneBeforeStart).toParentAnchoredPosition(); // else we were already at the start of the editable node }
diff --git a/third_party/WebKit/Source/core/editing/spellcheck/SpellCheckerTest.cpp b/third_party/WebKit/Source/core/editing/spellcheck/SpellCheckerTest.cpp new file mode 100644 index 0000000..83cfbc7 --- /dev/null +++ b/third_party/WebKit/Source/core/editing/spellcheck/SpellCheckerTest.cpp
@@ -0,0 +1,28 @@ +// Copyright 2016 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 "core/editing/spellcheck/SpellChecker.h" + +#include "core/editing/EditingTestBase.h" +#include "core/editing/Editor.h" +#include "core/frame/Settings.h" + +namespace blink { + +class SpellCheckerTest : public EditingTestBase { +}; + +TEST_F(SpellCheckerTest, AdvanceToNextMisspellingWithEmptyInputNoCrash) +{ + setBodyContent("<input placeholder='placeholder'>abc"); + updateLayoutAndStyleForPainting(); + RefPtrWillBeRawPtr<Element> input = document().querySelector("input", ASSERT_NO_EXCEPTION); + input->focus(); + document().settings()->setUnifiedTextCheckerEnabled(true); + // Do not crash in AdvanceToNextMisspelling command. + EXPECT_TRUE(document().frame()->editor().executeCommand("AdvanceToNextMisspelling")); + document().settings()->setUnifiedTextCheckerEnabled(false); +} + +} // namespace blink
diff --git a/third_party/WebKit/Source/core/events/EventDispatcher.cpp b/third_party/WebKit/Source/core/events/EventDispatcher.cpp index f6ad638..7a015828 100644 --- a/third_party/WebKit/Source/core/events/EventDispatcher.cpp +++ b/third_party/WebKit/Source/core/events/EventDispatcher.cpp
@@ -202,9 +202,16 @@ // Pass the data from the preDispatchEventHandler to the postDispatchEventHandler. m_node->postDispatchEventHandler(m_event.get(), preDispatchEventHandlerResult); + bool isClick = m_event->isMouseEvent() && toMouseEvent(*m_event).type() == EventTypeNames::click; + if (isClick) { + // Fire an accessibility event indicating a node was clicked on. This is safe if m_event->target()->toNode() returns null. + if (AXObjectCache* cache = m_node->document().existingAXObjectCache()) + cache->handleClicked(m_event->target()->toNode()); + } + // The DOM Events spec says that events dispatched by JS (other than "click") // should not have their default handlers invoked. - bool isTrustedOrClick = !RuntimeEnabledFeatures::trustedEventsDefaultActionEnabled() || m_event->isTrusted() || (m_event->isMouseEvent() && toMouseEvent(*m_event).type() == EventTypeNames::click); + bool isTrustedOrClick = !RuntimeEnabledFeatures::trustedEventsDefaultActionEnabled() || m_event->isTrusted() || isClick; // Call default event handlers. While the DOM does have a concept of preventing // default handling, the detail of which handlers are called is an internal
diff --git a/third_party/WebKit/Source/core/events/EventPath.cpp b/third_party/WebKit/Source/core/events/EventPath.cpp index d15ebb26..66442994 100644 --- a/third_party/WebKit/Source/core/events/EventPath.cpp +++ b/third_party/WebKit/Source/core/events/EventPath.cpp
@@ -157,7 +157,7 @@ void EventPath::calculateTreeOrderAndSetNearestAncestorClosedTree() { // Precondition: - // - TreeScopes in m_treeScopeEventContexts must be *connected* in the same tree of trees. + // - TreeScopes in m_treeScopeEventContexts must be *connected* in the same composed tree. // - The root tree must be included. WillBeHeapHashMap<RawPtrWillBeMember<const TreeScope>, RawPtrWillBeMember<TreeScopeEventContext>> treeScopeEventContextMap; for (const auto& treeScopeEventContext : m_treeScopeEventContexts)
diff --git a/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.cpp b/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.cpp index 2151f9e..29a0bfc03 100644 --- a/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.cpp +++ b/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.cpp
@@ -37,16 +37,16 @@ namespace blink { -ResourcePtr<CSSStyleSheetResource> CSSStyleSheetResource::fetch(FetchRequest& request, ResourceFetcher* fetcher) +PassRefPtrWillBeRawPtr<CSSStyleSheetResource> CSSStyleSheetResource::fetch(FetchRequest& request, ResourceFetcher* fetcher) { ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone); request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestContextStyle); return toCSSStyleSheetResource(fetcher->requestResource(request, CSSStyleSheetResourceFactory())); } -ResourcePtr<CSSStyleSheetResource> CSSStyleSheetResource::createForTest(const ResourceRequest& request, const String& charset) +PassRefPtrWillBeRawPtr<CSSStyleSheetResource> CSSStyleSheetResource::createForTest(const ResourceRequest& request, const String& charset) { - return new CSSStyleSheetResource(request, charset); + return adoptRefWillBeNoop(new CSSStyleSheetResource(request, charset)); } CSSStyleSheetResource::CSSStyleSheetResource(const ResourceRequest& resourceRequest, const String& charset) @@ -65,11 +65,12 @@ ASSERT(!m_parsedStyleSheetCache); } -void CSSStyleSheetResource::dispose() +void CSSStyleSheetResource::removedFromMemoryCache() { if (m_parsedStyleSheetCache) m_parsedStyleSheetCache->removedFromMemoryCache(); m_parsedStyleSheetCache.clear(); + Resource::removedFromMemoryCache(); } DEFINE_TRACE(CSSStyleSheetResource)
diff --git a/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.h b/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.h index b462afd..8f6d75e1 100644 --- a/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.h +++ b/third_party/WebKit/Source/core/fetch/CSSStyleSheetResource.h
@@ -27,7 +27,6 @@ #define CSSStyleSheetResource_h #include "core/CoreExport.h" -#include "core/fetch/ResourcePtr.h" #include "core/fetch/StyleSheetResource.h" #include "platform/heap/Handle.h" @@ -43,8 +42,8 @@ public: enum class MIMETypeCheck { Strict, Lax }; - static ResourcePtr<CSSStyleSheetResource> fetch(FetchRequest&, ResourceFetcher*); - static ResourcePtr<CSSStyleSheetResource> createForTest(const ResourceRequest&, const String& charset); + static PassRefPtrWillBeRawPtr<CSSStyleSheetResource> fetch(FetchRequest&, ResourceFetcher*); + static PassRefPtrWillBeRawPtr<CSSStyleSheetResource> createForTest(const ResourceRequest&, const String& charset); ~CSSStyleSheetResource() override; DECLARE_VIRTUAL_TRACE(); @@ -69,15 +68,15 @@ CSSStyleSheetResourceFactory() : ResourceFactory(Resource::CSSStyleSheet) { } - Resource* create(const ResourceRequest& request, const String& charset) const override + PassRefPtrWillBeRawPtr<Resource> create(const ResourceRequest& request, const String& charset) const override { - return new CSSStyleSheetResource(request, charset); + return adoptRefWillBeNoop(new CSSStyleSheetResource(request, charset)); } }; CSSStyleSheetResource(const ResourceRequest&, const String& charset); bool canUseSheet(MIMETypeCheck) const; - void dispose() override; + void removedFromMemoryCache() override; void checkNotify() override; String m_decodedSheetText;
diff --git a/third_party/WebKit/Source/core/fetch/CachingCorrectnessTest.cpp b/third_party/WebKit/Source/core/fetch/CachingCorrectnessTest.cpp index d90176ed..5cdd7399 100644 --- a/third_party/WebKit/Source/core/fetch/CachingCorrectnessTest.cpp +++ b/third_party/WebKit/Source/core/fetch/CachingCorrectnessTest.cpp
@@ -34,7 +34,6 @@ #include "core/fetch/RawResource.h" #include "core/fetch/Resource.h" #include "core/fetch/ResourceFetcher.h" -#include "core/fetch/ResourcePtr.h" #include "platform/network/ResourceRequest.h" #include "platform/testing/TestingPlatformSupport.h" #include "public/platform/Platform.h" @@ -77,17 +76,17 @@ m_proxyPlatform.advanceClock(seconds); } - ResourcePtr<Resource> resourceFromResourceResponse(ResourceResponse response, Resource::Type type = Resource::Raw) + PassRefPtrWillBeRawPtr<Resource> resourceFromResourceResponse(ResourceResponse response, Resource::Type type = Resource::Raw) { if (response.url().isNull()) response.setURL(KURL(ParsedURLString, kResourceURL)); - ResourcePtr<Resource> resource; + RefPtrWillBeRawPtr<Resource> resource = nullptr; switch (type) { case Resource::Raw: - resource = new Resource(ResourceRequest(response.url()), type); + resource = Resource::create(ResourceRequest(response.url()), type); break; case Resource::Image: - resource = new ImageResource(ResourceRequest(response.url()), nullptr); + resource = ImageResource::create(ResourceRequest(response.url()), nullptr); break; default: EXPECT_TRUE(false) << "'Unreachable' code was reached"; @@ -99,25 +98,25 @@ return resource; } - ResourcePtr<Resource> resourceFromResourceRequest(ResourceRequest request, Resource::Type type = Resource::Raw) + PassRefPtrWillBeRawPtr<Resource> resourceFromResourceRequest(ResourceRequest request, Resource::Type type = Resource::Raw) { if (request.url().isNull()) request.setURL(KURL(ParsedURLString, kResourceURL)); - ResourcePtr<Resource> resource = - new Resource(request, type); + RefPtrWillBeRawPtr<Resource> resource = + Resource::create(request, type); resource->setResponse(ResourceResponse(KURL(ParsedURLString, kResourceURL), "text/html", 0, nullAtom, String())); memoryCache()->add(resource.get()); return resource; } - ResourcePtr<Resource> fetch() + PassRefPtrWillBeRawPtr<Resource> fetch() { FetchRequest fetchRequest(ResourceRequest(KURL(ParsedURLString, kResourceURL)), FetchInitiatorInfo()); return RawResource::fetchSynchronously(fetchRequest, fetcher()); } - ResourcePtr<Resource> fetchImage() + PassRefPtrWillBeRawPtr<Resource> fetchImage() { FetchRequest fetchRequest(ResourceRequest(KURL(ParsedURLString, kResourceURL)), FetchInitiatorInfo()); return ImageResource::fetch(fetchRequest, fetcher()); @@ -175,12 +174,12 @@ fresh200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); fresh200Response.setHTTPHeaderField("Last-Modified", kOneDayBeforeOriginalRequest); - ResourcePtr<Resource> fresh200 = resourceFromResourceResponse(fresh200Response); + RefPtrWillBeRawPtr<Resource> fresh200 = resourceFromResourceResponse(fresh200Response); // Advance the clock within the implicit freshness period of this resource before we make a request. advanceClock(600.); - ResourcePtr<Resource> fetched = fetch(); + RefPtrWillBeRawPtr<Resource> fetched = fetch(); EXPECT_EQ(fresh200, fetched); } @@ -191,12 +190,12 @@ fresh200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); fresh200Response.setHTTPHeaderField("Expires", kOneDayAfterOriginalRequest); - ResourcePtr<Resource> fresh200 = resourceFromResourceResponse(fresh200Response); + RefPtrWillBeRawPtr<Resource> fresh200 = resourceFromResourceResponse(fresh200Response); // Advance the clock within the freshness period of this resource before we make a request. advanceClock(24. * 60. * 60. - 15.); - ResourcePtr<Resource> fetched = fetch(); + RefPtrWillBeRawPtr<Resource> fetched = fetch(); EXPECT_EQ(fresh200, fetched); } @@ -207,12 +206,12 @@ fresh200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); fresh200Response.setHTTPHeaderField("Cache-Control", "max-age=600"); - ResourcePtr<Resource> fresh200 = resourceFromResourceResponse(fresh200Response); + RefPtrWillBeRawPtr<Resource> fresh200 = resourceFromResourceResponse(fresh200Response); // Advance the clock within the freshness period of this resource before we make a request. advanceClock(500.); - ResourcePtr<Resource> fetched = fetch(); + RefPtrWillBeRawPtr<Resource> fetched = fetch(); EXPECT_EQ(fresh200, fetched); } @@ -224,12 +223,12 @@ expired200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); expired200Response.setHTTPHeaderField("Last-Modified", kOneDayBeforeOriginalRequest); - ResourcePtr<Resource> expired200 = resourceFromResourceResponse(expired200Response); + RefPtrWillBeRawPtr<Resource> expired200 = resourceFromResourceResponse(expired200Response); // Advance the clock beyond the implicit freshness period. advanceClock(24. * 60. * 60. * 0.2); - ResourcePtr<Resource> fetched = fetch(); + RefPtrWillBeRawPtr<Resource> fetched = fetch(); EXPECT_NE(expired200, fetched); } @@ -240,12 +239,12 @@ expired200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); expired200Response.setHTTPHeaderField("Expires", kOneDayAfterOriginalRequest); - ResourcePtr<Resource> expired200 = resourceFromResourceResponse(expired200Response); + RefPtrWillBeRawPtr<Resource> expired200 = resourceFromResourceResponse(expired200Response); // Advance the clock within the expiredness period of this resource before we make a request. advanceClock(24. * 60. * 60. + 15.); - ResourcePtr<Resource> fetched = fetch(); + RefPtrWillBeRawPtr<Resource> fetched = fetch(); EXPECT_NE(expired200, fetched); } @@ -257,12 +256,12 @@ expired200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); expired200Response.setHTTPHeaderField("Expires", kOneDayAfterOriginalRequest); - ResourcePtr<Resource> expired200 = resourceFromResourceResponse(expired200Response, Resource::Image); + RefPtrWillBeRawPtr<Resource> expired200 = resourceFromResourceResponse(expired200Response, Resource::Image); // Advance the clock within the expiredness period of this resource before we make a request. advanceClock(24. * 60. * 60. + 15.); - ResourcePtr<Resource> fetched = fetchImage(); + RefPtrWillBeRawPtr<Resource> fetched = fetchImage(); EXPECT_NE(expired200, fetched); } @@ -275,17 +274,17 @@ expired200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); expired200Response.setHTTPHeaderField("Expires", kOneDayAfterOriginalRequest); - ResourcePtr<Resource> expired200 = resourceFromResourceResponse(expired200Response, Resource::Image); + RefPtrWillBeRawPtr<Resource> expired200 = resourceFromResourceResponse(expired200Response, Resource::Image); // Advance the clock within the freshness period, and make a request to add this image to the document resources. advanceClock(15.); - ResourcePtr<Resource> firstFetched = fetchImage(); + RefPtrWillBeRawPtr<Resource> firstFetched = fetchImage(); EXPECT_EQ(expired200, firstFetched); // Advance the clock within the expiredness period of this resource before we make a request. advanceClock(24. * 60. * 60. + 15.); - ResourcePtr<Resource> fetched = fetchImage(); + RefPtrWillBeRawPtr<Resource> fetched = fetchImage(); EXPECT_EQ(expired200, fetched); } @@ -296,12 +295,12 @@ expired200Response.setHTTPHeaderField("Date", kOriginalRequestDateAsString); expired200Response.setHTTPHeaderField("Cache-Control", "max-age=600"); - ResourcePtr<Resource> expired200 = resourceFromResourceResponse(expired200Response); + RefPtrWillBeRawPtr<Resource> expired200 = resourceFromResourceResponse(expired200Response); // Advance the clock within the expiredness period of this resource before we make a request. advanceClock(700.); - ResourcePtr<Resource> fetched = fetch(); + RefPtrWillBeRawPtr<Resource> fetched = fetch(); EXPECT_NE(expired200, fetched); } @@ -313,12 +312,12 @@ fresh200NocacheResponse.setHTTPHeaderField(HTTPNames::Expires, kOneDayAfterOriginalRequest); fresh200NocacheResponse.setHTTPHeaderField(HTTPNames::Cache_Control, "no-cache"); - ResourcePtr<Resource> fresh200Nocache = resourceFromResourceResponse(fresh200NocacheResponse); + RefPtrWillBeRawPtr<Resource> fresh200Nocache = resourceFromResourceResponse(fresh200NocacheResponse); // Advance the clock within the freshness period of this resource before we make a request. advanceClock(24. * 60. * 60. - 15.); - ResourcePtr<Resource> fetched = fetch(); + RefPtrWillBeRawPtr<Resource> fetched = fetch(); EXPECT_NE(fresh200Nocache, fetched); } @@ -326,8 +325,8 @@ { ResourceRequest noCacheRequest; noCacheRequest.setHTTPHeaderField(HTTPNames::Cache_Control, "no-cache"); - ResourcePtr<Resource> noCacheResource = resourceFromResourceRequest(noCacheRequest); - ResourcePtr<Resource> fetched = fetch(); + RefPtrWillBeRawPtr<Resource> noCacheResource = resourceFromResourceRequest(noCacheRequest); + RefPtrWillBeRawPtr<Resource> fetched = fetch(); EXPECT_NE(noCacheResource, fetched); } @@ -339,12 +338,12 @@ fresh200NostoreResponse.setHTTPHeaderField(HTTPNames::Expires, kOneDayAfterOriginalRequest); fresh200NostoreResponse.setHTTPHeaderField(HTTPNames::Cache_Control, "no-store"); - ResourcePtr<Resource> fresh200Nostore = resourceFromResourceResponse(fresh200NostoreResponse); + RefPtrWillBeRawPtr<Resource> fresh200Nostore = resourceFromResourceResponse(fresh200NostoreResponse); // Advance the clock within the freshness period of this resource before we make a request. advanceClock(24. * 60. * 60. - 15.); - ResourcePtr<Resource> fetched = fetch(); + RefPtrWillBeRawPtr<Resource> fetched = fetch(); EXPECT_NE(fresh200Nostore, fetched); } @@ -352,8 +351,8 @@ { ResourceRequest noStoreRequest; noStoreRequest.setHTTPHeaderField(HTTPNames::Cache_Control, "no-store"); - ResourcePtr<Resource> noStoreResource = resourceFromResourceRequest(noStoreRequest); - ResourcePtr<Resource> fetched = fetch(); + RefPtrWillBeRawPtr<Resource> noStoreResource = resourceFromResourceRequest(noStoreRequest); + RefPtrWillBeRawPtr<Resource> fetched = fetch(); EXPECT_NE(noStoreResource, fetched); } @@ -367,12 +366,12 @@ fresh200MustRevalidateResponse.setHTTPHeaderField(HTTPNames::Expires, kOneDayAfterOriginalRequest); fresh200MustRevalidateResponse.setHTTPHeaderField(HTTPNames::Cache_Control, "must-revalidate"); - ResourcePtr<Resource> fresh200MustRevalidate = resourceFromResourceResponse(fresh200MustRevalidateResponse); + RefPtrWillBeRawPtr<Resource> fresh200MustRevalidate = resourceFromResourceResponse(fresh200MustRevalidateResponse); // Advance the clock within the freshness period of this resource before we make a request. advanceClock(24. * 60. * 60. - 15.); - ResourcePtr<Resource> fetched = fetch(); + RefPtrWillBeRawPtr<Resource> fetched = fetch(); EXPECT_NE(fresh200MustRevalidate, fetched); } @@ -382,7 +381,7 @@ const char redirectTargetUrlString[] = "http://redirect-target.com"; KURL redirectTargetUrl(ParsedURLString, redirectTargetUrlString); - ResourcePtr<Resource> firstResource = new Resource(ResourceRequest(redirectUrl), Resource::Raw); + RefPtrWillBeRawPtr<Resource> firstResource = Resource::create(ResourceRequest(redirectUrl), Resource::Raw); ResourceResponse fresh301Response; fresh301Response.setURL(redirectUrl); @@ -407,7 +406,7 @@ advanceClock(500.); - ResourcePtr<Resource> fetched = fetch(); + RefPtrWillBeRawPtr<Resource> fetched = fetch(); EXPECT_EQ(firstResource, fetched); } @@ -417,7 +416,7 @@ const char redirectTargetUrlString[] = "http://redirect-target.com"; KURL redirectTargetUrl(ParsedURLString, redirectTargetUrlString); - ResourcePtr<Resource> firstResource = new Resource(ResourceRequest(redirectUrl), Resource::Raw); + RefPtrWillBeRawPtr<Resource> firstResource = Resource::create(ResourceRequest(redirectUrl), Resource::Raw); ResourceResponse stale301Response; stale301Response.setURL(redirectUrl); @@ -441,7 +440,7 @@ advanceClock(500.); - ResourcePtr<Resource> fetched = fetch(); + RefPtrWillBeRawPtr<Resource> fetched = fetch(); EXPECT_NE(firstResource, fetched); } @@ -449,14 +448,14 @@ { ResourceRequest request1(KURL(ParsedURLString, kResourceURL)); request1.setHTTPMethod(HTTPNames::POST); - ResourcePtr<Resource> resource1 = new Resource(ResourceRequest(request1.url()), Resource::Raw); + RefPtrWillBeRawPtr<Resource> resource1 = Resource::create(ResourceRequest(request1.url()), Resource::Raw); resource1->setLoading(true); memoryCache()->add(resource1.get()); ResourceRequest request2(KURL(ParsedURLString, kResourceURL)); request2.setHTTPMethod(HTTPNames::POST); FetchRequest fetch2(request2, FetchInitiatorInfo()); - ResourcePtr<Resource> resource2 = RawResource::fetchSynchronously(fetch2, fetcher()); + RefPtrWillBeRawPtr<Resource> resource2 = RawResource::fetchSynchronously(fetch2, fetcher()); EXPECT_EQ(resource2, memoryCache()->resourceForURL(request2.url())); EXPECT_NE(resource1, resource2); @@ -468,7 +467,7 @@ const char redirectTargetUrlString[] = "http://redirect-target.com"; KURL redirectTargetUrl(ParsedURLString, redirectTargetUrlString); - ResourcePtr<Resource> firstResource = new Resource(ResourceRequest(redirectUrl), Resource::Raw); + RefPtrWillBeRawPtr<Resource> firstResource = Resource::create(ResourceRequest(redirectUrl), Resource::Raw); ResourceResponse fresh302Response; fresh302Response.setURL(redirectUrl); @@ -493,7 +492,7 @@ advanceClock(500.); - ResourcePtr<Resource> fetched = fetch(); + RefPtrWillBeRawPtr<Resource> fetched = fetch(); EXPECT_NE(firstResource, fetched); } @@ -503,7 +502,7 @@ const char redirectTargetUrlString[] = "http://redirect-target.com"; KURL redirectTargetUrl(ParsedURLString, redirectTargetUrlString); - ResourcePtr<Resource> firstResource = new Resource(ResourceRequest(redirectUrl), Resource::Raw); + RefPtrWillBeRawPtr<Resource> firstResource = Resource::create(ResourceRequest(redirectUrl), Resource::Raw); ResourceResponse fresh302Response; fresh302Response.setURL(redirectUrl); @@ -528,7 +527,7 @@ advanceClock(500.); - ResourcePtr<Resource> fetched = fetch(); + RefPtrWillBeRawPtr<Resource> fetched = fetch(); EXPECT_EQ(firstResource, fetched); } @@ -538,7 +537,7 @@ const char redirectTargetUrlString[] = "http://redirect-target.com"; KURL redirectTargetUrl(ParsedURLString, redirectTargetUrlString); - ResourcePtr<Resource> firstResource = new Resource(ResourceRequest(redirectUrl), Resource::Raw); + RefPtrWillBeRawPtr<Resource> firstResource = Resource::create(ResourceRequest(redirectUrl), Resource::Raw); ResourceResponse fresh302Response; fresh302Response.setURL(redirectUrl); @@ -563,7 +562,7 @@ advanceClock(500.); - ResourcePtr<Resource> fetched = fetch(); + RefPtrWillBeRawPtr<Resource> fetched = fetch(); EXPECT_EQ(firstResource, fetched); }
diff --git a/third_party/WebKit/Source/core/fetch/DocumentResource.cpp b/third_party/WebKit/Source/core/fetch/DocumentResource.cpp index 5396803..aab75f7 100644 --- a/third_party/WebKit/Source/core/fetch/DocumentResource.cpp +++ b/third_party/WebKit/Source/core/fetch/DocumentResource.cpp
@@ -30,7 +30,7 @@ namespace blink { -ResourcePtr<DocumentResource> DocumentResource::fetchSVGDocument(FetchRequest& request, ResourceFetcher* fetcher) +PassRefPtrWillBeRawPtr<DocumentResource> DocumentResource::fetchSVGDocument(FetchRequest& request, ResourceFetcher* fetcher) { ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone); request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestContextImage);
diff --git a/third_party/WebKit/Source/core/fetch/DocumentResource.h b/third_party/WebKit/Source/core/fetch/DocumentResource.h index 326e2a5..fbbf7e54 100644 --- a/third_party/WebKit/Source/core/fetch/DocumentResource.h +++ b/third_party/WebKit/Source/core/fetch/DocumentResource.h
@@ -25,7 +25,6 @@ #include "core/fetch/Resource.h" #include "core/fetch/ResourceClient.h" -#include "core/fetch/ResourcePtr.h" #include "core/html/parser/TextResourceDecoder.h" namespace blink { @@ -38,7 +37,7 @@ public: using ClientType = ResourceClient; - static ResourcePtr<DocumentResource> fetchSVGDocument(FetchRequest&, ResourceFetcher*); + static PassRefPtrWillBeRawPtr<DocumentResource> fetchSVGDocument(FetchRequest&, ResourceFetcher*); ~DocumentResource() override; DECLARE_VIRTUAL_TRACE(); @@ -54,9 +53,9 @@ SVGDocumentResourceFactory() : ResourceFactory(Resource::SVGDocument) { } - Resource* create(const ResourceRequest& request, const String& charset) const override + PassRefPtrWillBeRawPtr<Resource> create(const ResourceRequest& request, const String& charset) const override { - return new DocumentResource(request, Resource::SVGDocument); + return adoptRefWillBeNoop(new DocumentResource(request, Resource::SVGDocument)); } }; DocumentResource(const ResourceRequest&, Type); @@ -68,7 +67,7 @@ }; DEFINE_TYPE_CASTS(DocumentResource, Resource, resource, resource->type() == Resource::SVGDocument, resource.type() == Resource::SVGDocument); \ -inline DocumentResource* toDocumentResource(const ResourcePtr<Resource>& ptr) { return toDocumentResource(ptr.get()); } +inline DocumentResource* toDocumentResource(const RefPtrWillBeRawPtr<Resource>& ptr) { return toDocumentResource(ptr.get()); } class DocumentResourceClient : public ResourceClient { public:
diff --git a/third_party/WebKit/Source/core/fetch/DocumentResourceReference.h b/third_party/WebKit/Source/core/fetch/DocumentResourceReference.h index 56f7280d..fff7f74 100644 --- a/third_party/WebKit/Source/core/fetch/DocumentResourceReference.h +++ b/third_party/WebKit/Source/core/fetch/DocumentResourceReference.h
@@ -27,7 +27,6 @@ #define DocumentResourceReference_h #include "core/fetch/DocumentResource.h" -#include "core/fetch/ResourcePtr.h" namespace blink { @@ -39,7 +38,7 @@ DocumentResource* document() { return m_document.get(); } private: String debugName() const override { return "DocumentResourceReference"; } - ResourcePtr<DocumentResource> m_document; + RefPtrWillBePersistent<DocumentResource> m_document; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/fetch/FontResource.cpp b/third_party/WebKit/Source/core/fetch/FontResource.cpp index 7bc502e..f349b91e 100644 --- a/third_party/WebKit/Source/core/fetch/FontResource.cpp +++ b/third_party/WebKit/Source/core/fetch/FontResource.cpp
@@ -70,7 +70,7 @@ packageFormatHistogram.count(format); } -ResourcePtr<FontResource> FontResource::fetch(FetchRequest& request, ResourceFetcher* fetcher) +PassRefPtrWillBeRawPtr<FontResource> FontResource::fetch(FetchRequest& request, ResourceFetcher* fetcher) { ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone); request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestContextFont);
diff --git a/third_party/WebKit/Source/core/fetch/FontResource.h b/third_party/WebKit/Source/core/fetch/FontResource.h index 7586499..3bda896 100644 --- a/third_party/WebKit/Source/core/fetch/FontResource.h +++ b/third_party/WebKit/Source/core/fetch/FontResource.h
@@ -26,8 +26,8 @@ #ifndef FontResource_h #define FontResource_h +#include "core/fetch/Resource.h" #include "core/fetch/ResourceClient.h" -#include "core/fetch/ResourcePtr.h" #include "platform/Timer.h" #include "platform/fonts/FontOrientation.h" #include "wtf/OwnPtr.h" @@ -38,12 +38,13 @@ class ResourceFetcher; class FontPlatformData; class FontCustomPlatformData; +class FontResourceClient; class FontResource final : public Resource { public: - using ClientType = ResourceClient; + using ClientType = FontResourceClient; - static ResourcePtr<FontResource> fetch(FetchRequest&, ResourceFetcher*); + static PassRefPtrWillBeRawPtr<FontResource> fetch(FetchRequest&, ResourceFetcher*); ~FontResource() override; void load(ResourceFetcher*, const ResourceLoaderOptions&) override; @@ -74,9 +75,9 @@ FontResourceFactory() : ResourceFactory(Resource::Font) { } - Resource* create(const ResourceRequest& request, const String& charset) const override + PassRefPtrWillBeRawPtr<Resource> create(const ResourceRequest& request, const String& charset) const override { - return new FontResource(request); + return adoptRefWillBeNoop(new FontResource(request)); } }; FontResource(const ResourceRequest&);
diff --git a/third_party/WebKit/Source/core/fetch/ImageResource.cpp b/third_party/WebKit/Source/core/fetch/ImageResource.cpp index 68bdada..bc2c593 100644 --- a/third_party/WebKit/Source/core/fetch/ImageResource.cpp +++ b/third_party/WebKit/Source/core/fetch/ImageResource.cpp
@@ -41,7 +41,7 @@ namespace blink { -ResourcePtr<ImageResource> ImageResource::fetch(FetchRequest& request, ResourceFetcher* fetcher) +PassRefPtrWillBeRawPtr<ImageResource> ImageResource::fetch(FetchRequest& request, ResourceFetcher* fetcher) { if (request.resourceRequest().requestContext() == WebURLRequest::RequestContextUnspecified) request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestContextImage); @@ -49,7 +49,7 @@ KURL requestURL = request.resourceRequest().url(); if (requestURL.isValid() && fetcher->context().canRequest(Resource::Image, request.resourceRequest(), requestURL, request.options(), request.forPreload(), request.originRestriction())) fetcher->context().sendImagePing(requestURL); - return 0; + return nullptr; } if (fetcher->clientDefersImage(request.resourceRequest().url()))
diff --git a/third_party/WebKit/Source/core/fetch/ImageResource.h b/third_party/WebKit/Source/core/fetch/ImageResource.h index 3079282..666029f5 100644 --- a/third_party/WebKit/Source/core/fetch/ImageResource.h +++ b/third_party/WebKit/Source/core/fetch/ImageResource.h
@@ -24,7 +24,7 @@ #define ImageResource_h #include "core/CoreExport.h" -#include "core/fetch/ResourcePtr.h" +#include "core/fetch/Resource.h" #include "platform/geometry/IntRect.h" #include "platform/geometry/IntSizeHash.h" #include "platform/geometry/LayoutSize.h" @@ -48,11 +48,20 @@ public: using ClientType = ImageResourceClient; - static ResourcePtr<ImageResource> fetch(FetchRequest&, ResourceFetcher*); + static PassRefPtrWillBeRawPtr<ImageResource> fetch(FetchRequest&, ResourceFetcher*); - ImageResource(blink::Image*); + static PassRefPtrWillBeRawPtr<ImageResource> create(blink::Image* image) + { + return adoptRefWillBeNoop(new ImageResource(image)); + } + // Exposed for testing - ImageResource(const ResourceRequest&, blink::Image*); + static PassRefPtrWillBeRawPtr<ImageResource> create(const ResourceRequest& request, blink::Image* image) + { + return adoptRefWillBeNoop(new ImageResource(request, image)); + } + + ~ImageResource() override; void load(ResourceFetcher*, const ResourceLoaderOptions&) override; @@ -118,14 +127,17 @@ void destroyDecodedDataForFailedRevalidation() override; private: + explicit ImageResource(blink::Image*); + ImageResource(const ResourceRequest&, blink::Image*); + class ImageResourceFactory : public ResourceFactory { public: ImageResourceFactory() : ResourceFactory(Resource::Image) { } - Resource* create(const ResourceRequest& request, const String&) const override + PassRefPtrWillBeRawPtr<Resource> create(const ResourceRequest& request, const String&) const override { - return new ImageResource(request); + return adoptRefWillBeNoop(new ImageResource(request)); } }; ImageResource(const ResourceRequest&);
diff --git a/third_party/WebKit/Source/core/fetch/ImageResourceTest.cpp b/third_party/WebKit/Source/core/fetch/ImageResourceTest.cpp index 4dc720e..f17cfc6 100644 --- a/third_party/WebKit/Source/core/fetch/ImageResourceTest.cpp +++ b/third_party/WebKit/Source/core/fetch/ImageResourceTest.cpp
@@ -35,7 +35,6 @@ #include "core/fetch/MockImageResourceClient.h" #include "core/fetch/ResourceFetcher.h" #include "core/fetch/ResourceLoader.h" -#include "core/fetch/ResourcePtr.h" #include "core/fetch/UniqueIdentifier.h" #include "platform/SharedBuffer.h" #include "platform/exported/WrappedResourceResponse.h" @@ -89,7 +88,7 @@ URLTestHelpers::registerMockedURLLoad(testURL, "cancelTest.html", "text/html"); // Emulate starting a real load, but don't expect any "real" WebURLLoaderClient callbacks. - ResourcePtr<ImageResource> cachedImage = new ImageResource(ResourceRequest(testURL), nullptr); + RefPtrWillBeRawPtr<ImageResource> cachedImage = ImageResource::create(ResourceRequest(testURL), nullptr); cachedImage->setIdentifier(createUniqueIdentifier()); cachedImage->load(fetcher, ResourceLoaderOptions()); Platform::current()->unitTestSupport()->unregisterMockedURL(testURL); @@ -145,7 +144,7 @@ ResourceFetcher* fetcher = ResourceFetcher::create(nullptr); // Emulate starting a real load. - ResourcePtr<ImageResource> cachedImage = new ImageResource(ResourceRequest(testURL), nullptr); + RefPtrWillBeRawPtr<ImageResource> cachedImage = ImageResource::create(ResourceRequest(testURL), nullptr); cachedImage->setIdentifier(createUniqueIdentifier()); cachedImage->load(fetcher, ResourceLoaderOptions()); @@ -169,7 +168,7 @@ TEST(ImageResourceTest, DecodedDataRemainsWhileHasClients) { - ResourcePtr<ImageResource> cachedImage = new ImageResource(ResourceRequest(), nullptr); + RefPtrWillBeRawPtr<ImageResource> cachedImage = ImageResource::create(ResourceRequest(), nullptr); cachedImage->setLoading(true); MockImageResourceClient client(cachedImage); @@ -202,7 +201,7 @@ TEST(ImageResourceTest, UpdateBitmapImages) { - ResourcePtr<ImageResource> cachedImage = new ImageResource(ResourceRequest(), nullptr); + RefPtrWillBeRawPtr<ImageResource> cachedImage = ImageResource::create(ResourceRequest(), nullptr); cachedImage->setLoading(true); MockImageResourceClient client(cachedImage); @@ -224,7 +223,7 @@ { KURL testURL(ParsedURLString, "http://www.test.com/cancelTest.html"); URLTestHelpers::registerMockedURLLoad(testURL, "cancelTest.html", "text/html"); - ResourcePtr<ImageResource> cachedImage = new ImageResource(ResourceRequest(testURL), nullptr); + RefPtrWillBeRawPtr<ImageResource> cachedImage = ImageResource::create(ResourceRequest(testURL), nullptr); cachedImage->setLoading(true); MockImageResourceClient client(cachedImage);
diff --git a/third_party/WebKit/Source/core/fetch/LinkFetchResource.cpp b/third_party/WebKit/Source/core/fetch/LinkFetchResource.cpp index 65653f1..2c92ed8 100644 --- a/third_party/WebKit/Source/core/fetch/LinkFetchResource.cpp +++ b/third_party/WebKit/Source/core/fetch/LinkFetchResource.cpp
@@ -10,7 +10,7 @@ namespace blink { -ResourcePtr<Resource> LinkFetchResource::fetch(Resource::Type type, FetchRequest& request, ResourceFetcher* fetcher) +PassRefPtrWillBeRawPtr<Resource> LinkFetchResource::fetch(Resource::Type type, FetchRequest& request, ResourceFetcher* fetcher) { ASSERT(type == LinkPrefetch); ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone);
diff --git a/third_party/WebKit/Source/core/fetch/LinkFetchResource.h b/third_party/WebKit/Source/core/fetch/LinkFetchResource.h index 654716d..62d7131 100644 --- a/third_party/WebKit/Source/core/fetch/LinkFetchResource.h +++ b/third_party/WebKit/Source/core/fetch/LinkFetchResource.h
@@ -8,7 +8,6 @@ #include "core/fetch/Resource.h" #include "core/fetch/ResourceClient.h" -#include "core/fetch/ResourcePtr.h" namespace blink { @@ -19,7 +18,7 @@ public: using ClientType = ResourceClient; - static ResourcePtr<Resource> fetch(Resource::Type, FetchRequest&, ResourceFetcher*); + static PassRefPtrWillBeRawPtr<Resource> fetch(Resource::Type, FetchRequest&, ResourceFetcher*); ~LinkFetchResource() override; private: @@ -28,9 +27,9 @@ LinkResourceFactory(Resource::Type type) : ResourceFactory(type) { } - Resource* create(const ResourceRequest& request, const String& charset) const override + PassRefPtrWillBeRawPtr<Resource> create(const ResourceRequest& request, const String& charset) const override { - return new LinkFetchResource(request, type()); + return adoptRefWillBeNoop(new LinkFetchResource(request, type())); } }; LinkFetchResource(const ResourceRequest&, Type);
diff --git a/third_party/WebKit/Source/core/fetch/MemoryCache.cpp b/third_party/WebKit/Source/core/fetch/MemoryCache.cpp index cefaf93..6edb7ce 100644 --- a/third_party/WebKit/Source/core/fetch/MemoryCache.cpp +++ b/third_party/WebKit/Source/core/fetch/MemoryCache.cpp
@@ -22,7 +22,6 @@ #include "core/fetch/MemoryCache.h" -#include "core/fetch/ResourcePtr.h" #include "core/fetch/WebCacheMemoryDumpProvider.h" #include "platform/Logging.h" #include "platform/TraceEvent.h" @@ -56,12 +55,6 @@ MemoryCache* replaceMemoryCacheForTesting(MemoryCache* cache) { -#if ENABLE(OILPAN) - // Move m_liveResources content to keep Resource objects alive. - for (const auto& resource : memoryCache()->m_liveResources) - cache->m_liveResources.add(resource); - memoryCache()->m_liveResources.clear(); -#endif memoryCache(); MemoryCache* oldCache = gMemoryCache->release(); *gMemoryCache = cache; @@ -71,6 +64,7 @@ DEFINE_TRACE(MemoryCacheEntry) { + visitor->trace(m_resource); visitor->trace(m_previousInLiveResourcesList); visitor->trace(m_nextInLiveResourcesList); visitor->trace(m_previousInAllResourcesList); @@ -79,6 +73,7 @@ void MemoryCacheEntry::dispose() { + m_resource->removedFromMemoryCache(); m_resource.clear(); } @@ -130,9 +125,6 @@ for (size_t i = 0; i < WTF_ARRAY_LENGTH(m_liveDecodedResources); ++i) visitor->trace(m_liveDecodedResources[i]); visitor->trace(m_resourceMaps); -#if ENABLE(OILPAN) - visitor->trace(m_liveResources); -#endif } KURL MemoryCache::removeFragmentIdentifierIfNeeded(const KURL& originalURL) @@ -207,12 +199,8 @@ if (!entry) return nullptr; Resource* resource = entry->m_resource.get(); - if (resource && !resource->lock()) { - ASSERT(!resource->hasClients()); - bool didEvict = evict(entry); - ASSERT_UNUSED(didEvict, didEvict); + if (resource && !resource->lock()) return nullptr; - } return resource; } @@ -300,24 +288,6 @@ size_t targetSize = static_cast<size_t>(capacity * cTargetPrunePercentage); // Cut by a percentage to avoid immediately pruning again. int size = m_allResources.size(); - - // See if we have any purged resources we can evict. - for (int i = 0; i < size; i++) { - MemoryCacheEntry* current = m_allResources[i].m_tail; - while (current) { - MemoryCacheEntry* previous = current->m_previousInAllResourcesList; - // Main Resources in the cache are only substitue data that was - // precached and should not be evicted. - if (current->m_resource->wasPurged() && current->m_resource->canDelete() - && current->m_resource->type() != Resource::MainResource) { - ASSERT(!current->m_resource->hasClients()); - ASSERT(!current->m_resource->isPreloaded()); - bool wasEvicted = evict(current); - ASSERT_UNUSED(wasEvicted, wasEvicted); - } - current = previous; - } - } if (targetSize && m_deadSize <= targetSize) return; @@ -357,13 +327,8 @@ ASSERT(previous->m_resource); ASSERT(contains(previous->m_resource.get())); } - if (!current->m_resource->hasClients() && !current->m_resource->isPreloaded() - && !current->m_resource->isCacheValidator() && current->m_resource->canDelete() - && current->m_resource->type() != Resource::MainResource) { - // Main Resources in the cache are only substitue data that was - // precached and should not be evicted. - bool wasEvicted = evict(current); - ASSERT_UNUSED(wasEvicted, wasEvicted); + if (!current->m_resource->hasClients() && !current->m_resource->isPreloaded()) { + evict(current); if (targetSize && m_deadSize <= targetSize) return; } @@ -392,12 +357,11 @@ prune(); } -bool MemoryCache::evict(MemoryCacheEntry* entry) +void MemoryCache::evict(MemoryCacheEntry* entry) { ASSERT(WTF::isMainThread()); Resource* resource = entry->m_resource.get(); - bool canDelete = resource->canDelete(); WTF_LOG(ResourceLoading, "Evicting resource %p for '%s' from cache", resource, resource->url().string().latin1().data()); // The resource may have already been removed by someone other than our caller, // who needed a fresh copy for a reload. See <http://bugs.webkit.org/show_bug.cgi?id=12479#c6>. @@ -413,8 +377,6 @@ resources->remove(it); if (entryPtr) entryPtr->dispose(); - - return canDelete; } MemoryCacheEntry* MemoryCache::getEntryForResource(const Resource* resource) const @@ -628,17 +590,15 @@ void MemoryCache::TypeStatistic::addResource(Resource* o) { - bool purged = o->wasPurged(); - bool purgeable = o->isPurgeable() && !purged; + bool purgeable = o->isPurgeable(); size_t pageSize = (o->encodedSize() + o->overheadSize() + 4095) & ~4095; count++; - size += purged ? 0 : o->size(); + size += o->size(); liveSize += o->hasClients() ? o->size() : 0; decodedSize += o->decodedSize(); encodedSize += o->encodedSize(); encodedSizeDuplicatedInDataURLs += o->url().protocolIsData() ? o->encodedSize() : 0; purgeableSize += purgeable ? pageSize : 0; - purgedSize += purged ? pageSize : 0; } MemoryCache::Statistics MemoryCache::getStatistics() @@ -795,22 +755,6 @@ return lruListFor(ex->m_accessCount, x->size()) == lruListFor(ey->m_accessCount, y->size()); } -void MemoryCache::registerLiveResource(Resource& resource) -{ -#if ENABLE(OILPAN) - ASSERT(!m_liveResources.contains(&resource)); - m_liveResources.add(&resource); -#endif -} - -void MemoryCache::unregisterLiveResource(Resource& resource) -{ -#if ENABLE(OILPAN) - ASSERT(m_liveResources.contains(&resource)); - m_liveResources.remove(&resource); -#endif -} - #ifdef MEMORY_CACHE_STATS void MemoryCache::dumpStats(Timer<MemoryCache>*) @@ -837,16 +781,16 @@ void MemoryCache::dumpLRULists(bool includeLive) const { - printf("LRU-SP lists in eviction order (Kilobytes decoded, Kilobytes encoded, Access count, Referenced, isPurgeable, wasPurged):\n"); + printf("LRU-SP lists in eviction order (Kilobytes decoded, Kilobytes encoded, Access count, Referenced, isPurgeable):\n"); int size = m_allResources.size(); for (int i = size - 1; i >= 0; i--) { printf("\n\nList %d: ", i); MemoryCacheEntry* current = m_allResources[i].m_tail; while (current) { - ResourcePtr<Resource> currentResource = current->m_resource; + RefPtrWillBeRawPtr<Resource> currentResource = current->m_resource; if (includeLive || !currentResource->hasClients()) - printf("(%.1fK, %.1fK, %uA, %dR, %d, %d); ", currentResource->decodedSize() / 1024.0f, (currentResource->encodedSize() + currentResource->overheadSize()) / 1024.0f, current->m_accessCount, currentResource->hasClients(), currentResource->isPurgeable(), currentResource->wasPurged()); + printf("(%.1fK, %.1fK, %uA, %dR, %d); ", currentResource->decodedSize() / 1024.0f, (currentResource->encodedSize() + currentResource->overheadSize()) / 1024.0f, current->m_accessCount, currentResource->hasClients(), currentResource->isPurgeable()); current = current->m_previousInAllResourcesList; }
diff --git a/third_party/WebKit/Source/core/fetch/MemoryCache.h b/third_party/WebKit/Source/core/fetch/MemoryCache.h index 43739bb..987666f 100644 --- a/third_party/WebKit/Source/core/fetch/MemoryCache.h +++ b/third_party/WebKit/Source/core/fetch/MemoryCache.h
@@ -27,7 +27,6 @@ #include "core/CoreExport.h" #include "core/fetch/Resource.h" -#include "core/fetch/ResourcePtr.h" #include "public/platform/WebMemoryDumpProvider.h" #include "public/platform/WebThread.h" #include "wtf/Allocator.h" @@ -84,7 +83,7 @@ DECLARE_TRACE(); void dispose(); - ResourcePtr<Resource> m_resource; + RefPtrWillBeMember<Resource> m_resource; bool m_inLiveDecodedResourcesList; unsigned m_accessCount; MemoryCacheLiveResourcePriority m_liveResourcePriority; @@ -273,7 +272,7 @@ void pruneLiveResources(PruneStrategy); void pruneNow(double currentTime, PruneStrategy); - bool evict(MemoryCacheEntry*); + void evict(MemoryCacheEntry*); MemoryCacheEntry* getEntryForResource(const Resource*) const; @@ -311,15 +310,6 @@ ResourceMap* ensureResourceMap(const String& cacheIdentifier); ResourceMapIndex m_resourceMaps; -#if ENABLE(OILPAN) - // Unlike m_allResources, m_liveResources is a set of Resource objects which - // should not be deleted. m_allResources only contains on-cache Resource - // objects. - // FIXME: Can we remove manual lifetime management of Resource and this? - HeapHashSet<Member<Resource>> m_liveResources; - friend CORE_EXPORT MemoryCache* replaceMemoryCacheForTesting(MemoryCache*); -#endif - friend class MemoryCacheTest; #ifdef MEMORY_CACHE_STATS Timer<MemoryCache> m_statsTimer;
diff --git a/third_party/WebKit/Source/core/fetch/MemoryCacheTest.cpp b/third_party/WebKit/Source/core/fetch/MemoryCacheTest.cpp index a2430bb..4facb09b 100644 --- a/third_party/WebKit/Source/core/fetch/MemoryCacheTest.cpp +++ b/third_party/WebKit/Source/core/fetch/MemoryCacheTest.cpp
@@ -32,7 +32,6 @@ #include "core/fetch/MockImageResourceClient.h" #include "core/fetch/RawResource.h" -#include "core/fetch/ResourcePtr.h" #include "platform/network/ResourceRequest.h" #include "platform/testing/UnitTestHelpers.h" #include "public/platform/Platform.h" @@ -45,9 +44,9 @@ public: class FakeDecodedResource : public Resource { public: - FakeDecodedResource(const ResourceRequest& request, Type type) - : Resource(request, type) + static RefPtrWillBeRawPtr<FakeDecodedResource> create(const ResourceRequest& request, Type type) { + return adoptRefWillBeNoop(new FakeDecodedResource(request, type)); } virtual void appendData(const char* data, size_t len) @@ -57,6 +56,11 @@ } protected: + FakeDecodedResource(const ResourceRequest& request, Type type) + : Resource(request, type) + { + } + void destroyDecodedDataIfPossible() override { setDecodedSize(0); @@ -65,15 +69,21 @@ class FakeResource : public Resource { public: - FakeResource(const ResourceRequest& request, Type type) - : Resource(request, type) + static RefPtrWillBeRawPtr<FakeResource> create(const ResourceRequest& request, Type type) { + return adoptRefWillBeNoop(new FakeResource(request, type)); } void fakeEncodedSize(size_t size) { setEncodedSize(size); } + + private: + FakeResource(const ResourceRequest& request, Type type) + : Resource(request, type) + { + } }; protected: @@ -113,8 +123,8 @@ const size_t resourceSize1 = sizeMax / 16; const size_t resourceSize2 = sizeMax / 20; memoryCache()->setCapacities(minDeadCapacity, maxDeadCapacity, totalCapacity); - ResourcePtr<FakeResource> cachedResource = - new FakeResource(ResourceRequest("http://test/resource"), Resource::Raw); + RefPtrWillBeRawPtr<FakeResource> cachedResource = + FakeResource::create(ResourceRequest("http://test/resource"), Resource::Raw); cachedResource->fakeEncodedSize(resourceSize1); ASSERT_EQ(0u, memoryCache()->deadSize()); @@ -170,24 +180,24 @@ TEST_F(MemoryCacheTest, DeadResourceEviction_Basic) { - Resource* resource1 = - new Resource(ResourceRequest("http://test/resource1"), Resource::Raw); - Resource* resource2 = - new Resource(ResourceRequest("http://test/resource2"), Resource::Raw); - TestDeadResourceEviction(resource1, resource2); + RefPtrWillBeRawPtr<Resource> resource1 = + Resource::create(ResourceRequest("http://test/resource1"), Resource::Raw); + RefPtrWillBeRawPtr<Resource> resource2 = + Resource::create(ResourceRequest("http://test/resource2"), Resource::Raw); + TestDeadResourceEviction(resource1.get(), resource2.get()); } TEST_F(MemoryCacheTest, DeadResourceEviction_MultipleResourceMaps) { - Resource* resource1 = - new Resource(ResourceRequest("http://test/resource1"), Resource::Raw); - Resource* resource2 = - new Resource(ResourceRequest("http://test/resource2"), Resource::Raw); + RefPtrWillBeRawPtr<Resource> resource1 = + Resource::create(ResourceRequest("http://test/resource1"), Resource::Raw); + RefPtrWillBeRawPtr<Resource> resource2 = + Resource::create(ResourceRequest("http://test/resource2"), Resource::Raw); resource2->setCacheIdentifier("foo"); - TestDeadResourceEviction(resource1, resource2); + TestDeadResourceEviction(resource1.get(), resource2.get()); } -static void TestLiveResourceEvictionAtEndOfTask(Resource* cachedDeadResource, const ResourcePtr<Resource>& cachedLiveResource) +static void TestLiveResourceEvictionAtEndOfTask(Resource* cachedDeadResource, Resource* cachedLiveResource) { memoryCache()->setDelayBeforeLiveDecodedPrune(0); const unsigned totalCapacity = 1; @@ -201,7 +211,7 @@ class Task1 : public WebTaskRunner::Task { public: - Task1(const ResourcePtr<Resource>& live, Resource* dead) + Task1(Resource* live, Resource* dead) : m_live(live) , m_dead(dead) { } @@ -216,7 +226,7 @@ ASSERT_EQ(0u, memoryCache()->deadSize()); ASSERT_EQ(0u, memoryCache()->liveSize()); - memoryCache()->add(m_dead); + memoryCache()->add(m_dead.get()); memoryCache()->add(m_live.get()); memoryCache()->updateDecodedResource(m_live.get(), UpdateForPropertyChange); ASSERT_EQ(m_dead->size(), memoryCache()->deadSize()); @@ -230,8 +240,8 @@ } private: - ResourcePtr<Resource> m_live; - RawPtrWillBePersistent<Resource> m_dead; + RefPtrWillBePersistent<Resource> m_live; + RefPtrWillBePersistent<Resource> m_dead; }; class Task2 : public WebTaskRunner::Task { @@ -260,48 +270,48 @@ // is deferred to the end of the task. TEST_F(MemoryCacheTest, LiveResourceEvictionAtEndOfTask_Basic) { - Resource* cachedDeadResource = - new Resource(ResourceRequest("hhtp://foo"), Resource::Raw); - ResourcePtr<Resource> cachedLiveResource = - new FakeDecodedResource(ResourceRequest("http://test/resource"), Resource::Raw); - TestLiveResourceEvictionAtEndOfTask(cachedDeadResource, cachedLiveResource); + RefPtrWillBeRawPtr<Resource> cachedDeadResource = + Resource::create(ResourceRequest("hhtp://foo"), Resource::Raw); + RefPtrWillBeRawPtr<Resource> cachedLiveResource = + FakeDecodedResource::create(ResourceRequest("http://test/resource"), Resource::Raw); + TestLiveResourceEvictionAtEndOfTask(cachedDeadResource.get(), cachedLiveResource.get()); } TEST_F(MemoryCacheTest, LiveResourceEvictionAtEndOfTask_MultipleResourceMaps) { { - Resource* cachedDeadResource = - new Resource(ResourceRequest("hhtp://foo"), Resource::Raw); + RefPtrWillBeRawPtr<Resource> cachedDeadResource = + Resource::create(ResourceRequest("hhtp://foo"), Resource::Raw); cachedDeadResource->setCacheIdentifier("foo"); - ResourcePtr<Resource> cachedLiveResource = - new FakeDecodedResource(ResourceRequest("http://test/resource"), Resource::Raw); - TestLiveResourceEvictionAtEndOfTask(cachedDeadResource, cachedLiveResource); + RefPtrWillBeRawPtr<Resource> cachedLiveResource = + FakeDecodedResource::create(ResourceRequest("http://test/resource"), Resource::Raw); + TestLiveResourceEvictionAtEndOfTask(cachedDeadResource.get(), cachedLiveResource.get()); memoryCache()->evictResources(); } { - Resource* cachedDeadResource = - new Resource(ResourceRequest("hhtp://foo"), Resource::Raw); - ResourcePtr<Resource> cachedLiveResource = - new FakeDecodedResource(ResourceRequest("http://test/resource"), Resource::Raw); + RefPtrWillBeRawPtr<Resource> cachedDeadResource = + Resource::create(ResourceRequest("hhtp://foo"), Resource::Raw); + RefPtrWillBeRawPtr<Resource> cachedLiveResource = + FakeDecodedResource::create(ResourceRequest("http://test/resource"), Resource::Raw); cachedLiveResource->setCacheIdentifier("foo"); - TestLiveResourceEvictionAtEndOfTask(cachedDeadResource, cachedLiveResource); + TestLiveResourceEvictionAtEndOfTask(cachedDeadResource.get(), cachedLiveResource.get()); memoryCache()->evictResources(); } { - Resource* cachedDeadResource = - new Resource(ResourceRequest("hhtp://test/resource"), Resource::Raw); + RefPtrWillBeRawPtr<Resource> cachedDeadResource = + Resource::create(ResourceRequest("hhtp://test/resource"), Resource::Raw); cachedDeadResource->setCacheIdentifier("foo"); - ResourcePtr<Resource> cachedLiveResource = - new FakeDecodedResource(ResourceRequest("http://test/resource"), Resource::Raw); + RefPtrWillBeRawPtr<Resource> cachedLiveResource = + FakeDecodedResource::create(ResourceRequest("http://test/resource"), Resource::Raw); cachedLiveResource->setCacheIdentifier("bar"); - TestLiveResourceEvictionAtEndOfTask(cachedDeadResource, cachedLiveResource); + TestLiveResourceEvictionAtEndOfTask(cachedDeadResource.get(), cachedLiveResource.get()); memoryCache()->evictResources(); } } // Verifies that cached resources are evicted immediately after release when // the total dead resource size is more than double the dead resource capacity. -static void TestClientRemoval(const ResourcePtr<Resource>& resource1, const ResourcePtr<Resource>& resource2) +static void TestClientRemoval(Resource* resource1, Resource* resource2) { const char data[6] = "abcde"; MockImageResourceClient client1(resource1); @@ -313,8 +323,8 @@ const unsigned maxDeadCapacity = ((resource1->size() + resource2->size()) / 2) - 1; const unsigned totalCapacity = maxDeadCapacity; memoryCache()->setCapacities(minDeadCapacity, maxDeadCapacity, totalCapacity); - memoryCache()->add(resource1.get()); - memoryCache()->add(resource2.get()); + memoryCache()->add(resource1); + memoryCache()->add(resource2); // Call prune. There is nothing to prune, but this will initialize // the prune timestamp, allowing future prunes to be deferred. memoryCache()->prune(); @@ -330,8 +340,8 @@ ASSERT_GT(resource2->decodedSize(), 0u); ASSERT_EQ(memoryCache()->deadSize(), resource1->size()); ASSERT_EQ(memoryCache()->liveSize(), resource2->size()); - ASSERT_TRUE(memoryCache()->contains(resource1.get())); - ASSERT_TRUE(memoryCache()->contains(resource2.get())); + ASSERT_TRUE(memoryCache()->contains(resource1)); + ASSERT_TRUE(memoryCache()->contains(resource2)); // Removing the client from resource2 should result in immediate // eviction of resource2 because we are over the prune deferral limit. @@ -340,54 +350,54 @@ ASSERT_GT(resource2->decodedSize(), 0u); ASSERT_EQ(memoryCache()->deadSize(), resource1->size()); ASSERT_EQ(memoryCache()->liveSize(), 0u); - ASSERT_TRUE(memoryCache()->contains(resource1.get())); - ASSERT_FALSE(memoryCache()->contains(resource2.get())); + ASSERT_TRUE(memoryCache()->contains(resource1)); + ASSERT_FALSE(memoryCache()->contains(resource2)); } TEST_F(MemoryCacheTest, ClientRemoval_Basic) { - ResourcePtr<Resource> resource1 = - new FakeDecodedResource(ResourceRequest("http://foo.com"), Resource::Raw); - ResourcePtr<Resource> resource2 = - new FakeDecodedResource(ResourceRequest("http://test/resource"), Resource::Raw); - TestClientRemoval(resource1, resource2); + RefPtrWillBeRawPtr<Resource> resource1 = + FakeDecodedResource::create(ResourceRequest("http://foo.com"), Resource::Raw); + RefPtrWillBeRawPtr<Resource> resource2 = + FakeDecodedResource::create(ResourceRequest("http://test/resource"), Resource::Raw); + TestClientRemoval(resource1.get(), resource2.get()); } TEST_F(MemoryCacheTest, ClientRemoval_MultipleResourceMaps) { { - ResourcePtr<Resource> resource1 = - new FakeDecodedResource(ResourceRequest("http://foo.com"), Resource::Raw); + RefPtrWillBeRawPtr<Resource> resource1 = + FakeDecodedResource::create(ResourceRequest("http://foo.com"), Resource::Raw); resource1->setCacheIdentifier("foo"); - ResourcePtr<Resource> resource2 = - new FakeDecodedResource(ResourceRequest("http://test/resource"), Resource::Raw); - TestClientRemoval(resource1, resource2); + RefPtrWillBeRawPtr<Resource> resource2 = + FakeDecodedResource::create(ResourceRequest("http://test/resource"), Resource::Raw); + TestClientRemoval(resource1.get(), resource2.get()); memoryCache()->evictResources(); } { - ResourcePtr<Resource> resource1 = - new FakeDecodedResource(ResourceRequest("http://foo.com"), Resource::Raw); - ResourcePtr<Resource> resource2 = - new FakeDecodedResource(ResourceRequest("http://test/resource"), Resource::Raw); + RefPtrWillBeRawPtr<Resource> resource1 = + FakeDecodedResource::create(ResourceRequest("http://foo.com"), Resource::Raw); + RefPtrWillBeRawPtr<Resource> resource2 = + FakeDecodedResource::create(ResourceRequest("http://test/resource"), Resource::Raw); resource2->setCacheIdentifier("foo"); - TestClientRemoval(resource1, resource2); + TestClientRemoval(resource1.get(), resource2.get()); memoryCache()->evictResources(); } { - ResourcePtr<Resource> resource1 = - new FakeDecodedResource(ResourceRequest("http://test/resource"), Resource::Raw); + RefPtrWillBeRawPtr<Resource> resource1 = + FakeDecodedResource::create(ResourceRequest("http://test/resource"), Resource::Raw); resource1->setCacheIdentifier("foo"); - ResourcePtr<Resource> resource2 = - new FakeDecodedResource(ResourceRequest("http://test/resource"), Resource::Raw); + RefPtrWillBeRawPtr<Resource> resource2 = + FakeDecodedResource::create(ResourceRequest("http://test/resource"), Resource::Raw); resource2->setCacheIdentifier("bar"); - TestClientRemoval(resource1, resource2); + TestClientRemoval(resource1.get(), resource2.get()); memoryCache()->evictResources(); } } // Verifies that CachedResources are evicted from the decode cache // according to their DecodeCachePriority. -static void TestDecodeCacheOrder(const ResourcePtr<Resource>& cachedImageLowPriority, const ResourcePtr<Resource>& cachedImageHighPriority) +static void TestDecodeCacheOrder(Resource* cachedImageLowPriority, Resource* cachedImageHighPriority) { memoryCache()->setDelayBeforeLiveDecodedPrune(0); memoryCache()->setMaxPruneDeferralDelay(0); @@ -414,23 +424,23 @@ ASSERT_EQ(memoryCache()->liveSize(), 0u); // Add the items. The item added first would normally be evicted first. - memoryCache()->add(cachedImageHighPriority.get()); + memoryCache()->add(cachedImageHighPriority); ASSERT_EQ(memoryCache()->deadSize(), 0u); ASSERT_EQ(memoryCache()->liveSize(), highPrioritySize); - memoryCache()->add(cachedImageLowPriority.get()); + memoryCache()->add(cachedImageLowPriority); ASSERT_EQ(memoryCache()->deadSize(), 0u); ASSERT_EQ(memoryCache()->liveSize(), highPrioritySize + lowPrioritySize); // Insert all items in the decoded items list with the same priority - memoryCache()->updateDecodedResource(cachedImageHighPriority.get(), UpdateForPropertyChange); - memoryCache()->updateDecodedResource(cachedImageLowPriority.get(), UpdateForPropertyChange); + memoryCache()->updateDecodedResource(cachedImageHighPriority, UpdateForPropertyChange); + memoryCache()->updateDecodedResource(cachedImageLowPriority, UpdateForPropertyChange); ASSERT_EQ(memoryCache()->deadSize(), 0u); ASSERT_EQ(memoryCache()->liveSize(), totalSize); // Now we will assign their priority and make sure they are moved to the correct buckets. - memoryCache()->updateDecodedResource(cachedImageLowPriority.get(), UpdateForPropertyChange, MemoryCacheLiveResourcePriorityLow); - memoryCache()->updateDecodedResource(cachedImageHighPriority.get(), UpdateForPropertyChange, MemoryCacheLiveResourcePriorityHigh); + memoryCache()->updateDecodedResource(cachedImageLowPriority, UpdateForPropertyChange, MemoryCacheLiveResourcePriorityLow); + memoryCache()->updateDecodedResource(cachedImageHighPriority, UpdateForPropertyChange, MemoryCacheLiveResourcePriorityHigh); // Should first prune the LowPriority item. memoryCache()->setCapacities(memoryCache()->minDeadCapacity(), memoryCache()->liveSize() - 10, memoryCache()->liveSize() - 10); @@ -447,57 +457,57 @@ TEST_F(MemoryCacheTest, DecodeCacheOrder_Basic) { - ResourcePtr<FakeDecodedResource> cachedImageLowPriority = - new FakeDecodedResource(ResourceRequest("http://foo.com"), Resource::Raw); - ResourcePtr<FakeDecodedResource> cachedImageHighPriority = - new FakeDecodedResource(ResourceRequest("http://test/resource"), Resource::Raw); - TestDecodeCacheOrder(cachedImageLowPriority, cachedImageHighPriority); + RefPtrWillBeRawPtr<FakeDecodedResource> cachedImageLowPriority = + FakeDecodedResource::create(ResourceRequest("http://foo.com"), Resource::Raw); + RefPtrWillBeRawPtr<FakeDecodedResource> cachedImageHighPriority = + FakeDecodedResource::create(ResourceRequest("http://test/resource"), Resource::Raw); + TestDecodeCacheOrder(cachedImageLowPriority.get(), cachedImageHighPriority.get()); } TEST_F(MemoryCacheTest, DecodeCacheOrder_MultipleResourceMaps) { { - ResourcePtr<FakeDecodedResource> cachedImageLowPriority = - new FakeDecodedResource(ResourceRequest("http://foo.com"), Resource::Raw); - ResourcePtr<FakeDecodedResource> cachedImageHighPriority = - new FakeDecodedResource(ResourceRequest("http://test/resource"), Resource::Raw); + RefPtrWillBeRawPtr<FakeDecodedResource> cachedImageLowPriority = + FakeDecodedResource::create(ResourceRequest("http://foo.com"), Resource::Raw); + RefPtrWillBeRawPtr<FakeDecodedResource> cachedImageHighPriority = + FakeDecodedResource::create(ResourceRequest("http://test/resource"), Resource::Raw); cachedImageLowPriority->setCacheIdentifier("foo"); - TestDecodeCacheOrder(cachedImageLowPriority, cachedImageHighPriority); + TestDecodeCacheOrder(cachedImageLowPriority.get(), cachedImageHighPriority.get()); memoryCache()->evictResources(); } { - ResourcePtr<FakeDecodedResource> cachedImageLowPriority = - new FakeDecodedResource(ResourceRequest("http://foo.com"), Resource::Raw); - ResourcePtr<FakeDecodedResource> cachedImageHighPriority = - new FakeDecodedResource(ResourceRequest("http://test/resource"), Resource::Raw); + RefPtrWillBeRawPtr<FakeDecodedResource> cachedImageLowPriority = + FakeDecodedResource::create(ResourceRequest("http://foo.com"), Resource::Raw); + RefPtrWillBeRawPtr<FakeDecodedResource> cachedImageHighPriority = + FakeDecodedResource::create(ResourceRequest("http://test/resource"), Resource::Raw); cachedImageHighPriority->setCacheIdentifier("foo"); - TestDecodeCacheOrder(cachedImageLowPriority, cachedImageHighPriority); + TestDecodeCacheOrder(cachedImageLowPriority.get(), cachedImageHighPriority.get()); memoryCache()->evictResources(); } { - ResourcePtr<FakeDecodedResource> cachedImageLowPriority = - new FakeDecodedResource(ResourceRequest("http://test/resource"), Resource::Raw); + RefPtrWillBeRawPtr<FakeDecodedResource> cachedImageLowPriority = + FakeDecodedResource::create(ResourceRequest("http://test/resource"), Resource::Raw); cachedImageLowPriority->setCacheIdentifier("foo"); - ResourcePtr<FakeDecodedResource> cachedImageHighPriority = - new FakeDecodedResource(ResourceRequest("http://test/resource"), Resource::Raw); + RefPtrWillBeRawPtr<FakeDecodedResource> cachedImageHighPriority = + FakeDecodedResource::create(ResourceRequest("http://test/resource"), Resource::Raw); cachedImageHighPriority->setCacheIdentifier("bar"); - TestDecodeCacheOrder(cachedImageLowPriority, cachedImageHighPriority); + TestDecodeCacheOrder(cachedImageLowPriority.get(), cachedImageHighPriority.get()); memoryCache()->evictResources(); } } TEST_F(MemoryCacheTest, RemoveDuringRevalidation) { - ResourcePtr<FakeResource> resource1 = new FakeResource(ResourceRequest("http://test/resource"), Resource::Raw); + RefPtrWillBeRawPtr<FakeResource> resource1 = FakeResource::create(ResourceRequest("http://test/resource"), Resource::Raw); memoryCache()->add(resource1.get()); - ResourcePtr<FakeResource> resource2 = new FakeResource(ResourceRequest("http://test/resource"), Resource::Raw); + RefPtrWillBeRawPtr<FakeResource> resource2 = FakeResource::create(ResourceRequest("http://test/resource"), Resource::Raw); memoryCache()->remove(resource1.get()); memoryCache()->add(resource2.get()); EXPECT_TRUE(memoryCache()->contains(resource2.get())); EXPECT_FALSE(memoryCache()->contains(resource1.get())); - ResourcePtr<FakeResource> resource3 = new FakeResource(ResourceRequest("http://test/resource"), Resource::Raw); + RefPtrWillBeRawPtr<FakeResource> resource3 = FakeResource::create(ResourceRequest("http://test/resource"), Resource::Raw); memoryCache()->remove(resource2.get()); memoryCache()->add(resource3.get()); EXPECT_TRUE(memoryCache()->contains(resource3.get())); @@ -506,10 +516,10 @@ TEST_F(MemoryCacheTest, ResourceMapIsolation) { - ResourcePtr<FakeResource> resource1 = new FakeResource(ResourceRequest("http://test/resource"), Resource::Raw); + RefPtrWillBeRawPtr<FakeResource> resource1 = FakeResource::create(ResourceRequest("http://test/resource"), Resource::Raw); memoryCache()->add(resource1.get()); - ResourcePtr<FakeResource> resource2 = new FakeResource(ResourceRequest("http://test/resource"), Resource::Raw); + RefPtrWillBeRawPtr<FakeResource> resource2 = FakeResource::create(ResourceRequest("http://test/resource"), Resource::Raw); resource2->setCacheIdentifier("foo"); memoryCache()->add(resource2.get()); EXPECT_TRUE(memoryCache()->contains(resource1.get())); @@ -521,7 +531,7 @@ EXPECT_EQ(resource2.get(), memoryCache()->resourceForURL(url, "foo")); EXPECT_EQ(0, memoryCache()->resourceForURL(KURL())); - ResourcePtr<FakeResource> resource3 = new FakeResource(ResourceRequest("http://test/resource"), Resource::Raw); + RefPtrWillBeRawPtr<FakeResource> resource3 = FakeResource::create(ResourceRequest("http://test/resource"), Resource::Raw); resource3->setCacheIdentifier("foo"); memoryCache()->remove(resource2.get()); memoryCache()->add(resource3.get());
diff --git a/third_party/WebKit/Source/core/fetch/MockImageResourceClient.cpp b/third_party/WebKit/Source/core/fetch/MockImageResourceClient.cpp index 4b41e4e..b3d9d156 100644 --- a/third_party/WebKit/Source/core/fetch/MockImageResourceClient.cpp +++ b/third_party/WebKit/Source/core/fetch/MockImageResourceClient.cpp
@@ -5,12 +5,11 @@ #include "core/fetch/MockImageResourceClient.h" #include "core/fetch/ImageResource.h" -#include "core/fetch/ResourcePtr.h" #include "testing/gtest/include/gtest/gtest.h" namespace blink { -MockImageResourceClient::MockImageResourceClient(const ResourcePtr<Resource>& resource) +MockImageResourceClient::MockImageResourceClient(PassRefPtrWillBeRawPtr<Resource> resource) : m_resource(resource.get()) , m_imageChangedCount(0) , m_notifyFinishedCalled(false)
diff --git a/third_party/WebKit/Source/core/fetch/MockImageResourceClient.h b/third_party/WebKit/Source/core/fetch/MockImageResourceClient.h index 914e126..b877a92d 100644 --- a/third_party/WebKit/Source/core/fetch/MockImageResourceClient.h +++ b/third_party/WebKit/Source/core/fetch/MockImageResourceClient.h
@@ -32,17 +32,14 @@ #define MockImageResourceClient_h #include "core/fetch/ImageResourceClient.h" +#include "core/fetch/Resource.h" #include "platform/heap/Handle.h" namespace blink { -template<typename T> class ResourcePtr; - -class Resource; - class MockImageResourceClient final : public ImageResourceClient { public: - explicit MockImageResourceClient(const ResourcePtr<Resource>&); + explicit MockImageResourceClient(const PassRefPtrWillBeRawPtr<Resource>); ~MockImageResourceClient() override; void imageChanged(ImageResource*, const IntRect*) override
diff --git a/third_party/WebKit/Source/core/fetch/RawResource.cpp b/third_party/WebKit/Source/core/fetch/RawResource.cpp index 87e522b..30a96b0 100644 --- a/third_party/WebKit/Source/core/fetch/RawResource.cpp +++ b/third_party/WebKit/Source/core/fetch/RawResource.cpp
@@ -33,7 +33,7 @@ namespace blink { -ResourcePtr<Resource> RawResource::fetchSynchronously(FetchRequest& request, ResourceFetcher* fetcher) +PassRefPtrWillBeRawPtr<Resource> RawResource::fetchSynchronously(FetchRequest& request, ResourceFetcher* fetcher) { request.mutableResourceRequest().setTimeoutInterval(10); ResourceLoaderOptions options(request.options()); @@ -42,21 +42,21 @@ return fetcher->requestResource(request, RawResourceFactory(Resource::Raw)); } -ResourcePtr<RawResource> RawResource::fetchImport(FetchRequest& request, ResourceFetcher* fetcher) +PassRefPtrWillBeRawPtr<RawResource> RawResource::fetchImport(FetchRequest& request, ResourceFetcher* fetcher) { ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone); request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestContextImport); return toRawResource(fetcher->requestResource(request, RawResourceFactory(Resource::ImportResource))); } -ResourcePtr<RawResource> RawResource::fetch(FetchRequest& request, ResourceFetcher* fetcher) +PassRefPtrWillBeRawPtr<RawResource> RawResource::fetch(FetchRequest& request, ResourceFetcher* fetcher) { ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone); ASSERT(request.resourceRequest().requestContext() != WebURLRequest::RequestContextUnspecified); return toRawResource(fetcher->requestResource(request, RawResourceFactory(Resource::Raw))); } -ResourcePtr<RawResource> RawResource::fetchMainResource(FetchRequest& request, ResourceFetcher* fetcher, const SubstituteData& substituteData) +PassRefPtrWillBeRawPtr<RawResource> RawResource::fetchMainResource(FetchRequest& request, ResourceFetcher* fetcher, const SubstituteData& substituteData) { ASSERT(request.resourceRequest().frameType() != WebURLRequest::FrameTypeNone); ASSERT(request.resourceRequest().requestContext() == WebURLRequest::RequestContextForm || request.resourceRequest().requestContext() == WebURLRequest::RequestContextFrame || request.resourceRequest().requestContext() == WebURLRequest::RequestContextHyperlink || request.resourceRequest().requestContext() == WebURLRequest::RequestContextIframe || request.resourceRequest().requestContext() == WebURLRequest::RequestContextInternal || request.resourceRequest().requestContext() == WebURLRequest::RequestContextLocation); @@ -64,21 +64,21 @@ return toRawResource(fetcher->requestResource(request, RawResourceFactory(Resource::MainResource), substituteData)); } -ResourcePtr<RawResource> RawResource::fetchMedia(FetchRequest& request, ResourceFetcher* fetcher) +PassRefPtrWillBeRawPtr<RawResource> RawResource::fetchMedia(FetchRequest& request, ResourceFetcher* fetcher) { ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone); ASSERT(request.resourceRequest().requestContext() == WebURLRequest::RequestContextAudio || request.resourceRequest().requestContext() == WebURLRequest::RequestContextVideo); return toRawResource(fetcher->requestResource(request, RawResourceFactory(Resource::Media))); } -ResourcePtr<RawResource> RawResource::fetchTextTrack(FetchRequest& request, ResourceFetcher* fetcher) +PassRefPtrWillBeRawPtr<RawResource> RawResource::fetchTextTrack(FetchRequest& request, ResourceFetcher* fetcher) { ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone); request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestContextTrack); return toRawResource(fetcher->requestResource(request, RawResourceFactory(Resource::TextTrack))); } -ResourcePtr<RawResource> RawResource::fetchManifest(FetchRequest& request, ResourceFetcher* fetcher) +PassRefPtrWillBeRawPtr<RawResource> RawResource::fetchManifest(FetchRequest& request, ResourceFetcher* fetcher) { ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone); ASSERT(request.resourceRequest().requestContext() == WebURLRequest::RequestContextManifest); @@ -94,7 +94,7 @@ { Resource::appendData(data, length); - ResourcePtr<RawResource> protect(this); + RefPtrWillBeRawPtr<RawResource> protect(this); ResourceClientWalker<RawResourceClient> w(m_clients); while (RawResourceClient* c = w.next()) c->dataReceived(this, data, length); @@ -107,7 +107,7 @@ // The calls to the client can result in events running, potentially causing // this resource to be evicted from the cache and all clients to be removed, // so a protector is necessary. - ResourcePtr<RawResource> protect(this); + RefPtrWillBeRawPtr<RawResource> protect(this); ASSERT(c->resourceClientType() == RawResourceClient::expectedType()); RawResourceClient* client = static_cast<RawResourceClient*>(c); for (const auto& redirect : redirectChain()) { @@ -130,7 +130,7 @@ void RawResource::willFollowRedirect(ResourceRequest& newRequest, const ResourceResponse& redirectResponse) { - ResourcePtr<RawResource> protect(this); + RefPtrWillBeRawPtr<RawResource> protect(this); ASSERT(!redirectResponse.isNull()); ResourceClientWalker<RawResourceClient> w(m_clients); while (RawResourceClient* c = w.next()) @@ -140,7 +140,7 @@ void RawResource::updateRequest(const ResourceRequest& request) { - ResourcePtr<RawResource> protect(this); + RefPtrWillBeRawPtr<RawResource> protect(this); ResourceClientWalker<RawResourceClient> w(m_clients); while (RawResourceClient* c = w.next()) c->updateRequest(this, request); @@ -148,7 +148,7 @@ void RawResource::responseReceived(const ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle) { - InternalResourcePtr protect(this); + RefPtrWillBeRawPtr<RawResource> protect(this); bool isSuccessfulRevalidation = isCacheValidator() && response.httpStatusCode() == 304; Resource::responseReceived(response, nullptr); @@ -174,7 +174,7 @@ void RawResource::setSerializedCachedMetadata(const char* data, size_t size) { - ResourcePtr<RawResource> protect(this); + RefPtrWillBeRawPtr<RawResource> protect(this); Resource::setSerializedCachedMetadata(data, size); ResourceClientWalker<RawResourceClient> w(m_clients); while (RawResourceClient* c = w.next()) @@ -183,7 +183,7 @@ void RawResource::didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) { - ResourcePtr<RawResource> protect(this); + RefPtrWillBeRawPtr<RawResource> protect(this); ResourceClientWalker<RawResourceClient> w(m_clients); while (RawResourceClient* c = w.next()) c->dataSent(this, bytesSent, totalBytesToBeSent); @@ -191,7 +191,7 @@ void RawResource::didDownloadData(int dataLength) { - ResourcePtr<RawResource> protect(this); + RefPtrWillBeRawPtr<RawResource> protect(this); ResourceClientWalker<RawResourceClient> w(m_clients); while (RawResourceClient* c = w.next()) c->dataDownloaded(this, dataLength);
diff --git a/third_party/WebKit/Source/core/fetch/RawResource.h b/third_party/WebKit/Source/core/fetch/RawResource.h index 25f1417..16ae1067 100644 --- a/third_party/WebKit/Source/core/fetch/RawResource.h +++ b/third_party/WebKit/Source/core/fetch/RawResource.h
@@ -24,8 +24,8 @@ #define RawResource_h #include "core/CoreExport.h" +#include "core/fetch/Resource.h" #include "core/fetch/ResourceClient.h" -#include "core/fetch/ResourcePtr.h" #include "public/platform/WebDataConsumerHandle.h" #include "wtf/PassOwnPtr.h" @@ -39,16 +39,19 @@ public: using ClientType = RawResourceClient; - static ResourcePtr<Resource> fetchSynchronously(FetchRequest&, ResourceFetcher*); - static ResourcePtr<RawResource> fetch(FetchRequest&, ResourceFetcher*); - static ResourcePtr<RawResource> fetchMainResource(FetchRequest&, ResourceFetcher*, const SubstituteData&); - static ResourcePtr<RawResource> fetchImport(FetchRequest&, ResourceFetcher*); - static ResourcePtr<RawResource> fetchMedia(FetchRequest&, ResourceFetcher*); - static ResourcePtr<RawResource> fetchTextTrack(FetchRequest&, ResourceFetcher*); - static ResourcePtr<RawResource> fetchManifest(FetchRequest&, ResourceFetcher*); + static PassRefPtrWillBeRawPtr<Resource> fetchSynchronously(FetchRequest&, ResourceFetcher*); + static PassRefPtrWillBeRawPtr<RawResource> fetch(FetchRequest&, ResourceFetcher*); + static PassRefPtrWillBeRawPtr<RawResource> fetchMainResource(FetchRequest&, ResourceFetcher*, const SubstituteData&); + static PassRefPtrWillBeRawPtr<RawResource> fetchImport(FetchRequest&, ResourceFetcher*); + static PassRefPtrWillBeRawPtr<RawResource> fetchMedia(FetchRequest&, ResourceFetcher*); + static PassRefPtrWillBeRawPtr<RawResource> fetchTextTrack(FetchRequest&, ResourceFetcher*); + static PassRefPtrWillBeRawPtr<RawResource> fetchManifest(FetchRequest&, ResourceFetcher*); // Exposed for testing - RawResource(const ResourceRequest&, Type); + static RefPtrWillBeRawPtr<RawResource> create(const ResourceRequest& request, Type type) + { + return adoptRefWillBeNoop(new RawResource(request, type)); + } // FIXME: AssociatedURLLoader shouldn't be a DocumentThreadableLoader and therefore shouldn't // use RawResource. However, it is, and it needs to be able to defer loading. @@ -63,12 +66,14 @@ RawResourceFactory(Resource::Type type) : ResourceFactory(type) { } - Resource* create(const ResourceRequest& request, const String& charset) const override + PassRefPtrWillBeRawPtr<Resource> create(const ResourceRequest& request, const String& charset) const override { - return new RawResource(request, m_type); + return adoptRefWillBeNoop(new RawResource(request, m_type)); } }; + RawResource(const ResourceRequest&, Type); + void didAddClient(ResourceClient*) override; void appendData(const char*, size_t) override; @@ -90,7 +95,7 @@ return type == Resource::MainResource || type == Resource::Raw || type == Resource::TextTrack || type == Resource::Media || type == Resource::Manifest || type == Resource::ImportResource; } #endif -inline RawResource* toRawResource(const ResourcePtr<Resource>& resource) +inline PassRefPtrWillBeRawPtr<RawResource> toRawResource(const PassRefPtrWillBeRawPtr<Resource>& resource) { ASSERT_WITH_SECURITY_IMPLICATION(!resource || isRawResource(*resource.get())); return static_cast<RawResource*>(resource.get());
diff --git a/third_party/WebKit/Source/core/fetch/RawResourceTest.cpp b/third_party/WebKit/Source/core/fetch/RawResourceTest.cpp index ed4b988..ef415297 100644 --- a/third_party/WebKit/Source/core/fetch/RawResourceTest.cpp +++ b/third_party/WebKit/Source/core/fetch/RawResourceTest.cpp
@@ -34,7 +34,6 @@ #include "core/fetch/MemoryCache.h" #include "core/fetch/MockImageResourceClient.h" #include "core/fetch/ResourceFetcher.h" -#include "core/fetch/ResourcePtr.h" #include "platform/SharedBuffer.h" #include "platform/testing/UnitTestHelpers.h" #include "public/platform/Platform.h" @@ -50,7 +49,7 @@ ResourceRequest jpegRequest; jpegRequest.setHTTPAccept("image/jpeg"); - ResourcePtr<RawResource> jpegResource(new RawResource(jpegRequest, Resource::Raw)); + RefPtrWillBeRawPtr<RawResource> jpegResource(RawResource::create(jpegRequest, Resource::Raw)); ResourceRequest pngRequest; pngRequest.setHTTPAccept("image/png"); @@ -108,13 +107,13 @@ } private: DummyClient* m_dummyClient; - ResourcePtr<Resource> m_resource; + RefPtrWillBePersistent<Resource> m_resource; Timer<AddingClient> m_removeClientTimer; }; TEST(RawResourceTest, RevalidationSucceeded) { - ResourcePtr<Resource> resource = new RawResource(ResourceRequest("data:text/html,"), Resource::Raw); + RefPtrWillBeRawPtr<Resource> resource = RawResource::create(ResourceRequest("data:text/html,"), Resource::Raw); ResourceResponse response; response.setHTTPStatusCode(200); resource->responseReceived(response, nullptr); @@ -146,7 +145,7 @@ TEST(RawResourceTest, RevalidationSucceededForResourceWithoutBody) { - ResourcePtr<Resource> resource = new RawResource(ResourceRequest("data:text/html,"), Resource::Raw); + RefPtrWillBeRawPtr<Resource> resource = RawResource::create(ResourceRequest("data:text/html,"), Resource::Raw); ResourceResponse response; response.setHTTPStatusCode(200); resource->responseReceived(response, nullptr); @@ -176,7 +175,7 @@ TEST(RawResourceTest, AddClientDuringCallback) { - ResourcePtr<Resource> raw = new RawResource(ResourceRequest("data:text/html,"), Resource::Raw); + RefPtrWillBeRawPtr<Resource> raw = RawResource::create(ResourceRequest("data:text/html,"), Resource::Raw); raw->setLoading(false); // Create a non-null response. @@ -215,7 +214,7 @@ TEST(RawResourceTest, RemoveClientDuringCallback) { - ResourcePtr<Resource> raw = new RawResource(ResourceRequest("data:text/html,"), Resource::Raw); + RefPtrWillBeRawPtr<Resource> raw = RawResource::create(ResourceRequest("data:text/html,"), Resource::Raw); raw->setLoading(false); // Create a non-null response.
diff --git a/third_party/WebKit/Source/core/fetch/Resource.cpp b/third_party/WebKit/Source/core/fetch/Resource.cpp index a3e1a0c..fb32fc9 100644 --- a/third_party/WebKit/Source/core/fetch/Resource.cpp +++ b/third_party/WebKit/Source/core/fetch/Resource.cpp
@@ -31,7 +31,6 @@ #include "core/fetch/ResourceClientWalker.h" #include "core/fetch/ResourceFetcher.h" #include "core/fetch/ResourceLoader.h" -#include "core/fetch/ResourcePtr.h" #include "core/inspector/InspectorInstrumentation.h" #include "platform/Logging.h" #include "platform/SharedBuffer.h" @@ -154,17 +153,13 @@ , m_identifier(0) , m_encodedSize(0) , m_decodedSize(0) - , m_handleCount(0) , m_preloadCount(0) - , m_protectorCount(0) , m_cacheIdentifier(MemoryCache::defaultCacheIdentifier()) , m_preloadResult(PreloadNotReferenced) , m_requestedFromNetworkingLayer(false) , m_loading(false) - , m_switchingClientsToRevalidatedResource(false) , m_type(type) , m_status(Pending) - , m_wasPurged(false) , m_needsSynchronousCacheHit(false) , m_linkPreload(false) #ifdef ENABLE_RESOURCE_IS_DELETED_CHECK @@ -173,7 +168,6 @@ { ASSERT(m_type == unsigned(type)); // m_type is a bitfield, so this tests careless updates of the enum. InstanceCounters::incrementCounter(InstanceCounters::ResourceCounter); - memoryCache()->registerLiveResource(*this); // Currently we support the metadata caching only for HTTP family. if (m_resourceRequest.url().protocolIsInHTTPFamily()) @@ -190,19 +184,18 @@ Resource::~Resource() { - ASSERT(canDelete()); - RELEASE_ASSERT(!memoryCache()->contains(this)); - RELEASE_ASSERT(!ResourceCallback::callbackHandler()->isScheduled(this)); assertAlive(); #ifdef ENABLE_RESOURCE_IS_DELETED_CHECK m_deleted = true; #endif + InstanceCounters::decrementCounter(InstanceCounters::ResourceCounter); } -void Resource::dispose() +void Resource::removedFromMemoryCache() { + InspectorInstrumentation::removedResourceFromMemoryCache(this); } DEFINE_TRACE(Resource) @@ -445,18 +438,13 @@ if (!m_data->isLocked()) return true; - if (!memoryCache()->contains(this) || hasClients() || m_handleCount > 1 || !m_revalidatingRequest.isNull() || !m_loadFinishTime || !isSafeToUnlock()) + if (!memoryCache()->contains(this) || hasClients() || !m_revalidatingRequest.isNull() || !m_loadFinishTime || !isSafeToUnlock()) return false; m_data->unlock(); return true; } -bool Resource::hasRightHandleCountApartFromCache(unsigned targetCount) const -{ - return m_handleCount == targetCount + (memoryCache()->contains(this) ? 1 : 0); -} - void Resource::responseReceived(const ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle>) { m_responseTimestamp = currentTime(); @@ -528,12 +516,6 @@ #endif } -bool Resource::canDelete() const -{ - return !hasClients() && !m_loader && !m_preloadCount && hasRightHandleCountApartFromCache(0) - && !m_protectorCount; -} - String Resource::reasonNotDeletable() const { StringBuilder builder; @@ -562,20 +544,6 @@ builder.appendNumber(m_preloadCount); builder.append(")"); } - if (!hasRightHandleCountApartFromCache(0)) { - if (!builder.isEmpty()) - builder.append(' '); - builder.append("m_handleCount("); - builder.appendNumber(m_handleCount); - builder.append(")"); - } - if (m_protectorCount) { - if (!builder.isEmpty()) - builder.append(' '); - builder.append("m_protectorCount("); - builder.appendNumber(m_protectorCount); - builder.append(")"); - } if (memoryCache()->contains(this)) { if (!builder.isEmpty()) builder.append(' '); @@ -584,11 +552,6 @@ return builder.toString(); } -bool Resource::hasOneHandle() const -{ - return hasRightHandleCountApartFromCache(1); -} - CachedMetadata* Resource::cachedMetadata(unsigned dataTypeID) const { if (!m_cachedMetadata || m_cachedMetadata->dataTypeID() != dataTypeID) @@ -678,11 +641,10 @@ if (m_clientsAwaitingCallback.isEmpty()) ResourceCallback::callbackHandler()->cancel(this); - bool deleted = deleteIfPossible(); - if (!deleted && !hasClients()) { + if (!hasClients()) { + RefPtrWillBeRawPtr<Resource> protect(this); memoryCache()->makeDead(this); - if (!m_switchingClientsToRevalidatedResource) - allClientsRemoved(); + allClientsRemoved(); // RFC2616 14.9.2: // "no-store: ... MUST make a best-effort attempt to remove the information from volatile storage as promptly as possible" @@ -702,7 +664,7 @@ { if (!m_loader) return; - if (m_type == MainResource || m_type == Raw) + if (m_type == MainResource || m_type == Raw || !memoryCache()->contains(this)) cancelTimerFired(&m_cancelTimer); else if (!m_cancelTimer.isActive()) m_cancelTimer.startOneShot(0, BLINK_FROM_HERE); @@ -715,26 +677,12 @@ ASSERT_UNUSED(timer, timer == &m_cancelTimer); if (hasClients() || !m_loader) return; - ResourcePtr<Resource> protect(this); + RefPtrWillBeRawPtr<Resource> protect(this); m_loader->cancelIfNotFinishing(); if (m_status != Cached) memoryCache()->remove(this); } -bool Resource::deleteIfPossible() -{ - if (canDelete() && !memoryCache()->contains(this)) { - InspectorInstrumentation::willDestroyResource(this); - dispose(); - memoryCache()->unregisterLiveResource(*this); -#if !ENABLE(OILPAN) - delete this; -#endif - return true; - } - return false; -} - void Resource::setDecodedSize(size_t decodedSize) { if (decodedSize == m_decodedSize) @@ -806,14 +754,13 @@ const String dumpName = getMemoryDumpName(); WebMemoryAllocatorDump* dump = memoryDump->createMemoryAllocatorDump(dumpName); dump->addScalar("encoded_size", "bytes", m_encodedSize); - if (canDelete()) { - dump->addScalar("dead_size", "bytes", m_encodedSize); - } else { + if (m_data && m_data->isLocked()) dump->addScalar("live_size", "bytes", m_encodedSize); - } + else + dump->addScalar("dead_size", "bytes", m_encodedSize); if (m_data) { - dump->addScalar("purgeable_size", "bytes", isPurgeable() && !wasPurged() ? encodedSize() + overheadSize() : 0); + dump->addScalar("purgeable_size", "bytes", isPurgeable() ? encodedSize() + overheadSize() : 0); m_data->onMemoryDump(dumpName, memoryDump); } @@ -895,29 +842,6 @@ destroyDecodedDataForFailedRevalidation(); } -void Resource::registerHandle(ResourcePtrBase* h) -{ - assertAlive(); - ++m_handleCount; -} - -void Resource::unregisterHandle(ResourcePtrBase* h) -{ - assertAlive(); - ASSERT(m_handleCount > 0); - --m_handleCount; - - if (!m_handleCount) { - if (deleteIfPossible()) - return; - unlock(); - } else if (m_handleCount == 1 && memoryCache()->contains(this)) { - unlock(); - if (!hasClients()) - memoryCache()->prune(this); - } -} - bool Resource::canReuseRedirectChain() { for (auto& redirect : m_redirectChain) { @@ -959,11 +883,6 @@ return m_data && !m_data->isLocked(); } -bool Resource::wasPurged() const -{ - return m_wasPurged; -} - bool Resource::lock() { if (!m_data) @@ -973,8 +892,10 @@ ASSERT(!hasClients()); + // If locking fails, our buffer has been purged. There's no point + // in leaving a purged resource in MemoryCache. if (!m_data->lock()) { - m_wasPurged = true; + memoryCache()->remove(this); return false; } return true; @@ -1054,8 +975,8 @@ void Resource::ResourceCallback::runTask() { - Vector<ResourcePtr<Resource>> resources; - for (const RawPtrWillBeMember<Resource>& resource : m_resourcesWithPendingClients) + WillBeHeapVector<RefPtrWillBeMember<Resource>> resources; + for (const RefPtrWillBeMember<Resource>& resource : m_resourcesWithPendingClients) resources.append(resource.get()); m_resourcesWithPendingClients.clear();
diff --git a/third_party/WebKit/Source/core/fetch/Resource.h b/third_party/WebKit/Source/core/fetch/Resource.h index 4558e2fe..fb1f31f 100644 --- a/third_party/WebKit/Source/core/fetch/Resource.h +++ b/third_party/WebKit/Source/core/fetch/Resource.h
@@ -49,7 +49,6 @@ class CachedMetadata; class FetchRequest; class ResourceClient; -class ResourcePtrBase; class ResourceFetcher; class ResourceTimingInfo; class InspectorResource; @@ -60,7 +59,7 @@ // A resource that is held in the cache. Classes who want to use this object should derive // from ResourceClient, to get the function calls in case the requested data has arrived. // This class also does the actual communication with the loader to obtain the resource from the network. -class CORE_EXPORT Resource : public NoBaseWillBeGarbageCollectedFinalized<Resource> { +class CORE_EXPORT Resource : public RefCountedWillBeGarbageCollectedFinalized<Resource> { WTF_MAKE_NONCOPYABLE(Resource); USING_FAST_MALLOC_WITH_TYPE_NAME_WILL_BE_REMOVED(blink::Resource); friend class InspectorResource; @@ -92,16 +91,13 @@ }; // Exposed for testing. - Resource(const ResourceRequest&, Type); -#if ENABLE(OILPAN) + static PassRefPtrWillBeRawPtr<Resource> create(const ResourceRequest& request, Type type) + { + return adoptRefWillBeNoop(new Resource(request, type)); + } virtual ~Resource(); -#else -protected: - // Only deleteIfPossible should delete this. - virtual ~Resource(); -public: -#endif - virtual void dispose(); + + virtual void removedFromMemoryCache(); DECLARE_VIRTUAL_TRACE(); virtual void load(ResourceFetcher*, const ResourceLoaderOptions&); @@ -141,7 +137,6 @@ void addClient(ResourceClient*); void removeClient(ResourceClient*); bool hasClients() const { return !m_clients.isEmpty() || !m_clientsAwaitingCallback.isEmpty() || !m_finishedClients.isEmpty(); } - bool deleteIfPossible(); enum PreloadResult { PreloadNotReferenced, @@ -208,8 +203,6 @@ // This may return nullptr when the resource isn't cacheable. CachedMetadataHandler* cacheHandler(); - bool hasOneHandle() const; - bool canDelete() const; String reasonNotDeletable() const; // List of acceptable MIME types separated by ",". @@ -229,9 +222,6 @@ void increasePreloadCount() { ++m_preloadCount; } void decreasePreloadCount() { ASSERT(m_preloadCount); --m_preloadCount; } - void registerHandle(ResourcePtrBase* h); - void unregisterHandle(ResourcePtrBase* h); - bool canReuseRedirectChain(); bool mustRevalidateDueToCacheHeaders(); bool canUseCacheValidator(); @@ -245,7 +235,6 @@ double stalenessLifetime(); bool isPurgeable() const; - bool wasPurged() const; bool lock(); void setCacheIdentifier(const String& cacheIdentifier) { m_cacheIdentifier = cacheIdentifier; } @@ -276,38 +265,13 @@ #endif protected: + Resource(const ResourceRequest&, Type); + virtual void checkNotify(); virtual void finishOnePart(); virtual void destroyDecodedDataForFailedRevalidation() { } - // Normal resource pointers will silently switch what Resource* they reference when we - // successfully revalidated the resource. We need a way to guarantee that the Resource - // that received the 304 response survives long enough to switch everything over to the - // revalidatedresource. The normal mechanisms for keeping a Resource alive externally - // (ResourcePtrs and ResourceClients registering themselves) don't work in this case, so - // have a separate internal protector). - class InternalResourcePtr { - STACK_ALLOCATED(); - public: - explicit InternalResourcePtr(Resource* resource) - : m_resource(resource) - { - m_resource->incrementProtectorCount(); - } - - ~InternalResourcePtr() - { - m_resource->decrementProtectorCount(); - m_resource->deleteIfPossible(); - } - private: - RawPtrWillBeMember<Resource> m_resource; - }; - - void incrementProtectorCount() { m_protectorCount++; } - void decrementProtectorCount() { m_protectorCount--; } - void setEncodedSize(size_t); void setDecodedSize(size_t); void didAccessDecodedData(); @@ -329,7 +293,7 @@ ResourceCallback(); void runTask(); OwnPtr<CancellableTaskFactory> m_callbackTaskFactory; - WillBeHeapHashSet<RawPtrWillBeMember<Resource>> m_resourcesWithPendingClients; + WillBeHeapHashSet<RefPtrWillBeMember<Resource>> m_resourcesWithPendingClients; }; bool hasClient(ResourceClient* client) { return m_clients.contains(client) || m_clientsAwaitingCallback.contains(client) || m_finishedClients.contains(client); } @@ -378,8 +342,6 @@ bool unlock(); - bool hasRightHandleCountApartFromCache(unsigned targetCount) const; - void setCachedMetadata(unsigned dataTypeID, const char*, size_t, CachedMetadataHandler::CacheType); void clearCachedMetadata(CachedMetadataHandler::CacheType); CachedMetadata* cachedMetadata(unsigned dataTypeID) const; @@ -401,9 +363,7 @@ size_t m_encodedSize; size_t m_decodedSize; - unsigned m_handleCount; unsigned m_preloadCount; - unsigned m_protectorCount; String m_cacheIdentifier; @@ -412,13 +372,9 @@ unsigned m_loading : 1; - unsigned m_switchingClientsToRevalidatedResource : 1; - unsigned m_type : 4; // Type unsigned m_status : 3; // Status - unsigned m_wasPurged : 1; - unsigned m_needsSynchronousCacheHit : 1; unsigned m_linkPreload : 1; @@ -433,7 +389,7 @@ class ResourceFactory { STACK_ALLOCATED(); public: - virtual Resource* create(const ResourceRequest&, const String&) const = 0; + virtual PassRefPtrWillBeRawPtr<Resource> create(const ResourceRequest&, const String&) const = 0; Resource::Type type() const { return m_type; } protected: @@ -444,7 +400,7 @@ #define DEFINE_RESOURCE_TYPE_CASTS(typeName) \ DEFINE_TYPE_CASTS(typeName##Resource, Resource, resource, resource->type() == Resource::typeName, resource.type() == Resource::typeName); \ - inline typeName##Resource* to##typeName##Resource(const ResourcePtr<Resource>& ptr) { return to##typeName##Resource(ptr.get()); } + inline typeName##Resource* to##typeName##Resource(const RefPtrWillBeRawPtr<Resource>& ptr) { return to##typeName##Resource(ptr.get()); } } // namespace blink
diff --git a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp index a55cb44..237f7b1 100644 --- a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp +++ b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
@@ -303,7 +303,7 @@ return value.release(); } -ResourcePtr<Resource> ResourceFetcher::preCacheData(const FetchRequest& request, const ResourceFactory& factory, const SubstituteData& substituteData) +void ResourceFetcher::preCacheData(const FetchRequest& request, const ResourceFactory& factory, const SubstituteData& substituteData) { const KURL& url = request.resourceRequest().url(); ASSERT(url.protocolIsData() || substituteData.isValid()); @@ -313,13 +313,13 @@ // layer where it isn't easy to mock out a network load. It uses data: urls to emulate the // behavior it wants to test, which would otherwise be reserved for network loads. if ((factory.type() == Resource::MainResource && !substituteData.isValid()) || factory.type() == Resource::Raw) - return nullptr; + return; const String cacheIdentifier = getCacheIdentifier(); if (Resource* oldResource = memoryCache()->resourceForURL(url, cacheIdentifier)) { // There's no reason to re-parse if we saved the data from the previous parse. if (request.options().dataBufferingPolicy != DoNotBufferData) - return oldResource; + return; memoryCache()->remove(oldResource); } @@ -333,13 +333,13 @@ } else { data = PassRefPtr<SharedBuffer>(Platform::current()->parseDataURL(url, mimetype, charset)); if (!data) - return nullptr; + return; } ResourceResponse response(url, mimetype, data->size(), charset, String()); response.setHTTPStatusCode(200); response.setHTTPStatusText("OK"); - ResourcePtr<Resource> resource = factory.create(request.resourceRequest(), request.charset()); + RefPtrWillBeRawPtr<Resource> resource = factory.create(request.resourceRequest(), request.charset()); resource->setNeedsSynchronousCacheHit(substituteData.forceSynchronousLoad()); resource->setOptions(request.options()); // FIXME: We should provide a body stream here. @@ -351,7 +351,6 @@ resource->setCacheIdentifier(cacheIdentifier); resource->finish(); memoryCache()->add(resource.get()); - return resource; } void ResourceFetcher::moveCachedNonBlockingResourceToBlocking(Resource* resource, const FetchRequest& request) @@ -366,7 +365,7 @@ } } -ResourcePtr<Resource> ResourceFetcher::requestResource(FetchRequest& request, const ResourceFactory& factory, const SubstituteData& substituteData) +PassRefPtrWillBeRawPtr<Resource> ResourceFetcher::requestResource(FetchRequest& request, const ResourceFactory& factory, const SubstituteData& substituteData) { ASSERT(request.options().synchronousPolicy == RequestAsynchronously || factory.type() == Resource::Raw || factory.type() == Resource::XSLStyleSheet); @@ -404,11 +403,9 @@ } bool isStaticData = request.resourceRequest().url().protocolIsData() || substituteData.isValid(); - ResourcePtr<Resource> resource; if (isStaticData) - resource = preCacheData(request, factory, substituteData); - if (!resource) - resource = memoryCache()->resourceForURL(url, getCacheIdentifier()); + preCacheData(request, factory, substituteData); + RefPtrWillBeRawPtr<Resource> resource = memoryCache()->resourceForURL(url, getCacheIdentifier()); // See if we can use an existing resource from the cache. If so, we need to move it to be load blocking. moveCachedNonBlockingResourceToBlocking(resource.get(), request); @@ -566,7 +563,7 @@ resource->setRevalidatingRequest(revalidatingRequest); } -ResourcePtr<Resource> ResourceFetcher::createResourceForLoading(FetchRequest& request, const String& charset, const ResourceFactory& factory) +PassRefPtrWillBeRawPtr<Resource> ResourceFetcher::createResourceForLoading(FetchRequest& request, const String& charset, const ResourceFactory& factory) { const String cacheIdentifier = getCacheIdentifier(); ASSERT(!memoryCache()->resourceForURL(request.resourceRequest().url(), cacheIdentifier)); @@ -574,7 +571,7 @@ WTF_LOG(ResourceLoading, "Loading Resource for '%s'.", request.resourceRequest().url().elidedString().latin1().data()); initializeResourceRequest(request.mutableResourceRequest(), factory.type()); - ResourcePtr<Resource> resource = factory.create(request.resourceRequest(), charset); + RefPtrWillBeRawPtr<Resource> resource = factory.create(request.resourceRequest(), charset); resource->setLinkPreload(request.isLinkPreload()); resource->setCacheIdentifier(cacheIdentifier); @@ -844,7 +841,7 @@ resource->increasePreloadCount(); if (!m_preloads) - m_preloads = adoptPtrWillBeNoop(new WillBeHeapListHashSet<RawPtrWillBeMember<Resource>>); + m_preloads = adoptPtrWillBeNoop(new WillBeHeapListHashSet<RefPtrWillBeMember<Resource>>); m_preloads->add(resource); #if PRELOAD_DEBUG @@ -874,8 +871,7 @@ for (auto resource : *m_preloads) { resource->decreasePreloadCount(); - bool deleted = resource->deleteIfPossible(); - if (!deleted && resource->preloadResult() == Resource::PreloadNotReferenced && (policy == ClearAllPreloads || !resource->isLinkPreload())) + if (resource->preloadResult() == Resource::PreloadNotReferenced && (policy == ClearAllPreloads || !resource->isLinkPreload())) memoryCache()->remove(resource.get()); } m_preloads.clear();
diff --git a/third_party/WebKit/Source/core/fetch/ResourceFetcher.h b/third_party/WebKit/Source/core/fetch/ResourceFetcher.h index c45cdf7..d3bd7fe2 100644 --- a/third_party/WebKit/Source/core/fetch/ResourceFetcher.h +++ b/third_party/WebKit/Source/core/fetch/ResourceFetcher.h
@@ -33,7 +33,6 @@ #include "core/fetch/FetchRequest.h" #include "core/fetch/Resource.h" #include "core/fetch/ResourceLoaderOptions.h" -#include "core/fetch/ResourcePtr.h" #include "core/fetch/SubstituteData.h" #include "platform/Timer.h" #include "platform/network/ResourceError.h" @@ -74,7 +73,7 @@ virtual ~ResourceFetcher(); DECLARE_VIRTUAL_TRACE(); - ResourcePtr<Resource> requestResource(FetchRequest&, const ResourceFactory&, const SubstituteData& = SubstituteData()); + PassRefPtrWillBeRawPtr<Resource> requestResource(FetchRequest&, const ResourceFactory&, const SubstituteData& = SubstituteData()); Resource* cachedResource(const KURL&) const; @@ -154,7 +153,7 @@ void reloadLoFiImages(); // This is only exposed for testing purposes. - WillBeHeapListHashSet<RawPtrWillBeMember<Resource>>* preloads() { return m_preloads.get(); } + WillBeHeapListHashSet<RefPtrWillBeMember<Resource>>* preloads() { return m_preloads.get(); } private: friend class ResourceCacheValidationSuppressor; @@ -162,10 +161,10 @@ explicit ResourceFetcher(FetchContext*); void initializeRevalidation(const FetchRequest&, Resource*); - ResourcePtr<Resource> createResourceForLoading(FetchRequest&, const String& charset, const ResourceFactory&); + PassRefPtrWillBeRawPtr<Resource> createResourceForLoading(FetchRequest&, const String& charset, const ResourceFactory&); void storeResourceTimingInitiatorInformation(Resource*); bool scheduleArchiveLoad(Resource*, const ResourceRequest&); - ResourcePtr<Resource> preCacheData(const FetchRequest&, const ResourceFactory&, const SubstituteData&); + void preCacheData(const FetchRequest&, const ResourceFactory&, const SubstituteData&); // RevalidationPolicy enum values are used in UMAs https://crbug.com/579496. enum RevalidationPolicy { Use, Revalidate, Reload, Load }; @@ -190,18 +189,11 @@ HashSet<String> m_validatedURLs; mutable DocumentResourceMap m_documentResources; - // We intentionally use a Member instead of a ResourcePtr. - // Using a ResourcePtrs can lead to a wrong behavior because - // the underlying Resource of the ResourcePtr is updated when the Resource - // is revalidated. What we really want to hold here is not the ResourcePtr - // but the underlying Resource. - OwnPtrWillBeMember<WillBeHeapListHashSet<RawPtrWillBeMember<Resource>>> m_preloads; + OwnPtrWillBeMember<WillBeHeapListHashSet<RefPtrWillBeMember<Resource>>> m_preloads; RefPtrWillBeMember<MHTMLArchive> m_archive; Timer<ResourceFetcher> m_resourceTimingReportTimer; - // We intentionally use a Member instead of a ResourcePtr. - // See the comment on m_preloads. using ResourceTimingInfoMap = WillBeHeapHashMap<RawPtrWillBeMember<Resource>, OwnPtr<ResourceTimingInfo>>; ResourceTimingInfoMap m_resourceTimingInfoMap;
diff --git a/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp b/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp index 784cc6f..ffc0a0c 100644 --- a/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp +++ b/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp
@@ -35,7 +35,6 @@ #include "core/fetch/FetchRequest.h" #include "core/fetch/MemoryCache.h" #include "core/fetch/ResourceLoader.h" -#include "core/fetch/ResourcePtr.h" #include "platform/exported/WrappedResourceResponse.h" #include "platform/heap/Handle.h" #include "platform/network/ResourceRequest.h" @@ -80,9 +79,9 @@ TestResourceFactory(Resource::Type type = Resource::Raw) : ResourceFactory(type) { } - Resource* create(const ResourceRequest& request, const String& charset) const override + PassRefPtrWillBeRawPtr<Resource> create(const ResourceRequest& request, const String& charset) const override { - return new Resource(request, type()); + return Resource::create(request, type()); } }; @@ -93,7 +92,7 @@ // and no resource should be present in the cache. ResourceFetcher* fetcher = ResourceFetcher::create(nullptr); FetchRequest fetchRequest = FetchRequest(ResourceRequest(secureURL), FetchInitiatorInfo()); - ResourcePtr<Resource> resource = fetcher->requestResource(fetchRequest, TestResourceFactory()); + RefPtrWillBeRawPtr<Resource> resource = fetcher->requestResource(fetchRequest, TestResourceFactory()); EXPECT_EQ(resource.get(), static_cast<Resource*>(nullptr)); EXPECT_EQ(memoryCache()->resourceForURL(secureURL), static_cast<Resource*>(nullptr)); } @@ -103,7 +102,7 @@ ResourceFetcher* fetcher = ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); - ResourcePtr<Resource> resource = new Resource(url, Resource::Image); + RefPtrWillBeRawPtr<Resource> resource = Resource::create(url, Resource::Image); memoryCache()->add(resource.get()); ResourceResponse response; response.setURL(url); @@ -113,7 +112,7 @@ resource->finish(); FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); - ResourcePtr<Resource> newResource = fetcher->requestResource(fetchRequest, TestResourceFactory(Resource::Image)); + RefPtrWillBeRawPtr<Resource> newResource = fetcher->requestResource(fetchRequest, TestResourceFactory(Resource::Image)); EXPECT_EQ(resource, newResource); memoryCache()->remove(resource.get()); } @@ -121,7 +120,7 @@ TEST_F(ResourceFetcherTest, Vary) { KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); - ResourcePtr<Resource> resource = new Resource(url, Resource::Raw); + RefPtrWillBeRawPtr<Resource> resource = Resource::create(url, Resource::Raw); memoryCache()->add(resource.get()); ResourceResponse response; response.setURL(url); @@ -135,7 +134,7 @@ ResourceFetcher* fetcher = ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); Platform::current()->unitTestSupport()->registerMockedURL(url, WebURLResponse(), ""); - ResourcePtr<Resource> newResource = fetcher->requestResource(fetchRequest, TestResourceFactory()); + RefPtrWillBeRawPtr<Resource> newResource = fetcher->requestResource(fetchRequest, TestResourceFactory()); EXPECT_NE(resource, newResource); newResource->loader()->cancel(); memoryCache()->remove(newResource.get()); @@ -151,7 +150,7 @@ ResourceFetcher* fetcher = ResourceFetcher::create(context); KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); - ResourcePtr<Resource> resource = new Resource(url, Resource::Raw); + RefPtrWillBeRawPtr<Resource> resource = Resource::create(url, Resource::Raw); memoryCache()->add(resource.get()); ResourceResponse response; response.setURL(url); @@ -163,7 +162,7 @@ ASSERT_TRUE(resource->hasVaryHeader()); FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); - ResourcePtr<Resource> newResource = fetcher->requestResource(fetchRequest, TestResourceFactory()); + RefPtrWillBeRawPtr<Resource> newResource = fetcher->requestResource(fetchRequest, TestResourceFactory()); EXPECT_EQ(resource, newResource); memoryCache()->remove(newResource.get()); @@ -182,13 +181,13 @@ URLTestHelpers::registerMockedURLLoadWithCustomResponse(url, "white-1x1.png", WebString::fromUTF8(""), WrappedResourceResponse(response)); FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); - ResourcePtr<Resource> resource = fetcher->requestResource(fetchRequestOriginal, TestResourceFactory(Resource::Image)); + RefPtrWillBeRawPtr<Resource> resource = fetcher->requestResource(fetchRequestOriginal, TestResourceFactory(Resource::Image)); ASSERT_TRUE(resource.get()); Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); ASSERT_TRUE(resource->hasVaryHeader()); FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); - ResourcePtr<Resource> newResource = fetcher->requestResource(fetchRequest, TestResourceFactory(Resource::Image)); + RefPtrWillBeRawPtr<Resource> newResource = fetcher->requestResource(fetchRequest, TestResourceFactory(Resource::Image)); EXPECT_EQ(resource, newResource); memoryCache()->remove(newResource.get()); @@ -204,7 +203,7 @@ ResourceRequest request1(url); request1.setHTTPHeaderField(HTTPNames::Cache_Control, "no-cache"); FetchRequest fetchRequest1 = FetchRequest(request1, FetchInitiatorInfo()); - ResourcePtr<Resource> resource1 = fetcher1->requestResource(fetchRequest1, TestResourceFactory(Resource::Image)); + RefPtrWillBeRawPtr<Resource> resource1 = fetcher1->requestResource(fetchRequest1, TestResourceFactory(Resource::Image)); ResourceResponse response; response.setURL(url); response.setHTTPStatusCode(200); @@ -217,7 +216,7 @@ context->setCachePolicy(CachePolicyRevalidate); ResourceFetcher* fetcher2 = ResourceFetcher::create(context); FetchRequest fetchRequest2(url, FetchInitiatorInfo()); - ResourcePtr<Resource> resource2 = fetcher2->requestResource(fetchRequest2, TestResourceFactory(Resource::Image)); + RefPtrWillBeRawPtr<Resource> resource2 = fetcher2->requestResource(fetchRequest2, TestResourceFactory(Resource::Image)); EXPECT_EQ(resource1, resource2); // Tidily(?) shut down the ResourceLoader. @@ -232,8 +231,8 @@ ResourceLoaderOptions options; options.dataBufferingPolicy = DoNotBufferData; FetchRequest fetchRequest = FetchRequest(request, FetchInitiatorTypeNames::internal, options); - ResourcePtr<Resource> resource1 = fetcher->requestResource(fetchRequest, TestResourceFactory(Resource::Media)); - ResourcePtr<Resource> resource2 = fetcher->requestResource(fetchRequest, TestResourceFactory(Resource::Media)); + RefPtrWillBeRawPtr<Resource> resource1 = fetcher->requestResource(fetchRequest, TestResourceFactory(Resource::Media)); + RefPtrWillBeRawPtr<Resource> resource2 = fetcher->requestResource(fetchRequest, TestResourceFactory(Resource::Media)); EXPECT_NE(resource1.get(), resource2.get()); memoryCache()->remove(resource2.get()); }
diff --git a/third_party/WebKit/Source/core/fetch/ResourceLoader.cpp b/third_party/WebKit/Source/core/fetch/ResourceLoader.cpp index 153d17561d..d53920a7 100644 --- a/third_party/WebKit/Source/core/fetch/ResourceLoader.cpp +++ b/third_party/WebKit/Source/core/fetch/ResourceLoader.cpp
@@ -32,7 +32,6 @@ #include "core/fetch/CSSStyleSheetResource.h" #include "core/fetch/Resource.h" #include "core/fetch/ResourceFetcher.h" -#include "core/fetch/ResourcePtr.h" #include "platform/Logging.h" #include "platform/SharedBuffer.h" #include "platform/ThreadedDataReceiver.h" @@ -99,7 +98,6 @@ if (m_state == Terminated) return; m_resource->clearLoader(); - m_resource->deleteIfPossible(); m_resource = nullptr; ASSERT(m_state != Terminated); @@ -132,7 +130,7 @@ ASSERT(!m_request.isNull()); ASSERT(m_deferredRequest.isNull()); - m_fetcher->willStartLoadingResource(m_resource, m_request); + m_fetcher->willStartLoadingResource(m_resource.get(), m_request); if (m_options.synchronousPolicy == RequestSynchronously) { requestSynchronously(); @@ -196,7 +194,7 @@ { ASSERT(m_state != Terminated); RELEASE_ASSERT(m_connectionState == ConnectionStateReceivedResponse); - m_fetcher->didDownloadData(m_resource, length, encodedDataLength); + m_fetcher->didDownloadData(m_resource.get(), length, encodedDataLength); if (m_state == Terminated) return; m_resource->didDownloadData(length); @@ -212,7 +210,7 @@ if (m_notifiedLoadComplete) return; m_notifiedLoadComplete = true; - m_fetcher->didFinishLoading(m_resource, finishTime, encodedDataLength); + m_fetcher->didFinishLoading(m_resource.get(), finishTime, encodedDataLength); } void ResourceLoader::didChangePriority(ResourceLoadPriority loadPriority, int intraPriorityValue) @@ -259,7 +257,7 @@ if (!m_notifiedLoadComplete) { m_notifiedLoadComplete = true; - m_fetcher->didFailLoading(m_resource, nonNullError); + m_fetcher->didFailLoading(m_resource.get(), nonNullError); } if (m_state == Finishing) @@ -278,14 +276,14 @@ const ResourceResponse& redirectResponse(passedRedirectResponse.toResourceResponse()); ASSERT(!redirectResponse.isNull()); newRequest.setFollowedRedirect(true); - if (!isManualRedirectFetchRequest(m_resource->resourceRequest()) && !m_fetcher->canAccessRedirect(m_resource, newRequest, redirectResponse, m_options)) { + if (!isManualRedirectFetchRequest(m_resource->resourceRequest()) && !m_fetcher->canAccessRedirect(m_resource.get(), newRequest, redirectResponse, m_options)) { cancel(ResourceError::cancelledDueToAccessCheckError(newRequest.url())); return; } ASSERT(m_state != Terminated); applyOptions(newRequest); // canAccessRedirect() can modify m_options so we should re-apply it. - m_fetcher->redirectReceived(m_resource, redirectResponse); + m_fetcher->redirectReceived(m_resource.get(), redirectResponse); ASSERT(m_state != Terminated); m_resource->willFollowRedirect(newRequest, redirectResponse); if (newRequest.isNull() || m_state == Terminated) @@ -347,14 +345,10 @@ return; } } else { - // If the response successfully validated a cached resource, perform - // the access control with respect to it. Need to do this right here - // before the resource switches clients over to that validated resource. - Resource* resource = m_resource; - if (!resource->isCacheValidator() || resourceResponse.httpStatusCode() != 304) + if (!m_resource->isCacheValidator() || resourceResponse.httpStatusCode() != 304) m_resource->setResponse(resourceResponse); - if (!m_fetcher->canAccessResource(resource, m_options.securityOrigin.get(), response.url(), ResourceFetcher::ShouldLogAccessControlErrors)) { - m_fetcher->didReceiveResponse(m_resource, resourceResponse); + if (!m_fetcher->canAccessResource(m_resource.get(), m_options.securityOrigin.get(), response.url(), ResourceFetcher::ShouldLogAccessControlErrors)) { + m_fetcher->didReceiveResponse(m_resource.get(), resourceResponse); cancel(ResourceError::cancelledDueToAccessCheckError(KURL(response.url()))); return; } @@ -365,7 +359,7 @@ if (m_state == Terminated) return; - m_fetcher->didReceiveResponse(m_resource, resourceResponse); + m_fetcher->didReceiveResponse(m_resource.get(), resourceResponse); if (m_state == Terminated) return; @@ -392,7 +386,7 @@ if (!m_notifiedLoadComplete) { m_notifiedLoadComplete = true; - m_fetcher->didFailLoading(m_resource, ResourceError::cancelledError(m_request.url())); + m_fetcher->didFailLoading(m_resource.get(), ResourceError::cancelledError(m_request.url())); } ASSERT(m_state != Terminated); @@ -420,7 +414,7 @@ // FIXME: If we get a resource with more than 2B bytes, this code won't do the right thing. // However, with today's computers and networking speeds, this won't happen in practice. // Could be an issue with a giant local file. - m_fetcher->didReceiveData(m_resource, data, length, encodedDataLength); + m_fetcher->didReceiveData(m_resource.get(), data, length, encodedDataLength); if (m_state == Terminated) return; RELEASE_ASSERT(length >= 0); @@ -436,7 +430,7 @@ ASSERT(m_state != Terminated); WTF_LOG(ResourceLoading, "Received '%s'.", m_resource->url().string().latin1().data()); - ResourcePtr<Resource> protectResource(m_resource); + RefPtrWillBeRawPtr<Resource> protectResource(m_resource.get()); m_state = Finishing; m_resource->setLoadFinishTime(finishTime); didFinishLoadingOnePart(finishTime, encodedDataLength); @@ -457,13 +451,13 @@ ASSERT(m_state != Terminated); WTF_LOG(ResourceLoading, "Failed to load '%s'.\n", m_resource->url().string().latin1().data()); - ResourcePtr<Resource> protectResource(m_resource); + RefPtrWillBeRawPtr<Resource> protectResource(m_resource.get()); m_state = Finishing; m_resource->setResourceError(error); if (!m_notifiedLoadComplete) { m_notifiedLoadComplete = true; - m_fetcher->didFailLoading(m_resource, error); + m_fetcher->didFailLoading(m_resource.get(), error); } if (m_state == Terminated) return; @@ -489,7 +483,7 @@ // downloadToFile is not supported for synchronous requests. ASSERT(!m_request.downloadToFile()); - ResourcePtr<Resource> protectResource(m_resource); + RefPtrWillBeRawPtr<Resource> protectResource(m_resource.get()); RELEASE_ASSERT(m_connectionState == ConnectionStateNew); m_connectionState = ConnectionStateStarted; @@ -521,7 +515,7 @@ // empty buffer is a noop in most cases, but is destructive in the case of // a 304, where it will overwrite the cached data we should be reusing. if (dataOut.size()) { - m_fetcher->didReceiveData(m_resource, dataOut.data(), dataOut.size(), encodedDataLength); + m_fetcher->didReceiveData(m_resource.get(), dataOut.data(), dataOut.size(), encodedDataLength); m_resource->setResourceBuffer(dataOut); } didFinishLoading(0, monotonicallyIncreasingTime(), encodedDataLength);
diff --git a/third_party/WebKit/Source/core/fetch/ResourceLoader.h b/third_party/WebKit/Source/core/fetch/ResourceLoader.h index 734da2af..320c896a 100644 --- a/third_party/WebKit/Source/core/fetch/ResourceLoader.h +++ b/third_party/WebKit/Source/core/fetch/ResourceLoader.h
@@ -61,7 +61,7 @@ void cancel(const ResourceError&); void cancelIfNotFinishing(); - Resource* cachedResource() { return m_resource; } + Resource* cachedResource() { return m_resource.get(); } const ResourceRequest& originalRequest() const { return m_originalRequest; } void setDefersLoading(bool); @@ -134,7 +134,7 @@ ConnectionStateFailed, }; - RawPtrWillBeMember<Resource> m_resource; + RefPtrWillBeMember<Resource> m_resource; ResourceLoaderState m_state; // Used for sanity checking to make sure we don't experience illegal state
diff --git a/third_party/WebKit/Source/core/fetch/ResourceOwner.h b/third_party/WebKit/Source/core/fetch/ResourceOwner.h index 69822c1..2fb6fe5 100644 --- a/third_party/WebKit/Source/core/fetch/ResourceOwner.h +++ b/third_party/WebKit/Source/core/fetch/ResourceOwner.h
@@ -31,54 +31,57 @@ #ifndef ResourceOwner_h #define ResourceOwner_h -#include "core/fetch/ResourcePtr.h" +#include "core/fetch/Resource.h" namespace blink { - template<class R, class C = typename R::ClientType> class ResourceOwner : public WillBeGarbageCollectedMixin, public C { + WILL_BE_USING_PRE_FINALIZER(ResourceOwner, clearResource); public: using ResourceType = R; virtual ~ResourceOwner(); ResourceType* resource() const { return m_resource.get(); } - DEFINE_INLINE_VIRTUAL_TRACE() {} + DEFINE_INLINE_VIRTUAL_TRACE() { visitor->trace(m_resource); } protected: ResourceOwner(); - void setResource(const ResourcePtr<ResourceType>&); + void setResource(const PassRefPtrWillBeRawPtr<ResourceType>&); void clearResource() { setResource(nullptr); } private: - ResourcePtr<ResourceType> m_resource; + RefPtrWillBeMember<ResourceType> m_resource; }; template<class R, class C> inline ResourceOwner<R, C>::ResourceOwner() { +#if ENABLE(OILPAN) + ThreadState::current()->registerPreFinalizer(this); +#endif } template<class R, class C> inline ResourceOwner<R, C>::~ResourceOwner() { +#if !ENABLE(OILPAN) clearResource(); +#endif } template<class R, class C> -inline void ResourceOwner<R, C>::setResource(const ResourcePtr<R>& newResource) +inline void ResourceOwner<R, C>::setResource(const PassRefPtrWillBeRawPtr<R>& newResource) { if (newResource == m_resource) return; // Some ResourceClient implementations reenter this so // we need to prevent double removal. - if (ResourcePtr<ResourceType> oldResource = m_resource) { - m_resource.clear(); + if (RefPtrWillBeRawPtr<ResourceType> oldResource = m_resource.release()) oldResource->removeClient(this); - } if (newResource) { m_resource = newResource;
diff --git a/third_party/WebKit/Source/core/fetch/ResourcePtr.cpp b/third_party/WebKit/Source/core/fetch/ResourcePtr.cpp deleted file mode 100644 index 8e0624e..0000000 --- a/third_party/WebKit/Source/core/fetch/ResourcePtr.cpp +++ /dev/null
@@ -1,41 +0,0 @@ -/* - * Copyright (C) 2008 Apple Inc. All Rights Reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "core/fetch/ResourcePtr.h" - -namespace blink { - -void ResourcePtrBase::setResource(Resource* resource) -{ - if (resource == m_resource) - return; - if (m_resource) - m_resource->unregisterHandle(this); - m_resource = resource; - if (m_resource) - m_resource->registerHandle(this); -} - -} // namespace blink
diff --git a/third_party/WebKit/Source/core/fetch/ResourcePtr.h b/third_party/WebKit/Source/core/fetch/ResourcePtr.h deleted file mode 100644 index 77d2901..0000000 --- a/third_party/WebKit/Source/core/fetch/ResourcePtr.h +++ /dev/null
@@ -1,122 +0,0 @@ -/* - * Copyright (C) 2008 Apple Inc. All Rights Reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef ResourcePtr_h -#define ResourcePtr_h - -#include "core/CoreExport.h" -#include "core/fetch/Resource.h" -#include "wtf/Allocator.h" - -namespace blink { - -class CORE_EXPORT ResourcePtrBase { - DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); -public: - Resource* get() const { return m_resource; } - bool operator!() const { return !m_resource; } - void clear() { setResource(nullptr); } - - // This conversion operator allows implicit conversion to bool but not to other integer types. - typedef Resource* ResourcePtrBase::*UnspecifiedBoolType; - operator UnspecifiedBoolType() const { return m_resource ? &ResourcePtrBase::m_resource : nullptr; } - -protected: - ResourcePtrBase() : m_resource(nullptr) { } - explicit ResourcePtrBase(Resource*); - explicit ResourcePtrBase(const ResourcePtrBase&); - ~ResourcePtrBase(); - - void setResource(Resource*); - -private: - friend class Resource; - ResourcePtrBase& operator=(const ResourcePtrBase&) = delete; - - // The lifetime of the Resource object is explicitly managed by - // reference-counting. - GC_PLUGIN_IGNORE("503485") - Resource* m_resource; -}; - -inline ResourcePtrBase::ResourcePtrBase(Resource* res) - : m_resource(res) -{ - if (m_resource) - m_resource->registerHandle(this); -} - -inline ResourcePtrBase::~ResourcePtrBase() -{ - if (m_resource) - m_resource->unregisterHandle(this); -} - -inline ResourcePtrBase::ResourcePtrBase(const ResourcePtrBase& o) - : m_resource(o.m_resource) -{ - if (m_resource) - m_resource->registerHandle(this); -} - -template <class R> class ResourcePtr final : public ResourcePtrBase { -public: - ResourcePtr() { } - ResourcePtr(R* res) : ResourcePtrBase(res) { } - ResourcePtr(const ResourcePtr<R>& o) : ResourcePtrBase(o) { } - template<typename U> ResourcePtr(const ResourcePtr<U>& o) : ResourcePtrBase(cast(o.get())) { } - - R* get() const { return static_cast<R*>(ResourcePtrBase::get()); } - R* operator->() const { return get(); } - - ResourcePtr& operator=(R* res) { setResource(res); return *this; } - ResourcePtr& operator=(const ResourcePtr& o) { setResource(o.get()); return *this; } - template<typename U> ResourcePtr& operator=(const ResourcePtr<U>& o) { setResource(cast(o.get())); return *this; } - - bool operator==(const ResourcePtrBase& o) const { return get() == o.get(); } - bool operator!=(const ResourcePtrBase& o) const { return get() != o.get(); } -private: - template<typename U> static R* cast(U* u) { return u; } -}; - -template <class R, class RR> bool operator==(const ResourcePtr<R>& h, const RR* res) -{ - return h.get() == res; -} -template <class R, class RR> bool operator==(const RR* res, const ResourcePtr<R>& h) -{ - return h.get() == res; -} -template <class R, class RR> bool operator!=(const ResourcePtr<R>& h, const RR* res) -{ - return h.get() != res; -} -template <class R, class RR> bool operator!=(const RR* res, const ResourcePtr<R>& h) -{ - return h.get() != res; -} -} // namespace blink - -#endif
diff --git a/third_party/WebKit/Source/core/fetch/ResourceTest.cpp b/third_party/WebKit/Source/core/fetch/ResourceTest.cpp index ae04c9b7..42dd25d 100644 --- a/third_party/WebKit/Source/core/fetch/ResourceTest.cpp +++ b/third_party/WebKit/Source/core/fetch/ResourceTest.cpp
@@ -4,7 +4,6 @@ #include "core/fetch/Resource.h" -#include "core/fetch/ResourcePtr.h" #include "platform/network/ResourceRequest.h" #include "platform/network/ResourceResponse.h" #include "platform/testing/TestingPlatformSupport.h" @@ -48,7 +47,7 @@ void createTestResourceAndSetCachedMetadata(const ResourceResponse& response) { const char testData[] = "test data"; - ResourcePtr<Resource> resource = new Resource(ResourceRequest(response.url()), Resource::Raw); + RefPtrWillBeRawPtr<Resource> resource = Resource::create(ResourceRequest(response.url()), Resource::Raw); resource->setResponse(response); resource->cacheHandler()->setCachedMetadata(100, testData, sizeof(testData), CachedMetadataHandler::SendToPlatform); return;
diff --git a/third_party/WebKit/Source/core/fetch/ScriptResource.cpp b/third_party/WebKit/Source/core/fetch/ScriptResource.cpp index c78a639..c85a6c7 100644 --- a/third_party/WebKit/Source/core/fetch/ScriptResource.cpp +++ b/third_party/WebKit/Source/core/fetch/ScriptResource.cpp
@@ -37,18 +37,18 @@ namespace blink { -ResourcePtr<ScriptResource> ScriptResource::fetch(FetchRequest& request, ResourceFetcher* fetcher) +PassRefPtrWillBeRawPtr<ScriptResource> ScriptResource::fetch(FetchRequest& request, ResourceFetcher* fetcher) { ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone); request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestContextScript); - ResourcePtr<ScriptResource> resource = toScriptResource(fetcher->requestResource(request, ScriptResourceFactory())); + RefPtrWillBeRawPtr<ScriptResource> resource = toScriptResource(fetcher->requestResource(request, ScriptResourceFactory())); if (resource && !request.integrityMetadata().isEmpty()) resource->setIntegrityMetadata(request.integrityMetadata()); - return resource; + return resource.release(); } ScriptResource::ScriptResource(const ResourceRequest& resourceRequest, const String& charset) - : TextResource(resourceRequest, Script, "application/javascript", charset), m_integrityChecked(false) + : TextResource(resourceRequest, Script, "application/javascript", charset), m_integrityDisposition(ScriptIntegrityDisposition::NotChecked) { DEFINE_STATIC_LOCAL(const AtomicString, acceptScript, ("*/*", AtomicString::ConstructFromLiteral)); @@ -118,6 +118,11 @@ return parseContentTypeOptionsHeader(m_response.httpHeaderField(HTTPNames::X_Content_Type_Options)) != ContentTypeOptionsNosniff || MIMETypeRegistry::isSupportedJavaScriptMIMEType(mimeType()); } +void ScriptResource::setIntegrityDisposition(ScriptIntegrityDisposition disposition) +{ + ASSERT(disposition != ScriptIntegrityDisposition::NotChecked); + m_integrityDisposition = disposition; +} bool ScriptResource::mustRefetchDueToIntegrityMetadata(const FetchRequest& request) const { if (request.integrityMetadata().isEmpty())
diff --git a/third_party/WebKit/Source/core/fetch/ScriptResource.h b/third_party/WebKit/Source/core/fetch/ScriptResource.h index 3cab8be..9f0b9a20 100644 --- a/third_party/WebKit/Source/core/fetch/ScriptResource.h +++ b/third_party/WebKit/Source/core/fetch/ScriptResource.h
@@ -34,6 +34,12 @@ namespace blink { +enum class ScriptIntegrityDisposition { + NotChecked = 0, + Failed, + Passed +}; + class FetchRequest; class ScriptResource; @@ -49,10 +55,13 @@ class CORE_EXPORT ScriptResource final : public TextResource { public: using ClientType = ScriptResourceClient; - static ResourcePtr<ScriptResource> fetch(FetchRequest&, ResourceFetcher*); + static PassRefPtrWillBeRawPtr<ScriptResource> fetch(FetchRequest&, ResourceFetcher*); // Public for testing - ScriptResource(const ResourceRequest&, const String& charset); + static PassRefPtrWillBeRawPtr<ScriptResource> create(const ResourceRequest& request, const String& charset) + { + return adoptRefWillBeNoop(new ScriptResource(request, charset)); + } ~ScriptResource() override; @@ -71,8 +80,9 @@ void setIntegrityMetadata(const IntegrityMetadataSet& metadata) { m_integrityMetadata = metadata; } const IntegrityMetadataSet& integrityMetadata() const { return m_integrityMetadata; } - void setIntegrityAlreadyChecked(bool checked) { m_integrityChecked = checked; } - bool integrityAlreadyChecked() { return m_integrityChecked; } + // The argument must never be |NotChecked|. + void setIntegrityDisposition(ScriptIntegrityDisposition); + ScriptIntegrityDisposition integrityDisposition() { return m_integrityDisposition; } bool mustRefetchDueToIntegrityMetadata(const FetchRequest&) const override; private: @@ -81,13 +91,15 @@ ScriptResourceFactory() : ResourceFactory(Resource::Script) { } - Resource* create(const ResourceRequest& request, const String& charset) const override + PassRefPtrWillBeRawPtr<Resource> create(const ResourceRequest& request, const String& charset) const override { - return new ScriptResource(request, charset); + return adoptRefWillBeNoop(new ScriptResource(request, charset)); } }; - bool m_integrityChecked; + ScriptResource(const ResourceRequest&, const String& charset); + + ScriptIntegrityDisposition m_integrityDisposition; IntegrityMetadataSet m_integrityMetadata; CompressibleString m_script;
diff --git a/third_party/WebKit/Source/core/fetch/TextResource.h b/third_party/WebKit/Source/core/fetch/TextResource.h index f180511..c24b261 100644 --- a/third_party/WebKit/Source/core/fetch/TextResource.h +++ b/third_party/WebKit/Source/core/fetch/TextResource.h
@@ -6,7 +6,7 @@ #define TextResource_h #include "core/CoreExport.h" -#include "core/fetch/ResourcePtr.h" +#include "core/fetch/Resource.h" namespace blink {
diff --git a/third_party/WebKit/Source/core/fetch/XSLStyleSheetResource.cpp b/third_party/WebKit/Source/core/fetch/XSLStyleSheetResource.cpp index 54dcf49..1aab297 100644 --- a/third_party/WebKit/Source/core/fetch/XSLStyleSheetResource.cpp +++ b/third_party/WebKit/Source/core/fetch/XSLStyleSheetResource.cpp
@@ -35,20 +35,20 @@ namespace blink { -ResourcePtr<XSLStyleSheetResource> XSLStyleSheetResource::fetchSynchronously(FetchRequest& request, ResourceFetcher* fetcher) +PassRefPtrWillBeRawPtr<XSLStyleSheetResource> XSLStyleSheetResource::fetchSynchronously(FetchRequest& request, ResourceFetcher* fetcher) { request.mutableResourceRequest().setTimeoutInterval(10); request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestContextXSLT); ResourceLoaderOptions options(request.options()); options.synchronousPolicy = RequestSynchronously; request.setOptions(options); - ResourcePtr<XSLStyleSheetResource> resource = toXSLStyleSheetResource(fetcher->requestResource(request, XSLStyleSheetResourceFactory())); + RefPtrWillBeRawPtr<XSLStyleSheetResource> resource = toXSLStyleSheetResource(fetcher->requestResource(request, XSLStyleSheetResourceFactory())); if (resource && resource->m_data) resource->m_sheet = resource->decodedText(); return resource; } -ResourcePtr<XSLStyleSheetResource> XSLStyleSheetResource::fetch(FetchRequest& request, ResourceFetcher* fetcher) +PassRefPtrWillBeRawPtr<XSLStyleSheetResource> XSLStyleSheetResource::fetch(FetchRequest& request, ResourceFetcher* fetcher) { ASSERT(RuntimeEnabledFeatures::xsltEnabled()); request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestContextXSLT);
diff --git a/third_party/WebKit/Source/core/fetch/XSLStyleSheetResource.h b/third_party/WebKit/Source/core/fetch/XSLStyleSheetResource.h index f5a2332e..33687283 100644 --- a/third_party/WebKit/Source/core/fetch/XSLStyleSheetResource.h +++ b/third_party/WebKit/Source/core/fetch/XSLStyleSheetResource.h
@@ -26,7 +26,6 @@ #ifndef XSLStyleSheetResource_h #define XSLStyleSheetResource_h -#include "core/fetch/ResourcePtr.h" #include "core/fetch/StyleSheetResource.h" namespace blink { @@ -36,8 +35,8 @@ class XSLStyleSheetResource final : public StyleSheetResource { public: - static ResourcePtr<XSLStyleSheetResource> fetchSynchronously(FetchRequest&, ResourceFetcher*); - static ResourcePtr<XSLStyleSheetResource> fetch(FetchRequest&, ResourceFetcher*); + static PassRefPtrWillBeRawPtr<XSLStyleSheetResource> fetchSynchronously(FetchRequest&, ResourceFetcher*); + static PassRefPtrWillBeRawPtr<XSLStyleSheetResource> fetch(FetchRequest&, ResourceFetcher*); const String& sheet() const { return m_sheet; } @@ -49,9 +48,9 @@ XSLStyleSheetResourceFactory() : ResourceFactory(Resource::XSLStyleSheet) { } - Resource* create(const ResourceRequest& request, const String& charset) const override + PassRefPtrWillBeRawPtr<Resource> create(const ResourceRequest& request, const String& charset) const override { - return new XSLStyleSheetResource(request, charset); + return adoptRefWillBeNoop(new XSLStyleSheetResource(request, charset)); } }; XSLStyleSheetResource(const ResourceRequest&, const String& charset);
diff --git a/third_party/WebKit/Source/core/frame/ImageBitmap.cpp b/third_party/WebKit/Source/core/frame/ImageBitmap.cpp index 472a59e1..4782eb557 100644 --- a/third_party/WebKit/Source/core/frame/ImageBitmap.cpp +++ b/third_party/WebKit/Source/core/frame/ImageBitmap.cpp
@@ -7,13 +7,32 @@ #include "core/html/HTMLCanvasElement.h" #include "core/html/HTMLVideoElement.h" #include "core/html/ImageData.h" +#include "platform/image-decoders/ImageDecoder.h" #include "third_party/skia/include/core/SkSurface.h" #include "wtf/RefPtr.h" namespace blink { static const char* imageOrientationFlipY = "flipY"; +static const char* imageBitmapOptionNone = "none"; +static void parseOptions(const ImageBitmapOptions& options, bool& imageOrientationFlipYFlag, bool& premultiplyAlphaEnabledFlag) +{ + if (options.imageOrientation() == imageOrientationFlipY) { + imageOrientationFlipYFlag = true; + } else { + imageOrientationFlipYFlag = false; + ASSERT(options.imageOrientation() == imageBitmapOptionNone); + } + if (options.premultiplyAlpha() == imageBitmapOptionNone) { + premultiplyAlphaEnabledFlag = false; + } else { + premultiplyAlphaEnabledFlag = true; + ASSERT(options.premultiplyAlpha() == "default"); + } +} + +// The following two functions are helpers used in cropImage static inline IntRect normalizeRect(const IntRect& rect) { return IntRect(std::min(rect.x(), rect.maxX()), @@ -22,7 +41,13 @@ std::max(rect.height(), -rect.height())); } -// TODO(xidachen): this function needs to be changed later on when implementing premultiplyAlpha option +static bool frameIsValid(const SkBitmap& frameBitmap) +{ + ASSERT(!frameBitmap.isNull() && !frameBitmap.empty()); + return frameBitmap.isImmutable() + && frameBitmap.colorType() == kN32_SkColorType; +} + static SkImage* flipSkImageVertically(SkImage* input) { int width = input->width(); @@ -41,21 +66,57 @@ return SkImage::NewRasterCopy(info, imagePixels.get(), imageRowBytes); } -static PassRefPtr<StaticBitmapImage> cropImage(Image* image, const IntRect& cropRect, bool flipYEnabled) +// TODO(xidachen): the part of read an SkImage to a OwnPtr<uint8_t[]> has been used in multiple places, +// we should write it as a utility function here. +static SkImage* premulSkImageToUnPremul(SkImage* input) +{ + int width = input->width(); + int height = input->height(); + SkImageInfo info = SkImageInfo::Make(width, height, kN32_SkColorType, kUnpremul_SkAlphaType); + OwnPtr<uint8_t[]> dstPixels = adoptArrayPtr(new uint8_t[width * height * info.bytesPerPixel()]); + size_t dstRowBytes = info.bytesPerPixel() * width; + input->readPixels(info, dstPixels.get(), dstRowBytes, 0, 0); + return SkImage::NewRasterCopy(info, dstPixels.get(), dstRowBytes); +} + +static PassRefPtr<StaticBitmapImage> cropImage(Image* image, const IntRect& cropRect, bool flipYEnabled, bool premultiplyAlphaEnabled) { ASSERT(image); IntRect imgRect(IntPoint(), IntSize(image->width(), image->height())); const IntRect srcRect = intersection(imgRect, cropRect); + RefPtr<SkImage> skiaImage = image->imageForCurrentFrame(); + // Attempt to get raw unpremultiplied image data. + if (((!premultiplyAlphaEnabled && !skiaImage->isOpaque()) || !skiaImage) && image->data()) { + // TODO(xidachen): GammaAndColorProfileApplied needs to be changed when working on color-space conversion + OwnPtr<ImageDecoder> decoder(ImageDecoder::create( + *(image->data()), ImageDecoder::AlphaNotPremultiplied, + ImageDecoder::GammaAndColorProfileApplied)); + if (!decoder) + return nullptr; + decoder->setData(image->data(), true); + if (!decoder->frameCount()) + return nullptr; + ImageFrame* frame = decoder->frameBufferAtIndex(0); + if (!frame || frame->status() != ImageFrame::FrameComplete) + return nullptr; + SkBitmap bitmap = frame->bitmap(); + if (!frameIsValid(bitmap)) + return nullptr; + ASSERT(bitmap.isImmutable()); + skiaImage = adoptRef(SkImage::NewFromBitmap(bitmap)); + } + if (cropRect == srcRect) { if (flipYEnabled) - return StaticBitmapImage::create(adoptRef(flipSkImageVertically(image->imageForCurrentFrame()->newSubset(srcRect)))); - return StaticBitmapImage::create(adoptRef(image->imageForCurrentFrame()->newSubset(srcRect))); + return StaticBitmapImage::create(adoptRef(flipSkImageVertically(skiaImage->newSubset(srcRect)))); + return StaticBitmapImage::create(adoptRef(skiaImage->newSubset(srcRect))); } RefPtr<SkSurface> surface = adoptRef(SkSurface::NewRasterN32Premul(cropRect.width(), cropRect.height())); - + // In the case where cropRect doesn't intesect the source image, we return a premultiplied transparent black SkImage. + // If we decide we want to grab meta data from m_image, we have to change this. if (srcRect.isEmpty()) return StaticBitmapImage::create(adoptRef(surface->newImageSnapshot())); @@ -65,18 +126,23 @@ dstLeft = -cropRect.x(); if (cropRect.y() < 0) dstTop = -cropRect.y(); - surface->getCanvas()->drawImage(image->imageForCurrentFrame().get(), dstLeft, dstTop); + surface->getCanvas()->drawImage(skiaImage.get(), dstLeft, dstTop); if (flipYEnabled) - return StaticBitmapImage::create(adoptRef(flipSkImageVertically(surface->newImageSnapshot()))); - return StaticBitmapImage::create(adoptRef(surface->newImageSnapshot())); + skiaImage = adoptRef(flipSkImageVertically(surface->newImageSnapshot())); + else + skiaImage = adoptRef(surface->newImageSnapshot()); + if (premultiplyAlphaEnabled) + return StaticBitmapImage::create(skiaImage); + return StaticBitmapImage::create(adoptRef(premulSkImageToUnPremul(skiaImage.get()))); } ImageBitmap::ImageBitmap(HTMLImageElement* image, const IntRect& cropRect, Document* document, const ImageBitmapOptions& options) { - if (options.imageOrientation() == imageOrientationFlipY) - m_image = cropImage(image->cachedImage()->image(), cropRect, true); - else - m_image = cropImage(image->cachedImage()->image(), cropRect, false); + bool imageOrientationFlipYFlag; + bool premultiplyAlphaEnabledFlag; + parseOptions(options, imageOrientationFlipYFlag, premultiplyAlphaEnabledFlag); + + m_image = cropImage(image->cachedImage()->image(), cropRect, imageOrientationFlipYFlag, premultiplyAlphaEnabledFlag); m_image->setOriginClean(!image->wouldTaintOrigin(document->securityOrigin())); } @@ -104,10 +170,10 @@ ImageBitmap::ImageBitmap(HTMLCanvasElement* canvas, const IntRect& cropRect, const ImageBitmapOptions& options) { ASSERT(canvas->isPaintable()); - if (options.imageOrientation() == imageOrientationFlipY) - m_image = cropImage(canvas->copiedImage(BackBuffer, PreferAcceleration).get(), cropRect, true); - else - m_image = cropImage(canvas->copiedImage(BackBuffer, PreferAcceleration).get(), cropRect, false); + bool imageOrientationFlipYFlag; + bool premultiplyAlphaEnabledFlag; + parseOptions(options, imageOrientationFlipYFlag, premultiplyAlphaEnabledFlag); + m_image = cropImage(canvas->copiedImage(BackBuffer, PreferAcceleration).get(), cropRect, imageOrientationFlipYFlag, premultiplyAlphaEnabledFlag); m_image->setOriginClean(canvas->originClean()); } @@ -138,19 +204,19 @@ ImageBitmap::ImageBitmap(ImageBitmap* bitmap, const IntRect& cropRect, const ImageBitmapOptions& options) { - if (options.imageOrientation() == imageOrientationFlipY) - m_image = cropImage(bitmap->bitmapImage(), cropRect, true); - else - m_image = cropImage(bitmap->bitmapImage(), cropRect, false); + bool imageOrientationFlipYFlag; + bool premultiplyAlphaEnabledFlag; + parseOptions(options, imageOrientationFlipYFlag, premultiplyAlphaEnabledFlag); + m_image = cropImage(bitmap->bitmapImage(), cropRect, imageOrientationFlipYFlag, true); m_image->setOriginClean(bitmap->originClean()); } ImageBitmap::ImageBitmap(PassRefPtr<StaticBitmapImage> image, const IntRect& cropRect, const ImageBitmapOptions& options) { - if (options.imageOrientation() == imageOrientationFlipY) - m_image = cropImage(image.get(), cropRect, true); - else - m_image = cropImage(image.get(), cropRect, false); + bool imageOrientationFlipYFlag; + bool premultiplyAlphaEnabledFlag; + parseOptions(options, imageOrientationFlipYFlag, premultiplyAlphaEnabledFlag); + m_image = cropImage(image.get(), cropRect, imageOrientationFlipYFlag, premultiplyAlphaEnabledFlag); m_image->setOriginClean(image->originClean()); }
diff --git a/third_party/WebKit/Source/core/frame/ImageBitmapTest.cpp b/third_party/WebKit/Source/core/frame/ImageBitmapTest.cpp index 0b6aa4ae..17aae33 100644 --- a/third_party/WebKit/Source/core/frame/ImageBitmapTest.cpp +++ b/third_party/WebKit/Source/core/frame/ImageBitmapTest.cpp
@@ -36,7 +36,6 @@ #include "core/fetch/ImageResource.h" #include "core/fetch/MemoryCache.h" #include "core/fetch/MockImageResourceClient.h" -#include "core/fetch/ResourcePtr.h" #include "core/html/HTMLCanvasElement.h" #include "core/html/HTMLImageElement.h" #include "core/html/HTMLVideoElement.h" @@ -81,21 +80,23 @@ TEST_F(ImageBitmapTest, ImageResourceConsistency) { + const ImageBitmapOptions defaultOptions; RefPtrWillBeRawPtr<HTMLImageElement> imageElement = HTMLImageElement::create(*Document::create().get()); - imageElement->setImageResource(new ImageResource(StaticBitmapImage::create(m_image).get())); + RefPtrWillBeRawPtr<ImageResource> image = ImageResource::create(StaticBitmapImage::create(m_image).get()); + imageElement->setImageResource(image.get()); RefPtrWillBeRawPtr<ImageBitmap> imageBitmapNoCrop = ImageBitmap::create(imageElement.get(), IntRect(0, 0, m_image->width(), m_image->height()), - &(imageElement->document())); + &(imageElement->document()), defaultOptions); RefPtrWillBeRawPtr<ImageBitmap> imageBitmapInteriorCrop = ImageBitmap::create(imageElement.get(), IntRect(m_image->width() / 2, m_image->height() / 2, m_image->width() / 2, m_image->height() / 2), - &(imageElement->document())); + &(imageElement->document()), defaultOptions); RefPtrWillBeRawPtr<ImageBitmap> imageBitmapExteriorCrop = ImageBitmap::create(imageElement.get(), IntRect(-m_image->width() / 2, -m_image->height() / 2, m_image->width(), m_image->height()), - &(imageElement->document())); + &(imageElement->document()), defaultOptions); RefPtrWillBeRawPtr<ImageBitmap> imageBitmapOutsideCrop = ImageBitmap::create(imageElement.get(), IntRect(-m_image->width(), -m_image->height(), m_image->width(), m_image->height()), - &(imageElement->document())); + &(imageElement->document()), defaultOptions); ASSERT_EQ(imageBitmapNoCrop->bitmapImage()->imageForCurrentFrame(), imageElement->cachedImage()->image()->imageForCurrentFrame()); ASSERT_NE(imageBitmapInteriorCrop->bitmapImage()->imageForCurrentFrame(), imageElement->cachedImage()->image()->imageForCurrentFrame()); @@ -110,22 +111,22 @@ TEST_F(ImageBitmapTest, ImageBitmapLiveResourcePriority) { RefPtrWillBePersistent<HTMLImageElement> imageNoCrop = HTMLImageElement::create(*Document::create().get()); - ResourcePtr<ImageResource> cachedImageNoCrop = new ImageResource(ResourceRequest("http://foo.com/1"), + RefPtrWillBeRawPtr<ImageResource> cachedImageNoCrop = ImageResource::create(ResourceRequest("http://foo.com/1"), StaticBitmapImage::create(m_image).get()); imageNoCrop->setImageResource(cachedImageNoCrop.get()); RefPtrWillBePersistent<HTMLImageElement> imageInteriorCrop = HTMLImageElement::create(*Document::create().get()); - ResourcePtr<ImageResource> cachedImageInteriorCrop = new ImageResource(ResourceRequest("http://foo.com/2"), + RefPtrWillBeRawPtr<ImageResource> cachedImageInteriorCrop = ImageResource::create(ResourceRequest("http://foo.com/2"), StaticBitmapImage::create(m_image).get()); imageInteriorCrop->setImageResource(cachedImageInteriorCrop.get()); RefPtrWillBePersistent<HTMLImageElement> imageExteriorCrop = HTMLImageElement::create(*Document::create().get()); - ResourcePtr<ImageResource> cachedImageExteriorCrop = new ImageResource(ResourceRequest("http://foo.com/3"), + RefPtrWillBeRawPtr<ImageResource> cachedImageExteriorCrop = ImageResource::create(ResourceRequest("http://foo.com/3"), StaticBitmapImage::create(m_image).get()); imageExteriorCrop->setImageResource(cachedImageExteriorCrop.get()); RefPtrWillBePersistent<HTMLImageElement> imageOutsideCrop = HTMLImageElement::create(*Document::create().get()); - ResourcePtr<ImageResource> cachedImageOutsideCrop = new ImageResource(ResourceRequest("http://foo.com/4"), + RefPtrWillBeRawPtr<ImageResource> cachedImageOutsideCrop = ImageResource::create(ResourceRequest("http://foo.com/4"), StaticBitmapImage::create(m_image).get()); imageOutsideCrop->setImageResource(cachedImageOutsideCrop.get()); @@ -149,22 +150,23 @@ ASSERT_EQ(memoryCache()->priority(imageExteriorCrop->cachedImage()), MemoryCacheLiveResourcePriorityLow); ASSERT_EQ(memoryCache()->priority(imageOutsideCrop->cachedImage()), MemoryCacheLiveResourcePriorityLow); + const ImageBitmapOptions defaultOptions; RefPtrWillBePersistent<ImageBitmap> imageBitmapInteriorCrop = ImageBitmap::create(imageInteriorCrop.get(), IntRect(m_image->width() / 2, m_image->height() / 2, m_image->width(), m_image->height()), - &(imageInteriorCrop->document())); + &(imageInteriorCrop->document()), defaultOptions); { RefPtrWillBePersistent<ImageBitmap> imageBitmapNoCrop = ImageBitmap::create(imageNoCrop.get(), IntRect(0, 0, m_image->width(), m_image->height()), - &(imageNoCrop->document())); + &(imageNoCrop->document()), defaultOptions); RefPtrWillBePersistent<ImageBitmap> imageBitmapInteriorCrop2 = ImageBitmap::create(imageInteriorCrop.get(), IntRect(m_image->width() / 2, m_image->height() / 2, m_image->width(), m_image->height()), - &(imageInteriorCrop->document())); + &(imageInteriorCrop->document()), defaultOptions); RefPtrWillBePersistent<ImageBitmap> imageBitmapExteriorCrop = ImageBitmap::create(imageExteriorCrop.get(), IntRect(-m_image->width() / 2, -m_image->height() / 2, m_image->width(), m_image->height()), - &(imageExteriorCrop->document())); + &(imageExteriorCrop->document()), defaultOptions); RefPtrWillBePersistent<ImageBitmap> imageBitmapOutsideCrop = ImageBitmap::create(imageOutsideCrop.get(), IntRect(-m_image->width(), -m_image->height(), m_image->width(), m_image->height()), - &(imageOutsideCrop->document())); + &(imageOutsideCrop->document()), defaultOptions); // Images are not referenced by ImageBitmap anymore, so always CacheLiveResourcePriorityLow ASSERT_EQ(memoryCache()->priority(imageNoCrop->cachedImage()), MemoryCacheLiveResourcePriorityLow); @@ -191,16 +193,17 @@ TEST_F(ImageBitmapTest, ImageBitmapSourceChanged) { RefPtrWillBeRawPtr<HTMLImageElement> image = HTMLImageElement::create(*Document::create().get()); - ResourcePtr<ImageResource> originalImageResource = new ImageResource( + RefPtrWillBeRawPtr<ImageResource> originalImageResource = ImageResource::create( StaticBitmapImage::create(m_image).get()); image->setImageResource(originalImageResource.get()); + const ImageBitmapOptions defaultOptions; RefPtrWillBeRawPtr<ImageBitmap> imageBitmap = ImageBitmap::create(image.get(), IntRect(0, 0, m_image->width(), m_image->height()), - &(image->document())); + &(image->document()), defaultOptions); ASSERT_EQ(imageBitmap->bitmapImage()->imageForCurrentFrame(), originalImageResource->image()->imageForCurrentFrame()); - ResourcePtr<ImageResource> newImageResource = new ImageResource( + RefPtrWillBeRawPtr<ImageResource> newImageResource = ImageResource::create( StaticBitmapImage::create(m_image2).get()); image->setImageResource(newImageResource.get());
diff --git a/third_party/WebKit/Source/core/frame/SubresourceIntegrityTest.cpp b/third_party/WebKit/Source/core/frame/SubresourceIntegrityTest.cpp index 02d673d..c7c1f87 100644 --- a/third_party/WebKit/Source/core/frame/SubresourceIntegrityTest.cpp +++ b/third_party/WebKit/Source/core/frame/SubresourceIntegrityTest.cpp
@@ -8,7 +8,6 @@ #include "core/dom/Document.h" #include "core/fetch/IntegrityMetadata.h" #include "core/fetch/Resource.h" -#include "core/fetch/ResourcePtr.h" #include "core/html/HTMLScriptElement.h" #include "platform/Crypto.h" #include "platform/weborigin/KURL.h" @@ -160,7 +159,7 @@ EXPECT_FALSE(SubresourceIntegrity::CheckSubresourceIntegrity(*scriptElement, script, size, url, *createTestResource(url, requestorUrl, corsStatus).get())); } - ResourcePtr<Resource> createTestResource(const KURL& url, const KURL& allowOriginUrl, CorsStatus corsStatus) + PassRefPtrWillBeRawPtr<Resource> createTestResource(const KURL& url, const KURL& allowOriginUrl, CorsStatus corsStatus) { ResourceResponse response; response.setURL(url); @@ -169,7 +168,7 @@ response.setHTTPHeaderField("access-control-allow-origin", SecurityOrigin::create(allowOriginUrl)->toAtomicString()); response.setHTTPHeaderField("access-control-allow-credentials", "true"); } - ResourcePtr<Resource> resource = new Resource(ResourceRequest(response.url()), Resource::Raw); + RefPtrWillBeRawPtr<Resource> resource = Resource::create(ResourceRequest(response.url()), Resource::Raw); resource->setResponse(response); return resource; }
diff --git a/third_party/WebKit/Source/core/frame/VisualViewport.cpp b/third_party/WebKit/Source/core/frame/VisualViewport.cpp index 4f8a31d..bb36c38 100644 --- a/third_party/WebKit/Source/core/frame/VisualViewport.cpp +++ b/third_party/WebKit/Source/core/frame/VisualViewport.cpp
@@ -334,6 +334,10 @@ void VisualViewport::initializeScrollbars() { + // Do nothing if not attached to layer tree yet - will initialize upon attach. + if (!m_innerViewportContainerLayer) + return; + if (visualViewportSuppliesScrollbars()) { if (!m_overlayScrollbarHorizontal->parent()) m_innerViewportContainerLayer->addChild(m_overlayScrollbarHorizontal.get());
diff --git a/third_party/WebKit/Source/core/html/HTMLAreaElement.cpp b/third_party/WebKit/Source/core/html/HTMLAreaElement.cpp index 9cff350..cb3f068 100644 --- a/third_party/WebKit/Source/core/html/HTMLAreaElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLAreaElement.cpp
@@ -220,7 +220,7 @@ void HTMLAreaElement::updateFocusAppearance(SelectionBehaviorOnFocus selectionBehavior) { - document().updateLayoutTreeIgnorePendingStylesheets(); + document().updateLayoutTreeForNodeIfNeeded(this); if (!isFocusable()) return;
diff --git a/third_party/WebKit/Source/core/html/HTMLAreaElement.idl b/third_party/WebKit/Source/core/html/HTMLAreaElement.idl index 2abf718..647d346 100644 --- a/third_party/WebKit/Source/core/html/HTMLAreaElement.idl +++ b/third_party/WebKit/Source/core/html/HTMLAreaElement.idl
@@ -28,6 +28,7 @@ // FIXME: ping should be a DOMSettableTokenList. [Reflect] attribute DOMString ping; // FIXME: download, rel, relList are missing + [RuntimeEnabled=ReferrerPolicyAttribute, Reflect, ReflectOnly=("","no-referrer","origin","no-referrer-when-downgrade","origin-when-cross-origin","unsafe-url"), ReflectMissing="", ReflectInvalid=""] attribute DOMString referrerpolicy; // obsolete members // https://html.spec.whatwg.org/#HTMLAreaElement-partial
diff --git a/third_party/WebKit/Source/core/html/HTMLCollection.h b/third_party/WebKit/Source/core/html/HTMLCollection.h index 35f4b549..8ea1e4446 100644 --- a/third_party/WebKit/Source/core/html/HTMLCollection.h +++ b/third_party/WebKit/Source/core/html/HTMLCollection.h
@@ -117,7 +117,9 @@ void setNamedItemCache(PassOwnPtrWillBeRawPtr<NamedItemCache> cache) const { ASSERT(!m_namedItemCache); - document().registerNodeListWithIdNameCache(this); + // Do not repeat registration for the same invalidation type. + if (invalidationType() != InvalidateOnIdNameAttrChange) + document().registerNodeListWithIdNameCache(this); m_namedItemCache = std::move(cache); } @@ -144,7 +146,9 @@ void unregisterIdNameCacheFromDocument(Document& document) const { ASSERT(hasValidIdNameCache()); - document.unregisterNodeListWithIdNameCache(this); + // Do not repeat unregistration for the same invalidation type. + if (invalidationType() != InvalidateOnIdNameAttrChange) + document.unregisterNodeListWithIdNameCache(this); } const unsigned m_overridesItemAfter : 1;
diff --git a/third_party/WebKit/Source/core/html/HTMLImageElement.cpp b/third_party/WebKit/Source/core/html/HTMLImageElement.cpp index 98ac3fb3..b547215 100644 --- a/third_party/WebKit/Source/core/html/HTMLImageElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLImageElement.cpp
@@ -380,8 +380,8 @@ if (m_isFallbackImage) { float deviceScaleFactor = blink::deviceScaleFactor(layoutImage->frame()); std::pair<Image*, float> brokenImageAndImageScaleFactor = ImageResource::brokenImage(deviceScaleFactor); - ImageResource* newImageResource = new ImageResource(brokenImageAndImageScaleFactor.first); - layoutImage->imageResource()->setImageResource(newImageResource); + RefPtrWillBeRawPtr<ImageResource> newImageResource = ImageResource::create(brokenImageAndImageScaleFactor.first); + layoutImage->imageResource()->setImageResource(newImageResource.get()); } if (layoutImageResource->hasImage()) return;
diff --git a/third_party/WebKit/Source/core/html/HTMLLabelElement.cpp b/third_party/WebKit/Source/core/html/HTMLLabelElement.cpp index 042e3a1a..52cadd1 100644 --- a/third_party/WebKit/Source/core/html/HTMLLabelElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLLabelElement.cpp
@@ -203,7 +203,7 @@ void HTMLLabelElement::focus(const FocusParams& params) { - document().updateLayoutTreeIgnorePendingStylesheets(); + document().updateLayoutTreeForNodeIfNeeded(this); if (isFocusable()) { HTMLElement::focus(params); return;
diff --git a/third_party/WebKit/Source/core/html/HTMLLegendElement.cpp b/third_party/WebKit/Source/core/html/HTMLLegendElement.cpp index ed93f8e..7d0f0a4 100644 --- a/third_party/WebKit/Source/core/html/HTMLLegendElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLLegendElement.cpp
@@ -55,7 +55,7 @@ void HTMLLegendElement::focus(const FocusParams& params) { - document().updateLayoutTreeIgnorePendingStylesheets(); + document().updateLayoutTreeForNodeIfNeeded(this); if (isFocusable()) { Element::focus(params); return;
diff --git a/third_party/WebKit/Source/core/html/HTMLSlotElement.cpp b/third_party/WebKit/Source/core/html/HTMLSlotElement.cpp index 1ecda59f..e6e061f 100644 --- a/third_party/WebKit/Source/core/html/HTMLSlotElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLSlotElement.cpp
@@ -68,6 +68,8 @@ // update the distribution code so it considers a document tree too. clearDistribution(); for (Node& child : NodeTraversal::childrenOf(*this)) { + if (!child.isSlotAssignable()) + continue; if (isHTMLSlotElement(child)) m_distributedNodes.appendVector(toHTMLSlotElement(child).getDistributedNodes()); else @@ -204,6 +206,8 @@ if (!m_distributedNodes.isEmpty()) return; for (auto& child : NodeTraversal::childrenOf(*this)) { + if (!child.isSlotAssignable()) + continue; // Insertion points are not supported as slots fallback if (isActiveInsertionPoint(child)) continue;
diff --git a/third_party/WebKit/Source/core/html/imports/HTMLImportLoader.cpp b/third_party/WebKit/Source/core/html/imports/HTMLImportLoader.cpp index 3b3665d..4cca829 100644 --- a/third_party/WebKit/Source/core/html/imports/HTMLImportLoader.cpp +++ b/third_party/WebKit/Source/core/html/imports/HTMLImportLoader.cpp
@@ -69,7 +69,7 @@ clearResource(); } -void HTMLImportLoader::startLoading(const ResourcePtr<RawResource>& resource) +void HTMLImportLoader::startLoading(const PassRefPtrWillBeRawPtr<RawResource>& resource) { setResource(resource); }
diff --git a/third_party/WebKit/Source/core/html/imports/HTMLImportLoader.h b/third_party/WebKit/Source/core/html/imports/HTMLImportLoader.h index 412f9b1..1351f2d 100644 --- a/third_party/WebKit/Source/core/html/imports/HTMLImportLoader.h +++ b/third_party/WebKit/Source/core/html/imports/HTMLImportLoader.h
@@ -86,7 +86,7 @@ bool hasError() const { return m_state == StateError; } bool shouldBlockScriptExecution() const; - void startLoading(const ResourcePtr<RawResource>&); + void startLoading(const PassRefPtrWillBeRawPtr<RawResource>&); // Tells the loader that all of the import's stylesheets finished // loading.
diff --git a/third_party/WebKit/Source/core/html/imports/HTMLImportsController.cpp b/third_party/WebKit/Source/core/html/imports/HTMLImportsController.cpp index 733d5f1..ade5d0e 100644 --- a/third_party/WebKit/Source/core/html/imports/HTMLImportsController.cpp +++ b/third_party/WebKit/Source/core/html/imports/HTMLImportsController.cpp
@@ -125,7 +125,7 @@ } request.setCrossOriginAccessControl(master()->securityOrigin(), CrossOriginAttributeAnonymous); - ResourcePtr<RawResource> resource = RawResource::fetchImport(request, parent->document()->fetcher()); + RefPtrWillBeRawPtr<RawResource> resource = RawResource::fetchImport(request, parent->document()->fetcher()); if (!resource) return nullptr;
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLScriptRunner.cpp b/third_party/WebKit/Source/core/html/parser/HTMLScriptRunner.cpp index 20282c6..e9862a31 100644 --- a/third_party/WebKit/Source/core/html/parser/HTMLScriptRunner.cpp +++ b/third_party/WebKit/Source/core/html/parser/HTMLScriptRunner.cpp
@@ -156,12 +156,12 @@ if (!m_document) return; - m_parserBlockingScript->stopWatchingForLoad(this); + m_parserBlockingScript->stopWatchingForLoad(); m_parserBlockingScript->releaseElementAndClear(); while (!m_scriptsToExecuteAfterParsing.isEmpty()) { OwnPtrWillBeRawPtr<PendingScript> pendingScript = m_scriptsToExecuteAfterParsing.takeFirst(); - pendingScript->stopWatchingForLoad(this); + pendingScript->stopWatchingForLoad(); pendingScript->releaseElementAndClear(); } m_document = nullptr; @@ -193,7 +193,7 @@ ScriptSourceCode sourceCode = pendingScript->getSource(documentURLForScriptExecution(m_document), errorOccurred); // Stop watching loads before executeScript to prevent recursion if the script reloads itself. - pendingScript->stopWatchingForLoad(this); + pendingScript->stopWatchingForLoad(); if (!isExecutingScript()) { Microtask::performCheckpoint(V8PerIsolateData::mainThreadIsolate()); @@ -239,13 +239,13 @@ void HTMLScriptRunner::stopWatchingResourceForLoad(Resource* resource) { if (m_parserBlockingScript->resource() == resource) { - m_parserBlockingScript->stopWatchingForLoad(this); + m_parserBlockingScript->stopWatchingForLoad(); m_parserBlockingScript->releaseElementAndClear(); return; } for (auto& script : m_scriptsToExecuteAfterParsing) { if (script->resource() == resource) { - script->stopWatchingForLoad(this); + script->stopWatchingForLoad(); script->releaseElementAndClear(); return; } @@ -390,7 +390,7 @@ ASSERT(!pendingScript->element()); pendingScript->setElement(script); // This should correctly return 0 for empty or invalid srcValues. - ScriptResource* resource = toScriptLoaderIfPossible(script)->resource().get(); + ScriptResource* resource = toScriptLoaderIfPossible(script)->resource(); if (!resource) { notImplemented(); // Dispatch error event. return false;
diff --git a/third_party/WebKit/Source/core/html/shadow/DateTimeEditElement.cpp b/third_party/WebKit/Source/core/html/shadow/DateTimeEditElement.cpp index 5789ab2..e9d1fb2 100644 --- a/third_party/WebKit/Source/core/html/shadow/DateTimeEditElement.cpp +++ b/third_party/WebKit/Source/core/html/shadow/DateTimeEditElement.cpp
@@ -573,7 +573,7 @@ if (oldFocusedElement && oldFocusedElement->isDateTimeFieldElement()) { DateTimeFieldElement* oldFocusedField = static_cast<DateTimeFieldElement*>(oldFocusedElement); size_t index = fieldIndexOf(*oldFocusedField); - document().updateLayoutTreeIgnorePendingStylesheets(); + document().updateLayoutTreeForNodeIfNeeded(oldFocusedField); if (index != invalidFieldIndex && oldFocusedField->isFocusable()) { oldFocusedField->focus(); return;
diff --git a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapOptions.idl b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapOptions.idl index f4dac660..e8c231da 100644 --- a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapOptions.idl +++ b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapOptions.idl
@@ -2,8 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -enum ImageOrientation { "none", "flipY" }; +[RuntimeEnabled=ExperimentalCanvasFeatures] enum ImageOrientation { "none", "flipY" }; +[RuntimeEnabled=ExperimentalCanvasFeatures] enum PremultiplyAlpha { "none", "default" }; dictionary ImageBitmapOptions { - boolean premuiltiplyAlpha; - ImageOrientation imageOrientation = "none"; + [RuntimeEnabled=ExperimentalCanvasFeatures] PremultiplyAlpha premultiplyAlpha = "default"; + [RuntimeEnabled=ExperimentalCanvasFeatures] ImageOrientation imageOrientation = "none"; };
diff --git a/third_party/WebKit/Source/core/input/EventHandler.cpp b/third_party/WebKit/Source/core/input/EventHandler.cpp index e14f7c15..762216c4 100644 --- a/third_party/WebKit/Source/core/input/EventHandler.cpp +++ b/third_party/WebKit/Source/core/input/EventHandler.cpp
@@ -3561,7 +3561,7 @@ event->setUnderlyingEvent(underlyingEvent); target->dispatchEvent(event); - return event->defaultHandled(); + return event->defaultHandled() || event->defaultPrevented(); } void EventHandler::defaultTextInputEventHandler(TextEvent* event)
diff --git a/third_party/WebKit/Source/core/inspector/AsyncCallTracker.cpp b/third_party/WebKit/Source/core/inspector/AsyncCallTracker.cpp index eab47937..e0212020 100644 --- a/third_party/WebKit/Source/core/inspector/AsyncCallTracker.cpp +++ b/third_party/WebKit/Source/core/inspector/AsyncCallTracker.cpp
@@ -105,9 +105,9 @@ HashSet<int> m_intervalTimerIds; AsyncOperationMap<int> m_timerCallChains; AsyncOperationMap<int> m_animationFrameCallChains; - AsyncOperationMap<RawPtrWillBeMember<Event> > m_eventCallChains; - AsyncOperationMap<RawPtrWillBeMember<EventTarget> > m_xhrCallChains; - AsyncOperationMap<RawPtrWillBeMember<MutationObserver> > m_mutationObserverCallChains; + AsyncOperationMap<RawPtrWillBeMember<Event>> m_eventCallChains; + AsyncOperationMap<RawPtrWillBeMember<EventTarget>> m_xhrCallChains; + AsyncOperationMap<RawPtrWillBeMember<MutationObserver>> m_mutationObserverCallChains; AsyncOperationMap<ExecutionContextTask*> m_executionContextTaskCallChains; AsyncOperationMap<int> m_asyncOperations;
diff --git a/third_party/WebKit/Source/core/inspector/AsyncCallTracker.h b/third_party/WebKit/Source/core/inspector/AsyncCallTracker.h index a03218d7..14eb127 100644 --- a/third_party/WebKit/Source/core/inspector/AsyncCallTracker.h +++ b/third_party/WebKit/Source/core/inspector/AsyncCallTracker.h
@@ -33,7 +33,7 @@ #include "core/CoreExport.h" #include "core/inspector/InstrumentingAgents.h" -#include "core/inspector/v8/V8DebuggerAgent.h" +#include "core/inspector/v8/public/V8DebuggerAgent.h" #include "platform/heap/Handle.h" #include "wtf/Forward.h" #include "wtf/HashMap.h"
diff --git a/third_party/WebKit/Source/core/inspector/AsyncOperationMap.h b/third_party/WebKit/Source/core/inspector/AsyncOperationMap.h index 0ccc5e6..6ef642b 100644 --- a/third_party/WebKit/Source/core/inspector/AsyncOperationMap.h +++ b/third_party/WebKit/Source/core/inspector/AsyncOperationMap.h
@@ -5,7 +5,7 @@ #ifndef AsyncOperationMap_h #define AsyncOperationMap_h -#include "core/inspector/v8/V8DebuggerAgent.h" +#include "core/inspector/v8/public/V8DebuggerAgent.h" #include "platform/heap/Handle.h" #include "wtf/HashMap.h" #include "wtf/PassRefPtr.h"
diff --git a/third_party/WebKit/Source/core/inspector/CodeGeneratorInspector.py b/third_party/WebKit/Source/core/inspector/CodeGeneratorInspector.py index 43091f3..5944bb3 100755 --- a/third_party/WebKit/Source/core/inspector/CodeGeneratorInspector.py +++ b/third_party/WebKit/Source/core/inspector/CodeGeneratorInspector.py
@@ -343,10 +343,6 @@ return TypeModel.Array -def replace_right_shift(input_str): - return input_str.replace(">>", "> >") - - class CommandReturnPassModel: class ByReference: def __init__(self, var_type, set_condition): @@ -431,10 +427,10 @@ set_condition = "%s" else: set_condition = None - return CommandReturnPassModel.ByReference(replace_right_shift("RefPtr<%s>" % self.class_name), set_condition) + return CommandReturnPassModel.ByReference("RefPtr<%s>" % self.class_name, set_condition) def get_input_param_type_text(self): - return replace_right_shift("PassRefPtr<%s>" % self.class_name) + return "PassRefPtr<%s>" % self.class_name @staticmethod def get_event_setter_expression_pattern(): @@ -1303,7 +1299,7 @@ @classmethod def get_array_item_c_type_text(cls): - return replace_right_shift("TypeBuilder::Array<%s>" % cls.resolve_data_.item_type_binding.get_array_item_c_type_text()) + return "TypeBuilder::Array<%s>" % cls.resolve_data_.item_type_binding.get_array_item_c_type_text() @staticmethod def get_setter_value_expression_pattern(): @@ -1786,7 +1782,7 @@ callback_writer.newline("class " + callback_name + " : public CallbackBase {\n") callback_writer.newline("public:\n") - callback_writer.newline(" " + callback_name + "(PassRefPtrWillBeRawPtr<InspectorBackendDispatcherImpl>, int sessionId, int id);\n") + callback_writer.newline(" " + callback_name + "(PassRefPtr<InspectorBackendDispatcherImpl>, int sessionId, int id);\n") callback_writer.newline(" CORE_EXPORT void sendSuccess(" + ", ".join(decl_parameter_list) + ");\n") error_part_writer = callback_writer.insert_writer("") callback_writer.newline("};\n") @@ -1807,12 +1803,12 @@ ad_hoc_type_output.append(callback_output) - method_out_code += " RefPtrWillBeRawPtr<" + agent_interface_name + "::" + callback_name + "> callback = adoptRefWillBeNoop(new " + agent_interface_name + "::" + callback_name + "(this, sessionId, callId));\n" + method_out_code += " RefPtr<" + agent_interface_name + "::" + callback_name + "> callback = adoptRef(new " + agent_interface_name + "::" + callback_name + "(this, sessionId, callId));\n" agent_call_param_list.append("callback") normal_response_cook_text += " if (!error.length()) \n" normal_response_cook_text += " return;\n" normal_response_cook_text += " callback->disable();\n" - backend_agent_interface_list.append(", PassRefPtrWillBeRawPtr<%s> callback" % callback_name) + backend_agent_interface_list.append(", PassRefPtr<%s> callback" % callback_name) else: if "returns" in json_command: method_out_code += "\n"
diff --git a/third_party/WebKit/Source/core/inspector/CodeGeneratorInspectorStrings.py b/third_party/WebKit/Source/core/inspector/CodeGeneratorInspectorStrings.py index c3e70d1..9404f3b0 100644 --- a/third_party/WebKit/Source/core/inspector/CodeGeneratorInspectorStrings.py +++ b/third_party/WebKit/Source/core/inspector/CodeGeneratorInspectorStrings.py
@@ -68,8 +68,8 @@ } """) -callback_main_methods = ( -"""InspectorBackendDispatcher::$agentName::$callbackName::$callbackName(PassRefPtrWillBeRawPtr<InspectorBackendDispatcherImpl> backendImpl, int sessionId, int id) : CallbackBase(backendImpl, sessionId, id) {} +callback_main_methods = (""" +InspectorBackendDispatcher::$agentName::$callbackName::$callbackName(PassRefPtr<InspectorBackendDispatcherImpl> backendImpl, int sessionId, int id) : CallbackBase(backendImpl, sessionId, id) {} void InspectorBackendDispatcher::$agentName::$callbackName::sendSuccess($parameters) { @@ -142,17 +142,15 @@ class InspectorBackendDispatcherImpl; -class CORE_EXPORT InspectorBackendDispatcher: public RefCountedWillBeGarbageCollectedFinalized<InspectorBackendDispatcher> { +class CORE_EXPORT InspectorBackendDispatcher: public RefCounted<InspectorBackendDispatcher> { public: - static PassRefPtrWillBeRawPtr<InspectorBackendDispatcher> create(InspectorFrontendChannel* inspectorFrontendChannel); + static PassRefPtr<InspectorBackendDispatcher> create(InspectorFrontendChannel* inspectorFrontendChannel); virtual ~InspectorBackendDispatcher() { } - DEFINE_INLINE_VIRTUAL_TRACE() { } - class CORE_EXPORT CallbackBase: public RefCountedWillBeGarbageCollectedFinalized<CallbackBase> { + class CORE_EXPORT CallbackBase: public RefCounted<CallbackBase> { public: - CallbackBase(PassRefPtrWillBeRawPtr<InspectorBackendDispatcherImpl> backendImpl, int sessionId, int id); + CallbackBase(PassRefPtr<InspectorBackendDispatcherImpl> backendImpl, int sessionId, int id); virtual ~CallbackBase(); - DECLARE_VIRTUAL_TRACE(); void sendFailure(const ErrorString&); bool isActive(); @@ -162,7 +160,7 @@ private: void disable() { m_alreadySent = true; } - RefPtrWillBeMember<InspectorBackendDispatcherImpl> m_backendImpl; + RefPtr<InspectorBackendDispatcherImpl> m_backendImpl; int m_sessionId; int m_id; bool m_alreadySent; @@ -303,15 +301,15 @@ $methods -PassRefPtrWillBeRawPtr<InspectorBackendDispatcher> InspectorBackendDispatcher::create(InspectorFrontendChannel* inspectorFrontendChannel) +PassRefPtr<InspectorBackendDispatcher> InspectorBackendDispatcher::create(InspectorFrontendChannel* inspectorFrontendChannel) { - return adoptRefWillBeNoop(new InspectorBackendDispatcherImpl(inspectorFrontendChannel)); + return adoptRef(new InspectorBackendDispatcherImpl(inspectorFrontendChannel)); } void InspectorBackendDispatcherImpl::dispatch(int sessionId, const String& message) { - RefPtrWillBeRawPtr<InspectorBackendDispatcher> protect(this); + RefPtr<InspectorBackendDispatcher> protect(this); int callId = 0; RefPtr<JSONValue> parsedMessage = parseJSON(message); ASSERT(parsedMessage); @@ -464,16 +462,11 @@ return true; } -InspectorBackendDispatcher::CallbackBase::CallbackBase(PassRefPtrWillBeRawPtr<InspectorBackendDispatcherImpl> backendImpl, int sessionId, int id) +InspectorBackendDispatcher::CallbackBase::CallbackBase(PassRefPtr<InspectorBackendDispatcherImpl> backendImpl, int sessionId, int id) : m_backendImpl(backendImpl), m_sessionId(sessionId), m_id(id), m_alreadySent(false) {} InspectorBackendDispatcher::CallbackBase::~CallbackBase() {} -DEFINE_TRACE(InspectorBackendDispatcher::CallbackBase) -{ - visitor->trace(m_backendImpl); -} - void InspectorBackendDispatcher::CallbackBase::sendFailure(const ErrorString& error) { ASSERT(error.length()); @@ -603,12 +596,12 @@ ArrayItemHelper<T>::Traits::pushRaw(this->openAccessors(), value); } - static PassRefPtr<Array<T> > create() + static PassRefPtr<Array<T>> create() { return adoptRef(new Array<T>()); } - static PassRefPtr<Array<T> > runtimeCast(PassRefPtr<JSONValue> value) + static PassRefPtr<Array<T>> runtimeCast(PassRefPtr<JSONValue> value) { RefPtr<JSONArray> array; bool castRes = value->asArray(&array); @@ -620,7 +613,7 @@ return static_cast<Array<T>*>(static_cast<JSONArrayBase*>(array.get())); } - void concat(PassRefPtr<Array<T> > array) + void concat(PassRefPtr<Array<T>> array) { return ArrayItemHelper<T>::Traits::concat(this->openAccessors(), array->openAccessors()); } @@ -778,9 +771,9 @@ }; template<typename T> -struct ArrayItemHelper<TypeBuilder::Array<T> > { +struct ArrayItemHelper<TypeBuilder::Array<T>> { struct Traits { - static void pushRefPtr(JSONArray* array, PassRefPtr<TypeBuilder::Array<T> > value) + static void pushRefPtr(JSONArray* array, PassRefPtr<TypeBuilder::Array<T>> value) { array->pushValue(value); }
diff --git a/third_party/WebKit/Source/core/inspector/ConsoleMessageStorage.h b/third_party/WebKit/Source/core/inspector/ConsoleMessageStorage.h index 096f37a..e1e1ddc 100644 --- a/third_party/WebKit/Source/core/inspector/ConsoleMessageStorage.h +++ b/third_party/WebKit/Source/core/inspector/ConsoleMessageStorage.h
@@ -44,7 +44,7 @@ ConsoleMessageStorage(); int m_expiredCount; - WillBeHeapDeque<RefPtrWillBeMember<ConsoleMessage> > m_messages; + WillBeHeapDeque<RefPtrWillBeMember<ConsoleMessage>> m_messages; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/inspector/DOMPatchSupport.cpp b/third_party/WebKit/Source/core/inspector/DOMPatchSupport.cpp index e7f9873..2d0e177 100644 --- a/third_party/WebKit/Source/core/inspector/DOMPatchSupport.cpp +++ b/third_party/WebKit/Source/core/inspector/DOMPatchSupport.cpp
@@ -232,7 +232,7 @@ newMap[newIndex].second = oldIndex; } - typedef HashMap<String, Vector<size_t> > DiffTable; + typedef HashMap<String, Vector<size_t>> DiffTable; DiffTable newTable; DiffTable oldTable; @@ -297,7 +297,7 @@ // 1. First strip everything except for the nodes that retain. Collect pending merges. WillBeHeapHashMap<RawPtrWillBeMember<Digest>, RawPtrWillBeMember<Digest>> merges; - HashSet<size_t, WTF::IntHash<size_t>, WTF::UnsignedWithZeroKeyHashTraits<size_t> > usedNewOrdinals; + HashSet<size_t, WTF::IntHash<size_t>, WTF::UnsignedWithZeroKeyHashTraits<size_t>> usedNewOrdinals; for (size_t i = 0; i < oldList.size(); ++i) { if (oldMap[i].first) { if (usedNewOrdinals.add(oldMap[i].second).isNewEntry) @@ -334,7 +334,7 @@ } // Mark retained nodes as used, do not reuse node more than once. - HashSet<size_t, WTF::IntHash<size_t>, WTF::UnsignedWithZeroKeyHashTraits<size_t> > usedOldOrdinals; + HashSet<size_t, WTF::IntHash<size_t>, WTF::UnsignedWithZeroKeyHashTraits<size_t>> usedOldOrdinals; for (size_t i = 0; i < newList.size(); ++i) { if (!newMap[i].first) continue;
diff --git a/third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.cpp index 4d83ce1..bacec77 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.cpp
@@ -24,7 +24,7 @@ #include "core/inspector/InspectorCSSAgent.h" #include "core/inspector/InspectorDOMAgent.h" #include "core/inspector/InspectorStyleSheet.h" -#include "core/inspector/v8/InjectedScriptManager.h" +#include "core/inspector/v8/public/V8RuntimeAgent.h" #include "platform/Decimal.h" #include "platform/animation/TimingFunction.h" #include "wtf/text/Base64.h" @@ -36,12 +36,12 @@ namespace blink { -InspectorAnimationAgent::InspectorAnimationAgent(InspectedFrames* inspectedFrames, InspectorDOMAgent* domAgent, InspectorCSSAgent* cssAgent, InjectedScriptManager* injectedScriptManager) +InspectorAnimationAgent::InspectorAnimationAgent(InspectedFrames* inspectedFrames, InspectorDOMAgent* domAgent, InspectorCSSAgent* cssAgent, V8RuntimeAgent* runtimeAgent) : InspectorBaseAgent<InspectorAnimationAgent, InspectorFrontend::Animation>("Animation") , m_inspectedFrames(inspectedFrames) , m_domAgent(domAgent) , m_cssAgent(cssAgent) - , m_injectedScriptManager(injectedScriptManager) + , m_runtimeAgent(runtimeAgent) , m_isCloning(false) { } @@ -144,7 +144,7 @@ return nullptr; const KeyframeEffectModelBase* model = toKeyframeEffectModelBase(effect->model()); Vector<RefPtr<Keyframe>> normalizedKeyframes = KeyframeEffectModelBase::normalizedKeyframesForInspector(model->getFrames()); - RefPtr<TypeBuilder::Array<TypeBuilder::Animation::KeyframeStyle> > keyframes = TypeBuilder::Array<TypeBuilder::Animation::KeyframeStyle>::create(); + RefPtr<TypeBuilder::Array<TypeBuilder::Animation::KeyframeStyle>> keyframes = TypeBuilder::Array<TypeBuilder::Animation::KeyframeStyle>::create(); for (const auto& keyframe : normalizedKeyframes) { // Ignore CSS Transitions @@ -382,20 +382,17 @@ const Element* element = toKeyframeEffect(animation->effect())->target(); Document* document = element->ownerDocument(); LocalFrame* frame = document ? document->frame() : nullptr; - if (!frame) { + ScriptState* scriptState = frame ? ScriptState::forMainWorld(frame) : nullptr; + if (!scriptState) { *errorString = "Element not associated with a document."; return; } - ScriptState* scriptState = ScriptState::forMainWorld(frame); - if (!scriptState) - return; ScriptState::Scope scope(scriptState); - InjectedScript* injectedScript = m_injectedScriptManager->injectedScriptFor(scriptState->context()); - if (!injectedScript) - return; - injectedScript->releaseObjectGroup("animation"); - result = injectedScript->wrapObject(toV8(animation, scriptState->context()->Global(), scriptState->isolate()), "animation"); + m_runtimeAgent->disposeObjectGroup("animation"); + result = m_runtimeAgent->wrapObject(scriptState->context(), toV8(animation, scriptState->context()->Global(), scriptState->isolate()), "animation"); + if (!result) + *errorString = "Element not associated with a document."; } static CSSPropertyID animationProperties[] = {
diff --git a/third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.h b/third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.h index 7326761..d810ed4 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.h
@@ -18,18 +18,18 @@ class AnimationNode; class AnimationTimeline; class Element; -class InjectedScriptManager; class InspectedFrames; class InspectorCSSAgent; class InspectorDOMAgent; class TimingFunction; +class V8RuntimeAgent; class CORE_EXPORT InspectorAnimationAgent final : public InspectorBaseAgent<InspectorAnimationAgent, InspectorFrontend::Animation>, public InspectorBackendDispatcher::AnimationCommandHandler { WTF_MAKE_NONCOPYABLE(InspectorAnimationAgent); public: - static PassOwnPtrWillBeRawPtr<InspectorAnimationAgent> create(InspectedFrames* inspectedFrames, InspectorDOMAgent* domAgent, InspectorCSSAgent* cssAgent, InjectedScriptManager* injectedScriptManager) + static PassOwnPtrWillBeRawPtr<InspectorAnimationAgent> create(InspectedFrames* inspectedFrames, InspectorDOMAgent* domAgent, InspectorCSSAgent* cssAgent, V8RuntimeAgent* runtimeAgent) { - return adoptPtrWillBeNoop(new InspectorAnimationAgent(inspectedFrames, domAgent, cssAgent, injectedScriptManager)); + return adoptPtrWillBeNoop(new InspectorAnimationAgent(inspectedFrames, domAgent, cssAgent, runtimeAgent)); } // Base agent methods. @@ -61,7 +61,7 @@ DECLARE_VIRTUAL_TRACE(); private: - InspectorAnimationAgent(InspectedFrames*, InspectorDOMAgent*, InspectorCSSAgent*, InjectedScriptManager*); + InspectorAnimationAgent(InspectedFrames*, InspectorDOMAgent*, InspectorCSSAgent*, V8RuntimeAgent*); typedef TypeBuilder::Animation::Animation::Type::Enum AnimationType; @@ -75,7 +75,7 @@ RawPtrWillBeMember<InspectedFrames> m_inspectedFrames; RawPtrWillBeMember<InspectorDOMAgent> m_domAgent; RawPtrWillBeMember<InspectorCSSAgent> m_cssAgent; - InjectedScriptManager* m_injectedScriptManager; + V8RuntimeAgent* m_runtimeAgent; PersistentHeapHashMapWillBeHeapHashMap<String, Member<Animation>> m_idToAnimation; PersistentHeapHashMapWillBeHeapHashMap<String, Member<Animation>> m_idToAnimationClone; WillBeHeapHashMap<String, AnimationType> m_idToAnimationType;
diff --git a/third_party/WebKit/Source/core/inspector/InspectorApplicationCacheAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorApplicationCacheAgent.cpp index 05abda9..85a8a62 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorApplicationCacheAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorApplicationCacheAgent.cpp
@@ -88,7 +88,7 @@ frontend()->networkStateUpdated(online); } -void InspectorApplicationCacheAgent::getFramesWithManifests(ErrorString*, RefPtr<TypeBuilder::Array<TypeBuilder::ApplicationCache::FrameWithManifest> >& result) +void InspectorApplicationCacheAgent::getFramesWithManifests(ErrorString*, RefPtr<TypeBuilder::Array<TypeBuilder::ApplicationCache::FrameWithManifest>>& result) { result = TypeBuilder::Array<TypeBuilder::ApplicationCache::FrameWithManifest>::create(); @@ -160,9 +160,9 @@ .release(); } -PassRefPtr<TypeBuilder::Array<TypeBuilder::ApplicationCache::ApplicationCacheResource> > InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources(const ApplicationCacheHost::ResourceInfoList& applicationCacheResources) +PassRefPtr<TypeBuilder::Array<TypeBuilder::ApplicationCache::ApplicationCacheResource>> InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources(const ApplicationCacheHost::ResourceInfoList& applicationCacheResources) { - RefPtr<TypeBuilder::Array<TypeBuilder::ApplicationCache::ApplicationCacheResource> > resources = TypeBuilder::Array<TypeBuilder::ApplicationCache::ApplicationCacheResource>::create(); + RefPtr<TypeBuilder::Array<TypeBuilder::ApplicationCache::ApplicationCacheResource>> resources = TypeBuilder::Array<TypeBuilder::ApplicationCache::ApplicationCacheResource>::create(); ApplicationCacheHost::ResourceInfoList::const_iterator end = applicationCacheResources.end(); ApplicationCacheHost::ResourceInfoList::const_iterator it = applicationCacheResources.begin();
diff --git a/third_party/WebKit/Source/core/inspector/InspectorApplicationCacheAgent.h b/third_party/WebKit/Source/core/inspector/InspectorApplicationCacheAgent.h index edc1fdb..23f0554 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorApplicationCacheAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorApplicationCacheAgent.h
@@ -69,7 +69,7 @@ explicit InspectorApplicationCacheAgent(InspectedFrames*); PassRefPtr<TypeBuilder::ApplicationCache::ApplicationCache> buildObjectForApplicationCache(const ApplicationCacheHost::ResourceInfoList&, const ApplicationCacheHost::CacheInfo&); - PassRefPtr<TypeBuilder::Array<TypeBuilder::ApplicationCache::ApplicationCacheResource> > buildArrayForApplicationCacheResources(const ApplicationCacheHost::ResourceInfoList&); + PassRefPtr<TypeBuilder::Array<TypeBuilder::ApplicationCache::ApplicationCacheResource>> buildArrayForApplicationCacheResources(const ApplicationCacheHost::ResourceInfoList&); PassRefPtr<TypeBuilder::ApplicationCache::ApplicationCacheResource> buildObjectForApplicationCacheResource(const ApplicationCacheHost::ResourceInfo&); DocumentLoader* assertFrameWithDocumentLoader(ErrorString*, String frameId);
diff --git a/third_party/WebKit/Source/core/inspector/InspectorBaseAgent.h b/third_party/WebKit/Source/core/inspector/InspectorBaseAgent.h index ebc9a41..036b748 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorBaseAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorBaseAgent.h
@@ -96,7 +96,7 @@ private: RawPtrWillBeMember<InstrumentingAgents> m_instrumentingAgents; RefPtr<JSONObject> m_state; - WillBeHeapVector<OwnPtrWillBeMember<InspectorAgent> > m_agents; + WillBeHeapVector<OwnPtrWillBeMember<InspectorAgent>> m_agents; }; template<typename AgentClass, typename FrontendClass>
diff --git a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp index 0b1487d..2b010a2 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp
@@ -650,7 +650,7 @@ resetPseudoStates(); } -void InspectorCSSAgent::enable(ErrorString* errorString, PassRefPtrWillBeRawPtr<EnableCallback> prpCallback) +void InspectorCSSAgent::enable(ErrorString* errorString, PassRefPtr<EnableCallback> prpCallback) { if (!m_domAgent->enabled()) { *errorString = "DOM agent needs to be enabled first."; @@ -660,7 +660,7 @@ m_resourceContentLoader->ensureResourcesContentLoaded(bind(&InspectorCSSAgent::resourceContentLoaded, this, prpCallback)); } -void InspectorCSSAgent::resourceContentLoaded(PassRefPtrWillBeRawPtr<EnableCallback> callback) +void InspectorCSSAgent::resourceContentLoaded(PassRefPtr<EnableCallback> callback) { if (!callback->isActive()) return; @@ -676,7 +676,7 @@ } m_instrumentingAgents->setInspectorCSSAgent(this); - WillBeHeapVector<RawPtrWillBeMember<Document> > documents = m_domAgent->documents(); + WillBeHeapVector<RawPtrWillBeMember<Document>> documents = m_domAgent->documents(); for (Document* document : documents) updateActiveStyleSheets(document, InitialFrontendLoad); } @@ -715,24 +715,24 @@ void InspectorCSSAgent::updateActiveStyleSheets(Document* document, StyleSheetsUpdateType styleSheetsUpdateType) { - WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet> > newSheetsVector; + WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet>> newSheetsVector; InspectorCSSAgent::collectAllDocumentStyleSheets(document, newSheetsVector); setActiveStyleSheets(document, newSheetsVector, styleSheetsUpdateType); } -void InspectorCSSAgent::setActiveStyleSheets(Document* document, const WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet> >& allSheetsVector, StyleSheetsUpdateType styleSheetsUpdateType) +void InspectorCSSAgent::setActiveStyleSheets(Document* document, const WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet>>& allSheetsVector, StyleSheetsUpdateType styleSheetsUpdateType) { bool isInitialFrontendLoad = styleSheetsUpdateType == InitialFrontendLoad; - WillBeHeapHashSet<RawPtrWillBeMember<CSSStyleSheet> >* documentCSSStyleSheets = m_documentToCSSStyleSheets.get(document); + WillBeHeapHashSet<RawPtrWillBeMember<CSSStyleSheet>>* documentCSSStyleSheets = m_documentToCSSStyleSheets.get(document); if (!documentCSSStyleSheets) { - documentCSSStyleSheets = new WillBeHeapHashSet<RawPtrWillBeMember<CSSStyleSheet> >(); - OwnPtrWillBeRawPtr<WillBeHeapHashSet<RawPtrWillBeMember<CSSStyleSheet> > > documentCSSStyleSheetsPtr = adoptPtrWillBeNoop(documentCSSStyleSheets); + documentCSSStyleSheets = new WillBeHeapHashSet<RawPtrWillBeMember<CSSStyleSheet>>(); + OwnPtrWillBeRawPtr<WillBeHeapHashSet<RawPtrWillBeMember<CSSStyleSheet>>> documentCSSStyleSheetsPtr = adoptPtrWillBeNoop(documentCSSStyleSheets); m_documentToCSSStyleSheets.set(document, documentCSSStyleSheetsPtr.release()); } - WillBeHeapHashSet<RawPtrWillBeMember<CSSStyleSheet> > removedSheets(*documentCSSStyleSheets); - WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet> > addedSheets; + WillBeHeapHashSet<RawPtrWillBeMember<CSSStyleSheet>> removedSheets(*documentCSSStyleSheets); + WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet>> addedSheets; for (CSSStyleSheet* cssStyleSheet : allSheetsVector) { if (removedSheets.contains(cssStyleSheet)) { removedSheets.remove(cssStyleSheet); @@ -772,7 +772,7 @@ void InspectorCSSAgent::documentDetached(Document* document) { m_invalidatedDocuments.remove(document); - setActiveStyleSheets(document, WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet> >(), ExistingFrontendRefresh); + setActiveStyleSheets(document, WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet>>(), ExistingFrontendRefresh); } void InspectorCSSAgent::addEditedStyleSheet(const String& url, const String& content) @@ -829,7 +829,7 @@ } } -void InspectorCSSAgent::getMediaQueries(ErrorString* errorString, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSMedia> >& medias) +void InspectorCSSAgent::getMediaQueries(ErrorString* errorString, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSMedia>>& medias) { medias = TypeBuilder::Array<TypeBuilder::CSS::CSSMedia>::create(); for (auto& style : m_idToInspectorStyleSheet) { @@ -1005,7 +1005,7 @@ attributesStyle = attributes ? attributes.release() : nullptr; } -void InspectorCSSAgent::getComputedStyleForNode(ErrorString* errorString, int nodeId, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSComputedStyleProperty> >& style) +void InspectorCSSAgent::getComputedStyleForNode(ErrorString* errorString, int nodeId, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSComputedStyleProperty>>& style) { Node* node = m_domAgent->assertNode(errorString, nodeId); if (!node) @@ -1356,7 +1356,7 @@ } const MediaQuerySet* queries = media->queries(); - const WillBeHeapVector<OwnPtrWillBeMember<MediaQuery> >& queryVector = queries->queryVector(); + const WillBeHeapVector<OwnPtrWillBeMember<MediaQuery>>& queryVector = queries->queryVector(); LocalFrame* frame = nullptr; if (parentStyleSheet) { if (Document* document = parentStyleSheet->ownerDocument()) @@ -1365,13 +1365,13 @@ OwnPtrWillBeRawPtr<MediaQueryEvaluator> mediaEvaluator = adoptPtrWillBeNoop(new MediaQueryEvaluator(frame)); InspectorStyleSheet* inspectorStyleSheet = parentStyleSheet ? m_cssStyleSheetToInspectorStyleSheet.get(parentStyleSheet) : nullptr; - RefPtr<TypeBuilder::Array<TypeBuilder::CSS::MediaQuery> > mediaListArray = TypeBuilder::Array<TypeBuilder::CSS::MediaQuery>::create(); + RefPtr<TypeBuilder::Array<TypeBuilder::CSS::MediaQuery>> mediaListArray = TypeBuilder::Array<TypeBuilder::CSS::MediaQuery>::create(); RefPtrWillBeRawPtr<MediaValues> mediaValues = MediaValues::createDynamicIfFrameExists(frame); bool hasMediaQueryItems = false; for (size_t i = 0; i < queryVector.size(); ++i) { MediaQuery* query = queryVector.at(i).get(); const ExpressionHeapVector& expressions = query->expressions(); - RefPtr<TypeBuilder::Array<TypeBuilder::CSS::MediaQueryExpression> > expressionArray = TypeBuilder::Array<TypeBuilder::CSS::MediaQueryExpression>::create(); + RefPtr<TypeBuilder::Array<TypeBuilder::CSS::MediaQueryExpression>> expressionArray = TypeBuilder::Array<TypeBuilder::CSS::MediaQueryExpression>::create(); bool hasExpressionItems = false; for (size_t j = 0; j < expressions.size(); ++j) { MediaQueryExp* mediaQueryExp = expressions.at(j).get(); @@ -1476,11 +1476,11 @@ mediaArray->addItem(buildMediaObject(mediaList, isMediaRule ? MediaListSourceMediaRule : MediaListSourceImportRule, sourceURL, parentStyleSheet)); } -PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSMedia> > InspectorCSSAgent::buildMediaListChain(CSSRule* rule) +PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSMedia>> InspectorCSSAgent::buildMediaListChain(CSSRule* rule) { if (!rule) return nullptr; - RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSMedia> > mediaArray = TypeBuilder::Array<TypeBuilder::CSS::CSSMedia>::create(); + RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSMedia>> mediaArray = TypeBuilder::Array<TypeBuilder::CSS::CSSMedia>::create(); CSSRule* parentRule = rule; while (parentRule) { collectMediaQueriesFromRule(parentRule, mediaArray.get()); @@ -1531,7 +1531,7 @@ } // static -void InspectorCSSAgent::collectAllDocumentStyleSheets(Document* document, WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet> >& result) +void InspectorCSSAgent::collectAllDocumentStyleSheets(Document* document, WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet>>& result) { const WillBeHeapVector<RefPtrWillBeMember<CSSStyleSheet>> activeStyleSheets = document->styleEngine().activeStyleSheetsForInspector(); for (const auto& style : activeStyleSheets) { @@ -1541,7 +1541,7 @@ } // static -void InspectorCSSAgent::collectStyleSheets(CSSStyleSheet* styleSheet, WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet> >& result) +void InspectorCSSAgent::collectStyleSheets(CSSStyleSheet* styleSheet, WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet>>& result) { result.append(styleSheet); for (unsigned i = 0, size = styleSheet->length(); i < size; ++i) { @@ -1704,9 +1704,9 @@ return selectorPseudoId == elementPseudoId; } -PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::RuleMatch> > InspectorCSSAgent::buildArrayForMatchedRuleList(CSSRuleList* ruleList, Element* element, PseudoId matchesForPseudoId) +PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::RuleMatch>> InspectorCSSAgent::buildArrayForMatchedRuleList(CSSRuleList* ruleList, Element* element, PseudoId matchesForPseudoId) { - RefPtr<TypeBuilder::Array<TypeBuilder::CSS::RuleMatch> > result = TypeBuilder::Array<TypeBuilder::CSS::RuleMatch>::create(); + RefPtr<TypeBuilder::Array<TypeBuilder::CSS::RuleMatch>> result = TypeBuilder::Array<TypeBuilder::CSS::RuleMatch>::create(); if (!ruleList) return result.release(); @@ -1716,7 +1716,7 @@ RefPtr<TypeBuilder::CSS::CSSRule> ruleObject = buildObjectForRule(rule); if (!ruleObject) continue; - RefPtr<TypeBuilder::Array<int> > matchingSelectors = TypeBuilder::Array<int>::create(); + RefPtr<TypeBuilder::Array<int>> matchingSelectors = TypeBuilder::Array<int>::create(); const CSSSelectorList& selectorList = rule->styleRule()->selectorList(); long index = 0; PseudoId elementPseudoId = matchesForPseudoId ? matchesForPseudoId : element->pseudoId(); @@ -1813,7 +1813,7 @@ void InspectorCSSAgent::resetPseudoStates() { - WillBeHeapHashSet<RawPtrWillBeMember<Document> > documentsToChange; + WillBeHeapHashSet<RawPtrWillBeMember<Document>> documentsToChange; for (auto& state : m_nodeIdToForcedPseudoState) { Element* element = toElement(m_domAgent->nodeForId(state.key)); if (element && element->ownerDocument())
diff --git a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.h b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.h index 32340d3..b5cb043e 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.h
@@ -104,7 +104,7 @@ return adoptPtrWillBeNoop(new InspectorCSSAgent(domAgent, inspectedFrames, resourceAgent, resourceContentLoader)); } - static void collectAllDocumentStyleSheets(Document*, WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet> >&); + static void collectAllDocumentStyleSheets(Document*, WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet>>&); ~InspectorCSSAgent() override; DECLARE_VIRTUAL_TRACE(); @@ -127,7 +127,7 @@ void addEditedStyleElement(int backendNodeId, const String& content); bool getEditedStyleElement(int backendNodeId, String* content); - void enable(ErrorString*, PassRefPtrWillBeRawPtr<EnableCallback>) override; + void enable(ErrorString*, PassRefPtr<EnableCallback>) override; void getComputedStyleForNode(ErrorString*, int nodeId, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSComputedStyleProperty>>&) override; void getPlatformFontsForNode(ErrorString*, int nodeId, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::PlatformFontUsage>>&) override; void getInlineStylesForNode(ErrorString*, int nodeId, RefPtr<TypeBuilder::CSS::CSSStyle>& inlineStyle, RefPtr<TypeBuilder::CSS::CSSStyle>& attributes) override; @@ -148,7 +148,7 @@ void collectMediaQueriesFromRule(CSSRule*, TypeBuilder::Array<TypeBuilder::CSS::CSSMedia>* mediaArray); void collectMediaQueriesFromStyleSheet(CSSStyleSheet*, TypeBuilder::Array<TypeBuilder::CSS::CSSMedia>* mediaArray); PassRefPtr<TypeBuilder::CSS::CSSMedia> buildMediaObject(const MediaList*, MediaListSource, const String&, CSSStyleSheet*); - PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSMedia> > buildMediaListChain(CSSRule*); + PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSMedia>> buildMediaListChain(CSSRule*); PassRefPtrWillBeRawPtr<CSSStyleDeclaration> findEffectiveDeclaration(CSSPropertyID, const WillBeHeapVector<RefPtrWillBeMember<CSSStyleDeclaration>>& styles); void setLayoutEditorValue(ErrorString*, Element*, RefPtrWillBeRawPtr<CSSStyleDeclaration>, CSSPropertyID, const String& value, bool forceImportant = false); @@ -163,23 +163,23 @@ class SetElementStyleAction; class AddRuleAction; - static void collectStyleSheets(CSSStyleSheet*, WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet> >&); + static void collectStyleSheets(CSSStyleSheet*, WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet>>&); InspectorCSSAgent(InspectorDOMAgent*, InspectedFrames*, InspectorResourceAgent*, InspectorResourceContentLoader*); - typedef WillBeHeapHashMap<String, RefPtrWillBeMember<InspectorStyleSheet> > IdToInspectorStyleSheet; - typedef WillBeHeapHashMap<String, RefPtrWillBeMember<InspectorStyleSheetForInlineStyle> > IdToInspectorStyleSheetForInlineStyle; - typedef WillBeHeapHashMap<RawPtrWillBeMember<Node>, RefPtrWillBeMember<InspectorStyleSheetForInlineStyle> > NodeToInspectorStyleSheet; // bogus "stylesheets" with elements' inline styles + typedef WillBeHeapHashMap<String, RefPtrWillBeMember<InspectorStyleSheet>> IdToInspectorStyleSheet; + typedef WillBeHeapHashMap<String, RefPtrWillBeMember<InspectorStyleSheetForInlineStyle>> IdToInspectorStyleSheetForInlineStyle; + typedef WillBeHeapHashMap<RawPtrWillBeMember<Node>, RefPtrWillBeMember<InspectorStyleSheetForInlineStyle>> NodeToInspectorStyleSheet; // bogus "stylesheets" with elements' inline styles typedef HashMap<int, unsigned> NodeIdToForcedPseudoState; - void resourceContentLoaded(PassRefPtrWillBeRawPtr<EnableCallback>); + void resourceContentLoaded(PassRefPtr<EnableCallback>); void wasEnabled(); void resetNonPersistentData(); InspectorStyleSheetForInlineStyle* asInspectorStyleSheet(Element* element); Element* elementForId(ErrorString*, int nodeId); void updateActiveStyleSheets(Document*, StyleSheetsUpdateType); - void setActiveStyleSheets(Document*, const WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet> >&, StyleSheetsUpdateType); + void setActiveStyleSheets(Document*, const WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet>>&, StyleSheetsUpdateType); CSSStyleDeclaration* setStyleText(ErrorString*, InspectorStyleSheetBase*, const SourceRange&, const String&); PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSKeyframesRule>> animationsForNode(Element*); @@ -196,7 +196,7 @@ TypeBuilder::CSS::StyleSheetOrigin::Enum detectOrigin(CSSStyleSheet* pageStyleSheet, Document* ownerDocument); PassRefPtr<TypeBuilder::CSS::CSSRule> buildObjectForRule(CSSStyleRule*); - PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::RuleMatch> > buildArrayForMatchedRuleList(CSSRuleList*, Element*, PseudoId); + PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::RuleMatch>> buildArrayForMatchedRuleList(CSSRuleList*, Element*, PseudoId); PassRefPtr<TypeBuilder::CSS::CSSStyle> buildObjectForAttributesStyle(Element*); // InspectorDOMAgent::DOMListener implementation @@ -218,13 +218,13 @@ IdToInspectorStyleSheet m_idToInspectorStyleSheet; IdToInspectorStyleSheetForInlineStyle m_idToInspectorStyleSheetForInlineStyle; - WillBeHeapHashMap<RawPtrWillBeMember<CSSStyleSheet>, RefPtrWillBeMember<InspectorStyleSheet> > m_cssStyleSheetToInspectorStyleSheet; - typedef WillBeHeapHashMap<RawPtrWillBeMember<Document>, OwnPtrWillBeMember<WillBeHeapHashSet<RawPtrWillBeMember<CSSStyleSheet> > > > DocumentStyleSheets; + WillBeHeapHashMap<RawPtrWillBeMember<CSSStyleSheet>, RefPtrWillBeMember<InspectorStyleSheet>> m_cssStyleSheetToInspectorStyleSheet; + typedef WillBeHeapHashMap<RawPtrWillBeMember<Document>, OwnPtrWillBeMember<WillBeHeapHashSet<RawPtrWillBeMember<CSSStyleSheet>>>> DocumentStyleSheets; DocumentStyleSheets m_documentToCSSStyleSheets; - WillBeHeapHashSet<RawPtrWillBeMember<Document> > m_invalidatedDocuments; + WillBeHeapHashSet<RawPtrWillBeMember<Document>> m_invalidatedDocuments; NodeToInspectorStyleSheet m_nodeToInspectorStyleSheet; - WillBeHeapHashMap<RefPtrWillBeMember<Document>, RefPtrWillBeMember<InspectorStyleSheet> > m_documentToViaInspectorStyleSheet; // "via inspector" stylesheets + WillBeHeapHashMap<RefPtrWillBeMember<Document>, RefPtrWillBeMember<InspectorStyleSheet>> m_documentToViaInspectorStyleSheet; // "via inspector" stylesheets NodeIdToForcedPseudoState m_nodeIdToForcedPseudoState; RefPtrWillBeMember<CSSStyleSheet> m_inspectorUserAgentStyleSheet;
diff --git a/third_party/WebKit/Source/core/inspector/InspectorConsoleAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorConsoleAgent.cpp index a6b9cc3..861484a 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorConsoleAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorConsoleAgent.cpp
@@ -32,10 +32,9 @@ #include "core/inspector/IdentifiersFactory.h" #include "core/inspector/InstrumentingAgents.h" #include "core/inspector/ScriptArguments.h" -#include "core/inspector/v8/InjectedScript.h" -#include "core/inspector/v8/InjectedScriptManager.h" -#include "core/inspector/v8/V8Debugger.h" -#include "core/inspector/v8/V8DebuggerAgent.h" +#include "core/inspector/v8/public/V8Debugger.h" +#include "core/inspector/v8/public/V8DebuggerAgent.h" +#include "core/inspector/v8/public/V8RuntimeAgent.h" #include "wtf/text/WTFString.h" namespace blink { @@ -44,9 +43,9 @@ static const char consoleMessagesEnabled[] = "consoleMessagesEnabled"; } -InspectorConsoleAgent::InspectorConsoleAgent(InjectedScriptManager* injectedScriptManager) +InspectorConsoleAgent::InspectorConsoleAgent(V8RuntimeAgent* runtimeAgent) : InspectorBaseAgent<InspectorConsoleAgent, InspectorFrontend::Console>("Console") - , m_injectedScriptManager(injectedScriptManager) + , m_runtimeAgent(runtimeAgent) , m_debuggerAgent(nullptr) , m_enabled(false) { @@ -119,7 +118,7 @@ void InspectorConsoleAgent::consoleMessagesCleared() { - m_injectedScriptManager->releaseObjectGroup("console"); + m_runtimeAgent->disposeObjectGroup("console"); frontend()->messagesCleared(); } @@ -198,30 +197,28 @@ RefPtrWillBeRawPtr<ScriptArguments> arguments = consoleMessage->scriptArguments(); if (arguments && arguments->argumentCount()) { ScriptState::Scope scope(arguments->scriptState()); - InjectedScript* injectedScript = m_injectedScriptManager->injectedScriptFor(arguments->scriptState()->context()); - if (injectedScript) { - RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject> > jsonArgs = TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject>::create(); - if (consoleMessage->type() == TableMessageType && generatePreview && arguments->argumentCount()) { - v8::Local<v8::Value> table = arguments->argumentAt(0).v8Value(); - v8::Local<v8::Value> columns = arguments->argumentCount() > 1 ? arguments->argumentAt(1).v8Value() : v8::Local<v8::Value>(); - RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = injectedScript->wrapTable(table, columns); + v8::Local<v8::Context> context = arguments->scriptState()->context(); + RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject>> jsonArgs = TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject>::create(); + if (consoleMessage->type() == TableMessageType && generatePreview) { + v8::Local<v8::Value> table = arguments->argumentAt(0).v8Value(); + v8::Local<v8::Value> columns = arguments->argumentCount() > 1 ? arguments->argumentAt(1).v8Value() : v8::Local<v8::Value>(); + RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = m_runtimeAgent->wrapTable(context, table, columns); + if (inspectorValue) + jsonArgs->addItem(inspectorValue); + else + jsonArgs = nullptr; + } else { + for (unsigned i = 0; i < arguments->argumentCount(); ++i) { + RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = m_runtimeAgent->wrapObject(context, arguments->argumentAt(i).v8Value(), "console", generatePreview); if (!inspectorValue) { - ASSERT_NOT_REACHED(); - return; + jsonArgs = nullptr; + break; } jsonArgs->addItem(inspectorValue); - } else { - for (unsigned i = 0; i < arguments->argumentCount(); ++i) { - RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = injectedScript->wrapObject(arguments->argumentAt(i).v8Value(), "console", generatePreview); - if (!inspectorValue) { - ASSERT_NOT_REACHED(); - return; - } - jsonArgs->addItem(inspectorValue); - } } - jsonObj->setParameters(jsonArgs); } + if (jsonArgs) + jsonObj->setParameters(jsonArgs); } if (consoleMessage->callStack()) jsonObj->setStack(consoleMessage->callStack()->buildInspectorObject());
diff --git a/third_party/WebKit/Source/core/inspector/InspectorConsoleAgent.h b/third_party/WebKit/Source/core/inspector/InspectorConsoleAgent.h index 098fa87..3eb4d2f 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorConsoleAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorConsoleAgent.h
@@ -35,15 +35,15 @@ class ConsoleMessage; class ConsoleMessageStorage; -class InjectedScriptManager; class V8DebuggerAgent; +class V8RuntimeAgent; typedef String ErrorString; class CORE_EXPORT InspectorConsoleAgent : public InspectorBaseAgent<InspectorConsoleAgent, InspectorFrontend::Console>, public InspectorBackendDispatcher::ConsoleCommandHandler { WTF_MAKE_NONCOPYABLE(InspectorConsoleAgent); public: - explicit InspectorConsoleAgent(InjectedScriptManager*); + explicit InspectorConsoleAgent(V8RuntimeAgent*); ~InspectorConsoleAgent() override; void setDebuggerAgent(V8DebuggerAgent* debuggerAgent) { m_debuggerAgent = debuggerAgent; } @@ -65,7 +65,7 @@ virtual void enableStackCapturingIfNeeded() = 0; virtual void disableStackCapturingIfNeeded() = 0; - InjectedScriptManager* m_injectedScriptManager; + V8RuntimeAgent* m_runtimeAgent; V8DebuggerAgent* m_debuggerAgent; bool m_enabled; };
diff --git a/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.cpp index c8b3538..596a2eb3 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.cpp
@@ -69,9 +69,7 @@ #include "core/inspector/InspectorHighlight.h" #include "core/inspector/InspectorHistory.h" #include "core/inspector/InstrumentingAgents.h" -#include "core/inspector/v8/InjectedScriptHost.h" -#include "core/inspector/v8/InjectedScriptManager.h" -#include "core/inspector/v8/RemoteObjectId.h" +#include "core/inspector/v8/public/V8RuntimeAgent.h" #include "core/layout/HitTestResult.h" #include "core/layout/LayoutView.h" #include "core/loader/DocumentLoader.h" @@ -176,7 +174,7 @@ private: RawPtrWillBeMember<InspectorDOMAgent> m_domAgent; Timer<InspectorRevalidateDOMTask> m_timer; - WillBeHeapHashSet<RefPtrWillBeMember<Element> > m_styleAttrInvalidatedElements; + WillBeHeapHashSet<RefPtrWillBeMember<Element>> m_styleAttrInvalidatedElements; }; InspectorRevalidateDOMTask::InspectorRevalidateDOMTask(InspectorDOMAgent* domAgent) @@ -195,7 +193,7 @@ void InspectorRevalidateDOMTask::onTimer(Timer<InspectorRevalidateDOMTask>*) { // The timer is stopped on m_domAgent destruction, so this method will never be called after m_domAgent has been destroyed. - WillBeHeapVector<RawPtrWillBeMember<Element> > elements; + WillBeHeapVector<RawPtrWillBeMember<Element>> elements; for (auto& attribute : m_styleAttrInvalidatedElements) elements.append(attribute.get()); m_domAgent->styleAttributeInvalidated(elements); @@ -270,10 +268,11 @@ } } -InspectorDOMAgent::InspectorDOMAgent(InspectedFrames* inspectedFrames, InjectedScriptManager* injectedScriptManager, Client* client) +InspectorDOMAgent::InspectorDOMAgent(v8::Isolate* isolate, InspectedFrames* inspectedFrames, V8RuntimeAgent* runtimeAgent, Client* client) : InspectorBaseAgent<InspectorDOMAgent, InspectorFrontend::DOM>("DOM") + , m_isolate(isolate) , m_inspectedFrames(inspectedFrames) - , m_injectedScriptManager(injectedScriptManager) + , m_runtimeAgent(runtimeAgent) , m_client(client) , m_domListener(nullptr) , m_documentNodeToIdMap(adoptPtrWillBeNoop(new NodeToIdMap())) @@ -297,9 +296,9 @@ innerEnable(); } -WillBeHeapVector<RawPtrWillBeMember<Document> > InspectorDOMAgent::documents() +WillBeHeapVector<RawPtrWillBeMember<Document>> InspectorDOMAgent::documents() { - WillBeHeapVector<RawPtrWillBeMember<Document> > result; + WillBeHeapVector<RawPtrWillBeMember<Document>> result; if (m_document) { for (LocalFrame* frame : *m_inspectedFrames) { if (Document* document = frame->document()) @@ -584,7 +583,7 @@ return; } - RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > children = buildArrayForContainerChildren(node, depth, nodeMap); + RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node>> children = buildArrayForContainerChildren(node, depth, nodeMap); frontend()->setChildNodes(nodeId, children.release()); } @@ -608,7 +607,7 @@ if (!id) return nullptr; - WillBeHeapHashMap<int, RawPtrWillBeMember<Node> >::iterator it = m_idToNode.find(id); + WillBeHeapHashMap<int, RawPtrWillBeMember<Node>>::iterator it = m_idToNode.find(id); if (it != m_idToNode.end()) return it->value; return nullptr; @@ -650,7 +649,7 @@ *elementId = pushNodePathToFrontend(element.get()); } -void InspectorDOMAgent::querySelectorAll(ErrorString* errorString, int nodeId, const String& selectors, RefPtr<TypeBuilder::Array<int> >& result) +void InspectorDOMAgent::querySelectorAll(ErrorString* errorString, int nodeId, const String& selectors, RefPtr<TypeBuilder::Array<int>>& result) { Node* node = assertNode(errorString, nodeId); if (!node || !node->isContainerNode()) @@ -684,7 +683,7 @@ return result; Node* node = nodeToPush; - WillBeHeapVector<RawPtrWillBeMember<Node> > path; + WillBeHeapVector<RawPtrWillBeMember<Node>> path; while (true) { Node* parent = innerParentNode(node); @@ -721,7 +720,7 @@ OwnPtrWillBeRawPtr<NodeToIdMap> newMap = adoptPtrWillBeNoop(new NodeToIdMap); NodeToIdMap* danglingMap = newMap.get(); m_danglingNodeToIdMaps.append(newMap.release()); - RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > children = TypeBuilder::Array<TypeBuilder::DOM::Node>::create(); + RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node>> children = TypeBuilder::Array<TypeBuilder::DOM::Node>::create(); children->addItem(buildObjectForNode(node, 0, danglingMap)); frontend()->setChildNodes(0, children); @@ -967,8 +966,8 @@ if (endQuoteFound) attributeQuery = attributeQuery.left(attributeQuery.length() - 1); - WillBeHeapVector<RawPtrWillBeMember<Document> > docs = documents(); - WillBeHeapListHashSet<RawPtrWillBeMember<Node> > resultCollector; + WillBeHeapVector<RawPtrWillBeMember<Document>> docs = documents(); + WillBeHeapListHashSet<RawPtrWillBeMember<Node>> resultCollector; for (Document* document : docs) { Node* documentElement = document->documentElement(); @@ -1053,7 +1052,7 @@ } *searchId = IdentifiersFactory::createIdentifier(); - WillBeHeapVector<RefPtrWillBeMember<Node> >* resultsIt = &m_searchResults.add(*searchId, WillBeHeapVector<RefPtrWillBeMember<Node> >()).storedValue->value; + WillBeHeapVector<RefPtrWillBeMember<Node>>* resultsIt = &m_searchResults.add(*searchId, WillBeHeapVector<RefPtrWillBeMember<Node>>()).storedValue->value; for (auto& result : resultCollector) resultsIt->append(result); @@ -1061,7 +1060,7 @@ *resultCount = resultsIt->size(); } -void InspectorDOMAgent::getSearchResults(ErrorString* errorString, const String& searchId, int fromIndex, int toIndex, RefPtr<TypeBuilder::Array<int> >& nodeIds) +void InspectorDOMAgent::getSearchResults(ErrorString* errorString, const String& searchId, int fromIndex, int toIndex, RefPtr<TypeBuilder::Array<int>>& nodeIds) { SearchResults::iterator it = m_searchResults.find(searchId); if (it == m_searchResults.end()) { @@ -1210,24 +1209,13 @@ Node* InspectorDOMAgent::nodeForRemoteId(ErrorString* errorString, const String& objectId) { - OwnPtr<RemoteObjectId> remoteId = RemoteObjectId::parse(objectId); - if (!remoteId) { - *errorString = "Invalid remote object id"; - return nullptr; - } - InjectedScript* injectedScript = m_injectedScriptManager->findInjectedScript(remoteId.get()); - if (!injectedScript) { - *errorString = "Cannot find context for specified object id"; - return nullptr; - } - v8::HandleScope handles(injectedScript->isolate()); - v8::Local<v8::Value> value = injectedScript->findObject(*remoteId); + v8::HandleScope handles(m_isolate); + v8::Local<v8::Value> value = m_runtimeAgent->findObject(objectId); if (value.IsEmpty()) { *errorString = "Node for given objectId not found"; return nullptr; } - v8::Isolate* isolate = injectedScript->isolate(); - if (!V8Node::hasInstance(value, isolate)) { + if (!V8Node::hasInstance(value, m_isolate)) { *errorString = "Object id doesn't reference a Node"; return nullptr; } @@ -1444,7 +1432,7 @@ result = object; } -void InspectorDOMAgent::getAttributes(ErrorString* errorString, int nodeId, RefPtr<TypeBuilder::Array<String> >& result) +void InspectorDOMAgent::getAttributes(ErrorString* errorString, int nodeId, RefPtr<TypeBuilder::Array<String>>& result) { Element* element = assertElement(errorString, nodeId); if (!element) @@ -1536,7 +1524,7 @@ ElementShadow* shadow = element->shadow(); if (shadow) { - RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > shadowRoots = TypeBuilder::Array<TypeBuilder::DOM::Node>::create(); + RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node>> shadowRoots = TypeBuilder::Array<TypeBuilder::DOM::Node>::create(); for (ShadowRoot* root = &shadow->youngestShadowRoot(); root; root = root->olderShadowRoot()) shadowRoots->addItem(buildObjectForNode(root, 0, nodesMap)); value->setShadowRoots(shadowRoots); @@ -1560,7 +1548,7 @@ if (InspectorDOMAgent::getPseudoElementType(element->pseudoId(), &pseudoType)) value->setPseudoType(pseudoType); } else { - RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > pseudoElements = buildArrayForPseudoElements(element, nodesMap); + RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node>> pseudoElements = buildArrayForPseudoElements(element, nodesMap); if (pseudoElements) { value->setPseudoElements(pseudoElements.release()); forcePushChildren = true; @@ -1597,7 +1585,7 @@ m_cachedChildCount.set(id, nodeCount); if (forcePushChildren && !depth) depth = 1; - RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > children = buildArrayForContainerChildren(node, depth, nodesMap); + RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node>> children = buildArrayForContainerChildren(node, depth, nodesMap); if (children->length() > 0 || depth) // Push children along with shadow in any case. value->setChildren(children.release()); } @@ -1605,9 +1593,9 @@ return value.release(); } -PassRefPtr<TypeBuilder::Array<String> > InspectorDOMAgent::buildArrayForElementAttributes(Element* element) +PassRefPtr<TypeBuilder::Array<String>> InspectorDOMAgent::buildArrayForElementAttributes(Element* element) { - RefPtr<TypeBuilder::Array<String> > attributesValue = TypeBuilder::Array<String>::create(); + RefPtr<TypeBuilder::Array<String>> attributesValue = TypeBuilder::Array<String>::create(); // Go through all attributes and serialize them. AttributeCollection attributes = element->attributes(); for (auto& attribute : attributes) { @@ -1618,9 +1606,9 @@ return attributesValue.release(); } -PassRefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > InspectorDOMAgent::buildArrayForContainerChildren(Node* container, int depth, NodeToIdMap* nodesMap) +PassRefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node>> InspectorDOMAgent::buildArrayForContainerChildren(Node* container, int depth, NodeToIdMap* nodesMap) { - RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > children = TypeBuilder::Array<TypeBuilder::DOM::Node>::create(); + RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node>> children = TypeBuilder::Array<TypeBuilder::DOM::Node>::create(); if (depth == 0) { // Special-case the only text child - pretend that container's children have been requested. Node* firstChild = container->firstChild(); @@ -1642,12 +1630,12 @@ return children.release(); } -PassRefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > InspectorDOMAgent::buildArrayForPseudoElements(Element* element, NodeToIdMap* nodesMap) +PassRefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node>> InspectorDOMAgent::buildArrayForPseudoElements(Element* element, NodeToIdMap* nodesMap) { if (!element->pseudoElement(BEFORE) && !element->pseudoElement(AFTER)) return nullptr; - RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > pseudoElements = TypeBuilder::Array<TypeBuilder::DOM::Node>::create(); + RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node>> pseudoElements = TypeBuilder::Array<TypeBuilder::DOM::Node>::create(); if (element->pseudoElement(BEFORE)) pseudoElements->addItem(buildObjectForNode(element->pseudoElement(BEFORE), 0, nodesMap)); if (element->pseudoElement(AFTER)) @@ -1857,9 +1845,9 @@ frontend()->attributeRemoved(id, name.toString()); } -void InspectorDOMAgent::styleAttributeInvalidated(const WillBeHeapVector<RawPtrWillBeMember<Element> >& elements) +void InspectorDOMAgent::styleAttributeInvalidated(const WillBeHeapVector<RawPtrWillBeMember<Element>>& elements) { - RefPtr<TypeBuilder::Array<int> > nodeIds = TypeBuilder::Array<int>::create(); + RefPtr<TypeBuilder::Array<int>> nodeIds = TypeBuilder::Array<int>::create(); for (unsigned i = 0, size = elements.size(); i < size; ++i) { Element* element = elements.at(i); int id = boundNodeId(element); @@ -2043,7 +2031,7 @@ *errorString = "No node with given path found"; } -void InspectorDOMAgent::pushNodesByBackendIdsToFrontend(ErrorString* errorString, const RefPtr<JSONArray>& backendNodeIds, RefPtr<TypeBuilder::Array<int> >& result) +void InspectorDOMAgent::pushNodesByBackendIdsToFrontend(ErrorString* errorString, const RefPtr<JSONArray>& backendNodeIds, RefPtr<TypeBuilder::Array<int>>& result) { result = TypeBuilder::Array<int>::create(); for (const auto& backendNode : *backendNodeIds) { @@ -2062,7 +2050,7 @@ } } -class InspectableNode final : public InjectedScriptHost::InspectableObject { +class InspectableNode final : public V8RuntimeAgent::Inspectable { public: explicit InspectableNode(Node* node) : m_nodeId(DOMNodeIds::idForNode(node)) { } @@ -2079,7 +2067,7 @@ Node* node = assertNode(errorString, nodeId); if (!node) return; - m_injectedScriptManager->injectedScriptHost()->addInspectedObject(adoptPtr(new InspectableNode(node))); + m_runtimeAgent->addInspectedObject(adoptPtr(new InspectableNode(node))); if (m_client) m_client->setInspectedNode(node); } @@ -2121,10 +2109,7 @@ return nullptr; ScriptState::Scope scope(scriptState); - InjectedScript* injectedScript = m_injectedScriptManager->injectedScriptFor(scriptState->context()); - if (!injectedScript) - return nullptr; - return injectedScript->wrapObject(nodeV8Value(scriptState->context(), node), objectGroup); + return m_runtimeAgent->wrapObject(scriptState->context(), nodeV8Value(scriptState->context(), node), objectGroup); } bool InspectorDOMAgent::pushDocumentUponHandlelessOperation(ErrorString* errorString)
diff --git a/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.h b/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.h index a63a2b1a..a92a566 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.h
@@ -35,8 +35,7 @@ #include "core/events/EventListenerMap.h" #include "core/inspector/InspectorBaseAgent.h" #include "core/inspector/InspectorHighlight.h" -#include "core/inspector/v8/InjectedScript.h" -#include "core/inspector/v8/InjectedScriptManager.h" +#include "core/inspector/v8/public/V8RuntimeAgent.h" #include "core/style/ComputedStyleConstants.h" #include "platform/JSONValues.h" #include "platform/geometry/FloatQuad.h" @@ -98,9 +97,9 @@ virtual void setInspectedNode(Node*) { } }; - static PassOwnPtrWillBeRawPtr<InspectorDOMAgent> create(InspectedFrames* inspectedFrames, InjectedScriptManager* injectedScriptManager, Client* client) + static PassOwnPtrWillBeRawPtr<InspectorDOMAgent> create(v8::Isolate* isolate, InspectedFrames* inspectedFrames, V8RuntimeAgent* runtimeAgent, Client* client) { - return adoptPtrWillBeNoop(new InspectorDOMAgent(inspectedFrames, injectedScriptManager, client)); + return adoptPtrWillBeNoop(new InspectorDOMAgent(isolate, inspectedFrames, runtimeAgent, client)); } static String toErrorString(ExceptionState&); @@ -113,7 +112,7 @@ void disable(ErrorString*) override; void restore() override; - WillBeHeapVector<RawPtrWillBeMember<Document> > documents(); + WillBeHeapVector<RawPtrWillBeMember<Document>> documents(); void reset(); // Methods called from the frontend for DOM nodes inspection. @@ -169,7 +168,7 @@ void willModifyDOMAttr(Element*, const AtomicString& oldValue, const AtomicString& newValue); void didModifyDOMAttr(Element*, const QualifiedName&, const AtomicString& value); void didRemoveDOMAttr(Element*, const QualifiedName&); - void styleAttributeInvalidated(const WillBeHeapVector<RawPtrWillBeMember<Element> >& elements); + void styleAttributeInvalidated(const WillBeHeapVector<RawPtrWillBeMember<Element>>& elements); void characterDataModified(CharacterData*); void didInvalidateStyleAttr(Node*); void didPushShadowRoot(Element* host, ShadowRoot*); @@ -205,7 +204,7 @@ Document* assertDocument(ErrorString*, int nodeId); private: - InspectorDOMAgent(InspectedFrames*, InjectedScriptManager*, Client*); + InspectorDOMAgent(v8::Isolate*, InspectedFrames*, V8RuntimeAgent*, Client*); void setDocument(Document*); void innerEnable(); @@ -229,9 +228,9 @@ void invalidateFrameOwnerElement(LocalFrame*); PassRefPtr<TypeBuilder::DOM::Node> buildObjectForNode(Node*, int depth, NodeToIdMap*); - PassRefPtr<TypeBuilder::Array<String> > buildArrayForElementAttributes(Element*); - PassRefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > buildArrayForContainerChildren(Node* container, int depth, NodeToIdMap* nodesMap); - PassRefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > buildArrayForPseudoElements(Element*, NodeToIdMap* nodesMap); + PassRefPtr<TypeBuilder::Array<String>> buildArrayForElementAttributes(Element*); + PassRefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node>> buildArrayForContainerChildren(Node* container, int depth, NodeToIdMap* nodesMap); + PassRefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node>> buildArrayForPseudoElements(Element*, NodeToIdMap* nodesMap); PassRefPtr<TypeBuilder::Array<TypeBuilder::DOM::BackendNode>> buildArrayForDistributedNodes(InsertionPoint*); Node* nodeForPath(const String& path); @@ -245,21 +244,22 @@ RawPtrWillBeMember<InspectorRevalidateDOMTask> revalidateTask(); + v8::Isolate* m_isolate; RawPtrWillBeMember<InspectedFrames> m_inspectedFrames; - InjectedScriptManager* m_injectedScriptManager; + V8RuntimeAgent* m_runtimeAgent; Client* m_client; RawPtrWillBeMember<DOMListener> m_domListener; OwnPtrWillBeMember<NodeToIdMap> m_documentNodeToIdMap; // Owns node mappings for dangling nodes. - WillBeHeapVector<OwnPtrWillBeMember<NodeToIdMap> > m_danglingNodeToIdMaps; - WillBeHeapHashMap<int, RawPtrWillBeMember<Node> > m_idToNode; - WillBeHeapHashMap<int, RawPtrWillBeMember<NodeToIdMap> > m_idToNodesMap; + WillBeHeapVector<OwnPtrWillBeMember<NodeToIdMap>> m_danglingNodeToIdMaps; + WillBeHeapHashMap<int, RawPtrWillBeMember<Node>> m_idToNode; + WillBeHeapHashMap<int, RawPtrWillBeMember<NodeToIdMap>> m_idToNodesMap; HashSet<int> m_childrenRequested; HashSet<int> m_distributedNodesRequested; HashMap<int, int> m_cachedChildCount; int m_lastNodeId; RefPtrWillBeMember<Document> m_document; - typedef WillBeHeapHashMap<String, WillBeHeapVector<RefPtrWillBeMember<Node> > > SearchResults; + typedef WillBeHeapHashMap<String, WillBeHeapVector<RefPtrWillBeMember<Node>>> SearchResults; SearchResults m_searchResults; OwnPtrWillBeMember<InspectorRevalidateDOMTask> m_revalidateTask; OwnPtrWillBeMember<InspectorHistory> m_history;
diff --git a/third_party/WebKit/Source/core/inspector/InspectorDOMDebuggerAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorDOMDebuggerAgent.cpp index d231ceae..3f5d25d 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorDOMDebuggerAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorDOMDebuggerAgent.cpp
@@ -40,12 +40,9 @@ #include "core/frame/LocalDOMWindow.h" #include "core/inspector/InspectorDOMAgent.h" #include "core/inspector/InstrumentingAgents.h" -#include "core/inspector/v8/EventListenerInfo.h" -#include "core/inspector/v8/InjectedScript.h" -#include "core/inspector/v8/InjectedScriptHost.h" -#include "core/inspector/v8/InjectedScriptManager.h" -#include "core/inspector/v8/RemoteObjectId.h" -#include "core/inspector/v8/V8DebuggerAgent.h" +#include "core/inspector/v8/public/V8DebuggerAgent.h" +#include "core/inspector/v8/public/V8EventListenerInfo.h" +#include "core/inspector/v8/public/V8RuntimeAgent.h" #include "platform/JSONValues.h" namespace { @@ -88,12 +85,12 @@ static const char enabled[] = "enabled"; } -PassOwnPtrWillBeRawPtr<InspectorDOMDebuggerAgent> InspectorDOMDebuggerAgent::create(InjectedScriptManager* injectedScriptManager, InspectorDOMAgent* domAgent, V8DebuggerAgent* debuggerAgent) +PassOwnPtrWillBeRawPtr<InspectorDOMDebuggerAgent> InspectorDOMDebuggerAgent::create(v8::Isolate* isolate, InspectorDOMAgent* domAgent, V8RuntimeAgent* runtimeAgent, V8DebuggerAgent* debuggerAgent) { - return adoptPtrWillBeNoop(new InspectorDOMDebuggerAgent(injectedScriptManager, domAgent, debuggerAgent)); + return adoptPtrWillBeNoop(new InspectorDOMDebuggerAgent(isolate, domAgent, runtimeAgent, debuggerAgent)); } -void InspectorDOMDebuggerAgent::eventListenersInfoForTarget(v8::Isolate* isolate, v8::Local<v8::Value> value, EventListenerInfoMap& eventInformation) +void InspectorDOMDebuggerAgent::eventListenersInfoForTarget(v8::Isolate* isolate, v8::Local<v8::Value> value, V8EventListenerInfoMap& eventInformation) { EventTarget* target = V8EventTarget::toImplWithTypeCheck(isolate, value); // We need to handle LocalDOMWindow specially, because LocalDOMWindow wrapper exists on prototype chain. @@ -127,16 +124,17 @@ if (handler.IsEmpty()) continue; if (!eventInformation.get(type)) - eventInformation.set(type, adoptPtr(new Vector<EventListenerInfo>())); - eventInformation.get(type)->append(EventListenerInfo(type, listeners->at(k).useCapture, handler)); + eventInformation.set(type, adoptPtr(new Vector<V8EventListenerInfo>())); + eventInformation.get(type)->append(V8EventListenerInfo(type, listeners->at(k).useCapture, handler)); } } } -InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent(InjectedScriptManager* injectedScriptManager, InspectorDOMAgent* domAgent, V8DebuggerAgent* debuggerAgent) +InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent(v8::Isolate* isolate, InspectorDOMAgent* domAgent, V8RuntimeAgent* runtimeAgent, V8DebuggerAgent* debuggerAgent) : InspectorBaseAgent<InspectorDOMDebuggerAgent, InspectorFrontend::DOMDebugger>("DOMDebugger") - , m_injectedScriptManager(injectedScriptManager) + , m_isolate(isolate) , m_domAgent(domAgent) + , m_runtimeAgent(runtimeAgent) , m_debuggerAgent(debuggerAgent) { } @@ -277,7 +275,7 @@ if (m_domBreakpoints.size()) { // Remove subtree breakpoints. m_domBreakpoints.remove(node); - WillBeHeapVector<RawPtrWillBeMember<Node> > stack(1, InspectorDOMAgent::innerFirstChild(node)); + WillBeHeapVector<RawPtrWillBeMember<Node>> stack(1, InspectorDOMAgent::innerFirstChild(node)); do { Node* node = stack.last(); stack.removeLast(); @@ -357,62 +355,48 @@ void InspectorDOMDebuggerAgent::getEventListeners(ErrorString* errorString, const String& objectId, RefPtr<TypeBuilder::Array<TypeBuilder::DOMDebugger::EventListener>>& listenersArray) { - OwnPtr<RemoteObjectId> remoteId = RemoteObjectId::parse(objectId); - if (!remoteId) { - *errorString = "Invalid object id"; - return; - } - InjectedScript* injectedScript = m_injectedScriptManager->findInjectedScript(remoteId.get()); - if (!injectedScript) { - *errorString = "Inspected frame has gone"; - return; - } - v8::HandleScope handles(injectedScript->isolate()); - ScriptState* state = ScriptState::from(injectedScript->context()); - if (!state) { - *errorString = "Inspected frame has gone"; - return; - } - ScriptState::Scope scope(state); - v8::Local<v8::Value> value = injectedScript->findObject(*remoteId); + v8::HandleScope handles(m_isolate); + + v8::Local<v8::Context> context; + String objectGroup; + v8::Local<v8::Value> value = m_runtimeAgent->findObject(objectId, &context, &objectGroup); if (value.IsEmpty()) { *errorString = "No object with passed objectId"; return; } - - String objectGroup = injectedScript->objectIdToObjectGroupName(objectId); + v8::Context::Scope scope(context); listenersArray = TypeBuilder::Array<TypeBuilder::DOMDebugger::EventListener>::create(); - eventListeners(injectedScript, value, objectGroup, listenersArray); + eventListeners(context, value, objectGroup, listenersArray); } -void InspectorDOMDebuggerAgent::eventListeners(InjectedScript* injectedScript, v8::Local<v8::Value> object, const String& objectGroup, RefPtr<TypeBuilder::Array<TypeBuilder::DOMDebugger::EventListener>>& listenersArray) +void InspectorDOMDebuggerAgent::eventListeners(v8::Local<v8::Context> context, v8::Local<v8::Value> object, const String& objectGroup, RefPtr<TypeBuilder::Array<TypeBuilder::DOMDebugger::EventListener>>& listenersArray) { - EventListenerInfoMap eventInformation; - InspectorDOMDebuggerAgent::eventListenersInfoForTarget(injectedScript->isolate(), object, eventInformation); + V8EventListenerInfoMap eventInformation; + InspectorDOMDebuggerAgent::eventListenersInfoForTarget(context->GetIsolate(), object, eventInformation); for (const auto& it : eventInformation) { for (const auto& it2 : *it.value) { if (!it2.useCapture) continue; - RefPtr<TypeBuilder::DOMDebugger::EventListener> listenerObject = buildObjectForEventListener(injectedScript, it2, objectGroup); + RefPtr<TypeBuilder::DOMDebugger::EventListener> listenerObject = buildObjectForEventListener(context, it2, objectGroup); if (listenerObject) listenersArray->addItem(listenerObject); } for (auto& it2 : *it.value) { if (it2.useCapture) continue; - RefPtr<TypeBuilder::DOMDebugger::EventListener> listenerObject = buildObjectForEventListener(injectedScript, it2, objectGroup); + RefPtr<TypeBuilder::DOMDebugger::EventListener> listenerObject = buildObjectForEventListener(context, it2, objectGroup); if (listenerObject) listenersArray->addItem(listenerObject); } } } -PassRefPtr<TypeBuilder::DOMDebugger::EventListener> InspectorDOMDebuggerAgent::buildObjectForEventListener(InjectedScript* injectedScript, const EventListenerInfo& info, const String& objectGroupId) +PassRefPtr<TypeBuilder::DOMDebugger::EventListener> InspectorDOMDebuggerAgent::buildObjectForEventListener(v8::Local<v8::Context> context, const V8EventListenerInfo& info, const String& objectGroupId) { if (info.handler.IsEmpty()) return nullptr; - v8::Isolate* isolate = injectedScript->isolate(); + v8::Isolate* isolate = context->GetIsolate(); v8::Local<v8::Function> function = eventListenerEffectiveFunction(isolate, info.handler); if (function.IsEmpty()) return nullptr; @@ -431,8 +415,8 @@ .setUseCapture(info.useCapture) .setLocation(location); if (!objectGroupId.isEmpty()) { - value->setHandler(injectedScript->wrapObject(function, objectGroupId)); - value->setOriginalHandler(injectedScript->wrapObject(info.handler, objectGroupId)); + value->setHandler(m_runtimeAgent->wrapObject(context, function, objectGroupId)); + value->setOriginalHandler(m_runtimeAgent->wrapObject(context, info.handler, objectGroupId)); } return value.release(); }
diff --git a/third_party/WebKit/Source/core/inspector/InspectorDOMDebuggerAgent.h b/third_party/WebKit/Source/core/inspector/InspectorDOMDebuggerAgent.h index 9abaa779..ac6d308 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorDOMDebuggerAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorDOMDebuggerAgent.h
@@ -35,7 +35,7 @@ #include "core/CoreExport.h" #include "core/inspector/InspectorBaseAgent.h" #include "core/inspector/InspectorDOMAgent.h" -#include "core/inspector/v8/EventListenerInfo.h" +#include "core/inspector/v8/public/V8EventListenerInfo.h" #include "wtf/HashMap.h" #include "wtf/PassOwnPtr.h" #include "wtf/text/WTFString.h" @@ -45,12 +45,11 @@ class Element; class Event; class EventTarget; -class InjectedScriptManager; class InspectorDOMAgent; class JSONObject; class Node; -class RegisteredEventListener; class V8DebuggerAgent; +class V8RuntimeAgent; typedef String ErrorString; @@ -59,9 +58,9 @@ , public InspectorBackendDispatcher::DOMDebuggerCommandHandler { WTF_MAKE_NONCOPYABLE(InspectorDOMDebuggerAgent); public: - static PassOwnPtrWillBeRawPtr<InspectorDOMDebuggerAgent> create(InjectedScriptManager*, InspectorDOMAgent*, V8DebuggerAgent*); + static PassOwnPtrWillBeRawPtr<InspectorDOMDebuggerAgent> create(v8::Isolate*, InspectorDOMAgent*, V8RuntimeAgent*, V8DebuggerAgent*); - static void eventListenersInfoForTarget(v8::Isolate*, v8::Local<v8::Value>, EventListenerInfoMap& listeners); + static void eventListenersInfoForTarget(v8::Isolate*, v8::Local<v8::Value>, V8EventListenerInfoMap& listeners); ~InspectorDOMDebuggerAgent() override; DECLARE_VIRTUAL_TRACE(); @@ -105,7 +104,7 @@ void didCommitLoadForLocalFrame(LocalFrame*) override; private: - InspectorDOMDebuggerAgent(InjectedScriptManager*, InspectorDOMAgent*, V8DebuggerAgent*); + InspectorDOMDebuggerAgent(v8::Isolate*, InspectorDOMAgent*, V8RuntimeAgent*, V8DebuggerAgent*); void pauseOnNativeEventIfNeeded(PassRefPtr<JSONObject> eventData, bool synchronous); PassRefPtr<JSONObject> preparePauseOnNativeEventData(const String& eventName, const String* targetName); @@ -123,11 +122,12 @@ void didRemoveBreakpoint(); void setEnabled(bool); - void eventListeners(InjectedScript*, v8::Local<v8::Value>, const String& objectGroup, RefPtr<TypeBuilder::Array<TypeBuilder::DOMDebugger::EventListener>>& listenersArray); - PassRefPtr<TypeBuilder::DOMDebugger::EventListener> buildObjectForEventListener(InjectedScript*, const EventListenerInfo&, const String& objectGroupId); + void eventListeners(v8::Local<v8::Context>, v8::Local<v8::Value>, const String& objectGroup, RefPtr<TypeBuilder::Array<TypeBuilder::DOMDebugger::EventListener>>& listenersArray); + PassRefPtr<TypeBuilder::DOMDebugger::EventListener> buildObjectForEventListener(v8::Local<v8::Context>, const V8EventListenerInfo&, const String& objectGroupId); - InjectedScriptManager* m_injectedScriptManager; + v8::Isolate* m_isolate; RawPtrWillBeMember<InspectorDOMAgent> m_domAgent; + V8RuntimeAgent* m_runtimeAgent; V8DebuggerAgent* m_debuggerAgent; WillBeHeapHashMap<RawPtrWillBeMember<Node>, uint32_t> m_domBreakpoints; };
diff --git a/third_party/WebKit/Source/core/inspector/InspectorDebuggerAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorDebuggerAgent.cpp index d7f47c3..2200437e 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorDebuggerAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorDebuggerAgent.cpp
@@ -32,7 +32,7 @@ #include "bindings/core/v8/V8Binding.h" #include "core/inspector/AsyncCallTracker.h" #include "core/inspector/MuteConsoleScope.h" -#include "core/inspector/v8/V8Debugger.h" +#include "core/inspector/v8/public/V8Debugger.h" #include "platform/ScriptForbiddenScope.h" namespace blink { @@ -41,9 +41,9 @@ static const char debuggerEnabled[] = "debuggerEnabled"; } -InspectorDebuggerAgent::InspectorDebuggerAgent(InjectedScriptManager* injectedScriptManager, V8Debugger* debugger, int contextGroupId) +InspectorDebuggerAgent::InspectorDebuggerAgent(V8RuntimeAgent* runtimeAgent, V8Debugger* debugger, int contextGroupId) : InspectorBaseAgent<InspectorDebuggerAgent, InspectorFrontend::Debugger>("Debugger") - , m_v8DebuggerAgent(V8DebuggerAgent::create(injectedScriptManager, debugger, contextGroupId)) + , m_v8DebuggerAgent(V8DebuggerAgent::create(runtimeAgent, contextGroupId)) , m_debugger(debugger) { }
diff --git a/third_party/WebKit/Source/core/inspector/InspectorDebuggerAgent.h b/third_party/WebKit/Source/core/inspector/InspectorDebuggerAgent.h index 040970e..e0db303 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorDebuggerAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorDebuggerAgent.h
@@ -32,7 +32,7 @@ #include "core/CoreExport.h" #include "core/inspector/InspectorBaseAgent.h" -#include "core/inspector/v8/V8DebuggerAgent.h" +#include "core/inspector/v8/public/V8DebuggerAgent.h" namespace blink { @@ -93,14 +93,14 @@ void clearFrontend() override; void restore() override; - V8DebuggerAgent* v8DebuggerAgent() const { return m_v8DebuggerAgent.get(); } + V8DebuggerAgent* v8Agent() const { return m_v8DebuggerAgent.get(); } virtual void muteConsole() = 0; virtual void unmuteConsole() = 0; V8Debugger* debugger() { return m_debugger; } protected: - InspectorDebuggerAgent(InjectedScriptManager*, V8Debugger*, int contextGroupId); + InspectorDebuggerAgent(V8RuntimeAgent*, V8Debugger*, int contextGroupId); OwnPtr<V8DebuggerAgent> m_v8DebuggerAgent; OwnPtrWillBeMember<AsyncCallTracker> m_asyncCallTracker;
diff --git a/third_party/WebKit/Source/core/inspector/InspectorHeapProfilerAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorHeapProfilerAgent.cpp index 5edb6f7..8e2524f 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorHeapProfilerAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorHeapProfilerAgent.cpp
@@ -33,9 +33,7 @@ #include "bindings/core/v8/V8Binding.h" #include "core/dom/Document.h" #include "core/frame/LocalDOMWindow.h" -#include "core/inspector/v8/InjectedScript.h" -#include "core/inspector/v8/InjectedScriptHost.h" -#include "core/inspector/v8/RemoteObjectId.h" +#include "core/inspector/v8/public/V8RuntimeAgent.h" #include "platform/Timer.h" #include "wtf/CurrentTime.h" #include <v8-profiler.h> @@ -124,7 +122,7 @@ return object; } -class InspectableHeapObject final : public InjectedScriptHost::InspectableObject { +class InspectableHeapObject final : public V8RuntimeAgent::Inspectable { public: explicit InspectableHeapObject(unsigned heapObjectId) : m_heapObjectId(heapObjectId) { } v8::Local<v8::Value> get(v8::Local<v8::Context> context) override @@ -182,15 +180,15 @@ Timer<HeapStatsUpdateTask> m_timer; }; -PassOwnPtrWillBeRawPtr<InspectorHeapProfilerAgent> InspectorHeapProfilerAgent::create(v8::Isolate* isolate, InjectedScriptManager* injectedScriptManager) +PassOwnPtrWillBeRawPtr<InspectorHeapProfilerAgent> InspectorHeapProfilerAgent::create(v8::Isolate* isolate, V8RuntimeAgent* runtimeAgent) { - return adoptPtrWillBeNoop(new InspectorHeapProfilerAgent(isolate, injectedScriptManager)); + return adoptPtrWillBeNoop(new InspectorHeapProfilerAgent(isolate, runtimeAgent)); } -InspectorHeapProfilerAgent::InspectorHeapProfilerAgent(v8::Isolate* isolate, InjectedScriptManager* injectedScriptManager) +InspectorHeapProfilerAgent::InspectorHeapProfilerAgent(v8::Isolate* isolate, V8RuntimeAgent* runtimeAgent) : InspectorBaseAgent<InspectorHeapProfilerAgent, InspectorFrontend::HeapProfiler>("HeapProfiler") , m_isolate(isolate) - , m_injectedScriptManager(injectedScriptManager) + , m_runtimeAgent(runtimeAgent) { } @@ -333,14 +331,9 @@ *error = "Object is not available"; return; } - InjectedScript* injectedScript = m_injectedScriptManager->injectedScriptFor(heapObject->CreationContext()); - if (!injectedScript) { - *error = "Object is not available. Inspected context is gone"; - return; - } - result = injectedScript->wrapObject(heapObject, objectGroup ? *objectGroup : ""); + result = m_runtimeAgent->wrapObject(heapObject->CreationContext(), heapObject, objectGroup ? *objectGroup : ""); if (!result) - *error = "Failed to wrap object"; + *error = "Object is not available"; } void InspectorHeapProfilerAgent::addInspectedHeapObject(ErrorString* errorString, const String& inspectedHeapObjectId) @@ -351,24 +344,13 @@ *errorString = "Invalid heap snapshot object id"; return; } - m_injectedScriptManager->injectedScriptHost()->addInspectedObject(adoptPtr(new InspectableHeapObject(id))); + m_runtimeAgent->addInspectedObject(adoptPtr(new InspectableHeapObject(id))); } void InspectorHeapProfilerAgent::getHeapObjectId(ErrorString* errorString, const String& objectId, String* heapSnapshotObjectId) { - OwnPtr<RemoteObjectId> remoteId = RemoteObjectId::parse(objectId); - if (!remoteId) { - *errorString = "Invalid object id"; - return; - } - InjectedScript* injectedScript = m_injectedScriptManager->findInjectedScript(remoteId.get()); - if (!injectedScript) { - *errorString = "Inspected context has gone"; - return; - } - - v8::HandleScope handles(injectedScript->isolate()); - v8::Local<v8::Value> value = injectedScript->findObject(*remoteId); + v8::HandleScope handles(m_isolate); + v8::Local<v8::Value> value = m_runtimeAgent->findObject(objectId); if (value.IsEmpty() || value->IsUndefined()) { *errorString = "Object with given id not found"; return;
diff --git a/third_party/WebKit/Source/core/inspector/InspectorHeapProfilerAgent.h b/third_party/WebKit/Source/core/inspector/InspectorHeapProfilerAgent.h index f1d434c..dcdb200 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorHeapProfilerAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorHeapProfilerAgent.h
@@ -47,8 +47,8 @@ namespace blink { -class InjectedScriptManager; class HeapStatsUpdateTask; +class V8RuntimeAgent; typedef String ErrorString; @@ -56,7 +56,7 @@ WTF_MAKE_NONCOPYABLE(InspectorHeapProfilerAgent); USING_FAST_MALLOC_WILL_BE_REMOVED(InspectorHeapProfilerAgent); public: - static PassOwnPtrWillBeRawPtr<InspectorHeapProfilerAgent> create(v8::Isolate*, InjectedScriptManager*); + static PassOwnPtrWillBeRawPtr<InspectorHeapProfilerAgent> create(v8::Isolate*, V8RuntimeAgent*); ~InspectorHeapProfilerAgent() override; DECLARE_VIRTUAL_TRACE(); @@ -78,7 +78,7 @@ private: class HeapStatsUpdateTask; - InspectorHeapProfilerAgent(v8::Isolate*, InjectedScriptManager*); + InspectorHeapProfilerAgent(v8::Isolate*, V8RuntimeAgent*); void requestHeapStatsUpdate(); @@ -86,7 +86,7 @@ void stopTrackingHeapObjectsInternal(); v8::Isolate* m_isolate; - InjectedScriptManager* m_injectedScriptManager; + V8RuntimeAgent* m_runtimeAgent; OwnPtrWillBeMember<HeapStatsUpdateTask> m_heapStatsUpdateTask; };
diff --git a/third_party/WebKit/Source/core/inspector/InspectorHistory.h b/third_party/WebKit/Source/core/inspector/InspectorHistory.h index 58ad609..78d02ed 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorHistory.h +++ b/third_party/WebKit/Source/core/inspector/InspectorHistory.h
@@ -78,7 +78,7 @@ void reset(); private: - WillBeHeapVector<RefPtrWillBeMember<Action> > m_history; + WillBeHeapVector<RefPtrWillBeMember<Action>> m_history; size_t m_afterLastActionIndex; };
diff --git a/third_party/WebKit/Source/core/inspector/InspectorInspectorAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorInspectorAgent.cpp index 7df7a5b..d5a5c81 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorInspectorAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorInspectorAgent.cpp
@@ -35,8 +35,6 @@ #include "core/InspectorFrontend.h" #include "core/dom/Document.h" #include "core/frame/LocalFrame.h" -#include "core/inspector/v8/InjectedScriptHost.h" -#include "core/inspector/v8/InjectedScriptManager.h" #include "core/loader/DocumentLoader.h" #include "core/page/Page.h" #include "platform/weborigin/SecurityOrigin.h" @@ -48,9 +46,8 @@ static const char inspectorAgentEnabled[] = "inspectorAgentEnabled"; } -InspectorInspectorAgent::InspectorInspectorAgent(InjectedScriptManager* injectedScriptManager) +InspectorInspectorAgent::InspectorInspectorAgent() : InspectorBaseAgent<InspectorInspectorAgent, InspectorFrontend::Inspector>("Inspector") - , m_injectedScriptManager(injectedScriptManager) { } @@ -70,16 +67,6 @@ { m_state->setBoolean(InspectorAgentState::inspectorAgentEnabled, false); m_pendingEvaluateTestCommands.clear(); - m_injectedScriptManager->injectedScriptHost()->clearInspectedObjects(); - m_injectedScriptManager->discardInjectedScripts(); -} - -void InspectorInspectorAgent::didCommitLoadForLocalFrame(LocalFrame* frame) -{ - if (frame != frame->localFrameRoot()) - return; - - m_injectedScriptManager->injectedScriptHost()->clearInspectedObjects(); } void InspectorInspectorAgent::restore()
diff --git a/third_party/WebKit/Source/core/inspector/InspectorInspectorAgent.h b/third_party/WebKit/Source/core/inspector/InspectorInspectorAgent.h index 06eca5e..41923aa 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorInspectorAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorInspectorAgent.h
@@ -39,7 +39,6 @@ namespace blink { class LocalFrame; -class InjectedScriptManager; class JSONObject; typedef String ErrorString; @@ -47,9 +46,9 @@ class CORE_EXPORT InspectorInspectorAgent final : public InspectorBaseAgent<InspectorInspectorAgent, InspectorFrontend::Inspector>, public InspectorBackendDispatcher::InspectorCommandHandler { WTF_MAKE_NONCOPYABLE(InspectorInspectorAgent); public: - static PassOwnPtrWillBeRawPtr<InspectorInspectorAgent> create(InjectedScriptManager* injectedScriptManager) + static PassOwnPtrWillBeRawPtr<InspectorInspectorAgent> create() { - return adoptPtrWillBeNoop(new InspectorInspectorAgent(injectedScriptManager)); + return adoptPtrWillBeNoop(new InspectorInspectorAgent()); } ~InspectorInspectorAgent() override; @@ -59,7 +58,6 @@ // InspectorAgent overrides. void disable(ErrorString*) override; - void didCommitLoadForLocalFrame(LocalFrame*) override; void restore() override; // Generic code called from custom implementations. @@ -68,9 +66,7 @@ void inspect(PassRefPtr<TypeBuilder::Runtime::RemoteObject> objectToInspect, PassRefPtr<JSONObject> hints); private: - explicit InspectorInspectorAgent(InjectedScriptManager*); - - InjectedScriptManager* m_injectedScriptManager; + InspectorInspectorAgent(); Vector<std::pair<long, String>> m_pendingEvaluateTestCommands; };
diff --git a/third_party/WebKit/Source/core/inspector/InspectorInstrumentation.cpp b/third_party/WebKit/Source/core/inspector/InspectorInstrumentation.cpp index 486233e..77d6c37 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorInstrumentation.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorInstrumentation.cpp
@@ -110,12 +110,12 @@ didReceiveResourceResponseButCanceledImpl(frame, loader, identifier, r); } -void willDestroyResourceImpl(Resource* cachedResource) +void removedResourceFromMemoryCacheImpl(Resource* cachedResource) { ASSERT(isMainThread()); for (InstrumentingAgents* instrumentingAgents: instrumentingAgentsSet()) { if (InspectorResourceAgent* inspectorResourceAgent = instrumentingAgents->inspectorResourceAgent()) - inspectorResourceAgent->willDestroyResource(cachedResource); + inspectorResourceAgent->removedResourceFromMemoryCache(cachedResource); } }
diff --git a/third_party/WebKit/Source/core/inspector/InspectorInstrumentation.idl b/third_party/WebKit/Source/core/inspector/InspectorInstrumentation.idl index c887f38b..704b333 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorInstrumentation.idl +++ b/third_party/WebKit/Source/core/inspector/InspectorInstrumentation.idl
@@ -327,7 +327,7 @@ void didRunJavaScriptDialog(const InspectorInstrumentationCookie&, bool result); [Inline=Forward] - void willDestroyResource(Resource* cachedResource); + void removedResourceFromMemoryCache(Resource* cachedResource); [AsyncCallTracker, DOMDebugger] void didRequestAnimationFrame([Keep] ExecutionContext*, int callbackId);
diff --git a/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.cpp index 602466e5..18cf6022 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.cpp
@@ -82,7 +82,7 @@ static PassRefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect>> buildScrollRectsForLayer(GraphicsLayer* graphicsLayer, bool reportWheelScrollers) { - RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect> > scrollRects = TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect>::create(); + RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect>> scrollRects = TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect>::create(); WebLayer* webLayer = graphicsLayer->platformLayer(); for (size_t i = 0; i < webLayer->nonFastScrollableRegion().size(); ++i) { scrollRects->addItem(buildScrollRect(webLayer->nonFastScrollableRegion()[i], TypeBuilder::LayerTree::ScrollRect::Type::RepaintsOnScroll)); @@ -123,7 +123,7 @@ if (!transform.isIdentity()) { TransformationMatrix::FloatMatrix4 flattenedMatrix; transform.toColumnMajorFloatArray(flattenedMatrix); - RefPtr<TypeBuilder::Array<double> > transformArray = TypeBuilder::Array<double>::create(); + RefPtr<TypeBuilder::Array<double>> transformArray = TypeBuilder::Array<double>::create(); for (size_t i = 0; i < WTF_ARRAY_LENGTH(flattenedMatrix); ++i) transformArray->addItem(flattenedMatrix[i]); layerObject->setTransform(transformArray); @@ -202,14 +202,14 @@ frontend()->layerPainted(idForLayer(graphicsLayer), domRect.release()); } -PassRefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> > InspectorLayerTreeAgent::buildLayerTree() +PassRefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer>> InspectorLayerTreeAgent::buildLayerTree() { PaintLayerCompositor* compositor = paintLayerCompositor(); if (!compositor || !compositor->inCompositingMode()) return nullptr; LayerIdToNodeIdMap layerIdToNodeIdMap; - RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> > layers = TypeBuilder::Array<TypeBuilder::LayerTree::Layer>::create(); + RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer>> layers = TypeBuilder::Array<TypeBuilder::LayerTree::Layer>::create(); buildLayerIdToNodeIdMap(compositor->rootLayer(), layerIdToNodeIdMap); int scrollingLayerId = m_inspectedFrames->root()->view()->layerForScrolling()->platformLayer()->id(); bool haveBlockingWheelEventHandlers = m_inspectedFrames->root()->chromeClient().eventListenerProperties(WebEventListenerClass::MouseWheel) == WebEventListenerProperties::Blocking; @@ -301,7 +301,7 @@ return result; } -void InspectorLayerTreeAgent::compositingReasons(ErrorString* errorString, const String& layerId, RefPtr<TypeBuilder::Array<String> >& reasonStrings) +void InspectorLayerTreeAgent::compositingReasons(ErrorString* errorString, const String& layerId, RefPtr<TypeBuilder::Array<String>>& reasonStrings) { const GraphicsLayer* graphicsLayer = layerById(errorString, layerId); if (!graphicsLayer) @@ -346,7 +346,7 @@ *errorString = "Invalid argument, no tiles provided"; return; } - Vector<RefPtr<PictureSnapshot::TilePictureStream> > decodedTiles; + Vector<RefPtr<PictureSnapshot::TilePictureStream>> decodedTiles; decodedTiles.grow(tiles->length()); for (size_t i = 0; i < tiles->length(); ++i) { RefPtr<JSONObject> item; @@ -408,7 +408,7 @@ const PictureSnapshot* snapshot = snapshotById(errorString, snapshotId); if (!snapshot) return; - OwnPtr<Vector<char> > base64Data = snapshot->replay(fromStep ? *fromStep : 0, toStep ? *toStep : 0, scale ? *scale : 1.0); + OwnPtr<Vector<char>> base64Data = snapshot->replay(fromStep ? *fromStep : 0, toStep ? *toStep : 0, scale ? *scale : 1.0); if (!base64Data) { *errorString = "Image encoding failed"; return; @@ -430,7 +430,7 @@ return true; } -void InspectorLayerTreeAgent::profileSnapshot(ErrorString* errorString, const String& snapshotId, const int* minRepeatCount, const double* minDuration, const RefPtr<JSONObject>* clipRect, RefPtr<TypeBuilder::Array<TypeBuilder::Array<double> > >& outTimings) +void InspectorLayerTreeAgent::profileSnapshot(ErrorString* errorString, const String& snapshotId, const int* minRepeatCount, const double* minDuration, const RefPtr<JSONObject>* clipRect, RefPtr<TypeBuilder::Array<TypeBuilder::Array<double>>>& outTimings) { const PictureSnapshot* snapshot = snapshotById(errorString, snapshotId); if (!snapshot) @@ -441,17 +441,17 @@ return; } OwnPtr<PictureSnapshot::Timings> timings = snapshot->profile(minRepeatCount ? *minRepeatCount : 1, minDuration ? *minDuration : 0, clipRect ? &rect : 0); - outTimings = TypeBuilder::Array<TypeBuilder::Array<double> >::create(); + outTimings = TypeBuilder::Array<TypeBuilder::Array<double>>::create(); for (size_t i = 0; i < timings->size(); ++i) { const Vector<double>& row = (*timings)[i]; - RefPtr<TypeBuilder::Array<double> > outRow = TypeBuilder::Array<double>::create(); + RefPtr<TypeBuilder::Array<double>> outRow = TypeBuilder::Array<double>::create(); for (size_t j = 0; j < row.size(); ++j) outRow->addItem(row[j]); outTimings->addItem(outRow.release()); } } -void InspectorLayerTreeAgent::snapshotCommandLog(ErrorString* errorString, const String& snapshotId, RefPtr<TypeBuilder::Array<JSONObject> >& commandLog) +void InspectorLayerTreeAgent::snapshotCommandLog(ErrorString* errorString, const String& snapshotId, RefPtr<TypeBuilder::Array<JSONObject>>& commandLog) { const PictureSnapshot* snapshot = snapshotById(errorString, snapshotId); if (!snapshot)
diff --git a/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.h b/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.h index 407af15c..890eafe 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.h
@@ -85,7 +85,7 @@ void snapshotCommandLog(ErrorString*, const String& snapshotId, RefPtr<TypeBuilder::Array<JSONObject>>&) override; // Called by other agents. - PassRefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> > buildLayerTree(); + PassRefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer>> buildLayerTree(); private: static unsigned s_lastSnapshotId; @@ -106,7 +106,7 @@ RawPtrWillBeMember<InspectedFrames> m_inspectedFrames; Vector<int, 2> m_pageOverlayLayerIds; - typedef HashMap<String, RefPtr<PictureSnapshot> > SnapshotById; + typedef HashMap<String, RefPtr<PictureSnapshot>> SnapshotById; SnapshotById m_snapshotById; };
diff --git a/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp index 65f4110..ed7aa11 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp
@@ -57,7 +57,7 @@ #include "core/inspector/InspectorInstrumentation.h" #include "core/inspector/InspectorResourceContentLoader.h" #include "core/inspector/InstrumentingAgents.h" -#include "core/inspector/v8/V8StringUtil.h" +#include "core/inspector/v8/public/V8ContentSearchUtil.h" #include "core/loader/DocumentLoader.h" #include "core/loader/FrameLoader.h" #include "platform/JSONValues.h" @@ -126,7 +126,7 @@ static bool prepareResourceBuffer(Resource* cachedResource, bool* hasZeroSize) { *hasZeroSize = false; - if (!cachedResource || cachedResource->wasPurged()) + if (!cachedResource) return false; if (cachedResource->dataBufferingPolicy() == DoNotBufferData) @@ -505,7 +505,7 @@ m_debuggerAgent->setSkipAllPauses(&unused, false); } -void InspectorPageAgent::getResourceContentAfterResourcesContentLoaded(const String& frameId, const String& url, PassRefPtrWillBeRawPtr<GetResourceContentCallback> callback) +void InspectorPageAgent::getResourceContentAfterResourcesContentLoaded(const String& frameId, const String& url, PassRefPtr<GetResourceContentCallback> callback) { if (!callback->isActive()) return; @@ -526,7 +526,7 @@ callback->sendSuccess(content, base64Encoded); } -void InspectorPageAgent::getResourceContent(ErrorString* errorString, const String& frameId, const String& url, PassRefPtrWillBeRawPtr<GetResourceContentCallback> callback) +void InspectorPageAgent::getResourceContent(ErrorString* errorString, const String& frameId, const String& url, PassRefPtr<GetResourceContentCallback> callback) { if (!m_enabled) { callback->sendFailure("Agent is not enabled."); @@ -535,7 +535,7 @@ m_inspectorResourceContentLoader->ensureResourcesContentLoaded(bind(&InspectorPageAgent::getResourceContentAfterResourcesContentLoaded, this, frameId, url, callback)); } -void InspectorPageAgent::searchContentAfterResourcesContentLoaded(const String& frameId, const String& url, const String& query, bool caseSensitive, bool isRegex, PassRefPtrWillBeRawPtr<SearchInResourceCallback> callback) +void InspectorPageAgent::searchContentAfterResourcesContentLoaded(const String& frameId, const String& url, const String& query, bool caseSensitive, bool isRegex, PassRefPtr<SearchInResourceCallback> callback) { if (!callback->isActive()) return; @@ -555,11 +555,11 @@ } RefPtr<TypeBuilder::Array<TypeBuilder::Debugger::SearchMatch>> results; - results = V8StringUtil::searchInTextByLines(m_debuggerAgent->debugger(), content, query, caseSensitive, isRegex); + results = V8ContentSearchUtil::searchInTextByLines(m_debuggerAgent->debugger(), content, query, caseSensitive, isRegex); callback->sendSuccess(results); } -void InspectorPageAgent::searchInResource(ErrorString*, const String& frameId, const String& url, const String& query, const bool* optionalCaseSensitive, const bool* optionalIsRegex, PassRefPtrWillBeRawPtr<SearchInResourceCallback> callback) +void InspectorPageAgent::searchInResource(ErrorString*, const String& frameId, const String& url, const String& query, const bool* optionalCaseSensitive, const bool* optionalIsRegex, PassRefPtr<SearchInResourceCallback> callback) { if (!m_enabled) { callback->sendFailure("Agent is not enabled.");
diff --git a/third_party/WebKit/Source/core/inspector/InspectorPageAgent.h b/third_party/WebKit/Source/core/inspector/InspectorPageAgent.h index e71430c..8037d07 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorPageAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorPageAgent.h
@@ -103,8 +103,8 @@ void reload(ErrorString*, const bool* optionalIgnoreCache, const String* optionalScriptToEvaluateOnLoad) override; void navigate(ErrorString*, const String& url, String* frameId) override; void getResourceTree(ErrorString*, RefPtr<TypeBuilder::Page::FrameResourceTree>&) override; - void getResourceContent(ErrorString*, const String& frameId, const String& url, PassRefPtrWillBeRawPtr<GetResourceContentCallback>) override; - void searchInResource(ErrorString*, const String& frameId, const String& url, const String& query, const bool* optionalCaseSensitive, const bool* optionalIsRegex, PassRefPtrWillBeRawPtr<SearchInResourceCallback>) override; + void getResourceContent(ErrorString*, const String& frameId, const String& url, PassRefPtr<GetResourceContentCallback>) override; + void searchInResource(ErrorString*, const String& frameId, const String& url, const String& query, const bool* optionalCaseSensitive, const bool* optionalIsRegex, PassRefPtr<SearchInResourceCallback>) override; void setDocumentContent(ErrorString*, const String& frameId, const String& html) override; void startScreencast(ErrorString*, const String* format, const int* quality, const int* maxWidth, const int* maxHeight, const int* everyNthFrame) override; void stopScreencast(ErrorString*) override; @@ -139,8 +139,8 @@ InspectorPageAgent(InspectedFrames*, Client*, InspectorResourceContentLoader*, InspectorDebuggerAgent*); void finishReload(); - void getResourceContentAfterResourcesContentLoaded(const String& frameId, const String& url, PassRefPtrWillBeRawPtr<GetResourceContentCallback>); - void searchContentAfterResourcesContentLoaded(const String& frameId, const String& url, const String& query, bool caseSensitive, bool isRegex, PassRefPtrWillBeRawPtr<SearchInResourceCallback>); + void getResourceContentAfterResourcesContentLoaded(const String& frameId, const String& url, PassRefPtr<GetResourceContentCallback>); + void searchContentAfterResourcesContentLoaded(const String& frameId, const String& url, const String& query, bool caseSensitive, bool isRegex, PassRefPtr<SearchInResourceCallback>); static bool dataContent(const char* data, unsigned size, const String& textEncodingName, bool withBase64Encode, String* result);
diff --git a/third_party/WebKit/Source/core/inspector/InspectorProfilerAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorProfilerAgent.cpp index bdff8fd..5e24409 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorProfilerAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorProfilerAgent.cpp
@@ -33,7 +33,7 @@ #include "bindings/core/v8/V8Binding.h" #include "core/frame/UseCounter.h" #include "core/inspector/InstrumentingAgents.h" -#include "core/inspector/v8/V8ProfilerAgent.h" +#include "core/inspector/v8/public/V8ProfilerAgent.h" namespace blink {
diff --git a/third_party/WebKit/Source/core/inspector/InspectorResourceAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorResourceAgent.cpp index e4a307f1..b041dfd 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorResourceAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorResourceAgent.cpp
@@ -119,7 +119,7 @@ class InspectorFileReaderLoaderClient final : public FileReaderLoaderClient { WTF_MAKE_NONCOPYABLE(InspectorFileReaderLoaderClient); public: - InspectorFileReaderLoaderClient(PassRefPtr<BlobDataHandle> blob, PassOwnPtr<TextResourceDecoder> decoder, PassRefPtrWillBeRawPtr<GetResponseBodyCallback> callback) + InspectorFileReaderLoaderClient(PassRefPtr<BlobDataHandle> blob, PassOwnPtr<TextResourceDecoder> decoder, PassRefPtr<GetResponseBodyCallback> callback) : m_blob(blob) , m_decoder(decoder) , m_callback(callback) @@ -180,7 +180,7 @@ RefPtr<BlobDataHandle> m_blob; OwnPtr<TextResourceDecoder> m_decoder; - RefPtrWillBePersistent<GetResponseBodyCallback> m_callback; + RefPtr<GetResponseBodyCallback> m_callback; OwnPtr<FileReaderLoader> m_loader; OwnPtr<ArrayBufferBuilder> m_rawData; }; @@ -558,7 +558,12 @@ if (type == InspectorPageAgent::DocumentResource && loader && loader->substituteData().isValid()) return; - if (cachedResource) + // It's only safe to reference a Resource in m_resourcesData if it's in the + // cache at this point. Resources are added to NetworkResourcesData here + // and removed in removedResourceFromMemoryCache(), so if the Resource isn't + // in the cache here, NetworkResourceData's strong reference to the + // Resource will keep it alive indefinitely. + if (cachedResource && memoryCache()->contains(cachedResource)) m_resourcesData->addResource(requestId, cachedResource); String frameId = IdentifiersFactory::frameId(frame); String loaderId = loader ? IdentifiersFactory::loaderId(loader) : ""; @@ -742,13 +747,13 @@ m_pendingRequest = nullptr; } -void InspectorResourceAgent::willDestroyResource(Resource* cachedResource) +void InspectorResourceAgent::removedResourceFromMemoryCache(Resource* cachedResource) { String content; bool base64Encoded; bool hasContent = InspectorPageAgent::cachedResourceContent(cachedResource, &content, &base64Encoded); Vector<String> requestIds = m_resourcesData->removeResource(cachedResource); - if (hasContent) { + if (hasContent && !isErrorStatusCode(cachedResource->response().httpStatusCode())) { for (auto& request : requestIds) m_resourcesData->setResourceContent(request, content, base64Encoded); } @@ -902,7 +907,7 @@ m_state->setObject(ResourceAgentState::extraRequestHeaders, headers); } -bool InspectorResourceAgent::getResponseBodyBlob(const String& requestId, PassRefPtrWillBeRawPtr<GetResponseBodyCallback> callback) +bool InspectorResourceAgent::getResponseBodyBlob(const String& requestId, PassRefPtr<GetResponseBodyCallback> callback) { NetworkResourcesData::ResourceData const* resourceData = m_resourcesData->data(requestId); if (!resourceData) @@ -920,9 +925,9 @@ } -void InspectorResourceAgent::getResponseBody(ErrorString* errorString, const String& requestId, PassRefPtrWillBeRawPtr<GetResponseBodyCallback> passCallback) +void InspectorResourceAgent::getResponseBody(ErrorString* errorString, const String& requestId, PassRefPtr<GetResponseBodyCallback> passCallback) { - RefPtrWillBeRawPtr<GetResponseBodyCallback> callback = passCallback; + RefPtr<GetResponseBodyCallback> callback = passCallback; NetworkResourcesData::ResourceData const* resourceData = m_resourcesData->data(requestId); if (!resourceData) { callback->sendFailure("No resource with given identifier found");
diff --git a/third_party/WebKit/Source/core/inspector/InspectorResourceAgent.h b/third_party/WebKit/Source/core/inspector/InspectorResourceAgent.h index d266102..5c4df40 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorResourceAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorResourceAgent.h
@@ -109,7 +109,7 @@ void willDispachEventSourceEvent(ThreadableLoaderClient*, const AtomicString& eventName, const AtomicString& eventId, const Vector<UChar>& data); void didFinishEventSourceRequest(ThreadableLoaderClient*); - void willDestroyResource(Resource*); + void removedResourceFromMemoryCache(Resource*); void applyUserAgentOverride(String* userAgent); @@ -135,7 +135,7 @@ void enable(ErrorString*) override; void setUserAgentOverride(ErrorString*, const String& userAgent) override; void setExtraHTTPHeaders(ErrorString*, const RefPtr<JSONObject>&) override; - void getResponseBody(ErrorString*, const String& requestId, PassRefPtrWillBeRawPtr<GetResponseBodyCallback>) override; + void getResponseBody(ErrorString*, const String& requestId, PassRefPtr<GetResponseBodyCallback>) override; void addBlockedURL(ErrorString*, const String& url) override; void removeBlockedURL(ErrorString*, const String& url) override; @@ -163,7 +163,7 @@ void removeFinishedReplayXHRFired(Timer<InspectorResourceAgent>*); void didFinishXHRInternal(ExecutionContext*, XMLHttpRequest*, ThreadableLoaderClient*, const AtomicString&, const String&, bool); - bool getResponseBodyBlob(const String& requestId, PassRefPtrWillBeRawPtr<GetResponseBodyCallback>); + bool getResponseBodyBlob(const String& requestId, PassRefPtr<GetResponseBodyCallback>); RawPtrWillBeMember<InspectedFrames> m_inspectedFrames; String m_userAgentOverride; @@ -181,7 +181,7 @@ RefPtrWillBeMember<XHRReplayData> m_pendingXHRReplayData; - typedef HashMap<String, RefPtr<TypeBuilder::Network::Initiator> > FrameNavigationInitiatorMap; + typedef HashMap<String, RefPtr<TypeBuilder::Network::Initiator>> FrameNavigationInitiatorMap; FrameNavigationInitiatorMap m_frameNavigationInitiatorMap; // FIXME: InspectorResourceAgent should now be aware of style recalculation.
diff --git a/third_party/WebKit/Source/core/inspector/InspectorResourceContentLoader.cpp b/third_party/WebKit/Source/core/inspector/InspectorResourceContentLoader.cpp index 49fff9b..5ff9960 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorResourceContentLoader.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorResourceContentLoader.cpp
@@ -12,7 +12,6 @@ #include "core/fetch/RawResource.h" #include "core/fetch/Resource.h" #include "core/fetch/ResourceFetcher.h" -#include "core/fetch/ResourcePtr.h" #include "core/fetch/StyleSheetResourceClient.h" #include "core/frame/LocalFrame.h" #include "core/inspector/InspectedFrames.h" @@ -114,7 +113,7 @@ if (!resourceRequest.url().string().isEmpty()) { urlsToFetch.add(resourceRequest.url().string()); FetchRequest request(resourceRequest, FetchInitiatorTypeNames::internal); - ResourcePtr<Resource> resource = RawResource::fetch(request, document->fetcher()); + RefPtrWillBeRawPtr<Resource> resource = RawResource::fetch(request, document->fetcher()); if (resource) { // Prevent garbage collection by holding a reference to this resource. m_resources.append(resource.get()); @@ -124,7 +123,7 @@ } } - WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet> > styleSheets; + WillBeHeapVector<RawPtrWillBeMember<CSSStyleSheet>> styleSheets; InspectorCSSAgent::collectAllDocumentStyleSheets(document, styleSheets); for (CSSStyleSheet* styleSheet : styleSheets) { if (styleSheet->isInline() || !styleSheet->contents()->loadCompleted()) @@ -135,7 +134,7 @@ urlsToFetch.add(url); FetchRequest request(ResourceRequest(url), FetchInitiatorTypeNames::internal); request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestContextInternal); - ResourcePtr<Resource> resource = CSSStyleSheetResource::fetch(request, document->fetcher()); + RefPtrWillBeRawPtr<Resource> resource = CSSStyleSheetResource::fetch(request, document->fetcher()); if (!resource) continue; // Prevent garbage collection by holding a reference to this resource. @@ -168,6 +167,7 @@ #if ENABLE(OILPAN) visitor->trace(m_inspectedFrame); visitor->trace(m_pendingResourceClients); + visitor->trace(m_resources); #endif }
diff --git a/third_party/WebKit/Source/core/inspector/InspectorResourceContentLoader.h b/third_party/WebKit/Source/core/inspector/InspectorResourceContentLoader.h index ff9ab12..f22b146 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorResourceContentLoader.h +++ b/third_party/WebKit/Source/core/inspector/InspectorResourceContentLoader.h
@@ -6,7 +6,7 @@ #define InspectorResourceContentLoader_h #include "core/CoreExport.h" -#include "core/fetch/ResourcePtr.h" +#include "core/fetch/Resource.h" #include "wtf/Functional.h" #include "wtf/HashSet.h" #include "wtf/Noncopyable.h" @@ -47,7 +47,7 @@ bool m_started; RawPtrWillBeMember<LocalFrame> m_inspectedFrame; WillBeHeapHashSet<RawPtrWillBeMember<ResourceClient>> m_pendingResourceClients; - Vector<ResourcePtr<Resource>> m_resources; + WillBeHeapVector<RefPtrWillBeMember<Resource>> m_resources; friend class ResourceClient; };
diff --git a/third_party/WebKit/Source/core/inspector/InspectorRuntimeAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorRuntimeAgent.cpp index b628278..d104d1c 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorRuntimeAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorRuntimeAgent.cpp
@@ -33,11 +33,8 @@ #include "bindings/core/v8/ScriptState.h" #include "core/inspector/InspectorTraceEvents.h" #include "core/inspector/MuteConsoleScope.h" -#include "core/inspector/v8/InjectedScript.h" -#include "core/inspector/v8/InjectedScriptManager.h" -#include "core/inspector/v8/RemoteObjectId.h" -#include "core/inspector/v8/V8Debugger.h" -#include "core/inspector/v8/V8RuntimeAgent.h" +#include "core/inspector/v8/public/V8Debugger.h" +#include "core/inspector/v8/public/V8RuntimeAgent.h" #include "platform/JSONValues.h" using blink::TypeBuilder::Runtime::ExecutionContextDescription; @@ -48,11 +45,10 @@ static const char runtimeEnabled[] = "runtimeEnabled"; }; -InspectorRuntimeAgent::InspectorRuntimeAgent(InjectedScriptManager* injectedScriptManager, V8Debugger* debugger, Client* client) +InspectorRuntimeAgent::InspectorRuntimeAgent(V8Debugger* debugger, Client* client) : InspectorBaseAgent<InspectorRuntimeAgent, InspectorFrontend::Runtime>("Runtime") , m_enabled(false) - , m_v8RuntimeAgent(V8RuntimeAgent::create(injectedScriptManager, debugger)) - , m_injectedScriptManager(injectedScriptManager) + , m_v8RuntimeAgent(V8RuntimeAgent::create(debugger)) , m_client(client) { } @@ -96,9 +92,7 @@ executionContextId = *optExecutionContextId; } else { v8::HandleScope handles(defaultScriptState()->isolate()); - InjectedScript* injectedScript = m_injectedScriptManager->injectedScriptFor(defaultScriptState()->context()); - ASSERT(injectedScript); - executionContextId = injectedScript->contextId(); + executionContextId = m_v8RuntimeAgent->ensureDefaultContextAvailable(defaultScriptState()->context()); } MuteConsoleScope<InspectorRuntimeAgent> muteScope; if (asBool(doNotPauseOnExceptionsAndMuteConsole))
diff --git a/third_party/WebKit/Source/core/inspector/InspectorRuntimeAgent.h b/third_party/WebKit/Source/core/inspector/InspectorRuntimeAgent.h index d72a859..d261813 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorRuntimeAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorRuntimeAgent.h
@@ -105,20 +105,17 @@ virtual void muteConsole() = 0; virtual void unmuteConsole() = 0; + V8RuntimeAgent* v8Agent() { return m_v8RuntimeAgent.get(); } + protected: - InspectorRuntimeAgent(InjectedScriptManager*, V8Debugger*, Client*); + InspectorRuntimeAgent(V8Debugger*, Client*); virtual ScriptState* defaultScriptState() = 0; - InjectedScriptManager* injectedScriptManager() { return m_injectedScriptManager; } void reportExecutionContextCreated(ScriptState*, const String& type, const String& origin, const String& humanReadableName, const String& frameId); void reportExecutionContextDestroyed(ScriptState*); bool m_enabled; - -private: - OwnPtr<V8RuntimeAgent> m_v8RuntimeAgent; - InjectedScriptManager* m_injectedScriptManager; Client* m_client; };
diff --git a/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp b/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp index faf32d9..aa88420 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp
@@ -49,7 +49,7 @@ #include "core/inspector/IdentifiersFactory.h" #include "core/inspector/InspectorCSSAgent.h" #include "core/inspector/InspectorResourceAgent.h" -#include "core/inspector/v8/V8StringUtil.h" +#include "core/inspector/v8/public/V8ContentSearchUtil.h" #include "core/svg/SVGStyleElement.h" #include "wtf/OwnPtr.h" #include "wtf/PassOwnPtr.h" @@ -783,8 +783,8 @@ PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyle::styleWithProperties() { - RefPtr<Array<TypeBuilder::CSS::CSSProperty> > propertiesObject = Array<TypeBuilder::CSS::CSSProperty>::create(); - RefPtr<Array<TypeBuilder::CSS::ShorthandEntry> > shorthandEntries = Array<TypeBuilder::CSS::ShorthandEntry>::create(); + RefPtr<Array<TypeBuilder::CSS::CSSProperty>> propertiesObject = Array<TypeBuilder::CSS::CSSProperty>::create(); + RefPtr<Array<TypeBuilder::CSS::ShorthandEntry>> shorthandEntries = Array<TypeBuilder::CSS::ShorthandEntry>::create(); HashSet<String> foundShorthands; WillBeHeapVector<CSSPropertySourceData> properties; @@ -1487,7 +1487,7 @@ String styleSheetText; bool success = getText(&styleSheetText); if (success) { - String commentValue = V8StringUtil::findSourceURL(styleSheetText, true); + String commentValue = V8ContentSearchUtil::findSourceURL(styleSheetText, true); if (!commentValue.isEmpty()) { m_sourceURL = commentValue; return commentValue; @@ -1538,7 +1538,7 @@ String styleSheetText; bool success = getText(&styleSheetText); if (success) { - String commentValue = V8StringUtil::findSourceMapURL(styleSheetText, true); + String commentValue = V8ContentSearchUtil::findSourceMapURL(styleSheetText, true); if (!commentValue.isEmpty()) return commentValue; }
diff --git a/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.h b/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.h index 1df9cd0..d9c1857 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.h +++ b/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.h
@@ -50,7 +50,7 @@ class InspectorResourceAgent; class InspectorStyleSheetBase; -typedef WillBeHeapVector<RefPtrWillBeMember<CSSRule> > CSSRuleVector; +typedef WillBeHeapVector<RefPtrWillBeMember<CSSRule>> CSSRuleVector; typedef String ErrorString; typedef Vector<unsigned> LineEndings;
diff --git a/third_party/WebKit/Source/core/inspector/InspectorTracingAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorTracingAgent.cpp index 978795f9..4cb725e4 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorTracingAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorTracingAgent.cpp
@@ -44,7 +44,7 @@ emitMetadataEvents(); } -void InspectorTracingAgent::start(ErrorString*, const String* categoryFilter, const String*, const double*, const String*, PassRefPtrWillBeRawPtr<StartCallback> callback) +void InspectorTracingAgent::start(ErrorString*, const String* categoryFilter, const String*, const double*, const String*, PassRefPtr<StartCallback> callback) { ASSERT(sessionId().isEmpty()); m_state->setString(TracingAgentState::sessionId, IdentifiersFactory::createIdentifier()); @@ -53,7 +53,7 @@ callback->sendSuccess(); } -void InspectorTracingAgent::end(ErrorString* errorString, PassRefPtrWillBeRawPtr<EndCallback> callback) +void InspectorTracingAgent::end(ErrorString* errorString, PassRefPtr<EndCallback> callback) { m_client->disableTracing(); resetSessionId();
diff --git a/third_party/WebKit/Source/core/inspector/InspectorTracingAgent.h b/third_party/WebKit/Source/core/inspector/InspectorTracingAgent.h index 522f039..1537231 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorTracingAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorTracingAgent.h
@@ -43,8 +43,8 @@ void disable(ErrorString*) override; // Protocol method implementations. - void start(ErrorString*, const String* categoryFilter, const String*, const double*, const String*, PassRefPtrWillBeRawPtr<StartCallback>) override; - void end(ErrorString*, PassRefPtrWillBeRawPtr<EndCallback>) override; + void start(ErrorString*, const String* categoryFilter, const String*, const double*, const String*, PassRefPtr<StartCallback>) override; + void end(ErrorString*, PassRefPtr<EndCallback>) override; // Methods for other agents to use. void setLayerTreeId(int);
diff --git a/third_party/WebKit/Source/core/inspector/MainThreadDebugger.cpp b/third_party/WebKit/Source/core/inspector/MainThreadDebugger.cpp index f1e6cd2..177937d5 100644 --- a/third_party/WebKit/Source/core/inspector/MainThreadDebugger.cpp +++ b/third_party/WebKit/Source/core/inspector/MainThreadDebugger.cpp
@@ -33,10 +33,12 @@ #include "bindings/core/v8/BindingSecurity.h" #include "bindings/core/v8/DOMWrapperWorld.h" #include "bindings/core/v8/V8Window.h" +#include "core/frame/FrameConsole.h" #include "core/frame/LocalDOMWindow.h" #include "core/frame/LocalFrame.h" +#include "core/frame/UseCounter.h" #include "core/inspector/InspectorTaskRunner.h" -#include "core/inspector/v8/V8Debugger.h" +#include "core/inspector/v8/public/V8Debugger.h" #include "platform/UserGestureIndicator.h" #include "wtf/OwnPtr.h" #include "wtf/PassOwnPtr.h" @@ -125,6 +127,18 @@ m_clientMessageLoop->quitNow(); } +void MainThreadDebugger::muteWarningsAndDeprecations() +{ + FrameConsole::mute(); + UseCounter::muteForInspector(); +} + +void MainThreadDebugger::unmuteWarningsAndDeprecations() +{ + FrameConsole::unmute(); + UseCounter::unmuteForInspector(); +} + bool MainThreadDebugger::callingContextCanAccessContext(v8::Local<v8::Context> calling, v8::Local<v8::Context> target) { DOMWindow* window = toDOMWindow(target);
diff --git a/third_party/WebKit/Source/core/inspector/MainThreadDebugger.h b/third_party/WebKit/Source/core/inspector/MainThreadDebugger.h index 8d55a4f..ae6cab7 100644 --- a/third_party/WebKit/Source/core/inspector/MainThreadDebugger.h +++ b/third_party/WebKit/Source/core/inspector/MainThreadDebugger.h
@@ -79,6 +79,8 @@ // V8DebuggerClient implementation. void runMessageLoopOnPause(int contextGroupId) override; void quitMessageLoopOnPause() override; + void muteWarningsAndDeprecations() override; + void unmuteWarningsAndDeprecations() override; bool callingContextCanAccessContext(v8::Local<v8::Context> calling, v8::Local<v8::Context> target) override; static WTF::Mutex& creationMutex();
diff --git a/third_party/WebKit/Source/core/inspector/NetworkResourcesData.cpp b/third_party/WebKit/Source/core/inspector/NetworkResourcesData.cpp index 22e746d..cce304a9 100644 --- a/third_party/WebKit/Source/core/inspector/NetworkResourcesData.cpp +++ b/third_party/WebKit/Source/core/inspector/NetworkResourcesData.cpp
@@ -29,6 +29,7 @@ #include "core/inspector/NetworkResourcesData.h" #include "core/dom/DOMImplementation.h" +#include "core/fetch/MemoryCache.h" #include "core/fetch/Resource.h" #include "platform/SharedBuffer.h" #include "platform/network/ResourceResponse.h" @@ -272,6 +273,7 @@ void NetworkResourcesData::addResource(const String& requestId, Resource* cachedResource) { + ASSERT(memoryCache()->contains(cachedResource)); ResourceData* resourceData = resourceDataForRequestId(requestId); if (!resourceData) return;
diff --git a/third_party/WebKit/Source/core/inspector/NetworkResourcesData.h b/third_party/WebKit/Source/core/inspector/NetworkResourcesData.h index 3f2a4fb..c4ee8b4 100644 --- a/third_party/WebKit/Source/core/inspector/NetworkResourcesData.h +++ b/third_party/WebKit/Source/core/inspector/NetworkResourcesData.h
@@ -124,7 +124,7 @@ PassRefPtr<SharedBuffer> buffer() const { return m_buffer; } void setBuffer(PassRefPtr<SharedBuffer> buffer) { m_buffer = buffer; } - Resource* cachedResource() const { return m_cachedResource; } + Resource* cachedResource() const { return m_cachedResource.get(); } void setResource(Resource* cachedResource) { m_cachedResource = cachedResource; } XHRReplayData* xhrReplayData() const { return m_xhrReplayData.get(); } @@ -157,7 +157,7 @@ OwnPtr<TextResourceDecoder> m_decoder; RefPtr<SharedBuffer> m_buffer; - RawPtrWillBeMember<Resource> m_cachedResource; + RefPtrWillBeMember<Resource> m_cachedResource; RefPtr<BlobDataHandle> m_downloadedFileBlob; };
diff --git a/third_party/WebKit/Source/core/inspector/PageConsoleAgent.cpp b/third_party/WebKit/Source/core/inspector/PageConsoleAgent.cpp index 24707d75..48c5eb7 100644 --- a/third_party/WebKit/Source/core/inspector/PageConsoleAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/PageConsoleAgent.cpp
@@ -45,8 +45,8 @@ int PageConsoleAgent::s_enabledAgentCount = 0; -PageConsoleAgent::PageConsoleAgent(InjectedScriptManager* injectedScriptManager, InspectorDOMAgent* domAgent, InspectedFrames* inspectedFrames) - : InspectorConsoleAgent(injectedScriptManager) +PageConsoleAgent::PageConsoleAgent(V8RuntimeAgent* runtimeAgent, InspectorDOMAgent* domAgent, InspectedFrames* inspectedFrames) + : InspectorConsoleAgent(runtimeAgent) , m_inspectorDOMAgent(domAgent) , m_inspectedFrames(inspectedFrames) {
diff --git a/third_party/WebKit/Source/core/inspector/PageConsoleAgent.h b/third_party/WebKit/Source/core/inspector/PageConsoleAgent.h index 279c35c..2d863a9 100644 --- a/third_party/WebKit/Source/core/inspector/PageConsoleAgent.h +++ b/third_party/WebKit/Source/core/inspector/PageConsoleAgent.h
@@ -47,9 +47,9 @@ class CORE_EXPORT PageConsoleAgent final : public InspectorConsoleAgent { WTF_MAKE_NONCOPYABLE(PageConsoleAgent); public: - static PassOwnPtrWillBeRawPtr<PageConsoleAgent> create(InjectedScriptManager* injectedScriptManager, InspectorDOMAgent* domAgent, InspectedFrames* inspectedFrames) + static PassOwnPtrWillBeRawPtr<PageConsoleAgent> create(V8RuntimeAgent* runtimeAgent, InspectorDOMAgent* domAgent, InspectedFrames* inspectedFrames) { - return adoptPtrWillBeNoop(new PageConsoleAgent(injectedScriptManager, domAgent, inspectedFrames)); + return adoptPtrWillBeNoop(new PageConsoleAgent(runtimeAgent, domAgent, inspectedFrames)); } ~PageConsoleAgent() override; DECLARE_VIRTUAL_TRACE(); @@ -68,7 +68,7 @@ void disableStackCapturingIfNeeded() override; private: - PageConsoleAgent(InjectedScriptManager*, InspectorDOMAgent*, InspectedFrames*); + PageConsoleAgent(V8RuntimeAgent*, InspectorDOMAgent*, InspectedFrames*); void clearMessages(ErrorString*) override; RawPtrWillBeMember<InspectorDOMAgent> m_inspectorDOMAgent;
diff --git a/third_party/WebKit/Source/core/inspector/PageDebuggerAgent.cpp b/third_party/WebKit/Source/core/inspector/PageDebuggerAgent.cpp index 4b5ca5d..f261007 100644 --- a/third_party/WebKit/Source/core/inspector/PageDebuggerAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/PageDebuggerAgent.cpp
@@ -49,13 +49,13 @@ namespace blink { -PassOwnPtrWillBeRawPtr<PageDebuggerAgent> PageDebuggerAgent::create(MainThreadDebugger* mainThreadDebugger, InspectedFrames* inspectedFrames, InjectedScriptManager* injectedScriptManager) +PassOwnPtrWillBeRawPtr<PageDebuggerAgent> PageDebuggerAgent::create(MainThreadDebugger* mainThreadDebugger, InspectedFrames* inspectedFrames, V8RuntimeAgent* runtimeAgent) { - return adoptPtrWillBeNoop(new PageDebuggerAgent(mainThreadDebugger, inspectedFrames, injectedScriptManager)); + return adoptPtrWillBeNoop(new PageDebuggerAgent(mainThreadDebugger, inspectedFrames, runtimeAgent)); } -PageDebuggerAgent::PageDebuggerAgent(MainThreadDebugger* mainThreadDebugger, InspectedFrames* inspectedFrames, InjectedScriptManager* injectedScriptManager) - : InspectorDebuggerAgent(injectedScriptManager, mainThreadDebugger->debugger(), mainThreadDebugger->contextGroupId(inspectedFrames->root())) +PageDebuggerAgent::PageDebuggerAgent(MainThreadDebugger* mainThreadDebugger, InspectedFrames* inspectedFrames, V8RuntimeAgent* runtimeAgent) + : InspectorDebuggerAgent(runtimeAgent, mainThreadDebugger->debugger(), mainThreadDebugger->contextGroupId(inspectedFrames->root())) , m_inspectedFrames(inspectedFrames) { }
diff --git a/third_party/WebKit/Source/core/inspector/PageDebuggerAgent.h b/third_party/WebKit/Source/core/inspector/PageDebuggerAgent.h index 080a5fd7..d51be1b 100644 --- a/third_party/WebKit/Source/core/inspector/PageDebuggerAgent.h +++ b/third_party/WebKit/Source/core/inspector/PageDebuggerAgent.h
@@ -49,7 +49,7 @@ WTF_MAKE_NONCOPYABLE(PageDebuggerAgent); USING_FAST_MALLOC_WILL_BE_REMOVED(PageDebuggerAgent); public: - static PassOwnPtrWillBeRawPtr<PageDebuggerAgent> create(MainThreadDebugger*, InspectedFrames*, InjectedScriptManager*); + static PassOwnPtrWillBeRawPtr<PageDebuggerAgent> create(MainThreadDebugger*, InspectedFrames*, V8RuntimeAgent*); ~PageDebuggerAgent() override; DECLARE_VIRTUAL_TRACE(); @@ -61,7 +61,7 @@ void didClearDocumentOfWindowObject(LocalFrame*); private: - PageDebuggerAgent(MainThreadDebugger*, InspectedFrames*, InjectedScriptManager*); + PageDebuggerAgent(MainThreadDebugger*, InspectedFrames*, V8RuntimeAgent*); void muteConsole() override; void unmuteConsole() override;
diff --git a/third_party/WebKit/Source/core/inspector/PageRuntimeAgent.cpp b/third_party/WebKit/Source/core/inspector/PageRuntimeAgent.cpp index 5a17dc5..21809fa 100644 --- a/third_party/WebKit/Source/core/inspector/PageRuntimeAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/PageRuntimeAgent.cpp
@@ -38,8 +38,7 @@ #include "core/inspector/IdentifiersFactory.h" #include "core/inspector/InspectedFrames.h" #include "core/inspector/InstrumentingAgents.h" -#include "core/inspector/v8/InjectedScript.h" -#include "core/inspector/v8/InjectedScriptManager.h" +#include "core/inspector/v8/public/V8RuntimeAgent.h" #include "core/page/Page.h" #include "platform/weborigin/SecurityOrigin.h" @@ -47,8 +46,8 @@ namespace blink { -PageRuntimeAgent::PageRuntimeAgent(InjectedScriptManager* injectedScriptManager, Client* client, V8Debugger* debugger, InspectedFrames* inspectedFrames) - : InspectorRuntimeAgent(injectedScriptManager, debugger, client) +PageRuntimeAgent::PageRuntimeAgent(Client* client, V8Debugger* debugger, InspectedFrames* inspectedFrames) + : InspectorRuntimeAgent(debugger, client) , m_inspectedFrames(inspectedFrames) , m_mainWorldContextCreated(false) { @@ -102,6 +101,8 @@ return; ASSERT(frontend()); + if (frame == m_inspectedFrames->root()) + m_v8RuntimeAgent->clearInspectedObjects(); frame->script().initializeMainWorld(); }
diff --git a/third_party/WebKit/Source/core/inspector/PageRuntimeAgent.h b/third_party/WebKit/Source/core/inspector/PageRuntimeAgent.h index 97f02e278..84070671 100644 --- a/third_party/WebKit/Source/core/inspector/PageRuntimeAgent.h +++ b/third_party/WebKit/Source/core/inspector/PageRuntimeAgent.h
@@ -43,9 +43,9 @@ class CORE_EXPORT PageRuntimeAgent final : public InspectorRuntimeAgent { public: - static PassOwnPtrWillBeRawPtr<PageRuntimeAgent> create(InjectedScriptManager* injectedScriptManager, InspectorRuntimeAgent::Client* client, V8Debugger* debugger, InspectedFrames* inspectedFrames) + static PassOwnPtrWillBeRawPtr<PageRuntimeAgent> create(InspectorRuntimeAgent::Client* client, V8Debugger* debugger, InspectedFrames* inspectedFrames) { - return adoptPtrWillBeNoop(new PageRuntimeAgent(injectedScriptManager, client, debugger, inspectedFrames)); + return adoptPtrWillBeNoop(new PageRuntimeAgent(client, debugger, inspectedFrames)); } ~PageRuntimeAgent() override; DECLARE_VIRTUAL_TRACE(); @@ -58,7 +58,7 @@ void willReleaseScriptContext(LocalFrame*, ScriptState*); private: - PageRuntimeAgent(InjectedScriptManager*, Client*, V8Debugger*, InspectedFrames*); + PageRuntimeAgent(Client*, V8Debugger*, InspectedFrames*); ScriptState* defaultScriptState() override; void muteConsole() override;
diff --git a/third_party/WebKit/Source/core/inspector/ScriptArguments.cpp b/third_party/WebKit/Source/core/inspector/ScriptArguments.cpp index 5889b840b..409af43 100644 --- a/third_party/WebKit/Source/core/inspector/ScriptArguments.cpp +++ b/third_party/WebKit/Source/core/inspector/ScriptArguments.cpp
@@ -163,7 +163,7 @@ uint32_t m_arrayLimit; v8::Isolate* m_isolate; StringBuilder m_builder; - Vector<v8::Local<v8::Array> > m_visitedArrays; + Vector<v8::Local<v8::Array>> m_visitedArrays; v8::TryCatch m_tryCatch; };
diff --git a/third_party/WebKit/Source/core/inspector/ThreadDebugger.cpp b/third_party/WebKit/Source/core/inspector/ThreadDebugger.cpp index 999baa6..cf702c5 100644 --- a/third_party/WebKit/Source/core/inspector/ThreadDebugger.cpp +++ b/third_party/WebKit/Source/core/inspector/ThreadDebugger.cpp
@@ -26,7 +26,7 @@ { } -void ThreadDebugger::eventListeners(v8::Local<v8::Value> value, EventListenerInfoMap& result) +void ThreadDebugger::eventListeners(v8::Local<v8::Value> value, V8EventListenerInfoMap& result) { InspectorDOMDebuggerAgent::eventListenersInfoForTarget(m_isolate, value, result); }
diff --git a/third_party/WebKit/Source/core/inspector/ThreadDebugger.h b/third_party/WebKit/Source/core/inspector/ThreadDebugger.h index 2b9f593..c6da665 100644 --- a/third_party/WebKit/Source/core/inspector/ThreadDebugger.h +++ b/third_party/WebKit/Source/core/inspector/ThreadDebugger.h
@@ -6,8 +6,8 @@ #define ThreadDebugger_h #include "core/CoreExport.h" -#include "core/inspector/v8/V8Debugger.h" -#include "core/inspector/v8/V8DebuggerClient.h" +#include "core/inspector/v8/public/V8Debugger.h" +#include "core/inspector/v8/public/V8DebuggerClient.h" #include "wtf/Forward.h" #include <v8.h> @@ -23,7 +23,9 @@ ~ThreadDebugger() override; // V8DebuggerClient implementation. - void eventListeners(v8::Local<v8::Value>, EventListenerInfoMap&) override; + void muteWarningsAndDeprecations() override { }; + void unmuteWarningsAndDeprecations() override { }; + void eventListeners(v8::Local<v8::Value>, V8EventListenerInfoMap&) override; v8::MaybeLocal<v8::Object> instantiateObject(v8::Local<v8::Function>) override; v8::MaybeLocal<v8::Value> runCompiledScript(v8::Local<v8::Context>, v8::Local<v8::Script>) override; v8::MaybeLocal<v8::Value> compileAndRunInternalScript(v8::Local<v8::String>) override;
diff --git a/third_party/WebKit/Source/core/inspector/WorkerConsoleAgent.cpp b/third_party/WebKit/Source/core/inspector/WorkerConsoleAgent.cpp index 91bd207..ce789006 100644 --- a/third_party/WebKit/Source/core/inspector/WorkerConsoleAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/WorkerConsoleAgent.cpp
@@ -38,8 +38,8 @@ namespace blink { -WorkerConsoleAgent::WorkerConsoleAgent(InjectedScriptManager* injectedScriptManager, WorkerGlobalScope* workerGlobalScope) - : InspectorConsoleAgent(injectedScriptManager) +WorkerConsoleAgent::WorkerConsoleAgent(V8RuntimeAgent* runtimeAgent, WorkerGlobalScope* workerGlobalScope) + : InspectorConsoleAgent(runtimeAgent) , m_workerGlobalScope(workerGlobalScope) { }
diff --git a/third_party/WebKit/Source/core/inspector/WorkerConsoleAgent.h b/third_party/WebKit/Source/core/inspector/WorkerConsoleAgent.h index 072d5ae0..d836e0c 100644 --- a/third_party/WebKit/Source/core/inspector/WorkerConsoleAgent.h +++ b/third_party/WebKit/Source/core/inspector/WorkerConsoleAgent.h
@@ -41,9 +41,9 @@ class WorkerConsoleAgent final : public InspectorConsoleAgent { WTF_MAKE_NONCOPYABLE(WorkerConsoleAgent); public: - static PassOwnPtrWillBeRawPtr<WorkerConsoleAgent> create(InjectedScriptManager* injectedScriptManager, WorkerGlobalScope* workerGlobalScope) + static PassOwnPtrWillBeRawPtr<WorkerConsoleAgent> create(V8RuntimeAgent* runtimeAgent, WorkerGlobalScope* workerGlobalScope) { - return adoptPtrWillBeNoop(new WorkerConsoleAgent(injectedScriptManager, workerGlobalScope)); + return adoptPtrWillBeNoop(new WorkerConsoleAgent(runtimeAgent, workerGlobalScope)); } ~WorkerConsoleAgent() override; DECLARE_VIRTUAL_TRACE(); @@ -58,7 +58,7 @@ void disableStackCapturingIfNeeded() override; private: - WorkerConsoleAgent(InjectedScriptManager*, WorkerGlobalScope*); + WorkerConsoleAgent(V8RuntimeAgent*, WorkerGlobalScope*); RawPtrWillBeMember<WorkerGlobalScope> m_workerGlobalScope; };
diff --git a/third_party/WebKit/Source/core/inspector/WorkerDebuggerAgent.cpp b/third_party/WebKit/Source/core/inspector/WorkerDebuggerAgent.cpp index 6398246e..ca902525 100644 --- a/third_party/WebKit/Source/core/inspector/WorkerDebuggerAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/WorkerDebuggerAgent.cpp
@@ -31,19 +31,18 @@ #include "core/inspector/WorkerDebuggerAgent.h" #include "core/inspector/WorkerThreadDebugger.h" -#include "core/inspector/v8/InjectedScript.h" -#include "core/inspector/v8/V8Debugger.h" +#include "core/inspector/v8/public/V8Debugger.h" #include "core/workers/WorkerGlobalScope.h" namespace blink { -PassOwnPtrWillBeRawPtr<WorkerDebuggerAgent> WorkerDebuggerAgent::create(V8Debugger* debugger, WorkerGlobalScope* inspectedWorkerGlobalScope, InjectedScriptManager* injectedScriptManager) +PassOwnPtrWillBeRawPtr<WorkerDebuggerAgent> WorkerDebuggerAgent::create(V8Debugger* debugger, WorkerGlobalScope* inspectedWorkerGlobalScope, V8RuntimeAgent* runtimeAgent) { - return adoptPtrWillBeNoop(new WorkerDebuggerAgent(debugger, inspectedWorkerGlobalScope, injectedScriptManager)); + return adoptPtrWillBeNoop(new WorkerDebuggerAgent(debugger, inspectedWorkerGlobalScope, runtimeAgent)); } -WorkerDebuggerAgent::WorkerDebuggerAgent(V8Debugger* debugger, WorkerGlobalScope* inspectedWorkerGlobalScope, InjectedScriptManager* injectedScriptManager) - : InspectorDebuggerAgent(injectedScriptManager, debugger, WorkerThreadDebugger::contextGroupId()) +WorkerDebuggerAgent::WorkerDebuggerAgent(V8Debugger* debugger, WorkerGlobalScope* inspectedWorkerGlobalScope, V8RuntimeAgent* runtimeAgent) + : InspectorDebuggerAgent(runtimeAgent, debugger, WorkerThreadDebugger::contextGroupId()) , m_inspectedWorkerGlobalScope(inspectedWorkerGlobalScope) { }
diff --git a/third_party/WebKit/Source/core/inspector/WorkerDebuggerAgent.h b/third_party/WebKit/Source/core/inspector/WorkerDebuggerAgent.h index 1376f04f..cb8355e 100644 --- a/third_party/WebKit/Source/core/inspector/WorkerDebuggerAgent.h +++ b/third_party/WebKit/Source/core/inspector/WorkerDebuggerAgent.h
@@ -43,12 +43,12 @@ WTF_MAKE_NONCOPYABLE(WorkerDebuggerAgent); USING_FAST_MALLOC_WILL_BE_REMOVED(WorkerDebuggerAgent); public: - static PassOwnPtrWillBeRawPtr<WorkerDebuggerAgent> create(V8Debugger*, WorkerGlobalScope*, InjectedScriptManager*); + static PassOwnPtrWillBeRawPtr<WorkerDebuggerAgent> create(V8Debugger*, WorkerGlobalScope*, V8RuntimeAgent*); ~WorkerDebuggerAgent() override; DECLARE_VIRTUAL_TRACE(); private: - WorkerDebuggerAgent(V8Debugger*, WorkerGlobalScope*, InjectedScriptManager*); + WorkerDebuggerAgent(V8Debugger*, WorkerGlobalScope*, V8RuntimeAgent*); // V8DebuggerAgent::Client implemntation. void muteConsole() override;
diff --git a/third_party/WebKit/Source/core/inspector/WorkerInspectorController.cpp b/third_party/WebKit/Source/core/inspector/WorkerInspectorController.cpp index b07c975..21c88d7 100644 --- a/third_party/WebKit/Source/core/inspector/WorkerInspectorController.cpp +++ b/third_party/WebKit/Source/core/inspector/WorkerInspectorController.cpp
@@ -43,8 +43,7 @@ #include "core/inspector/WorkerDebuggerAgent.h" #include "core/inspector/WorkerRuntimeAgent.h" #include "core/inspector/WorkerThreadDebugger.h" -#include "core/inspector/v8/InjectedScriptHost.h" -#include "core/inspector/v8/InjectedScriptManager.h" +#include "core/inspector/v8/public/V8RuntimeAgent.h" #include "core/workers/WorkerGlobalScope.h" #include "core/workers/WorkerReportingProxy.h" #include "core/workers/WorkerThread.h" @@ -108,13 +107,6 @@ RawPtrWillBeMember<WorkerGlobalScope> m_workerGlobalScope; }; -class WorkerInjectedScriptHostClient: public InjectedScriptHostClient { -public: - WorkerInjectedScriptHostClient() { } - - ~WorkerInjectedScriptHostClient() override { } -}; - WorkerInspectorController::WorkerInspectorController(WorkerGlobalScope* workerGlobalScope) : m_workerGlobalScope(workerGlobalScope) , m_instrumentingAgents(InstrumentingAgents::create()) @@ -135,29 +127,25 @@ data->setThreadDebugger(newDebugger.release()); } - m_injectedScriptManager = InjectedScriptManager::create(m_workerThreadDebugger); V8Debugger* debugger = m_workerThreadDebugger->debugger(); - OwnPtrWillBeRawPtr<WorkerRuntimeAgent> workerRuntimeAgent = WorkerRuntimeAgent::create(m_injectedScriptManager.get(), debugger, workerGlobalScope, this); + OwnPtrWillBeRawPtr<WorkerRuntimeAgent> workerRuntimeAgent = WorkerRuntimeAgent::create(debugger, workerGlobalScope, this); m_workerRuntimeAgent = workerRuntimeAgent.get(); m_agents.append(workerRuntimeAgent.release()); - OwnPtrWillBeRawPtr<WorkerDebuggerAgent> workerDebuggerAgent = WorkerDebuggerAgent::create(debugger, workerGlobalScope, m_injectedScriptManager.get()); + OwnPtrWillBeRawPtr<WorkerDebuggerAgent> workerDebuggerAgent = WorkerDebuggerAgent::create(debugger, workerGlobalScope, m_workerRuntimeAgent->v8Agent()); m_workerDebuggerAgent = workerDebuggerAgent.get(); m_agents.append(workerDebuggerAgent.release()); m_agents.append(InspectorProfilerAgent::create(debugger, 0)); - m_agents.append(InspectorHeapProfilerAgent::create(isolate, m_injectedScriptManager.get())); + m_agents.append(InspectorHeapProfilerAgent::create(isolate, m_workerRuntimeAgent->v8Agent())); - OwnPtrWillBeRawPtr<WorkerConsoleAgent> workerConsoleAgent = WorkerConsoleAgent::create(m_injectedScriptManager.get(), workerGlobalScope); + OwnPtrWillBeRawPtr<WorkerConsoleAgent> workerConsoleAgent = WorkerConsoleAgent::create(m_workerRuntimeAgent->v8Agent(), workerGlobalScope); WorkerConsoleAgent* workerConsoleAgentPtr = workerConsoleAgent.get(); - workerConsoleAgentPtr->setDebuggerAgent(m_workerDebuggerAgent->v8DebuggerAgent()); + workerConsoleAgentPtr->setDebuggerAgent(m_workerDebuggerAgent->v8Agent()); m_agents.append(workerConsoleAgent.release()); - m_injectedScriptManager->injectedScriptHost()->init( - nullptr, - bind<>(&InspectorConsoleAgent::clearAllMessages, workerConsoleAgentPtr), - adoptPtr(new WorkerInjectedScriptHostClient())); + m_workerRuntimeAgent->v8Agent()->setClearConsoleCallback(bind<>(&InspectorConsoleAgent::clearAllMessages, workerConsoleAgentPtr)); } WorkerInspectorController::~WorkerInspectorController() @@ -255,7 +243,6 @@ { visitor->trace(m_workerGlobalScope); visitor->trace(m_instrumentingAgents); - visitor->trace(m_backendDispatcher); visitor->trace(m_agents); visitor->trace(m_pageInspectorProxy); visitor->trace(m_workerDebuggerAgent);
diff --git a/third_party/WebKit/Source/core/inspector/WorkerInspectorController.h b/third_party/WebKit/Source/core/inspector/WorkerInspectorController.h index dd28820..36fe6818 100644 --- a/third_party/WebKit/Source/core/inspector/WorkerInspectorController.h +++ b/third_party/WebKit/Source/core/inspector/WorkerInspectorController.h
@@ -42,7 +42,6 @@ namespace blink { -class InjectedScriptManager; class InspectorBackendDispatcher; class InspectorFrontend; class InspectorFrontendChannel; @@ -86,11 +85,10 @@ RawPtrWillBeMember<WorkerGlobalScope> m_workerGlobalScope; RefPtrWillBeMember<InstrumentingAgents> m_instrumentingAgents; WorkerThreadDebugger* m_workerThreadDebugger; - OwnPtr<InjectedScriptManager> m_injectedScriptManager; InspectorAgentRegistry m_agents; OwnPtrWillBeMember<PageInspectorProxy> m_pageInspectorProxy; OwnPtr<InspectorFrontend> m_frontend; - RefPtrWillBeMember<InspectorBackendDispatcher> m_backendDispatcher; + RefPtr<InspectorBackendDispatcher> m_backendDispatcher; RawPtrWillBeMember<WorkerDebuggerAgent> m_workerDebuggerAgent; RawPtrWillBeMember<WorkerRuntimeAgent> m_workerRuntimeAgent; OwnPtr<InspectorTaskRunner> m_inspectorTaskRunner;
diff --git a/third_party/WebKit/Source/core/inspector/WorkerRuntimeAgent.cpp b/third_party/WebKit/Source/core/inspector/WorkerRuntimeAgent.cpp index 7a5d1d35..99296c4 100644 --- a/third_party/WebKit/Source/core/inspector/WorkerRuntimeAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/WorkerRuntimeAgent.cpp
@@ -36,8 +36,8 @@ namespace blink { -WorkerRuntimeAgent::WorkerRuntimeAgent(InjectedScriptManager* injectedScriptManager, V8Debugger* debugger, WorkerGlobalScope* workerGlobalScope, InspectorRuntimeAgent::Client* client) - : InspectorRuntimeAgent(injectedScriptManager, debugger, client) +WorkerRuntimeAgent::WorkerRuntimeAgent(V8Debugger* debugger, WorkerGlobalScope* workerGlobalScope, InspectorRuntimeAgent::Client* client) + : InspectorRuntimeAgent(debugger, client) , m_workerGlobalScope(workerGlobalScope) { }
diff --git a/third_party/WebKit/Source/core/inspector/WorkerRuntimeAgent.h b/third_party/WebKit/Source/core/inspector/WorkerRuntimeAgent.h index 4b74c68..73b1696 100644 --- a/third_party/WebKit/Source/core/inspector/WorkerRuntimeAgent.h +++ b/third_party/WebKit/Source/core/inspector/WorkerRuntimeAgent.h
@@ -40,9 +40,9 @@ class WorkerRuntimeAgent final : public InspectorRuntimeAgent { public: - static PassOwnPtrWillBeRawPtr<WorkerRuntimeAgent> create(InjectedScriptManager* injectedScriptManager, V8Debugger* debugger, WorkerGlobalScope* context, InspectorRuntimeAgent::Client* client) + static PassOwnPtrWillBeRawPtr<WorkerRuntimeAgent> create(V8Debugger* debugger, WorkerGlobalScope* context, InspectorRuntimeAgent::Client* client) { - return adoptPtrWillBeNoop(new WorkerRuntimeAgent(injectedScriptManager, debugger, context, client)); + return adoptPtrWillBeNoop(new WorkerRuntimeAgent(debugger, context, client)); } ~WorkerRuntimeAgent() override; DECLARE_VIRTUAL_TRACE(); @@ -50,7 +50,7 @@ void enable(ErrorString*) final; private: - WorkerRuntimeAgent(InjectedScriptManager*, V8Debugger*, WorkerGlobalScope*, InspectorRuntimeAgent::Client*); + WorkerRuntimeAgent(V8Debugger*, WorkerGlobalScope*, InspectorRuntimeAgent::Client*); ScriptState* defaultScriptState() override; void muteConsole() override; void unmuteConsole() override;
diff --git a/third_party/WebKit/Source/core/inspector/v8/BUILD.gn b/third_party/WebKit/Source/core/inspector/v8/BUILD.gn new file mode 100644 index 0000000..35140221 --- /dev/null +++ b/third_party/WebKit/Source/core/inspector/v8/BUILD.gn
@@ -0,0 +1,43 @@ +# Copyright 2016 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. + +v8_inspector_output_dir = "$root_gen_dir/blink/core/inspector/v8" + +group("injected_script_sources") { + public_deps = [ + ":debugger_script", + ":injected_script", + ] +} + +action("injected_script") { + script = "build/xxd.py" + inputs = [ + "InjectedScriptSource.js", + ] + outputs = [ + "$v8_inspector_output_dir/InjectedScriptSource.h", + ] + args = [ + "InjectedScriptSource_js", + rebase_path("InjectedScriptSource.js", root_build_dir), + rebase_path("$v8_inspector_output_dir/InjectedScriptSource.h", + root_build_dir), + ] +} + +action("debugger_script") { + script = "build/xxd.py" + inputs = [ + "DebuggerScript.js", + ] + outputs = [ + "$v8_inspector_output_dir/DebuggerScript.h", + ] + args = [ + "DebuggerScript_js", + rebase_path("DebuggerScript.js", root_build_dir), + rebase_path("$v8_inspector_output_dir/DebuggerScript.h", root_build_dir), + ] +}
diff --git a/third_party/WebKit/Source/core/inspector/v8/EventListenerInfo.h b/third_party/WebKit/Source/core/inspector/v8/EventListenerInfo.h deleted file mode 100644 index ad3ab83..0000000 --- a/third_party/WebKit/Source/core/inspector/v8/EventListenerInfo.h +++ /dev/null
@@ -1,34 +0,0 @@ -// Copyright 2015 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 EventListenerInfo_h -#define EventListenerInfo_h - -#include "wtf/Vector.h" -#include "wtf/text/AtomicString.h" - -#include <v8.h> - -namespace blink { - -class EventListenerInfo { -public: - EventListenerInfo(const AtomicString& eventType, bool useCapture, v8::Local<v8::Object> handler) - : eventType(eventType) - , useCapture(useCapture) - , handler(handler) - { - } - - const AtomicString eventType; - bool useCapture; - v8::Local<v8::Object> handler; - -}; - -using EventListenerInfoMap = HashMap<String, OwnPtr<Vector<EventListenerInfo>>>; - -} // namespace blink - -#endif // EventListenerInfo_h
diff --git a/third_party/WebKit/Source/core/inspector/v8/InjectedScript.cpp b/third_party/WebKit/Source/core/inspector/v8/InjectedScript.cpp index 34bb43a..7c293922 100644 --- a/third_party/WebKit/Source/core/inspector/v8/InjectedScript.cpp +++ b/third_party/WebKit/Source/core/inspector/v8/InjectedScript.cpp
@@ -33,10 +33,10 @@ #include "core/inspector/v8/InjectedScriptHost.h" #include "core/inspector/v8/InjectedScriptManager.h" #include "core/inspector/v8/RemoteObjectId.h" -#include "core/inspector/v8/V8Debugger.h" -#include "core/inspector/v8/V8DebuggerClient.h" #include "core/inspector/v8/V8FunctionCall.h" #include "core/inspector/v8/V8StringUtil.h" +#include "core/inspector/v8/public/V8Debugger.h" +#include "core/inspector/v8/public/V8DebuggerClient.h" #include "platform/JSONParser.h" #include "platform/JSONValues.h" #include "platform/JSONValuesForV8.h" @@ -396,18 +396,9 @@ return m_native->objectForId(objectId.id()); } -String InjectedScript::objectIdToObjectGroupName(const String& objectId) const +String InjectedScript::objectGroupName(const RemoteObjectId& objectId) const { - RefPtr<JSONValue> parsedObjectId = parseJSON(objectId); - if (!parsedObjectId) - return String(); - RefPtr<JSONObject> object; - if (!parsedObjectId->asObject(&object)) - return String(); - int boundId = 0; - if (!object->getNumber("id", &boundId)) - return String(); - return m_native->groupName(boundId); + return m_native->groupName(objectId.id()); } void InjectedScript::releaseObjectGroup(const String& objectGroup)
diff --git a/third_party/WebKit/Source/core/inspector/v8/InjectedScript.h b/third_party/WebKit/Source/core/inspector/v8/InjectedScript.h index 2d117549..fb13ae9 100644 --- a/third_party/WebKit/Source/core/inspector/v8/InjectedScript.h +++ b/third_party/WebKit/Source/core/inspector/v8/InjectedScript.h
@@ -100,8 +100,7 @@ PassRefPtr<TypeBuilder::Runtime::RemoteObject> wrapObject(v8::Local<v8::Value>, const String& groupName, bool generatePreview = false) const; PassRefPtr<TypeBuilder::Runtime::RemoteObject> wrapTable(v8::Local<v8::Value> table, v8::Local<v8::Value> columns) const; v8::Local<v8::Value> findObject(const RemoteObjectId&) const; - - String objectIdToObjectGroupName(const String& objectId) const; + String objectGroupName(const RemoteObjectId&) const; void releaseObjectGroup(const String&); void setCustomObjectFormatterEnabled(bool);
diff --git a/third_party/WebKit/Source/core/inspector/v8/InjectedScriptHost.cpp b/third_party/WebKit/Source/core/inspector/v8/InjectedScriptHost.cpp index 7128758..1962a622 100644 --- a/third_party/WebKit/Source/core/inspector/v8/InjectedScriptHost.cpp +++ b/third_party/WebKit/Source/core/inspector/v8/InjectedScriptHost.cpp
@@ -30,8 +30,8 @@ #include "core/inspector/v8/InjectedScriptHost.h" -#include "core/inspector/v8/V8Debugger.h" #include "core/inspector/v8/V8DebuggerAgentImpl.h" +#include "core/inspector/v8/public/V8Debugger.h" #include "platform/JSONValues.h" #include "wtf/RefPtr.h" @@ -39,30 +39,40 @@ namespace blink { -PassRefPtr<InjectedScriptHost> InjectedScriptHost::create() +PassRefPtr<InjectedScriptHost> InjectedScriptHost::create(V8DebuggerImpl* debugger) { - return adoptRef(new InjectedScriptHost()); + return adoptRef(new InjectedScriptHost(debugger)); } -InjectedScriptHost::InjectedScriptHost() - : m_debuggerAgent(nullptr) +InjectedScriptHost::InjectedScriptHost(V8DebuggerImpl* debugger) + : m_debugger(debugger) + , m_debuggerAgent(nullptr) , m_inspectCallback(nullptr) , m_clearConsoleCallback(nullptr) - , m_debugger(nullptr) { - m_defaultInspectableObject = adoptPtr(new InspectableObject()); } InjectedScriptHost::~InjectedScriptHost() { } +void InjectedScriptHost::setClearConsoleCallback(PassOwnPtr<V8RuntimeAgent::ClearConsoleCallback> callback) +{ + m_clearConsoleCallback = std::move(callback); +} + +void InjectedScriptHost::setInspectObjectCallback(PassOwnPtr<V8RuntimeAgent::InspectCallback> callback) +{ + m_inspectCallback = std::move(callback); +} + void InjectedScriptHost::disconnect() { + m_debugger = nullptr; m_debuggerAgent = nullptr; m_inspectCallback = nullptr; m_clearConsoleCallback = nullptr; - m_debugger = nullptr; + m_inspectedObjects.clear(); } void InjectedScriptHost::inspectImpl(PassRefPtr<JSONValue> object, PassRefPtr<JSONValue> hints) @@ -79,12 +89,7 @@ (*m_clearConsoleCallback)(); } -v8::Local<v8::Value> InjectedScriptHost::InspectableObject::get(v8::Local<v8::Context>) -{ - return v8::Local<v8::Value>(); -}; - -void InjectedScriptHost::addInspectedObject(PassOwnPtr<InjectedScriptHost::InspectableObject> object) +void InjectedScriptHost::addInspectedObject(PassOwnPtr<V8RuntimeAgent::Inspectable> object) { m_inspectedObjects.prepend(object); while (m_inspectedObjects.size() > 5) @@ -96,10 +101,10 @@ m_inspectedObjects.clear(); } -InjectedScriptHost::InspectableObject* InjectedScriptHost::inspectedObject(unsigned num) +V8RuntimeAgent::Inspectable* InjectedScriptHost::inspectedObject(unsigned num) { if (num >= m_inspectedObjects.size()) - return m_defaultInspectableObject.get(); + return nullptr; return m_inspectedObjects[num].get(); }
diff --git a/third_party/WebKit/Source/core/inspector/v8/InjectedScriptHost.h b/third_party/WebKit/Source/core/inspector/v8/InjectedScriptHost.h index 94e6ed8..1a20f83 100644 --- a/third_party/WebKit/Source/core/inspector/v8/InjectedScriptHost.h +++ b/third_party/WebKit/Source/core/inspector/v8/InjectedScriptHost.h
@@ -30,10 +30,7 @@ #ifndef InjectedScriptHost_h #define InjectedScriptHost_h -#include "core/InspectorTypeBuilder.h" -#include "core/inspector/v8/InjectedScriptHostClient.h" -#include "core/inspector/v8/V8DebuggerAgentImpl.h" -#include "wtf/Functional.h" +#include "core/inspector/v8/public/V8RuntimeAgent.h" #include "wtf/PassOwnPtr.h" #include "wtf/RefCounted.h" #include "wtf/Vector.h" @@ -42,15 +39,11 @@ namespace blink { -class EventTarget; -class InjectedScriptHostClient; -class InspectorConsoleAgent; +class V8EventListenerInfo; class JSONValue; class V8DebuggerImpl; class V8DebuggerAgentImpl; -class EventListenerInfo; - // SECURITY NOTE: Although the InjectedScriptHost is intended for use solely by the inspector, // a reference to the InjectedScriptHost may be leaked to the page being inspected. Thus, the // InjectedScriptHost must never implemment methods that have more power over the page than the @@ -58,36 +51,18 @@ class InjectedScriptHost : public RefCounted<InjectedScriptHost> { public: - static PassRefPtr<InjectedScriptHost> create(); + static PassRefPtr<InjectedScriptHost> create(V8DebuggerImpl*); ~InjectedScriptHost(); - using InspectCallback = Function<void(PassRefPtr<TypeBuilder::Runtime::RemoteObject>, PassRefPtr<JSONObject>)>; - using ClearConsoleCallback = Function<void()>; - - void init(PassOwnPtr<InspectCallback> inspectCallback, PassOwnPtr<ClearConsoleCallback> clearConsoleCallback, PassOwnPtr<InjectedScriptHostClient> injectedScriptHostClient) - { - m_inspectCallback = std::move(inspectCallback); - m_clearConsoleCallback = std::move(clearConsoleCallback); - m_client = std::move(injectedScriptHostClient); - } - - void setDebugger(V8DebuggerAgentImpl* debuggerAgent, V8DebuggerImpl* debugger) - { - m_debuggerAgent = debuggerAgent; - m_debugger = debugger; - } + void setClearConsoleCallback(PassOwnPtr<V8RuntimeAgent::ClearConsoleCallback>); + void setInspectObjectCallback(PassOwnPtr<V8RuntimeAgent::InspectCallback>); + void setDebuggerAgent(V8DebuggerAgentImpl* debuggerAgent) { m_debuggerAgent = debuggerAgent; } void disconnect(); - class InspectableObject { - USING_FAST_MALLOC(InspectableObject); - public: - virtual v8::Local<v8::Value> get(v8::Local<v8::Context>); - virtual ~InspectableObject() { } - }; - void addInspectedObject(PassOwnPtr<InspectableObject>); + void addInspectedObject(PassOwnPtr<V8RuntimeAgent::Inspectable>); void clearInspectedObjects(); - InspectableObject* inspectedObject(unsigned num); + V8RuntimeAgent::Inspectable* inspectedObject(unsigned num); void inspectImpl(PassRefPtr<JSONValue> objectToInspect, PassRefPtr<JSONValue> hints); @@ -97,23 +72,20 @@ void monitorFunction(const String& scriptId, int lineNumber, int columnNumber, const String& functionName); void unmonitorFunction(const String& scriptId, int lineNumber, int columnNumber); - V8DebuggerImpl& debugger() { return *m_debugger; } - InjectedScriptHostClient* client() { return m_client.get(); } + V8DebuggerImpl* debugger() { return m_debugger; } // FIXME: store this template in per isolate data void setWrapperTemplate(v8::Local<v8::FunctionTemplate> wrapperTemplate, v8::Isolate* isolate) { m_wrapperTemplate.Reset(isolate, wrapperTemplate); } v8::Local<v8::FunctionTemplate> wrapperTemplate(v8::Isolate* isolate) { return v8::Local<v8::FunctionTemplate>::New(isolate, m_wrapperTemplate); } private: - InjectedScriptHost(); + InjectedScriptHost(V8DebuggerImpl*); - V8DebuggerAgentImpl* m_debuggerAgent; - OwnPtr<InspectCallback> m_inspectCallback; - OwnPtr<ClearConsoleCallback> m_clearConsoleCallback; V8DebuggerImpl* m_debugger; - Vector<OwnPtr<InspectableObject>> m_inspectedObjects; - OwnPtr<InspectableObject> m_defaultInspectableObject; - OwnPtr<InjectedScriptHostClient> m_client; + V8DebuggerAgentImpl* m_debuggerAgent; + OwnPtr<V8RuntimeAgent::InspectCallback> m_inspectCallback; + OwnPtr<V8RuntimeAgent::ClearConsoleCallback> m_clearConsoleCallback; + Vector<OwnPtr<V8RuntimeAgent::Inspectable>> m_inspectedObjects; v8::Global<v8::FunctionTemplate> m_wrapperTemplate; };
diff --git a/third_party/WebKit/Source/core/inspector/v8/InjectedScriptHostClient.h b/third_party/WebKit/Source/core/inspector/v8/InjectedScriptHostClient.h deleted file mode 100644 index 292e0a2..0000000 --- a/third_party/WebKit/Source/core/inspector/v8/InjectedScriptHostClient.h +++ /dev/null
@@ -1,22 +0,0 @@ -// Copyright (c) 2015 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 InjectedScriptHostClient_h -#define InjectedScriptHostClient_h - -#include "wtf/Allocator.h" - -namespace blink { - -class InjectedScriptHostClient { - USING_FAST_MALLOC(InjectedScriptHostClient); -public: - virtual void muteWarningsAndDeprecations() { } - virtual void unmuteWarningsAndDeprecations() { } - virtual ~InjectedScriptHostClient() { } -}; - -} // namespace blink - -#endif // InjectedScriptHostClient_h
diff --git a/third_party/WebKit/Source/core/inspector/v8/InjectedScriptManager.cpp b/third_party/WebKit/Source/core/inspector/v8/InjectedScriptManager.cpp index 4433ec55..20880da2 100644 --- a/third_party/WebKit/Source/core/inspector/v8/InjectedScriptManager.cpp +++ b/third_party/WebKit/Source/core/inspector/v8/InjectedScriptManager.cpp
@@ -33,37 +33,31 @@ #include "core/inspector/v8/InjectedScript.h" #include "core/inspector/v8/InjectedScriptHost.h" #include "core/inspector/v8/InjectedScriptNative.h" +#include "core/inspector/v8/InjectedScriptSource.h" #include "core/inspector/v8/RemoteObjectId.h" -#include "core/inspector/v8/V8Debugger.h" -#include "core/inspector/v8/V8DebuggerClient.h" +#include "core/inspector/v8/V8DebuggerImpl.h" #include "core/inspector/v8/V8InjectedScriptHost.h" #include "core/inspector/v8/V8StringUtil.h" -#include "public/platform/Platform.h" -#include "public/platform/WebData.h" +#include "core/inspector/v8/public/V8DebuggerClient.h" #include "wtf/PassOwnPtr.h" namespace blink { -PassOwnPtr<InjectedScriptManager> InjectedScriptManager::create(V8DebuggerClient* client) +PassOwnPtr<InjectedScriptManager> InjectedScriptManager::create(V8DebuggerImpl* debugger) { - return adoptPtr(new InjectedScriptManager(client)); + return adoptPtr(new InjectedScriptManager(debugger)); } -InjectedScriptManager::InjectedScriptManager(V8DebuggerClient* client) - : m_injectedScriptHost(InjectedScriptHost::create()) +InjectedScriptManager::InjectedScriptManager(V8DebuggerImpl* debugger) + : m_injectedScriptHost(InjectedScriptHost::create(debugger)) , m_customObjectFormatterEnabled(false) - , m_client(client) + , m_client(debugger->client()) { } InjectedScriptManager::~InjectedScriptManager() { -} - -void InjectedScriptManager::disconnect() -{ m_injectedScriptHost->disconnect(); - m_injectedScriptHost.clear(); } InjectedScriptHost* InjectedScriptManager::injectedScriptHost() @@ -135,9 +129,7 @@ return nullptr; RefPtr<InjectedScriptNative> injectedScriptNative = adoptRef(new InjectedScriptNative(context->GetIsolate())); - - const WebData& injectedScriptSourceResource = Platform::current()->loadResource("InjectedScriptSource.js"); - String injectedScriptSource(injectedScriptSourceResource.data(), injectedScriptSourceResource.size()); + String injectedScriptSource(reinterpret_cast<const char*>(InjectedScriptSource_js), sizeof(InjectedScriptSource_js)); v8::Local<v8::Object> object = createInjectedScript(injectedScriptSource, context, contextId, injectedScriptNative.get()); OwnPtr<InjectedScript> result = adoptPtr(new InjectedScript(this, context, object, m_client, injectedScriptNative.release(), contextId));
diff --git a/third_party/WebKit/Source/core/inspector/v8/InjectedScriptManager.h b/third_party/WebKit/Source/core/inspector/v8/InjectedScriptManager.h index 55d62dd..64ccc7c 100644 --- a/third_party/WebKit/Source/core/inspector/v8/InjectedScriptManager.h +++ b/third_party/WebKit/Source/core/inspector/v8/InjectedScriptManager.h
@@ -43,16 +43,15 @@ class InjectedScriptNative; class RemoteObjectIdBase; class V8DebuggerClient; +class V8DebuggerImpl; class CORE_EXPORT InjectedScriptManager { WTF_MAKE_NONCOPYABLE(InjectedScriptManager); USING_FAST_MALLOC(InjectedScriptManager); public: - static PassOwnPtr<InjectedScriptManager> create(V8DebuggerClient*); + static PassOwnPtr<InjectedScriptManager> create(V8DebuggerImpl*); ~InjectedScriptManager(); - void disconnect(); - InjectedScriptHost* injectedScriptHost(); InjectedScript* injectedScriptFor(v8::Local<v8::Context>); @@ -65,7 +64,7 @@ void setCustomObjectFormatterEnabled(bool); private: - explicit InjectedScriptManager(V8DebuggerClient*); + explicit InjectedScriptManager(V8DebuggerImpl*); v8::Local<v8::Object> createInjectedScript(const String& source, v8::Local<v8::Context>, int id, InjectedScriptNative*);
diff --git a/third_party/WebKit/Source/core/inspector/v8/InspectorWrapper.cpp b/third_party/WebKit/Source/core/inspector/v8/InspectorWrapper.cpp index f2ce47d..2d14ec4a 100644 --- a/third_party/WebKit/Source/core/inspector/v8/InspectorWrapper.cpp +++ b/third_party/WebKit/Source/core/inspector/v8/InspectorWrapper.cpp
@@ -3,7 +3,7 @@ // found in the LICENSE file. #include "core/inspector/v8/InspectorWrapper.h" -#include "core/inspector/v8/V8DebuggerClient.h" +#include "core/inspector/v8/public/V8DebuggerClient.h" #include "wtf/RefPtr.h"
diff --git a/third_party/WebKit/Source/core/inspector/v8/JavaScriptCallFrame.cpp b/third_party/WebKit/Source/core/inspector/v8/JavaScriptCallFrame.cpp index 0927b2e4..9a9865b4 100644 --- a/third_party/WebKit/Source/core/inspector/v8/JavaScriptCallFrame.cpp +++ b/third_party/WebKit/Source/core/inspector/v8/JavaScriptCallFrame.cpp
@@ -30,8 +30,8 @@ #include "core/inspector/v8/JavaScriptCallFrame.h" -#include "core/inspector/v8/V8DebuggerClient.h" #include "core/inspector/v8/V8StringUtil.h" +#include "core/inspector/v8/public/V8DebuggerClient.h" #include <v8-debug.h>
diff --git a/third_party/WebKit/Source/core/inspector/v8/SourceMap.cpp b/third_party/WebKit/Source/core/inspector/v8/SourceMap.cpp deleted file mode 100644 index a7993cb7..0000000 --- a/third_party/WebKit/Source/core/inspector/v8/SourceMap.cpp +++ /dev/null
@@ -1,286 +0,0 @@ -// Copyright 2016 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 "core/inspector/v8/SourceMap.h" - -#include "platform/JSONParser.h" -#include "platform/JSONValues.h" -#include "platform/weborigin/KURL.h" - -namespace { - -const int kSupportedVersion = 3; -const char kVersionString[] = "version"; -const char kFileString[] = "file"; -const char kSourceRootString[] = "sourceRoot"; -const char kSourcesString[] = "sources"; -const char kSourcesContentString[] = "sourcesContent"; -const char kNamesString[] = "names"; -const char kMappingsString[] = "mappings"; -const char kSectionsString[] = "sections"; -const char kOffsetString[] = "offset"; -const char kLineString[] = "line"; -const char kColumnString[] = "column"; -const char kMapString[] = "map"; -const char kURLString[] = "url"; - -const int kVLQBaseShift = 5; -const int kVLQBaseMask = (1 << 5) - 1; -const int kVLQContinuationMask = 1 << 5; - -bool jsonStringArrayAsVector(PassRefPtr<blink::JSONArray> jsonArray, Vector<String>* vector, bool mandatory) -{ - if (!jsonArray) - return false; - vector->resize(jsonArray->length()); - for (unsigned i = 0; i < jsonArray->length(); ++i) { - String source; - RefPtr<blink::JSONValue> sourceValue = jsonArray->get(i); - if (sourceValue && !sourceValue->isNull() && sourceValue->asString(&source)) - (*vector)[i] = source; - else if (mandatory) - return false; - } - return true; -} - -class StringPeekIterator { -public: - StringPeekIterator(const String& str) - : m_str(str) - , m_index(0) - { - } - - bool hasNext() { return m_index < m_str.length(); } - UChar next() { return m_str[m_index++]; } - UChar peek() { return m_str[m_index]; } - -private: - const String& m_str; - unsigned m_index; -}; - -int base64SymbolToNumber(UChar sym) -{ - if (sym >= 'A' && sym <= 'Z') - return sym - 'A'; - if (sym >= 'a' && sym <= 'z') - return sym - 'a' + ('Z' - 'A') + 1; - if (sym >= '0' && sym <= '9') - return sym - '0' + ('Z' - 'A' + 1) * 2; - if (sym == '+') - return 62; - if (sym == '/') - return 63; - return -1; -} - -int decodeVLQ(StringPeekIterator& it) -{ - int result = 0; - int shift = 0; - int digit = 0; - do { - char v = it.next(); - digit = base64SymbolToNumber(v); - result += (digit & kVLQBaseMask) << shift; - shift += kVLQBaseShift; - } while (digit & kVLQContinuationMask); - - int negative = result & 1; - result >>= 1; - return negative ? -result : result; -} - -bool entryCompare(const OwnPtr<blink::SourceMap::Entry>& a, const OwnPtr<blink::SourceMap::Entry>& b) -{ - if (a->line != b->line) - return a->line < b->line; - return a->column < b->column; -} - -bool entryCompareWithTarget(const OwnPtr<blink::SourceMap::Entry>& a, const std::pair<int, int>& b) -{ - if (a->line != b.first) - return a->line < b.first; - return a->column < b.second; -} - -String completeURL(const blink::KURL& base, const String& url) -{ - blink::KURL completedURL(base, url); - return completedURL.isValid() ? completedURL.string() : url; -} - -} // anonymous namespace - -namespace blink { - -SourceMap::Entry::Entry(int line, int column, const String& sourceURL, - int sourceLine, int sourceColumn) - : line(line) - , column(column) - , sourceURL(sourceURL) - , sourceLine(sourceLine) - , sourceColumn(sourceColumn) -{ -} - -PassOwnPtr<SourceMap> SourceMap::parse(const String& json, const String& sourceMapUrl, int offsetLine, int offsetColumn) -{ - RefPtr<JSONValue> sourceMapValue = parseJSON(json); - RefPtr<JSONObject> sourceMapObject; - if (!sourceMapValue || !sourceMapValue->asObject(&sourceMapObject)) - return nullptr; - - OwnPtr<SourceMap> map = adoptPtr(new SourceMap()); - - RefPtr<JSONArray> sectionsArray = sourceMapObject->getArray(kSectionsString); - if (sectionsArray) { - for (unsigned i = 0; i < sectionsArray->length(); ++i) { - RefPtr<JSONValue> sectionValue = sectionsArray->get(i); - if (!sectionValue) - return nullptr; - - RefPtr<JSONObject> sectionObject = sectionValue->asObject(); - if (!sectionObject || !map->parseSection(sectionObject, sourceMapUrl, offsetLine, offsetColumn)) - return nullptr; - } - } else if (!map->parseMap(sourceMapObject, sourceMapUrl, offsetLine, offsetColumn)) { - return nullptr; - } - std::sort(map->m_mappings.begin(), map->m_mappings.end(), entryCompare); - return map.release(); -} - -const SourceMap::Entry* SourceMap::findEntry(int line, int column) -{ - if (!m_mappings.size()) - return nullptr; - auto it = std::lower_bound(m_mappings.begin(), m_mappings.end(), std::make_pair(line, column), entryCompareWithTarget); - if (it != m_mappings.end() && (*it)->line == line && (*it)->column == column) - return it->get(); - if (it == m_mappings.begin()) - return nullptr; - return (--it)->get(); -} - -bool SourceMap::parseSection(PassRefPtr<JSONObject> prpSectionObject, const String& sourceMapUrl, int offsetLine, int offsetColumn) -{ - RefPtr<JSONObject> sectionObject = prpSectionObject; - RefPtr<JSONObject> offsetObject = sectionObject->getObject(kOffsetString); - if (!offsetObject) - return false; - - int line = 0; - int column = 0; - if (!offsetObject->getNumber(kLineString, &line)) - return false; - if (!offsetObject->getNumber(kColumnString, &column)) - return false; - - RefPtr<JSONObject> mapObject = sectionObject->getObject(kMapString); - String url; - if (!mapObject && !sectionObject->getString(kURLString, &url)) - return false; - return mapObject ? parseMap(mapObject, sourceMapUrl, line + offsetLine, column + offsetColumn) : true; -} - -bool SourceMap::parseMap(PassRefPtr<JSONObject> prpMapObject, const String& sourceMapUrl, int line, int column) -{ - RefPtr<JSONObject> mapObject = prpMapObject; - if (!mapObject) - return false; - - int version = 0; - if (!mapObject->getNumber(kVersionString, &version) || version != kSupportedVersion) - return false; - - String file; - mapObject->getString(kFileString, &file); - - String sourceRoot; - mapObject->getString(kSourceRootString, &sourceRoot); - - if (!sourceRoot.isNull() && sourceRoot.length() > 0 && sourceRoot[sourceRoot.length() - 1] != '/') - sourceRoot.append('/'); - - Vector<String> sources; - if (!jsonStringArrayAsVector(mapObject->getArray(kSourcesString), &sources, true)) - return false; - - if (sources.size() == 0) - return false; - - KURL baseURL(KURL(), sourceMapUrl); - if (!baseURL.isValid()) - baseURL = KURL(); - - // For information about resolving sources, please see: - // https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.75yo6yoyk7x5 - for (size_t i = 0; i < sources.size(); ++i) - sources[i] = completeURL(baseURL, sourceRoot + sources[i]); - - Vector<String> sourcesContent; - if (jsonStringArrayAsVector(mapObject->getArray(kSourcesContentString), &sourcesContent, false)) { - if (sourcesContent.size() != sources.size()) - return false; - } - - Vector<String> names; - if (!jsonStringArrayAsVector(mapObject->getArray(kNamesString), &names, true)) - return false; - - String mappings; - if (!mapObject->getString(kMappingsString, &mappings)) - return false; - - size_t sourceIndex = 0; - String sourceURL = sources[sourceIndex]; - int sourceLine = 0; - int sourceColumn = 0; - int nameIndex = 0; - - StringPeekIterator it(mappings); - - while (it.hasNext()) { - if (it.peek() == ',') { - it.next(); - } else { - while (it.peek() == ';') { - ++line; - column = 0; - it.next(); - } - if (!it.hasNext()) - break; - } - - column += decodeVLQ(it); - if (!it.hasNext() || it.peek() == ',' || it.peek() == ';') { - m_mappings.append(adoptPtr(new Entry(line, column))); - continue; - } - - int sourceIndexDelta = decodeVLQ(it); - if (sourceIndexDelta) { - sourceIndex += sourceIndexDelta; - if (sourceIndex >= sources.size()) - return false; - sourceURL = sources[sourceIndex]; - } - - if (it.hasNext()) { - sourceLine += decodeVLQ(it); - sourceColumn += decodeVLQ(it); - if (it.hasNext() && it.peek() != ',' && it.peek() != ';') - nameIndex += decodeVLQ(it); - } - m_mappings.append(adoptPtr(new Entry(line, column, sourceURL, sourceLine, sourceColumn))); - } - return true; -} - -} // namespace blink
diff --git a/third_party/WebKit/Source/core/inspector/v8/SourceMap.h b/third_party/WebKit/Source/core/inspector/v8/SourceMap.h deleted file mode 100644 index 007ebfa..0000000 --- a/third_party/WebKit/Source/core/inspector/v8/SourceMap.h +++ /dev/null
@@ -1,55 +0,0 @@ -// Copyright 2016 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 SourceMap_h -#define SourceMap_h - -#include "core/CoreExport.h" -#include "wtf/Noncopyable.h" -#include "wtf/OwnPtr.h" -#include "wtf/PassOwnPtr.h" -#include "wtf/text/WTFString.h" - -namespace blink { - -class JSONObject; - -class CORE_EXPORT SourceMap { - WTF_MAKE_NONCOPYABLE(SourceMap); -public: - class CORE_EXPORT Entry { - WTF_MAKE_NONCOPYABLE(Entry); - public: - int line; - int column; - String sourceURL; - int sourceLine; - int sourceColumn; - - Entry(int line, int column, const String& sourceURL = String(), int sourceLine = 0, int sourceColumn = 0); - Entry() - : line(0) - , column(0) - , sourceLine(0) - , sourceColumn(0) - { - } - }; - - static PassOwnPtr<SourceMap> parse(const String& json, const String& sourceMapUrl, int offsetLine = 0, int offsetColumn = 0); - - const Entry* findEntry(int line, int column); - -private: - SourceMap() { } - - bool parseSection(PassRefPtr<JSONObject> sectionObject, const String& sourceMapUrl, int offsetLine, int offsetColumn); - bool parseMap(PassRefPtr<JSONObject> mapObject, const String& sourceMapUrl, int offsetLine, int offsetColumn); - - Vector<OwnPtr<Entry>> m_mappings; -}; - -} // namespace blink - -#endif // SourceMap_h
diff --git a/third_party/WebKit/Source/core/inspector/v8/SourceMapTest.cpp b/third_party/WebKit/Source/core/inspector/v8/SourceMapTest.cpp deleted file mode 100644 index 732c954..0000000 --- a/third_party/WebKit/Source/core/inspector/v8/SourceMapTest.cpp +++ /dev/null
@@ -1,183 +0,0 @@ -// Copyright 2016 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 "core/inspector/v8/SourceMap.h" - -#include "testing/gtest/include/gtest/gtest.h" - -namespace blink { - -bool isEqualEntry(const blink::SourceMap::Entry* a, const OwnPtr<blink::SourceMap::Entry>& b) -{ - return a->line == b->line && a->column == b->column - && a->sourceURL == b->sourceURL && a->sourceLine == b->sourceLine - && a->sourceColumn == b->sourceColumn; -} - -TEST(SourceMapTest, ParseValid) -{ - const char* sources[] = { - "{\"version\": 3, \"sources\": [\"1.js\"], \"sourcesContent\": [null], \"names\": [], \"mappings\":\";\"}" - }; - for (size_t i = 0; i < sizeof(sources) / sizeof(const char*); ++i) { - OwnPtr<SourceMap> sourceMap = SourceMap::parse(sources[i], String()); - EXPECT_FALSE(!sourceMap) << sources[i]; - } - OwnPtr<SourceMap> sourceMap = SourceMap::parse( - "{\"version\":3,\"sources\":[\"fib.js\"],\"names\":[],\"mappings\":\";;eAEU,SAAS;;AAFnB,OAAO,CAAC,GAAG," - "CAAC,SAAS,CAAC,CAAC;;AAEvB,SAAU,SAAS;MACb,GAAG,EACH,GAAG,EAED,OAAO,EAGP,KAAK;;;;AANP,WAAG,GAAG,CAAC;" - "AACP,WAAG,GAAG,CAAC;;;aACJ,IAAI;;;;;AACL,eAAO,GAAG,GAAG;;AACjB,WAAG,GAAG,GAAG,CAAC;AACV,WAAG,GAAG,GAAG," - "GAAG,OAAO,CAAC;;eACF,OAAO;;;AAArB,aAAK;;AACT,YAAI,KAAK,EAAC;AACN,aAAG,GAAG,CAAC,CAAC;AACR,aAAG,GAAG,CAAC," - "CAAC;SACX;;;;;;;;;CAEJ;;AAED,IAAI,QAAQ,GAAG,SAAS,EAAE,CAAC;AAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI," - "CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;AAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,EAAE," - "CAAC;AAC5B,SAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;CAAA\",\"file\":\"fib-compiled.js\"," - "\"sourcesContent\":[null]}", String()); - EXPECT_FALSE(!sourceMap); -} - -TEST(SourceMapTest, ParseInvalid) -{ - const char* sources[] = { - "", - "{{}", - "{\"version\": 42, \"sources\": [\"1.js\"], \"sourcesContent\": [null], \"names\": [], \"mappings\":\";\"}", - "{\"version\": 3, \"sources\": 42, \"sourcesContent\": [null], \"names\": [], \"mappings\":\";\"}", - "{\"version\": 3, \"sources\": [null], \"sourcesContent\": [null], \"names\": [], \"mappings\":\";\"}", - "{\"version\": 3, \"sources\": [], \"sourcesContent\": [null], \"names\": [], \"mappings\":\";\"}" - }; - for (size_t i = 0; i < sizeof(sources) / sizeof(const char*); ++i) { - OwnPtr<SourceMap> sourceMap = SourceMap::parse(String::fromUTF8(sources[i]), String()); - EXPECT_TRUE(!sourceMap) << sources[i]; - } -} - -TEST(SourceMapTest, FindEntry) -{ - OwnPtr<SourceMap> sourceMap = SourceMap::parse( - "{\"version\":3,\"sources\":[\"fib.js\"],\"names\":[],\"mappings\":\";;eAEU,SAAS;;AAFnB,OAAO,CAAC,GAAG," - "CAAC,SAAS,CAAC,CAAC;;AAEvB,SAAU,SAAS;MACb,GAAG,EACH,GAAG,EAED,OAAO,EAGP,KAAK;;;;AANP,WAAG,GAAG,CAAC;AACP," - "WAAG,GAAG,CAAC;;;aACJ,IAAI;;;;;AACL,eAAO,GAAG,GAAG;;AACjB,WAAG,GAAG,GAAG,CAAC;AACV,WAAG,GAAG,GAAG,GAAG," - "OAAO,CAAC;;eACF,OAAO;;;AAArB,aAAK;;AACT,YAAI,KAAK,EAAC;AACN,aAAG,GAAG,CAAC,CAAC;AACR,aAAG,GAAG,CAAC,CAAC;" - "SACX;;;;;;;;;CAEJ;;AAED,IAAI,QAAQ,GAAG,SAAS,EAAE,CAAC;AAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC," - "MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;AAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC;" - "AAC5B,SAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;CAAA\",\"file\":\"fib-compiled.js\"," - "\"sourcesContent\":[null],\"sourceRoot\":\"/boo\"}", String("http://localhost/source.map")); - - ASSERT_TRUE(!!sourceMap); - - OwnPtr<SourceMap::Entry> expectedEntries[] = { - adoptPtr(new SourceMap::Entry(2, 15, "http://localhost/boo/fib.js", 2, 10)), adoptPtr(new SourceMap::Entry(2, 24, "http://localhost/boo/fib.js", 2, 19)), - adoptPtr(new SourceMap::Entry(4, 0, "http://localhost/boo/fib.js", 0, 0)), adoptPtr(new SourceMap::Entry(4, 7, "http://localhost/boo/fib.js", 0, 7)), - adoptPtr(new SourceMap::Entry(4, 8, "http://localhost/boo/fib.js", 0, 8)), adoptPtr(new SourceMap::Entry(4, 11, "http://localhost/boo/fib.js", 0, 11)), - adoptPtr(new SourceMap::Entry(4, 12, "http://localhost/boo/fib.js", 0, 12)), adoptPtr(new SourceMap::Entry(4, 21, "http://localhost/boo/fib.js", 0, 21)), - adoptPtr(new SourceMap::Entry(4, 22, "http://localhost/boo/fib.js", 0, 22)), adoptPtr(new SourceMap::Entry(4, 23, "http://localhost/boo/fib.js", 0, 23)), - adoptPtr(new SourceMap::Entry(6, 0, "http://localhost/boo/fib.js", 2, 0)), adoptPtr(new SourceMap::Entry(6, 9, "http://localhost/boo/fib.js", 2, 10)), - adoptPtr(new SourceMap::Entry(6, 18, "http://localhost/boo/fib.js", 2, 19)), adoptPtr(new SourceMap::Entry(7, 6, "http://localhost/boo/fib.js", 3, 6)), - adoptPtr(new SourceMap::Entry(7, 9, "http://localhost/boo/fib.js", 3, 9)), adoptPtr(new SourceMap::Entry(7, 11, "http://localhost/boo/fib.js", 4, 6)), - adoptPtr(new SourceMap::Entry(7, 14, "http://localhost/boo/fib.js", 4, 9)), adoptPtr(new SourceMap::Entry(7, 16, "http://localhost/boo/fib.js", 6, 8)), - adoptPtr(new SourceMap::Entry(7, 23, "http://localhost/boo/fib.js", 6, 15)), adoptPtr(new SourceMap::Entry(7, 25, "http://localhost/boo/fib.js", 9, 8)), - adoptPtr(new SourceMap::Entry(7, 30, "http://localhost/boo/fib.js", 9, 13)), adoptPtr(new SourceMap::Entry(11, 0, "http://localhost/boo/fib.js", 3, 6)), - adoptPtr(new SourceMap::Entry(11, 11, "http://localhost/boo/fib.js", 3, 9)), adoptPtr(new SourceMap::Entry(11, 14, "http://localhost/boo/fib.js", 3, 12)), - adoptPtr(new SourceMap::Entry(11, 15, "http://localhost/boo/fib.js", 3, 13)), adoptPtr(new SourceMap::Entry(12, 0, "http://localhost/boo/fib.js", 4, 6)), - adoptPtr(new SourceMap::Entry(12, 11, "http://localhost/boo/fib.js", 4, 9)), adoptPtr(new SourceMap::Entry(12, 14, "http://localhost/boo/fib.js", 4, 12)), - adoptPtr(new SourceMap::Entry(12, 15, "http://localhost/boo/fib.js", 4, 13)), adoptPtr(new SourceMap::Entry(15, 13, "http://localhost/boo/fib.js", 5, 9)), - adoptPtr(new SourceMap::Entry(15, 17, "http://localhost/boo/fib.js", 5, 13)), adoptPtr(new SourceMap::Entry(20, 0, "http://localhost/boo/fib.js", 6, 8)), - adoptPtr(new SourceMap::Entry(20, 15, "http://localhost/boo/fib.js", 6, 15)), adoptPtr(new SourceMap::Entry(20, 18, "http://localhost/boo/fib.js", 6, 18)), - adoptPtr(new SourceMap::Entry(20, 21, "http://localhost/boo/fib.js", 6, 21)), adoptPtr(new SourceMap::Entry(22, 0, "http://localhost/boo/fib.js", 7, 4)), - adoptPtr(new SourceMap::Entry(22, 11, "http://localhost/boo/fib.js", 7, 7)), adoptPtr(new SourceMap::Entry(22, 14, "http://localhost/boo/fib.js", 7, 10)), - adoptPtr(new SourceMap::Entry(22, 17, "http://localhost/boo/fib.js", 7, 13)), adoptPtr(new SourceMap::Entry(23, 0, "http://localhost/boo/fib.js", 8, 4)), - adoptPtr(new SourceMap::Entry(23, 11, "http://localhost/boo/fib.js", 8, 7)), adoptPtr(new SourceMap::Entry(23, 14, "http://localhost/boo/fib.js", 8, 10)), - adoptPtr(new SourceMap::Entry(23, 17, "http://localhost/boo/fib.js", 8, 13)), adoptPtr(new SourceMap::Entry(23, 20, "http://localhost/boo/fib.js", 8, 16)), - adoptPtr(new SourceMap::Entry(23, 27, "http://localhost/boo/fib.js", 8, 23)), adoptPtr(new SourceMap::Entry(23, 28, "http://localhost/boo/fib.js", 8, 24)), - adoptPtr(new SourceMap::Entry(25, 15, "http://localhost/boo/fib.js", 9, 22)), adoptPtr(new SourceMap::Entry(25, 22, "http://localhost/boo/fib.js", 9, 29)), - adoptPtr(new SourceMap::Entry(28, 0, "http://localhost/boo/fib.js", 9, 8)), adoptPtr(new SourceMap::Entry(28, 13, "http://localhost/boo/fib.js", 9, 13)), - adoptPtr(new SourceMap::Entry(30, 0, "http://localhost/boo/fib.js", 10, 4)), adoptPtr(new SourceMap::Entry(30, 12, "http://localhost/boo/fib.js", 10, 8)), - adoptPtr(new SourceMap::Entry(30, 17, "http://localhost/boo/fib.js", 10, 13)), adoptPtr(new SourceMap::Entry(30, 19, "http://localhost/boo/fib.js", 10, 14)), - adoptPtr(new SourceMap::Entry(31, 0, "http://localhost/boo/fib.js", 11, 8)), adoptPtr(new SourceMap::Entry(31, 13, "http://localhost/boo/fib.js", 11, 11)), - adoptPtr(new SourceMap::Entry(31, 16, "http://localhost/boo/fib.js", 11, 14)), adoptPtr(new SourceMap::Entry(31, 17, "http://localhost/boo/fib.js", 11, 15)), - adoptPtr(new SourceMap::Entry(32, 0, "http://localhost/boo/fib.js", 12, 8)), adoptPtr(new SourceMap::Entry(32, 13, "http://localhost/boo/fib.js", 12, 11)), - adoptPtr(new SourceMap::Entry(32, 16, "http://localhost/boo/fib.js", 12, 14)), adoptPtr(new SourceMap::Entry(32, 17, "http://localhost/boo/fib.js", 12, 15)), - adoptPtr(new SourceMap::Entry(32, 18, "http://localhost/boo/fib.js", 12, 16)), adoptPtr(new SourceMap::Entry(33, 9, "http://localhost/boo/fib.js", 13, 5)), - adoptPtr(new SourceMap::Entry(42, 1, "http://localhost/boo/fib.js", 15, 1)), adoptPtr(new SourceMap::Entry(44, 0, "http://localhost/boo/fib.js", 17, 0)), - adoptPtr(new SourceMap::Entry(44, 4, "http://localhost/boo/fib.js", 17, 4)), adoptPtr(new SourceMap::Entry(44, 12, "http://localhost/boo/fib.js", 17, 12)), - adoptPtr(new SourceMap::Entry(44, 15, "http://localhost/boo/fib.js", 17, 15)), adoptPtr(new SourceMap::Entry(44, 24, "http://localhost/boo/fib.js", 17, 24)), - adoptPtr(new SourceMap::Entry(44, 26, "http://localhost/boo/fib.js", 17, 26)), adoptPtr(new SourceMap::Entry(45, 0, "http://localhost/boo/fib.js", 18, 0)), - adoptPtr(new SourceMap::Entry(45, 4, "http://localhost/boo/fib.js", 18, 4)), adoptPtr(new SourceMap::Entry(45, 9, "http://localhost/boo/fib.js", 18, 9)), - adoptPtr(new SourceMap::Entry(45, 12, "http://localhost/boo/fib.js", 18, 12)), adoptPtr(new SourceMap::Entry(45, 16, "http://localhost/boo/fib.js", 18, 16)), - adoptPtr(new SourceMap::Entry(45, 17, "http://localhost/boo/fib.js", 18, 17)), adoptPtr(new SourceMap::Entry(45, 22, "http://localhost/boo/fib.js", 18, 22)), - adoptPtr(new SourceMap::Entry(45, 23, "http://localhost/boo/fib.js", 18, 23)), adoptPtr(new SourceMap::Entry(45, 27, "http://localhost/boo/fib.js", 18, 27)), - adoptPtr(new SourceMap::Entry(45, 28, "http://localhost/boo/fib.js", 18, 28)), adoptPtr(new SourceMap::Entry(45, 34, "http://localhost/boo/fib.js", 18, 34)), - adoptPtr(new SourceMap::Entry(45, 36, "http://localhost/boo/fib.js", 18, 36)), adoptPtr(new SourceMap::Entry(45, 39, "http://localhost/boo/fib.js", 18, 39)), - adoptPtr(new SourceMap::Entry(45, 41, "http://localhost/boo/fib.js", 18, 41)), adoptPtr(new SourceMap::Entry(45, 42, "http://localhost/boo/fib.js", 18, 42)), - adoptPtr(new SourceMap::Entry(45, 45, "http://localhost/boo/fib.js", 18, 45)), adoptPtr(new SourceMap::Entry(45, 46, "http://localhost/boo/fib.js", 18, 46)), - adoptPtr(new SourceMap::Entry(46, 0, "http://localhost/boo/fib.js", 19, 0)), adoptPtr(new SourceMap::Entry(46, 5, "http://localhost/boo/fib.js", 19, 5)), - adoptPtr(new SourceMap::Entry(46, 9, "http://localhost/boo/fib.js", 19, 9)), adoptPtr(new SourceMap::Entry(46, 10, "http://localhost/boo/fib.js", 19, 10)), - adoptPtr(new SourceMap::Entry(46, 13, "http://localhost/boo/fib.js", 19, 13)), adoptPtr(new SourceMap::Entry(46, 14, "http://localhost/boo/fib.js", 19, 14)), - adoptPtr(new SourceMap::Entry(46, 16, "http://localhost/boo/fib.js", 19, 16)), adoptPtr(new SourceMap::Entry(46, 17, "http://localhost/boo/fib.js", 19, 17)), - adoptPtr(new SourceMap::Entry(46, 20, "http://localhost/boo/fib.js", 19, 20)), adoptPtr(new SourceMap::Entry(46, 25, "http://localhost/boo/fib.js", 19, 25)), - adoptPtr(new SourceMap::Entry(46, 27, "http://localhost/boo/fib.js", 19, 27)), adoptPtr(new SourceMap::Entry(46, 29, "http://localhost/boo/fib.js", 19, 29)), - adoptPtr(new SourceMap::Entry(46, 30, "http://localhost/boo/fib.js", 19, 30)), adoptPtr(new SourceMap::Entry(47, 0, "http://localhost/boo/fib.js", 20, 2)), - adoptPtr(new SourceMap::Entry(47, 9, "http://localhost/boo/fib.js", 20, 9)), adoptPtr(new SourceMap::Entry(47, 10, "http://localhost/boo/fib.js", 20, 10)), - adoptPtr(new SourceMap::Entry(47, 13, "http://localhost/boo/fib.js", 20, 13)), adoptPtr(new SourceMap::Entry(47, 14, "http://localhost/boo/fib.js", 20, 14)), - adoptPtr(new SourceMap::Entry(47, 22, "http://localhost/boo/fib.js", 20, 22)), adoptPtr(new SourceMap::Entry(47, 23, "http://localhost/boo/fib.js", 20, 23)), - adoptPtr(new SourceMap::Entry(47, 27, "http://localhost/boo/fib.js", 20, 27)), adoptPtr(new SourceMap::Entry(47, 29, "http://localhost/boo/fib.js", 20, 29)), - adoptPtr(new SourceMap::Entry(47, 30, "http://localhost/boo/fib.js", 20, 30)), adoptPtr(new SourceMap::Entry(47, 35, "http://localhost/boo/fib.js", 20, 35)), - adoptPtr(new SourceMap::Entry(47, 36, "http://localhost/boo/fib.js", 20, 36)), adoptPtr(new SourceMap::Entry(47, 37, "http://localhost/boo/fib.js", 20, 37)), - adoptPtr(new SourceMap::Entry(48, 1, "http://localhost/boo/fib.js", 20, 37)) - }; - const int expectedEntriesCount = sizeof(expectedEntries) / sizeof(OwnPtr<SourceMap::Entry>); - - int lineLengths[] = { 13, 1, 55, 1, 23, 1, 22, 31, 64, 54, 13, 16, 16, 1, 13, 20, 29, 16, 9, 1, 22, 1, 18, - 28, 26, 23, 1, 13, 30, 1, 20, 18, 18, 9, 26, 14, 1, 14, 17, 31, 5, 23, 1, 1, 27, 47, 33, 37, 1, 1 }; - const int linesCount = sizeof(lineLengths) / sizeof(int); - - size_t currentEntry = 0; - for (int line = 0; line < linesCount; ++line) { - for (int column = 0; column < lineLengths[line]; ++column) { - const SourceMap::Entry* entry = sourceMap->findEntry(line, column); - if (line > expectedEntries[0]->line || (line == expectedEntries[0]->line && column >= expectedEntries[0]->column)) { - ASSERT_FALSE(!entry); - EXPECT_TRUE(isEqualEntry(entry, expectedEntries[currentEntry]) || (currentEntry + 1 < expectedEntriesCount && isEqualEntry(entry, expectedEntries[++currentEntry]))); - } else { - EXPECT_TRUE(!entry); - } - } - } -} - -TEST(SourceMapTest, ParseIndexed) -{ - const char* source = "{ \"version\" : 3, \"file\": \"app.js\", \"sections\": [" - " { \"offset\": {\"line\" : 0, \"column\" : 0}, \"url\": \"url_for_part1.map\" }," - " { \"offset\": {\"line\" : 100, \"column\" : 10}, \"map\": {" - " \"version\" : 3, \"file\": \"section.js\", \"sources\": [\"foo.js\", \"bar.js\"]," - " \"names\" : [\"src\", \"maps\", \"are\", \"fun\"], \"mappings\": \"AAAA,E;;ABCDE;\"" - " }}]}"; - OwnPtr<SourceMap> sourceMap = SourceMap::parse(String::fromUTF8(source), String()); - ASSERT_FALSE(!sourceMap) << source; -} - -TEST(SourceMapTest, FindEntryWithIndexed) -{ - const char* source = "{ \"version\" : 3, \"file\": \"app.js\", \"sections\": [" - " { \"offset\": {\"line\" : 0, \"column\" : 0}, \"url\": \"url_for_part1.map\" }," - " { \"offset\": {\"line\" : 100, \"column\" : 10}, \"map\": {" - " \"version\" : 3, \"file\": \"section.js\", \"sources\": [\"foo.js\", \"bar.js\"]," - " \"names\" : [\"src\", \"maps\", \"are\", \"fun\"], \"mappings\": \";;eAEU,SAAS\"" - " }}]}"; - OwnPtr<SourceMap> sourceMap = SourceMap::parse(String::fromUTF8(source), String()); - ASSERT_FALSE(!sourceMap) << source; - - const SourceMap::Entry* entry = sourceMap->findEntry(102, 24); - ASSERT_FALSE(!entry); - EXPECT_TRUE(isEqualEntry(entry, adoptPtr(new SourceMap::Entry(102, 24, "foo.js", 2, 19)))); - - entry = sourceMap->findEntry(102, 15); - ASSERT_FALSE(!entry); - EXPECT_TRUE(isEqualEntry(entry, adoptPtr(new SourceMap::Entry(102, 15, "foo.js", 2, 10)))); - - ASSERT_TRUE(!sourceMap->findEntry(0, 0)); -} - -} // namespace blink
diff --git a/third_party/WebKit/Source/core/inspector/v8/V8DebuggerAgent.h b/third_party/WebKit/Source/core/inspector/v8/V8DebuggerAgent.h deleted file mode 100644 index 94a9786..0000000 --- a/third_party/WebKit/Source/core/inspector/v8/V8DebuggerAgent.h +++ /dev/null
@@ -1,50 +0,0 @@ -// Copyright 2015 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 V8DebuggerAgent_h -#define V8DebuggerAgent_h - -#include "core/CoreExport.h" -#include "core/InspectorBackendDispatcher.h" -#include "core/inspector/v8/V8Debugger.h" - -namespace blink { - -class InjectedScriptManager; - -class CORE_EXPORT V8DebuggerAgent : public InspectorBackendDispatcher::DebuggerCommandHandler, public V8Debugger::Agent<InspectorFrontend::Debugger> { -public: - static const char backtraceObjectGroup[]; - - // FIXME: injected script management should be an implementation details. - static PassOwnPtr<V8DebuggerAgent> create(InjectedScriptManager*, V8Debugger*, int contextGroupId); - virtual ~V8DebuggerAgent() { } - - // API for the embedder to report native activities. - virtual void schedulePauseOnNextStatement(InspectorFrontend::Debugger::Reason::Enum breakReason, PassRefPtr<JSONObject> data) = 0; - virtual void cancelPauseOnNextStatement() = 0; - virtual bool canBreakProgram() = 0; - virtual void breakProgram(InspectorFrontend::Debugger::Reason::Enum breakReason, PassRefPtr<JSONObject> data) = 0; - virtual void breakProgramOnException(InspectorFrontend::Debugger::Reason::Enum breakReason, PassRefPtr<JSONObject> data) = 0; - virtual void willExecuteScript(int scriptId) = 0; - virtual void didExecuteScript() = 0; - virtual void reset() = 0; - - virtual bool isPaused() = 0; - virtual bool enabled() = 0; - virtual V8Debugger& debugger() = 0; - - // Async call stacks implementation - static const int unknownAsyncOperationId; - virtual int traceAsyncOperationStarting(const String& description) = 0; - virtual void traceAsyncCallbackStarting(int operationId) = 0; - virtual void traceAsyncCallbackCompleted() = 0; - virtual void traceAsyncOperationCompleted(int operationId) = 0; - virtual bool trackingAsyncCalls() const = 0; -}; - -} // namespace blink - - -#endif // V8DebuggerAgent_h
diff --git a/third_party/WebKit/Source/core/inspector/v8/V8DebuggerAgentImpl.cpp b/third_party/WebKit/Source/core/inspector/v8/V8DebuggerAgentImpl.cpp index ef29806..3ababb0 100644 --- a/third_party/WebKit/Source/core/inspector/v8/V8DebuggerAgentImpl.cpp +++ b/third_party/WebKit/Source/core/inspector/v8/V8DebuggerAgentImpl.cpp
@@ -15,12 +15,14 @@ #include "core/inspector/v8/PromiseTracker.h" #include "core/inspector/v8/RemoteObjectId.h" #include "core/inspector/v8/V8AsyncCallTracker.h" -#include "core/inspector/v8/V8Debugger.h" -#include "core/inspector/v8/V8DebuggerClient.h" #include "core/inspector/v8/V8JavaScriptCallFrame.h" #include "core/inspector/v8/V8Regex.h" +#include "core/inspector/v8/V8RuntimeAgentImpl.h" #include "core/inspector/v8/V8StackTraceImpl.h" #include "core/inspector/v8/V8StringUtil.h" +#include "core/inspector/v8/public/V8ContentSearchUtil.h" +#include "core/inspector/v8/public/V8Debugger.h" +#include "core/inspector/v8/public/V8DebuggerClient.h" #include "platform/JSONValues.h" #include "wtf/Optional.h" #include "wtf/text/StringBuilder.h" @@ -116,9 +118,10 @@ return a.second < b.second; } -PassOwnPtr<V8DebuggerAgent> V8DebuggerAgent::create(InjectedScriptManager* injectedScriptManager, V8Debugger* debugger, int contextGroupId) +PassOwnPtr<V8DebuggerAgent> V8DebuggerAgent::create(V8RuntimeAgent* runtimeAgent, int contextGroupId) { - return adoptPtr(new V8DebuggerAgentImpl(injectedScriptManager, static_cast<V8DebuggerImpl*>(debugger), contextGroupId)); + V8RuntimeAgentImpl* runtimeAgentImpl = static_cast<V8RuntimeAgentImpl*>(runtimeAgent); + return adoptPtr(new V8DebuggerAgentImpl(runtimeAgentImpl->injectedScriptManager(), runtimeAgentImpl->debugger(), contextGroupId)); } V8DebuggerAgentImpl::V8DebuggerAgentImpl(InjectedScriptManager* injectedScriptManager, V8DebuggerImpl* debugger, int contextGroupId) @@ -149,7 +152,7 @@ , m_startingStepIntoAsync(false) { ASSERT(contextGroupId); - m_injectedScriptManager->injectedScriptHost()->setDebugger(this, m_debugger); + m_injectedScriptManager->injectedScriptHost()->setDebuggerAgent(this); // FIXME: remove once InjectedScriptManager moves to v8. m_v8AsyncCallTracker = V8AsyncCallTracker::create(this); @@ -599,7 +602,7 @@ { ScriptsMap::iterator it = m_scripts.find(scriptId); if (it != m_scripts.end()) - results = V8StringUtil::searchInTextByLines(m_debugger, it->value.source(), query, asBool(optionalCaseSensitive), asBool(optionalIsRegex)); + results = V8ContentSearchUtil::searchInTextByLines(m_debugger, it->value.source(), query, asBool(optionalCaseSensitive), asBool(optionalIsRegex)); else *error = "No script for id: " + scriptId; } @@ -1380,7 +1383,7 @@ { if (success) return script.sourceMappingURL(); - return V8StringUtil::findSourceMapURL(script.source(), false); + return V8ContentSearchUtil::findSourceMapURL(script.source(), false); } void V8DebuggerAgentImpl::didParseSource(const V8DebuggerParsedScript& parsedScript) @@ -1388,7 +1391,7 @@ V8DebuggerScript script = parsedScript.script; if (!parsedScript.success) - script.setSourceURL(V8StringUtil::findSourceURL(script.source(), false)); + script.setSourceURL(V8ContentSearchUtil::findSourceURL(script.source(), false)); int executionContextId = script.executionContextId(); bool isContentScript = script.isContentScript();
diff --git a/third_party/WebKit/Source/core/inspector/v8/V8DebuggerAgentImpl.h b/third_party/WebKit/Source/core/inspector/v8/V8DebuggerAgentImpl.h index 9bb66ff..8ca3e76 100644 --- a/third_party/WebKit/Source/core/inspector/v8/V8DebuggerAgentImpl.h +++ b/third_party/WebKit/Source/core/inspector/v8/V8DebuggerAgentImpl.h
@@ -9,8 +9,8 @@ #include "core/InspectorBackendDispatcher.h" #include "core/InspectorFrontend.h" #include "core/inspector/v8/ScriptBreakpoint.h" -#include "core/inspector/v8/V8DebuggerAgent.h" #include "core/inspector/v8/V8DebuggerImpl.h" +#include "core/inspector/v8/public/V8DebuggerAgent.h" #include "wtf/Forward.h" #include "wtf/HashMap.h" #include "wtf/HashSet.h" @@ -56,7 +56,6 @@ V8DebuggerAgentImpl(InjectedScriptManager*, V8DebuggerImpl*, int contextGroupId); ~V8DebuggerAgentImpl() override; - DECLARE_TRACE(); void setInspectorState(PassRefPtr<JSONObject>) override; void setFrontend(InspectorFrontend::Debugger* frontend) override { m_frontend = frontend; } @@ -68,8 +67,8 @@ // Part of the protocol. void enable(ErrorString*) override; - void setBreakpointsActive(ErrorString*, bool active); - void setSkipAllPauses(ErrorString*, bool skipped); + void setBreakpointsActive(ErrorString*, bool active) override; + void setSkipAllPauses(ErrorString*, bool skipped) override; void setBreakpointByUrl(ErrorString*, int lineNumber, const String* optionalURL, const String* optionalURLRegex, const int* optionalColumnNumber, const String* optionalCondition, TypeBuilder::Debugger::BreakpointId*, RefPtr<TypeBuilder::Array<TypeBuilder::Debugger::Location>>& locations) override; void setBreakpoint(ErrorString*, const RefPtr<JSONObject>& location, const String* optionalCondition, TypeBuilder::Debugger::BreakpointId*, RefPtr<TypeBuilder::Debugger::Location>& actualLocation) override;
diff --git a/third_party/WebKit/Source/core/inspector/v8/V8DebuggerClient.h b/third_party/WebKit/Source/core/inspector/v8/V8DebuggerClient.h deleted file mode 100644 index d901707..0000000 --- a/third_party/WebKit/Source/core/inspector/v8/V8DebuggerClient.h +++ /dev/null
@@ -1,37 +0,0 @@ -// Copyright 2015 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 V8DebuggerClient_h -#define V8DebuggerClient_h - -#include "core/CoreExport.h" -#include "core/inspector/v8/EventListenerInfo.h" - -#include <v8.h> - -namespace blink { - -class CORE_EXPORT V8DebuggerClient { - USING_FAST_MALLOC(V8DebuggerClient); -public: - virtual ~V8DebuggerClient() { } - virtual void runMessageLoopOnPause(int contextGroupId) = 0; - virtual void quitMessageLoopOnPause() = 0; - virtual void eventListeners(v8::Local<v8::Value>, EventListenerInfoMap&) = 0; - virtual bool callingContextCanAccessContext(v8::Local<v8::Context> calling, v8::Local<v8::Context> target) = 0; - - virtual v8::MaybeLocal<v8::Object> instantiateObject(v8::Local<v8::Function>) = 0; - virtual v8::MaybeLocal<v8::Value> runCompiledScript(v8::Local<v8::Context>, v8::Local<v8::Script>) = 0; - virtual v8::MaybeLocal<v8::Value> compileAndRunInternalScript(v8::Local<v8::String>) = 0; - virtual v8::MaybeLocal<v8::Value> callFunction(v8::Local<v8::Function>, v8::Local<v8::Context>, v8::Local<v8::Value> receiver, int argc, v8::Local<v8::Value> info[]) = 0; - virtual v8::MaybeLocal<v8::Value> callInternalFunction(v8::Local<v8::Function>, v8::Local<v8::Value> receiver, int argc, v8::Local<v8::Value> info[]) = 0; - - virtual String valueSubtype(v8::Local<v8::Value>) = 0; - virtual bool formatAccessorsAsProperties(v8::Local<v8::Value>) = 0; -}; - -} // namespace blink - - -#endif // V8DebuggerClient_h
diff --git a/third_party/WebKit/Source/core/inspector/v8/V8DebuggerImpl.cpp b/third_party/WebKit/Source/core/inspector/v8/V8DebuggerImpl.cpp index f1e6281..e7a67b8 100644 --- a/third_party/WebKit/Source/core/inspector/v8/V8DebuggerImpl.cpp +++ b/third_party/WebKit/Source/core/inspector/v8/V8DebuggerImpl.cpp
@@ -30,16 +30,15 @@ #include "core/inspector/v8/V8DebuggerImpl.h" +#include "core/inspector/v8/DebuggerScript.h" #include "core/inspector/v8/JavaScriptCallFrame.h" #include "core/inspector/v8/ScriptBreakpoint.h" #include "core/inspector/v8/V8DebuggerAgentImpl.h" -#include "core/inspector/v8/V8DebuggerClient.h" #include "core/inspector/v8/V8JavaScriptCallFrame.h" #include "core/inspector/v8/V8StackTraceImpl.h" #include "core/inspector/v8/V8StringUtil.h" +#include "core/inspector/v8/public/V8DebuggerClient.h" #include "platform/JSONValues.h" -#include "public/platform/Platform.h" -#include "public/platform/WebData.h" #include "wtf/Atomics.h" #include "wtf/Vector.h" #include "wtf/text/CString.h" @@ -718,8 +717,8 @@ v8::HandleScope scope(m_isolate); v8::Context::Scope contextScope(debuggerContext()); - const WebData& source = Platform::current()->loadResource("DebuggerScriptSource.js"); - v8::Local<v8::String> scriptValue = v8::String::NewFromUtf8(m_isolate, source.data(), v8::NewStringType::kInternalized, source.size()).ToLocalChecked(); + + v8::Local<v8::String> scriptValue = v8::String::NewFromUtf8(m_isolate, DebuggerScript_js, v8::NewStringType::kInternalized, sizeof(DebuggerScript_js)).ToLocalChecked(); v8::Local<v8::Value> value; if (!m_client->compileAndRunInternalScript(scriptValue).ToLocal(&value)) return;
diff --git a/third_party/WebKit/Source/core/inspector/v8/V8DebuggerImpl.h b/third_party/WebKit/Source/core/inspector/v8/V8DebuggerImpl.h index f15dbbf2..8fdac890 100644 --- a/third_party/WebKit/Source/core/inspector/v8/V8DebuggerImpl.h +++ b/third_party/WebKit/Source/core/inspector/v8/V8DebuggerImpl.h
@@ -33,8 +33,8 @@ #include "core/CoreExport.h" #include "core/InspectorTypeBuilder.h" -#include "core/inspector/v8/V8Debugger.h" #include "core/inspector/v8/V8DebuggerScript.h" +#include "core/inspector/v8/public/V8Debugger.h" #include "wtf/Forward.h" #include "wtf/PassOwnPtr.h"
diff --git a/third_party/WebKit/Source/core/inspector/v8/V8FunctionCall.cpp b/third_party/WebKit/Source/core/inspector/v8/V8FunctionCall.cpp index f830b471..3e6e25b 100644 --- a/third_party/WebKit/Source/core/inspector/v8/V8FunctionCall.cpp +++ b/third_party/WebKit/Source/core/inspector/v8/V8FunctionCall.cpp
@@ -30,8 +30,8 @@ #include "core/inspector/v8/V8FunctionCall.h" -#include "core/inspector/v8/V8DebuggerClient.h" #include "core/inspector/v8/V8StringUtil.h" +#include "core/inspector/v8/public/V8DebuggerClient.h" #include "wtf/PassOwnPtr.h" #include <v8.h>
diff --git a/third_party/WebKit/Source/core/inspector/v8/V8InjectedScriptHost.cpp b/third_party/WebKit/Source/core/inspector/v8/V8InjectedScriptHost.cpp index ff5b60a..d7899538 100644 --- a/third_party/WebKit/Source/core/inspector/v8/V8InjectedScriptHost.cpp +++ b/third_party/WebKit/Source/core/inspector/v8/V8InjectedScriptHost.cpp
@@ -4,19 +4,18 @@ #include "core/inspector/v8/V8InjectedScriptHost.h" -#include "core/inspector/v8/EventListenerInfo.h" #include "core/inspector/v8/InjectedScript.h" #include "core/inspector/v8/InjectedScriptHost.h" #include "core/inspector/v8/InspectorWrapper.h" #include "core/inspector/v8/JavaScriptCallFrame.h" -#include "core/inspector/v8/V8DebuggerClient.h" #include "core/inspector/v8/V8DebuggerImpl.h" #include "core/inspector/v8/V8StringUtil.h" +#include "core/inspector/v8/public/V8DebuggerClient.h" +#include "core/inspector/v8/public/V8EventListenerInfo.h" #include "platform/JSONValues.h" #include "platform/JSONValuesForV8.h" #include "wtf/NonCopyingSort.h" #include "wtf/RefPtr.h" -#include "wtf/StdLibExtras.h" #include <algorithm> namespace blink { @@ -63,8 +62,8 @@ v8::Local<v8::Context> context = isolate->GetCurrentContext(); InjectedScriptHost* host = V8InjectedScriptHost::unwrap(context, info.Holder()); - InjectedScriptHost::InspectableObject* object = host->inspectedObject(info[0].As<v8::Int32>()->Value()); - v8SetReturnValue(info, object->get(context)); + V8RuntimeAgent::Inspectable* object = host->inspectedObject(info[0].As<v8::Int32>()->Value()); + v8SetReturnValue(info, object ? object->get(context) : v8::Local<v8::Value>()); } static v8::Local<v8::String> functionDisplayName(v8::Local<v8::Function> function) @@ -92,7 +91,9 @@ return; InjectedScriptHost* host = V8InjectedScriptHost::unwrap(info.GetIsolate()->GetCurrentContext(), info.Holder()); - v8SetReturnValue(info, host->debugger().client()->formatAccessorsAsProperties(info[0])); + if (!host->debugger()) + return; + v8SetReturnValue(info, host->debugger()->client()->formatAccessorsAsProperties(info[0])); } void V8InjectedScriptHost::isTypedArrayCallback(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -144,7 +145,9 @@ } InjectedScriptHost* host = V8InjectedScriptHost::unwrap(info.GetIsolate()->GetCurrentContext(), info.Holder()); - String subtype = host->debugger().client()->valueSubtype(value); + if (!host->debugger()) + return; + String subtype = host->debugger()->client()->valueSubtype(value); if (!subtype.isEmpty()) { v8SetReturnValue(info, toV8String(isolate, subtype)); return; @@ -174,8 +177,9 @@ result->Set(toV8StringInternalized(isolate, "isGenerator"), v8::Boolean::New(isolate, function->IsGeneratorFunction())); InjectedScriptHost* host = V8InjectedScriptHost::unwrap(info.GetIsolate()->GetCurrentContext(), info.Holder()); - V8DebuggerImpl& debugger = host->debugger(); - v8::MaybeLocal<v8::Value> scopes = debugger.functionScopes(function); + if (!host->debugger()) + return; + v8::MaybeLocal<v8::Value> scopes = host->debugger()->functionScopes(function); if (!scopes.IsEmpty() && scopes.ToLocalChecked()->IsArray()) result->Set(toV8StringInternalized(isolate, "rawScopes"), scopes.ToLocalChecked()); @@ -190,8 +194,9 @@ v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(info[0]); InjectedScriptHost* host = V8InjectedScriptHost::unwrap(info.GetIsolate()->GetCurrentContext(), info.Holder()); - V8DebuggerImpl& debugger = host->debugger(); - v8SetReturnValue(info, debugger.generatorObjectDetails(object)); + if (!host->debugger()) + return; + v8SetReturnValue(info, host->debugger()->generatorObjectDetails(object)); } void V8InjectedScriptHost::collectionEntriesCallback(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -202,8 +207,9 @@ v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(info[0]); InjectedScriptHost* host = V8InjectedScriptHost::unwrap(info.GetIsolate()->GetCurrentContext(), info.Holder()); - V8DebuggerImpl& debugger = host->debugger(); - v8SetReturnValue(info, debugger.collectionEntries(object)); + if (!host->debugger()) + return; + v8SetReturnValue(info, host->debugger()->collectionEntries(object)); } void V8InjectedScriptHost::getInternalPropertiesCallback(const v8::FunctionCallbackInfo<v8::Value>& info) @@ -216,7 +222,7 @@ v8SetReturnValue(info, properties); } -static v8::Local<v8::Array> wrapListenerFunctions(v8::Isolate* isolate, const Vector<EventListenerInfo>& listeners) +static v8::Local<v8::Array> wrapListenerFunctions(v8::Isolate* isolate, const Vector<V8EventListenerInfo>& listeners) { v8::Local<v8::Array> result = v8::Array::New(isolate); size_t handlersCount = listeners.size(); @@ -236,8 +242,10 @@ return; InjectedScriptHost* host = V8InjectedScriptHost::unwrap(info.GetIsolate()->GetCurrentContext(), info.Holder()); - V8DebuggerClient* client = host->debugger().client(); - EventListenerInfoMap listenerInfo; + if (!host->debugger()) + return; + V8DebuggerClient* client = host->debugger()->client(); + V8EventListenerInfoMap listenerInfo; client->eventListeners(info[0], listenerInfo); v8::Local<v8::Object> result = v8::Object::New(info.GetIsolate()); @@ -283,7 +291,9 @@ v8::TryCatch tryCatch(isolate); v8::Local<v8::Value> result; InjectedScriptHost* host = V8InjectedScriptHost::unwrap(isolate->GetCurrentContext(), info.Holder()); - if (!host->debugger().client()->compileAndRunInternalScript(expression).ToLocal(&result)) { + if (!host->debugger()) + return; + if (!host->debugger()->client()->compileAndRunInternalScript(expression).ToLocal(&result)) { v8SetReturnValue(info, tryCatch.ReThrow()); return; } @@ -320,8 +330,10 @@ v8::TryCatch tryCatch(isolate); v8::Local<v8::Context> context = isolate->GetCurrentContext(); InjectedScriptHost* host = V8InjectedScriptHost::unwrap(context, info.Holder()); + if (!host->debugger()) + return; - v8::Local<v8::Script> script = host->debugger().compileInternalScript(context, expression, String()); + v8::Local<v8::Script> script = host->debugger()->compileInternalScript(context, expression, String()); if (script.IsEmpty()) { setExceptionAsReturnValue(info, wrappedResult, tryCatch); return; @@ -334,7 +346,7 @@ global->Set(commandLineAPISymbolValue, commandLineAPI); } - v8::MaybeLocal<v8::Value> result = host->debugger().client()->runCompiledScript(context, script); + v8::MaybeLocal<v8::Value> result = host->debugger()->client()->runCompiledScript(context, script); if (result.IsEmpty()) { global->Delete(context, commandLineAPISymbolValue); setExceptionAsReturnValue(info, wrappedResult, tryCatch); @@ -358,7 +370,9 @@ v8::Local<v8::Value> newValue = info[3]; InjectedScriptHost* host = V8InjectedScriptHost::unwrap(info.GetIsolate()->GetCurrentContext(), info.Holder()); - v8SetReturnValue(info, host->debugger().setFunctionVariableValue(functionValue, scopeIndex, variableName, newValue)); + if (!host->debugger()) + return; + v8SetReturnValue(info, host->debugger()->setFunctionVariableValue(functionValue, scopeIndex, variableName, newValue)); } static bool getFunctionLocation(const v8::FunctionCallbackInfo<v8::Value>& info, String* scriptId, int* lineNumber, int* columnNumber) @@ -466,11 +480,11 @@ void V8InjectedScriptHost::suppressWarningsAndCallFunctionCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { InjectedScriptHost* host = V8InjectedScriptHost::unwrap(info.GetIsolate()->GetCurrentContext(), info.Holder()); - host->client()->muteWarningsAndDeprecations(); - + if (!host->debugger()) + return; + host->debugger()->client()->muteWarningsAndDeprecations(); callFunctionCallback(info); - - host->client()->unmuteWarningsAndDeprecations(); + host->debugger()->client()->unmuteWarningsAndDeprecations(); } void V8InjectedScriptHost::setNonEnumPropertyCallback(const v8::FunctionCallbackInfo<v8::Value>& info)
diff --git a/third_party/WebKit/Source/core/inspector/v8/V8ProfilerAgent.h b/third_party/WebKit/Source/core/inspector/v8/V8ProfilerAgent.h deleted file mode 100644 index 59e7cfb..0000000 --- a/third_party/WebKit/Source/core/inspector/v8/V8ProfilerAgent.h +++ /dev/null
@@ -1,30 +0,0 @@ -// Copyright 2015 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 V8ProfilerAgent_h -#define V8ProfilerAgent_h - -#include "core/CoreExport.h" -#include "core/InspectorBackendDispatcher.h" -#include "core/inspector/v8/V8Debugger.h" - -namespace blink { - -class CORE_EXPORT V8ProfilerAgent : public InspectorBackendDispatcher::ProfilerCommandHandler, public V8Debugger::Agent<InspectorFrontend::Profiler> { -public: - static PassOwnPtr<V8ProfilerAgent> create(V8Debugger*); - virtual ~V8ProfilerAgent() { } - - // API for the embedder. - virtual void consoleProfile(const String& title) = 0; - virtual void consoleProfileEnd(const String& title) = 0; - - virtual void idleStarted() = 0; - virtual void idleFinished() = 0; -}; - -} // namespace blink - - -#endif // !defined(V8ProfilerAgent_h)
diff --git a/third_party/WebKit/Source/core/inspector/v8/V8ProfilerAgentImpl.h b/third_party/WebKit/Source/core/inspector/v8/V8ProfilerAgentImpl.h index 8e8a451..3f1110d 100644 --- a/third_party/WebKit/Source/core/inspector/v8/V8ProfilerAgentImpl.h +++ b/third_party/WebKit/Source/core/inspector/v8/V8ProfilerAgentImpl.h
@@ -7,7 +7,7 @@ #include "core/CoreExport.h" #include "core/InspectorFrontend.h" -#include "core/inspector/v8/V8ProfilerAgent.h" +#include "core/inspector/v8/public/V8ProfilerAgent.h" #include "wtf/Forward.h" #include "wtf/Noncopyable.h" #include "wtf/text/WTFString.h"
diff --git a/third_party/WebKit/Source/core/inspector/v8/V8Regex.cpp b/third_party/WebKit/Source/core/inspector/v8/V8Regex.cpp index 94f44f00..a636fde 100644 --- a/third_party/WebKit/Source/core/inspector/v8/V8Regex.cpp +++ b/third_party/WebKit/Source/core/inspector/v8/V8Regex.cpp
@@ -4,9 +4,9 @@ #include "core/inspector/v8/V8Regex.h" -#include "core/inspector/v8/V8DebuggerClient.h" #include "core/inspector/v8/V8DebuggerImpl.h" #include "core/inspector/v8/V8StringUtil.h" +#include "core/inspector/v8/public/V8DebuggerClient.h" namespace blink {
diff --git a/third_party/WebKit/Source/core/inspector/v8/V8RuntimeAgent.h b/third_party/WebKit/Source/core/inspector/v8/V8RuntimeAgent.h deleted file mode 100644 index 1240a33..0000000 --- a/third_party/WebKit/Source/core/inspector/v8/V8RuntimeAgent.h +++ /dev/null
@@ -1,30 +0,0 @@ -// Copyright 2015 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 V8RuntimeAgent_h -#define V8RuntimeAgent_h - -#include "core/CoreExport.h" -#include "core/InspectorBackendDispatcher.h" -#include "core/inspector/v8/V8Debugger.h" - -#include <v8.h> - -namespace blink { - -class InjectedScriptManager; - -class CORE_EXPORT V8RuntimeAgent : public InspectorBackendDispatcher::RuntimeCommandHandler, public V8Debugger::Agent<InspectorFrontend::Runtime> { -public: - static PassOwnPtr<V8RuntimeAgent> create(InjectedScriptManager*, V8Debugger*); - virtual ~V8RuntimeAgent() { } - - // Embedder callbacks. - virtual void reportExecutionContextCreated(v8::Local<v8::Context>, const String& type, const String& origin, const String& humanReadableName, const String& frameId) = 0; - virtual void reportExecutionContextDestroyed(v8::Local<v8::Context>) = 0; -}; - -} // namespace blink - -#endif // V8RuntimeAgent_h
diff --git a/third_party/WebKit/Source/core/inspector/v8/V8RuntimeAgentImpl.cpp b/third_party/WebKit/Source/core/inspector/v8/V8RuntimeAgentImpl.cpp index 7da1c9f..84ad69068 100644 --- a/third_party/WebKit/Source/core/inspector/v8/V8RuntimeAgentImpl.cpp +++ b/third_party/WebKit/Source/core/inspector/v8/V8RuntimeAgentImpl.cpp
@@ -32,12 +32,13 @@ #include "core/inspector/v8/IgnoreExceptionsScope.h" #include "core/inspector/v8/InjectedScript.h" +#include "core/inspector/v8/InjectedScriptHost.h" #include "core/inspector/v8/InjectedScriptManager.h" #include "core/inspector/v8/RemoteObjectId.h" -#include "core/inspector/v8/V8DebuggerClient.h" #include "core/inspector/v8/V8DebuggerImpl.h" #include "core/inspector/v8/V8StackTraceImpl.h" #include "core/inspector/v8/V8StringUtil.h" +#include "core/inspector/v8/public/V8DebuggerClient.h" #include "platform/JSONValues.h" #include "wtf/Optional.h" @@ -57,15 +58,15 @@ return b ? *b : false; } -PassOwnPtr<V8RuntimeAgent> V8RuntimeAgent::create(InjectedScriptManager* injectedScriptManager, V8Debugger* debugger) +PassOwnPtr<V8RuntimeAgent> V8RuntimeAgent::create(V8Debugger* debugger) { - return adoptPtr(new V8RuntimeAgentImpl(injectedScriptManager, static_cast<V8DebuggerImpl*>(debugger))); + return adoptPtr(new V8RuntimeAgentImpl(static_cast<V8DebuggerImpl*>(debugger))); } -V8RuntimeAgentImpl::V8RuntimeAgentImpl(InjectedScriptManager* injectedScriptManager, V8DebuggerImpl* debugger) +V8RuntimeAgentImpl::V8RuntimeAgentImpl(V8DebuggerImpl* debugger) : m_state(nullptr) , m_frontend(nullptr) - , m_injectedScriptManager(injectedScriptManager) + , m_injectedScriptManager(InjectedScriptManager::create(debugger)) , m_debugger(debugger) , m_enabled(false) { @@ -176,7 +177,7 @@ void V8RuntimeAgentImpl::setCustomObjectFormatterEnabled(ErrorString*, bool enabled) { m_state->setBoolean(V8RuntimeAgentImplState::customObjectFormatterEnabled, enabled); - injectedScriptManager()->setCustomObjectFormatterEnabled(enabled); + m_injectedScriptManager->setCustomObjectFormatterEnabled(enabled); } void V8RuntimeAgentImpl::compileScript(ErrorString* errorString, const String& expression, const String& sourceURL, bool persistScript, int executionContextId, TypeBuilder::OptOutput<ScriptId>* scriptId, RefPtr<ExceptionDetails>& exceptionDetails) @@ -290,7 +291,7 @@ String error; enable(&error); if (m_state->booleanProperty(V8RuntimeAgentImplState::customObjectFormatterEnabled, false)) - injectedScriptManager()->setCustomObjectFormatterEnabled(true); + m_injectedScriptManager->setCustomObjectFormatterEnabled(true); } void V8RuntimeAgentImpl::enable(ErrorString* errorString) @@ -300,15 +301,79 @@ void V8RuntimeAgentImpl::disable(ErrorString* errorString) { - m_compiledScripts.clear(); m_enabled = false; + m_compiledScripts.clear(); + clearInspectedObjects(); + m_injectedScriptManager->discardInjectedScripts(); +} + +int V8RuntimeAgentImpl::ensureDefaultContextAvailable(v8::Local<v8::Context> context) +{ + InjectedScript* injectedScript = m_injectedScriptManager->injectedScriptFor(context); + return injectedScript ? injectedScript->contextId() : 0; +} + +void V8RuntimeAgentImpl::setClearConsoleCallback(PassOwnPtr<V8RuntimeAgent::ClearConsoleCallback> callback) +{ + m_injectedScriptManager->injectedScriptHost()->setClearConsoleCallback(callback); +} + +void V8RuntimeAgentImpl::setInspectObjectCallback(PassOwnPtr<V8RuntimeAgent::InspectCallback> callback) +{ + m_injectedScriptManager->injectedScriptHost()->setInspectObjectCallback(callback); +} + +PassRefPtr<TypeBuilder::Runtime::RemoteObject> V8RuntimeAgentImpl::wrapObject(v8::Local<v8::Context> context, v8::Local<v8::Value> value, const String& groupName, bool generatePreview) +{ + InjectedScript* injectedScript = m_injectedScriptManager->injectedScriptFor(context); + if (!injectedScript) + return nullptr; + return injectedScript->wrapObject(value, groupName, generatePreview); +} + +PassRefPtr<TypeBuilder::Runtime::RemoteObject> V8RuntimeAgentImpl::wrapTable(v8::Local<v8::Context> context, v8::Local<v8::Value> table, v8::Local<v8::Value> columns) +{ + InjectedScript* injectedScript = m_injectedScriptManager->injectedScriptFor(context); + if (!injectedScript) + return nullptr; + return injectedScript->wrapTable(table, columns); +} + +void V8RuntimeAgentImpl::disposeObjectGroup(const String& groupName) +{ + m_injectedScriptManager->releaseObjectGroup(groupName); +} + +v8::Local<v8::Value> V8RuntimeAgentImpl::findObject(const String& objectId, v8::Local<v8::Context>* context, String* groupName) +{ + OwnPtr<RemoteObjectId> remoteId = RemoteObjectId::parse(objectId); + if (!remoteId) + return v8::Local<v8::Value>(); + InjectedScript* injectedScript = m_injectedScriptManager->findInjectedScript(remoteId->contextId()); + if (!injectedScript) + return v8::Local<v8::Value>(); + if (context) + *context = injectedScript->context(); + if (groupName) + *groupName = injectedScript->objectGroupName(*remoteId); + return injectedScript->findObject(*remoteId); +} + +void V8RuntimeAgentImpl::addInspectedObject(PassOwnPtr<Inspectable> inspectable) +{ + m_injectedScriptManager->injectedScriptHost()->addInspectedObject(inspectable); +} + +void V8RuntimeAgentImpl::clearInspectedObjects() +{ + m_injectedScriptManager->injectedScriptHost()->clearInspectedObjects(); } void V8RuntimeAgentImpl::reportExecutionContextCreated(v8::Local<v8::Context> context, const String& type, const String& origin, const String& humanReadableName, const String& frameId) { if (!m_enabled) return; - InjectedScript* injectedScript = injectedScriptManager()->injectedScriptFor(context); + InjectedScript* injectedScript = m_injectedScriptManager->injectedScriptFor(context); if (!injectedScript) return; RefPtr<ExecutionContextDescription> description = ExecutionContextDescription::create() @@ -324,7 +389,7 @@ void V8RuntimeAgentImpl::reportExecutionContextDestroyed(v8::Local<v8::Context> context) { - int contextId = injectedScriptManager()->discardInjectedScriptFor(context); + int contextId = m_injectedScriptManager->discardInjectedScriptFor(context); if (m_enabled) m_frontend->executionContextDestroyed(contextId); }
diff --git a/third_party/WebKit/Source/core/inspector/v8/V8RuntimeAgentImpl.h b/third_party/WebKit/Source/core/inspector/v8/V8RuntimeAgentImpl.h index 43573770..8dce4404 100644 --- a/third_party/WebKit/Source/core/inspector/v8/V8RuntimeAgentImpl.h +++ b/third_party/WebKit/Source/core/inspector/v8/V8RuntimeAgentImpl.h
@@ -33,13 +33,12 @@ #include "core/CoreExport.h" #include "core/InspectorFrontend.h" -#include "core/inspector/v8/V8RuntimeAgent.h" +#include "core/inspector/v8/public/V8RuntimeAgent.h" #include "wtf/Forward.h" #include "wtf/Noncopyable.h" namespace blink { -class InjectedScript; class InjectedScriptManager; class JSONArray; class V8DebuggerImpl; @@ -49,7 +48,7 @@ class CORE_EXPORT V8RuntimeAgentImpl : public V8RuntimeAgent { WTF_MAKE_NONCOPYABLE(V8RuntimeAgentImpl); public: - V8RuntimeAgentImpl(InjectedScriptManager*, V8DebuggerImpl*); + V8RuntimeAgentImpl(V8DebuggerImpl*); ~V8RuntimeAgentImpl() override; // State management methods. @@ -91,16 +90,26 @@ void runScript(ErrorString*, const TypeBuilder::Runtime::ScriptId&, int executionContextId, const String* objectGroup, const bool* doNotPauseOnExceptionsAndMuteConsole, RefPtr<TypeBuilder::Runtime::RemoteObject>& result, RefPtr<TypeBuilder::Runtime::ExceptionDetails>&) override; V8DebuggerImpl* debugger() { return m_debugger; } + InjectedScriptManager* injectedScriptManager() { return m_injectedScriptManager.get(); } private: - InjectedScriptManager* injectedScriptManager() { return m_injectedScriptManager; } + void setClearConsoleCallback(PassOwnPtr<ClearConsoleCallback>) override; + void setInspectObjectCallback(PassOwnPtr<InspectCallback>) override; + int ensureDefaultContextAvailable(v8::Local<v8::Context>) override; + PassRefPtr<TypeBuilder::Runtime::RemoteObject> wrapObject(v8::Local<v8::Context>, v8::Local<v8::Value>, const String& groupName, bool generatePreview = false) override; + PassRefPtr<TypeBuilder::Runtime::RemoteObject> wrapTable(v8::Local<v8::Context>, v8::Local<v8::Value> table, v8::Local<v8::Value> columns) override; + void disposeObjectGroup(const String&) override; + v8::Local<v8::Value> findObject(const String& objectId, v8::Local<v8::Context>* = nullptr, String* groupName = nullptr) override; + void addInspectedObject(PassOwnPtr<Inspectable>) override; + void clearInspectedObjects() override; + void reportExecutionContextCreated(v8::Local<v8::Context>, const String& type, const String& origin, const String& humanReadableName, const String& frameId) override; void reportExecutionContextDestroyed(v8::Local<v8::Context>) override; PassRefPtr<TypeBuilder::Runtime::ExceptionDetails> createExceptionDetails(v8::Isolate*, v8::Local<v8::Message>); RefPtr<JSONObject> m_state; InspectorFrontend::Runtime* m_frontend; - InjectedScriptManager* m_injectedScriptManager; + OwnPtr<InjectedScriptManager> m_injectedScriptManager; V8DebuggerImpl* m_debugger; bool m_enabled; HashMap<String, OwnPtr<v8::Global<v8::Script>>> m_compiledScripts;
diff --git a/third_party/WebKit/Source/core/inspector/v8/V8StackTraceImpl.h b/third_party/WebKit/Source/core/inspector/v8/V8StackTraceImpl.h index 9c9a268..a98b01ab 100644 --- a/third_party/WebKit/Source/core/inspector/v8/V8StackTraceImpl.h +++ b/third_party/WebKit/Source/core/inspector/v8/V8StackTraceImpl.h
@@ -5,7 +5,7 @@ #ifndef V8StackTraceImpl_h #define V8StackTraceImpl_h -#include "core/inspector/v8/V8StackTrace.h" +#include "core/inspector/v8/public/V8StackTrace.h" #include "wtf/Forward.h" #include "wtf/PassOwnPtr.h" #include "wtf/RefCounted.h"
diff --git a/third_party/WebKit/Source/core/inspector/v8/V8StringUtil.cpp b/third_party/WebKit/Source/core/inspector/v8/V8StringUtil.cpp index ffaf22f..237e7d2 100644 --- a/third_party/WebKit/Source/core/inspector/v8/V8StringUtil.cpp +++ b/third_party/WebKit/Source/core/inspector/v8/V8StringUtil.cpp
@@ -155,7 +155,7 @@ return toWTFString(value.As<v8::String>()); } -namespace V8StringUtil { +namespace V8ContentSearchUtil { String findSourceURL(const String& content, bool multiline) { @@ -179,6 +179,6 @@ return result; } -} // namespace V8StringUtil +} // namespace V8ContentSearchUtil } // namespace blink
diff --git a/third_party/WebKit/Source/core/inspector/v8/V8StringUtil.h b/third_party/WebKit/Source/core/inspector/v8/V8StringUtil.h index 933e92a..d44eb78 100644 --- a/third_party/WebKit/Source/core/inspector/v8/V8StringUtil.h +++ b/third_party/WebKit/Source/core/inspector/v8/V8StringUtil.h
@@ -5,29 +5,17 @@ #ifndef V8StringUtil_h #define V8StringUtil_h -#include "core/InspectorTypeBuilder.h" - #include "wtf/text/WTFString.h" #include <v8.h> namespace blink { -class V8Debugger; - v8::Local<v8::String> toV8String(v8::Isolate*, const String&); v8::Local<v8::String> toV8StringInternalized(v8::Isolate*, const String&); String toWTFString(v8::Local<v8::String>); String toWTFStringWithTypeCheck(v8::Local<v8::Value>); -namespace V8StringUtil { - -String findSourceURL(const String& content, bool multiline); -String findSourceMapURL(const String& content, bool multiline); -PassRefPtr<TypeBuilder::Array<TypeBuilder::Debugger::SearchMatch>> searchInTextByLines(V8Debugger*, const String& text, const String& query, const bool caseSensitive, const bool isRegex); - -} // namespace V8StringUtil - } // namespace blink
diff --git a/third_party/WebKit/Source/build/scripts/rjsmin.py b/third_party/WebKit/Source/core/inspector/v8/build/rjsmin.py similarity index 100% copy from third_party/WebKit/Source/build/scripts/rjsmin.py copy to third_party/WebKit/Source/core/inspector/v8/build/rjsmin.py
diff --git a/third_party/WebKit/Source/core/inspector/v8/build/xxd.py b/third_party/WebKit/Source/core/inspector/v8/build/xxd.py new file mode 100644 index 0000000..635d80c --- /dev/null +++ b/third_party/WebKit/Source/core/inspector/v8/build/xxd.py
@@ -0,0 +1,28 @@ +# Copyright 2016 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. + +"""Represent a file as a C++ constant string. + +Usage: +python xxd.py VAR SOURCE DEST +""" + + +import sys +import rjsmin + + +def main(): + variable_name, input_filename, output_filename = sys.argv[1:] + with open(input_filename) as input_file: + input_text = input_file.read() + input_text = rjsmin.jsmin(input_text) + hex_values = ['0x{0:02x}'.format(ord(char)) for char in input_text] + const_declaration = 'const char %s[] = {\n%s\n};\n' % ( + variable_name, ', '.join(hex_values)) + with open(output_filename, 'w') as output_file: + output_file.write(const_declaration) + +if __name__ == '__main__': + sys.exit(main())
diff --git a/third_party/WebKit/Source/core/inspector/v8/public/V8ContentSearchUtil.h b/third_party/WebKit/Source/core/inspector/v8/public/V8ContentSearchUtil.h new file mode 100644 index 0000000..07db57b --- /dev/null +++ b/third_party/WebKit/Source/core/inspector/v8/public/V8ContentSearchUtil.h
@@ -0,0 +1,26 @@ +// Copyright 2016 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 V8ContentSearchUtil_h +#define V8ContentSearchUtil_h + +#include "core/InspectorTypeBuilder.h" + +#include "wtf/text/WTFString.h" + +namespace blink { + +class V8Debugger; + +namespace V8ContentSearchUtil { + +String findSourceURL(const String& content, bool multiline); +String findSourceMapURL(const String& content, bool multiline); +PassRefPtr<TypeBuilder::Array<TypeBuilder::Debugger::SearchMatch>> searchInTextByLines(V8Debugger*, const String& text, const String& query, const bool caseSensitive, const bool isRegex); + +} + +} + +#endif // !defined(V8ContentSearchUtil_h)
diff --git a/third_party/WebKit/Source/core/inspector/v8/V8Debugger.h b/third_party/WebKit/Source/core/inspector/v8/public/V8Debugger.h similarity index 100% rename from third_party/WebKit/Source/core/inspector/v8/V8Debugger.h rename to third_party/WebKit/Source/core/inspector/v8/public/V8Debugger.h
diff --git a/third_party/WebKit/Source/core/inspector/v8/public/V8DebuggerAgent.h b/third_party/WebKit/Source/core/inspector/v8/public/V8DebuggerAgent.h new file mode 100644 index 0000000..744c55aa --- /dev/null +++ b/third_party/WebKit/Source/core/inspector/v8/public/V8DebuggerAgent.h
@@ -0,0 +1,49 @@ +// Copyright 2015 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 V8DebuggerAgent_h +#define V8DebuggerAgent_h + +#include "core/CoreExport.h" +#include "core/InspectorBackendDispatcher.h" +#include "core/inspector/v8/public/V8Debugger.h" + +namespace blink { + +class V8RuntimeAgent; + +class CORE_EXPORT V8DebuggerAgent : public InspectorBackendDispatcher::DebuggerCommandHandler, public V8Debugger::Agent<InspectorFrontend::Debugger> { +public: + static const char backtraceObjectGroup[]; + + static PassOwnPtr<V8DebuggerAgent> create(V8RuntimeAgent*, int contextGroupId); + virtual ~V8DebuggerAgent() { } + + // API for the embedder to report native activities. + virtual void schedulePauseOnNextStatement(InspectorFrontend::Debugger::Reason::Enum breakReason, PassRefPtr<JSONObject> data) = 0; + virtual void cancelPauseOnNextStatement() = 0; + virtual bool canBreakProgram() = 0; + virtual void breakProgram(InspectorFrontend::Debugger::Reason::Enum breakReason, PassRefPtr<JSONObject> data) = 0; + virtual void breakProgramOnException(InspectorFrontend::Debugger::Reason::Enum breakReason, PassRefPtr<JSONObject> data) = 0; + virtual void willExecuteScript(int scriptId) = 0; + virtual void didExecuteScript() = 0; + virtual void reset() = 0; + + virtual bool isPaused() = 0; + virtual bool enabled() = 0; + virtual V8Debugger& debugger() = 0; + + // Async call stacks implementation + static const int unknownAsyncOperationId; + virtual int traceAsyncOperationStarting(const String& description) = 0; + virtual void traceAsyncCallbackStarting(int operationId) = 0; + virtual void traceAsyncCallbackCompleted() = 0; + virtual void traceAsyncOperationCompleted(int operationId) = 0; + virtual bool trackingAsyncCalls() const = 0; +}; + +} // namespace blink + + +#endif // V8DebuggerAgent_h
diff --git a/third_party/WebKit/Source/core/inspector/v8/public/V8DebuggerClient.h b/third_party/WebKit/Source/core/inspector/v8/public/V8DebuggerClient.h new file mode 100644 index 0000000..7ff6f77d --- /dev/null +++ b/third_party/WebKit/Source/core/inspector/v8/public/V8DebuggerClient.h
@@ -0,0 +1,39 @@ +// Copyright 2015 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 V8DebuggerClient_h +#define V8DebuggerClient_h + +#include "core/CoreExport.h" +#include "core/inspector/v8/public/V8EventListenerInfo.h" + +#include <v8.h> + +namespace blink { + +class CORE_EXPORT V8DebuggerClient { + USING_FAST_MALLOC(V8DebuggerClient); +public: + virtual ~V8DebuggerClient() { } + virtual void runMessageLoopOnPause(int contextGroupId) = 0; + virtual void quitMessageLoopOnPause() = 0; + virtual void muteWarningsAndDeprecations() = 0; + virtual void unmuteWarningsAndDeprecations() = 0; + virtual void eventListeners(v8::Local<v8::Value>, V8EventListenerInfoMap&) = 0; + virtual bool callingContextCanAccessContext(v8::Local<v8::Context> calling, v8::Local<v8::Context> target) = 0; + + virtual v8::MaybeLocal<v8::Object> instantiateObject(v8::Local<v8::Function>) = 0; + virtual v8::MaybeLocal<v8::Value> runCompiledScript(v8::Local<v8::Context>, v8::Local<v8::Script>) = 0; + virtual v8::MaybeLocal<v8::Value> compileAndRunInternalScript(v8::Local<v8::String>) = 0; + virtual v8::MaybeLocal<v8::Value> callFunction(v8::Local<v8::Function>, v8::Local<v8::Context>, v8::Local<v8::Value> receiver, int argc, v8::Local<v8::Value> info[]) = 0; + virtual v8::MaybeLocal<v8::Value> callInternalFunction(v8::Local<v8::Function>, v8::Local<v8::Value> receiver, int argc, v8::Local<v8::Value> info[]) = 0; + + virtual String valueSubtype(v8::Local<v8::Value>) = 0; + virtual bool formatAccessorsAsProperties(v8::Local<v8::Value>) = 0; +}; + +} // namespace blink + + +#endif // V8DebuggerClient_h
diff --git a/third_party/WebKit/Source/core/inspector/v8/public/V8EventListenerInfo.h b/third_party/WebKit/Source/core/inspector/v8/public/V8EventListenerInfo.h new file mode 100644 index 0000000..f98d7982 --- /dev/null +++ b/third_party/WebKit/Source/core/inspector/v8/public/V8EventListenerInfo.h
@@ -0,0 +1,34 @@ +// Copyright 2015 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 V8EventListenerInfo_h +#define V8EventListenerInfo_h + +#include "wtf/Vector.h" +#include "wtf/text/AtomicString.h" + +#include <v8.h> + +namespace blink { + +class V8EventListenerInfo { +public: + V8EventListenerInfo(const AtomicString& eventType, bool useCapture, v8::Local<v8::Object> handler) + : eventType(eventType) + , useCapture(useCapture) + , handler(handler) + { + } + + const AtomicString eventType; + bool useCapture; + v8::Local<v8::Object> handler; + +}; + +using V8EventListenerInfoMap = HashMap<String, OwnPtr<Vector<V8EventListenerInfo>>>; + +} // namespace blink + +#endif // V8EventListenerInfo_h
diff --git a/third_party/WebKit/Source/core/inspector/v8/public/V8ProfilerAgent.h b/third_party/WebKit/Source/core/inspector/v8/public/V8ProfilerAgent.h new file mode 100644 index 0000000..58f002c --- /dev/null +++ b/third_party/WebKit/Source/core/inspector/v8/public/V8ProfilerAgent.h
@@ -0,0 +1,30 @@ +// Copyright 2015 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 V8ProfilerAgent_h +#define V8ProfilerAgent_h + +#include "core/CoreExport.h" +#include "core/InspectorBackendDispatcher.h" +#include "core/inspector/v8/public/V8Debugger.h" + +namespace blink { + +class CORE_EXPORT V8ProfilerAgent : public InspectorBackendDispatcher::ProfilerCommandHandler, public V8Debugger::Agent<InspectorFrontend::Profiler> { +public: + static PassOwnPtr<V8ProfilerAgent> create(V8Debugger*); + virtual ~V8ProfilerAgent() { } + + // API for the embedder. + virtual void consoleProfile(const String& title) = 0; + virtual void consoleProfileEnd(const String& title) = 0; + + virtual void idleStarted() = 0; + virtual void idleFinished() = 0; +}; + +} // namespace blink + + +#endif // !defined(V8ProfilerAgent_h)
diff --git a/third_party/WebKit/Source/core/inspector/v8/public/V8RuntimeAgent.h b/third_party/WebKit/Source/core/inspector/v8/public/V8RuntimeAgent.h new file mode 100644 index 0000000..99bf631 --- /dev/null +++ b/third_party/WebKit/Source/core/inspector/v8/public/V8RuntimeAgent.h
@@ -0,0 +1,53 @@ +// Copyright 2015 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 V8RuntimeAgent_h +#define V8RuntimeAgent_h + +#include "core/CoreExport.h" +#include "core/InspectorBackendDispatcher.h" +#include "core/inspector/v8/public/V8Debugger.h" +#include "wtf/Functional.h" + +#include <v8.h> + +namespace blink { + +class InjectedScriptManager; + +class CORE_EXPORT V8RuntimeAgent : public InspectorBackendDispatcher::RuntimeCommandHandler, public V8Debugger::Agent<InspectorFrontend::Runtime> { +public: + // Cross-context inspectable values (DOM nodes in different worlds, etc.). + class Inspectable { + public: + virtual v8::Local<v8::Value> get(v8::Local<v8::Context>) = 0; + virtual ~Inspectable() { } + }; + + static PassOwnPtr<V8RuntimeAgent> create(V8Debugger*); + virtual ~V8RuntimeAgent() { } + + // Embedder notification API. + virtual void reportExecutionContextCreated(v8::Local<v8::Context>, const String& type, const String& origin, const String& humanReadableName, const String& frameId) = 0; + virtual void reportExecutionContextDestroyed(v8::Local<v8::Context>) = 0; + + // Embedder API. + using ClearConsoleCallback = Function<void()>; + virtual void setClearConsoleCallback(PassOwnPtr<ClearConsoleCallback>) = 0; + using InspectCallback = Function<void(PassRefPtr<TypeBuilder::Runtime::RemoteObject>, PassRefPtr<JSONObject>)>; + virtual void setInspectObjectCallback(PassOwnPtr<InspectCallback>) = 0; + // FIXME: remove while preserving the default context evaluation. + virtual int ensureDefaultContextAvailable(v8::Local<v8::Context>) = 0; + virtual PassRefPtr<TypeBuilder::Runtime::RemoteObject> wrapObject(v8::Local<v8::Context>, v8::Local<v8::Value>, const String& groupName, bool generatePreview = false) = 0; + // FIXME: remove when console.table moves into V8 inspector. + virtual PassRefPtr<TypeBuilder::Runtime::RemoteObject> wrapTable(v8::Local<v8::Context>, v8::Local<v8::Value> table, v8::Local<v8::Value> columns) = 0; + virtual v8::Local<v8::Value> findObject(const String& objectId, v8::Local<v8::Context>* = nullptr, String* objectGroup = nullptr) = 0; + virtual void disposeObjectGroup(const String&) = 0; + virtual void addInspectedObject(PassOwnPtr<Inspectable>) = 0; + virtual void clearInspectedObjects() = 0; +}; + +} // namespace blink + +#endif // V8RuntimeAgent_h
diff --git a/third_party/WebKit/Source/core/inspector/v8/V8StackTrace.h b/third_party/WebKit/Source/core/inspector/v8/public/V8StackTrace.h similarity index 100% rename from third_party/WebKit/Source/core/inspector/v8/V8StackTrace.h rename to third_party/WebKit/Source/core/inspector/v8/public/V8StackTrace.h
diff --git a/third_party/WebKit/Source/core/inspector/v8/v8_inspector.gyp b/third_party/WebKit/Source/core/inspector/v8/v8_inspector.gyp new file mode 100644 index 0000000..512e4a4 --- /dev/null +++ b/third_party/WebKit/Source/core/inspector/v8/v8_inspector.gyp
@@ -0,0 +1,57 @@ +# Copyright 2016 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. + +{ + 'targets': [ + { + # GN version: //third_party/WebKit/Source/core/inspector/v8:injected_script_sources + 'target_name': 'injected_script_sources', + 'type': 'none', + 'dependencies': [ + 'injected_script', + 'debugger_script', + ] + }, + { + # GN version: //third_party/WebKit/Source/core/inspector/v8:injected_script + 'target_name': 'injected_script', + 'type': 'none', + 'actions': [ + { + 'action_name': 'ConvertFileToHeaderWithCharacterArray', + 'inputs': [ + 'build/xxd.py', + 'InjectedScriptSource.js', + ], + 'outputs': [ '<(SHARED_INTERMEDIATE_DIR)/blink/core/inspector/v8/InjectedScriptSource.h', ], + 'action': [ + 'python', 'build/xxd.py', 'InjectedScriptSource_js', 'InjectedScriptSource.js', '<@(_outputs)' + ], + }, + ], + # Since this target generates header files, it needs to be a hard dependency. + 'hard_dependency': 1, + }, + { + # GN version: //third_party/WebKit/Source/core/inspector/v8:debugger_script + 'target_name': 'debugger_script', + 'type': 'none', + 'actions': [ + { + 'action_name': 'ConvertFileToHeaderWithCharacterArray', + 'inputs': [ + 'build/xxd.py', + 'DebuggerScript.js', + ], + 'outputs': [ '<(SHARED_INTERMEDIATE_DIR)/blink/core/inspector/v8/DebuggerScript.h', ], + 'action': [ + 'python', 'build/xxd.py', 'DebuggerScript_js', 'DebuggerScript.js', '<@(_outputs)' + ], + }, + ], + # Since this target generates header files, it needs to be a hard dependency. + 'hard_dependency': 1, + }, + ], # targets +}
diff --git a/third_party/WebKit/Source/core/layout/ColumnBalancer.cpp b/third_party/WebKit/Source/core/layout/ColumnBalancer.cpp index 0f7c35fa..cf227ef 100644 --- a/third_party/WebKit/Source/core/layout/ColumnBalancer.cpp +++ b/third_party/WebKit/Source/core/layout/ColumnBalancer.cpp
@@ -6,6 +6,7 @@ #include "core/layout/LayoutMultiColumnFlowThread.h" #include "core/layout/LayoutMultiColumnSet.h" +#include "core/layout/api/LineLayoutBlockFlow.h" namespace blink {
diff --git a/third_party/WebKit/Source/core/layout/LayoutBox.cpp b/third_party/WebKit/Source/core/layout/LayoutBox.cpp index c6ecfa3..cc651c30 100644 --- a/third_party/WebKit/Source/core/layout/LayoutBox.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutBox.cpp
@@ -51,6 +51,7 @@ #include "core/layout/LayoutScrollbarPart.h" #include "core/layout/LayoutTableCell.h" #include "core/layout/LayoutView.h" +#include "core/layout/api/LineLayoutBox.h" #include "core/layout/compositing/PaintLayerCompositor.h" #include "core/layout/shapes/ShapeOutsideInfo.h" #include "core/page/AutoscrollController.h" @@ -1817,7 +1818,7 @@ // our object was inline originally, since otherwise it would have ended up underneath // the inlines. RootInlineBox& root = box->root(); - root.block().setStaticInlinePositionForChild(*this, box->logicalLeft()); + root.block().setStaticInlinePositionForChild(LineLayoutBox(this), box->logicalLeft()); } else { // Our object was a block originally, so we make our normal flow position be // just below the line box (as though all the inlines that came before us got
diff --git a/third_party/WebKit/Source/core/layout/LayoutDeprecatedFlexibleBox.cpp b/third_party/WebKit/Source/core/layout/LayoutDeprecatedFlexibleBox.cpp index 2716d57..7b8c16b 100644 --- a/third_party/WebKit/Source/core/layout/LayoutDeprecatedFlexibleBox.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutDeprecatedFlexibleBox.cpp
@@ -28,6 +28,7 @@ #include "core/layout/LayoutView.h" #include "core/layout/TextAutosizer.h" #include "core/layout/TextRunConstructor.h" +#include "core/layout/api/LineLayoutBlockFlow.h" #include "core/paint/PaintLayer.h" #include "platform/fonts/Font.h" #include "wtf/StdLibExtras.h" @@ -902,8 +903,8 @@ float totalWidth = font.width(constructTextRun(font, &horizontalEllipsisCharacter, 1, styleRef(), style()->direction())); // See if this width can be accommodated on the last visible line - LayoutBlockFlow& destBlock = lastVisibleLine->block(); - LayoutBlockFlow& srcBlock = lastLine->block(); + LineLayoutBlockFlow destBlock = lastVisibleLine->block(); + LineLayoutBlockFlow srcBlock = lastLine->block(); // FIXME: Directions of src/destBlock could be different from our direction and from one another. if (!srcBlock.style()->isLeftToRightDirection())
diff --git a/third_party/WebKit/Source/core/layout/LayoutGeometryMap.cpp b/third_party/WebKit/Source/core/layout/LayoutGeometryMap.cpp index 9cb0abf..7bc8ecd7 100644 --- a/third_party/WebKit/Source/core/layout/LayoutGeometryMap.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutGeometryMap.cpp
@@ -247,7 +247,7 @@ step.m_offsetForFixedPosition = offsetForFixedPosition; if (!t.isIntegerTranslation()) - step.m_transform = adoptPtr(new TransformationMatrix(t)); + step.m_transform = TransformationMatrix::create(t); else step.m_offset = LayoutSize(t.e(), t.f());
diff --git a/third_party/WebKit/Source/core/layout/LayoutImageResource.h b/third_party/WebKit/Source/core/layout/LayoutImageResource.h index a83178b..9680c5a 100644 --- a/third_party/WebKit/Source/core/layout/LayoutImageResource.h +++ b/third_party/WebKit/Source/core/layout/LayoutImageResource.h
@@ -27,7 +27,6 @@ #define LayoutImageResource_h #include "core/fetch/ImageResource.h" -#include "core/fetch/ResourcePtr.h" #include "core/style/StyleImage.h" namespace blink { @@ -64,12 +63,12 @@ virtual WrappedImagePtr imagePtr() const { return m_cachedImage.get(); } - DEFINE_INLINE_VIRTUAL_TRACE() { } + DEFINE_INLINE_VIRTUAL_TRACE() { visitor->trace(m_cachedImage); } protected: LayoutImageResource(); LayoutObject* m_layoutObject; - ResourcePtr<ImageResource> m_cachedImage; + RefPtrWillBeMember<ImageResource> m_cachedImage; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/LayoutImageResourceStyleImage.cpp b/third_party/WebKit/Source/core/layout/LayoutImageResourceStyleImage.cpp index 36add1625..be7e3e0f 100644 --- a/third_party/WebKit/Source/core/layout/LayoutImageResourceStyleImage.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutImageResourceStyleImage.cpp
@@ -41,6 +41,7 @@ LayoutImageResourceStyleImage::~LayoutImageResourceStyleImage() { + ASSERT(!m_cachedImage); } void LayoutImageResourceStyleImage::initialize(LayoutObject* layoutObject) @@ -57,7 +58,7 @@ { ASSERT(m_layoutObject); m_styleImage->removeClient(m_layoutObject); - m_cachedImage = 0; + m_cachedImage = nullptr; } PassRefPtr<Image> LayoutImageResourceStyleImage::image(const IntSize& size, float zoom) const
diff --git a/third_party/WebKit/Source/core/layout/LayoutListMarker.cpp b/third_party/WebKit/Source/core/layout/LayoutListMarker.cpp index 61881ff..b77747d 100644 --- a/third_party/WebKit/Source/core/layout/LayoutListMarker.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutListMarker.cpp
@@ -28,6 +28,7 @@ #include "core/layout/LayoutAnalyzer.h" #include "core/layout/LayoutListItem.h" #include "core/layout/ListMarkerText.h" +#include "core/layout/api/LineLayoutBlockFlow.h" #include "core/paint/ListMarkerPainter.h" #include "core/paint/PaintLayer.h" #include "platform/fonts/Font.h"
diff --git a/third_party/WebKit/Source/core/layout/LayoutReplaced.cpp b/third_party/WebKit/Source/core/layout/LayoutReplaced.cpp index 5e31d1f..5e937494 100644 --- a/third_party/WebKit/Source/core/layout/LayoutReplaced.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutReplaced.cpp
@@ -29,6 +29,7 @@ #include "core/layout/LayoutImage.h" #include "core/layout/LayoutInline.h" #include "core/layout/LayoutView.h" +#include "core/layout/api/LineLayoutBlockFlow.h" #include "core/paint/PaintInfo.h" #include "core/paint/PaintLayer.h" #include "core/paint/ReplacedPainter.h"
diff --git a/third_party/WebKit/Source/core/layout/LayoutTextControlSingleLine.cpp b/third_party/WebKit/Source/core/layout/LayoutTextControlSingleLine.cpp index ecc439b0..7e8abf2 100644 --- a/third_party/WebKit/Source/core/layout/LayoutTextControlSingleLine.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutTextControlSingleLine.cpp
@@ -95,28 +95,14 @@ void LayoutTextControlSingleLine::layout() { LayoutAnalyzer::Scope analyzer(*this); - SubtreeLayoutScope layoutScope(*this); - LayoutBox* innerEditorLayoutObject = innerEditorElement()->layoutBox(); - bool innerEditorLayoutObjectHadLayout = innerEditorLayoutObject && innerEditorLayoutObject->needsLayout(); - - // This is the measuring phase. Thus we force children to be relayout so - // that the checks below are executed consistently. LayoutBlockFlow::layoutBlock(true); + LayoutBox* innerEditorLayoutObject = innerEditorElement()->layoutBox(); Element* container = containerElement(); - LayoutBox* containerLayoutObject = container ? container->layoutBox() : 0; - - // We ensure that the inner editor layoutObject is laid out at least once. This is - // required as the logic below assumes that we don't carry over previous layout values. - if (innerEditorLayoutObject && !innerEditorLayoutObjectHadLayout) - layoutScope.setNeedsLayout(innerEditorLayoutObject, LayoutInvalidationReason::TextControlChanged); - - // If we need another layout pass, we have changed one of children's height so we need to relayout them. - if (needsLayout()) - LayoutBlockFlow::layoutBlock(true); - - // Center the child block in the block progression direction (vertical centering for horizontal text fields). + LayoutBox* containerLayoutObject = container ? container->layoutBox() : nullptr; + // Center the child block in the block progression direction (vertical + // centering for horizontal text fields). if (!container && innerEditorLayoutObject && innerEditorLayoutObject->size().height() != contentLogicalHeight()) { LayoutUnit logicalHeightDiff = innerEditorLayoutObject->logicalHeight() - contentLogicalHeight(); innerEditorLayoutObject->setLogicalTop(innerEditorLayoutObject->logicalTop() - (logicalHeightDiff / 2 + layoutMod(logicalHeightDiff, 2)));
diff --git a/third_party/WebKit/Source/core/layout/api/LineLayoutBlockFlow.h b/third_party/WebKit/Source/core/layout/api/LineLayoutBlockFlow.h index 27115fe..9c80eb0 100644 --- a/third_party/WebKit/Source/core/layout/api/LineLayoutBlockFlow.h +++ b/third_party/WebKit/Source/core/layout/api/LineLayoutBlockFlow.h
@@ -178,6 +178,31 @@ return toBlockFlow()->logicalLeftOffsetForLine(position, indentText, logicalHeight); } + void setHasMarkupTruncation(bool b) + { + toBlockFlow()->setHasMarkupTruncation(b); + } + + LayoutUnit logicalWidth() + { + return toBlockFlow()->logicalWidth(); + } + + LineBoxList* lineBoxes() + { + return toBlockFlow()->lineBoxes(); + } + + bool containsFloats() const + { + return toBlockFlow()->containsFloats(); + } + + LayoutBlock* blockBeforeWithinSelectionRoot(LayoutSize& offset) const + { + return toBlockFlow()->blockBeforeWithinSelectionRoot(offset); + } + private: LayoutBlockFlow* toBlockFlow() { return toLayoutBlockFlow(layoutObject()); }; const LayoutBlockFlow* toBlockFlow() const { return toLayoutBlockFlow(layoutObject()); };
diff --git a/third_party/WebKit/Source/core/layout/api/LineLayoutBox.h b/third_party/WebKit/Source/core/layout/api/LineLayoutBox.h index 3d53826..b7bb21a 100644 --- a/third_party/WebKit/Source/core/layout/api/LineLayoutBox.h +++ b/third_party/WebKit/Source/core/layout/api/LineLayoutBox.h
@@ -56,6 +56,26 @@ return toBox()->flipForWritingMode(unit); } + void flipForWritingMode(FloatRect& rect) const + { + toBox()->flipForWritingMode(rect); + } + + FloatPoint flipForWritingMode(const FloatPoint& point) const + { + return toBox()->flipForWritingMode(point); + } + + void flipForWritingMode(LayoutRect& rect) const + { + toBox()->flipForWritingMode(rect); + } + + LayoutPoint flipForWritingMode(const LayoutPoint& point) const + { + return toBox()->flipForWritingMode(point); + } + void moveWithEdgeOfInlineContainerIfNecessary(bool isHorizontal) { toBox()->moveWithEdgeOfInlineContainerIfNecessary(isHorizontal); @@ -74,6 +94,21 @@ return toBox()->logicalLayoutOverflowRectForPropagation(style); } + void setLocation(const LayoutPoint& location) + { + return toBox()->setLocation(location); + } + + void setSize(const LayoutSize& size) + { + return toBox()->setSize(size); + } + + IntSize scrolledContentOffset() const + { + return toBox()->scrolledContentOffset(); + } + private: LayoutBox* toBox() {
diff --git a/third_party/WebKit/Source/core/layout/api/LineLayoutItem.h b/third_party/WebKit/Source/core/layout/api/LineLayoutItem.h index 5ed233b..480f2451 100644 --- a/third_party/WebKit/Source/core/layout/api/LineLayoutItem.h +++ b/third_party/WebKit/Source/core/layout/api/LineLayoutItem.h
@@ -364,6 +364,16 @@ return m_layoutObject->nextOffset(current); } + FloatPoint localToAbsolute(const FloatPoint& localPoint = FloatPoint(), MapCoordinatesFlags flags = 0) const + { + return m_layoutObject->localToAbsolute(localPoint, flags); + } + + bool hasOverflowClip() const + { + return m_layoutObject->hasOverflowClip(); + } + #ifndef NDEBUG const char* name() const
diff --git a/third_party/WebKit/Source/core/layout/line/InlineBox.cpp b/third_party/WebKit/Source/core/layout/line/InlineBox.cpp index b2fea86..c6db3cd 100644 --- a/third_party/WebKit/Source/core/layout/line/InlineBox.cpp +++ b/third_party/WebKit/Source/core/layout/line/InlineBox.cpp
@@ -22,6 +22,7 @@ #include "core/layout/HitTestLocation.h" #include "core/layout/LayoutBlockFlow.h" #include "core/layout/LayoutObject.h" +#include "core/layout/api/LineLayoutBlockFlow.h" #include "core/layout/line/InlineFlowBox.h" #include "core/layout/line/RootInlineBox.h" #include "core/paint/BlockPainter.h" @@ -340,7 +341,7 @@ if (!UNLIKELY(lineLayoutItem().hasFlippedBlocksWritingMode())) return LayoutPoint(point.x(), point.y()); - LayoutBlockFlow& block = root().block(); + LineLayoutBlockFlow block = root().block(); if (block.style()->isHorizontalWritingMode()) return LayoutPoint(point.x(), block.size().height() - size.height() - point.y());
diff --git a/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp b/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp index c0c4c09..2c098f81 100644 --- a/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp +++ b/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp
@@ -30,6 +30,7 @@ #include "core/layout/LayoutRubyRun.h" #include "core/layout/LayoutRubyText.h" #include "core/layout/LayoutView.h" +#include "core/layout/api/LineLayoutBlockFlow.h" #include "core/layout/api/LineLayoutBox.h" #include "core/layout/api/LineLayoutInline.h" #include "core/layout/api/LineLayoutListMarker.h"
diff --git a/third_party/WebKit/Source/core/layout/line/RootInlineBox.cpp b/third_party/WebKit/Source/core/layout/line/RootInlineBox.cpp index d39b890f..4f369da 100644 --- a/third_party/WebKit/Source/core/layout/line/RootInlineBox.cpp +++ b/third_party/WebKit/Source/core/layout/line/RootInlineBox.cpp
@@ -26,6 +26,7 @@ #include "core/layout/LayoutInline.h" #include "core/layout/LayoutView.h" #include "core/layout/VerticalPositionCache.h" +#include "core/layout/api/LineLayoutBlockFlow.h" #include "core/layout/api/LineLayoutItem.h" #include "core/layout/line/EllipsisBox.h" #include "core/layout/line/GlyphOverflow.h" @@ -403,9 +404,9 @@ return !block().style()->isFlippedBlocksWritingMode() ? std::max(lineTop(), selectionTop()) : std::min(lineBottom(), selectionBottom()); } -LayoutBlockFlow& RootInlineBox::block() const +LineLayoutBlockFlow RootInlineBox::block() const { - return toLayoutBlockFlow(layoutObject()); + return LineLayoutBlockFlow(lineLayoutItem()); } static bool isEditableLeaf(InlineBox* leaf) @@ -547,7 +548,7 @@ if (box->lineLayoutItem().isAtomicInlineLevel()) { ascent = box->baselinePosition(baselineType()); - descent = box->lineHeight() - ascent; + descent = roundToInt(box->lineHeight() - ascent); // Replaced elements always affect both the ascent and descent. affectsAscent = true;
diff --git a/third_party/WebKit/Source/core/layout/line/RootInlineBox.h b/third_party/WebKit/Source/core/layout/line/RootInlineBox.h index 77a8982..9fc46278 100644 --- a/third_party/WebKit/Source/core/layout/line/RootInlineBox.h +++ b/third_party/WebKit/Source/core/layout/line/RootInlineBox.h
@@ -31,6 +31,7 @@ class EllipsisBox; class HitTestResult; class LayoutBlockFlow; +class LineLayoutBlockFlow; struct BidiStatus; struct GapRects; @@ -116,7 +117,7 @@ InlineBox* firstSelectedBox() const; InlineBox* lastSelectedBox() const; - LayoutBlockFlow& block() const; + LineLayoutBlockFlow block() const; InlineBox* closestLeafChildForPoint(const LayoutPoint&, bool onlyEditableLeaves); InlineBox* closestLeafChildForLogicalLeftPosition(LayoutUnit, bool onlyEditableLeaves = false);
diff --git a/third_party/WebKit/Source/core/layout/svg/line/SVGRootInlineBox.cpp b/third_party/WebKit/Source/core/layout/svg/line/SVGRootInlineBox.cpp index 5a4882f..31d257f 100644 --- a/third_party/WebKit/Source/core/layout/svg/line/SVGRootInlineBox.cpp +++ b/third_party/WebKit/Source/core/layout/svg/line/SVGRootInlineBox.cpp
@@ -23,6 +23,8 @@ #include "core/layout/svg/line/SVGRootInlineBox.h" +#include "core/layout/api/LineLayoutAPIShim.h" +#include "core/layout/api/LineLayoutBlockFlow.h" #include "core/layout/api/LineLayoutSVGInlineText.h" #include "core/layout/svg/LayoutSVGText.h" #include "core/layout/svg/line/SVGInlineFlowBox.h" @@ -46,7 +48,7 @@ void SVGRootInlineBox::computePerCharacterLayoutInformation() { - LayoutSVGText& textRoot = toLayoutSVGText(block()); + LayoutSVGText& textRoot = toLayoutSVGText(*LineLayoutAPIShim::layoutObjectFrom(block())); Vector<SVGTextLayoutAttributes*>& layoutAttributes = textRoot.layoutAttributes(); if (layoutAttributes.isEmpty()) @@ -103,7 +105,7 @@ void SVGRootInlineBox::layoutRootBox(const LayoutRect& childRect) { - LayoutBlockFlow& parentBlock = block(); + LineLayoutBlockFlow parentBlock = block(); // Finally, assign the root block position, now that all content is laid out. LayoutRect boundingRect = childRect;
diff --git a/third_party/WebKit/Source/core/loader/DocumentLoader.cpp b/third_party/WebKit/Source/core/loader/DocumentLoader.cpp index 29ba34b..ab016f4d 100644 --- a/third_party/WebKit/Source/core/loader/DocumentLoader.cpp +++ b/third_party/WebKit/Source/core/loader/DocumentLoader.cpp
@@ -123,7 +123,7 @@ { visitor->trace(m_frame); visitor->trace(m_fetcher); - // TODO(sof): start tracing ResourcePtr<>s (and m_mainResource.) + visitor->trace(m_mainResource); visitor->trace(m_writer); visitor->trace(m_documentLoadTiming); visitor->trace(m_applicationCacheHost); @@ -157,9 +157,9 @@ return m_request.url(); } -ResourcePtr<Resource> DocumentLoader::startPreload(Resource::Type type, FetchRequest& request) +Resource* DocumentLoader::startPreload(Resource::Type type, FetchRequest& request) { - ResourcePtr<Resource> resource; + RefPtrWillBeRawPtr<Resource> resource = nullptr; switch (type) { case Resource::Image: resource = ImageResource::fetch(request, fetcher()); @@ -193,7 +193,7 @@ if (resource) fetcher()->preloadStarted(resource.get()); - return resource; + return resource.get(); } void DocumentLoader::didChangePerformanceTiming()
diff --git a/third_party/WebKit/Source/core/loader/DocumentLoader.h b/third_party/WebKit/Source/core/loader/DocumentLoader.h index 7d1f4820..f13f8d9 100644 --- a/third_party/WebKit/Source/core/loader/DocumentLoader.h +++ b/third_party/WebKit/Source/core/loader/DocumentLoader.h
@@ -35,7 +35,6 @@ #include "core/fetch/ClientHintsPreferences.h" #include "core/fetch/RawResource.h" #include "core/fetch/ResourceLoaderOptions.h" -#include "core/fetch/ResourcePtr.h" #include "core/fetch/SubstituteData.h" #include "core/frame/csp/ContentSecurityPolicy.h" #include "core/loader/DocumentLoadTiming.h" @@ -144,7 +143,7 @@ bool loadingMultipartContent() const; - ResourcePtr<Resource> startPreload(Resource::Type, FetchRequest&); + Resource* startPreload(Resource::Type, FetchRequest&); DECLARE_VIRTUAL_TRACE(); @@ -189,7 +188,7 @@ RawPtrWillBeMember<LocalFrame> m_frame; PersistentWillBeMember<ResourceFetcher> m_fetcher; - ResourcePtr<RawResource> m_mainResource; + RefPtrWillBeMember<RawResource> m_mainResource; RefPtrWillBeMember<DocumentWriter> m_writer;
diff --git a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp index a225253..f6afbf0d 100644 --- a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp +++ b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp
@@ -818,7 +818,7 @@ FetchRequest fetchRequest(request, m_options.initiator, resourceLoaderOptions); if (m_options.crossOriginRequestPolicy == AllowCrossOriginRequests) fetchRequest.setOriginRestriction(FetchRequest::NoOriginRestriction); - ResourcePtr<Resource> resource = RawResource::fetchSynchronously(fetchRequest, document().fetcher()); + RefPtrWillBeRawPtr<Resource> resource = RawResource::fetchSynchronously(fetchRequest, document().fetcher()); ResourceResponse response = resource ? resource->response() : ResourceResponse(); unsigned long identifier = resource ? resource->identifier() : std::numeric_limits<unsigned long>::max(); ResourceError error = resource ? resource->resourceError() : ResourceError();
diff --git a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.h b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.h index 7907c2e..b46bc61 100644 --- a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.h +++ b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.h
@@ -153,22 +153,20 @@ // this re-implementation of ResourceOwner. RawResource* resource() const { return m_resource.get(); } void clearResource() { setResource(nullptr); } - void setResource(const ResourcePtr<RawResource>& newResource) + void setResource(const PassRefPtrWillBeRawPtr<RawResource>& newResource) { if (newResource == m_resource) return; - if (ResourcePtr<RawResource> oldResource = m_resource) { - m_resource.clear(); + if (PassRefPtrWillBeRawPtr<RawResource> oldResource = m_resource.release()) oldResource->removeClient(this); - } if (newResource) { m_resource = newResource; m_resource->addClient(this); } } - ResourcePtr<RawResource> m_resource; + RefPtrWillBePersistent<RawResource> m_resource; // End of ResourceOwner re-implementation, see above. SecurityOrigin* securityOrigin() const;
diff --git a/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp b/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp index 2dd2c831..8f51fa411 100644 --- a/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp +++ b/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp
@@ -575,7 +575,7 @@ response.setURL(url); response.setSecurityInfo(securityInfo); response.setHasMajorCertificateErrors(true); - ResourcePtr<Resource> resource = new Resource(resourceRequest, Resource::Image); + RefPtrWillBeRawPtr<Resource> resource = Resource::create(resourceRequest, Resource::Image); resource->setResponse(response); fetchContext->dispatchDidLoadResourceFromMemoryCache(resource.get(), WebURLRequest::FrameTypeNone, WebURLRequest::RequestContextImage); }
diff --git a/third_party/WebKit/Source/core/loader/FrameLoader.cpp b/third_party/WebKit/Source/core/loader/FrameLoader.cpp index cf68d9d..c4784a02 100644 --- a/third_party/WebKit/Source/core/loader/FrameLoader.cpp +++ b/third_party/WebKit/Source/core/loader/FrameLoader.cpp
@@ -327,7 +327,6 @@ // inherit an aliased security context. DocumentInit init(m_frame->document()->url(), m_frame); init.withNewRegistrationContext(); - init.withoutInheritingSecurityOrigin(); stopAllLoaders(); // Don't allow any new child frames to load in this frame: attaching a new
diff --git a/third_party/WebKit/Source/core/loader/ImageLoader.cpp b/third_party/WebKit/Source/core/loader/ImageLoader.cpp index 94ba386..7266759 100644 --- a/third_party/WebKit/Source/core/loader/ImageLoader.cpp +++ b/third_party/WebKit/Source/core/loader/ImageLoader.cpp
@@ -142,7 +142,6 @@ ImageLoader::ImageLoader(Element* element) : m_element(element) - , m_image(0) , m_derefElementTimer(this, &ImageLoader::timerFired) , m_hasPendingLoadEvent(false) , m_hasPendingErrorEvent(false) @@ -180,8 +179,10 @@ willRemoveClient(*client); #endif - if (m_image) + if (m_image) { m_image->removeClient(this); + m_image = nullptr; + } #if !ENABLE(OILPAN) ASSERT(m_hasPendingLoadEvent || !loadEventSender().hasPendingEvents(this)); @@ -211,6 +212,7 @@ DEFINE_TRACE(ImageLoader) { + visitor->trace(m_image); visitor->trace(m_element); #if ENABLE(OILPAN) visitor->template registerWeakMembers<ImageLoader, &ImageLoader::clearWeakMembers>(this); @@ -310,7 +312,7 @@ AtomicString imageSourceURL = m_element->imageSourceURL(); KURL url = imageSourceToKURL(imageSourceURL); - ResourcePtr<ImageResource> newImage = 0; + RefPtrWillBeRawPtr<ImageResource> newImage = nullptr; RefPtrWillBeRawPtr<Element> protectElement(m_element.get()); if (!url.isNull()) { // Unlike raw <img>, we block mixed content inside of <picture> or <img srcset>. @@ -360,7 +362,7 @@ noImageResourceToLoad(); } - ImageResource* oldImage = m_image.get(); + RefPtrWillBeRawPtr<ImageResource> oldImage = m_image.get(); if (updateBehavior == UpdateSizeChanged && m_element->layoutObject() && m_element->layoutObject()->isImage() && newImage == oldImage) { toLayoutImage(m_element->layoutObject())->intrinsicSizeChanged(); } else {
diff --git a/third_party/WebKit/Source/core/loader/ImageLoader.h b/third_party/WebKit/Source/core/loader/ImageLoader.h index ec8c8a9e..fd3ca94 100644 --- a/third_party/WebKit/Source/core/loader/ImageLoader.h +++ b/third_party/WebKit/Source/core/loader/ImageLoader.h
@@ -26,7 +26,6 @@ #include "core/CoreExport.h" #include "core/fetch/ImageResource.h" #include "core/fetch/ImageResourceClient.h" -#include "core/fetch/ResourcePtr.h" #include "platform/heap/Handle.h" #include "wtf/HashSet.h" #include "wtf/WeakPtr.h" @@ -169,7 +168,7 @@ #endif RawPtrWillBeMember<Element> m_element; - ResourcePtr<ImageResource> m_image; + RefPtrWillBeMember<ImageResource> m_image; // FIXME: Oilpan: We might be able to remove this Persistent hack when // ImageResourceClient is traceable. GC_PLUGIN_IGNORE("http://crbug.com/383741")
diff --git a/third_party/WebKit/Source/core/loader/LinkLoader.cpp b/third_party/WebKit/Source/core/loader/LinkLoader.cpp index 7f63fe0b..eae6db5 100644 --- a/third_party/WebKit/Source/core/loader/LinkLoader.cpp +++ b/third_party/WebKit/Source/core/loader/LinkLoader.cpp
@@ -187,35 +187,35 @@ return Resource::LinkPreload; } -void LinkLoader::createLinkPreloadResourceClient(ResourcePtr<Resource> resource) +void LinkLoader::createLinkPreloadResourceClient(Resource* resource) { if (!resource) return; switch (resource->type()) { case Resource::Image: - m_linkPreloadResourceClient = LinkPreloadImageResourceClient::create(this, toImageResource(resource.get())); + m_linkPreloadResourceClient = LinkPreloadImageResourceClient::create(this, toImageResource(resource)); break; case Resource::Script: - m_linkPreloadResourceClient = LinkPreloadScriptResourceClient::create(this, toScriptResource(resource.get())); + m_linkPreloadResourceClient = LinkPreloadScriptResourceClient::create(this, toScriptResource(resource)); break; case Resource::CSSStyleSheet: - m_linkPreloadResourceClient = LinkPreloadStyleResourceClient::create(this, toCSSStyleSheetResource(resource.get())); + m_linkPreloadResourceClient = LinkPreloadStyleResourceClient::create(this, toCSSStyleSheetResource(resource)); break; case Resource::Font: - m_linkPreloadResourceClient = LinkPreloadFontResourceClient::create(this, toFontResource(resource.get())); + m_linkPreloadResourceClient = LinkPreloadFontResourceClient::create(this, toFontResource(resource)); break; case Resource::Media: case Resource::TextTrack: case Resource::Raw: case Resource::LinkPreload: - m_linkPreloadResourceClient = LinkPreloadRawResourceClient::create(this, toRawResource(resource.get())); + m_linkPreloadResourceClient = LinkPreloadRawResourceClient::create(this, toRawResource(resource)); break; default: ASSERT_NOT_REACHED(); } } -static ResourcePtr<Resource> preloadIfNeeded(const LinkRelAttribute& relAttribute, const KURL& href, Document& document, const String& as, CrossOriginAttributeValue crossOrigin, LinkCaller caller) +static Resource* preloadIfNeeded(const LinkRelAttribute& relAttribute, const KURL& href, Document& document, const String& as, CrossOriginAttributeValue crossOrigin, LinkCaller caller) { if (!document.loader() || !relAttribute.isLinkPreload()) return nullptr;
diff --git a/third_party/WebKit/Source/core/loader/LinkLoader.h b/third_party/WebKit/Source/core/loader/LinkLoader.h index a872886..8ac23b4 100644 --- a/third_party/WebKit/Source/core/loader/LinkLoader.h +++ b/third_party/WebKit/Source/core/loader/LinkLoader.h
@@ -85,7 +85,7 @@ void linkLoadTimerFired(Timer<LinkLoader>*); void linkLoadingErrorTimerFired(Timer<LinkLoader>*); - void createLinkPreloadResourceClient(ResourcePtr<Resource>); + void createLinkPreloadResourceClient(Resource*); RawPtrWillBeMember<LinkLoaderClient> m_client;
diff --git a/third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp b/third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp index aef1938..e1244a6 100644 --- a/third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp +++ b/third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp
@@ -121,7 +121,7 @@ dummyPageHolder->document(), NetworkHintsMock()); ASSERT(dummyPageHolder->document().fetcher()); - WillBeHeapListHashSet<RawPtrWillBeMember<Resource>>* preloads = dummyPageHolder->document().fetcher()->preloads(); + WillBeHeapListHashSet<RefPtrWillBeMember<Resource>>* preloads = dummyPageHolder->document().fetcher()->preloads(); if (testCase.shouldLoad) ASSERT_NE(nullptr, preloads); if (preloads) {
diff --git a/third_party/WebKit/Source/core/page/FocusController.cpp b/third_party/WebKit/Source/core/page/FocusController.cpp index 28c3f60..9f9b583 100644 --- a/third_party/WebKit/Source/core/page/FocusController.cpp +++ b/third_party/WebKit/Source/core/page/FocusController.cpp
@@ -111,12 +111,7 @@ FocusNavigationScope FocusNavigationScope::focusNavigationScopeOf(const Node& node) { - const Node* root = &node; - for (const Node* n = &node; n; n = n->parentNode()) - root = n; - // The result is not always a ShadowRoot nor a DocumentNode since - // a starting node is in an orphaned tree in composed shadow tree. - return FocusNavigationScope(&root->treeScope()); + return FocusNavigationScope(&node.treeScope()); } FocusNavigationScope FocusNavigationScope::ownedByNonFocusableFocusScopeOwner(Element& element)
diff --git a/third_party/WebKit/Source/core/paint/FramePainter.cpp b/third_party/WebKit/Source/core/paint/FramePainter.cpp index ba89543c..fe19cde 100644 --- a/third_party/WebKit/Source/core/paint/FramePainter.cpp +++ b/third_party/WebKit/Source/core/paint/FramePainter.cpp
@@ -40,24 +40,24 @@ if (!shouldPaintContents && !shouldPaintScrollbars) return; - // TODO(pdr): Creating frame paint properties here will not be needed once - // settings()->rootLayerScrolls() is enabled. - // TODO(pdr): Make this conditional on the rootLayerScrolls setting. - Optional<ScopedPaintChunkProperties> scopedPaintChunkProperties; - if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { - TransformPaintPropertyNode* transform = m_frameView->scrollTranslation() ? m_frameView->scrollTranslation() : m_frameView->preTranslation(); - ClipPaintPropertyNode* clip = m_frameView->contentClip(); - if (transform || clip) { - PaintChunkProperties properties(context.paintController().currentPaintChunkProperties()); - if (transform) - properties.transform = transform; - if (clip) - properties.clip = clip; - scopedPaintChunkProperties.emplace(context.paintController(), properties); - } - } - if (shouldPaintContents) { + // TODO(pdr): Creating frame paint properties here will not be needed once + // settings()->rootLayerScrolls() is enabled. + // TODO(pdr): Make this conditional on the rootLayerScrolls setting. + Optional<ScopedPaintChunkProperties> scopedPaintChunkProperties; + if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { + TransformPaintPropertyNode* transform = m_frameView->scrollTranslation() ? m_frameView->scrollTranslation() : m_frameView->preTranslation(); + ClipPaintPropertyNode* clip = m_frameView->contentClip(); + if (transform || clip) { + PaintChunkProperties properties(context.paintController().currentPaintChunkProperties()); + if (transform) + properties.transform = transform; + if (clip) + properties.clip = clip; + scopedPaintChunkProperties.emplace(context.paintController(), properties); + } + } + TransformRecorder transformRecorder(context, *frameView().layoutView(), AffineTransform::translation(frameView().x() - frameView().scrollX(), frameView().y() - frameView().scrollY())); @@ -73,6 +73,15 @@ scrollViewDirtyRect.intersect(visibleAreaWithScrollbars); scrollViewDirtyRect.moveBy(-frameView().location()); + Optional<ScopedPaintChunkProperties> scopedPaintChunkProperties; + if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { + if (TransformPaintPropertyNode* transform = m_frameView->preTranslation()) { + PaintChunkProperties properties(context.paintController().currentPaintChunkProperties()); + properties.transform = transform; + scopedPaintChunkProperties.emplace(context.paintController(), properties); + } + } + TransformRecorder transformRecorder(context, *frameView().layoutView(), AffineTransform::translation(frameView().x(), frameView().y()));
diff --git a/third_party/WebKit/Source/core/paint/PaintLayer.cpp b/third_party/WebKit/Source/core/paint/PaintLayer.cpp index b9dff6b..895daee 100644 --- a/third_party/WebKit/Source/core/paint/PaintLayer.cpp +++ b/third_party/WebKit/Source/core/paint/PaintLayer.cpp
@@ -411,7 +411,7 @@ bool hadTransform = transform(); if (hasTransform != hadTransform) { if (hasTransform) - ensureRareData().transform = adoptPtr(new TransformationMatrix); + ensureRareData().transform = TransformationMatrix::create(); else m_rareData->transform.clear();
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerFilterInfo.h b/third_party/WebKit/Source/core/paint/PaintLayerFilterInfo.h index ebb1824..07e2021 100644 --- a/third_party/WebKit/Source/core/paint/PaintLayerFilterInfo.h +++ b/third_party/WebKit/Source/core/paint/PaintLayerFilterInfo.h
@@ -103,7 +103,7 @@ // Same as m_internalSVGReferences, except that the reference belongs to a // different document. - Vector<ResourcePtr<DocumentResource>> m_externalSVGReferences; + WillBePersistentHeapVector<RefPtrWillBeMember<DocumentResource>> m_externalSVGReferences; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/streams/CountQueuingStrategy.js b/third_party/WebKit/Source/core/streams/CountQueuingStrategy.js index 61567c8..36141b74 100644 --- a/third_party/WebKit/Source/core/streams/CountQueuingStrategy.js +++ b/third_party/WebKit/Source/core/streams/CountQueuingStrategy.js
@@ -16,6 +16,7 @@ writable: true }); } + size(chunk) { return 1; } } @@ -25,4 +26,17 @@ configurable: true, writable: true }); + + // Export a separate copy that doesn't need options objects and can't be + // interfered with. + class BuiltInCountQueuingStrategy { + constructor(highWaterMark) { + defineProperty(this, 'highWaterMark', {value: highWaterMark}); + } + + size(chunk) { return 1; } + } + + binding.createBuiltInCountQueuingStrategy = highWaterMark => + new BuiltInCountQueuingStrategy(highWaterMark); });
diff --git a/third_party/WebKit/Source/core/streams/README.md b/third_party/WebKit/Source/core/streams/README.md index 9de53e0..90b0969 100644 --- a/third_party/WebKit/Source/core/streams/README.md +++ b/third_party/WebKit/Source/core/streams/README.md
@@ -24,6 +24,9 @@ - CountQueuingStrategy.js - ReadableStream.js - ReadableStreamTempStub.js +- ReadableStreamController.h +- UnderlyingSourceBase.{cpp,h,idl} +- bindings/core/v8/ReadableStreamOperations.{cpp,h} These files are an in-progress implementation of the current streams spec, using [V8 extras][1]. They allow author construction. We hope eventually to
diff --git a/third_party/WebKit/Source/core/streams/ReadableStream.js b/third_party/WebKit/Source/core/streams/ReadableStream.js index 0e745b86..6252253 100644 --- a/third_party/WebKit/Source/core/streams/ReadableStream.js +++ b/third_party/WebKit/Source/core/streams/ReadableStream.js
@@ -27,6 +27,9 @@ const readableStreamReaderReadRequests = v8.createPrivateSymbol('[[readRequests]]'); + const createWithExternalControllerSentinel = + v8.createPrivateSymbol('flag for UA-created ReadableStream to pass'); + const STATE_READABLE = 0; const STATE_CLOSED = 1; const STATE_ERRORED = 2; @@ -119,11 +122,24 @@ this[readableStreamStrategySize] = normalizedStrategy.size; this[readableStreamStrategyHWM] = normalizedStrategy.highWaterMark; - const controller = new ReadableStreamController(this); + // Avoid allocating the controller if the stream is going to be controlled + // externally (i.e. from C++) anyway. All calls to underlyingSource + // methods will disregard their controller argument in such situations + // (but see below). + + const isControlledExternally = + arguments[2] === createWithExternalControllerSentinel; + const controller = + isControlledExternally ? null : new ReadableStreamController(this); this[readableStreamController] = controller; + // We need to pass ourself to the underlyingSource start method for + // externally-controlled streams. We use the now-useless controller + // argument to do so. + const argToStart = isControlledExternally ? this : controller; + const startResult = CallOrNoop( - underlyingSource, 'start', controller, 'underlyingSource.start'); + underlyingSource, 'start', argToStart, 'underlyingSource.start'); thenPromise(Promise_resolve(startResult), () => { this[readableStreamBits] |= STARTED; @@ -330,8 +346,8 @@ v8.rejectPromise(this[readableStreamReaderClosedPromise], new TypeError(errReleasedReaderClosedPromise)); } else { - this[readableStreamReaderClosedPromise] = Promise_reject(new TypeError( - errReleasedReaderClosedPromise)); + this[readableStreamReaderClosedPromise] = + Promise_reject(new TypeError(errReleasedReaderClosedPromise)); } this[readableStreamReaderOwnerReadableStream][readableStreamReader] = @@ -771,4 +787,15 @@ binding.IsReadableStreamLocked = IsReadableStreamLocked; binding.IsReadableStreamReader = IsReadableStreamReader; binding.ReadFromReadableStreamReader = ReadFromReadableStreamReader; + + binding.CloseReadableStream = CloseReadableStream; + binding.GetReadableStreamDesiredSize = GetReadableStreamDesiredSize; + binding.EnqueueInReadableStream = EnqueueInReadableStream; + binding.ErrorReadableStream = ErrorReadableStream; + + binding.createReadableStreamWithExternalController = + (underlyingSource, strategy) => { + return new ReadableStream( + underlyingSource, strategy, createWithExternalControllerSentinel); + }; });
diff --git a/third_party/WebKit/Source/core/streams/ReadableStreamController.h b/third_party/WebKit/Source/core/streams/ReadableStreamController.h new file mode 100644 index 0000000..435db846 --- /dev/null +++ b/third_party/WebKit/Source/core/streams/ReadableStreamController.h
@@ -0,0 +1,121 @@ +// Copyright 2016 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 ReadableStreamController_h +#define ReadableStreamController_h + +#include "bindings/core/v8/ScopedPersistent.h" +#include "bindings/core/v8/ScriptValue.h" +#include "bindings/core/v8/ToV8.h" +#include "bindings/core/v8/V8ScriptRunner.h" +#include "core/CoreExport.h" +#include "platform/heap/Handle.h" +#include "wtf/RefPtr.h" +#include <v8.h> + +namespace blink { + +class CORE_EXPORT ReadableStreamController final : public GarbageCollectedFinalized<ReadableStreamController> { +public: + DEFINE_INLINE_TRACE() {} + + explicit ReadableStreamController(ScriptValue stream) + : m_scriptState(stream.scriptState()) + , m_stream(stream.isolate(), stream.v8Value()) + { + m_stream.setWeak(&m_stream, ReadableStreamController::streamWeakCallback); + } + + // Users of the ReadableStreamController can call this to note that the stream has been canceled and thus they + // don't anticipate using the ReadableStreamController anymore. (close/desiredSize/enqueue/error will become no-ops + // afterward.) + void noteHasBeenCanceled() + { + m_stream.clear(); + } + + bool isActive() const + { + return !m_stream.isEmpty(); + } + + void close() + { + ScriptState* scriptState = m_scriptState.get(); + ScriptState::Scope scope(scriptState); // will assert context is valid; do not call this method when the context is invalidated + v8::Isolate* isolate = scriptState->isolate(); + + v8::Local<v8::Value> stream = m_stream.newLocal(isolate); + if (stream.IsEmpty()) + return; + + v8::Local<v8::Value> args[] = { stream }; + V8ScriptRunner::callExtraOrCrash(scriptState, "CloseReadableStream", args); + + m_stream.clear(); + } + + double desiredSize() const + { + ScriptState* scriptState = m_scriptState.get(); + ScriptState::Scope scope(scriptState); // will assert context is valid; do not call this method when the context is invalidated + v8::Isolate* isolate = scriptState->isolate(); + + v8::Local<v8::Value> stream = m_stream.newLocal(isolate); + if (stream.IsEmpty()) + return 0; + + v8::Local<v8::Value> args[] = { stream }; + v8::Local<v8::Value> result = V8ScriptRunner::callExtraOrCrash(scriptState, "GetReadableStreamDesiredSize", args); + + return result.As<v8::Number>()->Value(); + } + + template <typename ChunkType> + void enqueue(ChunkType chunk) const + { + ScriptState* scriptState = m_scriptState.get(); + ScriptState::Scope scope(scriptState); // will assert context is valid; do not call this method when the context is invalidated + v8::Isolate* isolate = scriptState->isolate(); + + v8::Local<v8::Value> stream = m_stream.newLocal(isolate); + if (stream.IsEmpty()) + return; + + v8::Local<v8::Value> jsChunk = toV8(chunk, scriptState); + v8::Local<v8::Value> args[] = { stream, jsChunk }; + V8ScriptRunner::callExtraOrCrash(scriptState, "EnqueueInReadableStream", args); + } + + template <typename ErrorType> + void error(ErrorType error) + { + ScriptState* scriptState = m_scriptState.get(); + ScriptState::Scope scope(scriptState); // will assert context is valid; do not call this method when the context is invalidated + v8::Isolate* isolate = scriptState->isolate(); + + v8::Local<v8::Value> stream = m_stream.newLocal(isolate); + if (stream.IsEmpty()) + return; + + v8::Local<v8::Value> jsError = toV8(error, scriptState); + v8::Local<v8::Value> args[] = { stream, jsError }; + V8ScriptRunner::callExtraOrCrash(scriptState, "ErrorReadableStream", args); + + m_stream.clear(); + } + +private: + static void streamWeakCallback(const v8::WeakCallbackInfo<ScopedPersistent<v8::Value>>& weakInfo) + { + weakInfo.GetParameter()->clear(); + } + + RefPtr<ScriptState> m_scriptState; + ScopedPersistent<v8::Value> m_stream; +}; + +} // namespace blink + +#endif // ReadableStreamController_h
diff --git a/third_party/WebKit/Source/core/streams/UnderlyingSourceBase.cpp b/third_party/WebKit/Source/core/streams/UnderlyingSourceBase.cpp new file mode 100644 index 0000000..150d8ab --- /dev/null +++ b/third_party/WebKit/Source/core/streams/UnderlyingSourceBase.cpp
@@ -0,0 +1,70 @@ +// Copyright 2016 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 "core/streams/UnderlyingSourceBase.h" + +#include "bindings/core/v8/ScriptPromise.h" +#include "bindings/core/v8/ScriptState.h" +#include "bindings/core/v8/ScriptValue.h" +#include "core/streams/ReadableStreamController.h" +#include <v8.h> + +namespace blink { + +ScriptPromise UnderlyingSourceBase::startWrapper(ScriptState* scriptState, ScriptValue stream) +{ + // Cannot call start twice (e.g., cannot use the same UnderlyingSourceBase to construct multiple streams) + ASSERT(!m_controller); + + // In ReadableStream.js, we special-case externally-controlled streams by having them pass themselves to start + // as the first argument. This allows us to create a ReadableStreamController. + + m_controller = new ReadableStreamController(stream); + + return start(scriptState); +} + +ScriptPromise UnderlyingSourceBase::start(ScriptState* scriptState) +{ + return ScriptPromise::cast(scriptState, v8::Undefined(scriptState->isolate())); +} + +ScriptPromise UnderlyingSourceBase::pull(ScriptState* scriptState) +{ + return ScriptPromise::cast(scriptState, v8::Undefined(scriptState->isolate())); +} + +ScriptPromise UnderlyingSourceBase::cancelWrapper(ScriptState* scriptState, ScriptValue reason) +{ + m_controller->noteHasBeenCanceled(); + return cancel(scriptState, reason); +} + +ScriptPromise UnderlyingSourceBase::cancel(ScriptState* scriptState, ScriptValue reason) +{ + return ScriptPromise::cast(scriptState, v8::Undefined(scriptState->isolate())); +} + +bool UnderlyingSourceBase::hasPendingActivity() const +{ + // This will return false within a finite time period _assuming_ that + // consumers use the controller to close or error the stream. + // Browser-created readable streams should always close or error within a + // finite time period, due to timeouts etc. + return m_controller && m_controller->isActive(); +} + +void UnderlyingSourceBase::stop() +{ + m_controller->noteHasBeenCanceled(); + m_controller.clear(); +} + +DEFINE_TRACE(UnderlyingSourceBase) +{ + ActiveDOMObject::trace(visitor); + visitor->trace(m_controller); +} + +} // namespace blink
diff --git a/third_party/WebKit/Source/core/streams/UnderlyingSourceBase.h b/third_party/WebKit/Source/core/streams/UnderlyingSourceBase.h new file mode 100644 index 0000000..9700697 --- /dev/null +++ b/third_party/WebKit/Source/core/streams/UnderlyingSourceBase.h
@@ -0,0 +1,56 @@ +// Copyright 2016 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 UnderlyingSourceBase_h +#define UnderlyingSourceBase_h + +#include "bindings/core/v8/ScriptPromise.h" +#include "bindings/core/v8/ScriptState.h" +#include "bindings/core/v8/ScriptValue.h" +#include "bindings/core/v8/ScriptWrappable.h" +#include "core/CoreExport.h" +#include "core/dom/ActiveDOMObject.h" +#include "platform/heap/GarbageCollected.h" +#include "platform/heap/Handle.h" + +namespace blink { + +class ReadableStreamController; + +class CORE_EXPORT UnderlyingSourceBase : public GarbageCollectedFinalized<UnderlyingSourceBase>, public ScriptWrappable, public ActiveDOMObject { + DEFINE_WRAPPERTYPEINFO(); + USING_GARBAGE_COLLECTED_MIXIN(UnderlyingSourceBase); + +public: + DECLARE_VIRTUAL_TRACE(); + virtual ~UnderlyingSourceBase() {} + + ScriptPromise startWrapper(ScriptState*, ScriptValue stream); + virtual ScriptPromise start(ScriptState*); + + virtual ScriptPromise pull(ScriptState*); + + ScriptPromise cancelWrapper(ScriptState*, ScriptValue reason); + virtual ScriptPromise cancel(ScriptState*, ScriptValue reason); + + // ActiveDOMObject + bool hasPendingActivity() const override; + void stop() override; + +protected: + explicit UnderlyingSourceBase(ScriptState* scriptState) + : ActiveDOMObject(scriptState->executionContext()) + { + this->suspendIfNeeded(); + } + + ReadableStreamController* controller() const { return m_controller; } + +private: + Member<ReadableStreamController> m_controller; +}; + +} // namespace blink + +#endif // UnderlyingSourceBase_h
diff --git a/third_party/WebKit/Source/core/streams/UnderlyingSourceBase.idl b/third_party/WebKit/Source/core/streams/UnderlyingSourceBase.idl new file mode 100644 index 0000000..f0ec1b7 --- /dev/null +++ b/third_party/WebKit/Source/core/streams/UnderlyingSourceBase.idl
@@ -0,0 +1,15 @@ +// Copyright 2016 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. + +// This is not a spec interface. Instead, it is used to generate bindings +// so that Blink code which wishes to create a stream can derive from +// UnderlyingSourceBase, and a JavaScript object can then be generated +// automatically for use in initializing a ReadableStream. + +[NoInterfaceObject, GarbageCollected, ActiveDOMObject] +interface UnderlyingSourceBase { + [CallWith=ScriptState, ImplementedAs=startWrapper] Promise<void> start(any stream); + [CallWith=ScriptState] Promise<void> pull(); + [CallWith=ScriptState, ImplementedAs=cancelWrapper] Promise<void> cancel([Default=Undefined] optional any reason); +};
diff --git a/third_party/WebKit/Source/core/style/StyleFetchedImage.cpp b/third_party/WebKit/Source/core/style/StyleFetchedImage.cpp index 6f69be2c..70d0093 100644 --- a/third_party/WebKit/Source/core/style/StyleFetchedImage.cpp +++ b/third_party/WebKit/Source/core/style/StyleFetchedImage.cpp
@@ -53,6 +53,7 @@ void StyleFetchedImage::dispose() { m_image->removeClient(this); + m_image = nullptr; } WrappedImagePtr StyleFetchedImage::data() const @@ -144,6 +145,7 @@ DEFINE_TRACE(StyleFetchedImage) { + visitor->trace(m_image); visitor->trace(m_document); StyleImage::trace(visitor); }
diff --git a/third_party/WebKit/Source/core/style/StyleFetchedImage.h b/third_party/WebKit/Source/core/style/StyleFetchedImage.h index 9f9fdd4c..7150261 100644 --- a/third_party/WebKit/Source/core/style/StyleFetchedImage.h +++ b/third_party/WebKit/Source/core/style/StyleFetchedImage.h
@@ -25,7 +25,6 @@ #define StyleFetchedImage_h #include "core/fetch/ImageResourceClient.h" -#include "core/fetch/ResourcePtr.h" #include "core/style/StyleImage.h" namespace blink { @@ -70,7 +69,7 @@ void dispose(); - ResourcePtr<ImageResource> m_image; + RefPtrWillBeMember<ImageResource> m_image; RawPtrWillBeMember<Document> m_document; const KURL m_url; };
diff --git a/third_party/WebKit/Source/core/style/StyleFetchedImageSet.cpp b/third_party/WebKit/Source/core/style/StyleFetchedImageSet.cpp index bab09b1c..c02f13b3 100644 --- a/third_party/WebKit/Source/core/style/StyleFetchedImageSet.cpp +++ b/third_party/WebKit/Source/core/style/StyleFetchedImageSet.cpp
@@ -55,6 +55,7 @@ void StyleFetchedImageSet::dispose() { m_bestFitImage->removeClient(this); + m_bestFitImage = nullptr; } WrappedImagePtr StyleFetchedImageSet::data() const @@ -140,6 +141,7 @@ DEFINE_TRACE(StyleFetchedImageSet) { + visitor->trace(m_bestFitImage); visitor->trace(m_imageSetValue); StyleImage::trace(visitor); }
diff --git a/third_party/WebKit/Source/core/style/StyleFetchedImageSet.h b/third_party/WebKit/Source/core/style/StyleFetchedImageSet.h index 640aea5..a11d0013 100644 --- a/third_party/WebKit/Source/core/style/StyleFetchedImageSet.h +++ b/third_party/WebKit/Source/core/style/StyleFetchedImageSet.h
@@ -27,7 +27,6 @@ #define StyleFetchedImageSet_h #include "core/fetch/ImageResourceClient.h" -#include "core/fetch/ResourcePtr.h" #include "core/style/StyleImage.h" #include "platform/geometry/LayoutSize.h" @@ -83,7 +82,7 @@ String debugName() const override { return "StyleFetchedImageSet"; } - ResourcePtr<ImageResource> m_bestFitImage; + RefPtrWillBeMember<ImageResource> m_bestFitImage; float m_imageScaleFactor; RawPtrWillBeMember<CSSImageSetValue> m_imageSetValue; // Not retained; it owns us.
diff --git a/third_party/WebKit/Source/core/svg/SVGFEImageElement.cpp b/third_party/WebKit/Source/core/svg/SVGFEImageElement.cpp index 79a884b1..8c33782 100644 --- a/third_party/WebKit/Source/core/svg/SVGFEImageElement.cpp +++ b/third_party/WebKit/Source/core/svg/SVGFEImageElement.cpp
@@ -46,7 +46,7 @@ #if ENABLE(OILPAN) if (m_cachedImage) { m_cachedImage->removeClient(this); - m_cachedImage = 0; + m_cachedImage = nullptr; } #else clearResourceReferences(); @@ -56,6 +56,7 @@ DEFINE_TRACE(SVGFEImageElement) { visitor->trace(m_preserveAspectRatio); + visitor->trace(m_cachedImage); SVGFilterPrimitiveStandardAttributes::trace(visitor); SVGURIReference::trace(visitor); } @@ -72,7 +73,7 @@ { if (m_cachedImage) { m_cachedImage->removeClient(this); - m_cachedImage = 0; + m_cachedImage = nullptr; } removeAllOutgoingReferences();
diff --git a/third_party/WebKit/Source/core/svg/SVGFEImageElement.h b/third_party/WebKit/Source/core/svg/SVGFEImageElement.h index fe54161..4df7845 100644 --- a/third_party/WebKit/Source/core/svg/SVGFEImageElement.h +++ b/third_party/WebKit/Source/core/svg/SVGFEImageElement.h
@@ -24,7 +24,6 @@ #include "core/SVGNames.h" #include "core/fetch/ImageResource.h" #include "core/fetch/ImageResourceClient.h" -#include "core/fetch/ResourcePtr.h" #include "core/svg/SVGAnimatedPreserveAspectRatio.h" #include "core/svg/SVGFilterPrimitiveStandardAttributes.h" #include "core/svg/SVGURIReference.h" @@ -67,7 +66,7 @@ RefPtrWillBeMember<SVGAnimatedPreserveAspectRatio> m_preserveAspectRatio; - ResourcePtr<ImageResource> m_cachedImage; + RefPtrWillBeMember<ImageResource> m_cachedImage; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/svg/SVGStaticStringList.h b/third_party/WebKit/Source/core/svg/SVGStaticStringList.h index 430f4ce..6abf71d4 100644 --- a/third_party/WebKit/Source/core/svg/SVGStaticStringList.h +++ b/third_party/WebKit/Source/core/svg/SVGStaticStringList.h
@@ -59,7 +59,7 @@ void animationEnded() override; bool needsSynchronizeAttribute() override; - SVGParsingError setBaseValueAsString(const String&); + SVGParsingError setBaseValueAsString(const String&) override; SVGStringList* value() { return m_value.get(); } SVGStringListTearOff* tearOff();
diff --git a/third_party/WebKit/Source/core/svg/SVGUseElement.cpp b/third_party/WebKit/Source/core/svg/SVGUseElement.cpp index 01ac2abe..4e57252 100644 --- a/third_party/WebKit/Source/core/svg/SVGUseElement.cpp +++ b/third_party/WebKit/Source/core/svg/SVGUseElement.cpp
@@ -66,6 +66,10 @@ addToPropertyMap(m_y); addToPropertyMap(m_width); addToPropertyMap(m_height); + +#if ENABLE(OILPAN) + ThreadState::current()->registerPreFinalizer(this); +#endif } PassRefPtrWillBeRawPtr<SVGUseElement> SVGUseElement::create(Document& document) @@ -78,14 +82,19 @@ SVGUseElement::~SVGUseElement() { - setDocumentResource(0); #if !ENABLE(OILPAN) clearShadowTree(); cancelShadowTreeRecreation(); svgUseLoadEventSender().cancelEvent(this); + dispose(); #endif } +void SVGUseElement::dispose() +{ + setDocumentResource(nullptr); +} + DEFINE_TRACE(SVGUseElement) { visitor->trace(m_x); @@ -93,6 +102,7 @@ visitor->trace(m_width); visitor->trace(m_height); visitor->trace(m_targetElementInstance); + visitor->trace(m_resource); SVGGraphicsElement::trace(visitor); SVGURIReference::trace(visitor); } @@ -233,7 +243,7 @@ setDocumentResource(DocumentResource::fetchSVGDocument(request, document().fetcher())); } } else { - setDocumentResource(0); + setDocumentResource(nullptr); } invalidateShadowTree(); @@ -809,7 +819,7 @@ return false; } -void SVGUseElement::setDocumentResource(ResourcePtr<DocumentResource> resource) +void SVGUseElement::setDocumentResource(PassRefPtrWillBeRawPtr<DocumentResource> resource) { if (m_resource == resource) return;
diff --git a/third_party/WebKit/Source/core/svg/SVGUseElement.h b/third_party/WebKit/Source/core/svg/SVGUseElement.h index cb7702f..0dacc19 100644 --- a/third_party/WebKit/Source/core/svg/SVGUseElement.h +++ b/third_party/WebKit/Source/core/svg/SVGUseElement.h
@@ -39,6 +39,7 @@ DEFINE_WRAPPERTYPEINFO(); WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(SVGUseElement); + WILL_BE_USING_PRE_FINALIZER(SVGUseElement, dispose); public: static PassRefPtrWillBeRawPtr<SVGUseElement> create(Document&); ~SVGUseElement() override; @@ -64,6 +65,8 @@ private: explicit SVGUseElement(Document&); + void dispose(); + FloatRect getBBox() override; bool isPresentationAttribute(const QualifiedName&) const override; @@ -104,7 +107,7 @@ void notifyFinished(Resource*) override; String debugName() const override { return "SVGUseElement"; } TreeScope* referencedScope() const; - void setDocumentResource(ResourcePtr<DocumentResource>); + void setDocumentResource(PassRefPtrWillBeRawPtr<DocumentResource>); RefPtrWillBeMember<SVGAnimatedLength> m_x; RefPtrWillBeMember<SVGAnimatedLength> m_y; @@ -114,7 +117,7 @@ bool m_haveFiredLoadEvent; bool m_needsShadowTreeRecreation; RefPtrWillBeMember<SVGElement> m_targetElementInstance; - ResourcePtr<DocumentResource> m_resource; + RefPtrWillBeMember<DocumentResource> m_resource; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/testing/Internals.cpp b/third_party/WebKit/Source/core/testing/Internals.cpp index d60efc7..f36130b 100644 --- a/third_party/WebKit/Source/core/testing/Internals.cpp +++ b/third_party/WebKit/Source/core/testing/Internals.cpp
@@ -196,7 +196,7 @@ if (node->isDocumentNode()) { // This can be removed after root layer scrolling is enabled. if (FrameView* frameView = toDocument(node)->view()) - return frameView->scrollableArea(); + return frameView->layoutViewportScrollableArea(); } LayoutObject* layoutObject = node->layoutObject();
diff --git a/third_party/WebKit/Source/core/xml/XSLImportRule.cpp b/third_party/WebKit/Source/core/xml/XSLImportRule.cpp index b45755fc..f3e47ea5 100644 --- a/third_party/WebKit/Source/core/xml/XSLImportRule.cpp +++ b/third_party/WebKit/Source/core/xml/XSLImportRule.cpp
@@ -100,7 +100,7 @@ ResourceLoaderOptions fetchOptions(ResourceFetcher::defaultResourceOptions()); FetchRequest request(ResourceRequest(ownerDocument->completeURL(absHref)), FetchInitiatorTypeNames::xml, fetchOptions); request.setOriginRestriction(FetchRequest::RestrictToSameOrigin); - ResourcePtr<XSLStyleSheetResource> resource = XSLStyleSheetResource::fetchSynchronously(request, ownerDocument->fetcher()); + RefPtrWillBeRawPtr<XSLStyleSheetResource> resource = XSLStyleSheetResource::fetchSynchronously(request, ownerDocument->fetcher()); if (!resource || !resource->sheet()) return;
diff --git a/third_party/WebKit/Source/core/xml/XSLImportRule.h b/third_party/WebKit/Source/core/xml/XSLImportRule.h index e9f70fed..c023f78c 100644 --- a/third_party/WebKit/Source/core/xml/XSLImportRule.h +++ b/third_party/WebKit/Source/core/xml/XSLImportRule.h
@@ -23,7 +23,6 @@ #ifndef XSLImportRule_h #define XSLImportRule_h -#include "core/fetch/ResourcePtr.h" #include "core/xml/XSLStyleSheet.h" #include "platform/RuntimeEnabledFeatures.h" #include "wtf/PassOwnPtr.h"
diff --git a/third_party/WebKit/Source/core/xml/XSLTProcessorLibxslt.cpp b/third_party/WebKit/Source/core/xml/XSLTProcessorLibxslt.cpp index c973b57..62f3115 100644 --- a/third_party/WebKit/Source/core/xml/XSLTProcessorLibxslt.cpp +++ b/third_party/WebKit/Source/core/xml/XSLTProcessorLibxslt.cpp
@@ -103,7 +103,7 @@ ResourceLoaderOptions fetchOptions(ResourceFetcher::defaultResourceOptions()); FetchRequest request(ResourceRequest(url), FetchInitiatorTypeNames::xml, fetchOptions); request.setOriginRestriction(FetchRequest::RestrictToSameOrigin); - ResourcePtr<Resource> resource = RawResource::fetchSynchronously(request, globalResourceFetcher); + RefPtrWillBeRawPtr<Resource> resource = RawResource::fetchSynchronously(request, globalResourceFetcher); if (!resource || !globalProcessor) return nullptr;
diff --git a/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.cpp b/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.cpp index 49193da4..84c25a9 100644 --- a/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.cpp +++ b/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.cpp
@@ -416,6 +416,10 @@ void XMLDocumentParser::detach() { + if (m_pendingScript) { + m_pendingScript->removeClient(this); + m_pendingScript = nullptr; + } clearCurrentNodeStack(); ScriptableDocumentParser::detach(); } @@ -486,7 +490,7 @@ bool wasCanceled = m_pendingScript->wasCanceled(); m_pendingScript->removeClient(this); - m_pendingScript = 0; + m_pendingScript = nullptr; RefPtrWillBeRawPtr<Element> e = m_scriptElement; m_scriptElement = nullptr; @@ -673,7 +677,7 @@ XMLDocumentParserScope scope(0); // FIXME: We should restore the original global error handler as well. FetchRequest request(ResourceRequest(url), FetchInitiatorTypeNames::xml, ResourceFetcher::defaultResourceOptions()); - ResourcePtr<Resource> resource = RawResource::fetchSynchronously(request, document->fetcher()); + RefPtrWillBeRawPtr<Resource> resource = RawResource::fetchSynchronously(request, document->fetcher()); if (resource && !resource->errorOccurred()) { data = resource->resourceBuffer(); finalURL = resource->response().url(); @@ -802,7 +806,6 @@ , m_requestingScript(false) , m_finishCalled(false) , m_xmlErrors(&document) - , m_pendingScript(0) , m_scriptStartPosition(TextPosition::belowRangePosition()) , m_parsingFragment(false) { @@ -826,7 +829,6 @@ , m_requestingScript(false) , m_finishCalled(false) , m_xmlErrors(&fragment->document()) - , m_pendingScript(0) , m_scriptStartPosition(TextPosition::belowRangePosition()) , m_parsingFragment(true) { @@ -873,15 +875,12 @@ XMLDocumentParser::~XMLDocumentParser() { + ASSERT(!m_pendingScript); #if !ENABLE(OILPAN) // The XMLDocumentParser will always be detached before being destroyed. ASSERT(m_currentNodeStack.isEmpty()); ASSERT(!m_currentNode); #endif - - // FIXME: m_pendingScript handling should be moved into XMLDocumentParser.cpp! - if (m_pendingScript) - m_pendingScript->removeClient(this); } DEFINE_TRACE(XMLDocumentParser) @@ -892,6 +891,7 @@ #endif visitor->trace(m_leafTextNode); visitor->trace(m_xmlErrors); + visitor->trace(m_pendingScript); visitor->trace(m_scriptElement); ScriptableDocumentParser::trace(visitor); }
diff --git a/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.h b/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.h index b35376b3..8eb344d 100644 --- a/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.h +++ b/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.h
@@ -28,7 +28,6 @@ #include "core/dom/ParserContentPolicy.h" #include "core/dom/ScriptableDocumentParser.h" #include "core/fetch/ResourceClient.h" -#include "core/fetch/ResourcePtr.h" #include "core/fetch/ScriptResource.h" #include "core/xml/parser/XMLErrors.h" #include "platform/heap/Handle.h" @@ -185,7 +184,7 @@ XMLErrors m_xmlErrors; - ResourcePtr<ScriptResource> m_pendingScript; + RefPtrWillBeMember<ScriptResource> m_pendingScript; RefPtrWillBeMember<Element> m_scriptElement; TextPosition m_scriptStartPosition;
diff --git a/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp b/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp index 4e7161b..e240113 100644 --- a/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp +++ b/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp
@@ -1206,7 +1206,7 @@ if (!normalizedValue.isEmpty() && !isValidHTTPFieldContentRFC7230(normalizedValue)) headerValueCategory = HeaderValueInvalid; - DEFINE_STATIC_LOCAL(EnumerationHistogram, headerValueCategoryHistogram, ("Blink.XHR.setRequestHeader.HeaderValueCategoryInRFC7230", HeaderValueCategoryByRFC7230End)); + DEFINE_THREAD_SAFE_STATIC_LOCAL(EnumerationHistogram, headerValueCategoryHistogram, new EnumerationHistogram("Blink.XHR.setRequestHeader.HeaderValueCategoryInRFC7230", HeaderValueCategoryByRFC7230End)); headerValueCategoryHistogram.count(headerValueCategory); }
diff --git a/third_party/WebKit/Source/devtools/devtools.gypi b/third_party/WebKit/Source/devtools/devtools.gypi index c96d70d70..9dfe5686 100644 --- a/third_party/WebKit/Source/devtools/devtools.gypi +++ b/third_party/WebKit/Source/devtools/devtools.gypi
@@ -201,6 +201,7 @@ 'front_end/emulation/deviceModeView.css', 'front_end/emulation/mediaQueryInspector.css', 'front_end/emulation/sensors.css', + 'front_end/emulation/AdvancedApp.js', 'front_end/emulation/DeviceModeModel.js', 'front_end/emulation/DeviceModeToolbar.js', 'front_end/emulation/DeviceModeView.js', @@ -292,7 +293,6 @@ 'front_end/main/remoteDebuggingTerminatedScreen.css', 'front_end/main/renderingOptions.css', 'front_end/main/targetCrashedScreen.css', - 'front_end/main/AdvancedApp.js', 'front_end/main/Connections.js', 'front_end/main/FrontendWebSocketAPI.js', 'front_end/main/Main.js',
diff --git a/third_party/WebKit/Source/devtools/front_end/common/ModuleExtensionInterfaces.js b/third_party/WebKit/Source/devtools/front_end/common/ModuleExtensionInterfaces.js index c1e5276..d9d614b 100644 --- a/third_party/WebKit/Source/devtools/front_end/common/ModuleExtensionInterfaces.js +++ b/third_party/WebKit/Source/devtools/front_end/common/ModuleExtensionInterfaces.js
@@ -96,9 +96,8 @@ WebInspector.App.prototype = { /** * @param {!Document} document - * @param {function()} callback */ - presentUI: function(document, callback) { } + presentUI: function(document) { } } /**
diff --git a/third_party/WebKit/Source/devtools/front_end/components/Drawer.js b/third_party/WebKit/Source/devtools/front_end/components/Drawer.js index 7d6fad3..6058785 100644 --- a/third_party/WebKit/Source/devtools/front_end/components/Drawer.js +++ b/third_party/WebKit/Source/devtools/front_end/components/Drawer.js
@@ -68,6 +68,7 @@ showView: function(id, immediate) { this._innerShow(immediate); + WebInspector.userMetrics.drawerShown(id); return this._extensibleTabbedPaneController.showTab(id); },
diff --git a/third_party/WebKit/Source/devtools/front_end/components/objectValue.css b/third_party/WebKit/Source/devtools/front_end/components/objectValue.css index 671e1da..accda52 100644 --- a/third_party/WebKit/Source/devtools/front_end/components/objectValue.css +++ b/third_party/WebKit/Source/devtools/front_end/components/objectValue.css
@@ -60,7 +60,7 @@ .object-value-regexp, .object-value-symbol { color: rgb(196, 26, 22); - white-space: pre; + white-space: pre-wrap; unicode-bidi: -webkit-isolate; }
diff --git a/third_party/WebKit/Source/devtools/front_end/emulation/AdvancedApp.js b/third_party/WebKit/Source/devtools/front_end/emulation/AdvancedApp.js new file mode 100644 index 0000000..1b30aa8 --- /dev/null +++ b/third_party/WebKit/Source/devtools/front_end/emulation/AdvancedApp.js
@@ -0,0 +1,202 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @constructor + * @implements {WebInspector.App} + */ +WebInspector.AdvancedApp = function() +{ + WebInspector.dockController.addEventListener(WebInspector.DockController.Events.BeforeDockSideChanged, this._openToolboxWindow, this); +}; + +WebInspector.AdvancedApp.prototype = { + /** + * @override + * @param {!Document} document + */ + presentUI: function(document) + { + var rootView = new WebInspector.RootView(); + + this._rootSplitWidget = new WebInspector.SplitWidget(false, true, "InspectorView.splitViewState", 555, 300, true); + this._rootSplitWidget.show(rootView.element); + + this._rootSplitWidget.setSidebarWidget(WebInspector.inspectorView); + + this._inspectedPagePlaceholder = new WebInspector.InspectedPagePlaceholder(); + this._inspectedPagePlaceholder.addEventListener(WebInspector.InspectedPagePlaceholder.Events.Update, this._onSetInspectedPageBounds.bind(this), this); + this._deviceModeView = new WebInspector.DeviceModeWrapper(this._inspectedPagePlaceholder); + + WebInspector.dockController.addEventListener(WebInspector.DockController.Events.BeforeDockSideChanged, this._onBeforeDockSideChange, this); + WebInspector.dockController.addEventListener(WebInspector.DockController.Events.DockSideChanged, this._onDockSideChange, this); + WebInspector.dockController.addEventListener(WebInspector.DockController.Events.AfterDockSideChanged, this._onAfterDockSideChange, this); + this._onDockSideChange(); + + WebInspector.inspectorView.showInitialPanel(); + console.timeStamp("AdvancedApp.attachToBody"); + rootView.attachToDocument(document); + this._inspectedPagePlaceholder.update(); + }, + + /** + * @param {!WebInspector.Event} event + */ + _openToolboxWindow: function(event) + { + if (/** @type {string} */ (event.data.to) !== WebInspector.DockController.State.Undocked) + return; + + if (this._toolboxWindow) + return; + + var url = window.location.href.replace("inspector.html", "toolbox.html"); + this._toolboxWindow = window.open(url, undefined); + }, + + /** + * @param {!Document} toolboxDocument + */ + toolboxLoaded: function(toolboxDocument) + { + WebInspector.initializeUIUtils(toolboxDocument, WebInspector.settings.createSetting("uiTheme", "default")); + WebInspector.installComponentRootStyles(/** @type {!Element} */ (toolboxDocument.body)); + WebInspector.ContextMenu.installHandler(toolboxDocument); + WebInspector.Tooltip.installHandler(toolboxDocument); + + this._toolboxRootView = new WebInspector.RootView(); + this._toolboxRootView.attachToDocument(toolboxDocument); + + this._updateDeviceModeView(); + }, + + _updateDeviceModeView: function() + { + if (this._isDocked()) + this._rootSplitWidget.setMainWidget(this._deviceModeView); + else if (this._toolboxRootView) + this._deviceModeView.show(this._toolboxRootView.element); + }, + + /** + * @param {!WebInspector.Event} event + */ + _onBeforeDockSideChange: function(event) + { + if (/** @type {string} */ (event.data.to) === WebInspector.DockController.State.Undocked && this._toolboxRootView) { + // Hide inspectorView and force layout to mimic the undocked state. + this._rootSplitWidget.hideSidebar(); + this._inspectedPagePlaceholder.update(); + } + + this._changingDockSide = true; + }, + + /** + * @param {!WebInspector.Event=} event + */ + _onDockSideChange: function(event) + { + this._updateDeviceModeView(); + + var toDockSide = event ? /** @type {string} */ (event.data.to) : WebInspector.dockController.dockSide(); + if (toDockSide === WebInspector.DockController.State.Undocked) { + this._updateForUndocked(); + } else if (this._toolboxRootView && event && /** @type {string} */ (event.data.from) === WebInspector.DockController.State.Undocked) { + // Don't update yet for smooth transition. + this._rootSplitWidget.hideSidebar(); + } else { + this._updateForDocked(toDockSide); + } + }, + + /** + * @param {!WebInspector.Event} event + */ + _onAfterDockSideChange: function(event) + { + // We may get here on the first dock side change while loading without BeforeDockSideChange. + if (!this._changingDockSide) + return; + if (/** @type {string} */ (event.data.from) === WebInspector.DockController.State.Undocked) { + // Restore docked layout in case of smooth transition. + this._updateForDocked(/** @type {string} */ (event.data.to)); + } + this._changingDockSide = false; + this._inspectedPagePlaceholder.update(); + }, + + /** + * @param {string} dockSide + */ + _updateForDocked: function(dockSide) + { + this._rootSplitWidget.setVertical(dockSide === WebInspector.DockController.State.DockedToRight); + this._rootSplitWidget.setSecondIsSidebar(dockSide === WebInspector.DockController.State.DockedToRight || dockSide === WebInspector.DockController.State.DockedToBottom); + this._rootSplitWidget.toggleResizer(this._rootSplitWidget.resizerElement(), true); + this._rootSplitWidget.toggleResizer(WebInspector.inspectorView.topResizerElement(), dockSide === WebInspector.DockController.State.DockedToBottom); + this._rootSplitWidget.showBoth(); + }, + + _updateForUndocked: function() + { + this._rootSplitWidget.toggleResizer(this._rootSplitWidget.resizerElement(), false); + this._rootSplitWidget.toggleResizer(WebInspector.inspectorView.topResizerElement(), false); + this._rootSplitWidget.hideMain(); + }, + + _isDocked: function() + { + return WebInspector.dockController.dockSide() !== WebInspector.DockController.State.Undocked; + }, + + /** + * @param {!WebInspector.Event} event + */ + _onSetInspectedPageBounds: function(event) + { + if (this._changingDockSide) + return; + var window = this._inspectedPagePlaceholder.element.window(); + if (!window.innerWidth || !window.innerHeight) + return; + if (!this._inspectedPagePlaceholder.isShowing()) + return; + var bounds = /** @type {{x: number, y: number, width: number, height: number}} */ (event.data); + console.timeStamp("AdvancedApp.setInspectedPageBounds"); + InspectorFrontendHost.setInspectedPageBounds(bounds); + } +}; + +/** @type {!WebInspector.AdvancedApp} */ +WebInspector.AdvancedApp._appInstance; + +/** + * @return {!WebInspector.AdvancedApp} + */ +WebInspector.AdvancedApp._instance = function() +{ + if (!WebInspector.AdvancedApp._appInstance) + WebInspector.AdvancedApp._appInstance = new WebInspector.AdvancedApp(); + return WebInspector.AdvancedApp._appInstance; +}; + +/** + * @constructor + * @implements {WebInspector.AppProvider} + */ +WebInspector.AdvancedAppProvider = function() +{ +}; + +WebInspector.AdvancedAppProvider.prototype = { + /** + * @override + * @return {!WebInspector.App} + */ + createApp: function() + { + return WebInspector.AdvancedApp._instance(); + } +};
diff --git a/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeModel.js b/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeModel.js index 6ff51ae..5367ff8 100644 --- a/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeModel.js +++ b/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeModel.js
@@ -188,8 +188,6 @@ setHeightAndScaleToFit: function(height) { height = Math.max(Math.min(height, WebInspector.DeviceModeModel.MaxDeviceSize), 0); - if (height === this._preferredScaledHeight()) - height = 0; this._scaleSetting.set(this._calculateFitScale(this._widthSetting.get(), height)); this._heightSetting.set(height); }, @@ -377,7 +375,7 @@ _scaleSettingChanged: function() { - this._calculateAndEmulate(true); + this._calculateAndEmulate(false); }, _widthSettingChanged: function()
diff --git a/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeToolbar.js b/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeToolbar.js index cfce4c7..a71ce0b 100644 --- a/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeToolbar.js +++ b/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeToolbar.js
@@ -40,8 +40,9 @@ optionsToolbar.makeWrappable(true); this._fillOptionsToolbar(optionsToolbar); - WebInspector.emulatedDevicesList.addEventListener(WebInspector.EmulatedDevicesList.Events.CustomDevicesUpdated, this._deviceListChanged, this); - WebInspector.emulatedDevicesList.addEventListener(WebInspector.EmulatedDevicesList.Events.StandardDevicesUpdated, this._deviceListChanged, this); + this._emulatedDevicesList = WebInspector.EmulatedDevicesList.instance(); + this._emulatedDevicesList.addEventListener(WebInspector.EmulatedDevicesList.Events.CustomDevicesUpdated, this._deviceListChanged, this); + this._emulatedDevicesList.addEventListener(WebInspector.EmulatedDevicesList.Events.StandardDevicesUpdated, this._deviceListChanged, this); this._persistenceSetting = WebInspector.settings.createSetting("emulation.deviceModeValue", {device: "", orientation: "", mode: ""}); } @@ -304,7 +305,7 @@ */ _standardDevices: function() { - return this._filterDevices(WebInspector.emulatedDevicesList.standard()); + return this._filterDevices(this._emulatedDevicesList.standard()); }, /** @@ -312,7 +313,7 @@ */ _customDevices: function() { - return this._filterDevices(WebInspector.emulatedDevicesList.custom()); + return this._filterDevices(this._emulatedDevicesList.custom()); }, /** @@ -332,7 +333,7 @@ appendGroup.call(this, this._standardDevices()); appendGroup.call(this, this._customDevices()); contextMenu.appendSeparator(); - contextMenu.appendItem(WebInspector.UIString("Edit\u2026"), WebInspector.emulatedDevicesList.revealCustomSetting.bind(WebInspector.emulatedDevicesList), false); + contextMenu.appendItem(WebInspector.UIString("Edit\u2026"), this._emulatedDevicesList.revealCustomSetting.bind(this._emulatedDevicesList), false); /** * @param {!Array<!WebInspector.EmulatedDevice>} devices
diff --git a/third_party/WebKit/Source/devtools/front_end/emulation/DeviceOrientation.js b/third_party/WebKit/Source/devtools/front_end/emulation/DeviceOrientation.js index cb4acf1..7129266 100644 --- a/third_party/WebKit/Source/devtools/front_end/emulation/DeviceOrientation.js +++ b/third_party/WebKit/Source/devtools/front_end/emulation/DeviceOrientation.js
@@ -54,19 +54,12 @@ */ WebInspector.DeviceOrientation.parseUserInput = function(alphaString, betaString, gammaString) { - function isUserInputValid(value) - { - if (!value) - return true; - return /^[-]?[0-9]*[.]?[0-9]*$/.test(value); - } - if (!alphaString && !betaString && !gammaString) return null; - var isAlphaValid = isUserInputValid(alphaString); - var isBetaValid = isUserInputValid(betaString); - var isGammaValid = isUserInputValid(gammaString); + var isAlphaValid = WebInspector.DeviceOrientation.validator(alphaString); + var isBetaValid = WebInspector.DeviceOrientation.validator(betaString); + var isGammaValid = WebInspector.DeviceOrientation.validator(gammaString); if (!isAlphaValid && !isBetaValid && !isGammaValid) return null; @@ -77,3 +70,12 @@ return new WebInspector.DeviceOrientation(alpha, beta, gamma); } + +/** + * @param {string} value + * @return {boolean} + */ +WebInspector.DeviceOrientation.validator = function(value) +{ + return !value || /^([+-]?[\d]+(\.\d+)?|[+-]?\.\d+)$/.test(value); +}
diff --git a/third_party/WebKit/Source/devtools/front_end/emulation/DevicesSettingsTab.js b/third_party/WebKit/Source/devtools/front_end/emulation/DevicesSettingsTab.js index c126eaa..cc48893 100644 --- a/third_party/WebKit/Source/devtools/front_end/emulation/DevicesSettingsTab.js +++ b/third_party/WebKit/Source/devtools/front_end/emulation/DevicesSettingsTab.js
@@ -28,8 +28,9 @@ this._list.show(this.containerElement); this._muteUpdate = false; - WebInspector.emulatedDevicesList.addEventListener(WebInspector.EmulatedDevicesList.Events.CustomDevicesUpdated, this._devicesUpdated, this); - WebInspector.emulatedDevicesList.addEventListener(WebInspector.EmulatedDevicesList.Events.StandardDevicesUpdated, this._devicesUpdated, this); + this._emulatedDevicesList = WebInspector.EmulatedDevicesList.instance(); + this._emulatedDevicesList.addEventListener(WebInspector.EmulatedDevicesList.Events.CustomDevicesUpdated, this._devicesUpdated, this); + this._emulatedDevicesList.addEventListener(WebInspector.EmulatedDevicesList.Events.StandardDevicesUpdated, this._devicesUpdated, this); this.setDefaultFocusedElement(this._addCustomButton); } @@ -48,13 +49,13 @@ this._list.clear(); - var devices = WebInspector.emulatedDevicesList.custom().slice(); + var devices = this._emulatedDevicesList.custom().slice(); for (var i = 0; i < devices.length; ++i) this._list.appendItem(devices[i], true); this._list.appendSeparator(); - devices = WebInspector.emulatedDevicesList.standard().slice(); + devices = this._emulatedDevicesList.standard().slice(); devices.sort(WebInspector.EmulatedDevice.deviceComparator); for (var i = 0; i < devices.length; ++i) this._list.appendItem(devices[i], false); @@ -67,9 +68,9 @@ { this._muteUpdate = true; if (custom) - WebInspector.emulatedDevicesList.saveCustomDevices(); + this._emulatedDevicesList.saveCustomDevices(); else - WebInspector.emulatedDevicesList.saveStandardDevices(); + this._emulatedDevicesList.saveStandardDevices(); this._muteUpdate = false; }, @@ -81,7 +82,7 @@ device.horizontal.height = 400; device.vertical.width = 400; device.vertical.height = 700; - this._list.addNewItem(WebInspector.emulatedDevicesList.custom().length, device); + this._list.addNewItem(this._emulatedDevicesList.custom().length, device); }, /** @@ -131,7 +132,7 @@ */ removeItemRequested: function(item, index) { - WebInspector.emulatedDevicesList.removeCustomDevice(/** @type {!WebInspector.EmulatedDevice} */ (item)); + this._emulatedDevicesList.removeCustomDevice(/** @type {!WebInspector.EmulatedDevice} */ (item)); }, /** @@ -155,9 +156,9 @@ device.modes.push({title: "", orientation: WebInspector.EmulatedDevice.Horizontal, insets: new Insets(0, 0, 0, 0), images: null}); if (isNew) - WebInspector.emulatedDevicesList.addCustomDevice(device); + this._emulatedDevicesList.addCustomDevice(device); else - WebInspector.emulatedDevicesList.saveCustomDevices(); + this._emulatedDevicesList.saveCustomDevices(); this._addCustomButton.scrollIntoViewIfNeeded(); this._addCustomButton.focus(); },
diff --git a/third_party/WebKit/Source/devtools/front_end/emulation/EmulatedDevices.js b/third_party/WebKit/Source/devtools/front_end/emulation/EmulatedDevices.js index a204b33..80dfa6b 100644 --- a/third_party/WebKit/Source/devtools/front_end/emulation/EmulatedDevices.js +++ b/third_party/WebKit/Source/devtools/front_end/emulation/EmulatedDevices.js
@@ -500,5 +500,15 @@ __proto__: WebInspector.Object.prototype } -/** @type {!WebInspector.EmulatedDevicesList} */ -WebInspector.emulatedDevicesList; +/** @type {?WebInspector.EmulatedDevicesList} */ +WebInspector.EmulatedDevicesList._instance; + +/** + * @return {!WebInspector.EmulatedDevicesList} + */ +WebInspector.EmulatedDevicesList.instance = function() +{ + if (!WebInspector.EmulatedDevicesList._instance) + WebInspector.EmulatedDevicesList._instance = new WebInspector.EmulatedDevicesList(); + return /** @type {!WebInspector.EmulatedDevicesList} */ (WebInspector.EmulatedDevicesList._instance); +}
diff --git a/third_party/WebKit/Source/devtools/front_end/emulation/Geolocation.js b/third_party/WebKit/Source/devtools/front_end/emulation/Geolocation.js index dc84137..208ecdc 100644 --- a/third_party/WebKit/Source/devtools/front_end/emulation/Geolocation.js +++ b/third_party/WebKit/Source/devtools/front_end/emulation/Geolocation.js
@@ -63,18 +63,11 @@ */ WebInspector.Geolocation.parseUserInput = function(latitudeString, longitudeString, errorStatus) { - function isUserInputValid(value) - { - if (!value) - return true; - return /^[-]?[0-9]*[.]?[0-9]*$/.test(value); - } - if (!latitudeString && !longitudeString) return null; - var isLatitudeValid = isUserInputValid(latitudeString); - var isLongitudeValid = isUserInputValid(longitudeString); + var isLatitudeValid = WebInspector.Geolocation.latitudeValidator(latitudeString); + var isLongitudeValid = WebInspector.Geolocation.longitudeValidator(longitudeString); if (!isLatitudeValid && !isLongitudeValid) return null; @@ -84,3 +77,21 @@ return new WebInspector.Geolocation(latitude, longitude, errorStatus ? "PositionUnavailable" : ""); } + +/** + * @param {string} value + * @return {boolean} + */ +WebInspector.Geolocation.latitudeValidator = function(value) +{ + return !value || (/^([+-]?[\d]+(\.\d+)?|[+-]?\.\d+)$/.test(value) && value >= -90 && value <= 90); +} + +/** + * @param {string} value + * @return {boolean} + */ +WebInspector.Geolocation.longitudeValidator = function(value) +{ + return !value || (/^([+-]?[\d]+(\.\d+)?|[+-]?\.\d+)$/.test(value) && value >= -180 && value <= 180); +}
diff --git a/third_party/WebKit/Source/devtools/front_end/emulation/SensorsView.js b/third_party/WebKit/Source/devtools/front_end/emulation/SensorsView.js index d727692..fb30739 100644 --- a/third_party/WebKit/Source/devtools/front_end/emulation/SensorsView.js +++ b/third_party/WebKit/Source/devtools/front_end/emulation/SensorsView.js
@@ -81,10 +81,14 @@ var cellElement = rowElement.createChild("td"); cellElement = rowElement.createChild("td"); cellElement.createTextChild(WebInspector.UIString("Lat = ")); - this._latitudeElement = WebInspector.SettingsUI.createInput(cellElement, "geolocation-override-latitude", String(geolocation.latitude), this._applyGeolocationUserInput.bind(this), true); + this._latitudeElement = cellElement.createChild("input"); + this._latitudeElement.type = "text"; + WebInspector.bindInput(this._latitudeElement, this._applyGeolocationUserInput.bind(this), WebInspector.Geolocation.latitudeValidator, true)(String(geolocation.latitude)); cellElement.createTextChild(" , "); cellElement.createTextChild(WebInspector.UIString("Lon = ")); - this._longitudeElement = WebInspector.SettingsUI.createInput(cellElement, "geolocation-override-longitude", String(geolocation.longitude), this._applyGeolocationUserInput.bind(this), true); + this._longitudeElement = cellElement.createChild("input"); + this._longitudeElement.type = "text"; + WebInspector.bindInput(this._longitudeElement, this._applyGeolocationUserInput.bind(this), WebInspector.Geolocation.longitudeValidator, true)(String(geolocation.longitude)); rowElement = tableElement.createChild("tr"); cellElement = rowElement.createChild("td"); cellElement.colSpan = 2; @@ -100,7 +104,7 @@ _appendDeviceOrientationOverrideControl: function() { - var checkboxLabel = createCheckboxLabel(WebInspector.UIString("Emulate accelerometer")); + var checkboxLabel = createCheckboxLabel(WebInspector.UIString("Emulate device orientation")); this._overrideDeviceOrientationCheckbox = checkboxLabel.checkboxElement; this._overrideDeviceOrientationCheckbox.addEventListener("click", this._deviceOrientationOverrideCheckboxClicked.bind(this)); this.contentElement.appendChild(checkboxLabel); @@ -151,9 +155,9 @@ return; if (modificationSource != WebInspector.SensorsView.DeviceOrientationModificationSource.UserInput) { - this._alphaElement.value = deviceOrientation.alpha; - this._betaElement.value = deviceOrientation.beta; - this._gammaElement.value = deviceOrientation.gamma; + this._alphaSetter(deviceOrientation.alpha); + this._betaSetter(deviceOrientation.beta); + this._gammaSetter(deviceOrientation.gamma); } if (modificationSource != WebInspector.SensorsView.DeviceOrientationModificationSource.UserDrag) @@ -165,16 +169,17 @@ /** * @param {!Element} parentElement - * @param {string} id + * @param {!Element} input * @param {string} label - * @param {string} defaultText - * @return {!Element} + * @return {function(string)} */ - _createAxisInput: function(parentElement, id, label, defaultText) + _createAxisInput: function(parentElement, input, label) { var div = parentElement.createChild("div", "accelerometer-axis-input-container"); div.createTextChild(label); - return WebInspector.SettingsUI.createInput(div, id, defaultText, this._applyDeviceOrientationUserInput.bind(this), true); + div.appendChild(input); + input.type = "text"; + return WebInspector.bindInput(input, this._applyDeviceOrientationUserInput.bind(this), WebInspector.DeviceOrientation.validator, true); }, /** @@ -188,9 +193,17 @@ var rowElement = tableElement.createChild("tr"); var cellElement = rowElement.createChild("td", "accelerometer-inputs-cell"); - this._alphaElement = this._createAxisInput(cellElement, "device-orientation-override-alpha", "\u03B1: ", String(deviceOrientation.alpha)); - this._betaElement = this._createAxisInput(cellElement, "device-orientation-override-beta", "\u03B2: ", String(deviceOrientation.beta)); - this._gammaElement = this._createAxisInput(cellElement, "device-orientation-override-gamma", "\u03B3: ", String(deviceOrientation.gamma)); + this._alphaElement = createElement("input"); + this._alphaSetter = this._createAxisInput(cellElement, this._alphaElement, "\u03B1: "); + this._alphaSetter(String(deviceOrientation.alpha)); + + this._betaElement = createElement("input"); + this._betaSetter = this._createAxisInput(cellElement, this._betaElement, "\u03B2: "); + this._betaSetter(String(deviceOrientation.beta)); + + this._gammaElement = createElement("input"); + this._gammaSetter = this._createAxisInput(cellElement, this._gammaElement, "\u03B3: "); + this._gammaSetter(String(deviceOrientation.gamma)); cellElement.appendChild(createTextButton(WebInspector.UIString("Reset"), this._resetDeviceOrientation.bind(this), "accelerometer-reset-button"));
diff --git a/third_party/WebKit/Source/devtools/front_end/emulation/module.json b/third_party/WebKit/Source/devtools/front_end/emulation/module.json index 2962b8a2..834e7fb 100644 --- a/third_party/WebKit/Source/devtools/front_end/emulation/module.json +++ b/third_party/WebKit/Source/devtools/front_end/emulation/module.json
@@ -1,6 +1,12 @@ { "extensions": [ { + "type": "@WebInspector.AppProvider", + "condition": "can_dock", + "className": "WebInspector.AdvancedAppProvider", + "order": 0 + }, + { "type": "@WebInspector.ActionDelegate", "actionId": "emulation.toggle-device-mode", "className": "WebInspector.DeviceModeWrapper.ActionDelegate", @@ -77,6 +83,7 @@ "ui" ], "scripts": [ + "AdvancedApp.js", "EmulatedDevices.js", "DevicesSettingsTab.js", "DeviceOrientation.js",
diff --git a/third_party/WebKit/Source/devtools/front_end/emulation/sensors.css b/third_party/WebKit/Source/devtools/front_end/emulation/sensors.css index 6f5882c..919e277 100644 --- a/third_party/WebKit/Source/devtools/front_end/emulation/sensors.css +++ b/third_party/WebKit/Source/devtools/front_end/emulation/sensors.css
@@ -14,6 +14,7 @@ .sensors-view input { text-align: right; + width: 80px; } .sensors-view input[type=text]:enabled:focus,
diff --git a/third_party/WebKit/Source/devtools/front_end/host/UserMetrics.js b/third_party/WebKit/Source/devtools/front_end/host/UserMetrics.js index a8a545f..e40e888 100644 --- a/third_party/WebKit/Source/devtools/front_end/host/UserMetrics.js +++ b/third_party/WebKit/Source/devtools/front_end/host/UserMetrics.js
@@ -69,7 +69,13 @@ profiles: 6, audits: 7, console: 8, - layers: 9 + layers: 9, + "drawer-console": 10, + "drawer-animations": 11, + "drawer-network.config": 12, + "drawer-rendering": 13, + "drawer-sensors": 14, + "drawer-sources.search": 15 } WebInspector.UserMetrics.prototype = { @@ -84,6 +90,14 @@ }, /** + * @param {string} drawerId + */ + drawerShown: function(drawerId) + { + this.panelShown("drawer-" + drawerId); + }, + + /** * @param {!WebInspector.UserMetrics.Action} action */ actionTaken: function(action)
diff --git a/third_party/WebKit/Source/devtools/front_end/main/AdvancedApp.js b/third_party/WebKit/Source/devtools/front_end/main/AdvancedApp.js deleted file mode 100644 index 58e9b54..0000000 --- a/third_party/WebKit/Source/devtools/front_end/main/AdvancedApp.js +++ /dev/null
@@ -1,214 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -/** - * @constructor - * @implements {WebInspector.App} - */ -WebInspector.AdvancedApp = function() -{ - WebInspector.dockController.addEventListener(WebInspector.DockController.Events.BeforeDockSideChanged, this._openToolboxWindow, this); -}; - -WebInspector.AdvancedApp.prototype = { - /** - * @override - * @param {!Document} document - * @param {function()} callback - */ - presentUI: function(document, callback) - { - var rootView = new WebInspector.RootView(); - - this._rootSplitWidget = new WebInspector.SplitWidget(false, true, "InspectorView.splitViewState", 555, 300, true); - this._rootSplitWidget.show(rootView.element); - - this._rootSplitWidget.setSidebarWidget(WebInspector.inspectorView); - - this._inspectedPagePlaceholder = new WebInspector.InspectedPagePlaceholder(); - this._inspectedPagePlaceholder.addEventListener(WebInspector.InspectedPagePlaceholder.Events.Update, this._onSetInspectedPageBounds.bind(this), this); - this._deviceModeView = new WebInspector.DeviceModeWrapper(this._inspectedPagePlaceholder); - - WebInspector.dockController.addEventListener(WebInspector.DockController.Events.BeforeDockSideChanged, this._onBeforeDockSideChange, this); - WebInspector.dockController.addEventListener(WebInspector.DockController.Events.DockSideChanged, this._onDockSideChange, this); - WebInspector.dockController.addEventListener(WebInspector.DockController.Events.AfterDockSideChanged, this._onAfterDockSideChange, this); - this._onDockSideChange(); - - WebInspector.inspectorView.showInitialPanel(); - console.timeStamp("AdvancedApp.attachToBody"); - rootView.attachToDocument(document); - this._inspectedPagePlaceholder.update(); - - if (this._isDocked()) - callback(); - else - this._presentUICallback = callback; - }, - - /** - * @param {!WebInspector.Event} event - */ - _openToolboxWindow: function(event) - { - if (/** @type {string} */ (event.data.to) !== WebInspector.DockController.State.Undocked) - return; - - if (this._toolboxWindow) - return; - - var url = window.location.href.replace("inspector.html", "toolbox.html"); - this._toolboxWindow = window.open(url, undefined); - }, - - /** - * @param {!Document} toolboxDocument - */ - toolboxLoaded: function(toolboxDocument) - { - WebInspector.initializeUIUtils(toolboxDocument, WebInspector.settings.createSetting("uiTheme", "default")); - WebInspector.installComponentRootStyles(/** @type {!Element} */ (toolboxDocument.body)); - WebInspector.ContextMenu.installHandler(toolboxDocument); - WebInspector.Tooltip.installHandler(toolboxDocument); - - this._toolboxRootView = new WebInspector.RootView(); - this._toolboxRootView.attachToDocument(toolboxDocument); - - this._updateDeviceModeView(); - - if (this._presentUICallback) { - var callback = this._presentUICallback; - delete this._presentUICallback; - callback(); - } - }, - - _updateDeviceModeView: function() - { - if (this._isDocked()) - this._rootSplitWidget.setMainWidget(this._deviceModeView); - else if (this._toolboxRootView) - this._deviceModeView.show(this._toolboxRootView.element); - }, - - /** - * @param {!WebInspector.Event} event - */ - _onBeforeDockSideChange: function(event) - { - if (/** @type {string} */ (event.data.to) === WebInspector.DockController.State.Undocked && this._toolboxRootView) { - // Hide inspectorView and force layout to mimic the undocked state. - this._rootSplitWidget.hideSidebar(); - this._inspectedPagePlaceholder.update(); - } - - this._changingDockSide = true; - }, - - /** - * @param {!WebInspector.Event=} event - */ - _onDockSideChange: function(event) - { - this._updateDeviceModeView(); - - var toDockSide = event ? /** @type {string} */ (event.data.to) : WebInspector.dockController.dockSide(); - if (toDockSide === WebInspector.DockController.State.Undocked) { - this._updateForUndocked(); - } else if (this._toolboxRootView && event && /** @type {string} */ (event.data.from) === WebInspector.DockController.State.Undocked) { - // Don't update yet for smooth transition. - this._rootSplitWidget.hideSidebar(); - } else { - this._updateForDocked(toDockSide); - } - }, - - /** - * @param {!WebInspector.Event} event - */ - _onAfterDockSideChange: function(event) - { - // We may get here on the first dock side change while loading without BeforeDockSideChange. - if (!this._changingDockSide) - return; - if (/** @type {string} */ (event.data.from) === WebInspector.DockController.State.Undocked) { - // Restore docked layout in case of smooth transition. - this._updateForDocked(/** @type {string} */ (event.data.to)); - } - this._changingDockSide = false; - this._inspectedPagePlaceholder.update(); - }, - - /** - * @param {string} dockSide - */ - _updateForDocked: function(dockSide) - { - this._rootSplitWidget.setVertical(dockSide === WebInspector.DockController.State.DockedToRight); - this._rootSplitWidget.setSecondIsSidebar(dockSide === WebInspector.DockController.State.DockedToRight || dockSide === WebInspector.DockController.State.DockedToBottom); - this._rootSplitWidget.toggleResizer(this._rootSplitWidget.resizerElement(), true); - this._rootSplitWidget.toggleResizer(WebInspector.inspectorView.topResizerElement(), dockSide === WebInspector.DockController.State.DockedToBottom); - this._rootSplitWidget.showBoth(); - }, - - _updateForUndocked: function() - { - this._rootSplitWidget.toggleResizer(this._rootSplitWidget.resizerElement(), false); - this._rootSplitWidget.toggleResizer(WebInspector.inspectorView.topResizerElement(), false); - this._rootSplitWidget.hideMain(); - }, - - _isDocked: function() - { - return WebInspector.dockController.dockSide() !== WebInspector.DockController.State.Undocked; - }, - - /** - * @param {!WebInspector.Event} event - */ - _onSetInspectedPageBounds: function(event) - { - if (this._changingDockSide) - return; - var window = this._inspectedPagePlaceholder.element.window(); - if (!window.innerWidth || !window.innerHeight) - return; - if (!this._inspectedPagePlaceholder.isShowing()) - return; - var bounds = /** @type {{x: number, y: number, width: number, height: number}} */ (event.data); - console.timeStamp("AdvancedApp.setInspectedPageBounds"); - InspectorFrontendHost.setInspectedPageBounds(bounds); - } -}; - -/** @type {!WebInspector.AdvancedApp} */ -WebInspector.AdvancedApp._appInstance; - -/** - * @return {!WebInspector.AdvancedApp} - */ -WebInspector.AdvancedApp._instance = function() -{ - if (!WebInspector.AdvancedApp._appInstance) - WebInspector.AdvancedApp._appInstance = new WebInspector.AdvancedApp(); - return WebInspector.AdvancedApp._appInstance; -}; - -/** - * @constructor - * @implements {WebInspector.AppProvider} - */ -WebInspector.AdvancedAppProvider = function() -{ -}; - -WebInspector.AdvancedAppProvider.prototype = { - /** - * @override - * @return {!WebInspector.App} - */ - createApp: function() - { - return WebInspector.AdvancedApp._instance(); - } -};
diff --git a/third_party/WebKit/Source/devtools/front_end/main/Main.js b/third_party/WebKit/Source/devtools/front_end/main/Main.js index 334ec50..2e8eeae 100644 --- a/third_party/WebKit/Source/devtools/front_end/main/Main.js +++ b/third_party/WebKit/Source/devtools/front_end/main/Main.js
@@ -178,7 +178,6 @@ WebInspector.ContextMenu.installHandler(document); WebInspector.Tooltip.installHandler(document); WebInspector.dockController = new WebInspector.DockController(canDock); - WebInspector.emulatedDevicesList = new WebInspector.EmulatedDevicesList(); WebInspector.multitargetConsoleModel = new WebInspector.MultitargetConsoleModel(); WebInspector.multitargetNetworkManager = new WebInspector.MultitargetNetworkManager(); @@ -239,7 +238,7 @@ // It is important to kick controller lifetime after apps are instantiated. WebInspector.dockController.initialize(); console.timeStamp("Main._presentUI"); - app.presentUI(document, this._didPresentAppUI.bind(this)); + app.presentUI(document); var toggleSearchNodeAction = WebInspector.actionRegistry.action("elements.toggle-element-search"); InspectorFrontendHost.events.addEventListener(InspectorFrontendHostAPI.Events.EnterInspectElementMode, toggleSearchNodeAction.execute.bind(toggleSearchNodeAction), this); @@ -261,8 +260,8 @@ { handler.handleQueryParam(value); } - this._appUIShown = true; + this._appUIShown = true; if (this._fileSystemManagerInitialized) { // Allow UI cycles to repaint prior to creating connection. setTimeout(this._createConnection.bind(this), 0); @@ -324,19 +323,6 @@ if (this._mainTarget.isServiceWorker() || this._mainTarget.isPage()) this._mainTarget.runtimeAgent().run(); - if (this._appUIPresented) - this._loadingDone(); - }, - - _didPresentAppUI: function() - { - this._appUIPresented = true; - if (this._mainTarget) - this._loadingDone(); - }, - - _loadingDone: function() - { this._mainTarget.inspectorAgent().enable(inspectorAgentEnableCallback); function inspectorAgentEnableCallback()
diff --git a/third_party/WebKit/Source/devtools/front_end/main/SimpleApp.js b/third_party/WebKit/Source/devtools/front_end/main/SimpleApp.js index fc0046d53..2e6a33c 100644 --- a/third_party/WebKit/Source/devtools/front_end/main/SimpleApp.js +++ b/third_party/WebKit/Source/devtools/front_end/main/SimpleApp.js
@@ -14,15 +14,13 @@ /** * @override * @param {!Document} document - * @param {function()} callback */ - presentUI: function(document, callback) + presentUI: function(document) { var rootView = new WebInspector.RootView(); WebInspector.inspectorView.show(rootView.element); WebInspector.inspectorView.showInitialPanel(); rootView.attachToDocument(document); - callback(); } };
diff --git a/third_party/WebKit/Source/devtools/front_end/main/module.json b/third_party/WebKit/Source/devtools/front_end/main/module.json index cbf8c5b..841a9154 100644 --- a/third_party/WebKit/Source/devtools/front_end/main/module.json +++ b/third_party/WebKit/Source/devtools/front_end/main/module.json
@@ -2,12 +2,6 @@ "extensions": [ { "type": "@WebInspector.AppProvider", - "condition": "can_dock", - "className": "WebInspector.AdvancedAppProvider", - "order": 0 - }, - { - "type": "@WebInspector.AppProvider", "className": "WebInspector.SimpleAppProvider", "order": 10 }, @@ -275,14 +269,6 @@ { "type": "setting", "category": "Appearance", - "title": "Don't show emulation warnings", - "settingName": "disableOverridesWarning", - "settingType": "boolean", - "defaultValue": false - }, - { - "type": "setting", - "category": "Appearance", "title": "Don't show Chrome Data Saver warning", "settingName": "disableDataSaverInfobar", "settingType": "boolean", @@ -327,11 +313,9 @@ "extensions", "host", "platform", - "sdk", - "emulation" + "sdk" ], "scripts": [ - "AdvancedApp.js", "FrontendWebSocketAPI.js", "RenderingOptions.js", "SimpleApp.js",
diff --git a/third_party/WebKit/Source/devtools/front_end/network/NetworkConditionsSelector.js b/third_party/WebKit/Source/devtools/front_end/network/NetworkConditionsSelector.js index 8451274f..b2796da 100644 --- a/third_party/WebKit/Source/devtools/front_end/network/NetworkConditionsSelector.js +++ b/third_party/WebKit/Source/devtools/front_end/network/NetworkConditionsSelector.js
@@ -29,7 +29,11 @@ if (throughput < 0) return ""; var throughputInKbps = throughput / (1024 / 8); - return (throughputInKbps < 1024) ? WebInspector.UIString("%d kb/s", throughputInKbps) : WebInspector.UIString("%d Mb/s", (throughputInKbps / 1024) | 0); + if (throughputInKbps < 1024) + return WebInspector.UIString("%d kb/s", throughputInKbps); + if (throughputInKbps < 1024 * 10) + return WebInspector.UIString("%.1f Mb/s", throughputInKbps / 1024); + return WebInspector.UIString("%d Mb/s", (throughputInKbps / 1024) | 0); } /** @type {!Array.<!WebInspector.NetworkConditionsProfile>} */
diff --git a/third_party/WebKit/Source/devtools/front_end/screencast/ScreencastApp.js b/third_party/WebKit/Source/devtools/front_end/screencast/ScreencastApp.js index 2f0cd91..b3f22741 100644 --- a/third_party/WebKit/Source/devtools/front_end/screencast/ScreencastApp.js +++ b/third_party/WebKit/Source/devtools/front_end/screencast/ScreencastApp.js
@@ -20,9 +20,8 @@ /** * @override * @param {!Document} document - * @param {function()} callback */ - presentUI: function(document, callback) + presentUI: function(document) { var rootView = new WebInspector.RootView(); @@ -35,7 +34,6 @@ this._rootSplitWidget.setSidebarWidget(WebInspector.inspectorView); WebInspector.inspectorView.showInitialPanel(); rootView.attachToDocument(document); - callback(); }, /**
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/SourceMap.js b/third_party/WebKit/Source/devtools/front_end/sdk/SourceMap.js index 71b7fc5..f98426b3 100644 --- a/third_party/WebKit/Source/devtools/front_end/sdk/SourceMap.js +++ b/third_party/WebKit/Source/devtools/front_end/sdk/SourceMap.js
@@ -60,7 +60,7 @@ } /** - * Implements Source Map V3 model. See http://code.google.com/p/closure-compiler/wiki/SourceMaps + * Implements Source Map V3 model. See https://github.com/google/closure-compiler/wiki/Source-Maps * for format description. * @constructor * @param {string} compiledURL
diff --git a/third_party/WebKit/Source/devtools/front_end/sources/AdvancedSearchView.js b/third_party/WebKit/Source/devtools/front_end/sources/AdvancedSearchView.js index 4adb76f9..e3a7144f 100644 --- a/third_party/WebKit/Source/devtools/front_end/sources/AdvancedSearchView.js +++ b/third_party/WebKit/Source/devtools/front_end/sources/AdvancedSearchView.js
@@ -28,7 +28,7 @@ this._search.setAttribute("type", "text"); this._search.classList.add("search-config-search"); this._search.setAttribute("results", "0"); - this._search.setAttribute("size", 30); + this._search.setAttribute("size", 42); this._ignoreCaseLabel = createCheckboxLabel(WebInspector.UIString("Ignore case")); this._ignoreCaseLabel.classList.add("search-config-label");
diff --git a/third_party/WebKit/Source/devtools/front_end/sources/NavigatorView.js b/third_party/WebKit/Source/devtools/front_end/sources/NavigatorView.js index de77d77c..5c24dbac 100644 --- a/third_party/WebKit/Source/devtools/front_end/sources/NavigatorView.js +++ b/third_party/WebKit/Source/devtools/front_end/sources/NavigatorView.js
@@ -346,10 +346,25 @@ return frameNode; frameNode = new WebInspector.NavigatorGroupTreeNode(this, project, target.id() + ":" + frame.id, WebInspector.NavigatorView.Types.Frame, frame.displayName()); + frameNode.setHoverCallback(hoverCallback); this._frameNodes.set(frame, frameNode); this._frameNode(project, target, frame.parentFrame).appendChild(frameNode); if (!frame.parentFrame) frameNode.treeNode()._boostOrder = true; + + /** + * @param {boolean} hovered + */ + function hoverCallback(hovered) + { + if (hovered) { + var domModel = WebInspector.DOMModel.fromTarget(target); + if (domModel) + domModel.highlightFrame(frame.id); + } else { + WebInspector.DOMModel.hideDOMNodeHighlight(); + } + } return frameNode; }, @@ -771,8 +786,9 @@ * @param {!WebInspector.NavigatorView} navigatorView * @param {string} type * @param {string} title + * @param {function(boolean)=} hoverCallback */ -WebInspector.NavigatorFolderTreeElement = function(navigatorView, type, title) +WebInspector.NavigatorFolderTreeElement = function(navigatorView, type, title, hoverCallback) { TreeElement.call(this, "", true); this.listItemElement.classList.add("navigator-" + type + "-tree-item", "navigator-folder-tree-item"); @@ -781,6 +797,7 @@ this.tooltip = title; this.createIcon(); this._navigatorView = navigatorView; + this._hoverCallback = hoverCallback; } WebInspector.NavigatorFolderTreeElement.prototype = { @@ -794,6 +811,8 @@ this.collapse(); this._node.onattach(); this.listItemElement.addEventListener("contextmenu", this._handleContextMenuEvent.bind(this), false); + this.listItemElement.addEventListener("mousemove", this._mouseMove.bind(this), false); + this.listItemElement.addEventListener("mouseleave", this._mouseLeave.bind(this), false); }, /** @@ -822,6 +841,28 @@ this._navigatorView.handleFolderContextMenu(event, this._node); }, + /** + * @param {!Event} event + */ + _mouseMove: function(event) + { + if (this._hovered || !this._hoverCallback) + return; + this._hovered = true; + this._hoverCallback(true); + }, + + /** + * @param {!Event} event + */ + _mouseLeave: function(event) + { + if (!this._hoverCallback) + return; + this._hovered = false; + this._hoverCallback(false); + }, + __proto__: TreeElement.prototype } @@ -1486,6 +1527,14 @@ WebInspector.NavigatorGroupTreeNode.prototype = { /** + * @param {function(boolean)} hoverCallback + */ + setHoverCallback: function(hoverCallback) + { + this._hoverCallback = hoverCallback; + }, + + /** * @override * @return {!TreeElement} */ @@ -1493,7 +1542,7 @@ { if (this._treeElement) return this._treeElement; - this._treeElement = new WebInspector.NavigatorFolderTreeElement(this._navigatorView, this._type, this._title); + this._treeElement = new WebInspector.NavigatorFolderTreeElement(this._navigatorView, this._type, this._title, this._hoverCallback); this._treeElement.setNode(this); return this._treeElement; },
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/CountersGraph.js b/third_party/WebKit/Source/devtools/front_end/timeline/CountersGraph.js index 588ca4b..9a6feea 100644 --- a/third_party/WebKit/Source/devtools/front_end/timeline/CountersGraph.js +++ b/third_party/WebKit/Source/devtools/front_end/timeline/CountersGraph.js
@@ -412,13 +412,16 @@ this._formatter = formatter || Number.withThousandsSeparator; var container = memoryCountersPane._infoWidget.element.createChild("div", "memory-counter-selector-info"); - this._filter = new WebInspector.CheckboxFilterUI(title, title); + this._setting = WebInspector.settings.createSetting("timelineCountersGraph-" + title, true); + this._filter = new WebInspector.ToolbarCheckbox(title, title, this._setting); var color = WebInspector.Color.parse(graphColor).setAlpha(0.5).asString(WebInspector.Color.Format.RGBA); - if (color) - this._filter.setColor(color, "rgba(0,0,0,0.3)"); - this._filter.addEventListener(WebInspector.FilterUI.Events.FilterChanged, this._toggleCounterGraph.bind(this)); - container.appendChild(this._filter.element()); - this._range = this._filter.labelElement().createChild("span", "range"); + if (color) { + this._filter.element.backgroundColor = color; + this._filter.element.borderColor = "transparent"; + } + this._filter.inputElement.addEventListener("click", this._toggleCounterGraph.bind(this)); + container.appendChild(this._filter.element); + this._range = this._filter.element.createChild("span", "range"); this._value = memoryCountersPane._currentValuesBar.createChild("span", "memory-counter-value"); this._value.style.color = graphColor;
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineFlameChart.js b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineFlameChart.js index 383d63b..24c15ca 100644 --- a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineFlameChart.js +++ b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineFlameChart.js
@@ -177,9 +177,11 @@ * @param {number} barY * @param {number} barWidth * @param {number} barHeight + * @param {number} unclippedBarX + * @param {number} timeToPixels * @return {boolean} */ - decorateEntry: function(entryIndex, context, text, barX, barY, barWidth, barHeight) + decorateEntry: function(entryIndex, context, text, barX, barY, barWidth, barHeight, unclippedBarX, timeToPixels) { return false; }, @@ -659,32 +661,22 @@ barWidth -= 2 * hPadding; barY += vPadding; barHeight -= 2 * vPadding + 1; - context.fillStyle = frame.idle ? "white" : "#eee"; context.fillRect(barX, barY, barWidth, barHeight); if (frame.hasWarnings()) paintWarningDecoration(barX, barWidth); - var frameDurationText = Number.preciseMillisToString(frame.duration, 1); var textWidth = context.measureText(frameDurationText).width; - if (barWidth > textWidth) { + if (barWidth >= textWidth) { context.fillStyle = this.textColor(entryIndex); - context.fillText(frameDurationText, barX + ((barWidth - textWidth) >> 1), barY + barHeight - 3); + context.fillText(frameDurationText, barX + (barWidth - textWidth) / 2, barY + barHeight - 3); } return true; } - if (barWidth > 10 && text) { - context.save(); - context.fillStyle = this.textColor(entryIndex); - context.font = this._font; - context.fillText(text, barX + this.textPadding(), barY + barHeight - this.textBaseline()); - context.restore(); - } - if (type === WebInspector.TimelineFlameChartEntryType.Event) { - var event = /** {!WebInspector.TracingModel.Event} */ (data); - if (event.warning) + var event = /** @type {!WebInspector.TracingModel.Event} */ (this._entryData[entryIndex]); + if (event && event.warning) paintWarningDecoration(barX, barWidth - 1.5); } @@ -708,7 +700,7 @@ context.restore(); } - return true; + return false; }, /** @@ -999,23 +991,31 @@ * @param {number} barY * @param {number} barWidth * @param {number} barHeight + * @param {number} unclippedBarX + * @param {number} timeToPixels * @return {boolean} */ - decorateEntry: function(index, context, text, barX, barY, barWidth, barHeight) + decorateEntry: function(index, context, text, barX, barY, barWidth, barHeight, unclippedBarX, timeToPixels) { var minTransferWidthPx = 2; var request = /** @type {!WebInspector.TimelineModel.NetworkRequest} */ (this._requests[index]); var startTime = request.startTime; - var responseTime = request.responseTime || request.endTime; - var requestDuration = request.endTime - startTime; - var waitingWidth; - if (isFinite(requestDuration)) - waitingWidth = requestDuration ? (responseTime - startTime) / requestDuration * barWidth : 0; - else - waitingWidth = barWidth; - waitingWidth = Math.min(waitingWidth, barWidth - minTransferWidthPx); - context.fillStyle = "hsla(0, 0%, 100%, 0.5)"; - context.fillRect(barX, barY, waitingWidth, barHeight); + var endTime = request.endTime; + var lastX = unclippedBarX; + context.fillStyle = "hsla(0, 0%, 100%, 0.6)"; + for (var i = 0; i < request.children.length; ++i) { + var event = request.children[i]; + var t0 = event.startTime; + var t1 = event.endTime || event.startTime; + var x0 = Math.floor(unclippedBarX + (t0 - startTime) * timeToPixels - 1); + var x1 = Math.floor(unclippedBarX + (t1 - startTime) * timeToPixels + 1); + if (x0 > lastX) + context.fillRect(lastX, barY, x0 - lastX, barHeight); + lastX = x1; + } + var endX = unclippedBarX + (endTime - startTime) * timeToPixels; + if (endX > lastX) + context.fillRect(lastX, barY, Math.min(endX - lastX, 1e5), barHeight); if (typeof request.priority === "string") { var color = this._colorForPriority(request.priority); if (color) {
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineModel.js b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineModel.js index fada4fde..d2d2b4c9 100644 --- a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineModel.js +++ b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineModel.js
@@ -1540,6 +1540,8 @@ { this.startTime = event.name === WebInspector.TimelineModel.RecordType.ResourceSendRequest ? event.startTime : 0; this.endTime = Infinity; + /** @type {!Array<!WebInspector.TracingModel.Event>} */ + this.children = []; this.addEvent(event); } @@ -1549,6 +1551,7 @@ */ addEvent: function(event) { + this.children.push(event); var recordType = WebInspector.TimelineModel.RecordType; this.startTime = Math.min(this.startTime, event.startTime); var eventData = event.args["data"];
diff --git a/third_party/WebKit/Source/devtools/front_end/ui/SettingsUI.js b/third_party/WebKit/Source/devtools/front_end/ui/SettingsUI.js index 5b35756..452dd4a 100644 --- a/third_party/WebKit/Source/devtools/front_end/ui/SettingsUI.js +++ b/third_party/WebKit/Source/devtools/front_end/ui/SettingsUI.js
@@ -109,37 +109,6 @@ } /** - * Creates an input element under the parentElement with the given id and defaultText. - * @param {!Element} parentElement - * @param {string} id - * @param {string} defaultText - * @param {function(*)} eventListener - * @param {boolean=} numeric - * @param {string=} size - * @return {!Element} element - */ -WebInspector.SettingsUI.createInput = function(parentElement, id, defaultText, eventListener, numeric, size) -{ - var element = parentElement.createChild("input"); - element.id = id; - element.type = "text"; - element.maxLength = 12; - element.style.width = size || "80px"; - element.value = defaultText; - element.align = "right"; - if (numeric) - element.className = "numeric"; - element.addEventListener("input", eventListener, false); - element.addEventListener("keydown", keyDownListener, false); - function keyDownListener(event) - { - if (isEnterKey(event)) - eventListener(event); - } - return element; -} - -/** * @interface */ WebInspector.SettingUI = function()
diff --git a/third_party/WebKit/Source/devtools/front_end/ui_lazy/FlameChart.js b/third_party/WebKit/Source/devtools/front_end/ui_lazy/FlameChart.js index 360268c..1c544b1 100644 --- a/third_party/WebKit/Source/devtools/front_end/ui_lazy/FlameChart.js +++ b/third_party/WebKit/Source/devtools/front_end/ui_lazy/FlameChart.js
@@ -211,9 +211,11 @@ * @param {number} barY * @param {number} barWidth * @param {number} barHeight + * @param {number} unclippedBarX + * @param {number} timeToPixels * @return {boolean} */ - decorateEntry: function(entryIndex, context, text, barX, barY, barWidth, barHeight) { }, + decorateEntry: function(entryIndex, context, text, barX, barY, barWidth, barHeight, unclippedBarX, timeToPixels) { }, /** * @param {number} entryIndex @@ -1124,7 +1126,6 @@ var barHeight = this._barHeight; - var textBaseHeight = this._baseHeight + barHeight - this._dataProvider.textBaseline(); var colorBuckets = {}; var minVisibleBarLevel = Math.max(Math.floor((this._scrollTop - this._baseHeight) / barHeight), 0); var maxVisibleBarLevel = Math.min(Math.floor((this._scrollTop - this._baseHeight + height) / barHeight), this._dataProvider.maxStackDepth()); @@ -1209,6 +1210,7 @@ context.stroke(); context.textBaseline = "alphabetic"; + var textBaseHeight = this._barHeight - this._dataProvider.textBaseline(); for (var i = 0; i < nextTitleIndex; ++i) { var entryIndex = titleIndices[i]; @@ -1223,13 +1225,13 @@ context.font = this._dataProvider.entryFont(entryIndex); text = this._prepareText(context, text, barWidth - 2 * textPadding); } - if (this._dataProvider.decorateEntry(entryIndex, context, text, barX, barY, barWidth, barHeight)) + var unclippedBarX = this._timeToPosition(entryStartTime); + if (this._dataProvider.decorateEntry(entryIndex, context, text, barX, barY, barWidth, barHeight, unclippedBarX, this._timeToPixel)) continue; if (!text || !text.length) continue; - context.fillStyle = this._dataProvider.textColor(entryIndex); - context.fillText(text, barX + textPadding, textBaseHeight - barLevel * this._barHeightDelta); + context.fillText(text, barX + textPadding, barY + textBaseHeight); } this._drawFlowEvents(context, width, height);
diff --git a/third_party/WebKit/Source/devtools/scripts/concatenate_application_code.py b/third_party/WebKit/Source/devtools/scripts/concatenate_application_code.py index c6e1567b..d9204a8 100755 --- a/third_party/WebKit/Source/devtools/scripts/concatenate_application_code.py +++ b/third_party/WebKit/Source/devtools/scripts/concatenate_application_code.py
@@ -31,13 +31,6 @@ except ImportError: import json -rjsmin_path = path.abspath(join( - path.dirname(__file__), - '..', - '..', - 'build', - 'scripts')) -sys.path.append(rjsmin_path) import rjsmin
diff --git a/third_party/WebKit/Source/build/scripts/rjsmin.py b/third_party/WebKit/Source/devtools/scripts/rjsmin.py similarity index 100% rename from third_party/WebKit/Source/build/scripts/rjsmin.py rename to third_party/WebKit/Source/devtools/scripts/rjsmin.py
diff --git a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp index a2df0b7d..42938a9 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp
@@ -519,7 +519,7 @@ if (node()->isElementNode()) { Element* element = toElement(node()); if (element->isInCanvasSubtree()) { - document()->updateLayoutTreeIgnorePendingStylesheets(); + document()->updateLayoutTreeForNodeIfNeeded(element); if (element->isFocusable()) return GroupRole; }
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp index 314bcaa..d02caab 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp
@@ -922,6 +922,12 @@ postNotification(obj, AXLayoutComplete); } +void AXObjectCacheImpl::handleClicked(Node* node) +{ + if (AXObject* obj = getOrCreate(node)) + postNotification(obj, AXClicked); +} + void AXObjectCacheImpl::handleAriaExpandedChange(Node* node) { if (AXObject* obj = getOrCreate(node))
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.h b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.h index 0fab752..6e8d77c 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.h +++ b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.h
@@ -88,6 +88,7 @@ void didHideMenuListPopup(LayoutMenuList*) override; void handleLoadComplete(Document*) override; void handleLayoutComplete(Document*) override; + void handleClicked(Node*) override; void setCanvasObjectBounds(Element*, const LayoutRect&) override;
diff --git a/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.cpp b/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.cpp index 78ac63e..ce8e6cb 100644 --- a/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.cpp +++ b/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.cpp
@@ -113,7 +113,7 @@ WTF_MAKE_NONCOPYABLE(RequestCacheNames); public: - RequestCacheNames(const String& securityOrigin, PassRefPtrWillBeRawPtr<RequestCacheNamesCallback> callback) + RequestCacheNames(const String& securityOrigin, PassRefPtr<RequestCacheNamesCallback> callback) : m_securityOrigin(securityOrigin) , m_callback(callback) { @@ -142,7 +142,7 @@ private: String m_securityOrigin; - RefPtrWillBePersistent<RequestCacheNamesCallback> m_callback; + RefPtr<RequestCacheNamesCallback> m_callback; }; struct DataRequestParams { @@ -166,7 +166,7 @@ WTF_MAKE_NONCOPYABLE(ResponsesAccumulator); public: - ResponsesAccumulator(int numResponses, const DataRequestParams& params, PassRefPtrWillBeRawPtr<RequestEntriesCallback> callback) + ResponsesAccumulator(int numResponses, const DataRequestParams& params, PassRefPtr<RequestEntriesCallback> callback) : m_params(params) , m_numResponsesLeft(numResponses) , m_responses(static_cast<size_t>(numResponses)) @@ -210,7 +210,7 @@ DataRequestParams m_params; int m_numResponsesLeft; Vector<RequestResponse> m_responses; - RefPtrWillBePersistent<RequestEntriesCallback> m_callback; + RefPtr<RequestEntriesCallback> m_callback; }; class GetCacheResponsesForRequestData : public WebServiceWorkerCache::CacheMatchCallbacks { @@ -219,7 +219,7 @@ public: GetCacheResponsesForRequestData( const DataRequestParams& params, const WebServiceWorkerRequest& request, - PassRefPtr<ResponsesAccumulator> accum, PassRefPtrWillBeRawPtr<RequestEntriesCallback> callback) + PassRefPtr<ResponsesAccumulator> accum, PassRefPtr<RequestEntriesCallback> callback) : m_params(params) , m_request(request) , m_accumulator(accum) @@ -242,14 +242,14 @@ DataRequestParams m_params; WebServiceWorkerRequest m_request; RefPtr<ResponsesAccumulator> m_accumulator; - RefPtrWillBePersistent<RequestEntriesCallback> m_callback; + RefPtr<RequestEntriesCallback> m_callback; }; class GetCacheKeysForRequestData : public WebServiceWorkerCache::CacheWithRequestsCallbacks { WTF_MAKE_NONCOPYABLE(GetCacheKeysForRequestData); public: - GetCacheKeysForRequestData(const DataRequestParams& params, PassOwnPtr<WebServiceWorkerCache> cache, PassRefPtrWillBeRawPtr<RequestEntriesCallback> callback) + GetCacheKeysForRequestData(const DataRequestParams& params, PassOwnPtr<WebServiceWorkerCache> cache, PassRefPtr<RequestEntriesCallback> callback) : m_params(params) , m_cache(cache) , m_callback(callback) @@ -282,7 +282,7 @@ private: DataRequestParams m_params; OwnPtr<WebServiceWorkerCache> m_cache; - RefPtrWillBePersistent<RequestEntriesCallback> m_callback; + RefPtr<RequestEntriesCallback> m_callback; }; class GetCacheForRequestData @@ -290,7 +290,7 @@ WTF_MAKE_NONCOPYABLE(GetCacheForRequestData); public: - GetCacheForRequestData(const DataRequestParams& params, PassRefPtrWillBeRawPtr<RequestEntriesCallback> callback) + GetCacheForRequestData(const DataRequestParams& params, PassRefPtr<RequestEntriesCallback> callback) : m_params(params) , m_callback(callback) { @@ -310,14 +310,14 @@ private: DataRequestParams m_params; - RefPtrWillBePersistent<RequestEntriesCallback> m_callback; + RefPtr<RequestEntriesCallback> m_callback; }; class DeleteCache : public WebServiceWorkerCacheStorage::CacheStorageCallbacks { WTF_MAKE_NONCOPYABLE(DeleteCache); public: - DeleteCache(PassRefPtrWillBeRawPtr<DeleteCacheCallback> callback) + DeleteCache(PassRefPtr<DeleteCacheCallback> callback) : m_callback(callback) { } @@ -334,14 +334,14 @@ } private: - RefPtrWillBePersistent<DeleteCacheCallback> m_callback; + RefPtr<DeleteCacheCallback> m_callback; }; class DeleteCacheEntry : public WebServiceWorkerCache::CacheBatchCallbacks { WTF_MAKE_NONCOPYABLE(DeleteCacheEntry); public: - DeleteCacheEntry(PassRefPtrWillBeRawPtr<DeleteEntryCallback> callback) + DeleteCacheEntry(PassRefPtr<DeleteEntryCallback> callback) : m_callback(callback) { } @@ -358,7 +358,7 @@ } private: - RefPtrWillBePersistent<DeleteEntryCallback> m_callback; + RefPtr<DeleteEntryCallback> m_callback; }; class GetCacheForDeleteEntry @@ -366,7 +366,7 @@ WTF_MAKE_NONCOPYABLE(GetCacheForDeleteEntry); public: - GetCacheForDeleteEntry(const String& requestSpec, const String& cacheName, PassRefPtrWillBeRawPtr<DeleteEntryCallback> callback) + GetCacheForDeleteEntry(const String& requestSpec, const String& cacheName, PassRefPtr<DeleteEntryCallback> callback) : m_requestSpec(requestSpec) , m_cacheName(cacheName) , m_callback(callback) @@ -393,7 +393,7 @@ private: String m_requestSpec; String m_cacheName; - RefPtrWillBePersistent<DeleteEntryCallback> m_callback; + RefPtr<DeleteEntryCallback> m_callback; }; } // namespace @@ -410,7 +410,7 @@ InspectorBaseAgent::trace(visitor); } -void InspectorCacheStorageAgent::requestCacheNames(ErrorString* errorString, const String& securityOrigin, PassRefPtrWillBeRawPtr<RequestCacheNamesCallback> callback) +void InspectorCacheStorageAgent::requestCacheNames(ErrorString* errorString, const String& securityOrigin, PassRefPtr<RequestCacheNamesCallback> callback) { RefPtr<SecurityOrigin> secOrigin = SecurityOrigin::createFromString(securityOrigin); @@ -429,7 +429,7 @@ cache->dispatchKeys(new RequestCacheNames(securityOrigin, callback)); } -void InspectorCacheStorageAgent::requestEntries(ErrorString* errorString, const String& cacheId, int skipCount, int pageSize, PassRefPtrWillBeRawPtr<RequestEntriesCallback> callback) +void InspectorCacheStorageAgent::requestEntries(ErrorString* errorString, const String& cacheId, int skipCount, int pageSize, PassRefPtr<RequestEntriesCallback> callback) { String cacheName; OwnPtr<WebServiceWorkerCacheStorage> cache = assertCacheStorageAndNameForId(errorString, cacheId, &cacheName); @@ -444,7 +444,7 @@ cache->dispatchOpen(new GetCacheForRequestData(params, callback), WebString(cacheName)); } -void InspectorCacheStorageAgent::deleteCache(ErrorString* errorString, const String& cacheId, PassRefPtrWillBeRawPtr<DeleteCacheCallback> callback) +void InspectorCacheStorageAgent::deleteCache(ErrorString* errorString, const String& cacheId, PassRefPtr<DeleteCacheCallback> callback) { String cacheName; OwnPtr<WebServiceWorkerCacheStorage> cache = assertCacheStorageAndNameForId(errorString, cacheId, &cacheName); @@ -455,7 +455,7 @@ cache->dispatchDelete(new DeleteCache(callback), WebString(cacheName)); } -void InspectorCacheStorageAgent::deleteEntry(ErrorString* errorString, const String& cacheId, const String& request, PassRefPtrWillBeRawPtr<DeleteEntryCallback> callback) +void InspectorCacheStorageAgent::deleteEntry(ErrorString* errorString, const String& cacheId, const String& request, PassRefPtr<DeleteEntryCallback> callback) { String cacheName; OwnPtr<WebServiceWorkerCacheStorage> cache = assertCacheStorageAndNameForId(errorString, cacheId, &cacheName);
diff --git a/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.h b/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.h index d2ca7b0..8f0cc657 100644 --- a/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.h +++ b/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.h
@@ -28,10 +28,10 @@ DECLARE_VIRTUAL_TRACE(); - void requestCacheNames(ErrorString*, const String& securityOrigin, PassRefPtrWillBeRawPtr<RequestCacheNamesCallback>) override; - void requestEntries(ErrorString*, const String& cacheId, int skipCount, int pageSize, PassRefPtrWillBeRawPtr<RequestEntriesCallback>) override; - void deleteCache(ErrorString*, const String& cacheId, PassRefPtrWillBeRawPtr<DeleteCacheCallback>) override; - void deleteEntry(ErrorString*, const String& cacheId, const String& request, PassRefPtrWillBeRawPtr<DeleteEntryCallback>) override; + void requestCacheNames(ErrorString*, const String& securityOrigin, PassRefPtr<RequestCacheNamesCallback>) override; + void requestEntries(ErrorString*, const String& cacheId, int skipCount, int pageSize, PassRefPtr<RequestEntriesCallback>) override; + void deleteCache(ErrorString*, const String& cacheId, PassRefPtr<DeleteCacheCallback>) override; + void deleteEntry(ErrorString*, const String& cacheId, const String& request, PassRefPtr<DeleteEntryCallback>) override; private: explicit InspectorCacheStorageAgent();
diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp index 0f8f0d2..e6325a9 100644 --- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp +++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp
@@ -10,6 +10,7 @@ #include "core/html/HTMLCanvasElement.h" #include "core/html/HTMLDocument.h" #include "core/html/ImageData.h" +#include "core/imagebitmap/ImageBitmapOptions.h" #include "core/loader/EmptyClients.h" #include "core/testing/DummyPageHolder.h" #include "modules/canvas2d/CanvasGradient.h" @@ -452,8 +453,9 @@ OwnPtr<UnacceleratedImageBufferSurface> sourceSurface = adoptPtr(new UnacceleratedImageBufferSurface(sourceSize, NonOpaque)); sourceCanvas->createImageBufferUsingSurfaceForTesting(sourceSurface.release()); + const ImageBitmapOptions defaultOptions; // Go through an ImageBitmap to avoid triggering a display list fallback - RefPtrWillBeRawPtr<ImageBitmap> sourceImageBitmap = ImageBitmap::create(sourceCanvas, IntRect(IntPoint(0, 0), sourceSize)); + RefPtrWillBeRawPtr<ImageBitmap> sourceImageBitmap = ImageBitmap::create(sourceCanvas, IntRect(IntPoint(0, 0), sourceSize), defaultOptions); context2d()->drawImage(sourceImageBitmap.get(), 0, 0, 1, 1, 0, 0, 1, 1, exceptionState); EXPECT_FALSE(exceptionState.hadException()); @@ -475,8 +477,9 @@ OwnPtr<UnacceleratedImageBufferSurface> sourceSurface = adoptPtr(new UnacceleratedImageBufferSurface(sourceSize, NonOpaque)); sourceCanvas->createImageBufferUsingSurfaceForTesting(sourceSurface.release()); + const ImageBitmapOptions defaultOptions; // Go through an ImageBitmap to avoid triggering a display list fallback - RefPtrWillBeRawPtr<ImageBitmap> sourceImageBitmap = ImageBitmap::create(sourceCanvas, IntRect(IntPoint(0, 0), sourceSize)); + RefPtrWillBeRawPtr<ImageBitmap> sourceImageBitmap = ImageBitmap::create(sourceCanvas, IntRect(IntPoint(0, 0), sourceSize), defaultOptions); context2d()->drawImage(sourceImageBitmap.get(), 0, 0, 1, 1, 0, 0, 1, 1, exceptionState); EXPECT_FALSE(exceptionState.hadException()); @@ -664,8 +667,9 @@ canvas->setWidth(40); RefPtrWillBeRawPtr<ImageBitmap> imageBitmapDerived = nullptr; { - RefPtrWillBeRawPtr<ImageBitmap> imageBitmapFromCanvas = ImageBitmap::create(canvas, IntRect(0, 0, canvas->width(), canvas->height())); - imageBitmapDerived = ImageBitmap::create(imageBitmapFromCanvas.get(), IntRect(0, 0, 20, 20)); + const ImageBitmapOptions defaultOptions; + RefPtrWillBeRawPtr<ImageBitmap> imageBitmapFromCanvas = ImageBitmap::create(canvas, IntRect(0, 0, canvas->width(), canvas->height()), defaultOptions); + imageBitmapDerived = ImageBitmap::create(imageBitmapFromCanvas.get(), IntRect(0, 0, 20, 20), defaultOptions); } CanvasContextCreationAttributes attributes; CanvasRenderingContext2D* context = static_cast<CanvasRenderingContext2D*>(canvas->getCanvasRenderingContext("2d", attributes));
diff --git a/third_party/WebKit/Source/modules/filesystem/InspectorFileSystemAgent.cpp b/third_party/WebKit/Source/modules/filesystem/InspectorFileSystemAgent.cpp index 5d48bc21..56f14af6 100644 --- a/third_party/WebKit/Source/modules/filesystem/InspectorFileSystemAgent.cpp +++ b/third_party/WebKit/Source/modules/filesystem/InspectorFileSystemAgent.cpp
@@ -124,7 +124,7 @@ class FileSystemRootRequest final : public RefCountedWillBeGarbageCollectedFinalized<FileSystemRootRequest> { WTF_MAKE_NONCOPYABLE(FileSystemRootRequest); public: - static PassRefPtrWillBeRawPtr<FileSystemRootRequest> create(PassRefPtrWillBeRawPtr<RequestFileSystemRootCallback> requestCallback, const String& type) + static PassRefPtrWillBeRawPtr<FileSystemRootRequest> create(PassRefPtr<RequestFileSystemRootCallback> requestCallback, const String& type) { return adoptRefWillBeNoop(new FileSystemRootRequest(requestCallback, type)); } @@ -133,7 +133,6 @@ DEFINE_INLINE_TRACE() { - visitor->trace(m_requestCallback); } private: @@ -150,11 +149,11 @@ m_requestCallback->sendSuccess(static_cast<int>(errorCode), entry); } - FileSystemRootRequest(PassRefPtrWillBeRawPtr<RequestFileSystemRootCallback> requestCallback, const String& type) + FileSystemRootRequest(PassRefPtr<RequestFileSystemRootCallback> requestCallback, const String& type) : m_requestCallback(requestCallback) , m_type(type) { } - RefPtrWillBeMember<RequestFileSystemRootCallback> m_requestCallback; + RefPtr<RequestFileSystemRootCallback> m_requestCallback; String m_type; }; @@ -194,7 +193,7 @@ class DirectoryContentRequest final : public RefCountedWillBeGarbageCollectedFinalized<DirectoryContentRequest> { WTF_MAKE_NONCOPYABLE(DirectoryContentRequest); public: - static PassRefPtrWillBeRawPtr<DirectoryContentRequest> create(PassRefPtrWillBeRawPtr<RequestDirectoryContentCallback> requestCallback, const String& url) + static PassRefPtrWillBeRawPtr<DirectoryContentRequest> create(PassRefPtr<RequestDirectoryContentCallback> requestCallback, const String& url) { return adoptRefWillBeNoop(new DirectoryContentRequest(requestCallback, url)); } @@ -207,7 +206,6 @@ DEFINE_INLINE_VIRTUAL_TRACE() { - visitor->trace(m_requestCallback); visitor->trace(m_directoryReader); } @@ -226,13 +224,13 @@ m_requestCallback->sendSuccess(static_cast<int>(errorCode), entries); } - DirectoryContentRequest(PassRefPtrWillBeRawPtr<RequestDirectoryContentCallback> requestCallback, const String& url) + DirectoryContentRequest(PassRefPtr<RequestDirectoryContentCallback> requestCallback, const String& url) : m_requestCallback(requestCallback) , m_url(ParsedURLString, url) { } void readDirectoryEntries(); - RefPtrWillBeMember<RequestDirectoryContentCallback> m_requestCallback; + RefPtr<RequestDirectoryContentCallback> m_requestCallback; KURL m_url; RefPtr<Array<TypeBuilder::FileSystem::Entry>> m_entries; PersistentWillBeMember<DirectoryReader> m_directoryReader; @@ -323,7 +321,7 @@ class MetadataRequest final : public RefCountedWillBeGarbageCollectedFinalized<MetadataRequest> { WTF_MAKE_NONCOPYABLE(MetadataRequest); public: - static PassRefPtrWillBeRawPtr<MetadataRequest> create(PassRefPtrWillBeRawPtr<RequestMetadataCallback> requestCallback, const String& url) + static PassRefPtrWillBeRawPtr<MetadataRequest> create(PassRefPtr<RequestMetadataCallback> requestCallback, const String& url) { return adoptRefWillBeNoop(new MetadataRequest(requestCallback, url)); } @@ -336,7 +334,6 @@ DEFINE_INLINE_VIRTUAL_TRACE() { - visitor->trace(m_requestCallback); } private: @@ -354,11 +351,11 @@ m_requestCallback->sendSuccess(static_cast<int>(errorCode), metadata); } - MetadataRequest(PassRefPtrWillBeRawPtr<RequestMetadataCallback> requestCallback, const String& url) + MetadataRequest(PassRefPtr<RequestMetadataCallback> requestCallback, const String& url) : m_requestCallback(requestCallback) , m_url(ParsedURLString, url) { } - RefPtrWillBeMember<RequestMetadataCallback> m_requestCallback; + RefPtr<RequestMetadataCallback> m_requestCallback; KURL m_url; bool m_isDirectory; }; @@ -400,7 +397,7 @@ class FileContentRequest final : public EventListener { WTF_MAKE_NONCOPYABLE(FileContentRequest); public: - static PassRefPtrWillBeRawPtr<FileContentRequest> create(PassRefPtrWillBeRawPtr<RequestFileContentCallback> requestCallback, const String& url, bool readAsText, long long start, long long end, const String& charset) + static PassRefPtrWillBeRawPtr<FileContentRequest> create(PassRefPtr<RequestFileContentCallback> requestCallback, const String& url, bool readAsText, long long start, long long end, const String& charset) { return adoptRefWillBeNoop(new FileContentRequest(requestCallback, url, readAsText, start, end, charset)); } @@ -426,7 +423,6 @@ DEFINE_INLINE_VIRTUAL_TRACE() { - visitor->trace(m_requestCallback); visitor->trace(m_reader); EventListener::trace(visitor); } @@ -447,7 +443,7 @@ m_requestCallback->sendSuccess(static_cast<int>(errorCode), result, charset); } - FileContentRequest(PassRefPtrWillBeRawPtr<RequestFileContentCallback> requestCallback, const String& url, bool readAsText, long long start, long long end, const String& charset) + FileContentRequest(PassRefPtr<RequestFileContentCallback> requestCallback, const String& url, bool readAsText, long long start, long long end, const String& charset) : EventListener(EventListener::CPPEventListenerType) , m_requestCallback(requestCallback) , m_url(ParsedURLString, url) @@ -456,7 +452,7 @@ , m_end(end) , m_charset(charset) { } - RefPtrWillBeMember<RequestFileContentCallback> m_requestCallback; + RefPtr<RequestFileContentCallback> m_requestCallback; KURL m_url; bool m_readAsText; int m_start; @@ -531,7 +527,7 @@ class DeleteEntryRequest final : public RefCountedWillBeGarbageCollectedFinalized<DeleteEntryRequest> { public: - static PassRefPtrWillBeRawPtr<DeleteEntryRequest> create(PassRefPtrWillBeRawPtr<DeleteEntryCallback> requestCallback, const KURL& url) + static PassRefPtrWillBeRawPtr<DeleteEntryRequest> create(PassRefPtr<DeleteEntryCallback> requestCallback, const KURL& url) { return adoptRefWillBeNoop(new DeleteEntryRequest(requestCallback, url)); } @@ -544,7 +540,6 @@ DEFINE_INLINE_TRACE() { - visitor->trace(m_requestCallback); } private: @@ -585,11 +580,11 @@ m_requestCallback->sendSuccess(static_cast<int>(errorCode)); } - DeleteEntryRequest(PassRefPtrWillBeRawPtr<DeleteEntryCallback> requestCallback, const KURL& url) + DeleteEntryRequest(PassRefPtr<DeleteEntryCallback> requestCallback, const KURL& url) : m_requestCallback(requestCallback) , m_url(url) { } - RefPtrWillBeMember<DeleteEntryCallback> m_requestCallback; + RefPtr<DeleteEntryCallback> m_requestCallback; KURL m_url; }; @@ -664,7 +659,7 @@ m_state->setBoolean(FileSystemAgentState::fileSystemAgentEnabled, m_enabled); } -void InspectorFileSystemAgent::requestFileSystemRoot(ErrorString* error, const String& origin, const String& type, PassRefPtrWillBeRawPtr<RequestFileSystemRootCallback> requestCallback) +void InspectorFileSystemAgent::requestFileSystemRoot(ErrorString* error, const String& origin, const String& type, PassRefPtr<RequestFileSystemRootCallback> requestCallback) { if (!assertEnabled(error)) return; @@ -676,7 +671,7 @@ FileSystemRootRequest::create(requestCallback, type)->start(executionContext); } -void InspectorFileSystemAgent::requestDirectoryContent(ErrorString* error, const String& url, PassRefPtrWillBeRawPtr<RequestDirectoryContentCallback> requestCallback) +void InspectorFileSystemAgent::requestDirectoryContent(ErrorString* error, const String& url, PassRefPtr<RequestDirectoryContentCallback> requestCallback) { if (!assertEnabled(error)) return; @@ -688,7 +683,7 @@ DirectoryContentRequest::create(requestCallback, url)->start(executionContext); } -void InspectorFileSystemAgent::requestMetadata(ErrorString* error, const String& url, PassRefPtrWillBeRawPtr<RequestMetadataCallback> requestCallback) +void InspectorFileSystemAgent::requestMetadata(ErrorString* error, const String& url, PassRefPtr<RequestMetadataCallback> requestCallback) { if (!assertEnabled(error)) return; @@ -700,7 +695,7 @@ MetadataRequest::create(requestCallback, url)->start(executionContext); } -void InspectorFileSystemAgent::requestFileContent(ErrorString* error, const String& url, bool readAsText, const int* start, const int* end, const String* charset, PassRefPtrWillBeRawPtr<RequestFileContentCallback> requestCallback) +void InspectorFileSystemAgent::requestFileContent(ErrorString* error, const String& url, bool readAsText, const int* start, const int* end, const String* charset, PassRefPtr<RequestFileContentCallback> requestCallback) { if (!assertEnabled(error)) return; @@ -714,7 +709,7 @@ FileContentRequest::create(requestCallback, url, readAsText, startPosition, endPosition, charset ? *charset : "")->start(executionContext); } -void InspectorFileSystemAgent::deleteEntry(ErrorString* error, const String& urlString, PassRefPtrWillBeRawPtr<DeleteEntryCallback> requestCallback) +void InspectorFileSystemAgent::deleteEntry(ErrorString* error, const String& urlString, PassRefPtr<DeleteEntryCallback> requestCallback) { if (!assertEnabled(error)) return;
diff --git a/third_party/WebKit/Source/modules/filesystem/InspectorFileSystemAgent.h b/third_party/WebKit/Source/modules/filesystem/InspectorFileSystemAgent.h index fab4370..15eddb9 100644 --- a/third_party/WebKit/Source/modules/filesystem/InspectorFileSystemAgent.h +++ b/third_party/WebKit/Source/modules/filesystem/InspectorFileSystemAgent.h
@@ -51,11 +51,11 @@ void enable(ErrorString*) override; - void requestFileSystemRoot(ErrorString*, const String& origin, const String& typeString, PassRefPtrWillBeRawPtr<RequestFileSystemRootCallback>) override; - void requestDirectoryContent(ErrorString*, const String& url, PassRefPtrWillBeRawPtr<RequestDirectoryContentCallback>) override; - void requestMetadata(ErrorString*, const String& url, PassRefPtrWillBeRawPtr<RequestMetadataCallback>) override; - void requestFileContent(ErrorString*, const String& url, bool readAsText, const int* start, const int* end, const String* charset, PassRefPtrWillBeRawPtr<RequestFileContentCallback>) override; - void deleteEntry(ErrorString*, const String& url, PassRefPtrWillBeRawPtr<DeleteEntryCallback>) override; + void requestFileSystemRoot(ErrorString*, const String& origin, const String& typeString, PassRefPtr<RequestFileSystemRootCallback>) override; + void requestDirectoryContent(ErrorString*, const String& url, PassRefPtr<RequestDirectoryContentCallback>) override; + void requestMetadata(ErrorString*, const String& url, PassRefPtr<RequestMetadataCallback>) override; + void requestFileContent(ErrorString*, const String& url, bool readAsText, const int* start, const int* end, const String* charset, PassRefPtr<RequestFileContentCallback>) override; + void deleteEntry(ErrorString*, const String& url, PassRefPtr<DeleteEntryCallback>) override; void disable(ErrorString*) override; void restore() override;
diff --git a/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp b/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp index 5706846..ede4839 100644 --- a/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp +++ b/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp
@@ -88,7 +88,7 @@ class GetDatabaseNamesCallback final : public EventListener { WTF_MAKE_NONCOPYABLE(GetDatabaseNamesCallback); public: - static PassRefPtrWillBeRawPtr<GetDatabaseNamesCallback> create(PassRefPtrWillBeRawPtr<RequestDatabaseNamesCallback> requestCallback, const String& securityOrigin) + static PassRefPtrWillBeRawPtr<GetDatabaseNamesCallback> create(PassRefPtr<RequestDatabaseNamesCallback> requestCallback, const String& securityOrigin) { return adoptRefWillBeNoop(new GetDatabaseNamesCallback(requestCallback, securityOrigin)); } @@ -125,16 +125,15 @@ DEFINE_INLINE_VIRTUAL_TRACE() { - visitor->trace(m_requestCallback); EventListener::trace(visitor); } private: - GetDatabaseNamesCallback(PassRefPtrWillBeRawPtr<RequestDatabaseNamesCallback> requestCallback, const String& securityOrigin) + GetDatabaseNamesCallback(PassRefPtr<RequestDatabaseNamesCallback> requestCallback, const String& securityOrigin) : EventListener(EventListener::CPPEventListenerType) , m_requestCallback(requestCallback) , m_securityOrigin(securityOrigin) { } - RefPtrWillBeMember<RequestDatabaseNamesCallback> m_requestCallback; + RefPtr<RequestDatabaseNamesCallback> m_requestCallback; String m_securityOrigin; }; @@ -302,7 +301,7 @@ class DatabaseLoader final : public ExecutableWithDatabase { public: - static PassRefPtr<DatabaseLoader> create(ScriptState* scriptState, PassRefPtrWillBeRawPtr<RequestDatabaseCallback> requestCallback) + static PassRefPtr<DatabaseLoader> create(ScriptState* scriptState, PassRefPtr<RequestDatabaseCallback> requestCallback) { return adoptRef(new DatabaseLoader(scriptState, requestCallback)); } @@ -352,10 +351,10 @@ RequestCallback* requestCallback() override { return m_requestCallback.get(); } private: - DatabaseLoader(ScriptState* scriptState, PassRefPtrWillBeRawPtr<RequestDatabaseCallback> requestCallback) + DatabaseLoader(ScriptState* scriptState, PassRefPtr<RequestDatabaseCallback> requestCallback) : ExecutableWithDatabase(scriptState) , m_requestCallback(requestCallback) { } - RefPtrWillBePersistent<RequestDatabaseCallback> m_requestCallback; + RefPtr<RequestDatabaseCallback> m_requestCallback; }; static IDBKey* idbKeyFromInspectorObject(JSONObject* key) @@ -433,7 +432,7 @@ class OpenCursorCallback final : public EventListener { public: - static PassRefPtrWillBeRawPtr<OpenCursorCallback> create(ScriptState* scriptState, PassRefPtrWillBeRawPtr<RequestDataCallback> requestCallback, int skipCount, unsigned pageSize) + static PassRefPtrWillBeRawPtr<OpenCursorCallback> create(ScriptState* scriptState, PassRefPtr<RequestDataCallback> requestCallback, int skipCount, unsigned pageSize) { return adoptRefWillBeNoop(new OpenCursorCallback(scriptState, requestCallback, skipCount, pageSize)); } @@ -517,12 +516,11 @@ DEFINE_INLINE_VIRTUAL_TRACE() { - visitor->trace(m_requestCallback); EventListener::trace(visitor); } private: - OpenCursorCallback(ScriptState* scriptState, PassRefPtrWillBeRawPtr<RequestDataCallback> requestCallback, int skipCount, unsigned pageSize) + OpenCursorCallback(ScriptState* scriptState, PassRefPtr<RequestDataCallback> requestCallback, int skipCount, unsigned pageSize) : EventListener(EventListener::CPPEventListenerType) , m_scriptState(scriptState) , m_requestCallback(requestCallback) @@ -533,7 +531,7 @@ } RefPtr<ScriptState> m_scriptState; - RefPtrWillBeMember<RequestDataCallback> m_requestCallback; + RefPtr<RequestDataCallback> m_requestCallback; int m_skipCount; unsigned m_pageSize; RefPtr<Array<DataEntry>> m_result; @@ -541,7 +539,7 @@ class DataLoader final : public ExecutableWithDatabase { public: - static PassRefPtr<DataLoader> create(ScriptState* scriptState, PassRefPtrWillBeRawPtr<RequestDataCallback> requestCallback, const String& objectStoreName, const String& indexName, IDBKeyRange* idbKeyRange, int skipCount, unsigned pageSize) + static PassRefPtr<DataLoader> create(ScriptState* scriptState, PassRefPtr<RequestDataCallback> requestCallback, const String& objectStoreName, const String& indexName, IDBKeyRange* idbKeyRange, int skipCount, unsigned pageSize) { return adoptRef(new DataLoader(scriptState, requestCallback, objectStoreName, indexName, idbKeyRange, skipCount, pageSize)); } @@ -581,7 +579,7 @@ } RequestCallback* requestCallback() override { return m_requestCallback.get(); } - DataLoader(ScriptState* scriptState, PassRefPtrWillBeRawPtr<RequestDataCallback> requestCallback, const String& objectStoreName, const String& indexName, IDBKeyRange* idbKeyRange, int skipCount, unsigned pageSize) + DataLoader(ScriptState* scriptState, PassRefPtr<RequestDataCallback> requestCallback, const String& objectStoreName, const String& indexName, IDBKeyRange* idbKeyRange, int skipCount, unsigned pageSize) : ExecutableWithDatabase(scriptState) , m_requestCallback(requestCallback) , m_objectStoreName(objectStoreName) @@ -592,7 +590,7 @@ { } - RefPtrWillBePersistent<RequestDataCallback> m_requestCallback; + RefPtr<RequestDataCallback> m_requestCallback; String m_objectStoreName; String m_indexName; Persistent<IDBKeyRange> m_idbKeyRange; @@ -661,7 +659,7 @@ return idbFactory; } -void InspectorIndexedDBAgent::requestDatabaseNames(ErrorString* errorString, const String& securityOrigin, PassRefPtrWillBeRawPtr<RequestDatabaseNamesCallback> requestCallback) +void InspectorIndexedDBAgent::requestDatabaseNames(ErrorString* errorString, const String& securityOrigin, PassRefPtr<RequestDatabaseNamesCallback> requestCallback) { LocalFrame* frame = m_inspectedFrames->frameWithSecurityOrigin(securityOrigin); Document* document = assertDocument(errorString, frame); @@ -684,7 +682,7 @@ idbRequest->addEventListener(EventTypeNames::success, GetDatabaseNamesCallback::create(requestCallback, document->securityOrigin()->toRawString()), false); } -void InspectorIndexedDBAgent::requestDatabase(ErrorString* errorString, const String& securityOrigin, const String& databaseName, PassRefPtrWillBeRawPtr<RequestDatabaseCallback> requestCallback) +void InspectorIndexedDBAgent::requestDatabase(ErrorString* errorString, const String& securityOrigin, const String& databaseName, PassRefPtr<RequestDatabaseCallback> requestCallback) { LocalFrame* frame = m_inspectedFrames->frameWithSecurityOrigin(securityOrigin); Document* document = assertDocument(errorString, frame); @@ -702,7 +700,7 @@ databaseLoader->start(idbFactory, document->securityOrigin(), databaseName); } -void InspectorIndexedDBAgent::requestData(ErrorString* errorString, const String& securityOrigin, const String& databaseName, const String& objectStoreName, const String& indexName, int skipCount, int pageSize, const RefPtr<JSONObject>* keyRange, const PassRefPtrWillBeRawPtr<RequestDataCallback> requestCallback) +void InspectorIndexedDBAgent::requestData(ErrorString* errorString, const String& securityOrigin, const String& databaseName, const String& objectStoreName, const String& indexName, int skipCount, int pageSize, const RefPtr<JSONObject>* keyRange, const PassRefPtr<RequestDataCallback> requestCallback) { LocalFrame* frame = m_inspectedFrames->frameWithSecurityOrigin(securityOrigin); Document* document = assertDocument(errorString, frame); @@ -729,7 +727,7 @@ class ClearObjectStoreListener final : public EventListener { WTF_MAKE_NONCOPYABLE(ClearObjectStoreListener); public: - static PassRefPtrWillBeRawPtr<ClearObjectStoreListener> create(PassRefPtrWillBeRawPtr<ClearObjectStoreCallback> requestCallback) + static PassRefPtrWillBeRawPtr<ClearObjectStoreListener> create(PassRefPtr<ClearObjectStoreCallback> requestCallback) { return adoptRefWillBeNoop(new ClearObjectStoreListener(requestCallback)); } @@ -755,29 +753,28 @@ DEFINE_INLINE_VIRTUAL_TRACE() { - visitor->trace(m_requestCallback); EventListener::trace(visitor); } private: - ClearObjectStoreListener(PassRefPtrWillBeRawPtr<ClearObjectStoreCallback> requestCallback) + ClearObjectStoreListener(PassRefPtr<ClearObjectStoreCallback> requestCallback) : EventListener(EventListener::CPPEventListenerType) , m_requestCallback(requestCallback) { } - RefPtrWillBeMember<ClearObjectStoreCallback> m_requestCallback; + RefPtr<ClearObjectStoreCallback> m_requestCallback; }; class ClearObjectStore final : public ExecutableWithDatabase { public: - static PassRefPtr<ClearObjectStore> create(ScriptState* scriptState, const String& objectStoreName, PassRefPtrWillBeRawPtr<ClearObjectStoreCallback> requestCallback) + static PassRefPtr<ClearObjectStore> create(ScriptState* scriptState, const String& objectStoreName, PassRefPtr<ClearObjectStoreCallback> requestCallback) { return adoptRef(new ClearObjectStore(scriptState, objectStoreName, requestCallback)); } - ClearObjectStore(ScriptState* scriptState, const String& objectStoreName, PassRefPtrWillBeRawPtr<ClearObjectStoreCallback> requestCallback) + ClearObjectStore(ScriptState* scriptState, const String& objectStoreName, PassRefPtr<ClearObjectStoreCallback> requestCallback) : ExecutableWithDatabase(scriptState) , m_objectStoreName(objectStoreName) , m_requestCallback(requestCallback) @@ -813,10 +810,10 @@ RequestCallback* requestCallback() override { return m_requestCallback.get(); } private: const String m_objectStoreName; - RefPtrWillBePersistent<ClearObjectStoreCallback> m_requestCallback; + RefPtr<ClearObjectStoreCallback> m_requestCallback; }; -void InspectorIndexedDBAgent::clearObjectStore(ErrorString* errorString, const String& securityOrigin, const String& databaseName, const String& objectStoreName, PassRefPtrWillBeRawPtr<ClearObjectStoreCallback> requestCallback) +void InspectorIndexedDBAgent::clearObjectStore(ErrorString* errorString, const String& securityOrigin, const String& databaseName, const String& objectStoreName, PassRefPtr<ClearObjectStoreCallback> requestCallback) { LocalFrame* frame = m_inspectedFrames->frameWithSecurityOrigin(securityOrigin); Document* document = assertDocument(errorString, frame);
diff --git a/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.h b/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.h index 0cc331f..7d4af3e 100644 --- a/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.h +++ b/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.h
@@ -55,10 +55,10 @@ // Called from the front-end. void enable(ErrorString*) override; - void requestDatabaseNames(ErrorString*, const String& securityOrigin, PassRefPtrWillBeRawPtr<RequestDatabaseNamesCallback>) override; - void requestDatabase(ErrorString*, const String& securityOrigin, const String& databaseName, PassRefPtrWillBeRawPtr<RequestDatabaseCallback>) override; - void requestData(ErrorString*, const String& securityOrigin, const String& databaseName, const String& objectStoreName, const String& indexName, int skipCount, int pageSize, const RefPtr<JSONObject>* keyRange, PassRefPtrWillBeRawPtr<RequestDataCallback>) override; - void clearObjectStore(ErrorString*, const String& in_securityOrigin, const String& in_databaseName, const String& in_objectStoreName, PassRefPtrWillBeRawPtr<ClearObjectStoreCallback>) override; + void requestDatabaseNames(ErrorString*, const String& securityOrigin, PassRefPtr<RequestDatabaseNamesCallback>) override; + void requestDatabase(ErrorString*, const String& securityOrigin, const String& databaseName, PassRefPtr<RequestDatabaseCallback>) override; + void requestData(ErrorString*, const String& securityOrigin, const String& databaseName, const String& objectStoreName, const String& indexName, int skipCount, int pageSize, const RefPtr<JSONObject>* keyRange, PassRefPtr<RequestDataCallback>) override; + void clearObjectStore(ErrorString*, const String& in_securityOrigin, const String& in_databaseName, const String& in_objectStoreName, PassRefPtr<ClearObjectStoreCallback>) override; private: explicit InspectorIndexedDBAgent(InspectedFrames*);
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCPeerConnection.idl b/third_party/WebKit/Source/modules/mediastream/RTCPeerConnection.idl index c9d1435a..deae548 100644 --- a/third_party/WebKit/Source/modules/mediastream/RTCPeerConnection.idl +++ b/third_party/WebKit/Source/modules/mediastream/RTCPeerConnection.idl
@@ -98,13 +98,11 @@ // attribute EventHandler onicegatheringstatechange; // https://w3c.github.io/webrtc-pc/#legacy-interface-extensions - // TODO(guidou): The failureCallback argument should be non-optional. - [CallWith=ExecutionContext, RaisesException] void createOffer(RTCSessionDescriptionCallback successCallback, [Default=Undefined] optional RTCErrorCallback failureCallback, optional Dictionary rtcOfferOptions); + [CallWith=ExecutionContext, RaisesException] void createOffer(RTCSessionDescriptionCallback successCallback, RTCErrorCallback failureCallback, optional Dictionary rtcOfferOptions); + // TODO(guidou): There should be no mediaConstraints argument. + [CallWith=ExecutionContext, RaisesException] void createAnswer(RTCSessionDescriptionCallback successCallback, RTCErrorCallback failureCallback, optional Dictionary mediaConstraints); // TODO(guidou): None of the arguments should be optional. [CallWith=ExecutionContext, RaisesException] void setLocalDescription(RTCSessionDescription description, [Default=Undefined] optional VoidCallback successCallback, [Default=Undefined] optional RTCErrorCallback failureCallback); - // TODO(guidou): The failureCallback argument should be non-optional, and - // there should be no mediaConstraints argument. - [CallWith=ExecutionContext, RaisesException] void createAnswer(RTCSessionDescriptionCallback successCallback, [Default=Undefined] optional RTCErrorCallback failureCallback, optional Dictionary mediaConstraints); // TODO(guidou): The successCallback and failureCallback arguments should be // non-optional. [CallWith=ExecutionContext, RaisesException] void setRemoteDescription(RTCSessionDescription description, [Default=Undefined] optional VoidCallback successCallback, [Default=Undefined] optional RTCErrorCallback failureCallback);
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioParamTimeline.cpp b/third_party/WebKit/Source/modules/webaudio/AudioParamTimeline.cpp index 732fd6da..7ac12a5 100644 --- a/third_party/WebKit/Source/modules/webaudio/AudioParamTimeline.cpp +++ b/third_party/WebKit/Source/modules/webaudio/AudioParamTimeline.cpp
@@ -41,8 +41,9 @@ // For a SetTarget event, if the relative difference between the current value and the target value // is less than this, consider them the same and just output the target value. This value MUST be // larger than the single precision epsilon of 5.960465e-8. Due to round-off, this value is not -// achievable in general. -const float kSetTargetThreshold = 5e-7; +// achievable in general. This value can vary across the platforms (CPU) and thus it is determined +// experimentally. +const float kSetTargetThreshold = 1.5e-6; // For a SetTarget event, if the target value is 0, and the current value is less than this // threshold, consider the curve to have converged to 0. We need a separate case from
diff --git a/third_party/WebKit/Source/modules/webdatabase/InspectorDatabaseAgent.cpp b/third_party/WebKit/Source/modules/webdatabase/InspectorDatabaseAgent.cpp index 91c0436..2447573 100644 --- a/third_party/WebKit/Source/modules/webdatabase/InspectorDatabaseAgent.cpp +++ b/third_party/WebKit/Source/modules/webdatabase/InspectorDatabaseAgent.cpp
@@ -68,7 +68,7 @@ class StatementCallback final : public SQLStatementCallback { public: - static StatementCallback* create(PassRefPtrWillBeRawPtr<ExecuteSQLCallback> requestCallback) + static StatementCallback* create(PassRefPtr<ExecuteSQLCallback> requestCallback) { return new StatementCallback(requestCallback); } @@ -77,7 +77,6 @@ DEFINE_INLINE_VIRTUAL_TRACE() { - visitor->trace(m_requestCallback); SQLStatementCallback::trace(visitor); } @@ -105,14 +104,14 @@ } private: - StatementCallback(PassRefPtrWillBeRawPtr<ExecuteSQLCallback> requestCallback) + StatementCallback(PassRefPtr<ExecuteSQLCallback> requestCallback) : m_requestCallback(requestCallback) { } - RefPtrWillBeMember<ExecuteSQLCallback> m_requestCallback; + RefPtr<ExecuteSQLCallback> m_requestCallback; }; class StatementErrorCallback final : public SQLStatementErrorCallback { public: - static StatementErrorCallback* create(PassRefPtrWillBeRawPtr<ExecuteSQLCallback> requestCallback) + static StatementErrorCallback* create(PassRefPtr<ExecuteSQLCallback> requestCallback) { return new StatementErrorCallback(requestCallback); } @@ -121,7 +120,6 @@ DEFINE_INLINE_VIRTUAL_TRACE() { - visitor->trace(m_requestCallback); SQLStatementErrorCallback::trace(visitor); } @@ -132,14 +130,14 @@ } private: - StatementErrorCallback(PassRefPtrWillBeRawPtr<ExecuteSQLCallback> requestCallback) + StatementErrorCallback(PassRefPtr<ExecuteSQLCallback> requestCallback) : m_requestCallback(requestCallback) { } - RefPtrWillBeMember<ExecuteSQLCallback> m_requestCallback; + RefPtr<ExecuteSQLCallback> m_requestCallback; }; class TransactionCallback final : public SQLTransactionCallback { public: - static TransactionCallback* create(const String& sqlStatement, PassRefPtrWillBeRawPtr<ExecuteSQLCallback> requestCallback) + static TransactionCallback* create(const String& sqlStatement, PassRefPtr<ExecuteSQLCallback> requestCallback) { return new TransactionCallback(sqlStatement, requestCallback); } @@ -148,7 +146,6 @@ DEFINE_INLINE_VIRTUAL_TRACE() { - visitor->trace(m_requestCallback); SQLTransactionCallback::trace(visitor); } @@ -164,16 +161,16 @@ return true; } private: - TransactionCallback(const String& sqlStatement, PassRefPtrWillBeRawPtr<ExecuteSQLCallback> requestCallback) + TransactionCallback(const String& sqlStatement, PassRefPtr<ExecuteSQLCallback> requestCallback) : m_sqlStatement(sqlStatement) , m_requestCallback(requestCallback) { } String m_sqlStatement; - RefPtrWillBeMember<ExecuteSQLCallback> m_requestCallback; + RefPtr<ExecuteSQLCallback> m_requestCallback; }; class TransactionErrorCallback final : public SQLTransactionErrorCallback { public: - static TransactionErrorCallback* create(PassRefPtrWillBeRawPtr<ExecuteSQLCallback> requestCallback) + static TransactionErrorCallback* create(PassRefPtr<ExecuteSQLCallback> requestCallback) { return new TransactionErrorCallback(requestCallback); } @@ -182,7 +179,6 @@ DEFINE_INLINE_VIRTUAL_TRACE() { - visitor->trace(m_requestCallback); SQLTransactionErrorCallback::trace(visitor); } @@ -192,9 +188,9 @@ return true; } private: - TransactionErrorCallback(PassRefPtrWillBeRawPtr<ExecuteSQLCallback> requestCallback) + TransactionErrorCallback(PassRefPtr<ExecuteSQLCallback> requestCallback) : m_requestCallback(requestCallback) { } - RefPtrWillBeMember<ExecuteSQLCallback> m_requestCallback; + RefPtr<ExecuteSQLCallback> m_requestCallback; }; class TransactionSuccessCallback final : public VoidCallback { @@ -292,9 +288,9 @@ } } -void InspectorDatabaseAgent::executeSQL(ErrorString*, const String& databaseId, const String& query, PassRefPtrWillBeRawPtr<ExecuteSQLCallback> prpRequestCallback) +void InspectorDatabaseAgent::executeSQL(ErrorString*, const String& databaseId, const String& query, PassRefPtr<ExecuteSQLCallback> prpRequestCallback) { - RefPtrWillBeRawPtr<ExecuteSQLCallback> requestCallback = prpRequestCallback; + RefPtr<ExecuteSQLCallback> requestCallback = prpRequestCallback; if (!m_enabled) { requestCallback->sendFailure("Database agent is not enabled");
diff --git a/third_party/WebKit/Source/modules/webdatabase/InspectorDatabaseAgent.h b/third_party/WebKit/Source/modules/webdatabase/InspectorDatabaseAgent.h index ea90b1ba..981aba5 100644 --- a/third_party/WebKit/Source/modules/webdatabase/InspectorDatabaseAgent.h +++ b/third_party/WebKit/Source/modules/webdatabase/InspectorDatabaseAgent.h
@@ -64,7 +64,7 @@ // Called from the front-end. void enable(ErrorString*) override; void getDatabaseTableNames(ErrorString*, const String& databaseId, RefPtr<TypeBuilder::Array<String>>& names) override; - void executeSQL(ErrorString*, const String& databaseId, const String& query, PassRefPtrWillBeRawPtr<ExecuteSQLCallback>) override; + void executeSQL(ErrorString*, const String& databaseId, const String& query, PassRefPtr<ExecuteSQLCallback>) override; void didOpenDatabase(Database*, const String& domain, const String& name, const String& version); private:
diff --git a/third_party/WebKit/Source/modules/webgl/PRESUBMIT.py b/third_party/WebKit/Source/modules/webgl/PRESUBMIT.py new file mode 100644 index 0000000..ef41f36 --- /dev/null +++ b/third_party/WebKit/Source/modules/webgl/PRESUBMIT.py
@@ -0,0 +1,40 @@ +# Copyright (c) 2016 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. + +"""Top-level presubmit script for gpu. + +See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts +for more details about the presubmit API built into depot_tools. +""" + + +import re + + +def PostUploadHook(cl, change, output_api): + """git cl upload will call this hook after the issue is created/modified. + + This hook adds extra try bots list to the CL description in order to run + extra GPU tests in addition to CQ try bots. + """ + rietveld_obj = cl.RpcServer() + issue = cl.issue + description = rietveld_obj.get_description(issue) + if re.search(r'^CQ_INCLUDE_TRYBOTS=.*', description, re.M | re.I): + return [] + + bots = [ + 'tryserver.chromium.win:win_optional_gpu_tests_rel', + ] + + results = [] + new_description = description + new_description += '\nCQ_INCLUDE_TRYBOTS=%s' % ';'.join(bots) + results.append(output_api.PresubmitNotifyResult( + 'Automatically added optional GPU tests to run on CQ.')) + + if new_description != description: + rietveld_obj.update_description(issue, new_description) + + return results
diff --git a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.in b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.in index b23b29f..9a673b5c 100644 --- a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.in +++ b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.in
@@ -61,7 +61,7 @@ Database status=stable DecodeToYUV status=experimental DeviceLight status=experimental -DeviceOrientationAbsolute status=experimental +DeviceOrientationAbsolute status=stable DisplayList2dCanvas status=stable DurableStorage status=experimental ForceDisplayList2dCanvas
diff --git a/third_party/WebKit/Source/platform/geometry/FloatQuad.cpp b/third_party/WebKit/Source/platform/geometry/FloatQuad.cpp index 3177f2d..a65aebe 100644 --- a/third_party/WebKit/Source/platform/geometry/FloatQuad.cpp +++ b/third_party/WebKit/Source/platform/geometry/FloatQuad.cpp
@@ -34,6 +34,10 @@ #include <cmath> #include <limits> +#ifndef NDEBUG +#include <stdio.h> +#endif + namespace blink { static inline float min4(float a, float b, float c, float d) @@ -241,4 +245,11 @@ return determinant(m_p2 - m_p1, m_p3 - m_p2) < 0; } +#ifndef NDEBUG +void FloatQuad::show() const +{ + fprintf(stderr, "FloatQuad: [p1=(%f,%f), p2=(%f,%f), p3=(%f,%f), p4=(%f,%f))]\n", m_p1.x(), m_p1.y(), m_p2.x(), m_p2.y(), m_p3.x(), m_p3.y(), m_p4.x(), m_p4.y()); +} +#endif + } // namespace blink
diff --git a/third_party/WebKit/Source/platform/geometry/FloatQuad.h b/third_party/WebKit/Source/platform/geometry/FloatQuad.h index 7241973e..c7a237f 100644 --- a/third_party/WebKit/Source/platform/geometry/FloatQuad.h +++ b/third_party/WebKit/Source/platform/geometry/FloatQuad.h
@@ -147,6 +147,11 @@ // Note that output is undefined when all points are colinear. bool isCounterclockwise() const; +#ifndef NDEBUG + // Prints debugging information for this object. + void show() const; +#endif + private: FloatPoint m_p1; FloatPoint m_p2;
diff --git a/third_party/WebKit/Source/platform/geometry/TransformState.cpp b/third_party/WebKit/Source/platform/geometry/TransformState.cpp index 918a73c..d50b16d2f 100644 --- a/third_party/WebKit/Source/platform/geometry/TransformState.cpp +++ b/third_party/WebKit/Source/platform/geometry/TransformState.cpp
@@ -44,7 +44,7 @@ m_accumulatedTransform.clear(); if (other.m_accumulatedTransform) - m_accumulatedTransform = adoptPtr(new TransformationMatrix(*other.m_accumulatedTransform)); + m_accumulatedTransform = TransformationMatrix::create(*other.m_accumulatedTransform); return *this; } @@ -118,12 +118,12 @@ // If we have an accumulated transform from last time, multiply in this transform if (m_accumulatedTransform) { if (m_direction == ApplyTransformDirection) - m_accumulatedTransform = adoptPtr(new TransformationMatrix(transformFromContainer * *m_accumulatedTransform)); + m_accumulatedTransform = TransformationMatrix::create(transformFromContainer * *m_accumulatedTransform); else m_accumulatedTransform->multiply(transformFromContainer); } else if (accumulate == AccumulateTransform) { // Make one if we started to accumulate - m_accumulatedTransform = adoptPtr(new TransformationMatrix(transformFromContainer)); + m_accumulatedTransform = TransformationMatrix::create(transformFromContainer); } if (accumulate == FlattenTransform) {
diff --git a/third_party/WebKit/Source/platform/heap/ThreadState.cpp b/third_party/WebKit/Source/platform/heap/ThreadState.cpp index 610e7d1..2b953d83 100644 --- a/third_party/WebKit/Source/platform/heap/ThreadState.cpp +++ b/third_party/WebKit/Source/platform/heap/ThreadState.cpp
@@ -627,17 +627,6 @@ // the major GC requests object grouping. if (gcType == BlinkGC::V8MajorGC) completeSweep(); - - // The fact that the PageNavigation GC is scheduled means that there is - // a dead frame. In common cases, a sequence of Oilpan's GC => V8 GC => - // Oilpan's GC is needed to collect the dead frame. So we force the - // PageNavigation GC before running the V8 GC. - if (gcState() == PageNavigationGCScheduled) { -#if PRINT_HEAP_STATS - dataLogF("Scheduled PageNavigationGC\n"); -#endif - Heap::collectGarbage(BlinkGC::HeapPointersOnStack, BlinkGC::GCWithSweep, BlinkGC::PageNavigationGC); - } } void ThreadState::schedulePageNavigationGCIfNeeded(float estimatedRemovalRatio)
diff --git a/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp b/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp index de0000b..9f4b3dd 100644 --- a/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp +++ b/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp
@@ -96,10 +96,9 @@ TRACE_EVENT0("blink", "ScrollAnimator::scroll"); if (granularity == ScrollByPrecisePixel) { - if (hasRunningAnimation()) { - abortAnimation(); - resetAnimationState(); - } + // Cancel scroll animation because asked to instant scroll. + if (hasRunningAnimation()) + cancelAnimation(); return ScrollAnimatorBase::userScroll(orientation, granularity, step, delta); } @@ -110,7 +109,7 @@ FloatPoint targetPos = desiredTargetPosition(); targetPos.moveBy(pixelDelta); - if (m_animationCurve) { + if (m_animationCurve && m_runState != RunState::WaitingToCancelOnCompositor) { if ((targetPos - m_targetOffset).isZero()) { // Report unused delta only if there is no animation running. See // comment below regarding scroll latching.
diff --git a/third_party/WebKit/Source/platform/scroll/ScrollbarThemeMacOverlayAPI.mm b/third_party/WebKit/Source/platform/scroll/ScrollbarThemeMacOverlayAPI.mm index 960d38e..ef1d3289 100644 --- a/third_party/WebKit/Source/platform/scroll/ScrollbarThemeMacOverlayAPI.mm +++ b/third_party/WebKit/Source/platform/scroll/ScrollbarThemeMacOverlayAPI.mm
@@ -89,7 +89,7 @@ namespace blink { -typedef HashMap<ScrollbarThemeClient*, RetainPtr<BlinkScrollbarObserver> > ScrollbarPainterMap; +typedef HashMap<ScrollbarThemeClient*, RetainPtr<BlinkScrollbarObserver>> ScrollbarPainterMap; static ScrollbarPainterMap& scrollbarPainterMap() {
diff --git a/third_party/WebKit/Source/platform/transforms/TransformationMatrix.h b/third_party/WebKit/Source/platform/transforms/TransformationMatrix.h index f11d193..7e2cf9d89 100644 --- a/third_party/WebKit/Source/platform/transforms/TransformationMatrix.h +++ b/third_party/WebKit/Source/platform/transforms/TransformationMatrix.h
@@ -33,6 +33,7 @@ #include "wtf/Alignment.h" #include "wtf/Allocator.h" #include "wtf/CPU.h" +#include "wtf/PassOwnPtr.h" #include <string.h> // for memcpy namespace blink { @@ -60,6 +61,26 @@ typedef double Matrix4[4][4]; #endif + static PassOwnPtr<TransformationMatrix> create() + { + return adoptPtr(new TransformationMatrix()); + } + static PassOwnPtr<TransformationMatrix> create(const TransformationMatrix& t) + { + return adoptPtr(new TransformationMatrix(t)); + } + static PassOwnPtr<TransformationMatrix> create(double a, double b, double c, double d, double e, double f) + { + return adoptPtr(new TransformationMatrix(a, b, c, d, e, f)); + } + static PassOwnPtr<TransformationMatrix> create(double m11, double m12, double m13, double m14, + double m21, double m22, double m23, double m24, + double m31, double m32, double m33, double m34, + double m41, double m42, double m43, double m44) + { + return adoptPtr(new TransformationMatrix(m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44)); + } + TransformationMatrix() { checkAlignment();
diff --git a/third_party/WebKit/Source/web/AssertMatchingEnums.cpp b/third_party/WebKit/Source/web/AssertMatchingEnums.cpp index e1fcc89..48641832 100644 --- a/third_party/WebKit/Source/web/AssertMatchingEnums.cpp +++ b/third_party/WebKit/Source/web/AssertMatchingEnums.cpp
@@ -151,6 +151,7 @@ STATIC_ASSERT_ENUM(WebAXEventBlur, AXObjectCache::AXBlur); STATIC_ASSERT_ENUM(WebAXEventCheckedStateChanged, AXObjectCache::AXCheckedStateChanged); STATIC_ASSERT_ENUM(WebAXEventChildrenChanged, AXObjectCache::AXChildrenChanged); +STATIC_ASSERT_ENUM(WebAXEventClicked, AXObjectCache::AXClicked); STATIC_ASSERT_ENUM(WebAXEventDocumentSelectionChanged, AXObjectCache::AXDocumentSelectionChanged); STATIC_ASSERT_ENUM(WebAXEventFocus, AXObjectCache::AXFocusedUIElementChanged); STATIC_ASSERT_ENUM(WebAXEventHide, AXObjectCache::AXHide);
diff --git a/third_party/WebKit/Source/web/TextFinder.cpp b/third_party/WebKit/Source/web/TextFinder.cpp index c87f34bd..27d8ab2 100644 --- a/third_party/WebKit/Source/web/TextFinder.cpp +++ b/third_party/WebKit/Source/web/TextFinder.cpp
@@ -542,7 +542,7 @@ void TextFinder::findMatchRects(WebVector<WebFloatRect>& outputRects) { Vector<WebFloatRect> matchRects; - for (WebLocalFrameImpl* frame = &ownerFrame(); frame; frame = toWebLocalFrameImpl(frame->traverseNext(false))) + for (WebLocalFrameImpl* frame = &ownerFrame(); frame; frame = toWebLocalFrameImpl(frame->traverseNextLocal(false))) frame->ensureTextFinder().appendFindMatchRects(matchRects); outputRects = matchRects; @@ -564,7 +564,7 @@ int indexInBestFrame = -1; float distanceInBestFrame = FLT_MAX; - for (WebLocalFrameImpl* frame = &ownerFrame(); frame; frame = toWebLocalFrameImpl(frame->traverseNext(false))) { + for (WebLocalFrameImpl* frame = &ownerFrame(); frame; frame = toWebLocalFrameImpl(frame->traverseNextLocal(false))) { float distanceInFrame; TextFinder& finder = frame->ensureTextFinder(); int indexInFrame = finder.nearestFindMatch(point, distanceInFrame); @@ -711,7 +711,7 @@ WebLocalFrameImpl* mainFrameImpl = ownerFrame().viewImpl()->mainFrameImpl(); // Iterate from the main frame up to (but not including) |frame| and // add up the number of matches found so far. - for (WebLocalFrameImpl* it = mainFrameImpl; it != frame; it = toWebLocalFrameImpl(it->traverseNext(true))) { + for (WebLocalFrameImpl* it = mainFrameImpl; it != frame; it = toWebLocalFrameImpl(it->traverseNextLocal(true))) { TextFinder& finder = it->ensureTextFinder(); if (finder.m_lastMatchCount > 0) ordinal += finder.m_lastMatchCount;
diff --git a/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp b/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp index 960ea66d..6958768 100644 --- a/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp +++ b/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp
@@ -34,7 +34,6 @@ #include "bindings/core/v8/V8Binding.h" #include "core/InspectorBackendDispatcher.h" #include "core/InspectorFrontend.h" -#include "core/frame/FrameConsole.h" #include "core/frame/FrameView.h" #include "core/frame/LocalFrame.h" #include "core/frame/Settings.h" @@ -271,25 +270,6 @@ ClientMessageLoopAdapter* ClientMessageLoopAdapter::s_instance = nullptr; -class PageInjectedScriptHostClient: public InjectedScriptHostClient { -public: - PageInjectedScriptHostClient() { } - - ~PageInjectedScriptHostClient() override { } - - void muteWarningsAndDeprecations() - { - FrameConsole::mute(); - UseCounter::muteForInspector(); - } - - void unmuteWarningsAndDeprecations() - { - FrameConsole::unmute(); - UseCounter::unmuteForInspector(); - } -}; - class DebuggerTask : public InspectorTaskRunner::Task { public: DebuggerTask(int sessionId, PassOwnPtr<WebDevToolsAgent::MessageDescriptor> descriptor) @@ -381,14 +361,17 @@ ClientMessageLoopAdapter::ensureMainThreadDebuggerCreated(m_client); MainThreadDebugger* mainThreadDebugger = MainThreadDebugger::instance(); - m_injectedScriptManager = InjectedScriptManager::create(mainThreadDebugger); - InjectedScriptManager* injectedScriptManager = m_injectedScriptManager.get(); - OwnPtrWillBeRawPtr<InspectorInspectorAgent> inspectorAgentPtr(InspectorInspectorAgent::create(injectedScriptManager)); + OwnPtrWillBeRawPtr<InspectorInspectorAgent> inspectorAgentPtr(InspectorInspectorAgent::create()); m_inspectorAgent = inspectorAgentPtr.get(); m_agents.append(inspectorAgentPtr.release()); - OwnPtrWillBeRawPtr<InspectorDOMAgent> domAgentPtr(InspectorDOMAgent::create(m_inspectedFrames.get(), injectedScriptManager, m_overlay.get())); + OwnPtrWillBeRawPtr<PageRuntimeAgent> pageRuntimeAgentPtr(PageRuntimeAgent::create(this, mainThreadDebugger->debugger(), m_inspectedFrames.get())); + m_pageRuntimeAgent = pageRuntimeAgentPtr.get(); + m_agents.append(pageRuntimeAgentPtr.release()); + + v8::Isolate* isolate = V8PerIsolateData::mainThreadIsolate(); + OwnPtrWillBeRawPtr<InspectorDOMAgent> domAgentPtr(InspectorDOMAgent::create(isolate, m_inspectedFrames.get(), m_pageRuntimeAgent->v8Agent(), m_overlay.get())); m_domAgent = domAgentPtr.get(); m_agents.append(domAgentPtr.release()); @@ -396,11 +379,7 @@ m_layerTreeAgent = layerTreeAgentPtr.get(); m_agents.append(layerTreeAgentPtr.release()); - OwnPtrWillBeRawPtr<PageRuntimeAgent> pageRuntimeAgentPtr(PageRuntimeAgent::create(injectedScriptManager, this, mainThreadDebugger->debugger(), m_inspectedFrames.get())); - m_pageRuntimeAgent = pageRuntimeAgentPtr.get(); - m_agents.append(pageRuntimeAgentPtr.release()); - - OwnPtrWillBeRawPtr<PageConsoleAgent> pageConsoleAgentPtr = PageConsoleAgent::create(injectedScriptManager, m_domAgent, m_inspectedFrames.get()); + OwnPtrWillBeRawPtr<PageConsoleAgent> pageConsoleAgentPtr = PageConsoleAgent::create(m_pageRuntimeAgent->v8Agent(), m_domAgent, m_inspectedFrames.get()); m_pageConsoleAgent = pageConsoleAgentPtr.get(); OwnPtrWillBeRawPtr<InspectorWorkerAgent> workerAgentPtr = InspectorWorkerAgent::create(pageConsoleAgentPtr.get()); @@ -459,7 +438,6 @@ visitor->trace(m_tracingAgent); visitor->trace(m_pageRuntimeAgent); visitor->trace(m_pageConsoleAgent); - visitor->trace(m_inspectorBackendDispatcher); visitor->trace(m_agents); } @@ -469,7 +447,6 @@ ASSERT(m_inspectedFrames->root()->view()); detach(); - m_injectedScriptManager->disconnect(); m_resourceContentLoader->dispose(); m_agents.discardAgents(); m_instrumentingAgents->reset(); @@ -481,8 +458,6 @@ return; m_deferredAgentsInitialized = true; - InjectedScriptManager* injectedScriptManager = m_injectedScriptManager.get(); - OwnPtrWillBeRawPtr<InspectorResourceAgent> resourceAgentPtr(InspectorResourceAgent::create(m_inspectedFrames.get())); m_resourceAgent = resourceAgentPtr.get(); m_agents.append(resourceAgentPtr.release()); @@ -491,7 +466,7 @@ InspectorCSSAgent* cssAgent = cssAgentPtr.get(); m_agents.append(cssAgentPtr.release()); - m_agents.append(InspectorAnimationAgent::create(m_inspectedFrames.get(), m_domAgent, cssAgent, injectedScriptManager)); + m_agents.append(InspectorAnimationAgent::create(m_inspectedFrames.get(), m_domAgent, cssAgent, m_pageRuntimeAgent->v8Agent())); m_agents.append(InspectorMemoryAgent::create()); @@ -499,29 +474,25 @@ m_agents.append(InspectorFileSystemAgent::create(m_inspectedFrames.get())); m_agents.append(InspectorIndexedDBAgent::create(m_inspectedFrames.get())); - OwnPtrWillBeRawPtr<InspectorDebuggerAgent> debuggerAgentPtr(PageDebuggerAgent::create(MainThreadDebugger::instance(), m_inspectedFrames.get(), injectedScriptManager)); + OwnPtrWillBeRawPtr<InspectorDebuggerAgent> debuggerAgentPtr(PageDebuggerAgent::create(MainThreadDebugger::instance(), m_inspectedFrames.get(), m_pageRuntimeAgent->v8Agent())); InspectorDebuggerAgent* debuggerAgent = debuggerAgentPtr.get(); m_agents.append(debuggerAgentPtr.release()); - m_agents.append(InspectorDOMDebuggerAgent::create(injectedScriptManager, m_domAgent, debuggerAgent->v8DebuggerAgent())); - - m_agents.append(InspectorInputAgent::create(m_inspectedFrames.get())); - v8::Isolate* isolate = V8PerIsolateData::mainThreadIsolate(); - m_agents.append(InspectorProfilerAgent::create(MainThreadDebugger::instance()->debugger(), m_overlay.get())); - m_agents.append(InspectorHeapProfilerAgent::create(isolate, injectedScriptManager)); + m_agents.append(InspectorDOMDebuggerAgent::create(isolate, m_domAgent, m_pageRuntimeAgent->v8Agent(), debuggerAgent->v8Agent())); + m_agents.append(InspectorInputAgent::create(m_inspectedFrames.get())); + m_agents.append(InspectorProfilerAgent::create(MainThreadDebugger::instance()->debugger(), m_overlay.get())); + m_agents.append(InspectorHeapProfilerAgent::create(isolate, m_pageRuntimeAgent->v8Agent())); OwnPtrWillBeRawPtr<InspectorPageAgent> pageAgentPtr(InspectorPageAgent::create(m_inspectedFrames.get(), this, m_resourceContentLoader.get(), debuggerAgent)); m_pageAgent = pageAgentPtr.get(); m_agents.append(pageAgentPtr.release()); - m_pageConsoleAgent->setDebuggerAgent(debuggerAgent->v8DebuggerAgent()); + m_pageConsoleAgent->setDebuggerAgent(debuggerAgent->v8Agent()); - m_injectedScriptManager->injectedScriptHost()->init( - bind<PassRefPtr<TypeBuilder::Runtime::RemoteObject>, PassRefPtr<JSONObject>>(&InspectorInspectorAgent::inspect, m_inspectorAgent.get()), - bind<>(&InspectorConsoleAgent::clearAllMessages, m_pageConsoleAgent.get()), - adoptPtr(new PageInjectedScriptHostClient())); + m_pageRuntimeAgent->v8Agent()->setClearConsoleCallback(bind<>(&InspectorConsoleAgent::clearAllMessages, m_pageConsoleAgent.get())); + m_pageRuntimeAgent->v8Agent()->setInspectObjectCallback(bind<PassRefPtr<TypeBuilder::Runtime::RemoteObject>, PassRefPtr<JSONObject>>(&InspectorInspectorAgent::inspect, m_inspectorAgent.get())); if (m_overlay) m_overlay->init(cssAgent, debuggerAgent, m_domAgent.get());
diff --git a/third_party/WebKit/Source/web/WebDevToolsAgentImpl.h b/third_party/WebKit/Source/web/WebDevToolsAgentImpl.h index e84efd2..c361b974 100644 --- a/third_party/WebKit/Source/web/WebDevToolsAgentImpl.h +++ b/third_party/WebKit/Source/web/WebDevToolsAgentImpl.h
@@ -146,7 +146,6 @@ #endif RefPtrWillBeMember<InstrumentingAgents> m_instrumentingAgents; - OwnPtr<InjectedScriptManager> m_injectedScriptManager; OwnPtrWillBeMember<InspectorResourceContentLoader> m_resourceContentLoader; OwnPtrWillBeMember<InspectorOverlay> m_overlay; OwnPtrWillBeMember<InspectedFrames> m_inspectedFrames; @@ -160,7 +159,7 @@ RawPtrWillBeMember<PageRuntimeAgent> m_pageRuntimeAgent; RawPtrWillBeMember<PageConsoleAgent> m_pageConsoleAgent; - RefPtrWillBeMember<InspectorBackendDispatcher> m_inspectorBackendDispatcher; + RefPtr<InspectorBackendDispatcher> m_inspectorBackendDispatcher; OwnPtr<InspectorFrontend> m_inspectorFrontend; InspectorAgentRegistry m_agents; bool m_deferredAgentsInitialized;
diff --git a/third_party/WebKit/Source/web/WebFrameContentDumper.cpp b/third_party/WebKit/Source/web/WebFrameContentDumper.cpp new file mode 100644 index 0000000..c28d1fc6 --- /dev/null +++ b/third_party/WebKit/Source/web/WebFrameContentDumper.cpp
@@ -0,0 +1,112 @@ +// Copyright 2016 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 "public/web/WebFrameContentDumper.h" + +#include "core/editing/EphemeralRange.h" +#include "core/editing/iterators/TextIterator.h" +#include "core/editing/serializers/Serialization.h" +#include "core/frame/LocalFrame.h" +#include "core/layout/LayoutPart.h" +#include "core/layout/LayoutTreeAsText.h" +#include "core/layout/LayoutView.h" +#include "public/web/WebDocument.h" +#include "public/web/WebLocalFrame.h" +#include "web/WebLocalFrameImpl.h" +#include "wtf/text/WTFString.h" + +namespace blink { + +static void frameContentAsPlainText(size_t maxChars, LocalFrame* frame, StringBuilder& output) +{ + Document* document = frame->document(); + if (!document) + return; + + if (!frame->view()) + return; + + // Select the document body. + if (document->body()) { + const EphemeralRange range = EphemeralRange::rangeOfContents(*document->body()); + + // The text iterator will walk nodes giving us text. This is similar to + // the plainText() function in core/editing/TextIterator.h, but we implement the maximum + // size and also copy the results directly into a wstring, avoiding the + // string conversion. + for (TextIterator it(range.startPosition(), range.endPosition()); !it.atEnd(); it.advance()) { + it.text().appendTextToStringBuilder(output, 0, maxChars - output.length()); + if (output.length() >= maxChars) + return; // Filled up the buffer. + } + } + + // The separator between frames when the frames are converted to plain text. + const LChar frameSeparator[] = { '\n', '\n' }; + const size_t frameSeparatorLength = WTF_ARRAY_LENGTH(frameSeparator); + + // Recursively walk the children. + const FrameTree& frameTree = frame->tree(); + for (Frame* curChild = frameTree.firstChild(); curChild; curChild = curChild->tree().nextSibling()) { + if (!curChild->isLocalFrame()) + continue; + LocalFrame* curLocalChild = toLocalFrame(curChild); + // Ignore the text of non-visible frames. + LayoutView* contentLayoutObject = curLocalChild->contentLayoutObject(); + LayoutPart* ownerLayoutObject = curLocalChild->ownerLayoutObject(); + if (!contentLayoutObject || !contentLayoutObject->size().width() || !contentLayoutObject->size().height() + || (contentLayoutObject->location().x() + contentLayoutObject->size().width() <= 0) || (contentLayoutObject->location().y() + contentLayoutObject->size().height() <= 0) + || (ownerLayoutObject && ownerLayoutObject->style() && ownerLayoutObject->style()->visibility() != VISIBLE)) { + continue; + } + + // Make sure the frame separator won't fill up the buffer, and give up if + // it will. The danger is if the separator will make the buffer longer than + // maxChars. This will cause the computation above: + // maxChars - output->size() + // to be a negative number which will crash when the subframe is added. + if (output.length() >= maxChars - frameSeparatorLength) + return; + + output.append(frameSeparator, frameSeparatorLength); + frameContentAsPlainText(maxChars, curLocalChild, output); + if (output.length() >= maxChars) + return; // Filled up the buffer. + } +} + +WebString WebFrameContentDumper::dumpFrameTreeAsText(WebLocalFrame* frame, size_t maxChars) +{ + if (!frame) + return WebString(); + StringBuilder text; + frameContentAsPlainText(maxChars, toWebLocalFrameImpl(frame)->frame(), text); + return text.toString(); +} + +WebString WebFrameContentDumper::dumpAsMarkup(WebLocalFrame* frame) +{ + if (!frame) + return WebString(); + return createMarkup(toWebLocalFrameImpl(frame)->frame()->document()); +} + +WebString WebFrameContentDumper::dumpLayoutTreeAsText(WebLocalFrame* frame, LayoutAsTextControls toShow) +{ + if (!frame) + return WebString(); + LayoutAsTextBehavior behavior = LayoutAsTextShowAllLayers; + + if (toShow & LayoutAsTextWithLineTrees) + behavior |= LayoutAsTextShowLineTrees; + + if (toShow & LayoutAsTextDebug) + behavior |= LayoutAsTextShowCompositedLayers | LayoutAsTextShowAddresses | LayoutAsTextShowIDAndClass | LayoutAsTextShowLayerNesting; + + if (toShow & LayoutAsTextPrinting) + behavior |= LayoutAsTextPrintingMode; + + return externalRepresentation(toWebLocalFrameImpl(frame)->frame(), behavior); +} +}
diff --git a/third_party/WebKit/Source/web/WebInputEventConversion.cpp b/third_party/WebKit/Source/web/WebInputEventConversion.cpp index 95ac99cc..43cff96 100644 --- a/third_party/WebKit/Source/web/WebInputEventConversion.cpp +++ b/third_party/WebKit/Source/web/WebInputEventConversion.cpp
@@ -423,7 +423,7 @@ m_type = toPlatformTouchEventType(event.type); m_modifiers = event.modifiers; m_timestamp = event.timeStampSeconds; - m_causesScrollingIfUncanceled = event.causesScrollingIfUncanceled; + m_causesScrollingIfUncanceled = event.movedBeyondSlopRegion; for (unsigned i = 0; i < event.touchesLength; ++i) m_touchPoints.append(PlatformTouchPointBuilder(widget, event.touches[i])); @@ -684,7 +684,7 @@ timeStampSeconds = event.platformTimeStamp(); modifiers = event.modifiers(); cancelable = event.cancelable(); - causesScrollingIfUncanceled = event.causesScrollingIfUncanceled(); + movedBeyondSlopRegion = event.causesScrollingIfUncanceled(); // Currently touches[] is empty, add stationary points as-is. for (unsigned i = 0; i < event.touches()->length() && i < static_cast<unsigned>(WebTouchEvent::touchesLengthCap); ++i) {
diff --git a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp index 0d231ae..bb48a3cf 100644 --- a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp +++ b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp
@@ -137,7 +137,6 @@ #include "core/layout/LayoutBox.h" #include "core/layout/LayoutObject.h" #include "core/layout/LayoutPart.h" -#include "core/layout/LayoutTreeAsText.h" #include "core/layout/LayoutView.h" #include "core/style/StyleInheritedData.h" #include "core/loader/DocumentLoader.h" @@ -245,64 +244,6 @@ static int frameCount = 0; -static void frameContentAsPlainText(size_t maxChars, LocalFrame* frame, StringBuilder& output) -{ - Document* document = frame->document(); - if (!document) - return; - - if (!frame->view()) - return; - - // Select the document body. - if (document->body()) { - const EphemeralRange range = EphemeralRange::rangeOfContents(*document->body()); - - // The text iterator will walk nodes giving us text. This is similar to - // the plainText() function in core/editing/TextIterator.h, but we implement the maximum - // size and also copy the results directly into a wstring, avoiding the - // string conversion. - for (TextIterator it(range.startPosition(), range.endPosition()); !it.atEnd(); it.advance()) { - it.text().appendTextToStringBuilder(output, 0, maxChars - output.length()); - if (output.length() >= maxChars) - return; // Filled up the buffer. - } - } - - // The separator between frames when the frames are converted to plain text. - const LChar frameSeparator[] = { '\n', '\n' }; - const size_t frameSeparatorLength = WTF_ARRAY_LENGTH(frameSeparator); - - // Recursively walk the children. - const FrameTree& frameTree = frame->tree(); - for (Frame* curChild = frameTree.firstChild(); curChild; curChild = curChild->tree().nextSibling()) { - if (!curChild->isLocalFrame()) - continue; - LocalFrame* curLocalChild = toLocalFrame(curChild); - // Ignore the text of non-visible frames. - LayoutView* contentLayoutObject = curLocalChild->contentLayoutObject(); - LayoutPart* ownerLayoutObject = curLocalChild->ownerLayoutObject(); - if (!contentLayoutObject || !contentLayoutObject->size().width() || !contentLayoutObject->size().height() - || (contentLayoutObject->location().x() + contentLayoutObject->size().width() <= 0) || (contentLayoutObject->location().y() + contentLayoutObject->size().height() <= 0) - || (ownerLayoutObject && ownerLayoutObject->style() && ownerLayoutObject->style()->visibility() != VISIBLE)) { - continue; - } - - // Make sure the frame separator won't fill up the buffer, and give up if - // it will. The danger is if the separator will make the buffer longer than - // maxChars. This will cause the computation above: - // maxChars - output->size() - // to be a negative number which will crash when the subframe is added. - if (output.length() >= maxChars - frameSeparatorLength) - return; - - output.append(frameSeparator, frameSeparatorLength); - frameContentAsPlainText(maxChars, curLocalChild, output); - if (output.length() >= maxChars) - return; // Filled up the buffer. - } -} - static WillBeHeapVector<ScriptSourceCode> createSourcesVector(const WebScriptSource* sourcesIn, unsigned numSources) { WillBeHeapVector<ScriptSourceCode> sources; @@ -1453,38 +1394,6 @@ return m_printContext->pageProperty(frame(), propertyName.utf8().data(), pageIndex); } -WebString WebLocalFrameImpl::contentAsText(size_t maxChars) const -{ - if (!frame()) - return WebString(); - StringBuilder text; - frameContentAsPlainText(maxChars, frame(), text); - return text.toString(); -} - -WebString WebLocalFrameImpl::contentAsMarkup() const -{ - if (!frame()) - return WebString(); - return createMarkup(frame()->document()); -} - -WebString WebLocalFrameImpl::layoutTreeAsText(LayoutAsTextControls toShow) const -{ - LayoutAsTextBehavior behavior = LayoutAsTextShowAllLayers; - - if (toShow & LayoutAsTextWithLineTrees) - behavior |= LayoutAsTextShowLineTrees; - - if (toShow & LayoutAsTextDebug) - behavior |= LayoutAsTextShowCompositedLayers | LayoutAsTextShowAddresses | LayoutAsTextShowIDAndClass | LayoutAsTextShowLayerNesting; - - if (toShow & LayoutAsTextPrinting) - behavior |= LayoutAsTextPrintingMode; - - return externalRepresentation(frame(), behavior); -} - void WebLocalFrameImpl::registerTestInterface(const WebString& name, WebTestInterfaceFactory* factory) { m_testInterfaces.set(name, adoptPtr(factory)); @@ -1502,11 +1411,6 @@ return v8::Local<v8::Value>(); } -WebString WebLocalFrameImpl::markerTextForListItem(const WebElement& webElement) const -{ - return blink::markerTextForListItem(const_cast<Element*>(webElement.constUnwrap<Element>())); -} - void WebLocalFrameImpl::printPagesWithBoundaries(WebCanvas* canvas, const WebSize& pageSizeInPixels) { ASSERT(m_printContext); @@ -2002,6 +1906,22 @@ return localRoot; } +WebLocalFrame* WebLocalFrameImpl::traversePreviousLocal(bool wrap) const +{ + WebFrame* previousLocalFrame = this->traversePrevious(wrap); + while (previousLocalFrame && !previousLocalFrame->isWebLocalFrame()) + previousLocalFrame = previousLocalFrame->traversePrevious(wrap); + return previousLocalFrame ? previousLocalFrame->toWebLocalFrame() : nullptr; +} + +WebLocalFrame* WebLocalFrameImpl::traverseNextLocal(bool wrap) const +{ + WebFrame* nextLocalFrame = this->traverseNext(wrap); + while (nextLocalFrame && !nextLocalFrame->isWebLocalFrame()) + nextLocalFrame = nextLocalFrame->traverseNext(wrap); + return nextLocalFrame ? nextLocalFrame->toWebLocalFrame() : nullptr; +} + void WebLocalFrameImpl::sendPings(const WebNode& contextNode, const WebURL& destinationURL) { ASSERT(frame());
diff --git a/third_party/WebKit/Source/web/WebLocalFrameImpl.h b/third_party/WebKit/Source/web/WebLocalFrameImpl.h index be9390f..e00e9b187 100644 --- a/third_party/WebKit/Source/web/WebLocalFrameImpl.h +++ b/third_party/WebKit/Source/web/WebLocalFrameImpl.h
@@ -201,11 +201,6 @@ const WebSecurityOrigin& intendedTargetOrigin, const WebDOMEvent&) override; - WebString contentAsText(size_t maxChars) const override; - WebString contentAsMarkup() const override; - WebString layoutTreeAsText(LayoutAsTextControls toShow = LayoutAsTextNormal) const override; - - WebString markerTextForListItem(const WebElement&) const override; WebRect selectionBoundsRect() const override; bool selectionStartHasSpellingMarkerFor(int from, int length) const override; @@ -226,6 +221,8 @@ WebDevToolsAgent* devToolsAgent() override; void setFrameOwnerProperties(const WebFrameOwnerProperties&) override; WebLocalFrameImpl* localRoot() override; + WebLocalFrame* traversePreviousLocal(bool wrap) const override; + WebLocalFrame* traverseNextLocal(bool wrap) const override; void sendPings(const WebNode& contextNode, const WebURL& destinationURL) override; WebURLRequest requestFromHistoryItem(const WebHistoryItem&, WebURLRequest::CachePolicy) const override;
diff --git a/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp b/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp index 60ba3f89..55f508c 100644 --- a/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp +++ b/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp
@@ -927,7 +927,7 @@ LayoutBox* box = toLayoutBox(ownerElement->layoutObject()); // Plugin frameRects are in absolute space within their frame. - IntRect frameRectInOwnerElementSpace = box->absoluteToLocalQuad(FloatRect(frameRect()), UseTransforms).enclosingBoundingBox(); + FloatRect frameRectInOwnerElementSpace = box->absoluteToLocalQuad(FloatRect(frameRect()), UseTransforms).boundingBox(); LayoutRect unclippedAbsoluteRect(frameRectInOwnerElementSpace); box->mapToVisibleRectInAncestorSpace(rootView, unclippedAbsoluteRect, nullptr); @@ -935,20 +935,21 @@ // The frameRect is already in absolute space of the local frame to the plugin. windowRect = frameRect(); // Map up to the root frame. - windowRect = pixelSnappedIntRect(LayoutRect(m_element->document().view()->layoutView()->localToAbsoluteQuad(FloatQuad(FloatRect(frameRect())), TraverseDocumentBoundaries).boundingBox())); + LayoutRect layoutWindowRect = + LayoutRect(m_element->document().view()->layoutView()->localToAbsoluteQuad(FloatQuad(FloatRect(frameRect())), TraverseDocumentBoundaries).boundingBox()); // Finally, adjust for scrolling of the root frame, which the above does not take into account. - windowRect.moveBy(roundedIntPoint(-rootView->viewRect().location())); + layoutWindowRect.moveBy(-rootView->viewRect().location()); + windowRect = pixelSnappedIntRect(layoutWindowRect); - clippedLocalRect = enclosingIntRect(unclippedAbsoluteRect); - unclippedIntLocalRect = clippedLocalRect; - clippedLocalRect.intersect(rootView->frameView()->visibleContentRect()); + LayoutRect layoutClippedLocalRect = unclippedAbsoluteRect; + LayoutRect unclippedLayoutLocalRect = layoutClippedLocalRect; + layoutClippedLocalRect.intersect(LayoutRect(rootView->frameView()->visibleContentRect())); // TODO(chrishtr): intentionally ignore transform, because the positioning of frameRect() does also. This is probably wrong. - unclippedIntLocalRect = box->absoluteToLocalQuad(FloatRect(unclippedIntLocalRect), TraverseDocumentBoundaries).enclosingBoundingBox(); - + unclippedIntLocalRect = box->absoluteToLocalQuad(FloatRect(unclippedLayoutLocalRect), TraverseDocumentBoundaries).enclosingBoundingBox(); // As a performance optimization, map the clipped rect separately if is different than the unclipped rect. - if (clippedLocalRect != unclippedIntLocalRect) - clippedLocalRect = box->absoluteToLocalQuad(FloatRect(clippedLocalRect), TraverseDocumentBoundaries).enclosingBoundingBox(); + if (layoutClippedLocalRect != unclippedLayoutLocalRect) + clippedLocalRect = box->absoluteToLocalQuad(FloatRect(layoutClippedLocalRect), TraverseDocumentBoundaries).enclosingBoundingBox(); else clippedLocalRect = unclippedIntLocalRect; }
diff --git a/third_party/WebKit/Source/web/WebRemoteFrameImpl.cpp b/third_party/WebKit/Source/web/WebRemoteFrameImpl.cpp index 0d9f43f..99b43be 100644 --- a/third_party/WebKit/Source/web/WebRemoteFrameImpl.cpp +++ b/third_party/WebKit/Source/web/WebRemoteFrameImpl.cpp
@@ -589,30 +589,6 @@ ASSERT_NOT_REACHED(); } -WebString WebRemoteFrameImpl::contentAsText(size_t maxChars) const -{ - ASSERT_NOT_REACHED(); - return WebString(); -} - -WebString WebRemoteFrameImpl::contentAsMarkup() const -{ - ASSERT_NOT_REACHED(); - return WebString(); -} - -WebString WebRemoteFrameImpl::layoutTreeAsText(LayoutAsTextControls toShow) const -{ - ASSERT_NOT_REACHED(); - return WebString(); -} - -WebString WebRemoteFrameImpl::markerTextForListItem(const WebElement&) const -{ - ASSERT_NOT_REACHED(); - return WebString(); -} - WebRect WebRemoteFrameImpl::selectionBoundsRect() const { ASSERT_NOT_REACHED();
diff --git a/third_party/WebKit/Source/web/WebRemoteFrameImpl.h b/third_party/WebKit/Source/web/WebRemoteFrameImpl.h index a2afbfe..ca92892b 100644 --- a/third_party/WebKit/Source/web/WebRemoteFrameImpl.h +++ b/third_party/WebKit/Source/web/WebRemoteFrameImpl.h
@@ -141,10 +141,6 @@ const WebSecurityOrigin& intendedTargetOrigin, const WebDOMEvent&) override; - WebString contentAsText(size_t maxChars) const override; - WebString contentAsMarkup() const override; - WebString layoutTreeAsText(LayoutAsTextControls toShow = LayoutAsTextNormal) const override; - WebString markerTextForListItem(const WebElement&) const override; WebRect selectionBoundsRect() const override; bool selectionStartHasSpellingMarkerFor(int from, int length) const override;
diff --git a/third_party/WebKit/Source/web/WebViewImpl.cpp b/third_party/WebKit/Source/web/WebViewImpl.cpp index 62c8d38..b3c81c8 100644 --- a/third_party/WebKit/Source/web/WebViewImpl.cpp +++ b/third_party/WebKit/Source/web/WebViewImpl.cpp
@@ -2339,6 +2339,7 @@ bool WebViewImpl::confirmComposition(const WebString& text) { + UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture); return confirmComposition(text, DoNotKeepSelection); }
diff --git a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp index d700a1c..912a0fd5 100644 --- a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp +++ b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
@@ -103,6 +103,7 @@ #include "public/web/WebFindOptions.h" #include "public/web/WebFormElement.h" #include "public/web/WebFrameClient.h" +#include "public/web/WebFrameContentDumper.h" #include "public/web/WebFrameWidget.h" #include "public/web/WebHistoryItem.h" #include "public/web/WebPrintParams.h" @@ -324,7 +325,7 @@ webViewHelper.initializeAndLoad(m_baseURL + "iframes_test.html"); // Now retrieve the frames text and test it only includes visible elements. - std::string content = webViewHelper.webView()->mainFrame()->contentAsText(1024).utf8(); + std::string content = WebFrameContentDumper::dumpFrameTreeAsText(webViewHelper.webView()->mainFrame()->toWebLocalFrame(), 1024).utf8(); EXPECT_NE(std::string::npos, content.find(" visible paragraph")); EXPECT_NE(std::string::npos, content.find(" visible iframe")); EXPECT_EQ(std::string::npos, content.find(" invisible pararaph")); @@ -457,7 +458,7 @@ webViewHelper.webView()->updateAllLifecyclePhases(); // Now retrieve the frame's text and ensure it was modified by running javascript. - std::string content = webViewHelper.webView()->mainFrame()->contentAsText(1024).utf8(); + std::string content = WebFrameContentDumper::dumpFrameTreeAsText(webViewHelper.webView()->mainFrame()->toWebLocalFrame(), 1024).utf8(); EXPECT_NE(std::string::npos, content.find("Clobbered")); } @@ -477,7 +478,7 @@ webViewHelper.webView()->updateAllLifecyclePhases(); // Now retrieve the frame's text and ensure it wasn't modified by running javascript. - std::string content = webViewHelper.webView()->mainFrame()->contentAsText(1024).utf8(); + std::string content = WebFrameContentDumper::dumpFrameTreeAsText(webViewHelper.webView()->mainFrame()->toWebLocalFrame(), 1024).utf8(); EXPECT_EQ(std::string::npos, content.find("Clobbered")); } @@ -497,7 +498,7 @@ FrameTestHelpers::loadFrame(webViewHelper.webView()->mainFrame(), "javascript:document.body.textContent = location.href; void 0;"); - std::string content = webViewHelper.webView()->mainFrame()->contentAsText(1024).utf8(); + std::string content = WebFrameContentDumper::dumpFrameTreeAsText(webViewHelper.webView()->mainFrame()->toWebLocalFrame(), 1024).utf8(); EXPECT_EQ("http://internal.test:0/" + fileName, content); } @@ -516,7 +517,7 @@ FrameTestHelpers::loadFrame(webViewHelper.webView()->mainFrame(), "javascript:document.body.textContent = location.href; void 0;"); - std::string content = webViewHelper.webView()->mainFrame()->contentAsText(1024).utf8(); + std::string content = WebFrameContentDumper::dumpFrameTreeAsText(webViewHelper.webView()->mainFrame()->toWebLocalFrame(), 1024).utf8(); EXPECT_EQ("http://internal.test:0/" + fileName, content); } @@ -836,7 +837,7 @@ webViewHelper.webView()->updateAllLifecyclePhases(); // Verify that only the first addition is in the body of the page. - std::string content = webViewHelper.webView()->mainFrame()->contentAsText(1024).utf8(); + std::string content = WebFrameContentDumper::dumpFrameTreeAsText(webViewHelper.webView()->mainFrame()->toWebLocalFrame(), 1024).utf8(); EXPECT_NE(std::string::npos, content.find("Message 1.")); EXPECT_EQ(std::string::npos, content.find("Message 2.")); } @@ -1034,7 +1035,7 @@ EXPECT_EQ(1, webViewHelper.webView()->pageScaleFactor()); // Force the layout to happen before leaving the test. - webViewHelper.webView()->mainFrame()->contentAsText(1024).utf8(); + WebFrameContentDumper::dumpFrameTreeAsText(webViewHelper.webView()->mainFrame()->toWebLocalFrame(), 1024).utf8(); } TEST_P(ParameterizedWebFrameTest, FixedLayoutInitializeAtMinimumScale) @@ -3631,12 +3632,12 @@ // Make sure it comes out OK. const std::string expected("Foo bar\nbaz"); - WebString text = frame->contentAsText(std::numeric_limits<size_t>::max()); + WebString text = WebFrameContentDumper::dumpFrameTreeAsText(frame->toWebLocalFrame(), std::numeric_limits<size_t>::max()); EXPECT_EQ(expected, text.utf8()); // Try reading the same one with clipping of the text. const int length = 5; - text = frame->contentAsText(length); + text = WebFrameContentDumper::dumpFrameTreeAsText(frame->toWebLocalFrame(), length); EXPECT_EQ(expected.substr(0, length), text.utf8()); // Now do a new test with a subframe. @@ -3648,12 +3649,12 @@ ASSERT_TRUE(subframe); FrameTestHelpers::loadHTMLString(subframe, "sub<p>text", testURL); - text = frame->contentAsText(std::numeric_limits<size_t>::max()); + text = WebFrameContentDumper::dumpFrameTreeAsText(frame->toWebLocalFrame(), std::numeric_limits<size_t>::max()); EXPECT_EQ("Hello world\n\nsub\ntext", text.utf8()); // Get the frame text where the subframe separator falls on the boundary of // what we'll take. There used to be a crash in this case. - text = frame->contentAsText(12); + text = WebFrameContentDumper::dumpFrameTreeAsText(frame->toWebLocalFrame(), 12); EXPECT_EQ("Hello world", text.utf8()); } @@ -3668,17 +3669,17 @@ KURL testURL = toKURL("about:blank"); FrameTestHelpers::loadHTMLString(frame, simpleSource, testURL); - WebString text = frame->contentAsText(std::numeric_limits<size_t>::max()); + WebString text = WebFrameContentDumper::dumpFrameTreeAsText(frame->toWebLocalFrame(), std::numeric_limits<size_t>::max()); EXPECT_EQ("Hello\n\nWorld", text.utf8()); - const std::string html = frame->contentAsMarkup().utf8(); + const std::string html = WebFrameContentDumper::dumpAsMarkup(frame->toWebLocalFrame()).utf8(); // Load again with the output html. FrameTestHelpers::loadHTMLString(frame, html, testURL); - EXPECT_EQ(html, frame->contentAsMarkup().utf8()); + EXPECT_EQ(html, WebFrameContentDumper::dumpAsMarkup(frame->toWebLocalFrame()).utf8()); - text = frame->contentAsText(std::numeric_limits<size_t>::max()); + text = WebFrameContentDumper::dumpFrameTreeAsText(frame->toWebLocalFrame(), std::numeric_limits<size_t>::max()); EXPECT_EQ("Hello\n\nWorld", text.utf8()); // Test selection check @@ -5046,7 +5047,7 @@ Platform::current()->unitTestSupport()->registerMockedErrorURL(URLTestHelpers::toKURL(errorURL), response, error); FrameTestHelpers::loadHistoryItem(frame, errorHistoryItem, WebHistoryDifferentDocumentLoad, WebURLRequest::UseProtocolCachePolicy); - WebString text = frame->contentAsText(std::numeric_limits<size_t>::max()); + WebString text = WebFrameContentDumper::dumpFrameTreeAsText(frame->toWebLocalFrame(), std::numeric_limits<size_t>::max()); EXPECT_EQ("This should appear", text.utf8()); EXPECT_TRUE(webFrameClient.commitCalled()); } @@ -5159,7 +5160,7 @@ EXPECT_EQ(1U, document->markers().markersInRange(selectionRange, DocumentMarker::Spelling).size()); frame->replaceMisspelledRange("welcome"); - EXPECT_EQ("_welcome_.", frame->contentAsText(std::numeric_limits<size_t>::max()).utf8()); + EXPECT_EQ("_welcome_.", WebFrameContentDumper::dumpFrameTreeAsText(frame->toWebLocalFrame(), std::numeric_limits<size_t>::max()).utf8()); } TEST_P(ParameterizedWebFrameTest, RemoveSpellingMarkers) @@ -6722,7 +6723,7 @@ EXPECT_EQ(14, webFrameClient.manifestChangeCount()); } -static ResourcePtr<Resource> fetchManifest(Document* document, const KURL& url) +static PassRefPtrWillBeRawPtr<Resource> fetchManifest(Document* document, const KURL& url) { FetchRequest fetchRequest = FetchRequest(ResourceRequest(url), FetchInitiatorInfo()); fetchRequest.mutableResourceRequest().setRequestContext(WebURLRequest::RequestContextManifest); @@ -6739,7 +6740,7 @@ webViewHelper.initializeAndLoad(m_baseURL + "foo.html"); Document* document = toWebLocalFrameImpl(webViewHelper.webViewImpl()->mainFrame())->frame()->document(); - ResourcePtr<Resource> resource = fetchManifest(document, toKURL(m_baseURL + "link-manifest-fetch.json")); + RefPtrWillBeRawPtr<Resource> resource = fetchManifest(document, toKURL(m_baseURL + "link-manifest-fetch.json")); EXPECT_TRUE(resource->isLoaded()); } @@ -6753,7 +6754,7 @@ webViewHelper.initializeAndLoad(m_baseURL + "foo.html"); Document* document = toWebLocalFrameImpl(webViewHelper.webViewImpl()->mainFrame())->frame()->document(); - ResourcePtr<Resource> resource = fetchManifest(document, toKURL(m_notBaseURL + "link-manifest-fetch.json")); + RefPtrWillBeRawPtr<Resource> resource = fetchManifest(document, toKURL(m_notBaseURL + "link-manifest-fetch.json")); EXPECT_TRUE(resource->isLoaded()); } @@ -6767,7 +6768,7 @@ webViewHelper.initializeAndLoad(m_baseURL + "foo.html"); Document* document = toWebLocalFrameImpl(webViewHelper.webViewImpl()->mainFrame())->frame()->document(); - ResourcePtr<Resource> resource = fetchManifest(document, toKURL(m_notBaseURL + "link-manifest-fetch.json")); + RefPtrWillBeRawPtr<Resource> resource = fetchManifest(document, toKURL(m_notBaseURL + "link-manifest-fetch.json")); EXPECT_EQ(0, resource.get()); // Fetching resource wasn't allowed. } @@ -6781,7 +6782,7 @@ webViewHelper.initializeAndLoad(m_baseURL + "foo.html"); Document* document = toWebLocalFrameImpl(webViewHelper.webViewImpl()->mainFrame())->frame()->document(); - ResourcePtr<Resource> resource = fetchManifest(document, toKURL(m_notBaseURL + "link-manifest-fetch.json")); + RefPtrWillBeRawPtr<Resource> resource = fetchManifest(document, toKURL(m_notBaseURL + "link-manifest-fetch.json")); EXPECT_TRUE(resource->isLoaded()); } @@ -6974,7 +6975,7 @@ // Finally, make sure an embedder triggered load in the local frame swapped // back in works. FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); - std::string content = localFrame->contentAsText(1024).utf8(); + std::string content = WebFrameContentDumper::dumpFrameTreeAsText(localFrame, 1024).utf8(); EXPECT_EQ("hello", content); // Manually reset to break WebViewHelper's dependency on the stack allocated @@ -7076,7 +7077,7 @@ // Finally, make sure an embedder triggered load in the local frame swapped // back in works. FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); - std::string content = localFrame->contentAsText(1024).utf8(); + std::string content = WebFrameContentDumper::dumpFrameTreeAsText(localFrame, 1024).utf8(); EXPECT_EQ("hello", content); // Manually reset to break WebViewHelper's dependency on the stack allocated @@ -7114,7 +7115,7 @@ // Finally, make sure an embedder triggered load in the local frame swapped // back in works. FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); - std::string content = localFrame->contentAsText(1024).utf8(); + std::string content = WebFrameContentDumper::dumpFrameTreeAsText(localFrame, 1024).utf8(); EXPECT_EQ("hello", content); // Manually reset to break WebViewHelper's dependency on the stack allocated @@ -7149,7 +7150,7 @@ // Finally, make sure an embedder triggered load in the local frame swapped // back in works. FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); - std::string content = localFrame->contentAsText(1024).utf8(); + std::string content = WebFrameContentDumper::dumpFrameTreeAsText(localFrame, 1024).utf8(); EXPECT_EQ("hello", content); // Manually reset to break WebViewHelper's dependency on the stack allocated @@ -7193,7 +7194,7 @@ // Finally, make sure an embedder triggered load in the local frame swapped // back in works. FrameTestHelpers::loadFrame(localFrame, m_baseURL + "subframe-hello.html"); - std::string content = localFrame->contentAsText(1024).utf8(); + std::string content = WebFrameContentDumper::dumpFrameTreeAsText(localFrame, 1024).utf8(); EXPECT_EQ("hello", content); // Manually reset to break WebViewHelper's dependency on the stack allocated
diff --git a/third_party/WebKit/Source/web/tests/WebPluginContainerTest.cpp b/third_party/WebKit/Source/web/tests/WebPluginContainerTest.cpp index 4a8440f..3d76d9e 100644 --- a/third_party/WebKit/Source/web/tests/WebPluginContainerTest.cpp +++ b/third_party/WebKit/Source/web/tests/WebPluginContainerTest.cpp
@@ -447,6 +447,38 @@ webViewHelper.reset(); } +TEST_F(WebPluginContainerTest, ClippedRectsForSubpixelPositionedPlugin) +{ + URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("plugin_container.html")); + + TestPluginWebFrameClient pluginWebFrameClient; // Must outlive webViewHelper. + FrameTestHelpers::WebViewHelper webViewHelper; + WebView* webView = webViewHelper.initializeAndLoad(m_baseURL + "plugin_container.html", true, &pluginWebFrameClient); + ASSERT(webView); + webView->settings()->setPluginsEnabled(true); + webView->resize(WebSize(300, 300)); + webView->updateAllLifecyclePhases(); + runPendingTasks(); + + WebElement pluginElement = webView->mainFrame()->document().getElementById("subpixel-positioned-plugin"); + RefPtrWillBeRawPtr<WebPluginContainerImpl> pluginContainerImpl = toWebPluginContainerImpl(pluginElement.pluginContainer()); + + ASSERT(pluginContainerImpl.get()); + + IntRect windowRect, clipRect, unobscuredRect; + Vector<IntRect> cutOutRects; + + calculateGeometry(pluginContainerImpl.get(), windowRect, clipRect, unobscuredRect, cutOutRects); + // TODO(chrishtr): these values should not be -1, they should be 0. They are -1 because WebPluginContainerImpl currently uses an IntRect for + // frameRect() to determine the position of the plugin, which results in a loss of precision if it is actually subpixel positioned. + EXPECT_RECT_EQ(IntRect(0, 0, 40, 40), windowRect); + EXPECT_RECT_EQ(IntRect(-1, -1, 41, 41), clipRect); + EXPECT_RECT_EQ(IntRect(-1, -1, 41, 41), unobscuredRect); + + // Cause the plugin's frame to be detached. + webViewHelper.reset(); +} + TEST_F(WebPluginContainerTest, TopmostAfterDetachTest) { static WebRect topmostRect(10, 10, 40, 40);
diff --git a/third_party/WebKit/Source/web/tests/WebViewTest.cpp b/third_party/WebKit/Source/web/tests/WebViewTest.cpp index 15bc88c..7aeae02 100644 --- a/third_party/WebKit/Source/web/tests/WebViewTest.cpp +++ b/third_party/WebKit/Source/web/tests/WebViewTest.cpp
@@ -78,6 +78,7 @@ #include "public/web/WebElement.h" #include "public/web/WebFrame.h" #include "public/web/WebFrameClient.h" +#include "public/web/WebFrameContentDumper.h" #include "public/web/WebHitTestResult.h" #include "public/web/WebInputEvent.h" #include "public/web/WebScriptSource.h" @@ -2225,11 +2226,11 @@ URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("display_mode.html")); WebView* webView = m_webViewHelper.initializeAndLoad(m_baseURL + "display_mode.html", true); - std::string content = webView->mainFrame()->contentAsText(21).utf8(); + std::string content = WebFrameContentDumper::dumpFrameTreeAsText(webView->mainFrame()->toWebLocalFrame(), 21).utf8(); EXPECT_EQ("regular-ui", content); webView->setDisplayMode(WebDisplayModeMinimalUi); - content = webView->mainFrame()->contentAsText(21).utf8(); + content = WebFrameContentDumper::dumpFrameTreeAsText(webView->mainFrame()->toWebLocalFrame(), 21).utf8(); EXPECT_EQ("minimal-ui", content); m_webViewHelper.reset(); } @@ -2700,7 +2701,7 @@ std::string actual = frame->selectionAsText().utf8(); const int kMaxOutputCharacters = 1024; - std::string expected = frame->contentAsText(kMaxOutputCharacters).utf8(); + std::string expected = WebFrameContentDumper::dumpFrameTreeAsText(frame, kMaxOutputCharacters).utf8(); EXPECT_EQ(expected, actual); } @@ -3232,4 +3233,19 @@ } #endif +TEST_F(WebViewTest, PasswordFieldEditingIsUserGesture) +{ + URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("input_field_password.html")); + MockAutofillClient client; + WebView* webView = m_webViewHelper.initializeAndLoad(m_baseURL + "input_field_password.html", true); + WebLocalFrameImpl* frame = toWebLocalFrameImpl(webView->mainFrame()); + frame->setAutofillClient(&client); + webView->setInitialFocus(false); + + EXPECT_TRUE(webView->confirmComposition(WebString::fromUTF8(std::string("hello").c_str()))); + EXPECT_EQ(1, client.textChangesFromUserGesture()); + EXPECT_FALSE(UserGestureIndicator::processingUserGesture()); + frame->setAutofillClient(0); +} + } // namespace blink
diff --git a/third_party/WebKit/Source/web/tests/data/plugin_container.html b/third_party/WebKit/Source/web/tests/data/plugin_container.html index 13a6be20..850f5e9 100644 --- a/third_party/WebKit/Source/web/tests/data/plugin_container.html +++ b/third_party/WebKit/Source/web/tests/data/plugin_container.html
@@ -13,12 +13,19 @@ width="40" height="40"> </object> - <object id="translated-plugin" + <object id="subpixel-positioned-plugin" + border=0 + style="position: absolute; top: 0.4px; left: 0.4px;" + type="application/x-webkit-test-webplugin" + width="40" + height="40"> + </object> <object id="translated-plugin" border=0 style="transform: translate(10px, 10px); position: absolute; top: 0; left: 0;" type="application/x-webkit-test-webplugin" width="40" height="40"> </object> + </body> </html>
diff --git a/third_party/WebKit/Source/web/web.gypi b/third_party/WebKit/Source/web/web.gypi index 81cac440..a3cd53e 100644 --- a/third_party/WebKit/Source/web/web.gypi +++ b/third_party/WebKit/Source/web/web.gypi
@@ -146,6 +146,7 @@ 'WebFormControlElement.cpp', 'WebFormElement.cpp', 'WebFrame.cpp', + "WebFrameContentDumper.cpp", 'WebFrameImplBase.cpp', 'WebFrameImplBase.h', 'WebFrameSerializer.cpp',
diff --git a/third_party/WebKit/Source/wtf/DEPS b/third_party/WebKit/Source/wtf/DEPS index 8f45cf2..d625ec9 100644 --- a/third_party/WebKit/Source/wtf/DEPS +++ b/third_party/WebKit/Source/wtf/DEPS
@@ -4,5 +4,6 @@ "+base/debug", "+base/rand_util.h", "+base/strings", + "+base/tuple.h", "+build", ]
diff --git a/third_party/WebKit/Source/wtf/Functional.h b/third_party/WebKit/Source/wtf/Functional.h index 307237cb1..6694776 100644 --- a/third_party/WebKit/Source/wtf/Functional.h +++ b/third_party/WebKit/Source/wtf/Functional.h
@@ -26,6 +26,7 @@ #ifndef WTF_Functional_h #define WTF_Functional_h +#include "base/tuple.h" #include "wtf/Allocator.h" #include "wtf/Assertions.h" #include "wtf/PassOwnPtr.h" @@ -33,6 +34,7 @@ #include "wtf/RefPtr.h" #include "wtf/ThreadSafeRefCounted.h" #include "wtf/WeakPtr.h" +#include <tuple> namespace WTF { @@ -147,209 +149,47 @@ Function() = default; }; -template<int boundArgsCount, typename FunctionWrapper, typename FunctionType> +template <typename BoundParametersTuple, typename FunctionWrapper, typename... UnboundParameters> class PartBoundFunctionImpl; -// Specialization for unbound functions. -template<typename FunctionWrapper, typename R, typename... UnboundParams> -class PartBoundFunctionImpl<0, FunctionWrapper, R(UnboundParams...)> final : public Function<typename FunctionWrapper::ResultType(UnboundParams...)> { +template <typename... BoundParameters, typename FunctionWrapper, typename... UnboundParameters> +class PartBoundFunctionImpl<std::tuple<BoundParameters...>, FunctionWrapper, UnboundParameters...> final : public Function<typename FunctionWrapper::ResultType(UnboundParameters...)> { public: - PartBoundFunctionImpl(FunctionWrapper functionWrapper) + explicit PartBoundFunctionImpl(FunctionWrapper functionWrapper, const BoundParameters&... bound) : m_functionWrapper(functionWrapper) + , m_bound(ParamStorageTraits<BoundParameters>::wrap(bound)...) { } - typename FunctionWrapper::ResultType operator()(UnboundParams... params) override + typename FunctionWrapper::ResultType operator()(UnboundParameters... unbound) override { - return m_functionWrapper(params...); + // What we really want to do is to call m_functionWrapper(m_bound..., unbound...), but to do that we need to + // pass a list of indices to a worker function template. + return callInternal(unbound..., base::MakeIndexSequence<sizeof...(BoundParameters)>()); } private: + template <std::size_t... boundIndices> + typename FunctionWrapper::ResultType callInternal(UnboundParameters... unbound, const base::IndexSequence<boundIndices...>&) + { + // Get each element in m_bound, unwrap them, and call the function with the desired arguments. + return m_functionWrapper(ParamStorageTraits<BoundParameters>::unwrap(std::get<boundIndices>(m_bound))..., unbound...); + } + FunctionWrapper m_functionWrapper; -}; - -template<typename FunctionWrapper, typename R, typename P1, typename... UnboundParams> -class PartBoundFunctionImpl<1, FunctionWrapper, R(P1, UnboundParams...)> final : public Function<typename FunctionWrapper::ResultType(UnboundParams...)> { -public: - PartBoundFunctionImpl(FunctionWrapper functionWrapper, const P1& p1) - : m_functionWrapper(functionWrapper) - , m_p1(ParamStorageTraits<P1>::wrap(p1)) - { - } - - typename FunctionWrapper::ResultType operator()(UnboundParams... params) override - { - return m_functionWrapper(ParamStorageTraits<P1>::unwrap(m_p1), params...); - } - -private: - FunctionWrapper m_functionWrapper; - typename ParamStorageTraits<P1>::StorageType m_p1; -}; - -template<typename FunctionWrapper, typename R, typename P1, typename P2, typename... UnboundParams> -class PartBoundFunctionImpl<2, FunctionWrapper, R(P1, P2, UnboundParams...)> final : public Function<typename FunctionWrapper::ResultType(UnboundParams...)> { -public: - PartBoundFunctionImpl(FunctionWrapper functionWrapper, const P1& p1, const P2& p2) - : m_functionWrapper(functionWrapper) - , m_p1(ParamStorageTraits<P1>::wrap(p1)) - , m_p2(ParamStorageTraits<P2>::wrap(p2)) - { - } - - typename FunctionWrapper::ResultType operator()(UnboundParams... params) override - { - return m_functionWrapper(ParamStorageTraits<P1>::unwrap(m_p1), ParamStorageTraits<P2>::unwrap(m_p2), params...); - } - -private: - FunctionWrapper m_functionWrapper; - typename ParamStorageTraits<P1>::StorageType m_p1; - typename ParamStorageTraits<P2>::StorageType m_p2; -}; - -template<typename FunctionWrapper, typename R, typename P1, typename P2, typename P3, typename... UnboundParams> -class PartBoundFunctionImpl<3, FunctionWrapper, R(P1, P2, P3, UnboundParams...)> final : public Function<typename FunctionWrapper::ResultType(UnboundParams...)> { -public: - PartBoundFunctionImpl(FunctionWrapper functionWrapper, const P1& p1, const P2& p2, const P3& p3) - : m_functionWrapper(functionWrapper) - , m_p1(ParamStorageTraits<P1>::wrap(p1)) - , m_p2(ParamStorageTraits<P2>::wrap(p2)) - , m_p3(ParamStorageTraits<P3>::wrap(p3)) - { - } - - typename FunctionWrapper::ResultType operator()(UnboundParams... params) override - { - return m_functionWrapper(ParamStorageTraits<P1>::unwrap(m_p1), ParamStorageTraits<P2>::unwrap(m_p2), ParamStorageTraits<P3>::unwrap(m_p3), params...); - } - -private: - FunctionWrapper m_functionWrapper; - typename ParamStorageTraits<P1>::StorageType m_p1; - typename ParamStorageTraits<P2>::StorageType m_p2; - typename ParamStorageTraits<P3>::StorageType m_p3; -}; - -template<typename FunctionWrapper, typename R, typename P1, typename P2, typename P3, typename P4, typename... UnboundParams> -class PartBoundFunctionImpl<4, FunctionWrapper, R(P1, P2, P3, P4, UnboundParams...)> final : public Function<typename FunctionWrapper::ResultType(UnboundParams...)> { -public: - PartBoundFunctionImpl(FunctionWrapper functionWrapper, const P1& p1, const P2& p2, const P3& p3, const P4& p4) - : m_functionWrapper(functionWrapper) - , m_p1(ParamStorageTraits<P1>::wrap(p1)) - , m_p2(ParamStorageTraits<P2>::wrap(p2)) - , m_p3(ParamStorageTraits<P3>::wrap(p3)) - , m_p4(ParamStorageTraits<P4>::wrap(p4)) - { - } - - typename FunctionWrapper::ResultType operator()(UnboundParams... params) override - { - return m_functionWrapper(ParamStorageTraits<P1>::unwrap(m_p1), ParamStorageTraits<P2>::unwrap(m_p2), ParamStorageTraits<P3>::unwrap(m_p3), ParamStorageTraits<P4>::unwrap(m_p4), params...); - } - -private: - FunctionWrapper m_functionWrapper; - typename ParamStorageTraits<P1>::StorageType m_p1; - typename ParamStorageTraits<P2>::StorageType m_p2; - typename ParamStorageTraits<P3>::StorageType m_p3; - typename ParamStorageTraits<P4>::StorageType m_p4; -}; - -template<typename FunctionWrapper, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename... UnboundParams> -class PartBoundFunctionImpl<5, FunctionWrapper, R(P1, P2, P3, P4, P5, UnboundParams...)> final : public Function<typename FunctionWrapper::ResultType(UnboundParams...)> { -public: - PartBoundFunctionImpl(FunctionWrapper functionWrapper, const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) - : m_functionWrapper(functionWrapper) - , m_p1(ParamStorageTraits<P1>::wrap(p1)) - , m_p2(ParamStorageTraits<P2>::wrap(p2)) - , m_p3(ParamStorageTraits<P3>::wrap(p3)) - , m_p4(ParamStorageTraits<P4>::wrap(p4)) - , m_p5(ParamStorageTraits<P5>::wrap(p5)) - { - } - - typename FunctionWrapper::ResultType operator()(UnboundParams... params) override - { - return m_functionWrapper(ParamStorageTraits<P1>::unwrap(m_p1), ParamStorageTraits<P2>::unwrap(m_p2), ParamStorageTraits<P3>::unwrap(m_p3), ParamStorageTraits<P4>::unwrap(m_p4), ParamStorageTraits<P5>::unwrap(m_p5), params...); - } - -private: - FunctionWrapper m_functionWrapper; - typename ParamStorageTraits<P1>::StorageType m_p1; - typename ParamStorageTraits<P2>::StorageType m_p2; - typename ParamStorageTraits<P3>::StorageType m_p3; - typename ParamStorageTraits<P4>::StorageType m_p4; - typename ParamStorageTraits<P5>::StorageType m_p5; -}; - -template<typename FunctionWrapper, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename... UnboundParams> -class PartBoundFunctionImpl<6, FunctionWrapper, R(P1, P2, P3, P4, P5, P6, UnboundParams...)> final : public Function<typename FunctionWrapper::ResultType(UnboundParams...)> { -public: - PartBoundFunctionImpl(FunctionWrapper functionWrapper, const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) - : m_functionWrapper(functionWrapper) - , m_p1(ParamStorageTraits<P1>::wrap(p1)) - , m_p2(ParamStorageTraits<P2>::wrap(p2)) - , m_p3(ParamStorageTraits<P3>::wrap(p3)) - , m_p4(ParamStorageTraits<P4>::wrap(p4)) - , m_p5(ParamStorageTraits<P5>::wrap(p5)) - , m_p6(ParamStorageTraits<P6>::wrap(p6)) - { - } - - typename FunctionWrapper::ResultType operator()(UnboundParams... params) override - { - return m_functionWrapper(ParamStorageTraits<P1>::unwrap(m_p1), ParamStorageTraits<P2>::unwrap(m_p2), ParamStorageTraits<P3>::unwrap(m_p3), ParamStorageTraits<P4>::unwrap(m_p4), ParamStorageTraits<P5>::unwrap(m_p5), ParamStorageTraits<P6>::unwrap(m_p6), params...); - } - -private: - FunctionWrapper m_functionWrapper; - typename ParamStorageTraits<P1>::StorageType m_p1; - typename ParamStorageTraits<P2>::StorageType m_p2; - typename ParamStorageTraits<P3>::StorageType m_p3; - typename ParamStorageTraits<P4>::StorageType m_p4; - typename ParamStorageTraits<P5>::StorageType m_p5; - typename ParamStorageTraits<P6>::StorageType m_p6; -}; - -template<typename FunctionWrapper, typename R, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename... UnboundParams> -class PartBoundFunctionImpl<7, FunctionWrapper, R(P1, P2, P3, P4, P5, P6, P7, UnboundParams...)> final : public Function<typename FunctionWrapper::ResultType(UnboundParams...)> { -public: - PartBoundFunctionImpl(FunctionWrapper functionWrapper, const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6, const P7& p7) - : m_functionWrapper(functionWrapper) - , m_p1(ParamStorageTraits<P1>::wrap(p1)) - , m_p2(ParamStorageTraits<P2>::wrap(p2)) - , m_p3(ParamStorageTraits<P3>::wrap(p3)) - , m_p4(ParamStorageTraits<P4>::wrap(p4)) - , m_p5(ParamStorageTraits<P5>::wrap(p5)) - , m_p6(ParamStorageTraits<P6>::wrap(p6)) - , m_p7(ParamStorageTraits<P7>::wrap(p7)) - { - } - - typename FunctionWrapper::ResultType operator()(UnboundParams... params) override - { - return m_functionWrapper(ParamStorageTraits<P1>::unwrap(m_p1), ParamStorageTraits<P2>::unwrap(m_p2), ParamStorageTraits<P3>::unwrap(m_p3), ParamStorageTraits<P4>::unwrap(m_p4), ParamStorageTraits<P5>::unwrap(m_p5), ParamStorageTraits<P6>::unwrap(m_p6), ParamStorageTraits<P7>::unwrap(m_p7), params...); - } - -private: - FunctionWrapper m_functionWrapper; - typename ParamStorageTraits<P1>::StorageType m_p1; - typename ParamStorageTraits<P2>::StorageType m_p2; - typename ParamStorageTraits<P3>::StorageType m_p3; - typename ParamStorageTraits<P4>::StorageType m_p4; - typename ParamStorageTraits<P5>::StorageType m_p5; - typename ParamStorageTraits<P6>::StorageType m_p6; - typename ParamStorageTraits<P7>::StorageType m_p7; + std::tuple<typename ParamStorageTraits<BoundParameters>::StorageType...> m_bound; }; -template<typename... UnboundArgs, typename FunctionType, typename... BoundArgs> -PassOwnPtr<Function<typename FunctionWrapper<FunctionType>::ResultType(UnboundArgs...)>> bind(FunctionType function, const BoundArgs&... boundArgs) +template<typename... UnboundParameters, typename FunctionType, typename... BoundParameters> +PassOwnPtr<Function<typename FunctionWrapper<FunctionType>::ResultType(UnboundParameters...)>> bind(FunctionType function, const BoundParameters&... boundParameters) { - const int boundArgsCount = sizeof...(BoundArgs); - using BoundFunctionType = PartBoundFunctionImpl<boundArgsCount, FunctionWrapper<FunctionType>, typename FunctionWrapper<FunctionType>::ResultType(BoundArgs..., UnboundArgs...)>; - return adoptPtr(new BoundFunctionType(FunctionWrapper<FunctionType>(function), boundArgs...)); + // Bound parameters' types are wrapped with std::tuple so we can pass two template parameter packs (bound + // parameters and unbound) to PartBoundFunctionImpl. Note that a tuple of this type isn't actually created; + // std::tuple<> is just for carrying the bound parameters' types. Any other class template taking a type parameter + // pack can be used instead of std::tuple. std::tuple is used just because it's most convenient for this purpose. + using BoundFunctionType = PartBoundFunctionImpl<std::tuple<BoundParameters...>, FunctionWrapper<FunctionType>, UnboundParameters...>; + return adoptPtr(new BoundFunctionType(FunctionWrapper<FunctionType>(function), boundParameters...)); } typedef Function<void()> Closure;
diff --git a/third_party/WebKit/Source/wtf/FunctionalTest.cpp b/third_party/WebKit/Source/wtf/FunctionalTest.cpp index 80fbf93..89dee4a 100644 --- a/third_party/WebKit/Source/wtf/FunctionalTest.cpp +++ b/third_party/WebKit/Source/wtf/FunctionalTest.cpp
@@ -311,6 +311,23 @@ EXPECT_EQ(21, (*partiallyBoundFunction)(7)); } +bool lotsOfArguments(int first, int second, int third, int fourth, int fifth, int sixth, int seventh, int eighth, int ninth, int tenth) +{ + return first == 1 && second == 2 && third == 3 && fourth == 4 && fifth == 5 && sixth == 6 && seventh == 7 && eighth == 8 && ninth == 9 && tenth == 10; +} + +TEST(FunctionalTest, LotsOfBoundVariables) +{ + OwnPtr<Function<bool(int, int)>> eightBound = bind<int, int>(lotsOfArguments, 1, 2, 3, 4, 5, 6, 7, 8); + EXPECT_TRUE((*eightBound)(9, 10)); + + OwnPtr<Function<bool(int)>> nineBound = bind<int>(lotsOfArguments, 1, 2, 3, 4, 5, 6, 7, 8, 9); + EXPECT_TRUE((*nineBound)(10)); + + OwnPtr<Function<bool()>> allBound = bind(lotsOfArguments, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10); + EXPECT_TRUE((*allBound)()); +} + } // anonymous namespace } // namespace WTF
diff --git a/third_party/WebKit/Source/wtf/dtoa/utils.h b/third_party/WebKit/Source/wtf/dtoa/utils.h index 0a61c015..dcc433f 100644 --- a/third_party/WebKit/Source/wtf/dtoa/utils.h +++ b/third_party/WebKit/Source/wtf/dtoa/utils.h
@@ -163,9 +163,9 @@ // Returns the pointer to the start of the data in the vector. T* start() const { return start_; } - // Access individual vector elements - checks bounds in debug mode. + // Access individual vector elements. T& operator[](int index) const { - ASSERT(0 <= index && index < length_); + RELEASE_ASSERT(0 <= index && index < length_); return start_[index]; }
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/android.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/android.py index 418f1f8..fccd5b8d 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/android.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/android.py
@@ -412,7 +412,7 @@ # Android has aac and mp3 codecs built in. PORT_HAS_AUDIO_CODECS_BUILT_IN = True - BUILD_REQUIREMENTS_URL = 'https://code.google.com/p/chromium/wiki/AndroidBuildInstructions' + BUILD_REQUIREMENTS_URL = 'https://www.chromium.org/developers/how-tos/android-build-instructions' def __init__(self, host, port_name, **kwargs): super(AndroidPort, self).__init__(host, port_name, **kwargs) @@ -516,7 +516,7 @@ if not result: _log.error('For complete Android build requirements, please see:') _log.error('') - _log.error(' http://code.google.com/p/chromium/wiki/AndroidBuildInstructions') + _log.error(' https://www.chromium.org/developers/how-tos/android-build-instructions') return test_run_results.UNEXPECTED_ERROR_EXIT_STATUS return self._check_devices(printer)
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/linux.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/linux.py index 4b403f7e..7ccf4c9 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/linux.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/linux.py
@@ -52,7 +52,7 @@ DEFAULT_BUILD_DIRECTORIES = ('out',) - BUILD_REQUIREMENTS_URL = 'https://code.google.com/p/chromium/wiki/LinuxBuildInstructions' + BUILD_REQUIREMENTS_URL = 'https://chromium.googlesource.com/chromium/src/+/master/docs/linux_build_instructions.md' @classmethod def _determine_driver_path_statically(cls, host, options): @@ -130,7 +130,7 @@ if result: _log.error('For complete Linux build requirements, please see:') _log.error('') - _log.error(' http://code.google.com/p/chromium/wiki/LinuxBuildInstructions') + _log.error(' https://chromium.googlesource.com/chromium/src/+/master/docs/linux_build_instructions.md') return result def look_for_new_crash_logs(self, crashed_processes, start_time):
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/mac.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/mac.py index 4a4d3ac..80d5a0a 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/mac.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/mac.py
@@ -60,7 +60,7 @@ CONTENT_SHELL_NAME = 'Content Shell' - BUILD_REQUIREMENTS_URL = 'https://code.google.com/p/chromium/wiki/MacBuildInstructions' + BUILD_REQUIREMENTS_URL = 'https://chromium.googlesource.com/chromium/src/+/master/docs/mac_build_instructions.md' @classmethod def determine_full_port_name(cls, host, options, port_name): @@ -84,7 +84,7 @@ if result: _log.error('For complete Mac build requirements, please see:') _log.error('') - _log.error(' http://code.google.com/p/chromium/wiki/MacBuildInstructions') + _log.error(' https://chromium.googlesource.com/chromium/src/+/master/docs/mac_build_instructions.md') return result
diff --git a/third_party/WebKit/public/blink_headers.gypi b/third_party/WebKit/public/blink_headers.gypi index a13fcd83..5fc5dcd 100644 --- a/third_party/WebKit/public/blink_headers.gypi +++ b/third_party/WebKit/public/blink_headers.gypi
@@ -399,6 +399,7 @@ "web/WebFormElement.h", "web/WebFrame.h", "web/WebFrameClient.h", + "web/WebFrameContentDumper.h", "web/WebFrameLoadType.h", "web/WebFrameOwnerProperties.h", "web/WebFrameSerializer.h",
diff --git a/third_party/WebKit/public/blink_resources.grd b/third_party/WebKit/public/blink_resources.grd index 0a651fb..342e8be 100644 --- a/third_party/WebKit/public/blink_resources.grd +++ b/third_party/WebKit/public/blink_resources.grd
@@ -34,8 +34,6 @@ <include name="IDR_UASTYLE_VIEWPORT_ANDROID_CSS" file="../Source/core/css/viewportAndroid.css" type="BINDATA"/> <include name="IDR_INSPECTOR_OVERLAY_PAGE_HTML" file="../Source/core/inspector/InspectorOverlayPage.html" type="BINDATA"/> - <include name="IDR_INSPECTOR_INJECTED_SCRIPT_SOURCE_JS" file="../Source/core/inspector/v8/InjectedScriptSource.js" type="BINDATA"/> - <include name="IDR_INSPECTOR_DEBUGGER_SCRIPT_SOURCE_JS" file="../Source/core/inspector/v8/DebuggerScript.js" type="BINDATA"/> <include name="IDR_PRIVATE_SCRIPT_DOCUMENTEXECCOMMAND_JS" file="../Source/core/editing/js/DocumentExecCommand.js" type="BINDATA"/> <include name="IDR_PRIVATE_SCRIPT_DOCUMENTXMLTREEVIEWER_CSS" file="../Source/core/xml/DocumentXMLTreeViewer.css" type="BINDATA"/> <include name="IDR_PRIVATE_SCRIPT_DOCUMENTXMLTREEVIEWER_JS" file="../Source/core/xml/DocumentXMLTreeViewer.js" type="BINDATA"/>
diff --git a/third_party/WebKit/public/platform/linux/WebSandboxSupport.h b/third_party/WebKit/public/platform/linux/WebSandboxSupport.h index 2387960c..3d6e801d 100644 --- a/third_party/WebKit/public/platform/linux/WebSandboxSupport.h +++ b/third_party/WebKit/public/platform/linux/WebSandboxSupport.h
@@ -41,7 +41,7 @@ // Put methods here that are required due to sandbox restrictions. // These are currently only implemented only on Linux: -// https://code.google.com/p/chromium/wiki/LinuxSandboxIPC +// https://chromium.googlesource.com/chromium/src/+/master/docs/linux_sandbox_ipc.md class WebSandboxSupport { public: // Get information to instantiate a font which contains glyphs for the given Unicode code-point.
diff --git a/third_party/WebKit/public/platform/modules/background_sync/WebSyncProvider.h b/third_party/WebKit/public/platform/modules/background_sync/WebSyncProvider.h index 251ba15..c1d7d6e7 100644 --- a/third_party/WebKit/public/platform/modules/background_sync/WebSyncProvider.h +++ b/third_party/WebKit/public/platform/modules/background_sync/WebSyncProvider.h
@@ -32,10 +32,6 @@ // Does not take ownership of the WebServiceWorkerRegistration. virtual void unregisterBackgroundSync(int64_t handleId, WebServiceWorkerRegistration*, WebSyncUnregistrationCallbacks*) = 0; - // Takes ownership of the WebSyncRegistrationCallbacks. - // Does not take ownership of the WebServiceWorkerRegistration. - virtual void getRegistration(const WebString&, WebServiceWorkerRegistration*, WebSyncRegistrationCallbacks*) = 0; - // Takes ownership of the WebSyncGetRegistrationsCallbacks. // Does not take ownership of the WebServiceWorkerRegistration. virtual void getRegistrations(WebServiceWorkerRegistration*, WebSyncGetRegistrationsCallbacks*) = 0;
diff --git a/third_party/WebKit/public/web/WebAXEnums.h b/third_party/WebKit/public/web/WebAXEnums.h index 5778654d..ae54977d 100644 --- a/third_party/WebKit/public/web/WebAXEnums.h +++ b/third_party/WebKit/public/web/WebAXEnums.h
@@ -44,6 +44,7 @@ WebAXEventBlur, WebAXEventCheckedStateChanged, WebAXEventChildrenChanged, + WebAXEventClicked, WebAXEventDocumentSelectionChanged, WebAXEventFocus, WebAXEventHide,
diff --git a/third_party/WebKit/public/web/WebFrame.h b/third_party/WebKit/public/web/WebFrame.h index f7e347d..4388083 100644 --- a/third_party/WebKit/public/web/WebFrame.h +++ b/third_party/WebKit/public/web/WebFrame.h
@@ -99,14 +99,6 @@ // getting a frame's parent or its opener. class WebFrame { public: - // Control of layoutTreeAsText output - enum LayoutAsTextControl { - LayoutAsTextNormal = 0, - LayoutAsTextDebug = 1 << 0, - LayoutAsTextPrinting = 1 << 1, - LayoutAsTextWithLineTrees = 1 << 2 - }; - typedef unsigned LayoutAsTextControls; // FIXME: We already have blink::TextGranularity. For now we support only // a part of blink::TextGranularity. @@ -555,27 +547,6 @@ // Utility ------------------------------------------------------------- - // Returns the contents of this frame as a string. If the text is - // longer than maxChars, it will be clipped to that length. WARNING: - // This function may be slow depending on the number of characters - // retrieved and page complexity. For a typically sized page, expect - // it to take on the order of milliseconds. - // - // If there is room, subframe text will be recursively appended. Each - // frame will be separated by an empty line. - virtual WebString contentAsText(size_t maxChars) const = 0; - - // Returns HTML text for the contents of this frame. This is generated - // from the DOM. - virtual WebString contentAsMarkup() const = 0; - - // Returns a text representation of the render tree. This method is used - // to support layout tests. - virtual WebString layoutTreeAsText(LayoutAsTextControls toShow = LayoutAsTextNormal) const = 0; - - // Calls markerTextForListItem() defined in core/layout/LayoutTreeAsText.h. - virtual WebString markerTextForListItem(const WebElement&) const = 0; - // Prints all of the pages into the canvas, with page boundaries drawn as // one pixel wide blue lines. This method exists to support layout tests. virtual void printPagesWithBoundaries(WebCanvas*, const WebSize&) = 0;
diff --git a/third_party/WebKit/public/web/WebFrameContentDumper.h b/third_party/WebKit/public/web/WebFrameContentDumper.h new file mode 100644 index 0000000..a1e3f65 --- /dev/null +++ b/third_party/WebKit/public/web/WebFrameContentDumper.h
@@ -0,0 +1,50 @@ +// Copyright 2016 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 WebFrameContentDumper_h +#define WebFrameContentDumper_h + +#include "public/platform/WebCommon.h" + +namespace blink { + +class WebLocalFrame; +class WebString; + +// Functions in this class should only be used for +// testing purposes. +// The exceptions to this rule are tracked in http://crbug.com/585164. +class WebFrameContentDumper { +public: + // Control of layoutTreeAsText output + enum LayoutAsTextControl { + LayoutAsTextNormal = 0, + LayoutAsTextDebug = 1 << 0, + LayoutAsTextPrinting = 1 << 1, + LayoutAsTextWithLineTrees = 1 << 2 + }; + typedef unsigned LayoutAsTextControls; + + // Returns the contents of this frame as a string. If the text is + // longer than maxChars, it will be clipped to that length. WARNING: + // This function may be slow depending on the number of characters + // retrieved and page complexity. For a typically sized page, expect + // it to take on the order of milliseconds. + // + // If there is room, subframe text will be recursively appended. Each + // frame will be separated by an empty line. + BLINK_EXPORT static WebString dumpFrameTreeAsText(WebLocalFrame*, size_t maxChars); + + // Returns HTML text for the contents of this frame, generated + // from the DOM. + BLINK_EXPORT static WebString dumpAsMarkup(WebLocalFrame*); + + // Returns a text representation of the render tree. This method is used + // to support layout tests. + BLINK_EXPORT static WebString dumpLayoutTreeAsText(WebLocalFrame*, LayoutAsTextControls toShow = LayoutAsTextNormal); +}; + +} // namespace blink + +#endif
diff --git a/third_party/WebKit/public/web/WebInputEvent.h b/third_party/WebKit/public/web/WebInputEvent.h index 92b6347..b67617a 100644 --- a/third_party/WebKit/public/web/WebInputEvent.h +++ b/third_party/WebKit/public/web/WebInputEvent.h
@@ -582,12 +582,10 @@ // must wait for an ACK for this event. If false then no ACK IPC is expected. bool cancelable; - // Whether the event will produce scroll-inducing events if uncanceled. This - // will be true for touchmove events after the platform slop region has been - // exceeded and fling-generating touchend events. Note that this doesn't - // necessarily mean content will scroll, only that scroll events will be - // generated. - bool causesScrollingIfUncanceled; + // For a single touch, this is true after the touch-point has moved beyond + // the platform slop region. For a multitouch, this is true after any + // touch-point has moved (by whatever amount). + bool movedBeyondSlopRegion; // A unique identifier for the touch event. uint32_t uniqueTouchEventId; @@ -596,7 +594,7 @@ : WebInputEvent(sizeof(WebTouchEvent)) , touchesLength(0) , cancelable(true) - , causesScrollingIfUncanceled(false) + , movedBeyondSlopRegion(false) , uniqueTouchEventId(0) { }
diff --git a/third_party/WebKit/public/web/WebLocalFrame.h b/third_party/WebKit/public/web/WebLocalFrame.h index c1aad69..a0f57e9 100644 --- a/third_party/WebKit/public/web/WebLocalFrame.h +++ b/third_party/WebKit/public/web/WebLocalFrame.h
@@ -75,6 +75,11 @@ // Get the highest-level LocalFrame in this frame's in-process subtree. virtual WebLocalFrame* localRoot() = 0; + // Returns the previous/next local frame in "frame traversal order", + // optionally wrapping around. + virtual WebLocalFrame* traversePreviousLocal(bool wrap) const = 0; + virtual WebLocalFrame* traverseNextLocal(bool wrap) const = 0; + // Navigation Ping -------------------------------------------------------- virtual void sendPings(const WebNode& contextNode, const WebURL& destinationURL) = 0;
diff --git a/third_party/binutils/Linux_ia32/binutils.tar.bz2.sha1 b/third_party/binutils/Linux_ia32/binutils.tar.bz2.sha1 index 334186c0..193ff04 100644 --- a/third_party/binutils/Linux_ia32/binutils.tar.bz2.sha1 +++ b/third_party/binutils/Linux_ia32/binutils.tar.bz2.sha1
@@ -1 +1 @@ -b441a117dacb5996e4104e5a56cc40f3b7827090 \ No newline at end of file +2b69e02785cfc016cf586d40296e98adf0669310 \ No newline at end of file
diff --git a/third_party/binutils/Linux_x64/binutils.tar.bz2.sha1 b/third_party/binutils/Linux_x64/binutils.tar.bz2.sha1 index fc15602..7ea4a74 100644 --- a/third_party/binutils/Linux_x64/binutils.tar.bz2.sha1 +++ b/third_party/binutils/Linux_x64/binutils.tar.bz2.sha1
@@ -1 +1 @@ -84702c49591e8994c32e0ded578c99d8dcb7a9f2 \ No newline at end of file +43ac0129d4f4fb570e14571e9e7510ba178d77cd \ No newline at end of file
diff --git a/third_party/binutils/README.chromium b/third_party/binutils/README.chromium index 8c68129..5f32f899 100644 --- a/third_party/binutils/README.chromium +++ b/third_party/binutils/README.chromium
@@ -13,7 +13,8 @@ Precise. The script creates chroots for 32bit and 64bit Ubuntu Precise and then builds -binutils inside the roots. +binutils inside the roots. It also builds tcmalloc and links binutils with it +to improve the speed of LTO. Version 2.25 was released on Wed, 24 Dec 2014
diff --git a/third_party/binutils/build-all.sh b/third_party/binutils/build-all.sh index 30f1ee9..dc63683 100755 --- a/third_party/binutils/build-all.sh +++ b/third_party/binutils/build-all.sh
@@ -35,6 +35,9 @@ exit 1 fi +if [ ! -d gperftools ]; then + git clone --branch gperftools-2.4 https://github.com/gperftools/gperftools +fi # Extract the source rm -rf binutils-$VERSION @@ -69,9 +72,10 @@ echo "" echo "Building chroot for $ARCH" echo "=============================" + GPERFTOOLS_DEPS=autoconf,automake,libtool sudo debootstrap \ --arch=$ARCH \ - --include=build-essential,flex,bison \ + --include=build-essential,flex,bison,$GPERFTOOLS_DEPS \ precise precise-chroot-$ARCH echo "=============================" fi @@ -87,6 +91,7 @@ sudo mkdir -p "$BUILDDIR" sudo cp -a binutils-$VERSION "$BUILDDIR" sudo cp -a build-one.sh "$BUILDDIR" + sudo cp -a gperftools "$BUILDDIR" # Do the build PREFIX=
diff --git a/third_party/binutils/build-one.sh b/third_party/binutils/build-one.sh index 1a45638a0..7611d09 100755 --- a/third_party/binutils/build-one.sh +++ b/third_party/binutils/build-one.sh
@@ -15,19 +15,39 @@ cd "$1" +# First, we need to build libtcmalloc_minimal + +cd ../gperftools/ +./autogen.sh +./configure --disable-static --enable-minimal --disable-heap-checker \ + --disable-heap-profiler --disable-cpu-profiler +make -j8 + +cd "$1" + # Ask the dynamic loader to load libstdc++ from the LLVM build directory if # available. That copy of libstdc++ is required by the gold plugin in the same -# directory. The dynamic loader expects the relative path to start with $ORIGIN, +# directory. Do the same for libtcmalloc_minimal, that is stored in ../lib. +# The dynamic loader expects the relative path to start with $ORIGIN, # but because of escaping issues # (https://sourceware.org/ml/binutils/2009-05/msg00252.html) # we embed a dummy path with $ replaced with z and fix it up later. -export LDFLAGS='-Wl,-rpath,zORIGIN/../../../../llvm-build/Release+Asserts/lib' + +readonly LIBSTDCPP_RPATH="zORIGIN/../../../../llvm-build/Release+Asserts/lib" +readonly LIBTCMALLOC_RPATH="zORIGIN/../lib" +export LDFLAGS="-Wl,-rpath,$LIBSTDCPP_RPATH:$LIBTCMALLOC_RPATH \ + -L$(pwd)/../gperftools/.libs/" +export LIBS='-ltcmalloc_minimal' ./configure --enable-gold=default --enable-threads --enable-plugins \ --prefix=/build/output + make -j8 all make install +# Copy libtcmalloc_minimal library and symlinks to the install lib dir. +cp -a ../gperftools/.libs/libtcmalloc_minimal.so* /build/output/*/lib/ + # Save the list of binaries. The sed -i command will leave .orig files behind. # We don't want them to appear in the for loop below. bins="$(echo /build/output/*/bin/*)" @@ -35,9 +55,9 @@ # Fix up zORIGIN -> $ORIGIN. sed -i.orig 's,zORIGIN,$ORIGIN,g' $bins -# Verify that we changed only one byte per executable. +# Verify that we changed only two bytes per executable. for bin in $bins; do - test "`cmp -l $bin.orig $bin | wc -l`" = 1 || \ + test "`cmp -l $bin.orig $bin | wc -l`" = 2 || \ (echo "$bin: verification failed" && exit 1) done
diff --git a/third_party/closure_compiler/compiled_resources.gyp b/third_party/closure_compiler/compiled_resources.gyp index 28ae455d..59cb97d 100644 --- a/third_party/closure_compiler/compiled_resources.gyp +++ b/third_party/closure_compiler/compiled_resources.gyp
@@ -7,7 +7,7 @@ # http://build.chromium.org/p/chromium.fyi/builders/Closure%20Compilation%20Linux # # Also, see our guide to Closure compilation in chrome: -# https://code.google.com/p/chromium/wiki/ClosureCompilation +# https://chromium.googlesource.com/chromium/src/+/master/docs/closure_compilation.md { 'targets': [ {
diff --git a/third_party/closure_compiler/compiled_resources2.gyp b/third_party/closure_compiler/compiled_resources2.gyp index e76bf5b..72eac65 100644 --- a/third_party/closure_compiler/compiled_resources2.gyp +++ b/third_party/closure_compiler/compiled_resources2.gyp
@@ -7,7 +7,7 @@ # http://build.chromium.org/p/chromium.fyi/builders/Closure%20Compilation%20Linux # # Also, see our guide to Closure compilation in chrome: -# https://code.google.com/p/chromium/wiki/ClosureCompilation +# https://chromium.googlesource.com/chromium/src/+/master/docs/closure_compilation.md { 'targets': [ {
diff --git a/third_party/closure_compiler/externs/bluetooth.js b/third_party/closure_compiler/externs/bluetooth.js index ca5038be..e882535 100644 --- a/third_party/closure_compiler/externs/bluetooth.js +++ b/third_party/closure_compiler/externs/bluetooth.js
@@ -7,7 +7,7 @@ // NOTE: The format of types has changed. 'FooType' is now // 'chrome.bluetooth.FooType'. // Please run the closure compiler before committing changes. -// See https://code.google.com/p/chromium/wiki/ClosureCompilation. +// See https://chromium.googlesource.com/chromium/src/+/master/docs/closure_compilation.md /** @fileoverview Externs generated from namespace: bluetooth */
diff --git a/third_party/closure_compiler/externs/bluetooth_private.js b/third_party/closure_compiler/externs/bluetooth_private.js index 8e04526b..d4cdc98 100644 --- a/third_party/closure_compiler/externs/bluetooth_private.js +++ b/third_party/closure_compiler/externs/bluetooth_private.js
@@ -7,7 +7,7 @@ // NOTE: The format of types has changed. 'FooType' is now // 'chrome.bluetoothPrivate.FooType'. // Please run the closure compiler before committing changes. -// See https://code.google.com/p/chromium/wiki/ClosureCompilation. +// See https://chromium.googlesource.com/chromium/src/+/master/docs/closure_compilation.md // IMPORTANT: // s/chrome.bluetoothPrivate.bluetooth.Device/chrome.bluetooth.Device/
diff --git a/third_party/closure_compiler/externs/developer_private.js b/third_party/closure_compiler/externs/developer_private.js index 9c6ded7..4ff417d 100644 --- a/third_party/closure_compiler/externs/developer_private.js +++ b/third_party/closure_compiler/externs/developer_private.js
@@ -7,7 +7,7 @@ // NOTE: The format of types has changed. 'FooType' is now // 'chrome.developerPrivate.FooType'. // Please run the closure compiler before committing changes. -// See https://code.google.com/p/chromium/wiki/ClosureCompilation. +// See https://chromium.googlesource.com/chromium/src/+/master/docs/closure_compilation.md /** @fileoverview Externs generated from namespace: developerPrivate */
diff --git a/third_party/closure_compiler/externs/language_settings_private.js b/third_party/closure_compiler/externs/language_settings_private.js index 0b3d8e0..82375b2 100644 --- a/third_party/closure_compiler/externs/language_settings_private.js +++ b/third_party/closure_compiler/externs/language_settings_private.js
@@ -7,7 +7,7 @@ // NOTE: The format of types has changed. 'FooType' is now // 'chrome.languageSettingsPrivate.FooType'. // Please run the closure compiler before committing changes. -// See https://code.google.com/p/chromium/wiki/ClosureCompilation. +// See https://chromium.googlesource.com/chromium/src/+/master/docs/closure_compilation.md /** @fileoverview Externs generated from namespace: languageSettingsPrivate */
diff --git a/third_party/closure_compiler/externs/management.js b/third_party/closure_compiler/externs/management.js index 9233173..4efa40f 100644 --- a/third_party/closure_compiler/externs/management.js +++ b/third_party/closure_compiler/externs/management.js
@@ -7,7 +7,7 @@ // NOTE: The format of types has changed. 'FooType' is now // 'chrome.management.FooType'. // Please run the closure compiler before committing changes. -// See https://code.google.com/p/chromium/wiki/ClosureCompilation. +// See https://chromium.googlesource.com/chromium/src/+/master/docs/closure_compilation.md /** @fileoverview Externs generated from namespace: management */
diff --git a/third_party/closure_compiler/externs/networking_private.js b/third_party/closure_compiler/externs/networking_private.js index c3b0080e..ee64645 100644 --- a/third_party/closure_compiler/externs/networking_private.js +++ b/third_party/closure_compiler/externs/networking_private.js
@@ -7,7 +7,7 @@ // NOTE: The format of types has changed. 'FooType' is now // 'chrome.networkingPrivate.FooType'. // Please run the closure compiler before committing changes. -// See https://code.google.com/p/chromium/wiki/ClosureCompilation. +// See https://chromium.googlesource.com/chromium/src/+/master/docs/closure_compilation.md /** @fileoverview Externs generated from namespace: networkingPrivate */
diff --git a/third_party/closure_compiler/externs/settings_private.js b/third_party/closure_compiler/externs/settings_private.js index 228516f..ec9bd7e7 100644 --- a/third_party/closure_compiler/externs/settings_private.js +++ b/third_party/closure_compiler/externs/settings_private.js
@@ -7,7 +7,7 @@ // NOTE: The format of types has changed. 'FooType' is now // 'chrome.settingsPrivate.FooType'. // Please run the closure compiler before committing changes. -// See https://code.google.com/p/chromium/wiki/ClosureCompilation. +// See https://chromium.googlesource.com/chromium/src/+/master/docs/closure_compilation.md /** @fileoverview Externs generated from namespace: settingsPrivate */
diff --git a/third_party/google_input_tools/third_party/closure_library/closure/bin/build/closurebuilder.py b/third_party/google_input_tools/third_party/closure_library/closure/bin/build/closurebuilder.py index 1f01e61d..1ea8120 100755 --- a/third_party/google_input_tools/third_party/closure_library/closure/bin/build/closurebuilder.py +++ b/third_party/google_input_tools/third_party/closure_library/closure/bin/build/closurebuilder.py
@@ -246,7 +246,7 @@ Please migrate your codebase. See: -https://code.google.com/p/closure-compiler/wiki/ManageClosureDependencies +https://github.com/google/closure-compiler/wiki/Manage-Closure-Dependencies """) # Make sure a .jar is specified.
diff --git a/third_party/libjingle/README.chromium b/third_party/libjingle/README.chromium index 0379d40..af65653 100644 --- a/third_party/libjingle/README.chromium +++ b/third_party/libjingle/README.chromium
@@ -1,7 +1,7 @@ Name: libjingle URL: http://www.webrtc.org Version: unknown -Revision: 11498 +Revision: 11522 License: BSD License File: source/talk/COPYING Security Critical: yes
diff --git a/third_party/polymer/v1_0/bower.json b/third_party/polymer/v1_0/bower.json index d4d4c51..4329d2f 100644 --- a/third_party/polymer/v1_0/bower.json +++ b/third_party/polymer/v1_0/bower.json
@@ -20,7 +20,7 @@ "iron-iconset-svg": "PolymerElements/iron-iconset-svg#^1.0.0", "iron-image": "PolymerElements/iron-image#^1.0.0", "iron-input": "PolymerElements/iron-input#^1.0.0", - "iron-list": "PolymerElements/iron-list#^1.0.0", + "iron-list": "PolymerElements/iron-list#1.1.7", "iron-media-query": "PolymerElements/iron-media-query#^1.0.0", "iron-menu-behavior": "PolymerElements/iron-menu-behavior#^1.0.0", "iron-meta": "PolymerElements/iron-meta#^1.0.0", @@ -28,6 +28,7 @@ "iron-pages": "PolymerElements/iron-pages#^1.0.0", "iron-range-behavior": "PolymerElements/iron-range-behavior#^1.0.0", "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0", + "iron-scroll-target-behavior": "PolymerElements/iron-scroll-target-behavior#^1.0.0", "iron-selector": "PolymerElements/iron-selector#^1.0.0", "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0", "iron-validatable-behavior": "PolymerElements/iron-validatable-behavior#^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/iron-collapse/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-collapse/.bower.json index dca5d44..23797e9 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-collapse/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/iron-collapse/.bower.json
@@ -1,6 +1,6 @@ { "name": "iron-collapse", - "version": "1.0.5", + "version": "1.0.6", "description": "Provides a collapsable container", "authors": [ "The Polymer Authors" @@ -19,21 +19,22 @@ "homepage": "https://github.com/PolymerElements/iron-collapse", "ignore": [], "dependencies": { + "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0", "polymer": "Polymer/polymer#^1.0.0" }, "devDependencies": { - "web-component-tester": "*", + "web-component-tester": "^4.0.0", "test-fixture": "PolymerElements/test-fixture#^1.0.0", "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", "paper-styles": "PolymerElements/paper-styles#^1.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, "main": "iron-collapse.html", - "_release": "1.0.5", + "_release": "1.0.6", "_resolution": { "type": "version", - "tag": "v1.0.5", - "commit": "4d489766568b823d39e5032e2cbb4b85758f1a88" + "tag": "v1.0.6", + "commit": "afd2b928c84fb1a1d6069b05a36c37b269f25209" }, "_source": "git://github.com/PolymerElements/iron-collapse.git", "_target": "^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/iron-collapse/README.md b/third_party/polymer/v1_0/components-chromium/iron-collapse/README.md index 1857979..bc56527 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-collapse/README.md +++ b/third_party/polymer/v1_0/components-chromium/iron-collapse/README.md
@@ -7,6 +7,9 @@ Edit those files, and our readme bot will duplicate them over here! Edit this file, and the bot will squash your changes :) +The bot does some handling of markdown. Please file a bug if it does the wrong +thing! https://github.com/PolymerLabs/tedium/issues + --> [](https://travis-ci.org/PolymerElements/iron-collapse) @@ -16,37 +19,40 @@ ##<iron-collapse> - `iron-collapse` creates a collapsible block of content. By default, the content will be collapsed. Use `opened` or `toggle()` to show/hide the content. - <button on-click="toggle">toggle collapse</button> +```html +<button on-click="toggle">toggle collapse</button> - <iron-collapse id="collapse"> - <div>Content goes here...</div> - </iron-collapse> +<iron-collapse id="collapse"> + <div>Content goes here...</div> +</iron-collapse> - ... +... - toggle: function() { - this.$.collapse.toggle(); - } +toggle: function() { + this.$.collapse.toggle(); +} +``` `iron-collapse` adjusts the height/width of the collapsible element to show/hide the content. So avoid putting padding/margin/border on the collapsible directly, and instead put a div inside and style that. - <style> - .collapse-content { - padding: 15px; - border: 1px solid #dedede; - } - </style> +```html +<style> + .collapse-content { + padding: 15px; + border: 1px solid #dedede; + } +</style> - <iron-collapse> - <div class="collapse-content"> - <div>Content goes here...</div> - </div> - </iron-collapse> +<iron-collapse> + <div class="collapse-content"> + <div>Content goes here...</div> + </div> +</iron-collapse> +```
diff --git a/third_party/polymer/v1_0/components-chromium/iron-collapse/bower.json b/third_party/polymer/v1_0/components-chromium/iron-collapse/bower.json index 5353380..a345df4 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-collapse/bower.json +++ b/third_party/polymer/v1_0/components-chromium/iron-collapse/bower.json
@@ -1,6 +1,6 @@ { "name": "iron-collapse", - "version": "1.0.5", + "version": "1.0.6", "description": "Provides a collapsable container", "authors": [ "The Polymer Authors" @@ -19,10 +19,11 @@ "homepage": "https://github.com/PolymerElements/iron-collapse", "ignore": [], "dependencies": { + "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0", "polymer": "Polymer/polymer#^1.0.0" }, "devDependencies": { - "web-component-tester": "*", + "web-component-tester": "^4.0.0", "test-fixture": "PolymerElements/test-fixture#^1.0.0", "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", "paper-styles": "PolymerElements/paper-styles#^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/iron-collapse/iron-collapse-extracted.js b/third_party/polymer/v1_0/components-chromium/iron-collapse/iron-collapse-extracted.js index bcb1cc7..df3d392 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-collapse/iron-collapse-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/iron-collapse/iron-collapse-extracted.js
@@ -2,6 +2,10 @@ is: 'iron-collapse', + behaviors: [ + Polymer.IronResizableBehavior + ], + properties: { /** @@ -38,6 +42,10 @@ }, + get dimension() { + return this.horizontal ? 'width' : 'height'; + }, + hostAttributes: { role: 'group', 'aria-hidden': 'true', @@ -116,8 +124,10 @@ }, _horizontalChanged: function() { - this.dimension = this.horizontal ? 'width' : 'height'; this.style.transitionProperty = this.dimension; + var otherDimension = this.dimension === 'width' ? 'height' : 'width'; + this.style[otherDimension] = ''; + this.updateSize(this.opened ? 'auto' : '0px', false); }, _openedChanged: function() { @@ -144,6 +154,7 @@ this.toggleClass('iron-collapse-closed', !this.opened); this.toggleClass('iron-collapse-opened', this.opened); this._updateTransition(false); + this.notifyResize(); }, _calcSize: function() {
diff --git a/third_party/polymer/v1_0/components-chromium/iron-collapse/iron-collapse.html b/third_party/polymer/v1_0/components-chromium/iron-collapse/iron-collapse.html index 8835252b..f93dd9db 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-collapse/iron-collapse.html +++ b/third_party/polymer/v1_0/components-chromium/iron-collapse/iron-collapse.html
@@ -7,6 +7,7 @@ Code distributed by Google as part of the polymer project is also subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt --><html><head><link rel="import" href="../polymer/polymer.html"> +<link rel="import" href="../iron-resizable-behavior/iron-resizable-behavior.html"> <!-- `iron-collapse` creates a collapsible block of content. By default, the content @@ -54,13 +55,17 @@ :host { display: block; transition-duration: 300ms; - overflow: auto; + overflow: visible; } :host(.iron-collapse-closed) { display: none; } + :host(:not(.iron-collapse-opened)) { + overflow: hidden; + } + </style> <template>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-dropdown/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-dropdown/.bower.json index 9dad327..d6b62b1 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-dropdown/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/iron-dropdown/.bower.json
@@ -1,6 +1,6 @@ { "name": "iron-dropdown", - "version": "1.1.0", + "version": "1.2.0", "description": "An unstyled element that works similarly to a native browser select", "authors": [ "The Polymer Authors" @@ -32,15 +32,15 @@ "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0", "paper-styles": "polymerelements/paper-styles#^1.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0", - "web-component-tester": "*", + "web-component-tester": "^4.0.0", "iron-image": "polymerelements/iron-image#^1.0.0" }, "ignore": [], - "_release": "1.1.0", + "_release": "1.2.0", "_resolution": { "type": "version", - "tag": "v1.1.0", - "commit": "b09b0d57ba917bac9315de4761373d88e85ac52e" + "tag": "v1.2.0", + "commit": "f864191c6ffbd3aaddea8102102ab40137046327" }, "_source": "git://github.com/PolymerElements/iron-dropdown.git", "_target": "^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/iron-dropdown/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-dropdown/CONTRIBUTING.md index 7b101415..f147978a 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-dropdown/CONTRIBUTING.md +++ b/third_party/polymer/v1_0/components-chromium/iron-dropdown/CONTRIBUTING.md
@@ -5,6 +5,11 @@ If you edit that file, it will get updated everywhere else. If you edit this file, your changes will get overridden :) + +You can however override the jsbin link with one that's customized to this +specific element: + +jsbin=https://jsbin.com/cagaye/edit?html,output --> # Polymer Elements ## Guide for Contributors @@ -41,7 +46,7 @@ 3. Click the `paper-foo` element. ``` - 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output). + 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output). 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers. @@ -51,14 +56,14 @@ When submitting pull requests, please provide: - 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax: + 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax: ```markdown (For a single issue) Fixes #20 (For multiple issues) - Fixes #32, #40 + Fixes #32, fixes #40 ``` 2. **A succinct description of the design** used to fix any related issues. For example:
diff --git a/third_party/polymer/v1_0/components-chromium/iron-dropdown/README.md b/third_party/polymer/v1_0/components-chromium/iron-dropdown/README.md index b054f31..6440ec6 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-dropdown/README.md +++ b/third_party/polymer/v1_0/components-chromium/iron-dropdown/README.md
@@ -7,16 +7,18 @@ Edit those files, and our readme bot will duplicate them over here! Edit this file, and the bot will squash your changes :) +The bot does some handling of markdown. Please file a bug if it does the wrong +thing! https://github.com/PolymerLabs/tedium/issues + --> -[](https://travis-ci.org/PolymerElements/iron-dropdown) +[](https://travis-ci.org/PolymerElements/iron-dropdown) -_[Demo and API Docs](https://elements.polymer-project.org/elements/iron-dropdown)_ +_[Demo and API docs](https://elements.polymer-project.org/elements/iron-dropdown)_ ##<iron-dropdown> - `<iron-dropdown>` is a generalized element that is useful when you have hidden content (`.dropdown-content`) that is revealed due to some change in state that should cause it to do so. @@ -31,9 +33,11 @@ of the `.dropdown-content` relative to the `.dropdown-trigger` to be configured. - <iron-dropdown horizontal-align="right" vertical-align="top"> - <div class="dropdown-content">Hello!</div> - </iron-dropdown> +```html +<iron-dropdown horizontal-align="right" vertical-align="top"> + <div class="dropdown-content">Hello!</div> +</iron-dropdown> +``` In the above example, the `<div>` with class `.dropdown-content` will be hidden until the dropdown element has `opened` set to true, or when the `open`
diff --git a/third_party/polymer/v1_0/components-chromium/iron-dropdown/bower.json b/third_party/polymer/v1_0/components-chromium/iron-dropdown/bower.json index a047d319..8b9b75b 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-dropdown/bower.json +++ b/third_party/polymer/v1_0/components-chromium/iron-dropdown/bower.json
@@ -1,6 +1,6 @@ { "name": "iron-dropdown", - "version": "1.1.0", + "version": "1.2.0", "description": "An unstyled element that works similarly to a native browser select", "authors": [ "The Polymer Authors" @@ -32,7 +32,7 @@ "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0", "paper-styles": "polymerelements/paper-styles#^1.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0", - "web-component-tester": "*", + "web-component-tester": "^4.0.0", "iron-image": "polymerelements/iron-image#^1.0.0" }, "ignore": []
diff --git a/third_party/polymer/v1_0/components-chromium/iron-dropdown/iron-dropdown-extracted.js b/third_party/polymer/v1_0/components-chromium/iron-dropdown/iron-dropdown-extracted.js index d9ea3b4..df95b6a 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-dropdown/iron-dropdown-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/iron-dropdown/iron-dropdown-extracted.js
@@ -158,6 +158,7 @@ /** * The element that should be focused when the dropdown opens. + * @deprecated */ get _focusTarget() { return this.focusTarget || this.containedElement; @@ -257,10 +258,6 @@ this._prepareDropdown(); Polymer.IronOverlayBehaviorImpl._openedChanged.apply(this, arguments); } - - if (this.opened) { - this._focusContent(); - } }, /** @@ -315,7 +312,7 @@ var scrollTop; var scrollLeft; - if (containedElement) { + if (this.opened && containedElement) { scrollTop = containedElement.scrollTop; scrollLeft = containedElement.scrollLeft; } @@ -326,7 +323,7 @@ Polymer.IronOverlayBehaviorImpl._onIronResize.apply(this, arguments); - if (containedElement) { + if (this.opened && containedElement) { containedElement.scrollTop = scrollTop; containedElement.scrollLeft = scrollLeft; } @@ -411,16 +408,15 @@ }, /** - * Focuses the configured focus target. + * Apply focus to focusTarget or containedElement */ - _focusContent: function() { - // NOTE(cdata): This is async so that it can attempt the focus after - // `display: none` is removed from the element. - this.async(function() { - if (this._focusTarget) { - this._focusTarget.focus(); - } - }); + _applyFocus: function () { + var focusTarget = this.focusTarget || this.containedElement; + if (focusTarget && this.opened && !this.noAutoFocus) { + focusTarget.focus(); + } else { + Polymer.IronOverlayBehaviorImpl._applyFocus.apply(this, arguments); + } } }); })(); \ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-dropdown/iron-dropdown-scroll-manager-extracted.js b/third_party/polymer/v1_0/components-chromium/iron-dropdown/iron-dropdown-scroll-manager-extracted.js index 5860db4..02ed8b9 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-dropdown/iron-dropdown-scroll-manager-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/iron-dropdown/iron-dropdown-scroll-manager-extracted.js
@@ -65,6 +65,11 @@ * @param {HTMLElement} element The element that should lock scroll. */ pushScrollLock: function(element) { + // Prevent pushing the same element twice + if (this._lockingElements.indexOf(element) >= 0) { + return; + } + if (this._lockingElements.length === 0) { this._lockScrollInteractions(); } @@ -158,7 +163,7 @@ _scrollInteractionHandler: function(event) { if (Polymer .IronDropdownScrollManager - .elementIsScrollLocked(event.target)) { + .elementIsScrollLocked(Polymer.dom(event).rootTarget)) { if (event.type === 'keydown' && !Polymer.IronDropdownScrollManager._isScrollingKeypress(event)) { return; @@ -185,13 +190,13 @@ document.body.style.overflowY = 'hidden'; // Modern `wheel` event for mouse wheel scrolling: - window.addEventListener('wheel', this._scrollInteractionHandler, true); + document.addEventListener('wheel', this._scrollInteractionHandler, true); // Older, non-standard `mousewheel` event for some FF: - window.addEventListener('mousewheel', this._scrollInteractionHandler, true); + document.addEventListener('mousewheel', this._scrollInteractionHandler, true); // IE: - window.addEventListener('DOMMouseScroll', this._scrollInteractionHandler, true); + document.addEventListener('DOMMouseScroll', this._scrollInteractionHandler, true); // Mobile devices can scroll on touch move: - window.addEventListener('touchmove', this._scrollInteractionHandler, true); + document.addEventListener('touchmove', this._scrollInteractionHandler, true); // Capture keydown to prevent scrolling keys (pageup, pagedown etc.) document.addEventListener('keydown', this._scrollInteractionHandler, true); }, @@ -201,10 +206,10 @@ document.body.style.overflowX = this._originalBodyStyles.overflowX; document.body.style.overflowY = this._originalBodyStyles.overflowY; - window.removeEventListener('wheel', this._scrollInteractionHandler, true); - window.removeEventListener('mousewheel', this._scrollInteractionHandler, true); - window.removeEventListener('DOMMouseScroll', this._scrollInteractionHandler, true); - window.removeEventListener('touchmove', this._scrollInteractionHandler, true); + document.removeEventListener('wheel', this._scrollInteractionHandler, true); + document.removeEventListener('mousewheel', this._scrollInteractionHandler, true); + document.removeEventListener('DOMMouseScroll', this._scrollInteractionHandler, true); + document.removeEventListener('touchmove', this._scrollInteractionHandler, true); document.removeEventListener('keydown', this._scrollInteractionHandler, true); } };
diff --git a/third_party/polymer/v1_0/components-chromium/iron-icons/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-icons/.bower.json index dc329ad..be52e7b 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-icons/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/iron-icons/.bower.json
@@ -1,6 +1,6 @@ { "name": "iron-icons", - "version": "1.1.2", + "version": "1.1.3", "description": "A set of icons for use with iron-icon", "authors": [ "The Polymer Authors" @@ -35,11 +35,11 @@ "util", "update-icons.sh" ], - "_release": "1.1.2", + "_release": "1.1.3", "_resolution": { "type": "version", - "tag": "v1.1.2", - "commit": "14a4138f7da753ee8bebeb9ed4abd6053b2496dd" + "tag": "v1.1.3", + "commit": "c13869b57a9464dfc3a1f26e89858f8be37e7441" }, "_source": "git://github.com/PolymerElements/iron-icons.git", "_target": "^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/iron-icons/README.md b/third_party/polymer/v1_0/components-chromium/iron-icons/README.md index 8010d99..bd11ba7 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-icons/README.md +++ b/third_party/polymer/v1_0/components-chromium/iron-icons/README.md
@@ -19,7 +19,7 @@ ##<iron-icons> -`iron-icons` is a utitliy import that includes the definition for the `iron-icon` element, `iron-iconset-svg` element, as well as an import for the default icon set. +`iron-icons` is a utility import that includes the definition for the `iron-icon` element, `iron-iconset-svg` element, as well as an import for the default icon set. The `iron-icons` directory also includes imports for additional icon sets that can be loaded into your project.
diff --git a/third_party/polymer/v1_0/components-chromium/iron-icons/bower.json b/third_party/polymer/v1_0/components-chromium/iron-icons/bower.json index 47170e73..c5066e9 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-icons/bower.json +++ b/third_party/polymer/v1_0/components-chromium/iron-icons/bower.json
@@ -1,6 +1,6 @@ { "name": "iron-icons", - "version": "1.1.2", + "version": "1.1.3", "description": "A set of icons for use with iron-icon", "authors": [ "The Polymer Authors"
diff --git a/third_party/polymer/v1_0/components-chromium/iron-icons/iron-icons.html b/third_party/polymer/v1_0/components-chromium/iron-icons/iron-icons.html index 24c29653..c219575 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-icons/iron-icons.html +++ b/third_party/polymer/v1_0/components-chromium/iron-icons/iron-icons.html
@@ -8,7 +8,7 @@ --> <!-- -`iron-icons` is a utitliy import that includes the definition for the `iron-icon` element, `iron-iconset-svg` element, as well as an import for the default icon set. +`iron-icons` is a utility import that includes the definition for the `iron-icon` element, `iron-iconset-svg` element, as well as an import for the default icon set. The `iron-icons` directory also includes imports for additional icon sets that can be loaded into your project. @@ -27,9 +27,9 @@ See [iron-iconset](#iron-iconset) and [iron-iconset-svg](#iron-iconset-svg) for more information about how to create a custom iconset. -@group Polymer Core Elements +@group Iron Elements @pseudoElement iron-icons -@homepage polymer.github.io +@demo demo/index.html --> <link rel="import" href="../iron-icon/iron-icon.html"> <link rel="import" href="../iron-iconset-svg/iron-iconset-svg.html">
diff --git a/third_party/polymer/v1_0/components-chromium/iron-image/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-image/.bower.json index cb77179d..6c28880 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-image/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/iron-image/.bower.json
@@ -1,6 +1,6 @@ { "name": "iron-image", - "version": "1.2.0", + "version": "1.2.2", "license": "http://polymer.github.io/LICENSE.txt", "description": "An image-displaying element with lots of convenient features", "private": true, @@ -22,6 +22,7 @@ }, "devDependencies": { "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", + "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0", "paper-styles": "PolymerElements/paper-styles#^1.0.4", "test-fixture": "PolymerElements/test-fixture#^1.0.0", "web-component-tester": "^4.0.0", @@ -30,11 +31,11 @@ "main": "iron-image.html", "ignore": [], "homepage": "https://github.com/PolymerElements/iron-image", - "_release": "1.2.0", + "_release": "1.2.2", "_resolution": { "type": "version", - "tag": "v1.2.0", - "commit": "29ec1efa9af2f7ea17e6b819ae4e9ab941b04c71" + "tag": "v1.2.2", + "commit": "2b9e5466ce0809a8503c369c9c500ec487dee224" }, "_source": "git://github.com/PolymerElements/iron-image.git", "_target": "^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/iron-image/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-image/CONTRIBUTING.md index 7b101415..f147978a 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-image/CONTRIBUTING.md +++ b/third_party/polymer/v1_0/components-chromium/iron-image/CONTRIBUTING.md
@@ -5,6 +5,11 @@ If you edit that file, it will get updated everywhere else. If you edit this file, your changes will get overridden :) + +You can however override the jsbin link with one that's customized to this +specific element: + +jsbin=https://jsbin.com/cagaye/edit?html,output --> # Polymer Elements ## Guide for Contributors @@ -41,7 +46,7 @@ 3. Click the `paper-foo` element. ``` - 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output). + 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output). 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers. @@ -51,14 +56,14 @@ When submitting pull requests, please provide: - 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax: + 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax: ```markdown (For a single issue) Fixes #20 (For multiple issues) - Fixes #32, #40 + Fixes #32, fixes #40 ``` 2. **A succinct description of the design** used to fix any related issues. For example:
diff --git a/third_party/polymer/v1_0/components-chromium/iron-image/README.md b/third_party/polymer/v1_0/components-chromium/iron-image/README.md index df6c83e..379796269f 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-image/README.md +++ b/third_party/polymer/v1_0/components-chromium/iron-image/README.md
@@ -12,9 +12,9 @@ --> -[](https://travis-ci.org/PolymerElements/iron-image) +[](https://travis-ci.org/PolymerElements/iron-image) -_[Demo and API Docs](https://elements.polymer-project.org/elements/iron-image)_ +_[Demo and API docs](https://elements.polymer-project.org/elements/iron-image)_ ##<iron-image>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-image/bower.json b/third_party/polymer/v1_0/components-chromium/iron-image/bower.json index bccce03f..8a7e48c 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-image/bower.json +++ b/third_party/polymer/v1_0/components-chromium/iron-image/bower.json
@@ -1,6 +1,6 @@ { "name": "iron-image", - "version": "1.2.0", + "version": "1.2.2", "license": "http://polymer.github.io/LICENSE.txt", "description": "An image-displaying element with lots of convenient features", "private": true, @@ -22,6 +22,7 @@ }, "devDependencies": { "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", + "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0", "paper-styles": "PolymerElements/paper-styles#^1.0.4", "test-fixture": "PolymerElements/test-fixture#^1.0.0", "web-component-tester": "^4.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/iron-image/iron-image-extracted.js b/third_party/polymer/v1_0/components-chromium/iron-image/iron-image-extracted.js index 90e6eb7..b8cf4c7 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-image/iron-image-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/iron-image/iron-image-extracted.js
@@ -171,7 +171,7 @@ } this.$.sizedImgDiv.style.backgroundImage = src ? 'url("' + src + '")' : ''; - this._setLoading(true); + this._setLoading(!!src); this._setLoaded(false); this._setError(false); },
diff --git a/third_party/polymer/v1_0/components-chromium/iron-list/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-list/.bower.json index c0a32054..841812ca 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-list/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/iron-list/.bower.json
@@ -49,6 +49,6 @@ "commit": "a00edace6cac13c16ba6e7a930d29a14b98e44c7" }, "_source": "git://github.com/PolymerElements/iron-list.git", - "_target": "^1.0.0", + "_target": "1.1.7", "_originalSource": "PolymerElements/iron-list" } \ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-list/compiled_resources2.gyp b/third_party/polymer/v1_0/components-chromium/iron-list/compiled_resources2.gyp index f5fcae84..1517fc07 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-list/compiled_resources2.gyp +++ b/third_party/polymer/v1_0/components-chromium/iron-list/compiled_resources2.gyp
@@ -7,6 +7,7 @@ 'target_name': 'iron-list-extracted', 'dependencies': [ '../iron-resizable-behavior/compiled_resources2.gyp:iron-resizable-behavior-extracted', + '../iron-scroll-target-behavior/compiled_resources2.gyp:iron-scroll-target-behavior-extracted', ], 'includes': ['../../../../closure_compiler/compile_js2.gypi'], },
diff --git a/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/.bower.json index 0610f88..3956d20 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/.bower.json
@@ -1,6 +1,6 @@ { "name": "iron-menu-behavior", - "version": "1.0.7", + "version": "1.1.0", "description": "Provides accessible menu behavior", "authors": "The Polymer Authors", "keywords": [ @@ -23,7 +23,7 @@ "ignore": [], "dependencies": { "iron-selector": "PolymerElements/iron-selector#^1.0.0", - "polymer": "Polymer/polymer#^1.0.0", + "polymer": "Polymer/polymer#^1.2.4", "iron-a11y-keys-behavior": "polymerelements/iron-a11y-keys-behavior#^1.0.0" }, "devDependencies": { @@ -31,14 +31,14 @@ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0", "test-fixture": "PolymerElements/test-fixture#^1.0.0", - "web-component-tester": "polymer/web-component-tester#^3.4.0", + "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, - "_release": "1.0.7", + "_release": "1.1.0", "_resolution": { "type": "version", - "tag": "v1.0.7", - "commit": "e5ca054bbe1c24fbc43adb78217ccc50d9223601" + "tag": "v1.1.0", + "commit": "b18d5478f1d4d6befb15533716d60d5772f8e812" }, "_source": "git://github.com/PolymerElements/iron-menu-behavior.git", "_target": "^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/README.md b/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/README.md index f751514..0c35f352 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/README.md +++ b/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/README.md
@@ -7,6 +7,9 @@ Edit those files, and our readme bot will duplicate them over here! Edit this file, and the bot will squash your changes :) +The bot does some handling of markdown. Please file a bug if it does the wrong +thing! https://github.com/PolymerLabs/tedium/issues + --> [](https://travis-ci.org/PolymerElements/iron-menu-behavior) @@ -16,14 +19,12 @@ ##Polymer.IronMenuBehavior - `Polymer.IronMenuBehavior` implements accessible menu behavior. ##Polymer.IronMenubarBehavior - `Polymer.IronMenubarBehavior` implements accessible menubar behavior.
diff --git a/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/bower.json b/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/bower.json index e3de70b..515df81 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/bower.json +++ b/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/bower.json
@@ -1,6 +1,6 @@ { "name": "iron-menu-behavior", - "version": "1.0.7", + "version": "1.1.0", "description": "Provides accessible menu behavior", "authors": "The Polymer Authors", "keywords": [ @@ -23,7 +23,7 @@ "ignore": [], "dependencies": { "iron-selector": "PolymerElements/iron-selector#^1.0.0", - "polymer": "Polymer/polymer#^1.0.0", + "polymer": "Polymer/polymer#^1.2.4", "iron-a11y-keys-behavior": "polymerelements/iron-a11y-keys-behavior#^1.0.0" }, "devDependencies": { @@ -31,7 +31,7 @@ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0", "test-fixture": "PolymerElements/test-fixture#^1.0.0", - "web-component-tester": "polymer/web-component-tester#^3.4.0", + "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" } }
diff --git a/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/iron-menu-behavior-extracted.js b/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/iron-menu-behavior-extracted.js index b62a9193..fd0cdc5 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/iron-menu-behavior-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/iron-menu-behavior-extracted.js
@@ -58,7 +58,7 @@ * Selects the given value. If the `multi` property is true, then the selected state of the * `value` will be toggled; otherwise the `value` will be selected. * - * @param {string} value the value to select. + * @param {string|number} value the value to select. */ select: function(value) { if (this._defaultFocusAsync) {
diff --git a/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/iron-menubar-behavior-extracted.js b/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/iron-menubar-behavior-extracted.js index 690b84c0..0599efa 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/iron-menubar-behavior-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/iron-menu-behavior/iron-menubar-behavior-extracted.js
@@ -24,12 +24,24 @@ event.detail.keyboardEvent.preventDefault(); }, + get _isRTL() { + return window.getComputedStyle(this)['direction'] === 'rtl'; + }, + _onLeftKey: function() { - this._focusPrevious(); + if (this._isRTL) { + this._focusNext(); + } else { + this._focusPrevious(); + } }, _onRightKey: function() { - this._focusNext(); + if (this._isRTL) { + this._focusPrevious(); + } else { + this._focusNext(); + } }, _onKeydown: function(event) {
diff --git a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/.bower.json index 22433e626..1e1c3d0 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/.bower.json
@@ -1,6 +1,6 @@ { "name": "iron-overlay-behavior", - "version": "1.1.2", + "version": "1.3.0", "license": "http://polymer.github.io/LICENSE.txt", "description": "Provides a behavior for making an element an overlay", "private": true, @@ -19,26 +19,25 @@ "url": "git://github.com/PolymerElements/iron-overlay-behavior.git" }, "dependencies": { - "polymer": "Polymer/polymer#^1.0.0", "iron-fit-behavior": "PolymerElements/iron-fit-behavior#^1.0.0", - "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0" + "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" }, "devDependencies": { - "paper-styles": "polymerelements/paper-styles#^1.0.2", "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0", "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0", - "test-fixture": "PolymerElements/test-fixture#^1.0.0", - "web-component-tester": "polymer/web-component-tester#^3.4.0", + "paper-styles": "PolymerElements/paper-styles#^1.0.2", + "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, "ignore": [], "homepage": "https://github.com/PolymerElements/iron-overlay-behavior", - "_release": "1.1.2", + "_release": "1.3.0", "_resolution": { "type": "version", - "tag": "v1.1.2", - "commit": "40e39a971474f48f5c2c8ee7b8568a0ad5426bd8" + "tag": "v1.3.0", + "commit": "b488ce94ec1c17c3a5491af1a2fba2f7382684da" }, "_source": "git://github.com/PolymerElements/iron-overlay-behavior.git", "_target": "^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/CONTRIBUTING.md index 7b101415..f147978a 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/CONTRIBUTING.md +++ b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/CONTRIBUTING.md
@@ -5,6 +5,11 @@ If you edit that file, it will get updated everywhere else. If you edit this file, your changes will get overridden :) + +You can however override the jsbin link with one that's customized to this +specific element: + +jsbin=https://jsbin.com/cagaye/edit?html,output --> # Polymer Elements ## Guide for Contributors @@ -41,7 +46,7 @@ 3. Click the `paper-foo` element. ``` - 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output). + 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output). 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers. @@ -51,14 +56,14 @@ When submitting pull requests, please provide: - 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax: + 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax: ```markdown (For a single issue) Fixes #20 (For multiple issues) - Fixes #32, #40 + Fixes #32, fixes #40 ``` 2. **A succinct description of the design** used to fix any related issues. For example:
diff --git a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/README.md b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/README.md index bc5c60e..2c5efa8 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/README.md +++ b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/README.md
@@ -7,16 +7,18 @@ Edit those files, and our readme bot will duplicate them over here! Edit this file, and the bot will squash your changes :) +The bot does some handling of markdown. Please file a bug if it does the wrong +thing! https://github.com/PolymerLabs/tedium/issues + --> -[](https://travis-ci.org/PolymerElements/iron-overlay-behavior) +[](https://travis-ci.org/PolymerElements/iron-overlay-behavior) -_[Demo and API Docs](https://elements.polymer-project.org/elements/iron-overlay-behavior)_ +_[Demo and API docs](https://elements.polymer-project.org/elements/iron-overlay-behavior)_ ##<iron-overlay-backdrop> - `iron-overlay-backdrop` is a backdrop used by `Polymer.IronOverlayBehavior`. It should be a singleton. @@ -24,17 +26,17 @@ The following custom properties and mixins are available for styling. -Custom property | Description | Default --------------------------------------------|------------------------|--------- -`--iron-overlay-backdrop-background-color` | Backdrop background color | #000 -`--iron-overlay-backdrop-opacity` | Backdrop opacity | 0.6 -`--iron-overlay-backdrop` | Mixin applied to `iron-overlay-backdrop`. | {} -`--iron-overlay-backdrop-opened` | Mixin applied to `iron-overlay-backdrop` when it is displayed | {} +| Custom property | Description | Default | +| --- | --- | --- | +| `--iron-overlay-backdrop-background-color` | Backdrop background color | #000 | +| `--iron-overlay-backdrop-opacity` | Backdrop opacity | 0.6 | +| `--iron-overlay-backdrop` | Mixin applied to `iron-overlay-backdrop`. | {} | +| `--iron-overlay-backdrop-opened` | Mixin applied to `iron-overlay-backdrop` when it is displayed | {} | + ##Polymer.IronOverlayBehavior - Use `Polymer.IronOverlayBehavior` to implement an element that can be hidden or shown, and displays on top of other content. It includes an optional backdrop, and can be used to implement a variety of UI controls including dialogs and drop downs. Multiple overlays may be displayed at once.
diff --git a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/bower.json b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/bower.json index a21be7fe..7a5aa4d 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/bower.json +++ b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/bower.json
@@ -1,6 +1,6 @@ { "name": "iron-overlay-behavior", - "version": "1.1.2", + "version": "1.3.0", "license": "http://polymer.github.io/LICENSE.txt", "description": "Provides a behavior for making an element an overlay", "private": true, @@ -19,17 +19,16 @@ "url": "git://github.com/PolymerElements/iron-overlay-behavior.git" }, "dependencies": { - "polymer": "Polymer/polymer#^1.0.0", "iron-fit-behavior": "PolymerElements/iron-fit-behavior#^1.0.0", - "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0" + "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" }, "devDependencies": { - "paper-styles": "polymerelements/paper-styles#^1.0.2", "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0", "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0", - "test-fixture": "PolymerElements/test-fixture#^1.0.0", - "web-component-tester": "polymer/web-component-tester#^3.4.0", + "paper-styles": "PolymerElements/paper-styles#^1.0.2", + "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, "ignore": []
diff --git a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/iron-overlay-backdrop-extracted.js b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/iron-overlay-backdrop-extracted.js index fe361638..42007ad 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/iron-overlay-backdrop-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/iron-overlay-backdrop-extracted.js
@@ -23,13 +23,18 @@ }, + listeners: { + 'transitionend' : '_onTransitionend' + }, + /** * Appends the backdrop to document body and sets its `z-index` to be below the latest overlay. */ prepare: function() { + // Always update z-index + this.style.zIndex = this._manager.backdropZ(); if (!this.parentNode) { Polymer.dom(document.body).appendChild(this); - this.style.zIndex = this._manager.currentOverlayZ() - 1; } }, @@ -47,9 +52,18 @@ * Hides the backdrop if needed. */ close: function() { - // only need to make the backdrop invisible if this is called by the last overlay with a backdrop - if (this._manager.getBackdrops().length < 2) { + // Always update z-index + this.style.zIndex = this._manager.backdropZ(); + // close only if no element with backdrop is left + if (this._manager.getBackdrops().length === 0) { + // Read style before setting opened. + var cs = getComputedStyle(this); + var noAnimation = (cs.transitionDuration === '0s' || cs.opacity == 0); this._setOpened(false); + // In case of no animations, complete + if (noAnimation) { + this.complete(); + } } }, @@ -61,6 +75,12 @@ if (this._manager.getBackdrops().length === 0 && this.parentNode) { Polymer.dom(this.parentNode).removeChild(this); } + }, + + _onTransitionend: function (event) { + if (event && event.target === this) { + this.complete(); + } } });
diff --git a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/iron-overlay-behavior-extracted.js b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/iron-overlay-behavior-extracted.js index da018bd..ee78f34 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/iron-overlay-behavior-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/iron-overlay-behavior-extracted.js
@@ -62,8 +62,8 @@ * Set to true to display a backdrop behind the overlay. */ withBackdrop: { - type: Boolean, - value: false + observer: '_withBackdropChanged', + type: Boolean }, /** @@ -117,6 +117,18 @@ value: function() { return this._onCaptureKeydown.bind(this); } + }, + + _boundOnCaptureFocus: { + type: Function, + value: function() { + return this._onCaptureFocus.bind(this); + } + }, + + /** @type {?Node} */ + _focusedChild: { + type: Object } }, @@ -130,18 +142,17 @@ * @type Node */ get backdropElement() { - return this._backdrop; + return this._manager.backdropElement; }, get _focusNode() { - return Polymer.dom(this).querySelector('[autofocus]') || this; - }, - - registered: function() { - this._backdrop = document.createElement('iron-overlay-backdrop'); + return this._focusedChild || Polymer.dom(this).querySelector('[autofocus]') || this; }, ready: function() { + // with-backdrop need tabindex to be set in order to trap the focus. + // If it is not set, IronOverlayBehavior will set it, and remove it if with-backdrop = false. + this.__shouldRemoveTabIndex = false; this._ensureSetup(); }, @@ -154,7 +165,7 @@ detached: function() { this.opened = false; - this._completeBackdrop(); + this._manager.trackBackdrop(this); this._manager.removeOverlay(this); }, @@ -162,6 +173,7 @@ * Toggle the opened state of the overlay. */ toggle: function() { + this._setCanceled(false); this.opened = !this.opened; }, @@ -169,16 +181,16 @@ * Open the overlay. */ open: function() { + this._setCanceled(false); this.opened = true; - this.closingReason = {canceled: false}; }, /** * Close the overlay. */ close: function() { - this.opened = false; this._setCanceled(false); + this.opened = false; }, /** @@ -190,8 +202,8 @@ return; } - this.opened = false; this._setCanceled(true); + this.opened = false; }, _ensureSetup: function() { @@ -208,6 +220,7 @@ this.removeAttribute('aria-hidden'); } else { this.setAttribute('aria-hidden', 'true'); + Polymer.dom(this).unobserveNodes(this._observer); } // wait to call after ready only if we're initially open @@ -215,30 +228,32 @@ this._callOpenedWhenReady = this.opened; return; } - if (this._openChangedAsync) { - this.cancelAsync(this._openChangedAsync); - } - this._toggleListeners(); + this._manager.trackBackdrop(this); if (this.opened) { this._prepareRenderOpened(); } - // async here to allow overlay layer to become visible. + if (this._openChangedAsync) { + this.cancelAsync(this._openChangedAsync); + } + // Async here to allow overlay layer to become visible, and to avoid + // listeners to immediately close via a click. this._openChangedAsync = this.async(function() { // overlay becomes visible here this.style.display = ''; - // force layout to ensure transitions will go - /** @suppress {suspiciousCode} */ this.offsetWidth; + // Force layout to ensure transition will go. Set offsetWidth to itself + // so that compilers won't remove it. + this.offsetWidth = this.offsetWidth; if (this.opened) { this._renderOpened(); } else { this._renderClosed(); } + this._toggleListeners(); this._openChangedAsync = null; - }); - + }, 1); }, _canceledChanged: function() { @@ -246,6 +261,29 @@ this.closingReason.canceled = this.canceled; }, + _withBackdropChanged: function() { + // If tabindex is already set, no need to override it. + if (this.withBackdrop && !this.hasAttribute('tabindex')) { + this.setAttribute('tabindex', '-1'); + this.__shouldRemoveTabIndex = true; + } else if (this.__shouldRemoveTabIndex) { + this.removeAttribute('tabindex'); + this.__shouldRemoveTabIndex = false; + } + if (this.opened) { + this._manager.trackBackdrop(this); + if (this.withBackdrop) { + this.backdropElement.prepare(); + // Give time to be added to document. + this.async(function(){ + this.backdropElement.open(); + }, 1); + } else { + this.backdropElement.close(); + } + } + }, + _toggleListener: function(enable, node, event, boundListener, capture) { if (enable) { // enable document-wide tap recognizer @@ -262,30 +300,23 @@ } }, - _toggleListeners: function() { - if (this._toggleListenersAsync) { - this.cancelAsync(this._toggleListenersAsync); - } - // async so we don't auto-close immediately via a click. - this._toggleListenersAsync = this.async(function() { - this._toggleListener(this.opened, document, 'tap', this._boundOnCaptureClick, true); - this._toggleListener(this.opened, document, 'keydown', this._boundOnCaptureKeydown, true); - this._toggleListenersAsync = null; - }, 1); + _toggleListeners: function () { + this._toggleListener(this.opened, document, 'tap', this._boundOnCaptureClick, true); + this._toggleListener(this.opened, document, 'keydown', this._boundOnCaptureKeydown, true); + this._toggleListener(this.opened, document, 'focus', this._boundOnCaptureFocus, true); }, // tasks which must occur before opening; e.g. making the element visible _prepareRenderOpened: function() { this._manager.addOverlay(this); - if (this.withBackdrop) { - this.backdropElement.prepare(); - this._manager.trackBackdrop(this); - } - this._preparePositioning(); this.fit(); this._finishPositioning(); + + if (this.withBackdrop) { + this.backdropElement.prepare(); + } }, // tasks which cause the overlay to actually open; typically play an @@ -304,52 +335,25 @@ this._finishRenderClosed(); }, - _onTransitionend: function(event) { - // make sure this is our transition event. - if (event && event.target !== this) { - return; - } - if (this.opened) { - this._finishRenderOpened(); - } else { - this._finishRenderClosed(); - } - }, - _finishRenderOpened: function() { // focus the child node with [autofocus] - if (!this.noAutoFocus) { - this._focusNode.focus(); - } + this._applyFocus(); + this._observer = Polymer.dom(this).observeNodes(this.notifyResize); this.fire('iron-overlay-opened'); - - this._squelchNextResize = true; - this.async(this.notifyResize); }, _finishRenderClosed: function() { // hide the overlay and remove the backdrop this.resetFit(); this.style.display = 'none'; - this._completeBackdrop(); this._manager.removeOverlay(this); - this._focusNode.blur(); - // focus the next overlay, if there is one - this._manager.focusOverlay(); + this._focusedChild = null; + this._applyFocus(); + this.notifyResize(); this.fire('iron-overlay-closed', this.closingReason); - - this._squelchNextResize = true; - this.async(this.notifyResize); - }, - - _completeBackdrop: function() { - if (this.withBackdrop) { - this._manager.trackBackdrop(this); - this.backdropElement.complete(); - } }, _preparePositioning: function() { @@ -378,27 +382,39 @@ }, _onCaptureClick: function(event) { - if (!this.noCancelOnOutsideClick && - this._manager.currentOverlay() === this && + if (this._manager.currentOverlay() === this && Polymer.dom(event).path.indexOf(this) === -1) { - this.cancel(); + if (this.noCancelOnOutsideClick) { + this._applyFocus(); + } else { + this.cancel(); + } } }, _onCaptureKeydown: function(event) { var ESC = 27; - if (!this.noCancelOnEscKey && (event.keyCode === ESC)) { + if (this._manager.currentOverlay() === this && + !this.noCancelOnEscKey && + event.keyCode === ESC) { this.cancel(); - event.stopPropagation(); - event.stopImmediatePropagation(); + } + }, + + _onCaptureFocus: function (event) { + if (this._manager.currentOverlay() === this && + this.withBackdrop) { + var path = Polymer.dom(event).path; + if (path.indexOf(this) === -1) { + event.stopPropagation(); + this._applyFocus(); + } else { + this._focusedChild = path[0]; + } } }, _onIronResize: function() { - if (this._squelchNextResize) { - this._squelchNextResize = false; - return; - } if (this.opened) { this.refit(); }
diff --git a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/iron-overlay-manager-extracted.js b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/iron-overlay-manager-extracted.js index 222dddd..687b02a 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/iron-overlay-manager-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/iron-overlay-behavior/iron-overlay-manager-extracted.js
@@ -1,99 +1,143 @@ -Polymer.IronOverlayManager = { - - _overlays: [], - - // iframes have a default z-index of 100, so this default should be at least - // that. - _minimumZ: 101, - - _backdrops: [], - - _applyOverlayZ: function(overlay, aboveZ) { - this._setZ(overlay, aboveZ + 2); - }, - - _setZ: function(element, z) { - element.style.zIndex = z; - }, - - // track overlays for z-index and focus managemant - addOverlay: function(overlay) { - var minimumZ = Math.max(this.currentOverlayZ(), this._minimumZ); - this._overlays.push(overlay); - var newZ = this.currentOverlayZ(); - if (newZ <= minimumZ) { - this._applyOverlayZ(overlay, minimumZ); - } - }, - - removeOverlay: function(overlay) { - var i = this._overlays.indexOf(overlay); - if (i >= 0) { - this._overlays.splice(i, 1); - this._setZ(overlay, ''); - } - }, - - currentOverlay: function() { - var i = this._overlays.length - 1; - while (this._overlays[i] && !this._overlays[i].opened) { - --i; - } - return this._overlays[i]; - }, - - currentOverlayZ: function() { - var z = this._minimumZ; - var current = this.currentOverlay(); - if (current) { - var z1 = window.getComputedStyle(current).zIndex; - if (!isNaN(z1)) { - z = Number(z1); - } - } - return z; - }, - +/** + * @struct + * @constructor + */ + Polymer.IronOverlayManagerClass = function() { + this._overlays = []; /** - * Ensures that the minimum z-index of new overlays is at least `minimumZ`. - * This does not effect the z-index of any existing overlays. - * - * @param {number} minimumZ + * iframes have a default z-index of 100, so this default should be at least + * that. + * @private {number} */ - ensureMinimumZ: function(minimumZ) { - this._minimumZ = Math.max(this._minimumZ, minimumZ); - }, + this._minimumZ = 101; - focusOverlay: function() { - var current = this.currentOverlay(); - // We have to be careful to focus the next overlay _after_ any current - // transitions are complete (due to the state being toggled prior to the - // transition). Otherwise, we risk infinite recursion when a transitioning - // (closed) overlay becomes the current overlay. - // - // NOTE: We make the assumption that any overlay that completes a transition - // will call into focusOverlay to kick the process back off. Currently: - // transitionend -> _applyFocus -> focusOverlay. - if (current && !current.transitioning) { - current._applyFocus(); - } - }, + this._backdrops = []; + } - trackBackdrop: function(element) { - // backdrops contains the overlays with a backdrop that are currently - // visible - if (element.opened) { - this._backdrops.push(element); - } else { - var index = this._backdrops.indexOf(element); - if (index >= 0) { - this._backdrops.splice(index, 1); - } - } - }, + Polymer.IronOverlayManagerClass.prototype._applyOverlayZ = function(overlay, aboveZ) { + this._setZ(overlay, aboveZ + 2); + }; - getBackdrops: function() { - return this._backdrops; + Polymer.IronOverlayManagerClass.prototype._setZ = function(element, z) { + element.style.zIndex = z; + }; + + /** + * track overlays for z-index and focus managemant + */ + Polymer.IronOverlayManagerClass.prototype.addOverlay = function(overlay) { + var minimumZ = Math.max(this.currentOverlayZ(), this._minimumZ); + this._overlays.push(overlay); + var newZ = this.currentOverlayZ(); + if (newZ <= minimumZ) { + this._applyOverlayZ(overlay, minimumZ); } + }; - }; \ No newline at end of file + Polymer.IronOverlayManagerClass.prototype.removeOverlay = function(overlay) { + var i = this._overlays.indexOf(overlay); + if (i >= 0) { + this._overlays.splice(i, 1); + this._setZ(overlay, ''); + } + }; + + Polymer.IronOverlayManagerClass.prototype.currentOverlay = function() { + var i = this._overlays.length - 1; + while (this._overlays[i] && !this._overlays[i].opened) { + --i; + } + return this._overlays[i]; + }; + + Polymer.IronOverlayManagerClass.prototype.currentOverlayZ = function() { + return this._getOverlayZ(this.currentOverlay()); + }; + + /** + * Ensures that the minimum z-index of new overlays is at least `minimumZ`. + * This does not effect the z-index of any existing overlays. + * + * @param {number} minimumZ + */ + Polymer.IronOverlayManagerClass.prototype.ensureMinimumZ = function(minimumZ) { + this._minimumZ = Math.max(this._minimumZ, minimumZ); + }; + + Polymer.IronOverlayManagerClass.prototype.focusOverlay = function() { + var current = this.currentOverlay(); + // We have to be careful to focus the next overlay _after_ any current + // transitions are complete (due to the state being toggled prior to the + // transition). Otherwise, we risk infinite recursion when a transitioning + // (closed) overlay becomes the current overlay. + // + // NOTE: We make the assumption that any overlay that completes a transition + // will call into focusOverlay to kick the process back off. Currently: + // transitionend -> _applyFocus -> focusOverlay. + if (current && !current.transitioning) { + current._applyFocus(); + } + }; + + Polymer.IronOverlayManagerClass.prototype.trackBackdrop = function(element) { + // backdrops contains the overlays with a backdrop that are currently + // visible + var index = this._backdrops.indexOf(element); + if (element.opened && element.withBackdrop) { + // no duplicates + if (index === -1) { + this._backdrops.push(element); + } + } else if (index >= 0) { + this._backdrops.splice(index, 1); + } + }; + + Object.defineProperty(Polymer.IronOverlayManagerClass.prototype, "backdropElement", { + get: function() { + if (!this._backdropElement) { + this._backdropElement = document.createElement('iron-overlay-backdrop'); + } + return this._backdropElement; + } + }); + + Polymer.IronOverlayManagerClass.prototype.getBackdrops = function() { + return this._backdrops; + }; + + /** + * Returns the z-index for the backdrop. + */ + Polymer.IronOverlayManagerClass.prototype.backdropZ = function() { + return this._getOverlayZ(this._overlayWithBackdrop()) - 1; + }; + + /** + * Returns the first opened overlay that has a backdrop. + */ + Polymer.IronOverlayManagerClass.prototype._overlayWithBackdrop = function() { + for (var i = 0; i < this._overlays.length; i++) { + if (this._overlays[i].opened && this._overlays[i].withBackdrop) { + return this._overlays[i]; + } + } + }; + + /** + * Calculates the minimum z-index for the overlay. + */ + Polymer.IronOverlayManagerClass.prototype._getOverlayZ = function(overlay) { + var z = this._minimumZ; + if (overlay) { + var z1 = Number(window.getComputedStyle(overlay).zIndex); + // Check if is a number + // Number.isNaN not supported in IE 10+ + if (z1 === z1) { + z = z1; + } + } + return z; + }; + + Polymer.IronOverlayManager = new Polymer.IronOverlayManagerClass(); \ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-pages/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-pages/.bower.json index 1b29a14..7e5cb7f 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-pages/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/iron-pages/.bower.json
@@ -1,6 +1,6 @@ { "name": "iron-pages", - "version": "1.0.5", + "version": "1.0.7", "license": "http://polymer.github.io/LICENSE.txt", "description": "Organizes a set of pages and shows one at a time", "main": "iron-pages.html", @@ -19,23 +19,24 @@ ], "dependencies": { "iron-resizable-behavior": "polymerelements/iron-resizable-behavior#^1.0.0", + "iron-demo-helpers": "polymerelements/iron-demo-helpers#^1.0.0", "iron-selector": "polymerelements/iron-selector#^1.0.0", - "polymer": "Polymer/polymer#^1.0.0" + "polymer": "Polymer/polymer#^1.1.0" }, "devDependencies": { "paper-styles": "polymerelements/paper-styles#^1.0.2", "iron-component-page": "polymerelements/iron-component-page#^1.0.0", "test-fixture": "polymerelements/test-fixture#^1.0.0", - "web-component-tester": "polymer/web-component-tester#^3.4.0", + "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, "ignore": [], "homepage": "https://github.com/PolymerElements/iron-pages", - "_release": "1.0.5", + "_release": "1.0.7", "_resolution": { "type": "version", - "tag": "v1.0.5", - "commit": "e248782cb5595849e08454ae863d1ca3b7b94e0b" + "tag": "v1.0.7", + "commit": "395e253134488b1cab13072890ca5a7eb1b0fd54" }, "_source": "git://github.com/PolymerElements/iron-pages.git", "_target": "^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/iron-pages/README.md b/third_party/polymer/v1_0/components-chromium/iron-pages/README.md index 0ff9a5b3..fed222d 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-pages/README.md +++ b/third_party/polymer/v1_0/components-chromium/iron-pages/README.md
@@ -7,6 +7,9 @@ Edit those files, and our readme bot will duplicate them over here! Edit this file, and the bot will squash your changes :) +The bot does some handling of markdown. Please file a bug if it does the wrong +thing! https://github.com/PolymerLabs/tedium/issues + --> [](https://travis-ci.org/PolymerElements/iron-pages) @@ -16,23 +19,24 @@ ##<iron-pages> - `iron-pages` is used to select one of its children to show. One use is to cycle through a list of children "pages". Example: - <iron-pages selected="0"> - <div>One</div> - <div>Two</div> - <div>Three</div> - </iron-pages> +```html +<iron-pages selected="0"> + <div>One</div> + <div>Two</div> + <div>Three</div> +</iron-pages> - <script> - document.addEventListener('click', function(e) { - var pages = document.querySelector('iron-pages'); - pages.selectNext(); - }); - </script> +<script> + document.addEventListener('click', function(e) { + var pages = document.querySelector('iron-pages'); + pages.selectNext(); + }); +</script> +```
diff --git a/third_party/polymer/v1_0/components-chromium/iron-pages/bower.json b/third_party/polymer/v1_0/components-chromium/iron-pages/bower.json index 07dd3cf..a1f740c7 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-pages/bower.json +++ b/third_party/polymer/v1_0/components-chromium/iron-pages/bower.json
@@ -1,6 +1,6 @@ { "name": "iron-pages", - "version": "1.0.5", + "version": "1.0.7", "license": "http://polymer.github.io/LICENSE.txt", "description": "Organizes a set of pages and shows one at a time", "main": "iron-pages.html", @@ -19,14 +19,15 @@ ], "dependencies": { "iron-resizable-behavior": "polymerelements/iron-resizable-behavior#^1.0.0", + "iron-demo-helpers": "polymerelements/iron-demo-helpers#^1.0.0", "iron-selector": "polymerelements/iron-selector#^1.0.0", - "polymer": "Polymer/polymer#^1.0.0" + "polymer": "Polymer/polymer#^1.1.0" }, "devDependencies": { "paper-styles": "polymerelements/paper-styles#^1.0.2", "iron-component-page": "polymerelements/iron-component-page#^1.0.0", "test-fixture": "polymerelements/test-fixture#^1.0.0", - "web-component-tester": "polymer/web-component-tester#^3.4.0", + "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, "ignore": []
diff --git a/third_party/polymer/v1_0/components-chromium/iron-pages/iron-pages-extracted.js b/third_party/polymer/v1_0/components-chromium/iron-pages/iron-pages-extracted.js index 9e8ccb5d..aaf9ff6 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-pages/iron-pages-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/iron-pages/iron-pages-extracted.js
@@ -1,30 +1,30 @@ Polymer({ - is: 'iron-pages', + is: 'iron-pages', - behaviors: [ - Polymer.IronResizableBehavior, - Polymer.IronSelectableBehavior - ], + behaviors: [ + Polymer.IronResizableBehavior, + Polymer.IronSelectableBehavior + ], - properties: { + properties: { - // as the selected page is the only one visible, activateEvent - // is both non-sensical and problematic; e.g. in cases where a user - // handler attempts to change the page and the activateEvent - // handler immediately changes it back - activateEvent: { - type: String, - value: null + // as the selected page is the only one visible, activateEvent + // is both non-sensical and problematic; e.g. in cases where a user + // handler attempts to change the page and the activateEvent + // handler immediately changes it back + activateEvent: { + type: String, + value: null + } + + }, + + observers: [ + '_selectedPageChanged(selected)' + ], + + _selectedPageChanged: function(selected, old) { + this.async(this.notifyResize); } - - }, - - observers: [ - '_selectedPageChanged(selected)' - ], - - _selectedPageChanged: function(selected, old) { - this.async(this.notifyResize); - } - }); \ No newline at end of file + }); \ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-pages/iron-pages.html b/third_party/polymer/v1_0/components-chromium/iron-pages/iron-pages.html index dcc7d47f..b164d56 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-pages/iron-pages.html +++ b/third_party/polymer/v1_0/components-chromium/iron-pages/iron-pages.html
@@ -30,32 +30,25 @@ </script> @group Iron Elements -@class iron-pages @hero hero.svg @demo demo/index.html -@extends iron-selector --> </head><body><dom-module id="iron-pages"> - <style> - - :host { - display: block; - } - - :host > ::content > :not(.iron-selected) { - display: none !important; - } - - </style> - <template> + <style> + :host { + display: block; + } + + :host > ::content > :not(.iron-selected) { + display: none !important; + } + </style> <content></content> - </template> -</dom-module> - + </dom-module> <script src="iron-pages-extracted.js"></script></body></html> \ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/.bower.json new file mode 100644 index 0000000..be21520 --- /dev/null +++ b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/.bower.json
@@ -0,0 +1,40 @@ +{ + "name": "iron-scroll-target-behavior", + "version": "1.0.3", + "description": "Allows to define a scroller target", + "private": true, + "license": "http://polymer.github.io/LICENSE.txt", + "main": "iron-scroll-target-behavior.html", + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "scroll" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-scroll-target-behavior.git" + }, + "homepage": "https://github.com/PolymerElements/iron-scroll-target-behavior", + "ignore": [], + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", + "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0", + "web-component-tester": "^4.0.0", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + }, + "_release": "1.0.3", + "_resolution": { + "type": "version", + "tag": "v1.0.3", + "commit": "7ce943d4bc9daf9704174f58a6c5104fe3097986" + }, + "_source": "git://github.com/PolymerElements/iron-scroll-target-behavior.git", + "_target": "^1.0.0", + "_originalSource": "PolymerElements/iron-scroll-target-behavior" +} \ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/.gitignore b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/.gitignore new file mode 100644 index 0000000..1eb1fa5 --- /dev/null +++ b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/.gitignore
@@ -0,0 +1,2 @@ +bower_components +
diff --git a/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/CONTRIBUTING.md new file mode 100644 index 0000000..7b101415 --- /dev/null +++ b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/CONTRIBUTING.md
@@ -0,0 +1,72 @@ + +<!-- +This file is autogenerated based on +https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md + +If you edit that file, it will get updated everywhere else. +If you edit this file, your changes will get overridden :) +--> +# Polymer Elements +## Guide for Contributors + +Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines: + +### Filing Issues + +**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions: + + 1. **Who will use the feature?** _“As someone filling out a form…”_ + 2. **When will they use the feature?** _“When I enter an invalid value…”_ + 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_ + +**If you are filing an issue to report a bug**, please provide: + + 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug: + + ```markdown + The `paper-foo` element causes the page to turn pink when clicked. + + ## Expected outcome + + The page stays the same color. + + ## Actual outcome + + The page turns pink. + + ## Steps to reproduce + + 1. Put a `paper-foo` element in the page. + 2. Open the page in a web browser. + 3. Click the `paper-foo` element. + ``` + + 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output). + + 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers. + +### Submitting Pull Requests + +**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request. + +When submitting pull requests, please provide: + + 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax: + + ```markdown + (For a single issue) + Fixes #20 + + (For multiple issues) + Fixes #32, #40 + ``` + + 2. **A succinct description of the design** used to fix any related issues. For example: + + ```markdown + This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked. + ``` + + 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered. + +If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/README.md b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/README.md new file mode 100644 index 0000000..9e54140 --- /dev/null +++ b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/README.md
@@ -0,0 +1,26 @@ + +<!--- + +This README is automatically generated from the comments in these files: +iron-scroll-target-behavior.html + +Edit those files, and our readme bot will duplicate them over here! +Edit this file, and the bot will squash your changes :) + +The bot does some handling of markdown. Please file a bug if it does the wrong +thing! https://github.com/PolymerLabs/tedium/issues + +--> + +_[Demo and API Docs](https://elements.polymer-project.org/elements/iron-scroll-target-behavior)_ + + +##Polymer.IronScrollTargetBehavior + +`Polymer.IronScrollTargetBehavior` allows an element to respond to scroll events from a +designated scroll target. + +Elements that consume this behavior can override the `_scrollHandler` +method to add logic on the scroll event. + +
diff --git a/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/bower.json b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/bower.json new file mode 100644 index 0000000..7b074a0 --- /dev/null +++ b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/bower.json
@@ -0,0 +1,31 @@ +{ + "name": "iron-scroll-target-behavior", + "version": "1.0.3", + "description": "Allows to define a scroller target", + "private": true, + "license": "http://polymer.github.io/LICENSE.txt", + "main": "iron-scroll-target-behavior.html", + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "scroll" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-scroll-target-behavior.git" + }, + "homepage": "https://github.com/PolymerElements/iron-scroll-target-behavior", + "ignore": [], + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", + "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0", + "web-component-tester": "^4.0.0", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + } +}
diff --git a/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/compiled_resources2.gyp b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/compiled_resources2.gyp new file mode 100644 index 0000000..e7746d5 --- /dev/null +++ b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/compiled_resources2.gyp
@@ -0,0 +1,11 @@ +# Copyright 2016 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. +{ + 'targets': [ + { + 'target_name': 'iron-scroll-target-behavior-extracted', + 'includes': ['../../../../closure_compiler/compile_js2.gypi'], + }, + ], +}
diff --git a/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/index.html b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/index.html new file mode 100644 index 0000000..e48685a --- /dev/null +++ b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/index.html
@@ -0,0 +1,28 @@ +<!doctype html> +<!-- +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt +The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt +Code distributed by Google as part of the polymer project is also +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt +--> + +<html> +<head> + + <title>iron-scroll-target-behavior</title> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <script src="../webcomponentsjs/webcomponents-lite.js"></script> + <link rel="import" href="../iron-component-page/iron-component-page.html"> + +</head> +<body> + + <iron-component-page></iron-component-page> + +</body> +</html>
diff --git a/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/iron-scroll-target-behavior-extracted.js b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/iron-scroll-target-behavior-extracted.js new file mode 100644 index 0000000..4619264 --- /dev/null +++ b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/iron-scroll-target-behavior-extracted.js
@@ -0,0 +1,210 @@ +/** + * `Polymer.IronScrollTargetBehavior` allows an element to respond to scroll events from a + * designated scroll target. + * + * Elements that consume this behavior can override the `_scrollHandler` + * method to add logic on the scroll event. + * + * @demo demo/scrolling-region.html Scrolling Region + * @demo demo/document.html Document Element + * @polymerBehavior + */ + Polymer.IronScrollTargetBehavior = { + + properties: { + + /** + * Specifies the element that will handle the scroll event + * on the behalf of the current element. This is typically a reference to an `Element`, + * but there are a few more posibilities: + * + * ### Elements id + * + *```html + * <div id="scrollable-element" style="overflow-y: auto;"> + * <x-element scroll-target="scrollable-element"> + * Content + * </x-element> + * </div> + *``` + * In this case, `scrollTarget` will point to the outer div element. Alternatively, + * you can set the property programatically: + * + *```js + * appHeader.scrollTarget = document.querySelector('#scrollable-element'); + *``` + * + * @type {HTMLElement} + */ + scrollTarget: { + type: HTMLElement, + value: function() { + return this._defaultScrollTarget; + } + } + }, + + observers: [ + '_scrollTargetChanged(scrollTarget, isAttached)' + ], + + _scrollTargetChanged: function(scrollTarget, isAttached) { + // Remove lister to the current scroll target + if (this._oldScrollTarget) { + if (this._oldScrollTarget === this._doc) { + window.removeEventListener('scroll', this._boundScrollHandler); + } else if (this._oldScrollTarget.removeEventListener) { + this._oldScrollTarget.removeEventListener('scroll', this._boundScrollHandler); + } + this._oldScrollTarget = null; + } + if (isAttached) { + // Support element id references + if (typeof scrollTarget === 'string') { + + var ownerRoot = Polymer.dom(this).getOwnerRoot(); + this.scrollTarget = (ownerRoot && ownerRoot.$) ? + ownerRoot.$[scrollTarget] : Polymer.dom(this.ownerDocument).querySelector('#' + scrollTarget); + + } else if (this._scrollHandler) { + + this._boundScrollHandler = this._boundScrollHandler || this._scrollHandler.bind(this); + // Add a new listener + if (scrollTarget === this._doc) { + window.addEventListener('scroll', this._boundScrollHandler); + if (this._scrollTop !== 0 || this._scrollLeft !== 0) { + this._scrollHandler(); + } + } else if (scrollTarget && scrollTarget.addEventListener) { + scrollTarget.addEventListener('scroll', this._boundScrollHandler); + } + this._oldScrollTarget = scrollTarget; + } + } + }, + + /** + * Runs on every scroll event. Consumer of this behavior may want to override this method. + * + * @protected + */ + _scrollHandler: function scrollHandler() {}, + + /** + * The default scroll target. Consumers of this behavior may want to customize + * the default scroll target. + * + * @type {Element} + */ + get _defaultScrollTarget() { + return this._doc; + }, + + /** + * Shortcut for the document element + * + * @type {Element} + */ + get _doc() { + return this.ownerDocument.documentElement; + }, + + /** + * Gets the number of pixels that the content of an element is scrolled upward. + * + * @type {number} + */ + get _scrollTop() { + if (this._isValidScrollTarget()) { + return this.scrollTarget === this._doc ? window.pageYOffset : this.scrollTarget.scrollTop; + } + return 0; + }, + + /** + * Gets the number of pixels that the content of an element is scrolled to the left. + * + * @type {number} + */ + get _scrollLeft() { + if (this._isValidScrollTarget()) { + return this.scrollTarget === this._doc ? window.pageXOffset : this.scrollTarget.scrollLeft; + } + return 0; + }, + + /** + * Sets the number of pixels that the content of an element is scrolled upward. + * + * @type {number} + */ + set _scrollTop(top) { + if (this.scrollTarget === this._doc) { + window.scrollTo(window.pageXOffset, top); + } else if (this._isValidScrollTarget()) { + this.scrollTarget.scrollTop = top; + } + }, + + /** + * Sets the number of pixels that the content of an element is scrolled to the left. + * + * @type {number} + */ + set _scrollLeft(left) { + if (this.scrollTarget === this._doc) { + window.scrollTo(left, window.pageYOffset); + } else if (this._isValidScrollTarget()) { + this.scrollTarget.scrollLeft = left; + } + }, + + /** + * Scrolls the content to a particular place. + * + * @method scroll + * @param {number} top The top position + * @param {number} left The left position + */ + scroll: function(top, left) { + if (this.scrollTarget === this._doc) { + window.scrollTo(top, left); + } else if (this._isValidScrollTarget()) { + this.scrollTarget.scrollTop = top; + this.scrollTarget.scrollLeft = left; + } + }, + + /** + * Gets the width of the scroll target. + * + * @type {number} + */ + get _scrollTargetWidth() { + if (this._isValidScrollTarget()) { + return this.scrollTarget === this._doc ? window.innerWidth : this.scrollTarget.offsetWidth; + } + return 0; + }, + + /** + * Gets the height of the scroll target. + * + * @type {number} + */ + get _scrollTargetHeight() { + if (this._isValidScrollTarget()) { + return this.scrollTarget === this._doc ? window.innerHeight : this.scrollTarget.offsetHeight; + } + return 0; + }, + + /** + * Returns true if the scroll target is a valid HTMLElement. + * + * @return {boolean} + */ + _isValidScrollTarget: function() { + return this.scrollTarget instanceof HTMLElement; + } + }; \ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/iron-scroll-target-behavior.html b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/iron-scroll-target-behavior.html new file mode 100644 index 0000000..4482381 --- /dev/null +++ b/third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/iron-scroll-target-behavior.html
@@ -0,0 +1,11 @@ +<!-- +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt +The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt +Code distributed by Google as part of the polymer project is also +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt +--><html><head><link rel="import" href="../polymer/polymer.html"> + +</head><body><script src="iron-scroll-target-behavior-extracted.js"></script></body></html> \ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/iron-selector/.bower.json b/third_party/polymer/v1_0/components-chromium/iron-selector/.bower.json index 52d44c1..2b3357d 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-selector/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/iron-selector/.bower.json
@@ -1,6 +1,6 @@ { "name": "iron-selector", - "version": "1.0.8", + "version": "1.2.1", "description": "Manages a set of elements that can be selected", "private": true, "license": "http://polymer.github.io/LICENSE.txt", @@ -27,14 +27,14 @@ "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0", "paper-styles": "PolymerElements/paper-styles#^1.0.4", "test-fixture": "PolymerElements/test-fixture#^1.0.0", - "web-component-tester": "*", + "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, - "_release": "1.0.8", + "_release": "1.2.1", "_resolution": { "type": "version", - "tag": "v1.0.8", - "commit": "e9a66727f3da0446f04956d4e4f1dcd51cdec2ff" + "tag": "v1.2.1", + "commit": "1e6a7ee05e5ff350472ffc1ee780f145a7606b7b" }, "_source": "git://github.com/PolymerElements/iron-selector.git", "_target": "^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/iron-selector/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/iron-selector/CONTRIBUTING.md new file mode 100644 index 0000000..f147978a --- /dev/null +++ b/third_party/polymer/v1_0/components-chromium/iron-selector/CONTRIBUTING.md
@@ -0,0 +1,77 @@ + +<!-- +This file is autogenerated based on +https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md + +If you edit that file, it will get updated everywhere else. +If you edit this file, your changes will get overridden :) + +You can however override the jsbin link with one that's customized to this +specific element: + +jsbin=https://jsbin.com/cagaye/edit?html,output +--> +# Polymer Elements +## Guide for Contributors + +Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines: + +### Filing Issues + +**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions: + + 1. **Who will use the feature?** _“As someone filling out a form…”_ + 2. **When will they use the feature?** _“When I enter an invalid value…”_ + 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_ + +**If you are filing an issue to report a bug**, please provide: + + 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug: + + ```markdown + The `paper-foo` element causes the page to turn pink when clicked. + + ## Expected outcome + + The page stays the same color. + + ## Actual outcome + + The page turns pink. + + ## Steps to reproduce + + 1. Put a `paper-foo` element in the page. + 2. Open the page in a web browser. + 3. Click the `paper-foo` element. + ``` + + 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output). + + 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers. + +### Submitting Pull Requests + +**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request. + +When submitting pull requests, please provide: + + 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax: + + ```markdown + (For a single issue) + Fixes #20 + + (For multiple issues) + Fixes #32, fixes #40 + ``` + + 2. **A succinct description of the design** used to fix any related issues. For example: + + ```markdown + This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked. + ``` + + 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered. + +If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/third_party/polymer/v1_0/components-chromium/iron-selector/README.md b/third_party/polymer/v1_0/components-chromium/iron-selector/README.md index 8bb3d64..237133b7 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-selector/README.md +++ b/third_party/polymer/v1_0/components-chromium/iron-selector/README.md
@@ -1,50 +1,74 @@ -iron-selector -============= -`iron-selector` is an element which can be used to manage a list of elements -that can be selected. Tapping on the item will make the item selected. The `selected` indicates -which item is being selected. The default is to use the index of the item. +<!--- -Example: +This README is automatically generated from the comments in these files: +iron-multi-selectable.html iron-selectable.html iron-selector.html + +Edit those files, and our readme bot will duplicate them over here! +Edit this file, and the bot will squash your changes :) + +The bot does some handling of markdown. Please file a bug if it does the wrong +thing! https://github.com/PolymerLabs/tedium/issues + +--> + +[](https://travis-ci.org/PolymerElements/iron-selector) + +_[Demo and API docs](https://elements.polymer-project.org/elements/iron-selector)_ + + +##<iron-selector> + + `iron-selector` is an element which can be used to manage a list of elements + that can be selected. Tapping on the item will make the item selected. The `selected` indicates + which item is being selected. The default is to use the index of the item. + + Example: ```html -<iron-selector selected="0"> - <div>Item 1</div> - <div>Item 2</div> - <div>Item 3</div> -</iron-selector> + <iron-selector selected="0"> + <div>Item 1</div> + <div>Item 2</div> + <div>Item 3</div> + </iron-selector> ``` -If you want to use the attribute value of an element for `selected` instead of the index, -set `attrForSelected` to the name of the attribute. For example, if you want to select item by -`name`, set `attrForSelected` to `name`. + If you want to use the attribute value of an element for `selected` instead of the index, + set `attrForSelected` to the name of the attribute. For example, if you want to select item by + `name`, set `attrForSelected` to `name`. -Example: + Example: ```html -<iron-selector attr-for-selected="name" selected="foo"> - <div name="foo">Foo</div> - <div name="bar">Bar</div> - <div name="zot">Zot</div> -</iron-selector> + <iron-selector attr-for-selected="name" selected="foo"> + <div name="foo">Foo</div> + <div name="bar">Bar</div> + <div name="zot">Zot</div> + </iron-selector> ``` -`iron-selector` is not styled. Use the `iron-selected` CSS class to style the selected element. + `iron-selector` is not styled. Use the `iron-selected` CSS class to style the selected element. -Example: + Example: ```html -<style> - .iron-selected { - background: #eee; - } -</style> + <style> + .iron-selected { + background: #eee; + } + </style> -... + ... -<iron-selector selected="0"> - <div>Item 1</div> - <div>Item 2</div> - <div>Item 3</div> -</iron-selector> + <iron-selector selected="0"> + <div>Item 1</div> + <div>Item 2</div> + <div>Item 3</div> + </iron-selector> ``` + + + +<!-- No docs for Polymer.IronMultiSelectableBehavior found. --> + +<!-- No docs for Polymer.IronSelectableBehavior found. -->
diff --git a/third_party/polymer/v1_0/components-chromium/iron-selector/bower.json b/third_party/polymer/v1_0/components-chromium/iron-selector/bower.json index a633301..0b82c5b 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-selector/bower.json +++ b/third_party/polymer/v1_0/components-chromium/iron-selector/bower.json
@@ -1,6 +1,6 @@ { "name": "iron-selector", - "version": "1.0.8", + "version": "1.2.1", "description": "Manages a set of elements that can be selected", "private": true, "license": "http://polymer.github.io/LICENSE.txt", @@ -27,7 +27,7 @@ "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0", "paper-styles": "PolymerElements/paper-styles#^1.0.4", "test-fixture": "PolymerElements/test-fixture#^1.0.0", - "web-component-tester": "*", + "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" } }
diff --git a/third_party/polymer/v1_0/components-chromium/iron-selector/iron-multi-selectable-extracted.js b/third_party/polymer/v1_0/components-chromium/iron-selector/iron-multi-selectable-extracted.js index de4827b..7c9c39ea 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-selector/iron-multi-selectable-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/iron-selector/iron-multi-selectable-extracted.js
@@ -40,7 +40,7 @@ * `value` will be toggled; otherwise the `value` will be selected. * * @method select - * @param {string} value the value to select. + * @param {string|number} value the value to select. */ select: function(value) { if (this.multi) {
diff --git a/third_party/polymer/v1_0/components-chromium/iron-selector/iron-selectable-extracted.js b/third_party/polymer/v1_0/components-chromium/iron-selector/iron-selectable-extracted.js index f52a512..e33d8768 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-selector/iron-selectable-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/iron-selector/iron-selectable-extracted.js
@@ -42,6 +42,7 @@ /** * Gets or sets the selected element. The default is to use the index of the item. + * @type {string|number} */ selected: { type: String, @@ -98,6 +99,7 @@ items: { type: Array, readOnly: true, + notify: true, value: function() { return []; } @@ -159,7 +161,7 @@ * Selects the given value. * * @method select - * @param {string} value the value to select. + * @param {string|number} value the value to select. */ select: function(value) { this.selected = value; @@ -186,6 +188,22 @@ this.selected = this._indexToValue(index); }, + /** + * Force a synchronous update of the `items` property. + * + * NOTE: Consider listening for the `iron-items-changed` event to respond to + * updates to the set of selectable items after updates to the DOM list and + * selection state have been made. + * + * WARNING: If you are using this method, you should probably consider an + * alternate approach. Synchronously querying for items is potentially + * slow for many use cases. The `items` property will update asynchronously + * on its own to reflect selectable items in the DOM. + */ + forceSynchronousItemUpdate: function() { + this._updateItems(); + }, + get _shouldUpdateSelection() { return this.selected != null; }, @@ -249,7 +267,8 @@ }, _valueForItem: function(item) { - return item[this.attrForSelected] || item.getAttribute(this.attrForSelected); + var propValue = item[this.attrForSelected]; + return propValue != undefined ? propValue : item.getAttribute(this.attrForSelected); }, _applySelection: function(item, isSelected) { @@ -270,18 +289,18 @@ // observe items change under the given node. _observeItems: function(node) { return Polymer.dom(node).observeNodes(function(mutations) { + this._updateItems(); + + if (this._shouldUpdateSelection) { + this._updateSelected(); + } + // Let other interested parties know about the change so that // we don't have to recreate mutation observers everywher. this.fire('iron-items-changed', mutations, { bubbles: false, cancelable: false }); - - this._updateItems(); - - if (this._shouldUpdateSelection) { - this._updateSelected(); - } }); },
diff --git a/third_party/polymer/v1_0/components-chromium/neon-animation/.bower.json b/third_party/polymer/v1_0/components-chromium/neon-animation/.bower.json index 4541558..73f7961 100644 --- a/third_party/polymer/v1_0/components-chromium/neon-animation/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/neon-animation/.bower.json
@@ -1,7 +1,7 @@ { "name": "neon-animation", "description": "A system for animating Polymer-based web components", - "version": "1.0.9", + "version": "1.1.0", "authors": [ "The Polymer Authors" ], @@ -34,7 +34,6 @@ "iron-meta": "PolymerElements/iron-meta#^1.0.0", "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0", "iron-selector": "PolymerElements/iron-selector#^1.0.0", - "paper-styles": "PolymerElements/paper-styles#^1.0.0", "web-animations-js": "web-animations/web-animations-js#2.1.3" }, "devDependencies": { @@ -42,18 +41,19 @@ "paper-toolbar": "PolymerElements/paper-toolbar#^1.0.0", "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", "test-fixture": "PolymerElements/test-fixture#^1.0.0", - "web-component-tester": "*", + "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0", "paper-item": "PolymerElements/paper-item#^1.0.0", + "paper-styles": "PolymerElements/paper-styles#^1.0.0", "iron-icon": "PolymerElements/iron-icon#^1.0.0", "iron-icons": "PolymerElements/iron-icons#^1.0.0", "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0" }, - "_release": "1.0.9", + "_release": "1.1.0", "_resolution": { "type": "version", - "tag": "v1.0.9", - "commit": "ab40f4e4a777153cb5c27c9b62ee82b94d53eb76" + "tag": "v1.1.0", + "commit": "564e0dc92724f2bc0bf0f76bf2ac392d4905b2ff" }, "_source": "git://github.com/PolymerElements/neon-animation.git", "_target": "^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/neon-animation/README.md b/third_party/polymer/v1_0/components-chromium/neon-animation/README.md index d736d40..811e81a4 100644 --- a/third_party/polymer/v1_0/components-chromium/neon-animation/README.md +++ b/third_party/polymer/v1_0/components-chromium/neon-animation/README.md
@@ -272,12 +272,14 @@ Single element animations: - * `fade-in-animation` Animates opacity from `0` to `1`. - * `fade-out-animation` Animates opacity from `1` to `0`. - * `scale-down-animation` Animates transform from `scale(1)` to `scale(0)`. - * `scale-up-animation` Animates transform from `scale(0)` to `scale(1)`. - * `slide-down-animation` Animates transform from `translateY(-100%)` to `none`. - * `slide-up-animation` Animates transform from `none` to `translateY(-100%)`. + * `fade-in-animation` Animates opacity from `0` to `1`; + * `fade-out-animation` Animates opacity from `1` to `0`; + * `scale-down-animation` Animates transform from `scale(1)` to `scale(0)`; + * `scale-up-animation` Animates transform from `scale(0)` to `scale(1)`; + * `slide-down-animation` Animates transform from `translateY(-100%)` to `none`; + * `slide-up-animation` Animates transform from `none` to `translateY(-100%)`; + * `slide-from-top-animation` Animates transform from `translateY(-100%)` to `none`; + * `slide-from-bottom-animation` Animates transform from `translateY(100%)` to `none`; * `slide-left-animation` Animates transform from `none` to `translateX(-100%)`; * `slide-right-animation` Animates transform from `none` to `translateX(100%)`; * `slide-from-left-animation` Animates transform from `translateX(-100%)` to `none`;
diff --git a/third_party/polymer/v1_0/components-chromium/neon-animation/animations/cascaded-animation.html b/third_party/polymer/v1_0/components-chromium/neon-animation/animations/cascaded-animation.html index e8d3c749..51c9ce9a3 100644 --- a/third_party/polymer/v1_0/components-chromium/neon-animation/animations/cascaded-animation.html +++ b/third_party/polymer/v1_0/components-chromium/neon-animation/animations/cascaded-animation.html
@@ -20,7 +20,7 @@ name: 'cascaded-animation', animation: <animation-name>, nodes: <array-of-nodes>, - nodedelay: <node-delay-in-ms>, + nodeDelay: <node-delay-in-ms>, timing: <animation-timing> } ```
diff --git a/third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-down-animation-extracted.js b/third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-down-animation-extracted.js index 1e105ba..7816c7a 100644 --- a/third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-down-animation-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-down-animation-extracted.js
@@ -16,8 +16,8 @@ } this._effect = new KeyframeEffect(node, [ - {'transform': 'translateY(-100%)'}, - {'transform': 'none'} + {'transform': 'translateY(0%)'}, + {'transform': 'translateY(100%)'} ], this.timingFromConfig(config)); return this._effect;
diff --git a/third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-from-bottom-animation-extracted.js b/third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-from-bottom-animation-extracted.js new file mode 100644 index 0000000..c2d9ef80 --- /dev/null +++ b/third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-from-bottom-animation-extracted.js
@@ -0,0 +1,26 @@ +Polymer({ + + is: 'slide-from-bottom-animation', + + behaviors: [ + Polymer.NeonAnimationBehavior + ], + + configure: function(config) { + var node = config.node; + + if (config.transformOrigin) { + this.setPrefixedProperty(node, 'transformOrigin', config.transformOrigin); + } else { + this.setPrefixedProperty(node, 'transformOrigin', '50% 0'); + } + + this._effect = new KeyframeEffect(node, [ + {'transform': 'translateY(100%)'}, + {'transform': 'translateY(0)'} + ], this.timingFromConfig(config)); + + return this._effect; + } + + }); \ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-from-bottom-animation.html b/third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-from-bottom-animation.html new file mode 100644 index 0000000..9f87c53 --- /dev/null +++ b/third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-from-bottom-animation.html
@@ -0,0 +1,28 @@ +<!-- +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt +The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt +Code distributed by Google as part of the polymer project is also +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt +--><html><head><link rel="import" href="../../polymer/polymer.html"> +<link rel="import" href="../neon-animation-behavior.html"> +<link rel="import" href="../web-animations.html"> + +<!-- +`<slide-from-bottom-animation>` animates the transform of an element from `none` to `translateY(100%)`. +The `transformOrigin` defaults to `50% 0`. + +Configuration: +``` +{ + name: 'slide-from-bottom-animation', + node: <node>, + transformOrigin: <transform-origin>, + timing: <animation-timing> +} +``` +--> + +</head><body><script src="slide-from-bottom-animation-extracted.js"></script></body></html> \ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-from-top-animation-extracted.js b/third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-from-top-animation-extracted.js new file mode 100644 index 0000000..82f4b24 --- /dev/null +++ b/third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-from-top-animation-extracted.js
@@ -0,0 +1,26 @@ +Polymer({ + + is: 'slide-from-top-animation', + + behaviors: [ + Polymer.NeonAnimationBehavior + ], + + configure: function(config) { + var node = config.node; + + if (config.transformOrigin) { + this.setPrefixedProperty(node, 'transformOrigin', config.transformOrigin); + } else { + this.setPrefixedProperty(node, 'transformOrigin', '50% 0'); + } + + this._effect = new KeyframeEffect(node, [ + {'transform': 'translateY(-100%)'}, + {'transform': 'translateY(0%)'} + ], this.timingFromConfig(config)); + + return this._effect; + } + + }); \ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-from-top-animation.html b/third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-from-top-animation.html new file mode 100644 index 0000000..8f39791 --- /dev/null +++ b/third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-from-top-animation.html
@@ -0,0 +1,28 @@ +<!-- +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt +The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt +Code distributed by Google as part of the polymer project is also +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt +--><html><head><link rel="import" href="../../polymer/polymer.html"> +<link rel="import" href="../neon-animation-behavior.html"> +<link rel="import" href="../web-animations.html"> + +<!-- +`<slide-from-top-animation>` animates the transform of an element from `translateY(-100%)` to +`none`. The `transformOrigin` defaults to `50% 0`. + +Configuration: +``` +{ + name: 'slide-from-top-animation', + node: <node>, + transformOrigin: <transform-origin>, + timing: <animation-timing> +} +``` +--> + +</head><body><script src="slide-from-top-animation-extracted.js"></script></body></html> \ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/neon-animation/bower.json b/third_party/polymer/v1_0/components-chromium/neon-animation/bower.json index 7826bd1..a5cdfeb 100644 --- a/third_party/polymer/v1_0/components-chromium/neon-animation/bower.json +++ b/third_party/polymer/v1_0/components-chromium/neon-animation/bower.json
@@ -1,7 +1,7 @@ { "name": "neon-animation", "description": "A system for animating Polymer-based web components", - "version": "1.0.9", + "version": "1.1.0", "authors": [ "The Polymer Authors" ], @@ -34,7 +34,6 @@ "iron-meta": "PolymerElements/iron-meta#^1.0.0", "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0", "iron-selector": "PolymerElements/iron-selector#^1.0.0", - "paper-styles": "PolymerElements/paper-styles#^1.0.0", "web-animations-js": "web-animations/web-animations-js#2.1.3" }, "devDependencies": { @@ -42,9 +41,10 @@ "paper-toolbar": "PolymerElements/paper-toolbar#^1.0.0", "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", "test-fixture": "PolymerElements/test-fixture#^1.0.0", - "web-component-tester": "*", + "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0", "paper-item": "PolymerElements/paper-item#^1.0.0", + "paper-styles": "PolymerElements/paper-styles#^1.0.0", "iron-icon": "PolymerElements/iron-icon#^1.0.0", "iron-icons": "PolymerElements/iron-icons#^1.0.0", "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0"
diff --git a/third_party/polymer/v1_0/components-chromium/neon-animation/guides/neon-animation.md b/third_party/polymer/v1_0/components-chromium/neon-animation/guides/neon-animation.md index 7af1659a7..ff0ddce 100644 --- a/third_party/polymer/v1_0/components-chromium/neon-animation/guides/neon-animation.md +++ b/third_party/polymer/v1_0/components-chromium/neon-animation/guides/neon-animation.md
@@ -280,12 +280,14 @@ Single element animations: - * `fade-in-animation` Animates opacity from `0` to `1`. - * `fade-out-animation` Animates opacity from `1` to `0`. - * `scale-down-animation` Animates transform from `scale(1)` to `scale(0)`. - * `scale-up-animation` Animates transform from `scale(0)` to `scale(1)`. - * `slide-down-animation` Animates transform from `translateY(-100%)` to `none`. - * `slide-up-animation` Animates transform from `none` to `translateY(-100%)`. + * `fade-in-animation` Animates opacity from `0` to `1`; + * `fade-out-animation` Animates opacity from `1` to `0`; + * `scale-down-animation` Animates transform from `scale(1)` to `scale(0)`; + * `scale-up-animation` Animates transform from `scale(0)` to `scale(1)`; + * `slide-down-animation` Animates transform from `none` to `translateY(100%)`; + * `slide-up-animation` Animates transform from `none` to `translateY(-100%)`; + * `slide-from-top-animation` Animates transform from `translateY(-100%)` to `none`; + * `slide-from-bottom-animation` Animates transform from `translateY(100%)` to `none`; * `slide-left-animation` Animates transform from `none` to `translateX(-100%)`; * `slide-right-animation` Animates transform from `none` to `translateX(100%)`; * `slide-from-left-animation` Animates transform from `translateX(-100%)` to `none`;
diff --git a/third_party/polymer/v1_0/components-chromium/neon-animation/neon-animatable-behavior-extracted.js b/third_party/polymer/v1_0/components-chromium/neon-animation/neon-animatable-behavior-extracted.js index caade30..f36c529 100644 --- a/third_party/polymer/v1_0/components-chromium/neon-animation/neon-animatable-behavior-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/neon-animation/neon-animatable-behavior-extracted.js
@@ -81,6 +81,11 @@ return; } + if(this.animationConfig.value && typeof this.animationConfig.value === 'function') { + this._warn(this._logf('playAnimation', "Please put 'animationConfig' inside of your components 'properties' object instead of outside of it.")); + return; + } + // type is optional var thisConfig; if (type) {
diff --git a/third_party/polymer/v1_0/components-chromium/neon-animation/neon-animatable.html b/third_party/polymer/v1_0/components-chromium/neon-animation/neon-animatable.html index 11e6b93..da19ee1 100644 --- a/third_party/polymer/v1_0/components-chromium/neon-animation/neon-animatable.html +++ b/third_party/polymer/v1_0/components-chromium/neon-animation/neon-animatable.html
@@ -6,6 +6,7 @@ Code distributed by Google as part of the polymer project is also subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt --><html><head><link rel="import" href="../polymer/polymer.html"> +<link rel="import" href="../iron-resizable-behavior/iron-resizable-behavior.html"> <link rel="import" href="neon-animatable-behavior.html"> <!--
diff --git a/third_party/polymer/v1_0/components-chromium/neon-animation/neon-animated-pages-extracted.js b/third_party/polymer/v1_0/components-chromium/neon-animation/neon-animated-pages-extracted.js index 96e84ba8..ae4098f 100644 --- a/third_party/polymer/v1_0/components-chromium/neon-animation/neon-animated-pages-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/neon-animation/neon-animated-pages-extracted.js
@@ -152,7 +152,7 @@ }, _notifyPageResize: function() { - var selectedPage = this.selectedItem; + var selectedPage = this.selectedItem || this._valueToItem(this.selected); this.resizerShouldNotify = function(element) { return element == selectedPage; }
diff --git a/third_party/polymer/v1_0/components-chromium/neon-animation/neon-animations.html b/third_party/polymer/v1_0/components-chromium/neon-animation/neon-animations.html index 9a34c97..ce3b867 100644 --- a/third_party/polymer/v1_0/components-chromium/neon-animation/neon-animations.html +++ b/third_party/polymer/v1_0/components-chromium/neon-animation/neon-animations.html
@@ -18,6 +18,8 @@ <link rel="import" href="animations/scale-up-animation.html"> <link rel="import" href="animations/slide-from-left-animation.html"> <link rel="import" href="animations/slide-from-right-animation.html"> +<link rel="import" href="animations/slide-from-top-animation.html"> +<link rel="import" href="animations/slide-from-bottom-animation.html"> <link rel="import" href="animations/slide-left-animation.html"> <link rel="import" href="animations/slide-right-animation.html"> <link rel="import" href="animations/slide-up-animation.html">
diff --git a/third_party/polymer/v1_0/components-chromium/paper-behaviors/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-behaviors/.bower.json index 713d584..2b04bf9 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-behaviors/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/paper-behaviors/.bower.json
@@ -1,6 +1,6 @@ { "name": "paper-behaviors", - "version": "1.0.10", + "version": "1.0.11", "description": "Common behaviors across the paper elements", "authors": [ "The Polymer Authors" @@ -27,23 +27,23 @@ "dependencies": { "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0", "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#^1.0.0", + "paper-ripple": "PolymerElements/paper-ripple#^1.0.0", "polymer": "Polymer/polymer#^1.2.1" }, "devDependencies": { "iron-component-page": "polymerelements/iron-component-page#^1.0.0", "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0", "paper-material": "PolymerElements/paper-material#^1.0.0", - "paper-ripple": "PolymerElements/paper-ripple#^1.0.0", "test-fixture": "PolymerElements/test-fixture#^1.0.0", - "web-component-tester": "^3.4.0", + "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, "ignore": [], - "_release": "1.0.10", + "_release": "1.0.11", "_resolution": { "type": "version", - "tag": "v1.0.10", - "commit": "4b244a542af2c6c271498dfb98b00ed284df1d6a" + "tag": "v1.0.11", + "commit": "e3c1ab0c72905b58fb4d9adc2921ea73b5c085a5" }, "_source": "git://github.com/PolymerElements/paper-behaviors.git", "_target": "^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/paper-behaviors/README.md b/third_party/polymer/v1_0/components-chromium/paper-behaviors/README.md index 43c1b67..969e796 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-behaviors/README.md +++ b/third_party/polymer/v1_0/components-chromium/paper-behaviors/README.md
@@ -7,6 +7,9 @@ Edit those files, and our readme bot will duplicate them over here! Edit this file, and the bot will squash your changes :) +The bot does some handling of markdown. Please file a bug if it does the wrong +thing! https://github.com/PolymerLabs/tedium/issues + --> [](https://travis-ci.org/PolymerElements/paper-behaviors) @@ -16,28 +19,26 @@ <!-- No docs for Polymer.PaperButtonBehavior found. --> -##Polymer.PaperRippleBehavior - - -`Polymer.PaperRippleBehavior` dynamically implements a ripple -when the element has focus via pointer or keyboard. - -NOTE: This behavior is intended to be used in conjunction with and after -`Polymer.IronButtonState` and `Polymer.IronControlState`. - - - ##Polymer.PaperCheckedElementBehavior - Use `Polymer.PaperCheckedElementBehavior` to implement a custom element that has a `checked` property similar to `Polymer.IronCheckedElementBehavior` and is compatible with having a ripple effect. + ##Polymer.PaperInkyFocusBehavior - `Polymer.PaperInkyFocusBehavior` implements a ripple when the element has keyboard focus. + +##Polymer.PaperRippleBehavior + +`Polymer.PaperRippleBehavior` dynamically implements a ripple +when the element has focus via pointer or keyboard. + +NOTE: This behavior is intended to be used in conjunction with and after +`Polymer.IronButtonState` and `Polymer.IronControlState`. + +
diff --git a/third_party/polymer/v1_0/components-chromium/paper-behaviors/bower.json b/third_party/polymer/v1_0/components-chromium/paper-behaviors/bower.json index a3e0e8b..5933ab1 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-behaviors/bower.json +++ b/third_party/polymer/v1_0/components-chromium/paper-behaviors/bower.json
@@ -1,6 +1,6 @@ { "name": "paper-behaviors", - "version": "1.0.10", + "version": "1.0.11", "description": "Common behaviors across the paper elements", "authors": [ "The Polymer Authors" @@ -27,15 +27,15 @@ "dependencies": { "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0", "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#^1.0.0", + "paper-ripple": "PolymerElements/paper-ripple#^1.0.0", "polymer": "Polymer/polymer#^1.2.1" }, "devDependencies": { "iron-component-page": "polymerelements/iron-component-page#^1.0.0", "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0", "paper-material": "PolymerElements/paper-material#^1.0.0", - "paper-ripple": "PolymerElements/paper-ripple#^1.0.0", "test-fixture": "PolymerElements/test-fixture#^1.0.0", - "web-component-tester": "^3.4.0", + "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, "ignore": []
diff --git a/third_party/polymer/v1_0/components-chromium/paper-behaviors/paper-button-behavior-extracted.js b/third_party/polymer/v1_0/components-chromium/paper-behaviors/paper-button-behavior-extracted.js index 8e3af75..405268c 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-behaviors/paper-button-behavior-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/paper-behaviors/paper-button-behavior-extracted.js
@@ -44,7 +44,7 @@ }, _computeKeyboardClass: function(receivedFocusFromKeyboard) { - this.classList.toggle('keyboard-focus', receivedFocusFromKeyboard); + this.toggleClass('keyboard-focus', receivedFocusFromKeyboard); }, /** @@ -55,7 +55,8 @@ */ _spaceKeyDownHandler: function(event) { Polymer.IronButtonStateImpl._spaceKeyDownHandler.call(this, event); - if (this.hasRipple()) { + // Ensure that there is at most one ripple when the space key is held down. + if (this.hasRipple() && this.getRipple().ripples.length < 1) { this._ripple.uiDownAction(); } },
diff --git a/third_party/polymer/v1_0/components-chromium/paper-card/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-card/.bower.json index 0b47457..21630b0f 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-card/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/paper-card/.bower.json
@@ -1,6 +1,6 @@ { "name": "paper-card", - "version": "1.0.9", + "version": "1.1.1", "description": "Material design piece of paper with unique related data", "authors": [ "The Polymer Authors" @@ -29,18 +29,20 @@ "devDependencies": { "iron-collapse": "PolymerElements/iron-collapse#^1.0.0", "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", + "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0", "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0", "paper-button": "PolymerElements/paper-button#^1.0.0", + "paper-checkbox": "PolymerElements/paper-checkbox#^1.0.0", "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0", "test-fixture": "PolymerElements/test-fixture#^1.0.0", "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, - "_release": "1.0.9", + "_release": "1.1.1", "_resolution": { "type": "version", - "tag": "v1.0.9", - "commit": "9733d402e93270be96bdafb4b796aea598a7db26" + "tag": "v1.1.1", + "commit": "8ddd91424414ad32147c4c0c6812aff348da6114" }, "_source": "git://github.com/PolymerElements/paper-card.git", "_target": "*",
diff --git a/third_party/polymer/v1_0/components-chromium/paper-card/README.md b/third_party/polymer/v1_0/components-chromium/paper-card/README.md index 680bcd5..7662b9e7 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-card/README.md +++ b/third_party/polymer/v1_0/components-chromium/paper-card/README.md
@@ -52,6 +52,7 @@ | Custom property | Description | Default | | --- | --- | --- | +| `--paper-card-background-color` | The background color of the card | `--primary-background-color` | | `--paper-card-header-color` | The color of the header text | `#000` | | `--paper-card-header` | Mixin applied to the card header section | `{}` | | `--paper-card-header-text` | Mixin applied to the title in the card header section | `{}` |
diff --git a/third_party/polymer/v1_0/components-chromium/paper-card/bower.json b/third_party/polymer/v1_0/components-chromium/paper-card/bower.json index 4187438..b17e3fa 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-card/bower.json +++ b/third_party/polymer/v1_0/components-chromium/paper-card/bower.json
@@ -1,6 +1,6 @@ { "name": "paper-card", - "version": "1.0.9", + "version": "1.1.1", "description": "Material design piece of paper with unique related data", "authors": [ "The Polymer Authors" @@ -29,8 +29,10 @@ "devDependencies": { "iron-collapse": "PolymerElements/iron-collapse#^1.0.0", "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", + "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0", "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0", "paper-button": "PolymerElements/paper-button#^1.0.0", + "paper-checkbox": "PolymerElements/paper-checkbox#^1.0.0", "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0", "test-fixture": "PolymerElements/test-fixture#^1.0.0", "web-component-tester": "^4.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/paper-card/paper-card.html b/third_party/polymer/v1_0/components-chromium/paper-card/paper-card.html index 3de651bb..932fb30d 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-card/paper-card.html +++ b/third_party/polymer/v1_0/components-chromium/paper-card/paper-card.html
@@ -67,6 +67,7 @@ background-color: var(--paper-card-background-color, --primary-background-color); border-radius: 2px; + @apply(--paper-font-common-base); @apply(--paper-card); }
diff --git a/third_party/polymer/v1_0/components-chromium/paper-checkbox/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-checkbox/.bower.json index f8b0f98d..0bb2e726 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-checkbox/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/paper-checkbox/.bower.json
@@ -1,6 +1,6 @@ { "name": "paper-checkbox", - "version": "1.1.0", + "version": "1.1.1", "description": "A material design checkbox", "authors": [ "The Polymer Authors" @@ -25,11 +25,11 @@ "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#^1.0.0", "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0", "paper-ripple": "PolymerElements/paper-ripple#^1.0.0", - "paper-styles": "PolymerElements/paper-styles#^1.0.0" + "paper-styles": "PolymerElements/paper-styles#^1.1.0" }, "devDependencies": { "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0", - "web-component-tester": "polymer/web-component-tester#^3.4.0", + "web-component-tester": "^4.0.0", "test-fixture": "PolymerElements/test-fixture#^1.0.0", "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0", @@ -37,11 +37,11 @@ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0" }, "main": "paper-checkbox.html", - "_release": "1.1.0", + "_release": "1.1.1", "_resolution": { "type": "version", - "tag": "v1.1.0", - "commit": "ee47421a36034bdf540fabeea713b4b11a7c11ac" + "tag": "v1.1.1", + "commit": "ce52f51c537d27f414fec7298b9ebff4248044eb" }, "_source": "git://github.com/PolymerElements/paper-checkbox.git", "_target": "^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/paper-checkbox/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-checkbox/CONTRIBUTING.md index 7b101415..f147978a 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-checkbox/CONTRIBUTING.md +++ b/third_party/polymer/v1_0/components-chromium/paper-checkbox/CONTRIBUTING.md
@@ -5,6 +5,11 @@ If you edit that file, it will get updated everywhere else. If you edit this file, your changes will get overridden :) + +You can however override the jsbin link with one that's customized to this +specific element: + +jsbin=https://jsbin.com/cagaye/edit?html,output --> # Polymer Elements ## Guide for Contributors @@ -41,7 +46,7 @@ 3. Click the `paper-foo` element. ``` - 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output). + 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output). 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers. @@ -51,14 +56,14 @@ When submitting pull requests, please provide: - 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax: + 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax: ```markdown (For a single issue) Fixes #20 (For multiple issues) - Fixes #32, #40 + Fixes #32, fixes #40 ``` 2. **A succinct description of the design** used to fix any related issues. For example:
diff --git a/third_party/polymer/v1_0/components-chromium/paper-checkbox/README.md b/third_party/polymer/v1_0/components-chromium/paper-checkbox/README.md index 6434b43..558315d 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-checkbox/README.md +++ b/third_party/polymer/v1_0/components-chromium/paper-checkbox/README.md
@@ -7,16 +7,18 @@ Edit those files, and our readme bot will duplicate them over here! Edit this file, and the bot will squash your changes :) +The bot does some handling of markdown. Please file a bug if it does the wrong +thing! https://github.com/PolymerLabs/tedium/issues + --> -[](https://travis-ci.org/PolymerElements/paper-checkbox) +[](https://travis-ci.org/PolymerElements/paper-checkbox) -_[Demo and API Docs](https://elements.polymer-project.org/elements/paper-checkbox)_ +_[Demo and API docs](https://elements.polymer-project.org/elements/paper-checkbox)_ ##<paper-checkbox> - Material design: [Checkbox](https://www.google.com/design/spec/components/selection-controls.html#selection-controls-checkbox) `paper-checkbox` is a button that can be either checked or unchecked. User @@ -27,24 +29,30 @@ Example: - <paper-checkbox>label</paper-checkbox> +```html +<paper-checkbox>label</paper-checkbox> - <paper-checkbox checked> label</paper-checkbox> +<paper-checkbox checked> label</paper-checkbox> +``` ### Styling The following custom properties and mixins are available for styling: -Custom property | Description | Default -----------------|-------------|---------- -`--paper-checkbox-unchecked-background-color` | Checkbox background color when the input is not checked | `transparent` -`--paper-checkbox-unchecked-color` | Checkbox border color when the input is not checked | `--primary-text-color` -`--paper-checkbox-unchecked-ink-color` | Selected/focus ripple color when the input is not checked | `--primary-text-color` -`--paper-checkbox-checked-color` | Checkbox color when the input is checked | `--default-primary-color` -`--paper-checkbox-checked-ink-color` | Selected/focus ripple color when the input is checked | `--default-primary-color` -`--paper-checkbox-checkmark-color` | Checkmark color | `white` -`--paper-checkbox-label-color` | Label color | `--primary-text-color` -`--paper-checkbox-label-spacing` | Spacing between the label and the checkbox | `8px` -`--paper-checkbox-error-color` | Checkbox color when invalid | `--google-red-500` +| Custom property | Description | Default | +| --- | --- | --- | +| `--paper-checkbox-unchecked-background-color` | Checkbox background color when the input is not checked | `transparent` | +| `--paper-checkbox-unchecked-color` | Checkbox border color when the input is not checked | `--primary-text-color` | +| `--paper-checkbox-unchecked-ink-color` | Selected/focus ripple color when the input is not checked | `--primary-text-color` | +| `--paper-checkbox-checked-color` | Checkbox color when the input is checked | `--primary-color` | +| `--paper-checkbox-checked-ink-color` | Selected/focus ripple color when the input is checked | `--primary-color` | +| `--paper-checkbox-checkmark-color` | Checkmark color | `white` | +| `--paper-checkbox-label-color` | Label color | `--primary-text-color` | +| `--paper-checkbox-label-spacing` | Spacing between the label and the checkbox | `8px` | +| `--paper-checkbox-error-color` | Checkbox color when invalid | `--google-red-500` | +| `--paper-checkbox-size` | Size of the checkbox | `18px` | + +This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`. +In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`.
diff --git a/third_party/polymer/v1_0/components-chromium/paper-checkbox/bower.json b/third_party/polymer/v1_0/components-chromium/paper-checkbox/bower.json index 344cbbc..4947af7 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-checkbox/bower.json +++ b/third_party/polymer/v1_0/components-chromium/paper-checkbox/bower.json
@@ -1,6 +1,6 @@ { "name": "paper-checkbox", - "version": "1.1.0", + "version": "1.1.1", "description": "A material design checkbox", "authors": [ "The Polymer Authors" @@ -25,11 +25,11 @@ "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#^1.0.0", "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0", "paper-ripple": "PolymerElements/paper-ripple#^1.0.0", - "paper-styles": "PolymerElements/paper-styles#^1.0.0" + "paper-styles": "PolymerElements/paper-styles#^1.1.0" }, "devDependencies": { "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0", - "web-component-tester": "polymer/web-component-tester#^3.4.0", + "web-component-tester": "^4.0.0", "test-fixture": "PolymerElements/test-fixture#^1.0.0", "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/paper-checkbox/paper-checkbox.html b/third_party/polymer/v1_0/components-chromium/paper-checkbox/paper-checkbox.html index 0f53b7f6..4ef8a47 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-checkbox/paper-checkbox.html +++ b/third_party/polymer/v1_0/components-chromium/paper-checkbox/paper-checkbox.html
@@ -1,13 +1,12 @@ <!-- @license -Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as part of the polymer project is also subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt --><html><head><link rel="import" href="../polymer/polymer.html"> -<link rel="import" href="../paper-ripple/paper-ripple.html"> <link rel="import" href="../paper-styles/default-theme.html"> <link rel="import" href="../paper-styles/color.html"> <link rel="import" href="../paper-behaviors/paper-checked-element-behavior.html"> @@ -36,14 +35,17 @@ `--paper-checkbox-unchecked-background-color` | Checkbox background color when the input is not checked | `transparent` `--paper-checkbox-unchecked-color` | Checkbox border color when the input is not checked | `--primary-text-color` `--paper-checkbox-unchecked-ink-color` | Selected/focus ripple color when the input is not checked | `--primary-text-color` -`--paper-checkbox-checked-color` | Checkbox color when the input is checked | `--default-primary-color` -`--paper-checkbox-checked-ink-color` | Selected/focus ripple color when the input is checked | `--default-primary-color` +`--paper-checkbox-checked-color` | Checkbox color when the input is checked | `--primary-color` +`--paper-checkbox-checked-ink-color` | Selected/focus ripple color when the input is checked | `--primary-color` `--paper-checkbox-checkmark-color` | Checkmark color | `white` `--paper-checkbox-label-color` | Label color | `--primary-text-color` `--paper-checkbox-label-spacing` | Spacing between the label and the checkbox | `8px` `--paper-checkbox-error-color` | Checkbox color when invalid | `--google-red-500` `--paper-checkbox-size` | Size of the checkbox | `18px` +This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`. +In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`. + @demo demo/index.html --> @@ -55,6 +57,7 @@ white-space: nowrap; cursor: pointer; --calculated-paper-checkbox-size: var(--paper-checkbox-size, 18px); + @apply(--paper-font-common-base); } :host(:focus) { @@ -95,7 +98,7 @@ } #ink[checked] { - color: var(--paper-checkbox-checked-ink-color, --default-primary-color); + color: var(--paper-checkbox-checked-ink-color, --primary-color); } #checkbox { @@ -135,8 +138,8 @@ } #checkbox.checked { - background-color: var(--paper-checkbox-checked-color, --default-primary-color); - border-color: var(--paper-checkbox-checked-color, --default-primary-color); + background-color: var(--paper-checkbox-checked-color, --primary-color); + border-color: var(--paper-checkbox-checked-color, --primary-color); } #checkmark { @@ -149,13 +152,14 @@ border-right-width: calc(2/15 * var(--calculated-paper-checkbox-size)); border-bottom-width: calc(2/15 * var(--calculated-paper-checkbox-size)); border-color: var(--paper-checkbox-checkmark-color, white); - transform-origin: 97% 86%; -webkit-transform-origin: 97% 86%; + transform-origin: 97% 86%; + box-sizing: content-box; /* protect against page-level box-sizing */ } :host-context([dir="rtl"]) #checkmark { - transform-origin: 50% 14%; -webkit-transform-origin: 50% 14%; + transform-origin: 50% 14%; } /* label */
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/.bower.json index fc4c6b9..4023c89 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/.bower.json
@@ -1,6 +1,6 @@ { "name": "paper-dialog-behavior", - "version": "1.1.0", + "version": "1.1.1", "description": "Implements a behavior used for material design dialogs", "authors": "The Polymer Authors", "keywords": [ @@ -21,7 +21,7 @@ "ignore": [], "dependencies": { "iron-overlay-behavior": "PolymerElements/iron-overlay-behavior#^1.0.0", - "paper-styles": "PolymerElements/paper-styles#^1.0.4", + "paper-styles": "PolymerElements/paper-styles#^1.1.0", "polymer": "Polymer/polymer#^1.1.0" }, "devDependencies": { @@ -29,14 +29,14 @@ "paper-button": "PolymerElements/paper-button#^1.0.0", "paper-dialog-scrollable": "PolymerElements/paper-dialog-scrollable#^1.0.0", "test-fixture": "PolymerElements/test-fixture#^1.0.0", - "web-component-tester": "*", + "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, - "_release": "1.1.0", + "_release": "1.1.1", "_resolution": { "type": "version", - "tag": "v1.1.0", - "commit": "e41d36a798df2ee2f9f49fb27dd7712e55366595" + "tag": "v1.1.1", + "commit": "5831039e9f878c63478064abed115c98992b5504" }, "_source": "git://github.com/PolymerElements/paper-dialog-behavior.git", "_target": "^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/README.md b/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/README.md index af0983d..df10124 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/README.md +++ b/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/README.md
@@ -7,6 +7,9 @@ Edit those files, and our readme bot will duplicate them over here! Edit this file, and the bot will squash your changes :) +The bot does some handling of markdown. Please file a bug if it does the wrong +thing! https://github.com/PolymerLabs/tedium/issues + --> [](https://travis-ci.org/PolymerElements/paper-dialog-behavior) @@ -16,22 +19,23 @@ ##Polymer.PaperDialogBehavior - -Use `Polymer.PaperDialogBehavior` and `paper-dialog-common.css` to implement a Material Design +Use `Polymer.PaperDialogBehavior` and `paper-dialog-shared-styles.html` to implement a Material Design dialog. For example, if `<paper-dialog-impl>` implements this behavior: - <paper-dialog-impl> - <h2>Header</h2> - <div>Dialog body</div> - <div class="buttons"> - <paper-button dialog-dismiss>Cancel</paper-button> - <paper-button dialog-confirm>Accept</paper-button> - </div> - </paper-dialog-impl> +```html +<paper-dialog-impl> + <h2>Header</h2> + <div>Dialog body</div> + <div class="buttons"> + <paper-button dialog-dismiss>Cancel</paper-button> + <paper-button dialog-confirm>Accept</paper-button> + </div> +</paper-dialog-impl> +``` -`paper-dialog-common.css` provide styles for a header, content area, and an action area for buttons. +`paper-dialog-shared-styles.html` provide styles for a header, content area, and an action area for buttons. Use the `<h2>` tag for the header and the `buttons` class for the action area. You can use the `paper-dialog-scrollable` element (in its own repository) if you need a scrolling content area. @@ -43,13 +47,13 @@ The following custom properties and mixins are available for styling. -Custom property | Description | Default -----------------|-------------|---------- -`--paper-dialog-background-color` | Dialog background color | `--primary-background-color` -`--paper-dialog-color` | Dialog foreground color | `--primary-text-color` -`--paper-dialog` | Mixin applied to the dialog | `{}` -`--paper-dialog-title` | Mixin applied to the title (`<h2>`) element | `{}` -`--paper-dialog-button-color` | Button area foreground color | `--default-primary-color` +| Custom property | Description | Default | +| --- | --- | --- | +| `--paper-dialog-background-color` | Dialog background color | `--primary-background-color` | +| `--paper-dialog-color` | Dialog foreground color | `--primary-text-color` | +| `--paper-dialog` | Mixin applied to the dialog | `{}` | +| `--paper-dialog-title` | Mixin applied to the title (`<h2>`) element | `{}` | +| `--paper-dialog-button-color` | Button area foreground color | `--default-primary-color` | ### Accessibility
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/bower.json b/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/bower.json index ef81a9e..7d231ca 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/bower.json +++ b/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/bower.json
@@ -1,6 +1,6 @@ { "name": "paper-dialog-behavior", - "version": "1.1.0", + "version": "1.1.1", "description": "Implements a behavior used for material design dialogs", "authors": "The Polymer Authors", "keywords": [ @@ -21,7 +21,7 @@ "ignore": [], "dependencies": { "iron-overlay-behavior": "PolymerElements/iron-overlay-behavior#^1.0.0", - "paper-styles": "PolymerElements/paper-styles#^1.0.4", + "paper-styles": "PolymerElements/paper-styles#^1.1.0", "polymer": "Polymer/polymer#^1.1.0" }, "devDependencies": { @@ -29,7 +29,7 @@ "paper-button": "PolymerElements/paper-button#^1.0.0", "paper-dialog-scrollable": "PolymerElements/paper-dialog-scrollable#^1.0.0", "test-fixture": "PolymerElements/test-fixture#^1.0.0", - "web-component-tester": "*", + "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" } }
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/paper-dialog-behavior-extracted.js b/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/paper-dialog-behavior-extracted.js index 6d528e24..a05d175 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/paper-dialog-behavior-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/paper-dialog-behavior-extracted.js
@@ -94,25 +94,13 @@ }, attached: function() { - this._observer = this._observe(this); + // this._observer is used by iron-overlay-behavior + this._ariaObserver = Polymer.dom(this).observeNodes(this._updateAriaLabelledBy); this._updateAriaLabelledBy(); }, detached: function() { - if (this._observer) { - this._observer.disconnect(); - } - }, - - _observe: function(node) { - var observer = new MutationObserver(function() { - this._updateAriaLabelledBy(); - }.bind(this)); - observer.observe(node, { - childList: true, - subtree: true - }); - return observer; + Polymer.dom(this).unobserveNodes(this._ariaObserver); }, _modalChanged: function() { @@ -156,57 +144,52 @@ }, _onDialogClick: function(event) { - var target = event.target; + var target = Polymer.dom(event).rootTarget; while (target && target !== this) { if (target.hasAttribute) { if (target.hasAttribute('dialog-dismiss')) { this._updateClosingReasonConfirmed(false); this.close(); + event.stopPropagation(); break; } else if (target.hasAttribute('dialog-confirm')) { this._updateClosingReasonConfirmed(true); this.close(); + event.stopPropagation(); break; } } - target = target.parentNode; + target = Polymer.dom(target).parentNode; } }, _onIronOverlayOpened: function() { if (this.modal) { document.body.addEventListener('focus', this._boundOnFocus, true); - this.backdropElement.addEventListener('click', this._boundOnBackdropClick); + document.body.addEventListener('click', this._boundOnBackdropClick, true); } }, _onIronOverlayClosed: function() { + this._lastFocusedElement = null; document.body.removeEventListener('focus', this._boundOnFocus, true); - this.backdropElement.removeEventListener('click', this._boundOnBackdropClick); + document.body.removeEventListener('click', this._boundOnBackdropClick, true); }, _onFocus: function(event) { - if (this.modal) { - var target = event.target; - while (target && target !== this && target !== document.body) { - target = target.parentNode; - } - if (target) { - if (target === document.body) { - if (this._lastFocusedElement) { - this._lastFocusedElement.focus(); - } else { - this._focusNode.focus(); - } - } else { - this._lastFocusedElement = event.target; - } + if (this.modal && this._manager.currentOverlay() === this) { + if (Polymer.dom(event).path.indexOf(this) !== -1) { + this._lastFocusedElement = event.target; + } else if (this._lastFocusedElement) { + this._lastFocusedElement.focus(); + } else { + this._focusNode.focus(); } } }, - _onBackdropClick: function() { - if (this.modal) { + _onBackdropClick: function(event) { + if (this.modal && this._manager.currentOverlay() === this && Polymer.dom(event).path.indexOf(this) === -1) { if (this._lastFocusedElement) { this._lastFocusedElement.focus(); } else {
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/paper-dialog-common.css b/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/paper-dialog-common.css index 17e2db9..db9f243 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/paper-dialog-common.css +++ b/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/paper-dialog-common.css
@@ -51,7 +51,7 @@ padding: 8px 8px 8px 24px; margin: 0; - color: var(--paper-dialog-button-color, --default-primary-color); + color: var(--paper-dialog-button-color, --primary-color); @apply(--layout-horizontal); @apply(--layout-end-justified);
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/paper-dialog-shared-styles.html b/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/paper-dialog-shared-styles.html index face2497..9fae1b6 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/paper-dialog-shared-styles.html +++ b/third_party/polymer/v1_0/components-chromium/paper-dialog-behavior/paper-dialog-shared-styles.html
@@ -54,7 +54,7 @@ padding: 8px 8px 8px 24px; margin: 0; - color: var(--paper-dialog-button-color, --default-primary-color); + color: var(--paper-dialog-button-color, --primary-color); @apply(--layout-horizontal); @apply(--layout-end-justified);
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/.bower.json index 0e980219..660d0f7 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/.bower.json
@@ -1,6 +1,6 @@ { "name": "paper-dropdown-menu", - "version": "1.1.2", + "version": "1.1.3", "description": "An element that works similarly to a native browser select", "authors": [ "The Polymer Authors" @@ -34,20 +34,21 @@ }, "devDependencies": { "iron-component-page": "polymerelements/iron-component-page#^1.0.0", + "iron-demo-helpers": "polymerelements/iron-demo-helpers#^1.0.0", "test-fixture": "polymerelements/test-fixture#^1.0.0", "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0", "paper-item": "polymerelements/paper-item#^1.0.0", "paper-listbox": "polymerelements/paper-listbox#^1.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0", - "web-component-tester": "*", + "web-component-tester": "^4.0.0", "paper-tabs": "polymerelements/paper-tabs#^1.0.0" }, "ignore": [], - "_release": "1.1.2", + "_release": "1.1.3", "_resolution": { "type": "version", - "tag": "v1.1.2", - "commit": "704fbc176592da9bb3f23e138ef8f3b0533d865b" + "tag": "v1.1.3", + "commit": "1ca32e3eeb568f1ae356a205c1812744fdd65950" }, "_source": "git://github.com/PolymerElements/paper-dropdown-menu.git", "_target": "^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/README.md b/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/README.md index 50f9985..64b4b97b 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/README.md +++ b/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/README.md
@@ -7,6 +7,9 @@ Edit those files, and our readme bot will duplicate them over here! Edit this file, and the bot will squash your changes :) +The bot does some handling of markdown. Please file a bug if it does the wrong +thing! https://github.com/PolymerLabs/tedium/issues + --> [](https://travis-ci.org/PolymerElements/paper-dropdown-menu) @@ -16,7 +19,6 @@ ##<paper-dropdown-menu> - Material design: [Dropdown menus](https://www.google.com/design/spec/components/buttons.html#buttons-dropdown-buttons) `paper-dropdown-menu` is similar to a native browser select element. @@ -30,14 +32,16 @@ Example: - <paper-dropdown-menu label="Your favourite pastry"> - <paper-menu class="dropdown-content"> - <paper-item>Croissant</paper-item> - <paper-item>Donut</paper-item> - <paper-item>Financier</paper-item> - <paper-item>Madeleine</paper-item> - </paper-menu> - </paper-dropdown-menu> +```html +<paper-dropdown-menu label="Your favourite pastry"> + <paper-menu class="dropdown-content"> + <paper-item>Croissant</paper-item> + <paper-item>Donut</paper-item> + <paper-item>Financier</paper-item> + <paper-item>Madeleine</paper-item> + </paper-menu> +</paper-dropdown-menu> +``` This example renders a dropdown menu with 4 options. @@ -48,14 +52,14 @@ The following custom properties and mixins are also available for styling: -Custom property | Description | Default -----------------|-------------|---------- -`--paper-dropdown-menu` | A mixin that is applied to the element host | `{}` -`--paper-dropdown-menu-disabled` | A mixin that is applied to the element host when disabled | `{}` -`--paper-dropdown-menu-ripple` | A mixin that is applied to the internal ripple | `{}` -`--paper-dropdown-menu-button` | A mixin that is applied to the internal menu button | `{}` -`--paper-dropdown-menu-input` | A mixin that is applied to the internal paper input | `{}` -`--paper-dropdown-menu-icon` | A mixin that is applied to the internal icon | `{}` +| Custom property | Description | Default | +| --- | --- | --- | +| `--paper-dropdown-menu` | A mixin that is applied to the element host | `{}` | +| `--paper-dropdown-menu-disabled` | A mixin that is applied to the element host when disabled | `{}` | +| `--paper-dropdown-menu-ripple` | A mixin that is applied to the internal ripple | `{}` | +| `--paper-dropdown-menu-button` | A mixin that is applied to the internal menu button | `{}` | +| `--paper-dropdown-menu-input` | A mixin that is applied to the internal paper input | `{}` | +| `--paper-dropdown-menu-icon` | A mixin that is applied to the internal icon | `{}` | You can also use any of the `paper-input-container` and `paper-menu-button` style mixins and custom properties to style the internal input and menu button
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/bower.json b/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/bower.json index 7d703b96..74a2900 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/bower.json +++ b/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/bower.json
@@ -1,6 +1,6 @@ { "name": "paper-dropdown-menu", - "version": "1.1.2", + "version": "1.1.3", "description": "An element that works similarly to a native browser select", "authors": [ "The Polymer Authors" @@ -34,12 +34,13 @@ }, "devDependencies": { "iron-component-page": "polymerelements/iron-component-page#^1.0.0", + "iron-demo-helpers": "polymerelements/iron-demo-helpers#^1.0.0", "test-fixture": "polymerelements/test-fixture#^1.0.0", "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0", "paper-item": "polymerelements/paper-item#^1.0.0", "paper-listbox": "polymerelements/paper-listbox#^1.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0", - "web-component-tester": "*", + "web-component-tester": "^4.0.0", "paper-tabs": "polymerelements/paper-tabs#^1.0.0" }, "ignore": []
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/paper-dropdown-menu-extracted.js b/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/paper-dropdown-menu-extracted.js index 6b4452a..0a41ece 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/paper-dropdown-menu-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/paper-dropdown-menu-extracted.js
@@ -74,6 +74,13 @@ }, /** + * The error message to display when invalid. + */ + errorMessage: { + type: String + }, + + /** * True if the dropdown is open. Otherwise, false. */ opened: {
diff --git a/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/paper-dropdown-menu.html b/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/paper-dropdown-menu.html index 9a48227..39ea31a 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/paper-dropdown-menu.html +++ b/third_party/polymer/v1_0/components-chromium/paper-dropdown-menu/paper-dropdown-menu.html
@@ -142,7 +142,7 @@ <div class="dropdown-trigger"> <paper-ripple></paper-ripple> <!-- paper-input has type="text" for a11y, do not remove --> - <paper-input type="text" invalid="[[invalid]]" readonly="" disabled="[[disabled]]" value="[[selectedItemLabel]]" placeholder="[[placeholder]]" always-float-label="[[alwaysFloatLabel]]" no-label-float="[[noLabelFloat]]" label="[[label]]"> + <paper-input type="text" invalid="[[invalid]]" readonly="" disabled="[[disabled]]" value="[[selectedItemLabel]]" placeholder="[[placeholder]]" error-message="[[errorMessage]]" always-float-label="[[alwaysFloatLabel]]" no-label-float="[[noLabelFloat]]" label="[[label]]"> <iron-icon icon="arrow-drop-down" suffix=""></iron-icon> </paper-input> </div>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-header-panel/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-header-panel/.bower.json index c81b290..006626fa 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-header-panel/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/paper-header-panel/.bower.json
@@ -1,6 +1,6 @@ { "name": "paper-header-panel", - "version": "1.1.2", + "version": "1.1.3", "description": "A header and content wrapper for layout with headers", "authors": [ "The Polymer Authors" @@ -27,14 +27,14 @@ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", "paper-styles": "PolymerElements/paper-styles#^1.0.0", "test-fixture": "PolymerElements/test-fixture#^1.0.0", - "web-component-tester": "*", + "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, - "_release": "1.1.2", + "_release": "1.1.3", "_resolution": { "type": "version", - "tag": "v1.1.2", - "commit": "ea23746cc0e399e9e4f75f19cf514e261d89cca1" + "tag": "v1.1.3", + "commit": "a36f782c6687aa08ce811f597a495a4f09137c75" }, "_source": "git://github.com/PolymerElements/paper-header-panel.git", "_target": "^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/paper-header-panel/CONTRIBUTING.md b/third_party/polymer/v1_0/components-chromium/paper-header-panel/CONTRIBUTING.md index 7b101415..f147978a 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-header-panel/CONTRIBUTING.md +++ b/third_party/polymer/v1_0/components-chromium/paper-header-panel/CONTRIBUTING.md
@@ -5,6 +5,11 @@ If you edit that file, it will get updated everywhere else. If you edit this file, your changes will get overridden :) + +You can however override the jsbin link with one that's customized to this +specific element: + +jsbin=https://jsbin.com/cagaye/edit?html,output --> # Polymer Elements ## Guide for Contributors @@ -41,7 +46,7 @@ 3. Click the `paper-foo` element. ``` - 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output). + 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output). 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers. @@ -51,14 +56,14 @@ When submitting pull requests, please provide: - 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax: + 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax: ```markdown (For a single issue) Fixes #20 (For multiple issues) - Fixes #32, #40 + Fixes #32, fixes #40 ``` 2. **A succinct description of the design** used to fix any related issues. For example:
diff --git a/third_party/polymer/v1_0/components-chromium/paper-header-panel/README.md b/third_party/polymer/v1_0/components-chromium/paper-header-panel/README.md index af5959dc..f86c112 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-header-panel/README.md +++ b/third_party/polymer/v1_0/components-chromium/paper-header-panel/README.md
@@ -7,117 +7,145 @@ Edit those files, and our readme bot will duplicate them over here! Edit this file, and the bot will squash your changes :) +The bot does some handling of markdown. Please file a bug if it does the wrong +thing! https://github.com/PolymerLabs/tedium/issues + --> -[](https://travis-ci.org/PolymerElements/paper-header-panel) +[](https://travis-ci.org/PolymerElements/paper-header-panel) -_[Demo and API Docs](https://elements.polymer-project.org/elements/paper-header-panel)_ +_[Demo and API docs](https://elements.polymer-project.org/elements/paper-header-panel)_ ##<paper-header-panel> - `paper-header-panel` contains a header section and a content panel section. __Important:__ The `paper-header-panel` will not display if its parent does not have a height. Using layout classes, you can make the `paper-header-panel` fill the screen - <body class="fullbleed layout vertical"> - <paper-header-panel class="flex"> - <paper-toolbar> - <div>Hello World!</div> - </paper-toolbar> - </paper-header-panel> - </body> +```html +<body class="fullbleed layout vertical"> + <paper-header-panel class="flex"> + <paper-toolbar> + <div>Hello World!</div> + </paper-toolbar> + </paper-header-panel> +</body> +``` Special support is provided for scrolling modes when one uses a paper-toolbar or equivalent for the header section. Example: - <paper-header-panel> - <paper-toolbar>Header</paper-toolbar> - <div>Content goes here...</div> - </paper-header-panel> +```html +<paper-header-panel> + <paper-toolbar>Header</paper-toolbar> + <div>Content goes here...</div> +</paper-header-panel> +``` If you want to use other than `paper-toolbar` for the header, add `paper-header` class to that element. Example: - <paper-header-panel> - <div class="paper-header">Header</div> - <div>Content goes here...</div> - </paper-header-panel> +```html +<paper-header-panel> + <div class="paper-header">Header</div> + <div>Content goes here...</div> +</paper-header-panel> +``` To have the content fit to the main area, use the `fit` class. - <paper-header-panel> - <div class="paper-header">standard</div> - <div class="fit">content fits 100% below the header</div> - </paper-header-panel> +```html +<paper-header-panel> + <div class="paper-header">standard</div> + <div class="fit">content fits 100% below the header</div> +</paper-header-panel> +``` ### Modes Controls header and scrolling behavior. Options are `standard`, `seamed`, `waterfall`, `waterfall-tall`, `scroll` and `cover`. Default is `standard`. -Mode | Description -----------------|------------- -`standard` | The header is a step above the panel. The header will consume the panel at the point of entry, preventing it from passing through to the opposite side. -`seamed` | The header is presented as seamed with the panel. -`waterfall` | Similar to standard mode, but header is initially presented as seamed with panel, but then separates to form the step. -`waterfall-tall` | The header is initially taller (`tall` class is added to the header). As the user scrolls, the header separates (forming an edge) while condensing (`tall` class is removed from the header). -`scroll` | The header keeps its seam with the panel, and is pushed off screen. -`cover` | The panel covers the whole `paper-header-panel` including the header. This allows user to style the panel in such a way that the panel is partially covering the header. +| Mode | Description | +| --- | --- | +| `standard` | The header is a step above the panel. The header will consume the panel at the point of entry, preventing it from passing through to the opposite side. | +| `seamed` | The header is presented as seamed with the panel. | +| `waterfall` | Similar to standard mode, but header is initially presented as seamed with panel, but then separates to form the step. | +| `waterfall-tall` | The header is initially taller (`tall` class is added to the header). As the user scrolls, the header separates (forming an edge) while condensing (`tall` class is removed from the header). | +| `scroll` | The header keeps its seam with the panel, and is pushed off screen. | +| `cover` | The panel covers the whole `paper-header-panel` including the header. This allows user to style the panel in such a way that the panel is partially covering the header. | Example: - <paper-header-panel mode="waterfall"> - <div class="paper-header">standard</div> - <div class="content fit">content fits 100% below the header</div> - </paper-header-panel> - +```html +<paper-header-panel mode="waterfall"> + <div class="paper-header">standard</div> + <div class="content fit">content fits 100% below the header</div> +</paper-header-panel> +``` ### Styling To change the shadow that shows up underneath the header: - paper-header-panel { - --paper-header-panel-shadow: { - height: 6px; - bottom: -6px; - box-shadow: inset 0px 5px 6px -3px rgba(0, 0, 0, 0.4); - }; - } +```css +paper-header-panel { + --paper-header-panel-shadow: { + height: 6px; + bottom: -6px; + box-shadow: inset 0px 5px 6px -3px rgba(0, 0, 0, 0.4); + }; +} +``` To change the panel container in different modes: - paper-header-panel { - --paper-header-panel-standard-container: { - border: 1px solid gray; - }; +```css +paper-header-panel { + --paper-header-panel-standard-container: { + border: 1px solid gray; + }; - --paper-header-panel-seamed-container: { - border: 1px solid gray; - }; + --paper-header-panel-seamed-container: { + border: 1px solid gray; + }; - --paper-header-panel-waterfall-container: { - border: 1px solid gray; - }; + --paper-header-panel-waterfall-container: { + border: 1px solid gray; + }; - --paper-header-panel-waterfall-tall-container: { - border: 1px solid gray; - }; + --paper-header-panel-waterfall-tall-container: { + border: 1px solid gray; + }; - --paper-header-panel-scroll-container: { - border: 1px solid gray; - }; + --paper-header-panel-scroll-container: { + border: 1px solid gray; + }; - --paper-header-panel-cover-container: { - border: 1px solid gray; - }; - } + --paper-header-panel-cover-container: { + border: 1px solid gray; + }; +} +``` + +The following custom properties and mixins are available for styling: + +| Custom property | Description | Default | +| --- | --- | --- | +| `--paper-header-panel` | Mixin applied to the element | `{}` | +| `--paper-header-panel-body` | Mixin applied to the element's body (i.e. everything below the toolbar) | `{}` | +| `--paper-header-panel-scroll-container` | Mixin applied to the container when in scroll mode | `{}` | +| `--paper-header-panel-cover-container` | Mixin applied to the container when in cover mode | `{}` | +| `--paper-header-panel-standard-container` | Mixin applied to the container when in standard mode | `{}` | +| `--paper-header-panel-seamed-container` | Mixin applied to the container when in seamed mode | `{}` | +| `--paper-header-panel-waterfall-container` | Mixin applied to the container when in waterfall mode | `{}` | +| `--paper-header-panel-waterfall-tall-container` | Mixin applied to the container when in tall waterfall mode | `{}` |
diff --git a/third_party/polymer/v1_0/components-chromium/paper-header-panel/bower.json b/third_party/polymer/v1_0/components-chromium/paper-header-panel/bower.json index 9040aa6..c699bb66 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-header-panel/bower.json +++ b/third_party/polymer/v1_0/components-chromium/paper-header-panel/bower.json
@@ -1,6 +1,6 @@ { "name": "paper-header-panel", - "version": "1.1.2", + "version": "1.1.3", "description": "A header and content wrapper for layout with headers", "authors": [ "The Polymer Authors" @@ -27,7 +27,7 @@ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", "paper-styles": "PolymerElements/paper-styles#^1.0.0", "test-fixture": "PolymerElements/test-fixture#^1.0.0", - "web-component-tester": "*", + "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" } }
diff --git a/third_party/polymer/v1_0/components-chromium/paper-header-panel/paper-header-panel-extracted.js b/third_party/polymer/v1_0/components-chromium/paper-header-panel/paper-header-panel-extracted.js index 192412f6..55c09fe8 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-header-panel/paper-header-panel-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/paper-header-panel/paper-header-panel-extracted.js
@@ -102,6 +102,7 @@ atTop: { type: Boolean, value: true, + notify: true, readOnly: true } },
diff --git a/third_party/polymer/v1_0/components-chromium/paper-material/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-material/.bower.json index 97e4b482..76995ae 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-material/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/paper-material/.bower.json
@@ -1,6 +1,6 @@ { "name": "paper-material", - "version": "1.0.5", + "version": "1.0.6", "description": "A material design container that looks like a lifted sheet of paper", "private": true, "authors": [ @@ -27,15 +27,16 @@ }, "devDependencies": { "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0", - "web-component-tester": "polymer/web-component-tester#^3.4.0", + "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0", + "web-component-tester": "^4.0.0", "test-fixture": "polymerelements/test-fixture#^1.0.0", "iron-component-page": "PolymerElements/iron-component-page#^1.0.0" }, - "_release": "1.0.5", + "_release": "1.0.6", "_resolution": { "type": "version", - "tag": "v1.0.5", - "commit": "8a906004d8d0071004aafcd4bc4536ed2cf14bde" + "tag": "v1.0.6", + "commit": "6aef0896fcbc25f9f5bd1dd55f7679e6ab7f92ad" }, "_source": "git://github.com/PolymerElements/paper-material.git", "_target": "^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/paper-material/README.md b/third_party/polymer/v1_0/components-chromium/paper-material/README.md index 31ebed6..6a74b5e 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-material/README.md +++ b/third_party/polymer/v1_0/components-chromium/paper-material/README.md
@@ -7,6 +7,9 @@ Edit those files, and our readme bot will duplicate them over here! Edit this file, and the bot will squash your changes :) +The bot does some handling of markdown. Please file a bug if it does the wrong +thing! https://github.com/PolymerLabs/tedium/issues + --> [](https://travis-ci.org/PolymerElements/paper-material) @@ -16,7 +19,6 @@ ##<paper-material> - Material design: [Cards](https://www.google.com/design/spec/components/cards.html) `paper-material` is a container that renders two shadows on top of each other to @@ -24,8 +26,10 @@ Example: - <paper-material elevation="1"> - ... content ... - </paper-material> +```html +<paper-material elevation="1"> + ... content ... +</paper-material> +```
diff --git a/third_party/polymer/v1_0/components-chromium/paper-material/bower.json b/third_party/polymer/v1_0/components-chromium/paper-material/bower.json index d5cf3a8c..40895d2 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-material/bower.json +++ b/third_party/polymer/v1_0/components-chromium/paper-material/bower.json
@@ -1,6 +1,6 @@ { "name": "paper-material", - "version": "1.0.5", + "version": "1.0.6", "description": "A material design container that looks like a lifted sheet of paper", "private": true, "authors": [ @@ -27,7 +27,8 @@ }, "devDependencies": { "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0", - "web-component-tester": "polymer/web-component-tester#^3.4.0", + "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0", + "web-component-tester": "^4.0.0", "test-fixture": "polymerelements/test-fixture#^1.0.0", "iron-component-page": "PolymerElements/iron-component-page#^1.0.0" }
diff --git a/third_party/polymer/v1_0/components-chromium/paper-material/paper-material-shared-styles.html b/third_party/polymer/v1_0/components-chromium/paper-material/paper-material-shared-styles.html index 3fed5004..b795f4f 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-material/paper-material-shared-styles.html +++ b/third_party/polymer/v1_0/components-chromium/paper-material/paper-material-shared-styles.html
@@ -8,6 +8,8 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt --> +<link rel="import" href="../paper-styles/shadow.html"> + <dom-module id="paper-material-shared-styles"> <template> <style>
diff --git a/third_party/polymer/v1_0/components-chromium/paper-styles/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-styles/.bower.json index 91bf38a61..dd4c598 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-styles/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/paper-styles/.bower.json
@@ -1,6 +1,6 @@ { "name": "paper-styles", - "version": "1.1.2", + "version": "1.1.3", "description": "Common (global) styles for Material Design elements.", "authors": [ "The Polymer Authors" @@ -27,13 +27,14 @@ }, "devDependencies": { "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0", - "iron-component-page": "polymerelements/iron-component-page#^1.0.0" + "iron-component-page": "polymerelements/iron-component-page#^1.0.0", + "web-component-tester": "^4.0.0" }, - "_release": "1.1.2", + "_release": "1.1.3", "_resolution": { "type": "version", - "tag": "v1.1.2", - "commit": "7b97fa9d2c190bec9ef2d771d91f47b40a27f3be" + "tag": "v1.1.3", + "commit": "6239484bc25ca1f56e7263ac952c63edd8298853" }, "_source": "git://github.com/PolymerElements/paper-styles.git", "_target": "^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/paper-styles/README.md b/third_party/polymer/v1_0/components-chromium/paper-styles/README.md index feefd744..a43017b4 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-styles/README.md +++ b/third_party/polymer/v1_0/components-chromium/paper-styles/README.md
@@ -7,6 +7,9 @@ Edit those files, and our readme bot will duplicate them over here! Edit this file, and the bot will squash your changes :) +The bot does some handling of markdown. Please file a bug if it does the wrong +thing! https://github.com/PolymerLabs/tedium/issues + --> [](https://travis-ci.org/PolymerElements/paper-styles) @@ -16,25 +19,30 @@ ##<paper-styles> - The `<paper-styles>` component provides simple ways to use Material Design CSS styles in your application. The following imports are available: 1. [color.html](https://github.com/PolymerElements/paper-styles/blob/master/color.html): a complete list of the colors defined in the Material Design [palette](https://www.google.com/design/spec/style/color.html) -2. [default-theme.html](https://github.com/PolymerElements/paper-styles/blob/master/default-theme.html): text, + +1. [default-theme.html](https://github.com/PolymerElements/paper-styles/blob/master/default-theme.html): text, background and accent colors that match the default Material Design theme -3. [shadow.html](https://github.com/PolymerElements/paper-styles/blob/master/shadow.html): Material Design + +1. [shadow.html](https://github.com/PolymerElements/paper-styles/blob/master/shadow.html): Material Design [elevation](https://www.google.com/design/spec/what-is-material/elevation-shadows.html) and shadow styles -4. [typography.html](https://github.com/PolymerElements/paper-styles/blob/master/typography.html): + +1. [typography.html](https://github.com/PolymerElements/paper-styles/blob/master/typography.html): Material Design [font](http://www.google.com/design/spec/style/typography.html#typography-styles) styles and sizes -5. [demo-pages.html](https://github.com/PolymerElements/paper-styles/blob/master/demo-pages.html): generic styles + +1. [demo-pages.html](https://github.com/PolymerElements/paper-styles/blob/master/demo-pages.html): generic styles used in the PolymerElements demo pages + + We recommend importing each of these individual files, and using the style mixins available in each ones, rather than the aggregated `paper-styles.html` as a whole.
diff --git a/third_party/polymer/v1_0/components-chromium/paper-styles/bower.json b/third_party/polymer/v1_0/components-chromium/paper-styles/bower.json index 61b31a9..d9deb9c 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-styles/bower.json +++ b/third_party/polymer/v1_0/components-chromium/paper-styles/bower.json
@@ -1,6 +1,6 @@ { "name": "paper-styles", - "version": "1.1.2", + "version": "1.1.3", "description": "Common (global) styles for Material Design elements.", "authors": [ "The Polymer Authors" @@ -27,6 +27,7 @@ }, "devDependencies": { "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0", - "iron-component-page": "polymerelements/iron-component-page#^1.0.0" + "iron-component-page": "polymerelements/iron-component-page#^1.0.0", + "web-component-tester": "^4.0.0" } }
diff --git a/third_party/polymer/v1_0/components-chromium/paper-styles/shadow.html b/third_party/polymer/v1_0/components-chromium/paper-styles/shadow.html index dfb7e8a..c511e69 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-styles/shadow.html +++ b/third_party/polymer/v1_0/components-chromium/paper-styles/shadow.html
@@ -54,6 +54,12 @@ 0 5px 5px -3px rgba(0, 0, 0, 0.4); }; + --shadow-elevation-12dp: { + box-shadow: 0 12px 16px 1px rgba(0, 0, 0, 0.14), + 0 4px 22px 3px rgba(0, 0, 0, 0.12), + 0 6px 7px -4px rgba(0, 0, 0, 0.4); + }; + --shadow-elevation-16dp: { box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12),
diff --git a/third_party/polymer/v1_0/components-chromium/paper-tabs/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-tabs/.bower.json index 8955d39..f204eda 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-tabs/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/paper-tabs/.bower.json
@@ -1,6 +1,6 @@ { "name": "paper-tabs", - "version": "1.2.5", + "version": "1.3.3", "license": "http://polymer.github.io/LICENSE.txt", "description": "Material design tabs", "private": true, @@ -32,6 +32,7 @@ }, "devDependencies": { "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", + "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0", "iron-pages": "PolymerElements/iron-pages#^1.0.0", "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0", "paper-toolbar": "PolymerElements/paper-toolbar#^1.0.0", @@ -41,11 +42,11 @@ }, "ignore": [], "homepage": "https://github.com/PolymerElements/paper-tabs", - "_release": "1.2.5", + "_release": "1.3.3", "_resolution": { "type": "version", - "tag": "v1.2.5", - "commit": "3892c715cc89199160a9fe6ba7b19441bb44c192" + "tag": "v1.3.3", + "commit": "4c53ca15663b6f4b13b20a8aab6af8dea5bfc369" }, "_source": "git://github.com/PolymerElements/paper-tabs.git", "_target": "^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/paper-tabs/README.md b/third_party/polymer/v1_0/components-chromium/paper-tabs/README.md index 9e5bc977..cc28ca0 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-tabs/README.md +++ b/third_party/polymer/v1_0/components-chromium/paper-tabs/README.md
@@ -94,4 +94,7 @@ | `--paper-tab-content` | Mixin applied to the tab content | `{}` | | `--paper-tab-content-unselected` | Mixin applied to the tab content when the tab is not selected | `{}` | +This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`. +In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`. +
diff --git a/third_party/polymer/v1_0/components-chromium/paper-tabs/bower.json b/third_party/polymer/v1_0/components-chromium/paper-tabs/bower.json index 7b6d747..8a4c4ac 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-tabs/bower.json +++ b/third_party/polymer/v1_0/components-chromium/paper-tabs/bower.json
@@ -1,6 +1,6 @@ { "name": "paper-tabs", - "version": "1.2.5", + "version": "1.3.3", "license": "http://polymer.github.io/LICENSE.txt", "description": "Material design tabs", "private": true, @@ -32,6 +32,7 @@ }, "devDependencies": { "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", + "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0", "iron-pages": "PolymerElements/iron-pages#^1.0.0", "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0", "paper-toolbar": "PolymerElements/paper-toolbar#^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/paper-tabs/paper-tab.html b/third_party/polymer/v1_0/components-chromium/paper-tabs/paper-tab.html index ffc7a86..e832506 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-tabs/paper-tab.html +++ b/third_party/polymer/v1_0/components-chromium/paper-tabs/paper-tab.html
@@ -35,6 +35,9 @@ `--paper-tab-content` | Mixin applied to the tab content | `{}` `--paper-tab-content-unselected` | Mixin applied to the tab content when the tab is not selected | `{}` +This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`. +In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`. + --> </head><body><dom-module id="paper-tab"> @@ -44,13 +47,14 @@ @apply(--layout-inline); @apply(--layout-center); @apply(--layout-center-justified); - @apply(--layout-flex); + @apply(--layout-flex-auto); position: relative; padding: 0 12px; overflow: hidden; cursor: pointer; + @apply(--paper-font-common-base); @apply(--paper-tab); } @@ -89,7 +93,7 @@ } .tab-content > ::content > a { - @apply(--layout-flex) + @apply(--layout-flex-auto) height: 100%; }
diff --git a/third_party/polymer/v1_0/components-chromium/paper-tabs/paper-tabs-extracted.js b/third_party/polymer/v1_0/components-chromium/paper-tabs/paper-tabs-extracted.js index fc242ad..d0b6e91 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-tabs/paper-tabs-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/paper-tabs/paper-tabs-extracted.js
@@ -109,7 +109,8 @@ }, listeners: { - 'iron-resize': '_onResize', + 'iron-resize': '_onTabSizingChanged', + 'iron-items-changed': '_onTabSizingChanged', 'iron-select': '_onIronSelect', 'iron-deselect': '_onIronDeselect' }, @@ -163,8 +164,8 @@ // TODO(cdata): Add `track` response back in when gesture lands. - _onResize: function() { - this.debounce('_onResize', function() { + _onTabSizingChanged: function() { + this.debounce('_onTabSizingChanged', function() { this._scroll(); this._tabChanged(this.selectedItem); }, 10);
diff --git a/third_party/polymer/v1_0/components-chromium/paper-tabs/paper-tabs.html b/third_party/polymer/v1_0/components-chromium/paper-tabs/paper-tabs.html index c0f3dba8..d141317 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-tabs/paper-tabs.html +++ b/third_party/polymer/v1_0/components-chromium/paper-tabs/paper-tabs.html
@@ -32,7 +32,7 @@ <paper-tab>TAB 3</paper-tab> </paper-tabs> -See <a href="#paper-tab">paper-tab</a> for more information about +See <a href="?active=paper-tab">paper-tab</a> for more information about `paper-tab`. A common usage for `paper-tabs` is to use it along with `iron-pages` to switch @@ -117,11 +117,14 @@ height: 100%; white-space: nowrap; overflow: hidden; - @apply(--layout-flex); + @apply(--layout-flex-auto); } #tabsContent { height: 100%; + -moz-flex-basis: auto; + -ms-flex-basis: auto; + flex-basis: auto; } #tabsContent.scrollable {
diff --git a/third_party/polymer/v1_0/components-chromium/paper-toolbar/.bower.json b/third_party/polymer/v1_0/components-chromium/paper-toolbar/.bower.json index 45c6a0a9..663af0ab 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-toolbar/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/paper-toolbar/.bower.json
@@ -1,6 +1,6 @@ { "name": "paper-toolbar", - "version": "1.1.2", + "version": "1.1.4", "license": "http://polymer.github.io/LICENSE.txt", "description": "A material design toolbar that is easily customizable", "private": true, @@ -19,25 +19,27 @@ "url": "git://github.com/PolymerElements/paper-toolbar.git" }, "dependencies": { - "paper-styles": "PolymerElements/paper-styles#^1.0.0", "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0", + "paper-styles": "PolymerElements/paper-styles#^1.1.0", "polymer": "Polymer/polymer#^1.2.0" }, "devDependencies": { "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", + "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0", "iron-icons": "PolymerElements/iron-icons#^1.0.0", "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0", + "paper-progress": "PolymerElements/paper-progress#^1.0.0", "test-fixture": "PolymerElements/test-fixture#^1.0.0", - "web-component-tester": "*", + "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, "ignore": [], "homepage": "https://github.com/PolymerElements/paper-toolbar", - "_release": "1.1.2", + "_release": "1.1.4", "_resolution": { "type": "version", - "tag": "v1.1.2", - "commit": "1a0b9ec5c97b0751ab237670124d11bfdabcb850" + "tag": "v1.1.4", + "commit": "e9d582733fab4d0698c680047d7faaab1a35196c" }, "_source": "git://github.com/PolymerElements/paper-toolbar.git", "_target": "^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/paper-toolbar/README.md b/third_party/polymer/v1_0/components-chromium/paper-toolbar/README.md index 19cbeb4..a58b5a6 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-toolbar/README.md +++ b/third_party/polymer/v1_0/components-chromium/paper-toolbar/README.md
@@ -7,6 +7,9 @@ Edit those files, and our readme bot will duplicate them over here! Edit this file, and the bot will squash your changes :) +The bot does some handling of markdown. Please file a bug if it does the wrong +thing! https://github.com/PolymerLabs/tedium/issues + --> [](https://travis-ci.org/PolymerElements/paper-toolbar) @@ -16,7 +19,6 @@ ##<paper-toolbar> - Material design: [Toolbars](https://www.google.com/design/spec/components/toolbars.html) `paper-toolbar` is a horizontal bar containing items that can be used for @@ -36,7 +38,7 @@ ``` `paper-toolbar` has a standard height, but can made be taller by setting `tall` -class on the `paper-toolbar`. This will make the toolbar 3x the normal height. +class on the `paper-toolbar`. This will make the toolbar 3x the normal height. ```html <paper-toolbar class="tall"> @@ -77,20 +79,25 @@ </paper-toolbar> ``` +When inside a `paper-header-panel` element, the class `.animate` is toggled to animate +the height change in the toolbar. + ### Styling The following custom properties and mixins are available for styling: -Custom property | Description | Default -----------------|-------------|---------- -`--paper-toolbar-title` | Mixin applied to the title of the toolbar | `{}` -`--paper-toolbar-background` | Toolbar background color | `--default-primary-color` -`--paper-toolbar-color` | Toolbar foreground color | `--text-primary-color` -`--paper-toolbar-height` | Custom height for toolbar | `64px` -`--paper-toolbar-sm-height` | Custom height for small screen toolbar | `56px` -`--paper-toolbar` | Mixin applied to the toolbar | `{}` -`--paper-toolbar-medium` | Mixin applied to medium height toolbar | `{}` -`--paper-toolbar-tall` | Mixin applied to tall height toolbar | `{}` +| Custom property | Description | Default | +| --- | --- | --- | +| `--paper-toolbar-title` | Mixin applied to the title of the toolbar | `{}` | +| `--paper-toolbar-background` | Toolbar background color | `--primary-color` | +| `--paper-toolbar-color` | Toolbar foreground color | `--primary-text-color` | +| `--paper-toolbar-height` | Custom height for toolbar | `64px` | +| `--paper-toolbar-sm-height` | Custom height for small screen toolbar | `56px` | +| `--paper-toolbar` | Mixin applied to the toolbar | `{}` | +| `--paper-toolbar-content` | Mixin applied to the content section of the toolbar | `{}` | +| `--paper-toolbar-medium` | Mixin applied to medium height toolbar | `{}` | +| `--paper-toolbar-tall` | Mixin applied to tall height toolbar | `{}` | +| `--paper-toolbar-transition` | Transition applied to the `.animate` class | `height 0.18s ease-in` | ### Accessibility
diff --git a/third_party/polymer/v1_0/components-chromium/paper-toolbar/bower.json b/third_party/polymer/v1_0/components-chromium/paper-toolbar/bower.json index 61c34eb..78b85538 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-toolbar/bower.json +++ b/third_party/polymer/v1_0/components-chromium/paper-toolbar/bower.json
@@ -1,6 +1,6 @@ { "name": "paper-toolbar", - "version": "1.1.2", + "version": "1.1.4", "license": "http://polymer.github.io/LICENSE.txt", "description": "A material design toolbar that is easily customizable", "private": true, @@ -19,16 +19,18 @@ "url": "git://github.com/PolymerElements/paper-toolbar.git" }, "dependencies": { - "paper-styles": "PolymerElements/paper-styles#^1.0.0", "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0", + "paper-styles": "PolymerElements/paper-styles#^1.1.0", "polymer": "Polymer/polymer#^1.2.0" }, "devDependencies": { "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", + "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0", "iron-icons": "PolymerElements/iron-icons#^1.0.0", "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0", + "paper-progress": "PolymerElements/paper-progress#^1.0.0", "test-fixture": "PolymerElements/test-fixture#^1.0.0", - "web-component-tester": "*", + "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, "ignore": []
diff --git a/third_party/polymer/v1_0/components-chromium/paper-toolbar/paper-toolbar.html b/third_party/polymer/v1_0/components-chromium/paper-toolbar/paper-toolbar.html index fe6797c5c..d371323 100644 --- a/third_party/polymer/v1_0/components-chromium/paper-toolbar/paper-toolbar.html +++ b/third_party/polymer/v1_0/components-chromium/paper-toolbar/paper-toolbar.html
@@ -30,7 +30,7 @@ ``` `paper-toolbar` has a standard height, but can made be taller by setting `tall` -class on the `paper-toolbar`. This will make the toolbar 3x the normal height. +class on the `paper-toolbar`. This will make the toolbar 3x the normal height. ```html <paper-toolbar class="tall"> @@ -71,6 +71,9 @@ </paper-toolbar> ``` +When inside a `paper-header-panel` element, the class `.animate` is toggled to animate +the height change in the toolbar. + ### Styling The following custom properties and mixins are available for styling: @@ -78,14 +81,15 @@ Custom property | Description | Default ----------------|-------------|---------- `--paper-toolbar-title` | Mixin applied to the title of the toolbar | `{}` -`--paper-toolbar-background` | Toolbar background color | `--default-primary-color` -`--paper-toolbar-color` | Toolbar foreground color | `--text-primary-color` +`--paper-toolbar-background` | Toolbar background color | `--primary-color` +`--paper-toolbar-color` | Toolbar foreground color | `--dark-theme-text-color` `--paper-toolbar-height` | Custom height for toolbar | `64px` `--paper-toolbar-sm-height` | Custom height for small screen toolbar | `56px` `--paper-toolbar` | Mixin applied to the toolbar | `{}` `--paper-toolbar-content` | Mixin applied to the content section of the toolbar | `{}` `--paper-toolbar-medium` | Mixin applied to medium height toolbar | `{}` `--paper-toolbar-tall` | Mixin applied to tall height toolbar | `{}` +`--paper-toolbar-transition` | Transition applied to the `.animate` class | `height 0.18s ease-in` ### Accessibility @@ -108,15 +112,15 @@ /* size */ height: var(--paper-toolbar-height, 64px); - background: var(--paper-toolbar-background, --default-primary-color); - color: var(--paper-toolbar-color, --text-primary-color); + background: var(--paper-toolbar-background, --primary-color); + color: var(--paper-toolbar-color, --dark-theme-text-color); @apply(--paper-toolbar); } :host(.animate) { /* transition */ - transition: height 0.18s ease-in; + transition: var(--paper-toolbar-transition, height 0.18s ease-in); } :host(.medium-tall) {
diff --git a/third_party/polymer/v1_0/components-chromium/polymer-externs/.bower.json b/third_party/polymer/v1_0/components-chromium/polymer-externs/.bower.json index 88a97182..adb58172 100644 --- a/third_party/polymer/v1_0/components-chromium/polymer-externs/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/polymer-externs/.bower.json
@@ -1,12 +1,12 @@ { "name": "polymer-externs", "homepage": "https://github.com/PolymerLabs/polymer-externs", - "version": "1.0.15", - "_release": "1.0.15", + "version": "1.0.16", + "_release": "1.0.16", "_resolution": { "type": "version", - "tag": "v1.0.15", - "commit": "972c43cdc030e2162a2127aac63d24ad67ca679c" + "tag": "v1.0.16", + "commit": "05696d670d8a283b9b8c17bd6c3d5f4f41443e12" }, "_source": "git://github.com/PolymerLabs/polymer-externs.git", "_target": "^1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/polymer-externs/polymer.externs.js b/third_party/polymer/v1_0/components-chromium/polymer-externs/polymer.externs.js index d5e40e1..26dbbc1 100644 --- a/third_party/polymer/v1_0/components-chromium/polymer-externs/polymer.externs.js +++ b/third_party/polymer/v1_0/components-chromium/polymer-externs/polymer.externs.js
@@ -279,7 +279,7 @@ * @param {{ * bubbles: (boolean|undefined), * cancelable: (boolean|undefined), - * node: (!HTMLElement|undefined)}=} options + * node: (!EventTarget|undefined)}=} options * @return {Object} event */ PolymerElement.prototype.fire = function(type, detail, options) {}; @@ -637,12 +637,43 @@ PolymerDomApi.prototype.removeAttribute = function(attribute) {}; /** - * @param {!Function} callback - * @return {!{fn: (!Function|undefined), _nodes: !Array<!Node>}} + * @typedef {function({ + * target: !Node, + * addedNodes: !Array<!Node>, + * removedNodes: !Array<!Node> + * })} + */ +PolymerDomApi.ObserveCallback; + +/** + * A virtual type for observer callback handles. + * + * @private @constructor + */ +PolymerDomApi.ObserveHandle = function() {}; + +/** + * Notifies callers about changes to the element's effective child nodes, + * the same list as returned by `getEffectiveChildNodes`. + * + * @param {!PolymerDomApi.ObserveCallback} callback The supplied callback + * is called with an `info` argument which is an object that provides + * the `target` on which the changes occurred, a list of any nodes + * added in the `addedNodes` array, and nodes removed in the + * `removedNodes` array. + * + * @return {!PolymerDomApi.ObserveHandle} Handle which is the argument to + * `unobserveNodes`. */ PolymerDomApi.prototype.observeNodes = function(callback) {}; -/** @param {!{fn: (!Function|undefined), _nodes: !Array<!Node>}} handle */ +/** + * Stops observing changes to the element's effective child nodes. + * + * @param {!PolymerDomApi.ObserveHandle} handle The handle for the + * callback that should no longer receive notifications. This + * handle is returned from `observeNodes`. + */ PolymerDomApi.prototype.unobserveNodes = function(handle) {}; /** @type {?DOMTokenList} */ @@ -691,6 +722,24 @@ Polymer.dom.flush = function() {}; +/** @constructor */ +Polymer.Debouncer = function() {}; + +Polymer.Debouncer.prototype = { + /** + * @param {function()} callback + * @param {number} wait + */ + go: function(callback, wait) {}, + + stop: function() {}, + + complete: function() {} +}; + +/** @param {!Polymer.Debouncer} debouncer */ +Polymer.dom.addDebouncer = function(debouncer) {}; + Polymer.CaseMap; /** @@ -834,11 +883,17 @@ * model.set('item.checked', true); * } * - * @param {!HTMLElement} el Element for which to return a template model. + * @param {?HTMLElement} el Element for which to return a template model. * @return {(!PolymerElement)|undefined} Model representing the binding scope for * the element. */ - modelForElement: function(el) {} + modelForElement: function(el) {}, + + /** + * @param {function()} fn + * @protected + */ + _debounceTemplate: function(fn) {} };
diff --git a/third_party/polymer/v1_0/components-chromium/polymer/.bower.json b/third_party/polymer/v1_0/components-chromium/polymer/.bower.json index 21f137c..b659cc1 100644 --- a/third_party/polymer/v1_0/components-chromium/polymer/.bower.json +++ b/third_party/polymer/v1_0/components-chromium/polymer/.bower.json
@@ -1,8 +1,10 @@ { "name": "polymer", - "version": "1.2.3", + "version": "1.2.4", "main": [ - "polymer.html" + "polymer.html", + "polymer-mini.html", + "polymer-micro.html" ], "license": "http://polymer.github.io/LICENSE.txt", "ignore": [ @@ -18,18 +20,18 @@ "url": "https://github.com/Polymer/polymer.git" }, "dependencies": { - "webcomponentsjs": "^0.7.18" + "webcomponentsjs": "^0.7.20" }, "devDependencies": { "web-component-tester": "*" }, "private": true, "homepage": "https://github.com/Polymer/polymer", - "_release": "1.2.3", + "_release": "1.2.4", "_resolution": { "type": "version", - "tag": "v1.2.3", - "commit": "aa535d1675342007cbf64dc9c66497cf74cbc616" + "tag": "v1.2.4", + "commit": "284332a905ddd60eab11901a82ac037976175cf8" }, "_source": "git://github.com/Polymer/polymer.git", "_target": "^v1.0.0",
diff --git a/third_party/polymer/v1_0/components-chromium/polymer/bower.json b/third_party/polymer/v1_0/components-chromium/polymer/bower.json index 8f88ea2..bc34c25 100644 --- a/third_party/polymer/v1_0/components-chromium/polymer/bower.json +++ b/third_party/polymer/v1_0/components-chromium/polymer/bower.json
@@ -1,8 +1,10 @@ { "name": "polymer", - "version": "1.2.3", + "version": "1.2.4", "main": [ - "polymer.html" + "polymer.html", + "polymer-mini.html", + "polymer-micro.html" ], "license": "http://polymer.github.io/LICENSE.txt", "ignore": [ @@ -18,7 +20,7 @@ "url": "https://github.com/Polymer/polymer.git" }, "dependencies": { - "webcomponentsjs": "^0.7.18" + "webcomponentsjs": "^0.7.20" }, "devDependencies": { "web-component-tester": "*"
diff --git a/third_party/polymer/v1_0/components-chromium/polymer/build.log b/third_party/polymer/v1_0/components-chromium/polymer/build.log index 9685b44a..012d6fa 100644 --- a/third_party/polymer/v1_0/components-chromium/polymer/build.log +++ b/third_party/polymer/v1_0/components-chromium/polymer/build.log
@@ -1,433 +1,466 @@ BUILD LOG --------- -Build Time: 2015-11-16T17:06:23-0800 +Build Time: 2016-01-27T14:09:18-0800 NODEJS INFORMATION ================== -nodejs: v5.0.0 -binaryextensions: 1.0.0 -clone-stats: 0.0.1 -core-util-is: 1.0.1 -duplexer: 0.1.1 -escape-regexp-component: 1.0.2 -global: 2.0.1 -globule: 0.1.0 -is-utf8: 0.2.0 -keep-alive-agent: 0.0.1 -lazystream: 0.1.0 -match-stream: 0.0.2 -object-component: 0.0.3 -parseqs: 0.0.2 -parseuri: 0.0.2 -parsejson: 0.0.1 -sequencify: 0.0.7 -to-array: 0.1.3 -util-extend: 1.0.1 -xmlhttprequest: 1.5.0 -adm-zip: 0.4.7 +nodejs: v5.5.0 abbrev: 1.0.7 +accepts: 1.2.13 +accessibility-developer-tools: 2.10.0 +adm-zip: 0.4.7 +after: 0.8.1 +align-text: 0.1.3 +amdefine: 1.0.0 ansi-cyan: 0.1.1 ansi-red: 0.1.1 -ansi-styles: 2.1.0 ansi-regex: 2.0.0 -after: 0.8.1 -amdefine: 1.0.0 +ansi-styles: 2.1.0 ansi-wrap: 0.1.0 -arr-union: 2.1.0 -arr-diff: 1.1.0 -arr-flatten: 1.0.1 -array-differ: 1.0.0 archiver: 0.14.4 archy: 1.0.0 -accepts: 1.2.13 +arr-diff: 1.1.0 +arr-flatten: 1.0.1 +arr-union: 2.1.0 +array-flatten: 1.1.1 +array-differ: 1.0.0 array-slice: 0.2.3 array-union: 1.0.1 array-uniq: 1.0.2 -asap: 2.0.3 -array-flatten: 1.1.1 arraybuffer.slice: 0.0.6 -balanced-match: 0.2.1 -asn1: 0.1.11 +asap: 2.0.3 assert-plus: 0.1.5 -async: 1.5.0 +asn1: 0.1.11 +async: 1.5.2 +assertion-error: 1.0.1 aws-sign2: 0.5.0 -backo2: 1.0.2 -beeper: 1.1.0 -base64-arraybuffer: 0.1.2 -base64-js: 0.0.6 -better-assert: 1.0.2 -benchmark: 1.0.0 backoff: 2.4.1 -bindings: 1.2.1 -binary: 0.3.0 +backo2: 1.0.2 +balanced-match: 0.3.0 +base64-arraybuffer: 0.1.2 +base64-js: 0.0.8 base64id: 0.1.0 +beeper: 1.1.0 +benchmark: 1.0.0 +better-assert: 1.0.2 +binary: 0.3.0 +binaryextensions: 1.0.0 +bl: 0.9.5 blob: 0.0.4 -boom: 0.4.2 -bl: 0.9.4 -brace-expansion: 1.1.1 -buffers: 0.1.1 -bufferutil: 1.2.1 bluebird: 2.10.2 -browserstack: 1.2.0 -callsite: 1.0.0 +boom: 0.4.2 +brace-expansion: 1.1.2 +browserstack: 1.3.0 buffer-crc32: 0.2.5 -camelcase-keys: 1.0.0 -camelcase: 1.2.1 -clone: 1.0.2 +buffers: 0.1.1 +builtin-modules: 1.1.1 +bunyan: 1.5.1 +callsite: 1.0.0 +camelcase: 2.1.0 +camelcase-keys: 2.0.0 +capture-stack-trace: 1.0.0 +caseless: 0.8.0 +center-align: 0.1.2 +chai: 3.4.1 +chainsaw: 0.1.0 chalk: 1.1.1 cleankill: 1.0.2 -caseless: 0.8.0 -commander: 2.6.0 -builtin-modules: 1.1.0 -compress-commons: 0.2.9 -chainsaw: 0.1.0 -component-emitter: 1.1.2 +cliui: 2.1.0 +clone: 1.0.2 +clone-stats: 0.0.1 combined-stream: 0.0.7 +commander: 2.3.0 component-bind: 1.0.0 -cookie: 0.1.3 +component-emitter: 1.1.2 component-inherit: 0.0.3 +compress-commons: 0.2.9 +configstore: 1.4.0 concat-map: 0.0.1 -configstore: 1.3.0 +content-disposition: 0.5.1 content-type: 1.0.1 +cookie: 0.1.5 cookie-signature: 1.0.6 -content-disposition: 0.5.0 -crc32-stream: 0.3.4 crc: 3.2.1 +core-util-is: 1.0.2 +crc32-stream: 0.3.4 +create-error-class: 2.0.1 cryptiles: 0.2.2 -csv-parse: 1.0.0 csv: 0.4.6 csv-generate: 0.0.6 csv-stringify: 0.0.8 -deep-extend: 0.4.0 -decamelize: 1.1.1 -debuglog: 1.0.1 +dashdash: 1.12.2 +csv-parse: 1.0.1 ctype: 0.5.3 -deprecated: 0.0.1 -del: 1.2.1 +debug: 2.2.0 +dateformat: 1.0.12 +debuglog: 1.0.1 +decamelize: 1.1.2 +deep-eql: 0.1.3 +deep-extend: 0.4.1 deep-is: 0.1.3 defaults: 1.0.3 -doctrine: 0.7.0 -dezalgo: 1.0.3 -dom5: 1.2.0 delayed-stream: 0.0.5 -duplexer2: 0.0.2 -depd: 1.0.1 -destroy: 1.0.3 -each-async: 1.1.1 +del: 1.2.1 +depd: 1.1.0 +deprecated: 0.0.1 +destroy: 1.0.4 +diff: 1.4.0 +dezalgo: 1.0.3 +dom5: 1.3.1 dtrace-provider: 0.6.0 -duplexify: 3.4.2 -end-of-stream: 0.1.5 +doctrine: 0.7.2 +duplexer: 0.1.1 +duplexer2: 0.0.2 +each-async: 1.1.1 +ecc-jsbn: 0.1.1 ee-first: 1.1.1 -debug: 2.2.0 -escape-string-regexp: 1.0.3 -engine.io-client: 1.5.4 -engine.io: 1.5.4 -es6-promise: 2.3.0 +end-of-stream: 0.1.5 +engine.io: 1.6.7 +engine.io-client: 1.6.7 +engine.io-parser: 1.2.4 error-ex: 1.3.0 -estraverse: 3.1.0 +es6-promise: 2.3.0 +escape-html: 1.0.3 +escape-regexp-component: 1.0.2 +escape-string-regexp: 1.0.4 +escodegen: 1.8.0 esutils: 1.1.6 -extend-shallow: 1.1.4 -escape-html: 1.0.2 +espree: 2.2.5 +estraverse: 3.1.0 etag: 1.7.0 +express: 4.13.4 +extend-shallow: 1.1.4 extend: 2.0.1 -engine.io-parser: 1.2.2 -fancy-log: 1.1.0 -fast-levenshtein: 1.0.7 -find-index: 0.1.1 extsprintf: 1.2.0 -express: 4.13.3 -finalhandler: 0.4.0 -first-chunk-stream: 1.0.0 -find-up: 1.0.0 +fancy-log: 1.1.0 +fast-levenshtein: 1.1.3 +find-index: 0.1.1 +finalhandler: 0.4.1 +find-up: 1.1.0 findup-sync: 0.3.0 -forever-agent: 0.5.2 +first-chunk-stream: 1.0.0 flagged-respawn: 0.3.1 +forever-agent: 0.5.2 form-data: 0.2.0 formidable: 1.0.17 -gaze: 0.5.2 +formatio: 1.1.1 forwarded: 0.1.0 -github-url-from-git: 1.4.0 +freeport: 1.0.5 fresh: 0.3.0 -get-stdin: 5.0.0 -github-url-from-username-repo: 1.0.2 fstream: 0.1.31 +gaze: 0.5.2 +generate-function: 2.0.0 +generate-object-property: 1.2.0 +get-stdin: 4.0.1 +github-url-from-username-repo: 1.0.2 +github-url-from-git: 1.4.0 glob: 5.0.15 glob-stream: 3.1.18 glob-watcher: 0.0.6 glob2base: 0.0.12 globby: 2.1.0 -generate-function: 2.0.0 -generate-object-property: 1.2.0 -graceful-fs: 4.1.2 -graceful-readlink: 1.0.1 -gulp-audit: 1.0.0 glogg: 1.0.0 -gulp-replace: 0.5.4 -got: 3.3.1 +globule: 0.1.0 +got: 5.4.1 +graceful-readlink: 1.0.1 +graceful-fs: 4.1.2 +growl: 1.8.1 +gulp-audit: 1.0.0 +gulp: 3.9.0 gulp-rename: 1.2.2 -freeport: 1.0.5 -gulp-vulcanize: 6.0.1 -gulplog: 1.0.0 +gulp-replace: 0.5.4 gulp-util: 3.0.7 +gulp-vulcanize: 6.1.0 +gulplog: 1.0.0 +har-validator: 2.0.6 has-ansi: 2.0.0 -has-binary: 0.1.6 -has-gulplog: 0.1.0 +has-binary: 0.1.7 has-color: 0.1.7 -has-cors: 1.0.3 -hosted-git-info: 2.1.4 -has-binary-data: 0.1.3 -hawk: 1.1.1 -hydrolysis: 1.19.3 -inflight: 1.0.4 +has-cors: 1.1.0 +has-gulplog: 0.1.0 hoek: 0.9.1 -inherits: 2.0.1 -infinity-agent: 2.0.3 +hawk: 1.1.1 +hosted-git-info: 2.1.4 http-errors: 1.3.1 +hydrolysis: 1.21.4 http-signature: 0.11.0 -ini: 1.3.4 +imurmurhash: 0.1.4 indent-string: 2.1.0 -ipaddr.js: 1.0.1 -interpret: 0.6.6 indexof: 0.0.1 -is-arrayish: 0.2.1 -is-my-json-valid: 2.12.3 -is-builtin-module: 1.0.0 +inflight: 1.0.4 +inherits: 2.0.1 +ini: 1.3.4 +interpret: 0.6.6 is-absolute: 0.1.7 +ipaddr.js: 1.0.5 +is-arrayish: 0.2.1 +is-buffer: 1.1.1 +is-builtin-module: 1.0.0 +is-finite: 1.0.1 +is-my-json-valid: 2.12.4 +is-npm: 1.0.0 is-path-cwd: 1.0.0 is-path-in-cwd: 1.0.0 -is-npm: 1.0.0 -is-property: 1.0.2 is-path-inside: 1.0.0 -is-finite: 1.0.1 -istextorbinary: 1.0.2 +is-plain-obj: 1.1.0 +is-property: 1.0.2 is-redirect: 1.0.0 +is-relative: 0.1.3 +is-retry-allowed: 1.0.0 +is-stream: 1.0.1 +is-typedarray: 1.0.0 +is-utf8: 0.2.1 +isexe: 1.1.1 isarray: 0.0.1 isstream: 0.1.2 -json-parse-helpfulerror: 1.0.3 -is-relative: 0.1.3 +istextorbinary: 1.0.2 jju: 1.2.1 -is-stream: 1.0.1 +jade: 0.26.3 +jodid25519: 1.0.2 +jsbn: 0.1.0 +json-parse-helpfulerror: 1.0.3 +json-schema: 0.2.2 json-stringify-safe: 5.0.1 json3: 3.2.6 -kind-of: 1.1.0 -lazypipe: 0.2.4 -lodash._basecopy: 3.0.1 jsonpointer: 2.0.0 +jsprim: 1.2.2 +kind-of: 1.1.0 +latest-version: 2.0.0 +keep-alive-agent: 0.0.1 +launchpad: 0.5.0 +lazypipe: 0.2.4 +lazy-cache: 0.2.7 +lazystream: 0.1.0 +levn: 0.3.0 +liftoff: 2.2.0 lodash: 1.0.2 -lodash._basevalues: 3.0.0 +load-json-file: 1.1.0 +lodash._basecopy: 3.0.1 lodash._basetostring: 3.0.1 -levn: 0.2.5 -launchpad: 0.4.9 +lodash._basevalues: 3.0.0 lodash._isiterateecall: 3.0.9 lodash._getnative: 3.9.1 lodash._reescape: 3.0.0 lodash._reevaluate: 3.0.0 -lodash.isarguments: 3.0.4 -lodash.escape: 3.0.0 lodash._reinterpolate: 3.0.0 -liftoff: 2.2.0 +lodash.escape: 3.1.1 +lodash.isarguments: 3.0.5 lodash.isarray: 3.0.4 -load-json-file: 1.0.1 -lodash.restparam: 3.6.1 lodash.keys: 3.1.2 -lodash-node: 2.4.1 lodash.template: 3.6.2 -loud-rejection: 1.0.0 -lodash.templatesettings: 3.1.0 +lodash.restparam: 3.6.1 +lodash.templatesettings: 3.1.1 +lolex: 1.3.2 +longest: 1.0.1 +loud-rejection: 1.2.0 lowercase-keys: 1.0.0 -media-typer: 0.3.0 -meow: 3.5.0 +lru-cache: 2.7.3 map-obj: 1.0.1 -mime-db: 1.19.0 -methods: 1.1.1 -merge-descriptors: 1.0.0 -minimist: 1.2.0 +match-stream: 0.0.2 +media-typer: 0.3.0 +meow: 3.7.0 +merge-descriptors: 1.0.1 +methods: 1.1.2 +mime-db: 1.21.0 +mime: 1.3.4 +mime-types: 2.1.9 minimatch: 3.0.0 -mime-types: 2.1.7 -lru-cache: 2.7.0 +minimist: 1.2.0 +mkdirp: 0.5.1 +mocha: 2.4.1 ms: 0.7.1 -mv: 2.1.1 multipipe: 0.1.2 -nested-error-stacks: 1.0.1 +mv: 2.1.1 +nan: 2.2.0 negotiator: 0.5.3 -nan: 2.1.0 +ncp: 2.0.0 node-int64: 0.3.3 -normalize-package-data: 2.3.5 -object-assign: 3.0.0 -oauth-sign: 0.5.0 +node-status-codes: 1.0.0 +node-uuid: 1.4.7 +nopt: 3.0.6 nomnom: 1.8.1 -once: 1.3.2 -object-keys: 1.0.1 -onetime: 1.0.0 number-is-nan: 1.0.0 +normalize-package-data: 2.3.5 +oauth-sign: 0.5.0 +object-assign: 3.0.0 +object-component: 0.0.3 on-finished: 2.3.0 -ordered-read-streams: 0.1.0 +once: 1.3.3 +optionator: 0.8.1 +onetime: 1.1.0 options: 0.0.6 orchestrator: 0.3.7 -optionator: 0.5.0 -osenv: 0.1.3 -parse5: 1.5.0 -over: 0.0.5 +ordered-read-streams: 0.1.0 os-tmpdir: 1.0.1 -package-json: 1.2.0 -path-exists: 2.0.0 -parseurl: 1.3.0 +osenv: 0.1.3 +os-homedir: 1.0.1 +over: 0.0.5 +package-json: 2.3.0 parse-json: 2.2.0 +parse5: 1.5.1 +parsejson: 0.0.1 +parseuri: 0.0.4 +parseqs: 0.0.2 +parseurl: 1.3.1 +path-exists: 2.1.0 +path-is-absolute: 1.0.0 path-is-inside: 1.0.1 path-posix: 1.0.0 -path-is-absolute: 1.0.0 -os-homedir: 1.0.1 path-to-regexp: 0.1.7 +path-type: 1.1.0 pify: 2.3.0 +pinkie: 2.0.1 +pinkie-promise: 2.0.0 +plist: 1.2.0 plugin-error: 0.1.2 -path-type: 1.0.0 -plist: 1.1.0 -pinkie: 1.0.0 -polyclean: 1.2.0 -pinkie-promise: 1.0.0 +polyclean: 1.3.1 precond: 0.2.3 -prepend-http: 1.0.3 prelude-ls: 1.1.2 -process-nextick-args: 1.0.3 +prepend-http: 1.0.3 pretty-hrtime: 1.0.1 +process-nextick-args: 1.0.6 progress: 1.1.8 pullstream: 0.4.1 +proxy-addr: 1.0.10 q: 1.4.1 -read-installed: 3.1.5 -proxy-addr: 1.0.8 -read-package-json: 1.3.3 qs: 4.0.0 -read-all-stream: 3.0.1 -readable-stream: 1.1.13 -read-pkg: 1.1.0 -rechoir: 0.6.2 range-parser: 1.0.3 +read-all-stream: 3.0.1 +rc: 1.1.6 +read-installed: 3.1.5 +read-package-json: 1.3.3 +read-pkg: 1.1.0 read-pkg-up: 1.0.1 readdir-scoped-modules: 1.0.2 -replace-ext: 0.0.1 -registry-url: 3.0.3 -replacestream: 4.0.0 +readable-stream: 1.1.13 redent: 1.0.0 -resolve: 1.1.6 +rechoir: 0.6.2 +registry-url: 3.0.3 +repeat-string: 1.5.2 +replace-ext: 0.0.1 repeating: 2.0.0 -run-sequence: 1.1.4 -safe-json-stringify: 1.0.3 +replacestream: 4.0.0 request: 2.51.0 +resolve: 1.1.7 +right-align: 0.1.3 +restify: 4.0.3 +rimraf: 2.5.1 +run-sequence: 1.1.5 +safe-json-stringify: 1.0.3 +samsam: 1.1.2 +sauce-connect-launcher: 0.14.0 +selenium-standalone: 4.8.0 +semver-diff: 2.1.0 +semver: 4.3.6 send: 0.11.1 +sequencify: 0.0.7 +serve-static: 1.10.2 serve-waterfall: 1.1.1 -set-immediate-shim: 1.0.1 -slide: 1.1.6 -sigmund: 1.0.1 -serve-static: 1.10.0 server-destroy: 1.0.1 -socket.io: 1.3.7 -slice-stream: 1.0.0 +set-immediate-shim: 1.0.1 setimmediate: 1.0.4 +sigmund: 1.0.1 +signal-exit: 2.1.2 +sinon: 1.17.2 +slice-stream: 1.0.0 +sinon-chai: 2.8.0 +slide: 1.1.6 sntp: 0.2.4 -sparkles: 1.0.0 -socket.io-adapter: 0.3.1 -socket.io-client: 1.3.7 -socket.io-parser: 2.2.4 -spdx-exceptions: 1.0.4 -spdx-correct: 1.0.2 +socket.io: 1.4.4 +socket.io-adapter: 0.4.0 +socket.io-client: 1.4.4 +socket.io-parser: 2.2.6 source-map: 0.2.0 -sauce-connect-launcher: 0.12.0 -semver-diff: 2.0.0 -spdx-expression-parse: 1.0.1 -stream-combiner: 0.2.2 -spdx-license-ids: 1.1.0 -stacky: 1.2.3 -stream-consume: 0.1.0 -spdy: 1.32.4 +spdx-correct: 1.0.2 +sparkles: 1.0.0 +spdx-exceptions: 1.0.4 +spdx-expression-parse: 1.0.2 +spdx-license-ids: 1.2.0 +spdy: 1.32.5 statuses: 1.2.1 -stringstream: 0.0.5 -string_decoder: 0.10.31 +sshpk: 1.7.3 +stacky: 1.3.1 +stream-consume: 0.1.0 +stream-combiner: 0.2.2 stream-transform: 0.1.1 +string-length: 1.0.1 +string_decoder: 0.10.31 +stringstream: 0.0.5 strip-ansi: 3.0.0 -supports-color: 2.0.0 strip-bom: 2.0.0 -through2: 2.0.0 +strip-indent: 1.0.1 +strip-json-comments: 1.0.4 +supports-color: 2.0.0 +tar-stream: 1.1.5 +temp: 0.8.3 +test-fixture: 1.1.0 textextensions: 1.0.1 through: 2.3.8 -timed-out: 2.0.0 -tar-stream: 1.1.5 +through2: 2.0.0 tildify: 1.1.2 -temp: 0.8.3 -string-length: 1.0.1 -traverse: 0.3.9 +timed-out: 2.0.0 +to-array: 0.1.3 +tough-cookie: 2.2.1 trim-newlines: 1.0.0 -tough-cookie: 2.2.0 -type-check: 0.3.1 -tunnel-agent: 0.4.1 +traverse: 0.3.9 +tunnel-agent: 0.4.2 +tweetnacl: 0.13.3 +type-check: 0.3.2 +type-detect: 1.0.0 +type-is: 1.6.10 +uglify-js: 2.6.1 uglify-to-browserify: 1.0.2 -unique-stream: 1.0.0 -type-is: 1.6.9 -underscore: 1.6.0 ultron: 1.0.2 -utf-8-validate: 1.2.1 -unzip: 0.1.11 +underscore: 1.6.0 +underscore.string: 3.0.3 unpipe: 1.0.0 -update-notifier: 0.5.0 -util-deprecate: 1.0.2 -utf8: 2.1.0 +unique-stream: 1.0.0 +unzip: 0.1.11 +unzip-response: 1.0.0 +update-notifier: 0.6.0 urijs: 1.16.1 -uuid: 2.0.1 +url-parse-lax: 1.0.0 +user-home: 1.1.1 +utf8: 2.1.0 +util: 0.10.3 +util-deprecate: 1.0.2 +util-extend: 1.0.3 utils-merge: 1.0.0 -v8flags: 2.0.10 -vargs: 0.1.0 +uuid: 2.0.1 +v8flags: 2.0.11 validate-npm-package-license: 3.0.1 +vargs: 0.1.0 +vasync: 1.6.3 vary: 1.0.1 vinyl: 0.5.3 -vinyl-fs: 0.3.14 verror: 1.6.0 -wct-sauce: 1.7.1 -vasync: 1.6.3 -wct-local: 1.7.0 -underscore.string: 3.0.3 -wrappy: 1.0.1 -wordwrap: 0.0.3 -write-file-atomic: 1.1.3 -window-size: 0.1.0 -ws: 0.8.0 -xtend: 4.0.1 -xdg-basedir: 2.0.0 -xmlbuilder: 2.2.1 -zip-stream: 0.5.2 -xmldom: 0.1.19 -bower: 1.6.5 -bunyan: 1.5.1 -yargs: 3.5.4 -dateformat: 1.0.11 -espree: 2.2.5 -escodegen: 1.7.0 -gulp: 3.9.0 -har-validator: 2.0.2 -latest-version: 1.0.1 -mime: 1.3.4 -mkdirp: 0.5.1 -ncp: 2.0.0 -node-uuid: 1.4.3 -nopt: 3.0.4 -rc: 1.1.5 -rimraf: 2.4.3 -restify: 4.0.3 -semver: 4.3.6 -selenium-standalone: 4.7.1 -strip-json-comments: 1.0.4 -strip-indent: 1.0.1 -uglify-js: 2.5.0 -user-home: 1.1.1 -vulcanize: 1.14.0 -web-component-tester: 3.4.0 -which: 1.2.0 +vinyl-fs: 0.3.14 +vulcanize: 1.14.5 +wct-local: 2.0.1 +wct-sauce: 1.8.3 wd: 0.3.12 +web-component-tester: 4.1.0 +which: 1.2.2 +window-size: 0.1.0 +wordwrap: 1.0.0 +wrappy: 1.0.1 +write-file-atomic: 1.1.4 +ws: 1.0.1 +xdg-basedir: 2.0.0 +xmlbuilder: 4.0.0 +xmldom: 0.1.21 +xmlhttprequest-ssl: 1.5.1 +xtend: 4.0.1 +yargs: 3.10.0 +yeast: 0.1.2 +zip-stream: 0.5.2 REPO REVISIONS ============== -polymer: 99294d92bc0be372e50cb798dd3db812df590a69 +polymer: 6c7b2228c7eb5d2df4bd6260828a1f20f7c0fbb0 BUILD HASHES ============ -polymer-mini.html: 6800f5adc9138de2bb49d5d675e0bcb48685fcb1 -polymer-micro.html: 8bd61b7b8551b757eb2780026fee72cb18e053f5 -polymer.html: 6ed99b6c71939d49619c492ba43fc7b5a7e3a971 \ No newline at end of file +polymer-mini.html: c25c2e49244d3947604d0e91d8d0d016df71f56d +polymer-micro.html: e67fbe4d81d5661b4ed16897c3348f2d77325d6a +polymer.html: bc0e501f8db1c65e2a1c7f665805f5f191fdfc27 \ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/polymer/polymer-extracted.js b/third_party/polymer/v1_0/components-chromium/polymer/polymer-extracted.js index cdc8d66..5d493761 100644 --- a/third_party/polymer/v1_0/components-chromium/polymer/polymer-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/polymer/polymer-extracted.js
@@ -9,22 +9,34 @@ _parseNodeAnnotations: function (node, list, stripWhiteSpace) { return node.nodeType === Node.TEXT_NODE ? this._parseTextNodeAnnotation(node, list) : this._parseElementAnnotations(node, list, stripWhiteSpace); }, -_bindingRegex: /([^{[]*)(\{\{|\[\[)(?!\}\}|\]\])(.+?)(?:\]\]|\}\})/g, +_bindingRegex: function () { +var IDENT = '(?:' + '[a-zA-Z_$][\\w.:$-*]*' + ')'; +var NUMBER = '(?:' + '[-+]?[0-9]*\\.?[0-9]+(?:[eE][-+]?[0-9]+)?' + ')'; +var SQUOTE_STRING = '(?:' + '\'(?:[^\'\\\\]|\\\\.)*\'' + ')'; +var DQUOTE_STRING = '(?:' + '"(?:[^"\\\\]|\\\\.)*"' + ')'; +var STRING = '(?:' + SQUOTE_STRING + '|' + DQUOTE_STRING + ')'; +var ARGUMENT = '(?:' + IDENT + '|' + NUMBER + '|' + STRING + '\\s*' + ')'; +var ARGUMENTS = '(?:' + ARGUMENT + '(?:,\\s*' + ARGUMENT + ')*' + ')'; +var ARGUMENT_LIST = '(?:' + '\\(\\s*' + '(?:' + ARGUMENTS + '?' + ')' + '\\)\\s*' + ')'; +var BINDING = '(' + IDENT + '\\s*' + ARGUMENT_LIST + '?' + ')'; +var OPEN_BRACKET = '(\\[\\[|{{)' + '\\s*'; +var CLOSE_BRACKET = '(?:]]|}})'; +var NEGATE = '(?:(!)\\s*)?'; +var EXPRESSION = OPEN_BRACKET + NEGATE + BINDING + CLOSE_BRACKET; +return new RegExp(EXPRESSION, 'g'); +}(), _parseBindings: function (text) { var re = this._bindingRegex; var parts = []; -var m, lastIndex; +var lastIndex = 0; +var m; while ((m = re.exec(text)) !== null) { -if (m[1]) { -parts.push({ literal: m[1] }); +if (m.index > lastIndex) { +parts.push({ literal: text.slice(lastIndex, m.index) }); } -var mode = m[2][0]; +var mode = m[1][0]; +var negate = Boolean(m[2]); var value = m[3].trim(); -var negate = false; -if (value[0] == '!') { -negate = true; -value = value.substring(1).trim(); -} var customEvent, notifyEvent, colon; if (mode == '{' && (colon = value.indexOf('::')) > 0) { notifyEvent = value.substring(colon + 2); @@ -173,7 +185,7 @@ if (literal && kind == 'attribute') { node.setAttribute(name, literal); } -if (node.localName == 'input' && name == 'value') { +if (node.localName === 'input' && origName === 'value') { node.setAttribute(origName, ''); } node.removeAttribute(origName); @@ -189,12 +201,17 @@ }; } }, -_localSubTree: function (node, host) { -return node === host ? node.childNodes : node._lightChildren || node.childNodes; -}, findAnnotatedNode: function (root, annote) { var parent = annote.parent && Polymer.Annotations.findAnnotatedNode(root, annote.parent); -return !parent ? root : Polymer.Annotations._localSubTree(parent, root)[annote.index]; +if (parent) { +for (var n = parent.firstChild, i = 0; n; n = n.nextSibling) { +if (annote.index === i++) { +return n; +} +} +} else { +return root; +} } }; (function () { @@ -269,8 +286,8 @@ this._notes = this._template._content._notes; } else { this._notes = Polymer.Annotations.parseAnnotations(this._template); -} this._processAnnotations(this._notes); +} Polymer.Annotations.prepElement = null; } }, @@ -317,13 +334,18 @@ if (p.signature) { var args = p.signature.args; for (var kk = 0; kk < args.length; kk++) { -pp[args[kk].model] = true; +var model = args[kk].model; +if (model) { +pp[model] = true; +} } } else { +if (p.model) { pp[p.model] = true; } } } +} if (n.templateContent) { var tpp = n.templateContent._parentProps; Polymer.Base.mixin(pp, tpp); @@ -619,6 +641,8 @@ function untrackDocument(stateObj) { document.removeEventListener('mousemove', stateObj.movefn); document.removeEventListener('mouseup', stateObj.upfn); +stateObj.movefn = null; +stateObj.upfn = null; } var Gestures = { gestures: {}, @@ -845,10 +869,8 @@ 'up' ], info: { -movefn: function () { -}, -upfn: function () { -} +movefn: null, +upfn: null }, reset: function () { untrackDocument(this.info); @@ -881,7 +903,6 @@ this.fire('up', Gestures.findOriginalTarget(e), e.changedTouches[0]); }, fire: function (type, target, event) { -var self = this; Gestures.fire(target, type, { x: event.clientX, y: event.clientY, @@ -924,10 +945,8 @@ } this.moves.push(move); }, -movefn: function () { -}, -upfn: function () { -}, +movefn: null, +upfn: null, prevent: false }, reset: function () { @@ -1111,6 +1130,9 @@ all: 'auto' }; Polymer.Base._addFeature({ +_setupGestures: function () { +this.__polymerGestures = null; +}, _listen: function (node, eventName, handler) { if (Gestures.gestures[eventName]) { Gestures.add(node, eventName, handler); @@ -1132,99 +1154,6 @@ }); Polymer.Gestures = Gestures; }()); -Polymer.Async = { -_currVal: 0, -_lastVal: 0, -_callbacks: [], -_twiddleContent: 0, -_twiddle: document.createTextNode(''), -run: function (callback, waitTime) { -if (waitTime > 0) { -return ~setTimeout(callback, waitTime); -} else { -this._twiddle.textContent = this._twiddleContent++; -this._callbacks.push(callback); -return this._currVal++; -} -}, -cancel: function (handle) { -if (handle < 0) { -clearTimeout(~handle); -} else { -var idx = handle - this._lastVal; -if (idx >= 0) { -if (!this._callbacks[idx]) { -throw 'invalid async handle: ' + handle; -} -this._callbacks[idx] = null; -} -} -}, -_atEndOfMicrotask: function () { -var len = this._callbacks.length; -for (var i = 0; i < len; i++) { -var cb = this._callbacks[i]; -if (cb) { -try { -cb(); -} catch (e) { -i++; -this._callbacks.splice(0, i); -this._lastVal += i; -this._twiddle.textContent = this._twiddleContent++; -throw e; -} -} -} -this._callbacks.splice(0, len); -this._lastVal += len; -} -}; -new window.MutationObserver(function () { -Polymer.Async._atEndOfMicrotask(); -}).observe(Polymer.Async._twiddle, { characterData: true }); -Polymer.Debounce = function () { -var Async = Polymer.Async; -var Debouncer = function (context) { -this.context = context; -var self = this; -this.boundComplete = function () { -self.complete(); -}; -}; -Debouncer.prototype = { -go: function (callback, wait) { -var h; -this.finish = function () { -Async.cancel(h); -}; -h = Async.run(this.boundComplete, wait); -this.callback = callback; -}, -stop: function () { -if (this.finish) { -this.finish(); -this.finish = null; -} -}, -complete: function () { -if (this.finish) { -this.stop(); -this.callback.call(this.context); -} -} -}; -function debounce(debouncer, callback, wait) { -if (debouncer) { -debouncer.stop(); -} else { -debouncer = new Debouncer(this); -} -debouncer.go(callback, wait); -return debouncer; -} -return debounce; -}(); Polymer.Base._addFeature({ $$: function (slctr) { return Polymer.dom(this.root).querySelector(slctr); @@ -1364,10 +1293,14 @@ node = node || this; this.transform('translate3d(' + x + ',' + y + ',' + z + ')', node); }, -importHref: function (href, onload, onerror) { +importHref: function (href, onload, onerror, optAsync) { var l = document.createElement('link'); l.rel = 'import'; l.href = href; +optAsync = Boolean(optAsync); +if (optAsync) { +l.setAttribute('async', ''); +} var self = this; if (onload) { l.onload = function (e) { @@ -1735,6 +1668,9 @@ }, _addComplexObserverEffect: function (observer) { var sig = this._parseMethod(observer); +if (!sig) { +throw new Error('Malformed observer expression \'' + observer + '\''); +} for (var i = 0, arg; i < sig.args.length && (arg = sig.args[i]); i++) { this._addPropertyEffect(arg.model, 'complexObserver', { method: sig.method, @@ -1800,7 +1736,7 @@ }); }, _parseMethod: function (expression) { -var m = expression.match(/([^\s]+)\((.*)\)/); +var m = expression.match(/([^\s]+?)\((.*)\)/); if (m) { var sig = { method: m[1], @@ -1827,10 +1763,7 @@ }, _parseArg: function (rawArg) { var arg = rawArg.trim().replace(/,/g, ',').replace(/\\(.)/g, '$1'); -var a = { -name: arg, -model: this._modelForPath(arg) -}; +var a = { name: arg }; var fc = arg[0]; if (fc === '-') { fc = arg[1]; @@ -1850,6 +1783,7 @@ break; } if (!a.literal) { +a.model = this._modelForPath(arg); a.structured = arg.indexOf('.') > 0; if (a.structured) { a.wildcard = arg.slice(-2) == '.*'; @@ -1885,7 +1819,7 @@ } var pinfo; if (!node._propertyInfo || !(pinfo = node._propertyInfo[property]) || !pinfo.readOnly) { -this.__setProperty(property, value, true, node); +this.__setProperty(property, value, false, node); } } }, @@ -1899,6 +1833,7 @@ _setupConfigure: function (initialConfig) { this._config = {}; this._handlers = []; +this._aboveConfig = null; if (initialConfig) { for (var i in initialConfig) { if (initialConfig[i] !== undefined) { @@ -2016,7 +1951,9 @@ notifyPath: function (path, value, fromAbove) { var info = {}; this._get(path, this, info); +if (info.path) { this._notifyPath(info.path, value, fromAbove); +} }, _notifyPath: function (path, value, fromAbove) { var old = this._propertySetter(path, value); @@ -2328,7 +2265,7 @@ } }); Polymer.CssParse = function () { -var api = { +return { parse: function (text) { text = this._clean(text); return this._parseCss(this._lex(text), text); @@ -2342,7 +2279,7 @@ end: text.length }; var n = root; -for (var i = 0, s = 0, l = text.length; i < l; i++) { +for (var i = 0, l = text.length; i < l; i++) { switch (text[i]) { case this.OPEN_BRACE: if (!n.rules) { @@ -2458,8 +2395,8 @@ _rx: { comments: /\/\*[^*]*\*+([^\/*][^*]*\*+)*\//gim, port: /@import[^;]*;/gim, -customProp: /(?:^|[\s;])--[^;{]*?:[^{};]*?(?:[;\n]|$)/gim, -mixinProp: /(?:^|[\s;])?--[^;{]*?:[^{;]*?{[^}]*?}(?:[;\n]|$)?/gim, +customProp: /(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\n]|$)/gim, +mixinProp: /(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\n]|$)?/gim, mixinApply: /@apply[\s]*\([^)]*?\)[\s]*(?:[;\n]|$)?/gim, varApply: /[^;:]*?:[^;]*?var\([^;]*\)(?:[;\n]|$)?/gim, keyframesRule: /^@[^\s]*keyframes/, @@ -2469,7 +2406,6 @@ MEDIA_START: '@media', AT_START: '@' }; -return api; }(); Polymer.StyleUtil = function () { return { @@ -2497,14 +2433,10 @@ } return style.__cssRules; }, -clearStyleRules: function (style) { -style.__cssRules = null; -}, forEachStyleRule: function (node, callback) { if (!node) { return; } -var s = node.parsedSelector; var skipRules = false; if (node.type === this.ruleTypes.STYLE_RULE) { callback(node); @@ -2553,7 +2485,7 @@ cssFromElement: function (element) { var cssText = ''; var content = element.content || element; -var e$ = Polymer.DomApi.arrayCopy(content.querySelectorAll(this.MODULE_STYLES_SELECTOR)); +var e$ = Polymer.TreeApi.arrayCopy(content.querySelectorAll(this.MODULE_STYLES_SELECTOR)); for (var i = 0, e; i < e$.length; i++) { e = e$[i]; if (e.localName === 'template') { @@ -2619,7 +2551,7 @@ element.setAttribute(CLASS, c.replace(SCOPE_NAME, '').replace(scope, '')); } } else { -element.setAttribute(CLASS, c + (c ? ' ' : '') + SCOPE_NAME + ' ' + scope); +element.setAttribute(CLASS, (c ? c + ' ' : '') + SCOPE_NAME + ' ' + scope); } } } @@ -2628,7 +2560,7 @@ elementStyles: function (element, callback) { var styles = element._styles; var cssText = ''; -for (var i = 0, l = styles.length, s, text; i < l && (s = styles[i]); i++) { +for (var i = 0, l = styles.length, s; i < l && (s = styles[i]); i++) { var rules = styleUtil.rulesForStyle(s); cssText += nativeShadow ? styleUtil.toCssText(rules, callback) : this.css(rules, element.is, element.extends, callback, element._scopeCssViaAttr) + '\n\n'; } @@ -2749,9 +2681,9 @@ var ROOT = ':root'; var HOST_PAREN = /(\:host)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/g; var HOST_CONTEXT = ':host-context'; -var HOST_CONTEXT_PAREN = /(.*)(?:\:host-context)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))(.*)/; +var HOST_CONTEXT_PAREN = /(.*)(?::host-context)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))(.*)/; var CONTENT = '::content'; -var SCOPE_JUMP = /\:\:content|\:\:shadow|\/deep\//; +var SCOPE_JUMP = /::content|::shadow|\/deep\//; var CSS_CLASS_PREFIX = '.'; var CSS_ATTR_PREFIX = '[' + SCOPE_NAME + '~='; var CSS_ATTR_SUFFIX = ']'; @@ -2904,10 +2836,12 @@ var self = this; var scopify = function (node) { if (node.nodeType === Node.ELEMENT_NODE) { -node.className = self._scopeElementClass(node, node.className); +var className = node.getAttribute('class'); +node.setAttribute('class', self._scopeElementClass(node, className)); var n$ = node.querySelectorAll('*'); for (var i = 0, n; i < n$.length && (n = n$[i]); i++) { -n.className = self._scopeElementClass(n, n.className); +className = n.getAttribute('class'); +n.setAttribute('class', self._scopeElementClass(n, className)); } } }; @@ -3045,9 +2979,7 @@ parts[i] = p && p.lastIndexOf(';') === p.length - 1 ? p.slice(0, -1) : p || ''; } } -return parts.filter(function (v) { -return v; -}).join(';'); +return parts.join(';'); }, applyProperties: function (rule, props) { var output = ''; @@ -3127,13 +3059,13 @@ rule.selector = parts.join(','); }, applyElementScopeSelector: function (element, selector, old, viaAttr) { -var c = viaAttr ? element.getAttribute(styleTransformer.SCOPE_NAME) : element.className; +var c = viaAttr ? element.getAttribute(styleTransformer.SCOPE_NAME) : element.getAttribute('class') || ''; var v = old ? c.replace(old, selector) : (c ? c + ' ' : '') + this.XSCOPE_NAME + ' ' + selector; if (c !== v) { if (viaAttr) { element.setAttribute(styleTransformer.SCOPE_NAME, v); } else { -element.className = v; +element.setAttribute('class', v); } } }, @@ -3300,6 +3232,11 @@ }, _setupStyleProperties: function () { this.customStyle = {}; +this._styleCache = null; +this._styleProperties = null; +this._scopeSelector = null; +this._ownStyleProperties = null; +this._customStyle = null; }, _needsStyleProperties: function () { return Boolean(this._ownStylePropertyNames && this._ownStylePropertyNames.length); @@ -3460,9 +3397,11 @@ this._addHostAttributes(b.hostAttributes); }, _initFeatures: function () { +this._setupGestures(); this._setupConfigure(); this._setupStyleProperties(); this._setupDebouncers(); +this._setupShady(); this._registerHost(); if (this._template) { this._poolContent(); @@ -3530,9 +3469,9 @@ styleTransformer.documentRule(rule); }); var self = this; -function fn() { +var fn = function fn() { self._applyCustomProperties(e); -} +}; if (this._pendingApplyProperties) { cancelAnimationFrame(this._pendingApplyProperties); this._pendingApplyProperties = null; @@ -3584,6 +3523,8 @@ archetype._scopeElementClass = this._scopeElementClassImpl; archetype.listen = this._listenImpl; archetype._showHideChildren = this._showHideChildrenImpl; +archetype.__setPropertyOrig = this.__setProperty; +archetype.__setProperty = this.__setPropertyImpl; var _constructor = this._constructorImpl; var ctor = function TemplateInstance(model, host) { _constructor.call(this, model, host); @@ -3620,6 +3561,12 @@ n.__hideTemplateChildren__ = hide; } }, +__setPropertyImpl: function (property, value, fromAbove, node) { +if (node && node.__hideTemplateChildren__ && property == 'textContent') { +property = '__polymerTextContent__'; +} +this.__setPropertyOrig(property, value, fromAbove, node); +}, _debounceTemplate: function (fn) { Polymer.dom.addDebouncer(this.debounce('_debounceTemplate', fn)); }, @@ -3857,9 +3804,10 @@ return '#' + key; }, removeKey: function (key) { -key = this._parseKey(key); +if (key = this._parseKey(key)) { this._removeFromMap(this.store[key]); delete this.store[key]; +} }, _removeFromMap: function (item) { if (item && typeof item == 'object') { @@ -3890,13 +3838,12 @@ }); }, _parseKey: function (key) { -if (key[0] == '#') { +if (key && key[0] == '#') { return key.slice(1); } -throw new Error('unexpected key ' + key); }, setItem: function (key, item) { -key = this._parseKey(key); +if (key = this._parseKey(key)) { var old = this.store[key]; if (old) { this._removeFromMap(old); @@ -3907,10 +3854,12 @@ this.pmap[item] = key; } this.store[key] = item; +} }, getItem: function (key) { -key = this._parseKey(key); +if (key = this._parseKey(key)) { return this.store[key]; +} }, getItems: function () { var items = [], store = this.store; @@ -3986,6 +3935,11 @@ observer: '_observeChanged' }, delay: Number, +renderedItemCount: { +type: Number, +notify: true, +readOnly: true +}, initialCount: { type: Number, observer: '_initializeChunking' @@ -3994,7 +3948,10 @@ type: Number, value: 20 }, -_targetFrameTime: { computed: '_computeFrameTime(targetFramerate)' } +_targetFrameTime: { +type: Number, +computed: '_computeFrameTime(targetFramerate)' +} }, behaviors: [Polymer.Templatizer], observers: ['_itemsChanged(items.*)'], @@ -4008,15 +3965,19 @@ }; }, detached: function () { +this.__isDetached = true; for (var i = 0; i < this._instances.length; i++) { this._detachInstance(i); } }, attached: function () { +if (this.__isDetached) { +this.__isDetached = false; var parent = Polymer.dom(Polymer.dom(this).parentNode); for (var i = 0; i < this._instances.length; i++) { this._attachInstance(i, parent); } +} }, ready: function () { this._instanceProps = { __key__: true }; @@ -4154,6 +4115,7 @@ } } this._pool.length = 0; +this._setRenderedItemCount(this._instances.length); this.fire('dom-change'); this._tryRenderChunk(); }, @@ -4528,7 +4490,9 @@ this._debounceTemplate(this._render); }, detached: function () { +if (!this.parentNode || this.parentNode.nodeType == Node.DOCUMENT_FRAGMENT_NODE && (!Polymer.Settings.hasShadow || !(this.parentNode instanceof ShadowRoot))) { this._teardownInstance(); +} }, attached: function () { if (this.if && this.ctor) { @@ -4557,20 +4521,30 @@ } }, _ensureInstance: function () { -if (!this._instance) { var parentNode = Polymer.dom(this).parentNode; if (parentNode) { var parent = Polymer.dom(parentNode); +if (!this._instance) { this._instance = this.stamp(); var root = this._instance.root; parent.insertBefore(root, this); +} else { +var c$ = this._instance._children; +if (c$ && c$.length) { +var lastChild = Polymer.dom(this).previousSibling; +if (lastChild !== c$[c$.length - 1]) { +for (var i = 0, n; i < c$.length && (n = c$[i]); i++) { +parent.insertBefore(n, this); +} +} +} } } }, _teardownInstance: function () { if (this._instance) { var c$ = this._instance._children; -if (c$) { +if (c$ && c$.length) { var parent = Polymer.dom(Polymer.dom(c$[0]).parentNode); for (var i = 0, n; i < c$.length && (n = c$[i]); i++) { parent.removeChild(n); @@ -4667,7 +4641,7 @@ this._prepBindings(); this._prepPropertyInfo(); Polymer.Base._initFeatures.call(this); -this._children = Polymer.DomApi.arrayCopyChildNodes(this.root); +this._children = Polymer.TreeApi.arrayCopyChildNodes(this.root); } this._insertChildren(); this.fire('dom-change');
diff --git a/third_party/polymer/v1_0/components-chromium/polymer/polymer-micro-extracted.js b/third_party/polymer/v1_0/components-chromium/polymer/polymer-micro-extracted.js index 95d8736d..10e3bd0 100644 --- a/third_party/polymer/v1_0/components-chromium/polymer/polymer-micro-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/polymer/polymer-micro-extracted.js
@@ -393,6 +393,7 @@ }); Polymer.Base._behaviorProperties = { hostAttributes: true, +beforeRegister: true, registered: true, properties: true, observers: true, @@ -644,31 +645,7 @@ } } }); -Polymer.Base._addFeature({ -_setupDebouncers: function () { -this._debouncers = {}; -}, -debounce: function (jobName, callback, wait) { -return this._debouncers[jobName] = Polymer.Debounce.call(this, this._debouncers[jobName], callback, wait); -}, -isDebouncerActive: function (jobName) { -var debouncer = this._debouncers[jobName]; -return debouncer && debouncer.finish; -}, -flushDebouncer: function (jobName) { -var debouncer = this._debouncers[jobName]; -if (debouncer) { -debouncer.complete(); -} -}, -cancelDebouncer: function (jobName) { -var debouncer = this._debouncers[jobName]; -if (debouncer) { -debouncer.stop(); -} -} -}); -Polymer.version = '1.2.3'; +Polymer.version = '1.2.4'; Polymer.Base._addFeature({ _registerFeatures: function () { this._prepIs(); @@ -683,7 +660,6 @@ }, _initFeatures: function () { this._marshalHostAttributes(); -this._setupDebouncers(); this._marshalBehaviors(); } }); \ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/polymer/polymer-mini-extracted.js b/third_party/polymer/v1_0/components-chromium/polymer/polymer-mini-extracted.js index a34346f7..2ad2385 100644 --- a/third_party/polymer/v1_0/components-chromium/polymer/polymer-mini-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/polymer/polymer-mini-extracted.js
@@ -31,6 +31,8 @@ if (host && host._clients) { host._clients.push(this); } +this._clients = null; +this._clientsReadied = false; }, _beginHosting: function () { Polymer.Base._hostStack.push(this); @@ -42,6 +44,7 @@ Polymer.Base._hostStack.pop(); }, _tryReady: function () { +this._readied = false; if (this._canReady()) { this._ready(); } @@ -354,7 +357,6 @@ node = node.content; var s = ''; var c$ = Polymer.dom(node).childNodes; -c$ = composed ? node._composedChildren : c$; for (var i = 0, l = c$.length, child; i < l && (child = c$[i]); i++) { s += getOuterHTML(child, node, composed); } @@ -362,24 +364,213 @@ } return { getInnerHTML: getInnerHTML }; }(); +(function () { +'use strict'; +var nativeInsertBefore = Element.prototype.insertBefore; +var nativeAppendChild = Element.prototype.appendChild; +var nativeRemoveChild = Element.prototype.removeChild; +var TreeApi = Polymer.TreeApi = { +arrayCopyChildNodes: function (parent) { +var copy = [], i = 0; +for (var n = parent.firstChild; n; n = n.nextSibling) { +copy[i++] = n; +} +return copy; +}, +arrayCopyChildren: function (parent) { +var copy = [], i = 0; +for (var n = parent.firstElementChild; n; n = n.nextElementSibling) { +copy[i++] = n; +} +return copy; +}, +arrayCopy: function (a$) { +var l = a$.length; +var copy = new Array(l); +for (var i = 0; i < l; i++) { +copy[i] = a$[i]; +} +return copy; +} +}; +Polymer.TreeApi.Logical = { +hasParentNode: function (node) { +return Boolean(node.__dom && node.__dom.parentNode); +}, +hasChildNodes: function (node) { +return Boolean(node.__dom && node.__dom.childNodes !== undefined); +}, +getChildNodes: function (node) { +return this.hasChildNodes(node) ? this._getChildNodes(node) : node.childNodes; +}, +_getChildNodes: function (node) { +if (!node.__dom.childNodes) { +node.__dom.childNodes = []; +for (var n = node.__dom.firstChild; n; n = n.__dom.nextSibling) { +node.__dom.childNodes.push(n); +} +} +return node.__dom.childNodes; +}, +getParentNode: function (node) { +return node.__dom && node.__dom.parentNode !== undefined ? node.__dom.parentNode : node.parentNode; +}, +getFirstChild: function (node) { +return node.__dom && node.__dom.firstChild !== undefined ? node.__dom.firstChild : node.firstChild; +}, +getLastChild: function (node) { +return node.__dom && node.__dom.lastChild !== undefined ? node.__dom.lastChild : node.lastChild; +}, +getNextSibling: function (node) { +return node.__dom && node.__dom.nextSibling !== undefined ? node.__dom.nextSibling : node.nextSibling; +}, +getPreviousSibling: function (node) { +return node.__dom && node.__dom.previousSibling !== undefined ? node.__dom.previousSibling : node.previousSibling; +}, +getFirstElementChild: function (node) { +return node.__dom && node.__dom.firstChild !== undefined ? this._getFirstElementChild(node) : node.firstElementChild; +}, +_getFirstElementChild: function (node) { +var n = node.__dom.firstChild; +while (n && n.nodeType !== Node.ELEMENT_NODE) { +n = n.__dom.nextSibling; +} +return n; +}, +getLastElementChild: function (node) { +return node.__dom && node.__dom.lastChild !== undefined ? this._getLastElementChild(node) : node.lastElementChild; +}, +_getLastElementChild: function (node) { +var n = node.__dom.lastChild; +while (n && n.nodeType !== Node.ELEMENT_NODE) { +n = n.__dom.previousSibling; +} +return n; +}, +getNextElementSibling: function (node) { +return node.__dom && node.__dom.nextSibling !== undefined ? this._getNextElementSibling(node) : node.nextElementSibling; +}, +_getNextElementSibling: function (node) { +var n = node.__dom.nextSibling; +while (n && n.nodeType !== Node.ELEMENT_NODE) { +n = n.__dom.nextSibling; +} +return n; +}, +getPreviousElementSibling: function (node) { +return node.__dom && node.__dom.previousSibling !== undefined ? this._getPreviousElementSibling(node) : node.previousElementSibling; +}, +_getPreviousElementSibling: function (node) { +var n = node.__dom.previousSibling; +while (n && n.nodeType !== Node.ELEMENT_NODE) { +n = n.__dom.previousSibling; +} +return n; +}, +saveChildNodes: function (node) { +if (!this.hasChildNodes(node)) { +node.__dom = node.__dom || {}; +node.__dom.firstChild = node.firstChild; +node.__dom.lastChild = node.lastChild; +node.__dom.childNodes = []; +for (var n = node.firstChild; n; n = n.nextSibling) { +n.__dom = n.__dom || {}; +n.__dom.parentNode = node; +node.__dom.childNodes.push(n); +n.__dom.nextSibling = n.nextSibling; +n.__dom.previousSibling = n.previousSibling; +} +} +}, +recordInsertBefore: function (node, container, ref_node) { +container.__dom.childNodes = null; +if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { +for (var n = node.firstChild; n; n = n.nextSibling) { +this._linkNode(n, container, ref_node); +} +} else { +this._linkNode(node, container, ref_node); +} +}, +_linkNode: function (node, container, ref_node) { +node.__dom = node.__dom || {}; +container.__dom = container.__dom || {}; +if (ref_node) { +ref_node.__dom = ref_node.__dom || {}; +} +node.__dom.previousSibling = ref_node ? ref_node.__dom.previousSibling : container.__dom.lastChild; +if (node.__dom.previousSibling) { +node.__dom.previousSibling.__dom.nextSibling = node; +} +node.__dom.nextSibling = ref_node; +if (node.__dom.nextSibling) { +node.__dom.nextSibling.__dom.previousSibling = node; +} +node.__dom.parentNode = container; +if (ref_node) { +if (ref_node === container.__dom.firstChild) { +container.__dom.firstChild = node; +} +} else { +container.__dom.lastChild = node; +if (!container.__dom.firstChild) { +container.__dom.firstChild = node; +} +} +container.__dom.childNodes = null; +}, +recordRemoveChild: function (node, container) { +node.__dom = node.__dom || {}; +container.__dom = container.__dom || {}; +if (node === container.__dom.firstChild) { +container.__dom.firstChild = node.__dom.nextSibling; +} +if (node === container.__dom.lastChild) { +container.__dom.lastChild = node.__dom.previousSibling; +} +var p = node.__dom.previousSibling; +var n = node.__dom.nextSibling; +if (p) { +p.__dom.nextSibling = n; +} +if (n) { +n.__dom.previousSibling = p; +} +node.__dom.parentNode = node.__dom.previousSibling = node.__dom.nextSibling = undefined; +container.__dom.childNodes = null; +} +}; +Polymer.TreeApi.Composed = { +getChildNodes: function (node) { +return Polymer.TreeApi.arrayCopyChildNodes(node); +}, +getParentNode: function (node) { +return node.parentNode; +}, +clearChildNodes: function (node) { +node.textContent = ''; +}, +insertBefore: function (parentNode, newChild, refChild) { +return nativeInsertBefore.call(parentNode, newChild, refChild || null); +}, +appendChild: function (parentNode, newChild) { +return nativeAppendChild.call(parentNode, newChild); +}, +removeChild: function (parentNode, node) { +return nativeRemoveChild.call(parentNode, node); +} +}; +}()); Polymer.DomApi = function () { 'use strict'; var Settings = Polymer.Settings; -var getInnerHTML = Polymer.domInnerHTML.getInnerHTML; -var nativeInsertBefore = Element.prototype.insertBefore; -var nativeRemoveChild = Element.prototype.removeChild; -var nativeAppendChild = Element.prototype.appendChild; -var nativeCloneNode = Element.prototype.cloneNode; -var nativeImportNode = Document.prototype.importNode; -var needsToWrap = Settings.hasShadow && !Settings.nativeShadow; -var wrap = window.wrap ? window.wrap : function (node) { -return node; -}; +var TreeApi = Polymer.TreeApi; var DomApi = function (node) { -this.node = needsToWrap ? wrap(node) : node; -if (this.patch) { -this.patch(); -} +this.node = needsToWrap ? DomApi.wrap(node) : node; +}; +var needsToWrap = Settings.hasShadow && !Settings.nativeShadow; +DomApi.wrap = window.wrap ? window.wrap : function (node) { +return node; }; DomApi.prototype = { flush: function () { @@ -390,306 +581,17 @@ return true; } var n = node; -var wrappedDocument = wrap(document); -while (n && n !== wrappedDocument && n !== this.node) { +var doc = node.ownerDocument; +while (n && n !== doc && n !== this.node) { n = Polymer.dom(n).parentNode || n.host; } return n === this.node; }, -_lazyDistribute: function (host) { -if (host.shadyRoot && host.shadyRoot._distributionClean) { -host.shadyRoot._distributionClean = false; -Polymer.dom.addDebouncer(host.debounce('_distribute', host._distributeContent)); -} -}, -appendChild: function (node) { -return this._addNode(node); -}, -insertBefore: function (node, ref_node) { -return this._addNode(node, ref_node); -}, -_addNode: function (node, ref_node) { -this._removeNodeFromParent(node); -var addedInsertionPoint; -var root = this.getOwnerRoot(); -if (root) { -addedInsertionPoint = this._maybeAddInsertionPoint(node, this.node); -} -if (this._nodeHasLogicalChildren(this.node)) { -if (ref_node) { -var children = this.childNodes; -var index = children.indexOf(ref_node); -if (index < 0) { -throw Error('The ref_node to be inserted before is not a child ' + 'of this node'); -} -} -this._addLogicalInfo(node, this.node, index); -} -this._addNodeToHost(node); -if (!this._maybeDistribute(node, this.node) && !this._tryRemoveUndistributedNode(node)) { -if (ref_node) { -ref_node = ref_node.localName === CONTENT ? this._firstComposedNode(ref_node) : ref_node; -} -var container = this.node._isShadyRoot ? this.node.host : this.node; -addToComposedParent(container, node, ref_node); -if (ref_node) { -nativeInsertBefore.call(container, node, ref_node); -} else { -nativeAppendChild.call(container, node); -} -} -if (addedInsertionPoint) { -this._updateInsertionPoints(root.host); -} -this.notifyObserver(); -return node; -}, -removeChild: function (node) { -if (factory(node).parentNode !== this.node) { -console.warn('The node to be removed is not a child of this node', node); -} -this._removeNodeFromHost(node); -if (!this._maybeDistribute(node, this.node)) { -var container = this.node._isShadyRoot ? this.node.host : this.node; -if (container === node.parentNode) { -removeFromComposedParent(container, node); -nativeRemoveChild.call(container, node); -} -} -this.notifyObserver(); -return node; -}, -replaceChild: function (node, ref_node) { -this.insertBefore(node, ref_node); -this.removeChild(ref_node); -return node; -}, -_hasCachedOwnerRoot: function (node) { -return Boolean(node._ownerShadyRoot !== undefined); -}, -getOwnerRoot: function () { -return this._ownerShadyRootForNode(this.node); -}, -_ownerShadyRootForNode: function (node) { -if (!node) { -return; -} -if (node._ownerShadyRoot === undefined) { -var root; -if (node._isShadyRoot) { -root = node; -} else { -var parent = Polymer.dom(node).parentNode; -if (parent) { -root = parent._isShadyRoot ? parent : this._ownerShadyRootForNode(parent); -} else { -root = null; -} -} -node._ownerShadyRoot = root; -} -return node._ownerShadyRoot; -}, -_maybeDistribute: function (node, parent) { -var fragContent = node.nodeType === Node.DOCUMENT_FRAGMENT_NODE && !node.__noContent && Polymer.dom(node).querySelector(CONTENT); -var wrappedContent = fragContent && Polymer.dom(fragContent).parentNode.nodeType !== Node.DOCUMENT_FRAGMENT_NODE; -var hasContent = fragContent || node.localName === CONTENT; -if (hasContent) { -var root = this._ownerShadyRootForNode(parent); -if (root) { -var host = root.host; -this._lazyDistribute(host); -} -} -var parentNeedsDist = this._parentNeedsDistribution(parent); -if (parentNeedsDist) { -this._lazyDistribute(parent); -} -return parentNeedsDist || hasContent && !wrappedContent; -}, -_maybeAddInsertionPoint: function (node, parent) { -var added; -if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE && !node.__noContent) { -var c$ = factory(node).querySelectorAll(CONTENT); -for (var i = 0, n, np, na; i < c$.length && (n = c$[i]); i++) { -np = factory(n).parentNode; -if (np === node) { -np = parent; -} -na = this._maybeAddInsertionPoint(n, np); -added = added || na; -} -} else if (node.localName === CONTENT) { -saveLightChildrenIfNeeded(parent); -saveLightChildrenIfNeeded(node); -added = true; -} -return added; -}, -_tryRemoveUndistributedNode: function (node) { -if (this.node.shadyRoot) { -var parent = getComposedParent(node); -if (parent) { -nativeRemoveChild.call(parent, node); -} -return true; -} -}, -_updateInsertionPoints: function (host) { -var i$ = host.shadyRoot._insertionPoints = factory(host.shadyRoot).querySelectorAll(CONTENT); -for (var i = 0, c; i < i$.length; i++) { -c = i$[i]; -saveLightChildrenIfNeeded(c); -saveLightChildrenIfNeeded(factory(c).parentNode); -} -}, -_nodeHasLogicalChildren: function (node) { -return Boolean(node._lightChildren !== undefined); -}, -_parentNeedsDistribution: function (parent) { -return parent && parent.shadyRoot && hasInsertionPoint(parent.shadyRoot); -}, -_removeNodeFromParent: function (node) { -var parent = node._lightParent || node.parentNode; -if (parent && hasDomApi(parent)) { -factory(parent).notifyObserver(); -} -this._removeNodeFromHost(node, true); -}, -_removeNodeFromHost: function (node, ensureComposedRemoval) { -var hostNeedsDist; -var root; -var parent = node._lightParent; -if (parent) { -factory(node)._distributeParent(); -root = this._ownerShadyRootForNode(node); -if (root) { -root.host._elementRemove(node); -hostNeedsDist = this._removeDistributedChildren(root, node); -} -this._removeLogicalInfo(node, parent); -} -this._removeOwnerShadyRoot(node); -if (root && hostNeedsDist) { -this._updateInsertionPoints(root.host); -this._lazyDistribute(root.host); -} else if (ensureComposedRemoval) { -removeFromComposedParent(getComposedParent(node), node); -} -}, -_removeDistributedChildren: function (root, container) { -var hostNeedsDist; -var ip$ = root._insertionPoints; -for (var i = 0; i < ip$.length; i++) { -var content = ip$[i]; -if (this._contains(container, content)) { -var dc$ = factory(content).getDistributedNodes(); -for (var j = 0; j < dc$.length; j++) { -hostNeedsDist = true; -var node = dc$[j]; -var parent = node.parentNode; -if (parent) { -removeFromComposedParent(parent, node); -nativeRemoveChild.call(parent, node); -} -} -} -} -return hostNeedsDist; -}, -_contains: function (container, node) { -while (node) { -if (node == container) { -return true; -} -node = factory(node).parentNode; -} -}, -_addNodeToHost: function (node) { -var root = this.getOwnerRoot(); -if (root) { -root.host._elementAdd(node); -} -}, -_addLogicalInfo: function (node, container, index) { -var children = factory(container).childNodes; -index = index === undefined ? children.length : index; -if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { -var c$ = arrayCopyChildNodes(node); -for (var i = 0, n; i < c$.length && (n = c$[i]); i++) { -children.splice(index++, 0, n); -n._lightParent = container; -} -} else { -children.splice(index, 0, node); -node._lightParent = container; -} -}, -_removeLogicalInfo: function (node, container) { -var children = factory(container).childNodes; -var index = children.indexOf(node); -if (index < 0 || container !== node._lightParent) { -throw Error('The node to be removed is not a child of this node'); -} -children.splice(index, 1); -node._lightParent = null; -}, -_removeOwnerShadyRoot: function (node) { -if (this._hasCachedOwnerRoot(node)) { -var c$ = factory(node).childNodes; -for (var i = 0, l = c$.length, n; i < l && (n = c$[i]); i++) { -this._removeOwnerShadyRoot(n); -} -} -node._ownerShadyRoot = undefined; -}, -_firstComposedNode: function (content) { -var n$ = factory(content).getDistributedNodes(); -for (var i = 0, l = n$.length, n, p$; i < l && (n = n$[i]); i++) { -p$ = factory(n).getDestinationInsertionPoints(); -if (p$[p$.length - 1] === content) { -return n; -} -} -}, -querySelector: function (selector) { -return this.querySelectorAll(selector)[0]; -}, -querySelectorAll: function (selector) { -return this._query(function (n) { -return matchesSelector.call(n, selector); -}, this.node); -}, -_query: function (matcher, node) { -node = node || this.node; -var list = []; -this._queryElements(factory(node).childNodes, matcher, list); -return list; -}, -_queryElements: function (elements, matcher, list) { -for (var i = 0, l = elements.length, c; i < l && (c = elements[i]); i++) { -if (c.nodeType === Node.ELEMENT_NODE) { -this._queryElement(c, matcher, list); -} -} -}, -_queryElement: function (node, matcher, list) { -if (matcher(node)) { -list.push(node); -} -this._queryElements(factory(node).childNodes, matcher, list); -}, -getDestinationInsertionPoints: function () { -return this.node._destinationInsertionPoints || []; -}, -getDistributedNodes: function () { -return this.node._distributedNodes || []; -}, queryDistributedElements: function (selector) { var c$ = this.getEffectiveChildNodes(); var list = []; for (var i = 0, l = c$.length, c; i < l && (c = c$[i]); i++) { -if (c.nodeType === Node.ELEMENT_NODE && matchesSelector.call(c, selector)) { +if (c.nodeType === Node.ELEMENT_NODE && DomApi.matchesSelector.call(c, selector)) { list.push(c); } } @@ -700,7 +602,7 @@ var c$ = this.childNodes; for (var i = 0, l = c$.length, c; i < l && (c = c$[i]); i++) { if (c.localName === CONTENT) { -var d$ = factory(c).getDistributedNodes(); +var d$ = dom(c).getDistributedNodes(); for (var j = 0; j < d$.length; j++) { list.push(d$[j]); } @@ -710,49 +612,6 @@ } return list; }, -_clear: function () { -while (this.childNodes.length) { -this.removeChild(this.childNodes[0]); -} -}, -setAttribute: function (name, value) { -this.node.setAttribute(name, value); -this._distributeParent(); -}, -removeAttribute: function (name) { -this.node.removeAttribute(name); -this._distributeParent(); -}, -_distributeParent: function () { -if (this._parentNeedsDistribution(this.parentNode)) { -this._lazyDistribute(this.parentNode); -} -}, -cloneNode: function (deep) { -var n = nativeCloneNode.call(this.node, false); -if (deep) { -var c$ = this.childNodes; -var d = factory(n); -for (var i = 0, nc; i < c$.length; i++) { -nc = factory(c$[i]).cloneNode(true); -d.appendChild(nc); -} -} -return n; -}, -importNode: function (externalNode, deep) { -var doc = this.node instanceof Document ? this.node : this.node.ownerDocument; -var n = nativeImportNode.call(doc, externalNode, false); -if (deep) { -var c$ = factory(externalNode).childNodes; -var d = factory(n); -for (var i = 0, nc; i < c$.length; i++) { -nc = factory(doc).importNode(c$[i], true); -d.appendChild(nc); -} -} -return n; -}, observeNodes: function (callback) { if (callback) { if (!this.observer) { @@ -770,90 +629,467 @@ if (this.observer) { this.observer.notify(); } +}, +_query: function (matcher, node, halter) { +node = node || this.node; +var list = []; +this._queryElements(TreeApi.Logical.getChildNodes(node), matcher, halter, list); +return list; +}, +_queryElements: function (elements, matcher, halter, list) { +for (var i = 0, l = elements.length, c; i < l && (c = elements[i]); i++) { +if (c.nodeType === Node.ELEMENT_NODE) { +if (this._queryElement(c, matcher, halter, list)) { +return true; +} +} +} +}, +_queryElement: function (node, matcher, halter, list) { +var result = matcher(node); +if (result) { +list.push(node); +} +if (halter && halter(result)) { +return result; +} +this._queryElements(TreeApi.Logical.getChildNodes(node), matcher, halter, list); } }; -if (!Settings.useShadow) { +var CONTENT = DomApi.CONTENT = 'content'; +var dom = DomApi.factory = function (node) { +node = node || document; +if (!node.__domApi) { +node.__domApi = new DomApi.ctor(node); +} +return node.__domApi; +}; +DomApi.hasApi = function (node) { +return Boolean(node.__domApi); +}; +DomApi.ctor = DomApi; +Polymer.dom = function (obj, patch) { +if (obj instanceof Event) { +return Polymer.EventApi.factory(obj); +} else { +return DomApi.factory(obj, patch); +} +}; +var p = Element.prototype; +DomApi.matchesSelector = p.matches || p.matchesSelector || p.mozMatchesSelector || p.msMatchesSelector || p.oMatchesSelector || p.webkitMatchesSelector; +return DomApi; +}(); +(function () { +'use strict'; +var Settings = Polymer.Settings; +var DomApi = Polymer.DomApi; +var dom = DomApi.factory; +var TreeApi = Polymer.TreeApi; +var getInnerHTML = Polymer.domInnerHTML.getInnerHTML; +var CONTENT = DomApi.CONTENT; +if (Settings.useShadow) { +return; +} +var nativeCloneNode = Element.prototype.cloneNode; +var nativeImportNode = Document.prototype.importNode; +Polymer.Base.extend(DomApi.prototype, { +_lazyDistribute: function (host) { +if (host.shadyRoot && host.shadyRoot._distributionClean) { +host.shadyRoot._distributionClean = false; +Polymer.dom.addDebouncer(host.debounce('_distribute', host._distributeContent)); +} +}, +appendChild: function (node) { +return this.insertBefore(node); +}, +insertBefore: function (node, ref_node) { +if (ref_node && TreeApi.Logical.getParentNode(ref_node) !== this.node) { +throw Error('The ref_node to be inserted before is not a child ' + 'of this node'); +} +if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) { +var parent = TreeApi.Logical.getParentNode(node); +if (parent) { +if (DomApi.hasApi(parent)) { +dom(parent).notifyObserver(); +} +this._removeNode(node); +} else { +this._removeOwnerShadyRoot(node); +} +} +if (!this._addNode(node, ref_node)) { +if (ref_node) { +ref_node = ref_node.localName === CONTENT ? this._firstComposedNode(ref_node) : ref_node; +} +var container = this.node._isShadyRoot ? this.node.host : this.node; +if (ref_node) { +TreeApi.Composed.insertBefore(container, node, ref_node); +} else { +TreeApi.Composed.appendChild(container, node); +} +} +this.notifyObserver(); +return node; +}, +_addNode: function (node, ref_node) { +var root = this.getOwnerRoot(); +if (root) { +var ipAdded = this._maybeAddInsertionPoint(node, this.node); +if (!root._invalidInsertionPoints) { +root._invalidInsertionPoints = ipAdded; +} +this._addNodeToHost(root.host, node); +} +if (TreeApi.Logical.hasChildNodes(this.node)) { +TreeApi.Logical.recordInsertBefore(node, this.node, ref_node); +} +var handled = this._maybeDistribute(node) || this.node.shadyRoot; +if (handled) { +if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { +while (node.firstChild) { +TreeApi.Composed.removeChild(node, node.firstChild); +} +} else { +var parent = TreeApi.Composed.getParentNode(node); +if (parent) { +TreeApi.Composed.removeChild(parent, node); +} +} +} +return handled; +}, +removeChild: function (node) { +if (TreeApi.Logical.getParentNode(node) !== this.node) { +throw Error('The node to be removed is not a child of this node: ' + node); +} +if (!this._removeNode(node)) { +var container = this.node._isShadyRoot ? this.node.host : this.node; +var parent = TreeApi.Composed.getParentNode(node); +if (container === parent) { +TreeApi.Composed.removeChild(container, node); +} +} +this.notifyObserver(); +return node; +}, +_removeNode: function (node) { +var logicalParent = TreeApi.Logical.hasParentNode(node) && TreeApi.Logical.getParentNode(node); +var distributed; +var root = this._ownerShadyRootForNode(node); +if (logicalParent) { +distributed = dom(node)._maybeDistributeParent(); +TreeApi.Logical.recordRemoveChild(node, logicalParent); +if (root && this._removeDistributedChildren(root, node)) { +root._invalidInsertionPoints = true; +this._lazyDistribute(root.host); +} +} +this._removeOwnerShadyRoot(node); +if (root) { +this._removeNodeFromHost(root.host, node); +} +return distributed; +}, +replaceChild: function (node, ref_node) { +this.insertBefore(node, ref_node); +this.removeChild(ref_node); +return node; +}, +_hasCachedOwnerRoot: function (node) { +return Boolean(node._ownerShadyRoot !== undefined); +}, +getOwnerRoot: function () { +return this._ownerShadyRootForNode(this.node); +}, +_ownerShadyRootForNode: function (node) { +if (!node) { +return; +} +var root = node._ownerShadyRoot; +if (root === undefined) { +if (node._isShadyRoot) { +root = node; +} else { +var parent = TreeApi.Logical.getParentNode(node); +if (parent) { +root = parent._isShadyRoot ? parent : this._ownerShadyRootForNode(parent); +} else { +root = null; +} +} +if (root || document.documentElement.contains(node)) { +node._ownerShadyRoot = root; +} +} +return root; +}, +_maybeDistribute: function (node) { +var fragContent = node.nodeType === Node.DOCUMENT_FRAGMENT_NODE && !node.__noContent && dom(node).querySelector(CONTENT); +var wrappedContent = fragContent && TreeApi.Logical.getParentNode(fragContent).nodeType !== Node.DOCUMENT_FRAGMENT_NODE; +var hasContent = fragContent || node.localName === CONTENT; +if (hasContent) { +var root = this.getOwnerRoot(); +if (root) { +this._lazyDistribute(root.host); +} +} +var needsDist = this._nodeNeedsDistribution(this.node); +if (needsDist) { +this._lazyDistribute(this.node); +} +return needsDist || hasContent && !wrappedContent; +}, +_maybeAddInsertionPoint: function (node, parent) { +var added; +if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE && !node.__noContent) { +var c$ = dom(node).querySelectorAll(CONTENT); +for (var i = 0, n, np, na; i < c$.length && (n = c$[i]); i++) { +np = TreeApi.Logical.getParentNode(n); +if (np === node) { +np = parent; +} +na = this._maybeAddInsertionPoint(n, np); +added = added || na; +} +} else if (node.localName === CONTENT) { +TreeApi.Logical.saveChildNodes(parent); +TreeApi.Logical.saveChildNodes(node); +added = true; +} +return added; +}, +_updateInsertionPoints: function (host) { +var i$ = host.shadyRoot._insertionPoints = dom(host.shadyRoot).querySelectorAll(CONTENT); +for (var i = 0, c; i < i$.length; i++) { +c = i$[i]; +TreeApi.Logical.saveChildNodes(c); +TreeApi.Logical.saveChildNodes(TreeApi.Logical.getParentNode(c)); +} +}, +_nodeNeedsDistribution: function (node) { +return node && node.shadyRoot && DomApi.hasInsertionPoint(node.shadyRoot); +}, +_addNodeToHost: function (host, node) { +if (host._elementAdd) { +host._elementAdd(node); +} +}, +_removeNodeFromHost: function (host, node) { +if (host._elementRemove) { +host._elementRemove(node); +} +}, +_removeDistributedChildren: function (root, container) { +var hostNeedsDist; +var ip$ = root._insertionPoints; +for (var i = 0; i < ip$.length; i++) { +var content = ip$[i]; +if (this._contains(container, content)) { +var dc$ = dom(content).getDistributedNodes(); +for (var j = 0; j < dc$.length; j++) { +hostNeedsDist = true; +var node = dc$[j]; +var parent = TreeApi.Composed.getParentNode(node); +if (parent) { +TreeApi.Composed.removeChild(parent, node); +} +} +} +} +return hostNeedsDist; +}, +_contains: function (container, node) { +while (node) { +if (node == container) { +return true; +} +node = TreeApi.Logical.getParentNode(node); +} +}, +_removeOwnerShadyRoot: function (node) { +if (this._hasCachedOwnerRoot(node)) { +var c$ = TreeApi.Logical.getChildNodes(node); +for (var i = 0, l = c$.length, n; i < l && (n = c$[i]); i++) { +this._removeOwnerShadyRoot(n); +} +} +node._ownerShadyRoot = undefined; +}, +_firstComposedNode: function (content) { +var n$ = dom(content).getDistributedNodes(); +for (var i = 0, l = n$.length, n, p$; i < l && (n = n$[i]); i++) { +p$ = dom(n).getDestinationInsertionPoints(); +if (p$[p$.length - 1] === content) { +return n; +} +} +}, +querySelector: function (selector) { +var result = this._query(function (n) { +return DomApi.matchesSelector.call(n, selector); +}, this.node, function (n) { +return Boolean(n); +})[0]; +return result || null; +}, +querySelectorAll: function (selector) { +return this._query(function (n) { +return DomApi.matchesSelector.call(n, selector); +}, this.node); +}, +getDestinationInsertionPoints: function () { +return this.node._destinationInsertionPoints || []; +}, +getDistributedNodes: function () { +return this.node._distributedNodes || []; +}, +_clear: function () { +while (this.childNodes.length) { +this.removeChild(this.childNodes[0]); +} +}, +setAttribute: function (name, value) { +this.node.setAttribute(name, value); +this._maybeDistributeParent(); +}, +removeAttribute: function (name) { +this.node.removeAttribute(name); +this._maybeDistributeParent(); +}, +_maybeDistributeParent: function () { +if (this._nodeNeedsDistribution(this.parentNode)) { +this._lazyDistribute(this.parentNode); +return true; +} +}, +cloneNode: function (deep) { +var n = nativeCloneNode.call(this.node, false); +if (deep) { +var c$ = this.childNodes; +var d = dom(n); +for (var i = 0, nc; i < c$.length; i++) { +nc = dom(c$[i]).cloneNode(true); +d.appendChild(nc); +} +} +return n; +}, +importNode: function (externalNode, deep) { +var doc = this.node instanceof Document ? this.node : this.node.ownerDocument; +var n = nativeImportNode.call(doc, externalNode, false); +if (deep) { +var c$ = TreeApi.Logical.getChildNodes(externalNode); +var d = dom(n); +for (var i = 0, nc; i < c$.length; i++) { +nc = dom(doc).importNode(c$[i], true); +d.appendChild(nc); +} +} +return n; +}, +_getComposedInnerHTML: function () { +return getInnerHTML(this.node, true); +} +}); Object.defineProperties(DomApi.prototype, { +activeElement: { +get: function () { +var active = document.activeElement; +if (!active) { +return null; +} +var isShadyRoot = !!this.node._isShadyRoot; +if (this.node !== document) { +if (!isShadyRoot) { +return null; +} +if (this.node.host === active || !this.node.host.contains(active)) { +return null; +} +} +var activeRoot = dom(active).getOwnerRoot(); +while (activeRoot && activeRoot !== this.node) { +active = activeRoot.host; +activeRoot = dom(active).getOwnerRoot(); +} +if (this.node === document) { +return activeRoot ? null : active; +} else { +return activeRoot === this.node ? active : null; +} +}, +configurable: true +}, childNodes: { get: function () { -var c$ = getLightChildren(this.node); -return Array.isArray(c$) ? c$ : arrayCopyChildNodes(this.node); +var c$ = TreeApi.Logical.getChildNodes(this.node); +return Array.isArray(c$) ? c$ : TreeApi.arrayCopyChildNodes(this.node); }, configurable: true }, children: { get: function () { +if (TreeApi.Logical.hasChildNodes(this.node)) { return Array.prototype.filter.call(this.childNodes, function (n) { return n.nodeType === Node.ELEMENT_NODE; }); +} else { +return TreeApi.arrayCopyChildren(this.node); +} }, configurable: true }, parentNode: { get: function () { -return this.node._lightParent || getComposedParent(this.node); +return TreeApi.Logical.getParentNode(this.node); }, configurable: true }, firstChild: { get: function () { -return this.childNodes[0]; +return TreeApi.Logical.getFirstChild(this.node); }, configurable: true }, lastChild: { get: function () { -var c$ = this.childNodes; -return c$[c$.length - 1]; +return TreeApi.Logical.getLastChild(this.node); }, configurable: true }, nextSibling: { get: function () { -var c$ = this.parentNode && factory(this.parentNode).childNodes; -if (c$) { -return c$[Array.prototype.indexOf.call(c$, this.node) + 1]; -} +return TreeApi.Logical.getNextSibling(this.node); }, configurable: true }, previousSibling: { get: function () { -var c$ = this.parentNode && factory(this.parentNode).childNodes; -if (c$) { -return c$[Array.prototype.indexOf.call(c$, this.node) - 1]; -} +return TreeApi.Logical.getPreviousSibling(this.node); }, configurable: true }, firstElementChild: { get: function () { -return this.children[0]; +return TreeApi.Logical.getFirstElementChild(this.node); }, configurable: true }, lastElementChild: { get: function () { -var c$ = this.children; -return c$[c$.length - 1]; +return TreeApi.Logical.getLastElementChild(this.node); }, configurable: true }, nextElementSibling: { get: function () { -var c$ = this.parentNode && factory(this.parentNode).children; -if (c$) { -return c$[Array.prototype.indexOf.call(c$, this.node) + 1]; -} +return TreeApi.Logical.getNextElementSibling(this.node); }, configurable: true }, previousElementSibling: { get: function () { -var c$ = this.parentNode && factory(this.parentNode).children; -if (c$) { -return c$[Array.prototype.indexOf.call(c$, this.node) - 1]; -} +return TreeApi.Logical.getPreviousElementSibling(this.node); }, configurable: true }, @@ -900,7 +1136,7 @@ this._clear(); var d = document.createElement('div'); d.innerHTML = text; -var c$ = arrayCopyChildNodes(d); +var c$ = TreeApi.arrayCopyChildNodes(d); for (var i = 0; i < c$.length; i++) { this.appendChild(c$[i]); } @@ -909,31 +1145,23 @@ configurable: true } }); -DomApi.prototype._getComposedInnerHTML = function () { -return getInnerHTML(this.node, true); +DomApi.hasInsertionPoint = function (root) { +return Boolean(root && root._insertionPoints.length); }; -} else { -var forwardMethods = function (m$) { -for (var i = 0; i < m$.length; i++) { -forwardMethod(m$[i]); +}()); +(function () { +'use strict'; +var Settings = Polymer.Settings; +var TreeApi = Polymer.TreeApi; +var DomApi = Polymer.DomApi; +if (!Settings.useShadow) { +return; } -}; -var forwardMethod = function (method) { -DomApi.prototype[method] = function () { -return this.node[method].apply(this.node, arguments); -}; -}; -forwardMethods([ -'cloneNode', -'appendChild', -'insertBefore', -'removeChild', -'replaceChild' -]); -DomApi.prototype.querySelectorAll = function (selector) { -return arrayCopy(this.node.querySelectorAll(selector)); -}; -DomApi.prototype.getOwnerRoot = function () { +Polymer.Base.extend(DomApi.prototype, { +querySelectorAll: function (selector) { +return TreeApi.arrayCopy(this.node.querySelectorAll(selector)); +}, +getOwnerRoot: function () { var n = this.node; while (n) { if (n.nodeType === Node.DOCUMENT_FRAGMENT_NODE && n.host) { @@ -941,31 +1169,38 @@ } n = n.parentNode; } -}; -DomApi.prototype.importNode = function (externalNode, deep) { +}, +importNode: function (externalNode, deep) { var doc = this.node instanceof Document ? this.node : this.node.ownerDocument; return doc.importNode(externalNode, deep); -}; -DomApi.prototype.getDestinationInsertionPoints = function () { +}, +getDestinationInsertionPoints: function () { var n$ = this.node.getDestinationInsertionPoints && this.node.getDestinationInsertionPoints(); -return n$ ? arrayCopy(n$) : []; -}; -DomApi.prototype.getDistributedNodes = function () { +return n$ ? TreeApi.arrayCopy(n$) : []; +}, +getDistributedNodes: function () { var n$ = this.node.getDistributedNodes && this.node.getDistributedNodes(); -return n$ ? arrayCopy(n$) : []; -}; -DomApi.prototype._distributeParent = function () { -}; +return n$ ? TreeApi.arrayCopy(n$) : []; +} +}); Object.defineProperties(DomApi.prototype, { +activeElement: { +get: function () { +var node = DomApi.wrap(this.node); +var activeElement = node.activeElement; +return node.contains(activeElement) ? activeElement : null; +}, +configurable: true +}, childNodes: { get: function () { -return arrayCopyChildNodes(this.node); +return TreeApi.arrayCopyChildNodes(this.node); }, configurable: true }, children: { get: function () { -return arrayCopyChildren(this.node); +return TreeApi.arrayCopyChildren(this.node); }, configurable: true }, @@ -988,6 +1223,26 @@ configurable: true } }); +var forwardMethods = function (m$) { +for (var i = 0; i < m$.length; i++) { +forwardMethod(m$[i]); +} +}; +var forwardMethod = function (method) { +DomApi.prototype[method] = function () { +return this.node[method].apply(this.node, arguments); +}; +}; +forwardMethods([ +'cloneNode', +'appendChild', +'insertBefore', +'removeChild', +'replaceChild', +'setAttribute', +'removeAttribute', +'querySelector' +]); var forwardProperties = function (f$) { for (var i = 0; i < f$.length; i++) { forwardProperty(f$[i]); @@ -1012,120 +1267,7 @@ 'nextElementSibling', 'previousElementSibling' ]); -} -var CONTENT = 'content'; -function factory(node, patch) { -node = node || document; -if (!node.__domApi) { -node.__domApi = new DomApi(node, patch); -} -return node.__domApi; -} -; -function hasDomApi(node) { -return Boolean(node.__domApi); -} -; -Polymer.dom = function (obj, patch) { -if (obj instanceof Event) { -return Polymer.EventApi.factory(obj); -} else { -return factory(obj, patch); -} -}; -function getLightChildren(node) { -var children = node._lightChildren; -return children ? children : node.childNodes; -} -function getComposedChildren(node) { -if (!node._composedChildren) { -node._composedChildren = arrayCopyChildNodes(node); -} -return node._composedChildren; -} -function addToComposedParent(parent, node, ref_node) { -var children = getComposedChildren(parent); -var i = ref_node ? children.indexOf(ref_node) : -1; -if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { -var fragChildren = getComposedChildren(node); -for (var j = 0; j < fragChildren.length; j++) { -addNodeToComposedChildren(fragChildren[j], parent, children, i + j); -} -node._composedChildren = null; -} else { -addNodeToComposedChildren(node, parent, children, i); -} -} -function getComposedParent(node) { -return node.__patched ? node._composedParent : node.parentNode; -} -function addNodeToComposedChildren(node, parent, children, i) { -node._composedParent = parent; -children.splice(i >= 0 ? i : children.length, 0, node); -} -function removeFromComposedParent(parent, node) { -node._composedParent = null; -if (parent) { -var children = getComposedChildren(parent); -var i = children.indexOf(node); -if (i >= 0) { -children.splice(i, 1); -} -} -} -function saveLightChildrenIfNeeded(node) { -if (!node._lightChildren) { -var c$ = arrayCopyChildNodes(node); -for (var i = 0, l = c$.length, child; i < l && (child = c$[i]); i++) { -child._lightParent = child._lightParent || node; -} -node._lightChildren = c$; -} -} -function arrayCopyChildNodes(parent) { -var copy = [], i = 0; -for (var n = parent.firstChild; n; n = n.nextSibling) { -copy[i++] = n; -} -return copy; -} -function arrayCopyChildren(parent) { -var copy = [], i = 0; -for (var n = parent.firstElementChild; n; n = n.nextElementSibling) { -copy[i++] = n; -} -return copy; -} -function arrayCopy(a$) { -var l = a$.length; -var copy = new Array(l); -for (var i = 0; i < l; i++) { -copy[i] = a$[i]; -} -return copy; -} -function hasInsertionPoint(root) { -return Boolean(root && root._insertionPoints.length); -} -var p = Element.prototype; -var matchesSelector = p.matches || p.matchesSelector || p.mozMatchesSelector || p.msMatchesSelector || p.oMatchesSelector || p.webkitMatchesSelector; -return { -getLightChildren: getLightChildren, -getComposedParent: getComposedParent, -getComposedChildren: getComposedChildren, -removeFromComposedParent: removeFromComposedParent, -saveLightChildrenIfNeeded: saveLightChildrenIfNeeded, -matchesSelector: matchesSelector, -hasInsertionPoint: hasInsertionPoint, -ctor: DomApi, -factory: factory, -hasDomApi: hasDomApi, -arrayCopy: arrayCopy, -arrayCopyChildNodes: arrayCopyChildNodes, -arrayCopyChildren: arrayCopyChildren, -wrap: wrap -}; -}(); +}()); Polymer.Base.extend(Polymer.dom, { _flushGuard: 0, _FLUSH_MAX: 100, @@ -1137,8 +1279,8 @@ this._flushGuard = 0; this._prepareFlush(); while (this._debouncers.length && this._flushGuard < this._FLUSH_MAX) { -for (var i = 0; i < this._debouncers.length; i++) { -this._debouncers[i].complete(); +while (this._debouncers.length) { +this._debouncers.shift().complete(); } if (this._finishDebouncer) { this._finishDebouncer.complete(); @@ -1212,10 +1354,18 @@ get path() { if (!this.event._path) { var path = []; -var o = this.rootTarget; -while (o) { -path.push(o); -o = Polymer.dom(o).parentNode || o.host; +var current = this.rootTarget; +while (current) { +path.push(current); +var insertionPoints = Polymer.dom(current).getDestinationInsertionPoints(); +if (insertionPoints.length) { +for (var i = 0; i < insertionPoints.length - 1; i++) { +path.push(insertionPoints[i]); +} +current = insertionPoints[insertionPoints.length - 1]; +} else { +current = Polymer.dom(current).parentNode || current.host; +} } path.push(window); this.event._path = path; @@ -1235,6 +1385,7 @@ (function () { 'use strict'; var DomApi = Polymer.DomApi.ctor; +var useShadow = Polymer.Settings.useShadow; Object.defineProperty(DomApi.prototype, 'classList', { get: function () { if (!this._classList) { @@ -1251,15 +1402,20 @@ DomApi.ClassList.prototype = { add: function () { this.node.classList.add.apply(this.node.classList, arguments); -this.domApi._distributeParent(); +this._distributeParent(); }, remove: function () { this.node.classList.remove.apply(this.node.classList, arguments); -this.domApi._distributeParent(); +this._distributeParent(); }, toggle: function () { this.node.classList.toggle.apply(this.node.classList, arguments); -this.domApi._distributeParent(); +this._distributeParent(); +}, +_distributeParent: function () { +if (!useShadow) { +this.domApi._maybeDistributeParent(); +} }, contains: function () { return this.node.classList.contains.apply(this.node.classList, arguments); @@ -1522,21 +1678,34 @@ } }()); (function () { -var hasDomApi = Polymer.DomApi.hasDomApi; +var DomApi = Polymer.DomApi; +var TreeApi = Polymer.TreeApi; Polymer.Base._addFeature({ _prepShady: function () { this._useContent = this._useContent || Boolean(this._template); }, +_setupShady: function () { +this.shadyRoot = null; +if (!this.__domApi) { +this.__domApi = null; +} +if (!this.__dom) { +this.__dom = null; +} +if (!this._ownerShadyRoot) { +this._ownerShadyRoot = undefined; +} +}, _poolContent: function () { if (this._useContent) { -saveLightChildrenIfNeeded(this); +TreeApi.Logical.saveChildNodes(this); } }, _setupRoot: function () { if (this._useContent) { this._createLocalRoot(); if (!this.dataHost) { -upgradeLightChildren(this._lightChildren); +upgradeLogicalChildren(TreeApi.Logical.getChildNodes(this)); } } }, @@ -1547,11 +1716,11 @@ this.shadyRoot._isShadyRoot = true; this.shadyRoot._dirtyRoots = []; var i$ = this.shadyRoot._insertionPoints = !this._notes || this._notes._hasContent ? this.shadyRoot.querySelectorAll('content') : []; -saveLightChildrenIfNeeded(this.shadyRoot); +TreeApi.Logical.saveChildNodes(this.shadyRoot); for (var i = 0, c; i < i$.length; i++) { c = i$[i]; -saveLightChildrenIfNeeded(c); -saveLightChildrenIfNeeded(c.parentNode); +TreeApi.Logical.saveChildNodes(c); +TreeApi.Logical.saveChildNodes(c.parentNode); } this.shadyRoot.host = this; }, @@ -1561,23 +1730,24 @@ }, distributeContent: function (updateInsertionPoints) { if (this.shadyRoot) { -var dom = Polymer.dom(this); -if (updateInsertionPoints) { -dom._updateInsertionPoints(this); -} +this.shadyRoot._invalidInsertionPoints = this.shadyRoot._invalidInsertionPoints || updateInsertionPoints; var host = getTopDistributingHost(this); -dom._lazyDistribute(host); +Polymer.dom(this)._lazyDistribute(host); } }, _distributeContent: function () { if (this._useContent && !this.shadyRoot._distributionClean) { +if (this.shadyRoot._invalidInsertionPoints) { +Polymer.dom(this)._updateInsertionPoints(this); +this.shadyRoot._invalidInsertionPoints = false; +} this._beginDistribute(); this._distributeDirtyRoots(); this._finishDistribute(); } }, _beginDistribute: function () { -if (this._useContent && hasInsertionPoint(this.shadyRoot)) { +if (this._useContent && DomApi.hasInsertionPoint(this.shadyRoot)) { this._resetDistribution(); this._distributePool(this.shadyRoot, this._collectPool()); } @@ -1592,13 +1762,12 @@ _finishDistribute: function () { if (this._useContent) { this.shadyRoot._distributionClean = true; -if (hasInsertionPoint(this.shadyRoot)) { +if (DomApi.hasInsertionPoint(this.shadyRoot)) { this._composeTree(); notifyContentObservers(this.shadyRoot); } else { if (!this.shadyRoot._hasDistributed) { -this.textContent = ''; -this._composedChildren = null; +TreeApi.Composed.clearChildNodes(this); this.appendChild(this.shadyRoot); } else { var children = this._composeNode(this); @@ -1613,10 +1782,10 @@ }, elementMatches: function (selector, node) { node = node || this; -return matchesSelector.call(node, selector); +return DomApi.matchesSelector.call(node, selector); }, _resetDistribution: function () { -var children = getLightChildren(this); +var children = TreeApi.Logical.getChildNodes(this); for (var i = 0; i < children.length; i++) { var child = children[i]; if (child._destinationInsertionPoints) { @@ -1634,7 +1803,7 @@ }, _collectPool: function () { var pool = []; -var children = getLightChildren(this); +var children = TreeApi.Logical.getChildNodes(this); for (var i = 0; i < children.length; i++) { var child = children[i]; if (isInsertionPoint(child)) { @@ -1666,7 +1835,7 @@ } } if (!anyDistributed) { -var children = getLightChildren(content); +var children = TreeApi.Logical.getChildNodes(content); for (var j = 0; j < children.length; j++) { distributeNodeInto(children[j], content); } @@ -1676,7 +1845,7 @@ this._updateChildNodes(this, this._composeNode(this)); var p$ = this.shadyRoot._insertionPoints; for (var i = 0, l = p$.length, p, parent; i < l && (p = p$[i]); i++) { -parent = p._lightParent || p.parentNode; +parent = TreeApi.Logical.getParentNode(p); if (!parent._useContent && parent !== this && parent !== this.shadyRoot) { this._updateChildNodes(parent, this._composeNode(parent)); } @@ -1684,7 +1853,7 @@ }, _composeNode: function (node) { var children = []; -var c$ = getLightChildren(node.shadyRoot || node); +var c$ = TreeApi.Logical.getChildNodes(node.shadyRoot || node); for (var i = 0; i < c$.length; i++) { var child = c$[i]; if (isInsertionPoint(child)) { @@ -1702,12 +1871,12 @@ return children; }, _updateChildNodes: function (container, children) { -var composed = getComposedChildren(container); +var composed = TreeApi.Composed.getChildNodes(container); var splices = Polymer.ArraySplice.calculateSplices(children, composed); for (var i = 0, d = 0, s; i < splices.length && (s = splices[i]); i++) { for (var j = 0, n; j < s.removed.length && (n = s.removed[j]); j++) { -if (getComposedParent(n) === container) { -remove(n); +if (TreeApi.Composed.getParentNode(n) === container) { +TreeApi.Composed.removeChild(container, n); } composed.splice(s.index + d, 1); } @@ -1717,11 +1886,10 @@ next = composed[s.index]; for (var j = s.index, n; j < s.index + s.addedCount; j++) { n = children[j]; -insertBefore(container, n, next); +TreeApi.Composed.insertBefore(container, n, next); composed.splice(j, 0, n); } } -ensureComposedParent(container, children); }, _matchesContentSelect: function (node, contentElement) { var select = contentElement.getAttribute('select'); @@ -1746,13 +1914,6 @@ _elementRemove: function () { } }); -var saveLightChildrenIfNeeded = Polymer.DomApi.saveLightChildrenIfNeeded; -var getLightChildren = Polymer.DomApi.getLightChildren; -var matchesSelector = Polymer.DomApi.matchesSelector; -var hasInsertionPoint = Polymer.DomApi.hasInsertionPoint; -var getComposedChildren = Polymer.DomApi.getComposedChildren; -var getComposedParent = Polymer.DomApi.getComposedParent; -var removeFromComposedParent = Polymer.DomApi.removeFromComposedParent; function distributeNodeInto(child, insertionPoint) { insertionPoint._distributedNodes.push(child); var points = child._destinationInsertionPoints; @@ -1774,8 +1935,8 @@ } } function maybeRedistributeParent(content, host) { -var parent = content._lightParent; -if (parent && parent.shadyRoot && hasInsertionPoint(parent.shadyRoot) && parent.shadyRoot._distributionClean) { +var parent = TreeApi.Logical.getParentNode(content); +if (parent && parent.shadyRoot && DomApi.hasInsertionPoint(parent.shadyRoot) && parent.shadyRoot._distributionClean) { parent.shadyRoot._distributionClean = false; host.shadyRoot._dirtyRoots.push(parent); } @@ -1787,29 +1948,6 @@ function isInsertionPoint(node) { return node.localName == 'content'; } -var nativeInsertBefore = Element.prototype.insertBefore; -var nativeRemoveChild = Element.prototype.removeChild; -function insertBefore(parentNode, newChild, refChild) { -var newChildParent = getComposedParent(newChild); -if (newChildParent !== parentNode) { -removeFromComposedParent(newChildParent, newChild); -} -remove(newChild); -nativeInsertBefore.call(parentNode, newChild, refChild || null); -newChild._composedParent = parentNode; -} -function remove(node) { -var parentNode = getComposedParent(node); -if (parentNode) { -node._composedParent = null; -nativeRemoveChild.call(parentNode, node); -} -} -function ensureComposedParent(parent, children) { -for (var i = 0, n; i < children.length; i++) { -children[i]._composedParent = parent; -} -} function getTopDistributingHost(host) { while (host && hostNeedsRedistribution(host)) { host = host.domHost; @@ -1817,10 +1955,10 @@ return host; } function hostNeedsRedistribution(host) { -var c$ = Polymer.dom(host).children; +var c$ = TreeApi.Logical.getChildNodes(host); for (var i = 0, c; i < c$.length; i++) { c = c$[i]; -if (c.localName === 'content') { +if (c.localName && c.localName === 'content') { return host.domHost; } } @@ -1828,18 +1966,18 @@ function notifyContentObservers(root) { for (var i = 0, c; i < root._insertionPoints.length; i++) { c = root._insertionPoints[i]; -if (hasDomApi(c)) { +if (DomApi.hasApi(c)) { Polymer.dom(c).notifyObserver(); } } } function notifyInitialDistribution(host) { -if (hasDomApi(host)) { +if (DomApi.hasApi(host)) { Polymer.dom(host).notifyObserver(); } } var needsUpgrade = window.CustomElements && !CustomElements.useNative; -function upgradeLightChildren(children) { +function upgradeLogicalChildren(children) { if (needsUpgrade && children) { for (var i = 0; i < children.length; i++) { CustomElements.upgrade(children[i]); @@ -1866,6 +2004,123 @@ } }); } +Polymer.Async = { +_currVal: 0, +_lastVal: 0, +_callbacks: [], +_twiddleContent: 0, +_twiddle: document.createTextNode(''), +run: function (callback, waitTime) { +if (waitTime > 0) { +return ~setTimeout(callback, waitTime); +} else { +this._twiddle.textContent = this._twiddleContent++; +this._callbacks.push(callback); +return this._currVal++; +} +}, +cancel: function (handle) { +if (handle < 0) { +clearTimeout(~handle); +} else { +var idx = handle - this._lastVal; +if (idx >= 0) { +if (!this._callbacks[idx]) { +throw 'invalid async handle: ' + handle; +} +this._callbacks[idx] = null; +} +} +}, +_atEndOfMicrotask: function () { +var len = this._callbacks.length; +for (var i = 0; i < len; i++) { +var cb = this._callbacks[i]; +if (cb) { +try { +cb(); +} catch (e) { +i++; +this._callbacks.splice(0, i); +this._lastVal += i; +this._twiddle.textContent = this._twiddleContent++; +throw e; +} +} +} +this._callbacks.splice(0, len); +this._lastVal += len; +} +}; +new window.MutationObserver(function () { +Polymer.Async._atEndOfMicrotask(); +}).observe(Polymer.Async._twiddle, { characterData: true }); +Polymer.Debounce = function () { +var Async = Polymer.Async; +var Debouncer = function (context) { +this.context = context; +var self = this; +this.boundComplete = function () { +self.complete(); +}; +}; +Debouncer.prototype = { +go: function (callback, wait) { +var h; +this.finish = function () { +Async.cancel(h); +}; +h = Async.run(this.boundComplete, wait); +this.callback = callback; +}, +stop: function () { +if (this.finish) { +this.finish(); +this.finish = null; +} +}, +complete: function () { +if (this.finish) { +this.stop(); +this.callback.call(this.context); +} +} +}; +function debounce(debouncer, callback, wait) { +if (debouncer) { +debouncer.stop(); +} else { +debouncer = new Debouncer(this); +} +debouncer.go(callback, wait); +return debouncer; +} +return debounce; +}(); +Polymer.Base._addFeature({ +_setupDebouncers: function () { +this._debouncers = {}; +}, +debounce: function (jobName, callback, wait) { +return this._debouncers[jobName] = Polymer.Debounce.call(this, this._debouncers[jobName], callback, wait); +}, +isDebouncerActive: function (jobName) { +var debouncer = this._debouncers[jobName]; +return !!(debouncer && debouncer.finish); +}, +flushDebouncer: function (jobName) { +var debouncer = this._debouncers[jobName]; +if (debouncer) { +debouncer.complete(); +} +}, +cancelDebouncer: function (jobName) { +var debouncer = this._debouncers[jobName]; +if (debouncer) { +debouncer.stop(); +} +} +}); Polymer.DomModule = document.createElement('dom-module'); Polymer.Base._addFeature({ _registerFeatures: function () {
diff --git a/third_party/polymer/v1_0/components-chromium/polymer/polymer-mini.html b/third_party/polymer/v1_0/components-chromium/polymer/polymer-mini.html index eb76276..176bf18 100644 --- a/third_party/polymer/v1_0/components-chromium/polymer/polymer-mini.html +++ b/third_party/polymer/v1_0/components-chromium/polymer/polymer-mini.html
@@ -8,4 +8,6 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt --><html><head><link rel="import" href="polymer-micro.html"> + + </head><body><script src="polymer-mini-extracted.js"></script></body></html> \ No newline at end of file
diff --git a/third_party/polymer/v1_0/components-chromium/polymer/polymer.html b/third_party/polymer/v1_0/components-chromium/polymer/polymer.html index 1fea268..7f7a107 100644 --- a/third_party/polymer/v1_0/components-chromium/polymer/polymer.html +++ b/third_party/polymer/v1_0/components-chromium/polymer/polymer.html
@@ -1,13 +1,5 @@ <!-- @license -Copyright (c) 2015 The Polymer Project Authors. All rights reserved. -This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt -The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt -The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt -Code distributed by Google as part of the polymer project is also -subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt ---><!-- -@license Copyright (c) 2014 The Polymer Project Authors. All rights reserved. This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt @@ -16,4 +8,6 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt --><html><head><link rel="import" href="polymer-mini.html"> + + </head><body><script src="polymer-extracted.js"></script></body></html> \ No newline at end of file
diff --git a/third_party/polymer/v1_0/components_summary.txt b/third_party/polymer/v1_0/components_summary.txt index 2254877..0bf0492 100644 --- a/third_party/polymer/v1_0/components_summary.txt +++ b/third_party/polymer/v1_0/components_summary.txt
@@ -41,18 +41,18 @@ Tree link: https://github.com/PolymerElements/iron-checked-element-behavior/tree/v1.0.4 Name: iron-collapse -Version: 1.0.5 +Version: 1.0.6 Repository: git://github.com/PolymerElements/iron-collapse.git -Tag: v1.0.5 -Revision: 4d489766568b823d39e5032e2cbb4b85758f1a88 -Tree link: https://github.com/PolymerElements/iron-collapse/tree/v1.0.5 +Tag: v1.0.6 +Revision: afd2b928c84fb1a1d6069b05a36c37b269f25209 +Tree link: https://github.com/PolymerElements/iron-collapse/tree/v1.0.6 Name: iron-dropdown -Version: 1.1.0 +Version: 1.2.0 Repository: git://github.com/PolymerElements/iron-dropdown.git -Tag: v1.1.0 -Revision: b09b0d57ba917bac9315de4761373d88e85ac52e -Tree link: https://github.com/PolymerElements/iron-dropdown/tree/v1.1.0 +Tag: v1.2.0 +Revision: f864191c6ffbd3aaddea8102102ab40137046327 +Tree link: https://github.com/PolymerElements/iron-dropdown/tree/v1.2.0 Name: iron-fit-behavior Version: 1.0.5 @@ -83,11 +83,11 @@ Tree link: https://github.com/PolymerElements/iron-icon/tree/v1.0.7 Name: iron-icons -Version: 1.1.2 +Version: 1.1.3 Repository: git://github.com/PolymerElements/iron-icons.git -Tag: v1.1.2 -Revision: 14a4138f7da753ee8bebeb9ed4abd6053b2496dd -Tree link: https://github.com/PolymerElements/iron-icons/tree/v1.1.2 +Tag: v1.1.3 +Revision: c13869b57a9464dfc3a1f26e89858f8be37e7441 +Tree link: https://github.com/PolymerElements/iron-icons/tree/v1.1.3 Name: iron-iconset-svg Version: 1.0.9 @@ -97,11 +97,11 @@ Tree link: https://github.com/PolymerElements/iron-iconset-svg/tree/v1.0.9 Name: iron-image -Version: 1.2.0 +Version: 1.2.2 Repository: git://github.com/PolymerElements/iron-image.git -Tag: v1.2.0 -Revision: 29ec1efa9af2f7ea17e6b819ae4e9ab941b04c71 -Tree link: https://github.com/PolymerElements/iron-image/tree/v1.2.0 +Tag: v1.2.2 +Revision: 2b9e5466ce0809a8503c369c9c500ec487dee224 +Tree link: https://github.com/PolymerElements/iron-image/tree/v1.2.2 Name: iron-input Version: 1.0.8 @@ -125,11 +125,11 @@ Tree link: https://github.com/PolymerElements/iron-media-query/tree/v1.0.8 Name: iron-menu-behavior -Version: 1.0.7 +Version: 1.1.0 Repository: git://github.com/PolymerElements/iron-menu-behavior.git -Tag: v1.0.7 -Revision: e5ca054bbe1c24fbc43adb78217ccc50d9223601 -Tree link: https://github.com/PolymerElements/iron-menu-behavior/tree/v1.0.7 +Tag: v1.1.0 +Revision: b18d5478f1d4d6befb15533716d60d5772f8e812 +Tree link: https://github.com/PolymerElements/iron-menu-behavior/tree/v1.1.0 Name: iron-meta Version: 1.1.1 @@ -139,18 +139,18 @@ Tree link: https://github.com/PolymerElements/iron-meta/tree/v1.1.1 Name: iron-overlay-behavior -Version: 1.1.2 +Version: 1.3.0 Repository: git://github.com/PolymerElements/iron-overlay-behavior.git -Tag: v1.1.2 -Revision: 40e39a971474f48f5c2c8ee7b8568a0ad5426bd8 -Tree link: https://github.com/PolymerElements/iron-overlay-behavior/tree/v1.1.2 +Tag: v1.3.0 +Revision: b488ce94ec1c17c3a5491af1a2fba2f7382684da +Tree link: https://github.com/PolymerElements/iron-overlay-behavior/tree/v1.3.0 Name: iron-pages -Version: 1.0.5 +Version: 1.0.7 Repository: git://github.com/PolymerElements/iron-pages.git -Tag: v1.0.5 -Revision: e248782cb5595849e08454ae863d1ca3b7b94e0b -Tree link: https://github.com/PolymerElements/iron-pages/tree/v1.0.5 +Tag: v1.0.7 +Revision: 395e253134488b1cab13072890ca5a7eb1b0fd54 +Tree link: https://github.com/PolymerElements/iron-pages/tree/v1.0.7 Name: iron-range-behavior Version: 1.0.4 @@ -166,12 +166,19 @@ Revision: 85de8ba28be2bf17c81d6436ef1119022b003674 Tree link: https://github.com/PolymerElements/iron-resizable-behavior/tree/v1.0.2 +Name: iron-scroll-target-behavior +Version: 1.0.3 +Repository: git://github.com/PolymerElements/iron-scroll-target-behavior.git +Tag: v1.0.3 +Revision: 7ce943d4bc9daf9704174f58a6c5104fe3097986 +Tree link: https://github.com/PolymerElements/iron-scroll-target-behavior/tree/v1.0.3 + Name: iron-selector -Version: 1.0.8 +Version: 1.2.1 Repository: git://github.com/PolymerElements/iron-selector.git -Tag: v1.0.8 -Revision: e9a66727f3da0446f04956d4e4f1dcd51cdec2ff -Tree link: https://github.com/PolymerElements/iron-selector/tree/v1.0.8 +Tag: v1.2.1 +Revision: 1e6a7ee05e5ff350472ffc1ee780f145a7606b7b +Tree link: https://github.com/PolymerElements/iron-selector/tree/v1.2.1 Name: iron-test-helpers Version: 1.1.3 @@ -188,18 +195,18 @@ Tree link: https://github.com/PolymerElements/iron-validatable-behavior/tree/v1.0.5 Name: neon-animation -Version: 1.0.9 +Version: 1.1.0 Repository: git://github.com/PolymerElements/neon-animation.git -Tag: v1.0.9 -Revision: ab40f4e4a777153cb5c27c9b62ee82b94d53eb76 -Tree link: https://github.com/PolymerElements/neon-animation/tree/v1.0.9 +Tag: v1.1.0 +Revision: 564e0dc92724f2bc0bf0f76bf2ac392d4905b2ff +Tree link: https://github.com/PolymerElements/neon-animation/tree/v1.1.0 Name: paper-behaviors -Version: 1.0.10 +Version: 1.0.11 Repository: git://github.com/PolymerElements/paper-behaviors.git -Tag: v1.0.10 -Revision: 4b244a542af2c6c271498dfb98b00ed284df1d6a -Tree link: https://github.com/PolymerElements/paper-behaviors/tree/v1.0.10 +Tag: v1.0.11 +Revision: e3c1ab0c72905b58fb4d9adc2921ea73b5c085a5 +Tree link: https://github.com/PolymerElements/paper-behaviors/tree/v1.0.11 Name: paper-button Version: 1.0.11 @@ -209,18 +216,18 @@ Tree link: https://github.com/PolymerElements/paper-button/tree/v1.0.11 Name: paper-card -Version: 1.0.9 +Version: 1.1.1 Repository: git://github.com/PolymerElements/paper-card.git -Tag: v1.0.9 -Revision: 9733d402e93270be96bdafb4b796aea598a7db26 -Tree link: https://github.com/PolymerElements/paper-card/tree/v1.0.9 +Tag: v1.1.1 +Revision: 8ddd91424414ad32147c4c0c6812aff348da6114 +Tree link: https://github.com/PolymerElements/paper-card/tree/v1.1.1 Name: paper-checkbox -Version: 1.1.0 +Version: 1.1.1 Repository: git://github.com/PolymerElements/paper-checkbox.git -Tag: v1.1.0 -Revision: ee47421a36034bdf540fabeea713b4b11a7c11ac -Tree link: https://github.com/PolymerElements/paper-checkbox/tree/v1.1.0 +Tag: v1.1.1 +Revision: ce52f51c537d27f414fec7298b9ebff4248044eb +Tree link: https://github.com/PolymerElements/paper-checkbox/tree/v1.1.1 Name: paper-dialog Version: 1.0.3 @@ -230,11 +237,11 @@ Tree link: https://github.com/PolymerElements/paper-dialog/tree/v1.0.3 Name: paper-dialog-behavior -Version: 1.1.0 +Version: 1.1.1 Repository: git://github.com/PolymerElements/paper-dialog-behavior.git -Tag: v1.1.0 -Revision: e41d36a798df2ee2f9f49fb27dd7712e55366595 -Tree link: https://github.com/PolymerElements/paper-dialog-behavior/tree/v1.1.0 +Tag: v1.1.1 +Revision: 5831039e9f878c63478064abed115c98992b5504 +Tree link: https://github.com/PolymerElements/paper-dialog-behavior/tree/v1.1.1 Name: paper-drawer-panel Version: 1.0.6 @@ -244,11 +251,11 @@ Tree link: https://github.com/PolymerElements/paper-drawer-panel/tree/v1.0.6 Name: paper-dropdown-menu -Version: 1.1.2 +Version: 1.1.3 Repository: git://github.com/PolymerElements/paper-dropdown-menu.git -Tag: v1.1.2 -Revision: 704fbc176592da9bb3f23e138ef8f3b0533d865b -Tree link: https://github.com/PolymerElements/paper-dropdown-menu/tree/v1.1.2 +Tag: v1.1.3 +Revision: 1ca32e3eeb568f1ae356a205c1812744fdd65950 +Tree link: https://github.com/PolymerElements/paper-dropdown-menu/tree/v1.1.3 Name: paper-fab Version: 1.1.2 @@ -258,11 +265,11 @@ Tree link: https://github.com/PolymerElements/paper-fab/tree/v1.1.2 Name: paper-header-panel -Version: 1.1.2 +Version: 1.1.3 Repository: git://github.com/PolymerElements/paper-header-panel.git -Tag: v1.1.2 -Revision: ea23746cc0e399e9e4f75f19cf514e261d89cca1 -Tree link: https://github.com/PolymerElements/paper-header-panel/tree/v1.1.2 +Tag: v1.1.3 +Revision: a36f782c6687aa08ce811f597a495a4f09137c75 +Tree link: https://github.com/PolymerElements/paper-header-panel/tree/v1.1.3 Name: paper-icon-button Version: 1.0.6 @@ -286,11 +293,11 @@ Tree link: https://github.com/PolymerElements/paper-item/tree/v1.1.3 Name: paper-material -Version: 1.0.5 +Version: 1.0.6 Repository: git://github.com/PolymerElements/paper-material.git -Tag: v1.0.5 -Revision: 8a906004d8d0071004aafcd4bc4536ed2cf14bde -Tree link: https://github.com/PolymerElements/paper-material/tree/v1.0.5 +Tag: v1.0.6 +Revision: 6aef0896fcbc25f9f5bd1dd55f7679e6ab7f92ad +Tree link: https://github.com/PolymerElements/paper-material/tree/v1.0.6 Name: paper-menu Version: 1.2.2 @@ -349,18 +356,18 @@ Tree link: https://github.com/PolymerElements/paper-spinner/tree/v1.1.0 Name: paper-styles -Version: 1.1.2 +Version: 1.1.3 Repository: git://github.com/PolymerElements/paper-styles.git -Tag: v1.1.2 -Revision: 7b97fa9d2c190bec9ef2d771d91f47b40a27f3be -Tree link: https://github.com/PolymerElements/paper-styles/tree/v1.1.2 +Tag: v1.1.3 +Revision: 6239484bc25ca1f56e7263ac952c63edd8298853 +Tree link: https://github.com/PolymerElements/paper-styles/tree/v1.1.3 Name: paper-tabs -Version: 1.2.5 +Version: 1.3.3 Repository: git://github.com/PolymerElements/paper-tabs.git -Tag: v1.2.5 -Revision: 3892c715cc89199160a9fe6ba7b19441bb44c192 -Tree link: https://github.com/PolymerElements/paper-tabs/tree/v1.2.5 +Tag: v1.3.3 +Revision: 4c53ca15663b6f4b13b20a8aab6af8dea5bfc369 +Tree link: https://github.com/PolymerElements/paper-tabs/tree/v1.3.3 Name: paper-toggle-button Version: 1.0.14 @@ -370,11 +377,11 @@ Tree link: https://github.com/PolymerElements/paper-toggle-button/tree/v1.0.14 Name: paper-toolbar -Version: 1.1.2 +Version: 1.1.4 Repository: git://github.com/PolymerElements/paper-toolbar.git -Tag: v1.1.2 -Revision: 1a0b9ec5c97b0751ab237670124d11bfdabcb850 -Tree link: https://github.com/PolymerElements/paper-toolbar/tree/v1.1.2 +Tag: v1.1.4 +Revision: e9d582733fab4d0698c680047d7faaab1a35196c +Tree link: https://github.com/PolymerElements/paper-toolbar/tree/v1.1.4 Name: paper-tooltip Version: 1.1.1 @@ -384,16 +391,16 @@ Tree link: https://github.com/PolymerElements/paper-tooltip/tree/v1.1.1 Name: polymer -Version: 1.2.3 +Version: 1.2.4 Repository: git://github.com/Polymer/polymer.git -Tag: v1.2.3 -Revision: aa535d1675342007cbf64dc9c66497cf74cbc616 -Tree link: https://github.com/Polymer/polymer/tree/v1.2.3 +Tag: v1.2.4 +Revision: 284332a905ddd60eab11901a82ac037976175cf8 +Tree link: https://github.com/Polymer/polymer/tree/v1.2.4 Name: polymer-externs -Version: 1.0.15 +Version: 1.0.16 Repository: git://github.com/PolymerLabs/polymer-externs.git -Tag: v1.0.15 -Revision: 972c43cdc030e2162a2127aac63d24ad67ca679c -Tree link: https://github.com/PolymerLabs/polymer-externs/tree/v1.0.15 +Tag: v1.0.16 +Revision: 05696d670d8a283b9b8c17bd6c3d5f4f41443e12 +Tree link: https://github.com/PolymerLabs/polymer-externs/tree/v1.0.16
diff --git a/third_party/yasm/CHROMIUM.diff b/third_party/yasm/CHROMIUM.diff index 764cbf7..80fd767 100644 --- a/third_party/yasm/CHROMIUM.diff +++ b/third_party/yasm/CHROMIUM.diff
@@ -4,9 +4,7 @@ /* version message */ /*@observer@*/ static const char *version_msg[] = { PACKAGE_STRING, -+#if !defined(DONT_EMBED_BUILD_METADATA) || defined(OFFICIAL_BUILD) - "Compiled on " __DATE__ ".", -+#endif +- "Compiled on " __DATE__ ".", "Copyright (c) 2001-2010 Peter Johnson and other Yasm developers.", "Run yasm --license for licensing overview and summary." }; @@ -16,9 +14,7 @@ /* version message */ /*@observer@*/ static const char *version_msg[] = { PACKAGE_STRING, -+#if !defined(DONT_EMBED_BUILD_METADATA) || defined(OFFICIAL_BUILD) - "Compiled on " __DATE__ ".", -+#endif +- "Compiled on " __DATE__ ".", "Copyright (c) 2001-2011 Peter Johnson and other Yasm developers.", "Run yasm --license for licensing overview and summary." };
diff --git a/third_party/yasm/README.chromium b/third_party/yasm/README.chromium index 7006a6341..81b286f 100644 --- a/third_party/yasm/README.chromium +++ b/third_party/yasm/README.chromium
@@ -13,7 +13,7 @@ * https://github.com/yasm/yasm/commit/2bd66514b6b100887c19d8598da38347b3cff40e * https://github.com/yasm/yasm/commit/ab19547382660d81e0b4a0232dccb38f44c52a36 * https://github.com/yasm/yasm/commit/9728322335cba96500861ef766b1546d096e5600 -* CHROMIUM.diff +* CHROMIUM.diff: this patch makes yasm deterministic. See also the yasm.gyp file for a description of the yasm build process.
diff --git a/tools/OWNERS b/tools/OWNERS index ba6446d..309a32bf 100644 --- a/tools/OWNERS +++ b/tools/OWNERS
@@ -45,6 +45,11 @@ per-file roll_angle.py=kbr@chromium.org per-file roll_angle.py=kjellander@chromium.org per-file roll_angle.py=geofflang@chromium.org +per-file roll_webgl_conformance.py=bajones@chromium.org +per-file roll_webgl_conformance.py=kbr@chromium.org +per-file roll_webgl_conformance.py=kjellander@chromium.org +per-file roll_webgl_conformance.py=geofflang@chromium.org +per-file roll_webgl_conformance.py=zmo@chromium.org per-file roll_webrtc.py=kjellander@chromium.org per-file safely-roll-deps.py=borenet@chromium.org
diff --git a/tools/android/eclipse/.classpath b/tools/android/eclipse/.classpath index ab36257b..b740bfea 100644 --- a/tools/android/eclipse/.classpath +++ b/tools/android/eclipse/.classpath
@@ -2,7 +2,7 @@ <!-- {% block header_message %} Eclipse classpath. See instructions at -https://code.google.com/p/chromium/wiki/AndroidEclipseDev for setting up Eclipse +https://www.chromium.org/developers/android-eclipse-dev for setting up Eclipse for Chrome Android development. Obsolete entries can be found using: @@ -115,7 +115,6 @@ <classpathentry kind="src" path="out/Debug/gen/enums/content_setting_java"/> <classpathentry kind="src" path="out/Debug/gen/enums/content_settings_type_java"/> <classpathentry kind="src" path="out/Debug/gen/enums/cronet_url_request_java"/> - <classpathentry kind="src" path="out/Debug/gen/enums/enhanced_bookmarks_java_enums_srcjar"/> <classpathentry kind="src" path="out/Debug/gen/enums/gesture_event_type_java"/> <classpathentry kind="src" path="out/Debug/gen/enums/infobar_action_type_java"/> <classpathentry kind="src" path="out/Debug/gen/enums/invalidate_types_java"/>
diff --git a/tools/android/findbugs_plugin/findbugs.xml b/tools/android/findbugs_plugin/findbugs.xml index a1c4b5ee..002e841 100644 --- a/tools/android/findbugs_plugin/findbugs.xml +++ b/tools/android/findbugs_plugin/findbugs.xml
@@ -9,7 +9,7 @@ xsi:noNamespaceSchemaLocation="findbugsplugin.xsd" pluginid="SynchronizedThisDetector" provider="chromium" - website="http://code.google.com/p/chromium/wiki/UseFindBugsForAndroid"> + website="https://chromium.googlesource.com/chromium/src/+/master/docs/use_find_bugs_for_android.md"> <Detector class="org.chromium.tools.findbugs.plugin.SynchronizedThisDetector" reports="CHROMIUM_SYNCHRONIZED_THIS" /> <BugPattern type="CHROMIUM_SYNCHRONIZED_THIS" abbrev="CHROMIUM" category="CORRECTNESS"/>
diff --git a/tools/android/loading/analyze.py b/tools/android/loading/analyze.py index 1b1a2a3..5695e7d 100755 --- a/tools/android/loading/analyze.py +++ b/tools/android/loading/analyze.py
@@ -95,29 +95,36 @@ return '\n'.join(output) -def _LogRequests(url, clear_cache=True, local=False): +def _LogRequests(url, clear_cache=True, local=False, + host_exe="out/Release/chrome", host_profile_dir=None): """Log requests for a web page. Args: url: url to log as string. clear_cache: optional flag to clear the cache. local: log from local (desktop) chrome session. + host_exe: Binary to execute when running locally. + host_profile_dir: Profile dir to use when running locally (if None, a + fresh profile dir will be used). Returns: JSON dict of logged information (ie, a dict that describes JSON). """ device = device_setup.GetFirstDevice() if not local else None - with device_setup.DeviceConnection(device) as connection: + with device_setup.DeviceConnection(device, host_exe=host_exe, + host_profile_dir=host_profile_dir) as connection: trace = trace_recorder.MonitorUrl(connection, url, clear_cache=clear_cache) return trace.ToJsonDict() -def _FullFetch(url, json_output, prefetch, local, prefetch_delay_seconds): +def _FullFetch(url, json_output, prefetch, local, prefetch_delay_seconds, + host_exe, host_profile_dir): """Do a full fetch with optional prefetching.""" if not url.startswith('http'): url = 'http://' + url logging.warning('Cold fetch') - cold_data = _LogRequests(url, local=local) + cold_data = _LogRequests(url, local=local, + host_exe=host_exe, host_profile_dir=host_profile_dir) assert cold_data, 'Cold fetch failed to produce data. Check your phone.' if prefetch: assert not local @@ -258,12 +265,16 @@ parser.add_argument('--prefetch', action='store_true') parser.add_argument('--prefetch_delay_seconds', type=int, default=5) parser.add_argument('--local', action='store_true') + parser.add_argument('--host_exe', default='out/Release/chrome') + parser.add_argument('--host_profile_dir', default=None) args = parser.parse_args(arg_str) _FullFetch(url=args.url, json_output=args.output, prefetch=args.prefetch, prefetch_delay_seconds=args.prefetch_delay_seconds, - local=args.local) + local=args.local, + host_exe=args.host_exe, + host_profile_dir=args.host_profile_dir) def DoFetch(arg_str): @@ -284,7 +295,9 @@ json_output=os.path.join(args.dir, args.site + '.json'), prefetch=True, prefetch_delay_seconds=args.prefetch_delay_seconds, - local=False) + local=False, + host_exe=None, + host_profile_dir=None) def DoLongPole(arg_str):
diff --git a/tools/android/loading/device_setup.py b/tools/android/loading/device_setup.py index 0f24668..c3847078 100644 --- a/tools/android/loading/device_setup.py +++ b/tools/android/loading/device_setup.py
@@ -5,7 +5,10 @@ import contextlib import logging import os +import shutil +import subprocess import sys +import tempfile import time _SRC_DIR = os.path.abspath(os.path.join( @@ -26,6 +29,18 @@ DEFAULT_CHROME_PACKAGE = 'chrome' +@contextlib.contextmanager +def TemporaryDirectory(): + """Returns a freshly-created directory that gets automatically deleted after + usage. + """ + name = tempfile.mkdtemp() + try: + yield name + finally: + shutil.rmtree(name) + + class DeviceSetupException(Exception): def __init__(self, msg): super(DeviceSetupException, self).__init__(msg) @@ -92,7 +107,9 @@ def DeviceConnection(device, package=DEFAULT_CHROME_PACKAGE, hostname=DEVTOOLS_HOSTNAME, - port=DEVTOOLS_PORT): + port=DEVTOOLS_PORT, + host_exe='out/Release/chrome', + host_profile_dir=None): """Context for starting recording on a device. Sets up and restores any device and tracing appropriately @@ -100,7 +117,11 @@ Args: device: Android device, or None for a local run (in which case chrome needs to have been started with --remote-debugging-port=XXX). - package: the key for chrome package info. + package: The key for chrome package info. + port: The port on which to enable remote debugging. + host_exe: The binary to execute when running on the host. + host_profile_dir: The profile dir to use when running on the host (if None, + a fresh profile dir will be used). Returns: A context manager type which evaluates to a DevToolsConnection. @@ -113,16 +134,35 @@ if device: _SetUpDevice(device, package_info) with FlagReplacer(device, command_line_path, new_flags): + host_process = None if device: start_intent = intent.Intent( package=package_info.package, activity=package_info.activity, data='about:blank') device.StartActivity(start_intent, blocking=True) + else: + # Run on the host. + assert os.path.exists(host_exe) + + user_data_dir = host_profile_dir + if not user_data_dir: + user_data_dir = TemporaryDirectory() + + new_flags += ['--user-data-dir=%s' % user_data_dir] + host_process = subprocess.Popen([host_exe] + new_flags, + shell=False) + if device: time.sleep(2) + else: + # TODO(blundell): Figure out why a lower sleep time causes an assertion + # in request_track.py to fire. + time.sleep(10) # If no device, we don't care about chrome startup so skip the about page. with ForwardPort(device, 'tcp:%d' % port, 'localabstract:chrome_devtools_remote'): yield devtools_monitor.DevToolsConnection(hostname, port) + if host_process: + host_process.kill() def SetUpAndExecute(device, package, fn):
diff --git a/tools/clang/scripts/run_tool.py b/tools/clang/scripts/run_tool.py index 4d9a28a..c1267da 100755 --- a/tools/clang/scripts/run_tool.py +++ b/tools/clang/scripts/run_tool.py
@@ -14,7 +14,7 @@ If you only want to run the tool across just chrome/browser and content/browser: run_tool.py <tool> <path/to/compiledb> chrome/browser content/browser -Please see https://code.google.com/p/chromium/wiki/ClangToolRefactoring for more +Please see https://chromium.googlesource.com/chromium/src/+/master/docs/clang_tool_refactoring.md for more information, which documents the entire automated refactoring flow in Chromium. Why use this tool:
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py index ac9606c..322359f6 100755 --- a/tools/clang/scripts/update.py +++ b/tools/clang/scripts/update.py
@@ -24,7 +24,7 @@ import zipfile # Do NOT CHANGE this if you don't know what you're doing -- see -# https://code.google.com/p/chromium/wiki/UpdatingClang +# https://chromium.googlesource.com/chromium/src/+/master/docs/updating_clang.md # Reverting problematic clang rolls is safe, though. CLANG_REVISION = '259396' @@ -374,7 +374,7 @@ print 'Android NDK not found at ' + ANDROID_NDK_DIR print 'The Android NDK is needed to build a Clang whose -fsanitize=address' print 'works on Android. See ' - print 'http://code.google.com/p/chromium/wiki/AndroidBuildInstructions' + print 'https://www.chromium.org/developers/how-tos/android-build-instructions' print 'for how to install the NDK, or pass --without-android.' return 1
diff --git a/tools/clang/translation_unit/test_translation_unit.py b/tools/clang/translation_unit/test_translation_unit.py index 46576b0..0482a787 100755 --- a/tools/clang/translation_unit/test_translation_unit.py +++ b/tools/clang/translation_unit/test_translation_unit.py
@@ -28,7 +28,7 @@ # Before running this test script, please build the translation_unit clang tool # first. This is explained here: -# https://code.google.com/p/chromium/wiki/ClangToolRefactoring +# https://chromium.googlesource.com/chromium/src/+/master/docs/clang_tool_refactoring.md def main(): tools_clang_directory = os.path.dirname(os.path.dirname( os.path.realpath(__file__)))
diff --git a/tools/gn/misc/emacs/gn-mode.el b/tools/gn/misc/emacs/gn-mode.el index 3cb7341d2..6682290 100644 --- a/tools/gn/misc/emacs/gn-mode.el +++ b/tools/gn/misc/emacs/gn-mode.el
@@ -14,7 +14,7 @@ ;; A major mode for editing GN files. GN stands for Generate Ninja. GN is the ;; meta build system used in Chromium. For more information on GN, see the GN -;; manual: <https://code.google.com/p/chromium/wiki/gn> +;; manual: <https://chromium.googlesource.com/chromium/src/+/master/tools/gn/README.md> ;;; To Do:
diff --git a/tools/gritsettings/resource_ids b/tools/gritsettings/resource_ids index 2943776c..fe03946 100644 --- a/tools/gritsettings/resource_ids +++ b/tools/gritsettings/resource_ids
@@ -134,163 +134,160 @@ "structures": [20400], "messages": [20410], }, - "chrome/browser/resources/signin_internals_resources.grd": { - "includes": [21400], - }, "chrome/browser/resources/invalidations_resources.grd": { - "includes": [21600], + "includes": [21400], }, # This file is generated during the build. "<(SHARED_INTERMEDIATE_DIR)/devtools/devtools_resources.grd": { - "includes": [21650], + "includes": [21450], }, "devtools_resources.grd": { - "includes": [21650], + "includes": [21450], }, "chrome/browser/resources/options_resources.grd": { - "includes": [22650], - "structures": [22850], + "includes": [22450], + "structures": [22650], }, "chrome/browser/resources/options_test_resources.grd": { - "includes": [23050], - "structures": [23090], + "includes": [22850], + "structures": [22890], }, "chrome/test/data/webui_test_resources.grd": { - "includes": [23130], - "structures": [23140], + "includes": [22930], + "structures": [22940], }, "cloud_print/virtual_driver/win/install/virtual_driver_setup_resources.grd": { - "messages": [23150], - "includes": [23200], + "messages": [22950], + "includes": [23000], }, "cloud_print/service/win/service_resources.grd": { - "messages": [23250], - "includes": [23350], - "structures": [23400], + "messages": [23050], + "includes": [23150], + "structures": [23200], }, "cloud_print/gcp20/prototype/gcp20_device.grd": { - "messages": [23450], - "includes": [23480], - "structures": [23490], + "messages": [23250], + "includes": [23280], + "structures": [23290], }, "chrome/browser/resources/quota_internals_resources.grd": { - "includes": [23650], + "includes": [23250], }, "content/content_resources.grd": { - "includes": [24150], + "includes": [23950], }, "content/shell/shell_resources.grd": { - "includes": [24650], + "includes": [24450], }, # This file is generated during the build. "<(SHARED_INTERMEDIATE_DIR)/content/browser/tracing/tracing_resources.grd": { - "includes": [24900], + "includes": [24700], }, # iOS resources overlap with android_webview, ash, chromeos and extensions_api, # as these are not used on iOS. "ios/chrome/app/strings/ios_locale_settings.grd": { - "messages": [25150], + "messages": [24950], }, "ios/chrome/app/strings/ios_strings.grd": { - "messages": [25155], + "messages": [24955], }, # Chromium strings and Google Chrome strings must start at the same id. # We only use one file depending on whether we're building Chromium or # Google Chrome. "ios/chrome/app/strings/ios_chromium_strings.grd": { - "messages": [26055], + "messages": [25855], }, "ios/chrome/app/strings/ios_google_chrome_strings.grd": { - "messages": [26055], + "messages": [25855], }, "ios/chrome/app/resources/ios_resources.grd": { - "structures": [26150], + "structures": [25950], "includes": [26160], }, "ios/chrome/app/theme/ios_theme_resources.grd": { - "structures": [26170], + "structures": [25970], }, "ios/chrome/today_extension/strings/ios_today_extension_strings.grd": { - "messages": [26635], + "messages": [26435], }, "ash/ash_strings.grd": { - "messages": [25150], + "messages": [24950], }, "android_webview/ui/aw_resources.grd": { - "includes": [25150], + "includes": [24950], }, "android_webview/ui/aw_strings.grd": { - "messages": [25250], + "messages": [25050], }, "ui/chromeos/resources/ui_chromeos_resources.grd": { - "structures": [25350], + "structures": [25150], }, "ui/chromeos/ui_chromeos_strings.grd": { - "messages": [25450], + "messages": [25250], }, "chrome/common/extensions_api_resources.grd": { - "includes": [25550], + "includes": [25350], }, "extensions/extensions_resources.grd": { - "includes": [25750], + "includes": [25550], }, "extensions/browser/resources/extensions_browser_resources.grd": { - "structures": [25950], + "structures": [25750], }, "extensions/renderer/resources/extensions_renderer_resources.grd": { - "includes": [26000], - "structures": [26100], + "includes": [25800], + "structures": [25900], }, "extensions/extensions_strings.grd": { - "messages": [26150], + "messages": [25950], }, "extensions/shell/app_shell_resources.grd": { - "includes": [26550], + "includes": [26350], }, "chrome/browser/resources/memory_internals_resources.grd": { - "includes": [26650], + "includes": [26450], }, "chrome/browser/resources/password_manager_internals_resources.grd": { - "includes": [26850], + "includes": [26650], }, "device/bluetooth/bluetooth_strings.grd": { - "messages": [27150], + "messages": [26950], }, "ui/file_manager/file_manager_resources.grd": { - "includes": [27260], + "includes": [27060], }, "components/chrome_apps/chrome_apps_resources.grd": { - "includes": [27440], + "includes": [27240], }, "ui/login/login_resources.grd": { - "includes": [27460], + "includes": [27260], }, "chrome/browser/resources/translate_internals_resources.grd": { - "includes": [27470], + "includes": [27270], }, "chrome/browser/resources/sync_file_system_internals_resources.grd": { - "includes": [27480], + "includes": [27280], }, "chrome/app/address_input_strings.grd": { - "messages": [27580], + "messages": [27380], }, "remoting/resources/remoting_strings.grd": { - "messages": [28030], + "messages": [27830], }, "components/components_strings.grd": { - "messages": [28480], + "messages": [28280], }, # Chromium strings and Google Chrome strings must start at the same id. # We only use one file depending on whether we're building Chromium or # Google Chrome. "components/components_chromium_strings.grd": { - "messages": [29750], + "messages": [29550], }, "components/components_google_chrome_strings.grd": { - "messages": [29750], + "messages": [29550], }, "components/resources/components_resources.grd": { - "includes": [29800], + "includes": [29600], }, "components/resources/components_scaled_resources.grd": { "structures": [30150],
diff --git a/tools/ipc_fuzzer/fuzzer/fuzzer.cc b/tools/ipc_fuzzer/fuzzer/fuzzer.cc index 22bbb5c4..f4c8856 100644 --- a/tools/ipc_fuzzer/fuzzer/fuzzer.cc +++ b/tools/ipc_fuzzer/fuzzer/fuzzer.cc
@@ -2001,135 +2001,110 @@ #include "tools/ipc_fuzzer/message_lib/all_messages.h" #include "tools/ipc_fuzzer/message_lib/all_message_null_macros.h" -// Redefine macros to generate generating funtions -#undef IPC_MESSAGE_DECL -#define IPC_MESSAGE_DECL(kind, type, name, in, out, ilist, olist) \ - IPC_##kind##_##type##_FUZZ(name, in, out, ilist, olist) - -#define IPC_EMPTY_CONTROL_FUZZ(name, in, out, ilist, olist) \ - IPC::Message* fuzzer_for_##name(IPC::Message* msg, Fuzzer* fuzzer) { \ - if (msg) { \ - return NULL; \ - } \ - return new name(); \ - } - -#define IPC_EMPTY_ROUTED_FUZZ(name, in, out, ilist, olist) \ - IPC::Message* fuzzer_for_##name(IPC::Message* msg, Fuzzer* fuzzer) { \ - if (msg) { \ - return NULL; \ - } \ - return new name(RandInRange(MAX_FAKE_ROUTING_ID)); \ - } - -#define IPC_ASYNC_CONTROL_FUZZ(name, in, out, ilist, olist) \ - IPC::Message* fuzzer_for_##name(IPC::Message* msg, Fuzzer* fuzzer) { \ - IPC_TUPLE_IN_##in ilist p; \ - if (msg) { \ - name::Read(static_cast<name*>(msg), &p); \ - } \ - if (FuzzParam(&p, fuzzer)) { \ - return new name(IPC_MEMBERS_IN_##in(p)); \ - } \ - std::cerr << "Don't know how to handle " << #name << "\n"; \ - return 0; \ - } - -#define IPC_ASYNC_ROUTED_FUZZ(name, in, out, ilist, olist) \ - IPC::Message* fuzzer_for_##name(IPC::Message* msg, Fuzzer* fuzzer) { \ - IPC_TUPLE_IN_##in ilist p; \ - if (msg) { \ - name::Read(static_cast<name*>(msg), &p); \ - } \ - if (FuzzParam(&p, fuzzer)) { \ - return new name(RandInRange(MAX_FAKE_ROUTING_ID) \ - IPC_COMMA_##in \ - IPC_MEMBERS_IN_##in(p)); \ - } \ - std::cerr << "Don't know how to handle " << #name << "\n"; \ - return 0; \ - } - -#define IPC_SYNC_CONTROL_FUZZ(name, in, out, ilist, olist) \ - IPC::Message* fuzzer_for_##name(IPC::Message* msg, Fuzzer* fuzzer) { \ - IPC_TUPLE_IN_##in ilist p; \ - name* real_msg = static_cast<name*>(msg); \ - name* new_msg = NULL; \ - if (real_msg) { \ - name::ReadSendParam(real_msg, &p); \ - } \ - if (FuzzParam(&p, fuzzer)) { \ - new_msg = new name(IPC_MEMBERS_IN_##in(p) \ - IPC_COMMA_AND_##out(IPC_COMMA_##in) \ - IPC_MEMBERS_OUT_##out()); \ - } \ - if (real_msg && new_msg) { \ - MessageCracker::CopyMessageID(new_msg, real_msg); \ - } \ - else if (!new_msg) { \ - std::cerr << "Don't know how to handle " << #name << "\n"; \ - } \ - return new_msg; \ - } - -#define IPC_SYNC_ROUTED_FUZZ(name, in, out, ilist, olist) \ - IPC::Message* fuzzer_for_##name(IPC::Message* msg, Fuzzer* fuzzer) { \ - IPC_TUPLE_IN_##in ilist p; \ - name* real_msg = static_cast<name*>(msg); \ - name* new_msg = NULL; \ - if (real_msg) { \ - name::ReadSendParam(real_msg, &p); \ - } \ - if (FuzzParam(&p, fuzzer)) { \ - new_msg = new name(RandInRange(MAX_FAKE_ROUTING_ID) \ - IPC_COMMA_OR_##out(IPC_COMMA_##in) \ - IPC_MEMBERS_IN_##in(p) \ - IPC_COMMA_AND_##out(IPC_COMMA_##in) \ - IPC_MEMBERS_OUT_##out()); \ - } \ - if (real_msg && new_msg) { \ - MessageCracker::CopyMessageID(new_msg, real_msg); \ - } \ - else if (!new_msg) { \ - std::cerr << "Don't know how to handle " << #name << "\n"; \ - } \ - return new_msg; \ - } - #define MAX_FAKE_ROUTING_ID 15 -#define IPC_MEMBERS_IN_0(p) -#define IPC_MEMBERS_IN_1(p) base::get<0>(p) -#define IPC_MEMBERS_IN_2(p) base::get<0>(p), base::get<1>(p) -#define IPC_MEMBERS_IN_3(p) base::get<0>(p), base::get<1>(p), base::get<2>(p) -#define IPC_MEMBERS_IN_4(p) base::get<0>(p), base::get<1>(p), base::get<2>(p), \ - base::get<3>(p) -#define IPC_MEMBERS_IN_5(p) base::get<0>(p), base::get<1>(p), base::get<2>(p), \ - base::get<3>(p), base::get<4>(p) +// MessageFactory abstracts away constructing control/routed messages by +// providing an additional random routing ID argument when necessary. +template <typename Message, IPC::MessageKind> +class MessageFactory; -#define IPC_MEMBERS_OUT_0() -#define IPC_MEMBERS_OUT_1() NULL -#define IPC_MEMBERS_OUT_2() NULL, NULL -#define IPC_MEMBERS_OUT_3() NULL, NULL, NULL -#define IPC_MEMBERS_OUT_4() NULL, NULL, NULL, NULL -#define IPC_MEMBERS_OUT_5() NULL, NULL, NULL, NULL, NULL +template <typename Message> +class MessageFactory<Message, IPC::MessageKind::CONTROL> { + public: + template <typename... Args> + static Message* New(const Args&... args) { + return new Message(args...); + } +}; -#include "tools/ipc_fuzzer/message_lib/all_messages.h" +template <typename Message> +class MessageFactory<Message, IPC::MessageKind::ROUTED> { + public: + template <typename... Args> + static Message* New(const Args&... args) { + return new Message(RandInRange(MAX_FAKE_ROUTING_ID), args...); + } +}; + +template <typename Message> +class FuzzerHelper; + +template <typename Meta, typename... Ins> +class FuzzerHelper<IPC::MessageT<Meta, base::Tuple<Ins...>, void>> { + public: + using Message = IPC::MessageT<Meta, base::Tuple<Ins...>, void>; + + static IPC::Message* Fuzz(IPC::Message* msg, Fuzzer* fuzzer) { + return FuzzImpl(msg, fuzzer, base::MakeIndexSequence<sizeof...(Ins)>()); + } + + private: + template <size_t... Ns> + static IPC::Message* FuzzImpl(IPC::Message* msg, + Fuzzer* fuzzer, + base::IndexSequence<Ns...>) { + typename Message::Param p; + if (msg) { + Message::Read(static_cast<Message*>(msg), &p); + } + if (FuzzParam(&p, fuzzer)) { + return MessageFactory<Message, Meta::kKind>::New(base::get<Ns>(p)...); + } + std::cerr << "Don't know how to handle " << Meta::kName << "\n"; + return nullptr; + } +}; + +template <typename Meta, typename... Ins, typename... Outs> +class FuzzerHelper< + IPC::MessageT<Meta, base::Tuple<Ins...>, base::Tuple<Outs...>>> { + public: + using Message = + IPC::MessageT<Meta, base::Tuple<Ins...>, base::Tuple<Outs...>>; + + static IPC::Message* Fuzz(IPC::Message* msg, Fuzzer* fuzzer) { + return FuzzImpl(msg, fuzzer, base::MakeIndexSequence<sizeof...(Ins)>()); + } + + private: + template <size_t... Ns> + static IPC::Message* FuzzImpl(IPC::Message* msg, + Fuzzer* fuzzer, + base::IndexSequence<Ns...>) { + typename Message::SendParam p; + Message* real_msg = static_cast<Message*>(msg); + Message* new_msg = nullptr; + if (real_msg) { + Message::ReadSendParam(real_msg, &p); + } + if (FuzzParam(&p, fuzzer)) { + new_msg = MessageFactory<Message, Meta::kKind>::New( + base::get<Ns>(p)..., static_cast<Outs*>(nullptr)...); + } + if (real_msg && new_msg) { + MessageCracker::CopyMessageID(new_msg, real_msg); + } else if (!new_msg) { + std::cerr << "Don't know how to handle " << Meta::kName << "\n"; + } + return new_msg; + } +}; + #include "tools/ipc_fuzzer/message_lib/all_message_null_macros.h" void PopulateFuzzerFunctionVector( FuzzerFunctionVector* function_vector) { #undef IPC_MESSAGE_DECL -#define IPC_MESSAGE_DECL(kind, type, name, in, out, ilist, olist) \ - function_vector->push_back(fuzzer_for_##name); +#define IPC_MESSAGE_DECL(name, ...) \ + function_vector->push_back(FuzzerHelper<name>::Fuzz); #include "tools/ipc_fuzzer/message_lib/all_messages.h" } // Redefine macros to register fuzzing functions into map. #include "tools/ipc_fuzzer/message_lib/all_message_null_macros.h" #undef IPC_MESSAGE_DECL -#define IPC_MESSAGE_DECL(kind, type, name, in, out, ilist, olist) \ - (*map)[static_cast<uint32_t>(name::ID)] = fuzzer_for_##name; +#define IPC_MESSAGE_DECL(name, ...) \ + (*map)[static_cast<uint32_t>(name::ID)] = FuzzerHelper<name>::Fuzz; void PopulateFuzzerFunctionMap(FuzzerFunctionMap* map) { #include "tools/ipc_fuzzer/message_lib/all_messages.h"
diff --git a/tools/ipc_fuzzer/message_lib/message_names.cc b/tools/ipc_fuzzer/message_lib/message_names.cc index 2702328..da11f23 100644 --- a/tools/ipc_fuzzer/message_lib/message_names.cc +++ b/tools/ipc_fuzzer/message_lib/message_names.cc
@@ -7,7 +7,7 @@ #include "tools/ipc_fuzzer/message_lib/all_message_null_macros.h" #undef IPC_MESSAGE_DECL -#define IPC_MESSAGE_DECL(kind, type, name, in, out, ilist, olist) \ +#define IPC_MESSAGE_DECL(name, ...) \ names.Add(static_cast<uint32_t>(name::ID), #name); void PopulateIpcMessageNames(ipc_fuzzer::MessageNames& names) {
diff --git a/tools/ipc_fuzzer/message_tools/message_list.cc b/tools/ipc_fuzzer/message_tools/message_list.cc index ac3a598..69e4699 100644 --- a/tools/ipc_fuzzer/message_tools/message_list.cc +++ b/tools/ipc_fuzzer/message_tools/message_list.cc
@@ -18,8 +18,6 @@ const char* name; const char* file; int id; - int in_count; - int out_count; bool operator< (const msginfo& other) const { return id < other.id; @@ -29,8 +27,7 @@ // Redefine macros to generate table #include "tools/ipc_fuzzer/message_lib/all_message_null_macros.h" #undef IPC_MESSAGE_DECL -#define IPC_MESSAGE_DECL(kind, type, name, in, out, ilist, olist) \ - { #name, __FILE__, IPC_MESSAGE_ID(), in, out }, +#define IPC_MESSAGE_DECL(name, ...) {#name, __FILE__, IPC_MESSAGE_ID()}, static msginfo msgtable[] = { #include "tools/ipc_fuzzer/message_lib/all_messages.h" @@ -143,12 +140,7 @@ std::cout << msgtable[i].id << " " << IPC_MESSAGE_ID_CLASS(msgtable[i].id) << "," << IPC_MESSAGE_ID_LINE(msgtable[i].id) << " "; - std::cout << msgtable[i].name; - if (show_args) { - std::cout << "(" << msgtable[i].in_count << " IN, " << - msgtable[i].out_count << " OUT)"; - } - std::cout << "\n"; + std::cout << msgtable[i].name << "\n"; } } } @@ -192,4 +184,3 @@ dump_msgtable(show_args, show_ids, show_comma, filter); return 0; } -
diff --git a/tools/json_schema_compiler/js_externs_generator.py b/tools/json_schema_compiler/js_externs_generator.py index 8ba27ca..065e4d3 100644 --- a/tools/json_schema_compiler/js_externs_generator.py +++ b/tools/json_schema_compiler/js_externs_generator.py
@@ -20,7 +20,7 @@ NOTE = """// NOTE: The format of types has changed. 'FooType' is now // 'chrome.%s.FooType'. // Please run the closure compiler before committing changes. -// See https://code.google.com/p/chromium/wiki/ClosureCompilation. +// See https://chromium.googlesource.com/chromium/src/+/master/docs/closure_compilation.md """ class JsExternsGenerator(object):
diff --git a/tools/json_schema_compiler/js_externs_generator_test.py b/tools/json_schema_compiler/js_externs_generator_test.py index 6adc201..7447ea74 100755 --- a/tools/json_schema_compiler/js_externs_generator_test.py +++ b/tools/json_schema_compiler/js_externs_generator_test.py
@@ -81,7 +81,7 @@ // NOTE: The format of types has changed. 'FooType' is now // 'chrome.fakeApi.FooType'. // Please run the closure compiler before committing changes. -// See https://code.google.com/p/chromium/wiki/ClosureCompilation. +// See https://chromium.googlesource.com/chromium/src/+/master/docs/closure_compilation.md /** @fileoverview Externs generated from namespace: fakeApi */ @@ -240,7 +240,7 @@ // NOTE: The format of types has changed. 'FooType' is now // 'chrome.fakeJson.FooType'. // Please run the closure compiler before committing changes. -// See https://code.google.com/p/chromium/wiki/ClosureCompilation. +// See https://chromium.googlesource.com/chromium/src/+/master/docs/closure_compilation.md /** @fileoverview Externs generated from namespace: fakeJson */
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index f03c9ef..2a9a54ea 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -2246,6 +2246,9 @@ </histogram> <histogram name="Autofill.CardUploadDecision" enum="AutofillCardUploadDecision"> + <obsolete> + Deprecated as of 2/2016, replaced by Autofill.CardUploadDecisionExpanded. + </obsolete> <owner>jdonnelly@chromium.org</owner> <summary> Whether upload was offered upon detecting a form submission with credit card @@ -2253,6 +2256,15 @@ </summary> </histogram> +<histogram name="Autofill.CardUploadDecisionExpanded" + enum="AutofillCardUploadDecisionExpanded"> + <owner>jdonnelly@chromium.org</owner> + <summary> + Whether upload was offered upon detecting a form submission with credit card + data and a detailed reason if it wasn't. + </summary> +</histogram> + <histogram name="AutoFill.CCInfoBarAccepted"> <obsolete> Deprecated as of 3/2011, replaced by Autofill.CreditCardInfoBar. @@ -4039,6 +4051,18 @@ </summary> </histogram> +<histogram name="Cast.Sender.SessionTimeWithoutMediaElementPercentage" + units="%"> + <owner>aberent@chromium.org</owner> + <owner>avayvod@chromium.org</owner> + <summary> + Records the ratio of the time the media element was detached from the remote + playback session to the total duration of the session (as from when the + element has been attached till when the session stopped or disconnected), in + percents. + </summary> +</histogram> + <histogram name="Cast.Sender.UrlResolveResult" enum="RemotePlaybackUrlResolveResult"> <owner>aberent@google.com</owner> @@ -17683,6 +17707,36 @@ </summary> </histogram> +<histogram + name="JSDialogs.FineTiming.TimeBetweenDialogClosedAndNextDialogCreated" + units="ms"> + <owner>joenotcharles@chromium.org</owner> + <summary> + Fine-grained (in msec) time between closing a Javascript dialog and opening + another, to track very frequent dialogs. + </summary> +</histogram> + +<histogram + name="JSDialogs.FineTiming.TimeBetweenDialogCreatedAndNextDialogCreated" + units="ms"> + <owner>joenotcharles@chromium.org</owner> + <summary> + Fine-grained (in msec) time between opening a Javascript dialog and opening + another, to track very frequent dialogs. + </summary> +</histogram> + +<histogram + name="JSDialogs.FineTiming.TimeBetweenDialogCreatedAndSameDialogClosed" + units="ms"> + <owner>joenotcharles@chromium.org</owner> + <summary> + Fine-grained (in msec) time between opening a Javascript dialog and closing + it, to track very short-lived dialogs. + </summary> +</histogram> + <histogram name="Keyboard.KeystrokeDeltas" units="ms"> <owner>Please list the metric's owners. Add more owner tags as needed.</owner> <summary> @@ -17716,6 +17770,14 @@ </summary> </histogram> +<histogram name="Launch.IntentFlags" enum="LaunchIntentFlags"> + <owner>dfalcantara@chromium.org</owner> + <summary> + Records flags (and combinations of flags) that were attached to the Intent + that started ChromeLauncherActivity. + </summary> +</histogram> + <histogram name="Launch.InvalidIntent" enum="BooleanHit"> <owner>dfalcantara@chromium.org</owner> <summary> @@ -25655,6 +25717,15 @@ </summary> </histogram> +<histogram name="Net.ProxyService.GetProxyUsingScriptResult" + enum="NetErrorCodes"> + <owner>eroman@chromium.org</owner> + <summary> + The network error code of resolving a URL by forwarding the request to the + proxy resolver and executing the PAC script. + </summary> +</histogram> + <histogram name="Net.ProxyService.GetProxyUsingScriptTime" units="100s of microseconds"> <owner>eroman@chromium.org</owner> @@ -32499,6 +32570,12 @@ <histogram name="PageLoad.Events.Provisional" enum="ProvisionalLoadEvent"> <owner>csharrison@chromium.org</owner> <owner>bmcquade@chromium.org</owner> + <obsolete> + Deprecated Feb 2016 in favor of PageLoad.AbortTiming and + PageLoad.Timing2.NavigationToFailedProvisionalLoad. Note that the + corresponding background enumerations are no longer being tracked in the + timing histograms. + </obsolete> <summary> Captures counts of provisional load events. These include aborted, failed, and successful (committed) provisional loads. @@ -32561,6 +32638,16 @@ </summary> </histogram> +<histogram name="PageLoad.Timing2.NavigationToFailedProvisionalLoad" units="ms"> + <owner>bmcquade@chromium.org</owner> + <owner>shivanisha@chromium.org</owner> + <summary> + Measures the time from navigation timing's navigation start to the time the + provisional load failed. Only measures provisional loads that failed in the + foreground. + </summary> +</histogram> + <histogram name="PageLoad.Timing2.NavigationToFirstBackground" units="ms"> <owner>bmcquade@chromium.org</owner> <owner>csharrison@chromium.org</owner> @@ -50408,6 +50495,11 @@ </summary> </histogram> +<histogram name="Sync.YoungestForeignTabAgeOnNTP" units="seconds"> + <owner>skym@chromium.org</owner> + <summary>Upon NTP load, the age of the youngest synced foreign tab.</summary> +</histogram> + <histogram name="SyncedNotifications.Actions" enum="SyncedNotificationActionType"> <owner>petewil@chromium.org</owner> @@ -50992,6 +51084,33 @@ </summary> </histogram> +<histogram name="Tabs.FineTiming.TimeBetweenTabClosedAndNextTabCreated" + units="ms"> + <owner>joenotcharles@chromium.org</owner> + <summary> + Fine-grained (in msec) time between closing a tab and opening another, to + track very frequent tabs. + </summary> +</histogram> + +<histogram name="Tabs.FineTiming.TimeBetweenTabCreatedAndNextTabCreated" + units="ms"> + <owner>joenotcharles@chromium.org</owner> + <summary> + Fine-grained (in msec) time between opening a tab and opening another, to + track very frequent tabs. + </summary> +</histogram> + +<histogram name="Tabs.FineTiming.TimeBetweenTabCreatedAndSameTabClosed" + units="ms"> + <owner>joenotcharles@chromium.org</owner> + <summary> + Fine-grained (in msec) time between opening a tab and closing it, to track + very short-lived tabs. + </summary> +</histogram> + <histogram name="Tabs.ForegroundTabAgeAtStartup" units="minutes"> <owner>lliabraa@chromium.org</owner> <summary> @@ -51556,6 +51675,17 @@ </summary> </histogram> +<histogram name="TrafficStatsAmortizer.ConcurrentTabs" units="count"> + <owner>sclittle@chromium.org</owner> + <owner>bengr@chromium.org</owner> + <summary> + The number of unique tabs seen across all DataUse objects buffered for a + single amortization run by the TrafficStatsAmortizer. This is recorded even + if TrafficStats byte counts are unavailable, but not recorded if no DataUse + objects have been buffered. + </summary> +</histogram> + <histogram name="TrafficStatsAmortizer.PostAmortizationRunDataUseBytes" units="bytes"> <owner>sclittle@chromium.org</owner> @@ -57633,12 +57763,26 @@ </enum> <enum name="AutofillCardUploadDecision" type="int"> + <obsolete> + Deprecated as of 2/2016, replaced by AutofillCardUploadDecisionExpanded. + </obsolete> <int value="0" label="Upload offered"/> <int value="1" label="Upload not offered, no CVC detected"/> <int value="2" label="Upload not offered, no valid address available"/> <int value="3" label="Upload not offered, get upload details RPC failed"/> </enum> +<enum name="AutofillCardUploadDecisionExpanded" type="int"> + <int value="0" label="Upload offered"/> + <int value="1" label="Upload not offered, no CVC detected"/> + <int value="2" label="Upload not offered, no address available"/> + <int value="3" label="Upload not offered, no name available"/> + <int value="4" + label="Upload not offered, addresses had conflicting zip codes"/> + <int value="5" label="Upload not offered, no zip code available"/> + <int value="6" label="Upload not offered, get upload details RPC failed"/> +</enum> + <enum name="AutofillCreditCardInfoBar" type="int"> <int value="0" label="Shown"/> <int value="1" label="Accepted"/> @@ -58110,6 +58254,8 @@ <int value="107" label="RDHI_WRONG_STORAGE_PARTITION"/> <int value="108" label="RDH_INVALID_REQUEST_ID"/> <int value="109" label="BDH_SERVICE_NOT_ALLOWED_FOR_ORIGIN"/> + <int value="110" label="WSH_SEND_BLOB_DURING_BLOB_SEND"/> + <int value="111" label="WSH_SEND_FRAME_DURING_BLOB_SEND"/> </enum> <enum name="BadMessageReasonExtensions" type="int"> @@ -60816,6 +60962,12 @@ <int value="7" label="Audits"/> <int value="8" label="Console"/> <int value="9" label="Layers"/> + <int value="10" label="Drawer - Console"/> + <int value="11" label="Drawer - Animations"/> + <int value="12" label="Drawer - Network config"/> + <int value="13" label="Drawer - Rendering"/> + <int value="14" label="Drawer - Sensors"/> + <int value="15" label="Drawer - Search"/> </enum> <enum name="DevToolsSetting" type="int"> @@ -62527,6 +62679,8 @@ <int value="313" label="Default key generation setting"/> <int value="314" label="Allow key generation on these sites"/> <int value="315" label="Block key generation on these sites"/> + <int value="316" + label="Configure the required domain name for remote access clients"/> </enum> <enum name="EnterprisePolicyInvalidations" type="int"> @@ -69837,6 +69991,13 @@ <int value="4" label="Bookmark shortcut widget"/> </enum> +<enum name="LaunchIntentFlags" type="int"> + <int value="0" label="No flags"/> + <int value="524288" label="NEW_DOCUMENT"/> + <int value="268435456" label="NEW_TASK"/> + <int value="268959744" label="NEW_TASK | NEW_DOCUMENT"/> +</enum> + <enum name="LevelDBCorruptionRestoreValue" type="int"> <int value="0" label="Database Delete Success"/> <int value="1" label="Database Delete Failure"/> @@ -76657,6 +76818,7 @@ <int value="69" label="IDC_CONTENT_CONTEXT_COPYLINKTEXT"/> <int value="70" label="IDC_CONTENT_CONTEXT_OPENLINKINPROFILE"/> <int value="71" label="IDC_OPEN_LINK_IN_PROFILE_FIRST"/> + <int value="72" label="IDC_CONTENT_CONTEXT_GENERATEPASSWORD"/> </enum> <enum name="ReportProcessingResult" type="int"> @@ -81207,6 +81369,12 @@ <int value="13" label="RGB32"/> <int value="14" label="MJPEG"/> <int value="15" label="MT21"/> + <int value="16" label="YUV420P9"/> + <int value="17" label="YUV420P10"/> + <int value="18" label="YUV422P9"/> + <int value="19" label="YUV422P10"/> + <int value="20" label="YUV444P9"/> + <int value="21" label="YUV444P10"/> </enum> <enum name="VideoPlayerCastAPIExtensionStatus" type="int">
diff --git a/tools/perf/benchmarks/memory_infra.py b/tools/perf/benchmarks/memory_infra.py index b280fe77..6b7c209 100644 --- a/tools/perf/benchmarks/memory_infra.py +++ b/tools/perf/benchmarks/memory_infra.py
@@ -106,7 +106,8 @@ # Disabled on reference builds because they don't support the new # Tracing.requestMemoryDump DevTools API. See http://crbug.com/540022. -@benchmark.Disabled('reference') +@benchmark.Disabled('reference', + 'linux') # http://crbug.com/585161 class MemoryBenchmarkTop10Mobile(_MemoryInfra): """Timeline based benchmark for measuring memory on top 10 mobile sites."""
diff --git a/tools/perf/benchmarks/smoothness.py b/tools/perf/benchmarks/smoothness.py index aff2587..21074fa 100644 --- a/tools/perf/benchmarks/smoothness.py +++ b/tools/perf/benchmarks/smoothness.py
@@ -79,6 +79,9 @@ """ page_set = page_sets.ToughCanvasCasesPageSet + def SetExtraBrowserOptions(self, options): + options.AppendExtraBrowserArgs('--enable-experimental-canvas-features') + @classmethod def Name(cls): return 'smoothness.tough_canvas_cases'
diff --git a/tools/perf/benchmarks/v8.py b/tools/perf/benchmarks/v8.py index 4a6eff05..6e633b63 100644 --- a/tools/perf/benchmarks/v8.py +++ b/tools/perf/benchmarks/v8.py
@@ -55,7 +55,9 @@ # Disabled on reference builds because they don't support the new # Tracing.requestMemoryDump DevTools API. See http://crbug.com/540022. -@benchmark.Disabled('reference', 'android') # crbug.com/579546 +@benchmark.Disabled('reference', + 'android', # crbug.com/579546 + 'linux') # crbug.com/584634 class V8InfiniteScroll(perf_benchmark.PerfBenchmark): """Measures V8 GC metrics and memory usage while scrolling the top web pages. http://www.chromium.org/developers/design-documents/rendering-benchmarks"""
diff --git a/tools/perf/chrome_telemetry_build/BUILD.gn b/tools/perf/chrome_telemetry_build/BUILD.gn index 4e00893..cbb7154f 100644 --- a/tools/perf/chrome_telemetry_build/BUILD.gn +++ b/tools/perf/chrome_telemetry_build/BUILD.gn
@@ -24,6 +24,7 @@ if (is_linux) { data_deps += [ "//tools/xdisplaycheck" ] + data += [ "//components/crash/content/tools/generate_breakpad_symbols.py" ] } if (is_win && (symbol_level == 1 || symbol_level == 2)) {
diff --git a/tools/perf/chrome_telemetry_build/binary_dependencies.json b/tools/perf/chrome_telemetry_build/binary_dependencies.json index d94d0f21..3b940650 100644 --- a/tools/perf/chrome_telemetry_build/binary_dependencies.json +++ b/tools/perf/chrome_telemetry_build/binary_dependencies.json
@@ -56,6 +56,11 @@ "local_paths": [ "../../../components/crash/content/tools/generate_breakpad_symbols.py" ] + }, + "linux_x86_64": { + "local_paths": [ + "../../../components/crash/content/tools/generate_breakpad_symbols.py" + ] } } },
diff --git a/tools/perf/core/stacktrace_unittest.py b/tools/perf/core/stacktrace_unittest.py index bca66da..7e101f84 100644 --- a/tools/perf/core/stacktrace_unittest.py +++ b/tools/perf/core/stacktrace_unittest.py
@@ -9,8 +9,8 @@ class TabStackTraceTest(tab_test_case.TabTestCase): - # For now just work on a single platform (mac). - @decorators.Enabled('mac') + # TODO(dyen): For now this works on a mac & linux but continue to expand this. + @decorators.Enabled('mac', 'linux') # Stack traces do not currently work on 10.6, but they are also being # disabled shortly so just disable it for now. @decorators.Disabled('snowleopard')
diff --git a/tools/perf/docs/perf_bot_sheriffing.md b/tools/perf/docs/perf_bot_sheriffing.md index a82910d3..d2bd7c9 100644 --- a/tools/perf/docs/perf_bot_sheriffing.md +++ b/tools/perf/docs/perf_bot_sheriffing.md
@@ -168,22 +168,8 @@ For both types of failures, please file a bug with [this template](https://code.google.com/p/chromium/issues/entry?labels=Pri-1,Performance-BotHealth,Infra-Labs,OS-Android&comment=Link+to+buildbot+status+page:&summary=Device+offline+on+chromium.perf) which will add an issue to the infra labs queue. -####<a name="followup"></a> Follow up on failures - -**[Pri-0 bugs](https://code.google.com/p/chromium/issues/list?can=2&q=label%3APerformance-BotHealth+label%3APri-0)** -should have an owner or contact on speed infra team and be worked on as top -priority. Pri-0 generally implies an entire waterfall is down. - -**[Pri-1 bugs](https://code.google.com/p/chromium/issues/list?can=2&q=label%3APerformance-BotHealth+label%3APri-1)** -should be pinged daily, and checked to make sure someone is following up. Pri-1 -bugs are for a red test (not yet disabled), purple bot, or failing device. - -**[Pri-2 bugs](https://code.google.com/p/chromium/issues/list?can=2&q=label%3APerformance-BotHealth+label%3APri-2)** -are for disabled tests. These should be pinged weekly, and work towards fixing -should be ongoing when the sheriff is not working on a Pri-1 issue. Here is the -[list of Pri-2 bugs that have not been pinged in a week](https://code.google.com/p/chromium/issues/list?can=2&q=label:Performance-BotHealth%20label:Pri-2%20modified-before:today-7&sort=modified) - If you need help triaging, here are the common labels you should use: + * **Performance-BotHealth** should go on all bugs you file about the bots; it's the label we use to track all the issues. * **Infra-Troopers** adds the bug to the trooper queue. This is for high @@ -204,6 +190,21 @@ If you still need help, ask the speed infra chat, or escalate to sullivan@. +####<a name="followup"></a> Follow up on failures + +**[Pri-0 bugs](https://code.google.com/p/chromium/issues/list?can=2&q=label%3APerformance-BotHealth+label%3APri-0)** +should have an owner or contact on speed infra team and be worked on as top +priority. Pri-0 generally implies an entire waterfall is down. + +**[Pri-1 bugs](https://code.google.com/p/chromium/issues/list?can=2&q=label%3APerformance-BotHealth+label%3APri-1)** +should be pinged daily, and checked to make sure someone is following up. Pri-1 +bugs are for a red test (not yet disabled), purple bot, or failing device. + +**[Pri-2 bugs](https://code.google.com/p/chromium/issues/list?can=2&q=label%3APerformance-BotHealth+label%3APri-2)** +are for disabled tests. These should be pinged weekly, and work towards fixing +should be ongoing when the sheriff is not working on a Pri-1 issue. Here is the +[list of Pri-2 bugs that have not been pinged in a week](https://code.google.com/p/chromium/issues/list?can=2&q=label:Performance-BotHealth%20label:Pri-2%20modified-before:today-7&sort=modified) + ###<a name="datastoppage"></a> Triaging data stoppage alerts Data stoppage alerts are listed on the
diff --git a/tools/roll_angle.py b/tools/roll_angle.py index 751d4ac..c6d3c083 100755 --- a/tools/roll_angle.py +++ b/tools/roll_angle.py
@@ -15,7 +15,7 @@ extra_trybots = [ { "mastername": "tryserver.chromium.win", - "buildername": "win_clang_dbg", + "buildernames": ["win_clang_dbg", "win_optional_gpu_tests_rel"] } ] @@ -97,12 +97,25 @@ changelog_url = GetChangeLogURL(angle_current.git_repo_url, change_str) + def GetExtraTrybotString(): + s = '' + for t in extra_trybots: + if s: + s += ';' + s += t['mastername'] + ':' + ','.join(t['buildernames']) + return s + + extra_trybot_args = [] + if extra_trybots: + extra_trybot_string = GetExtraTrybotString() + extra_trybot_args = ['-m', 'CQ_INCLUDE_TRYBOTS=' + extra_trybot_string] + return [ '-m', 'Roll ANGLE ' + change_str, '-m', '%s' % changelog_url, '-m', GetBugString(bugs), '-m', 'TEST=bots', - ] + ] + extra_trybot_args class AutoRoller(object): @@ -261,17 +274,20 @@ self._RunCommand(['git', 'cl', 'upload'], extra_env={'EDITOR': 'true'}) - # Run the default trybots + # Kick off tryjobs. base_try_cmd = ['git', 'cl', 'try'] self._RunCommand(base_try_cmd) if extra_trybots: - # Run additional tryjobs - extra_try_args = [] - for extra_trybot in extra_trybots: - extra_try_args += ['-m', extra_trybot["mastername"], - '-b', extra_trybot["buildername"]] - self._RunCommand(base_try_cmd + extra_try_args) + # Run additional tryjobs. + # TODO(kbr): this should not be necessary -- the + # CQ_INCLUDE_TRYBOTS directive above should handle it. + # http://crbug.com/585237 + for trybot in extra_trybots: + for builder in trybot['buildernames']: + self._RunCommand(base_try_cmd + [ + '-m', trybot['mastername'], + '-b', builder]) cl_info = self._GetCLInfo() print 'Issue: %d URL: %s' % (cl_info.issue, cl_info.url)
diff --git a/tools/roll_webgl_conformance.py b/tools/roll_webgl_conformance.py new file mode 100755 index 0000000..0c40fef --- /dev/null +++ b/tools/roll_webgl_conformance.py
@@ -0,0 +1,380 @@ +#!/usr/bin/env python +# Copyright 2015 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. + +import argparse +import collections +import logging +import os +import re +import subprocess +import sys +import time + +extra_trybots = [ + { + "mastername": "tryserver.chromium.win", + "buildernames": ["win_optional_gpu_tests_rel"] + } +] + +SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) +SRC_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, os.pardir)) +sys.path.insert(0, os.path.join(SRC_DIR, 'build')) +import find_depot_tools +find_depot_tools.add_depot_tools_to_path() +import roll_dep_svn +from gclient import GClientKeywords +from third_party import upload + +# Avoid depot_tools/third_party/upload.py print verbose messages. +upload.verbosity = 0 # Errors only. + +CHROMIUM_GIT_URL = 'https://chromium.googlesource.com/chromium/src.git' +CL_ISSUE_RE = re.compile('^Issue number: ([0-9]+) \((.*)\)$') +RIETVELD_URL_RE = re.compile('^https?://(.*)/(.*)') +ROLL_BRANCH_NAME = 'special_webgl_roll_branch' +TRYJOB_STATUS_SLEEP_SECONDS = 30 + +# Use a shell for subcommands on Windows to get a PATH search. +IS_WIN = sys.platform.startswith('win') +WEBGL_PATH = os.path.join('third_party', 'webgl', 'src') + +CommitInfo = collections.namedtuple('CommitInfo', ['git_commit', + 'git_repo_url']) +CLInfo = collections.namedtuple('CLInfo', ['issue', 'url', 'rietveld_server']) + +def _PosixPath(path): + """Convert a possibly-Windows path to a posix-style path.""" + (_, path) = os.path.splitdrive(path) + return path.replace(os.sep, '/') + +def _ParseGitCommitHash(description): + for line in description.splitlines(): + if line.startswith('commit '): + return line.split()[1] + logging.error('Failed to parse git commit id from:\n%s\n', description) + sys.exit(-1) + return None + + +def _ParseDepsFile(filename): + with open(filename, 'rb') as f: + deps_content = f.read() + return _ParseDepsDict(deps_content) + + +def _ParseDepsDict(deps_content): + local_scope = {} + var = GClientKeywords.VarImpl({}, local_scope) + global_scope = { + 'File': GClientKeywords.FileImpl, + 'From': GClientKeywords.FromImpl, + 'Var': var.Lookup, + 'deps_os': {}, + } + exec(deps_content, global_scope, local_scope) + return local_scope + + +def _GenerateCLDescriptionCommand(webgl_current, webgl_new, bugs): + def GetChangeString(current_hash, new_hash): + return '%s..%s' % (current_hash[0:7], new_hash[0:7]); + + def GetChangeLogURL(git_repo_url, change_string): + return '%s/+log/%s' % (git_repo_url, change_string) + + def GetBugString(bugs): + bug_str = 'BUG=' + for bug in bugs: + bug_str += str(bug) + ',' + return bug_str.rstrip(',') + + if webgl_current.git_commit != webgl_new.git_commit: + change_str = GetChangeString(webgl_current.git_commit, + webgl_new.git_commit) + changelog_url = GetChangeLogURL(webgl_current.git_repo_url, + change_str) + + def GetExtraTrybotString(): + s = '' + for t in extra_trybots: + if s: + s += ';' + s += t['mastername'] + ':' + ','.join(t['buildernames']) + return s + + extra_trybot_args = [] + if extra_trybots: + extra_trybot_string = GetExtraTrybotString() + extra_trybot_args = ['-m', 'CQ_INCLUDE_TRYBOTS=' + extra_trybot_string] + + return [ + '-m', 'Roll WebGL ' + change_str, + '-m', '%s' % changelog_url, + '-m', GetBugString(bugs), + '-m', 'TEST=bots', + ] + extra_trybot_args + + +class AutoRoller(object): + def __init__(self, chromium_src): + self._chromium_src = chromium_src + + def _RunCommand(self, command, working_dir=None, ignore_exit_code=False, + extra_env=None): + """Runs a command and returns the stdout from that command. + + If the command fails (exit code != 0), the function will exit the process. + """ + working_dir = working_dir or self._chromium_src + logging.debug('cmd: %s cwd: %s', ' '.join(command), working_dir) + env = os.environ.copy() + if extra_env: + logging.debug('extra env: %s', extra_env) + env.update(extra_env) + p = subprocess.Popen(command, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, shell=IS_WIN, env=env, + cwd=working_dir, universal_newlines=True) + output = p.stdout.read() + p.wait() + p.stdout.close() + p.stderr.close() + + if not ignore_exit_code and p.returncode != 0: + logging.error('Command failed: %s\n%s', str(command), output) + sys.exit(p.returncode) + return output + + def _GetCommitInfo(self, path_below_src, git_hash=None, git_repo_url=None): + working_dir = os.path.join(self._chromium_src, path_below_src) + self._RunCommand(['git', 'fetch', 'origin'], working_dir=working_dir) + revision_range = git_hash or 'origin' + ret = self._RunCommand( + ['git', '--no-pager', 'log', revision_range, '--pretty=full', '-1'], + working_dir=working_dir) + return CommitInfo(_ParseGitCommitHash(ret), git_repo_url) + + def _GetDepsCommitInfo(self, deps_dict, path_below_src): + entry = deps_dict['deps'][_PosixPath('src/%s' % path_below_src)] + at_index = entry.find('@') + git_repo_url = entry[:at_index] + git_hash = entry[at_index + 1:] + return self._GetCommitInfo(path_below_src, git_hash, git_repo_url) + + def _GetCLInfo(self): + cl_output = self._RunCommand(['git', 'cl', 'issue']) + m = CL_ISSUE_RE.match(cl_output.strip()) + if not m: + logging.error('Cannot find any CL info. Output was:\n%s', cl_output) + sys.exit(-1) + issue_number = int(m.group(1)) + url = m.group(2) + + # Parse the Rietveld host from the URL. + m = RIETVELD_URL_RE.match(url) + if not m: + logging.error('Cannot parse Rietveld host from URL: %s', url) + sys.exit(-1) + rietveld_server = m.group(1) + return CLInfo(issue_number, url, rietveld_server) + + def _GetCurrentBranchName(self): + return self._RunCommand( + ['git', 'rev-parse', '--abbrev-ref', 'HEAD']).splitlines()[0] + + def _IsTreeClean(self): + lines = self._RunCommand( + ['git', 'status', '--porcelain', '-uno']).splitlines() + if len(lines) == 0: + return True + + logging.debug('Dirty/unversioned files:\n%s', '\n'.join(lines)) + return False + + def _GetBugList(self, path_below_src, webgl_current, webgl_new): + # TODO(kbr): this isn't useful, at least not yet, when run against + # the WebGL Github repository. + working_dir = os.path.join(self._chromium_src, path_below_src) + lines = self._RunCommand( + ['git','log', + '%s..%s' % (webgl_current.git_commit, webgl_new.git_commit)], + working_dir=working_dir).split('\n') + bugs = set() + for line in lines: + line = line.strip() + bug_prefix = 'BUG=' + if line.startswith(bug_prefix): + bugs_strings = line[len(bug_prefix):].split(',') + for bug_string in bugs_strings: + try: + bugs.add(int(bug_string)) + except: + # skip this, it may be a project specific bug such as + # "angleproject:X" or an ill-formed BUG= message + pass + return bugs + + def _UpdateReadmeFile(self, readme_path, new_revision): + readme = open(os.path.join(self._chromium_src, readme_path), 'r+') + txt = readme.read() + m = re.sub(re.compile('.*^Revision\: ([0-9]*).*', re.MULTILINE), + ('Revision: %s' % new_revision), txt) + readme.seek(0) + readme.write(m) + readme.truncate() + + def PrepareRoll(self, ignore_checks): + # TODO(kjellander): use os.path.normcase, os.path.join etc for all paths for + # cross platform compatibility. + + if not ignore_checks: + if self._GetCurrentBranchName() != 'master': + logging.error('Please checkout the master branch.') + return -1 + if not self._IsTreeClean(): + logging.error('Please make sure you don\'t have any modified files.') + return -1 + + # Always clean up any previous roll. + self.Abort() + + logging.debug('Pulling latest changes') + if not ignore_checks: + self._RunCommand(['git', 'pull']) + + self._RunCommand(['git', 'checkout', '-b', ROLL_BRANCH_NAME]) + + # Modify Chromium's DEPS file. + + # Parse current hashes. + deps_filename = os.path.join(self._chromium_src, 'DEPS') + deps = _ParseDepsFile(deps_filename) + webgl_current = self._GetDepsCommitInfo(deps, WEBGL_PATH) + + # Find ToT revisions. + webgl_latest = self._GetCommitInfo(WEBGL_PATH) + + if IS_WIN: + # Make sure the roll script doesn't use windows line endings + self._RunCommand(['git', 'config', 'core.autocrlf', 'true']) + + self._UpdateDep(deps_filename, WEBGL_PATH, webgl_latest) + + if self._IsTreeClean(): + logging.debug('Tree is clean - no changes detected.') + self._DeleteRollBranch() + else: + bugs = self._GetBugList(WEBGL_PATH, webgl_current, webgl_latest) + description = _GenerateCLDescriptionCommand( + webgl_current, webgl_latest, bugs) + logging.debug('Committing changes locally.') + self._RunCommand(['git', 'add', '--update', '.']) + self._RunCommand(['git', 'commit'] + description) + logging.debug('Uploading changes...') + self._RunCommand(['git', 'cl', 'upload'], + extra_env={'EDITOR': 'true'}) + + # Kick off tryjobs. + base_try_cmd = ['git', 'cl', 'try'] + self._RunCommand(base_try_cmd) + + if extra_trybots: + # Run additional tryjobs. + # TODO(kbr): this should not be necessary -- the + # CQ_INCLUDE_TRYBOTS directive above should handle it. + # http://crbug.com/585237 + for trybot in extra_trybots: + for builder in trybot['buildernames']: + self._RunCommand(base_try_cmd + [ + '-m', trybot['mastername'], + '-b', builder]) + + cl_info = self._GetCLInfo() + print 'Issue: %d URL: %s' % (cl_info.issue, cl_info.url) + + # Checkout master again. + self._RunCommand(['git', 'checkout', 'master']) + print 'Roll branch left as ' + ROLL_BRANCH_NAME + return 0 + + def _UpdateDep(self, deps_filename, dep_relative_to_src, commit_info): + dep_name = _PosixPath(os.path.join('src', dep_relative_to_src)) + + # roll_dep_svn.py relies on cwd being the Chromium checkout, so let's + # temporarily change the working directory and then change back. + cwd = os.getcwd() + os.chdir(os.path.dirname(deps_filename)) + roll_dep_svn.update_deps(deps_filename, dep_relative_to_src, dep_name, + commit_info.git_commit, '') + os.chdir(cwd) + + def _DeleteRollBranch(self): + self._RunCommand(['git', 'checkout', 'master']) + self._RunCommand(['git', 'branch', '-D', ROLL_BRANCH_NAME]) + logging.debug('Deleted the local roll branch (%s)', ROLL_BRANCH_NAME) + + + def _GetBranches(self): + """Returns a tuple of active,branches. + + The 'active' is the name of the currently active branch and 'branches' is a + list of all branches. + """ + lines = self._RunCommand(['git', 'branch']).split('\n') + branches = [] + active = '' + for l in lines: + if '*' in l: + # The assumption is that the first char will always be the '*'. + active = l[1:].strip() + branches.append(active) + else: + b = l.strip() + if b: + branches.append(b) + return (active, branches) + + def Abort(self): + active_branch, branches = self._GetBranches() + if active_branch == ROLL_BRANCH_NAME: + active_branch = 'master' + if ROLL_BRANCH_NAME in branches: + print 'Aborting pending roll.' + self._RunCommand(['git', 'checkout', ROLL_BRANCH_NAME]) + # Ignore an error here in case an issue wasn't created for some reason. + self._RunCommand(['git', 'cl', 'set_close'], ignore_exit_code=True) + self._RunCommand(['git', 'checkout', active_branch]) + self._RunCommand(['git', 'branch', '-D', ROLL_BRANCH_NAME]) + return 0 + + +def main(): + parser = argparse.ArgumentParser( + description='Auto-generates a CL containing a WebGL conformance roll.') + parser.add_argument('--abort', + help=('Aborts a previously prepared roll. ' + 'Closes any associated issues and deletes the roll branches'), + action='store_true') + parser.add_argument('--ignore-checks', action='store_true', default=False, + help=('Skips checks for being on the master branch, dirty workspaces and ' + 'the updating of the checkout. Will still delete and create local ' + 'Git branches.')) + parser.add_argument('-v', '--verbose', action='store_true', default=False, + help='Be extra verbose in printing of log messages.') + args = parser.parse_args() + + if args.verbose: + logging.basicConfig(level=logging.DEBUG) + else: + logging.basicConfig(level=logging.ERROR) + + autoroller = AutoRoller(SRC_DIR) + if args.abort: + return autoroller.Abort() + else: + return autoroller.PrepareRoll(args.ignore_checks) + +if __name__ == '__main__': + sys.exit(main())
diff --git a/tools/variations/fieldtrial_util.py b/tools/variations/fieldtrial_util.py index e76d4cd..ae029aa 100644 --- a/tools/variations/fieldtrial_util.py +++ b/tools/variations/fieldtrial_util.py
@@ -20,6 +20,30 @@ result = result.replace(c, '%' + _hex(c)) return result +def _FindDuplicates(entries): + seen = set() + duplicates = set() + for entry in entries: + if entry in seen: + duplicates.add(entry) + else: + seen.add(entry) + return duplicates + +def _CheckForDuplicateFeatures(enable_features, disable_features): + enable_features_set = set(enable_features) + if len(enable_features_set) != len(enable_features): + raise Exception('Duplicate feature(s) in enable_features: ' + + ', '.join(_FindDuplicates(enable_features))) + disable_features_set = set(disable_features) + if len(disable_features_set) != len(disable_features): + raise Exception('Duplicate feature(s) in disable_features: ' + + ', '.join(_FindDuplicates(disable_features))) + features_in_both = enable_features_set.intersection(disable_features_set) + if len(features_in_both) > 0: + raise Exception('Conflicting features set as both enabled and disabled: ' + + ', '.join(features_in_both)) + # Generate a list of command-line switches to enable field trials defined in # fieldtrial_testing_config_*.json. def GenerateArgs(config_path): @@ -31,6 +55,8 @@ field_trials = [] params = [] + enable_features = [] + disable_features = [] for trial, groups in variations.iteritems(): if not len(groups): continue @@ -49,11 +75,20 @@ param_list = [_escape(x) for x in param_list] param = '%s:%s' % ('.'.join(trial_group), '/'.join(param_list)) params.append(param) + if 'enable_features' in group: + enable_features.extend(group['enable_features']) + if 'disable_features' in group: + disable_features.extend(group['disable_features']) if not len(field_trials): return [] + _CheckForDuplicateFeatures(enable_features, disable_features) args = ['--force-fieldtrials=%s' % '/'.join(field_trials)] if len(params): args.append('--force-fieldtrial-params=%s' % ','.join(params)) + if len(enable_features): + args.append('--enable-features=%s' % ','.join(enable_features)) + if len(disable_features): + args.append('--disable-features=%s' % ','.join(disable_features)) return args def main():
diff --git a/tools/variations/fieldtrial_util_unittest.py b/tools/variations/fieldtrial_util_unittest.py index 8f1c6d2..9d53a7f3 100644 --- a/tools/variations/fieldtrial_util_unittest.py +++ b/tools/variations/fieldtrial_util_unittest.py
@@ -11,40 +11,111 @@ class FieldTrialUtilUnittest(unittest.TestCase): + def runGenerateArgs(self, config): + result = None + with tempfile.NamedTemporaryFile('w', delete=False) as base_file: + try: + base_file.write(config) + base_file.close() + result = fieldtrial_util.GenerateArgs(base_file.name) + finally: + os.unlink(base_file.name) + return result + def test_GenArgsEmptyPaths(self): args = fieldtrial_util.GenerateArgs('') self.assertEqual([], args) def test_GenArgsOneConfig(self): - with tempfile.NamedTemporaryFile('w', delete=False) as base_file: - config = '''{ - "BrowserBlackList": [ - { "group_name": "Enabled" } - ], - "c": [ - { - "group_name": "d.", - "params": {"url": "http://www.google.com"} - } - ], - "SimpleParams": [ - { - "group_name": "Default", - "params": {"id": "abc"} - } - ] - }''' - try: - base_file.write(config) - base_file.close() - result = fieldtrial_util.GenerateArgs(base_file.name) - self.assertEqual(['--force-fieldtrials=' - 'BrowserBlackList/Enabled/c/d./SimpleParams/Default', - '--force-fieldtrial-params=' - 'c.d%2E:url/http%3A%2F%2Fwww%2Egoogle%2Ecom,' - 'SimpleParams.Default:id/abc'], result) - finally: - os.unlink(base_file.name) + config = '''{ + "BrowserBlackList": [ + { "group_name": "Enabled" } + ], + "c": [ + { + "group_name": "d.", + "params": {"url": "http://www.google.com"}, + "enable_features": ["x"], + "disable_features": ["y"] + } + ], + "SimpleParams": [ + { + "group_name": "Default", + "params": {"id": "abc"}, + "enable_features": ["a", "b"] + } + ] + }''' + result = self.runGenerateArgs(config) + self.assertEqual(['--force-fieldtrials=' + 'BrowserBlackList/Enabled/c/d./SimpleParams/Default', + '--force-fieldtrial-params=' + 'c.d%2E:url/http%3A%2F%2Fwww%2Egoogle%2Ecom,' + 'SimpleParams.Default:id/abc', + '--enable-features=x,a,b', + '--disable-features=y'], result) + + def test_DuplicateEnableFeatures(self): + config = '''{ + "X": [ + { + "group_name": "x", + "enable_features": ["x"] + } + ], + "Y": [ + { + "group_name": "Default", + "enable_features": ["x", "y"] + } + ] + }''' + with self.assertRaises(Exception) as raised: + self.runGenerateArgs(config) + self.assertEqual('Duplicate feature(s) in enable_features: x', + str(raised.exception)) + + def test_DuplicateDisableFeatures(self): + config = '''{ + "X": [ + { + "group_name": "x", + "enable_features": ["y", "z"] + } + ], + "Y": [ + { + "group_name": "Default", + "enable_features": ["z", "x", "y"] + } + ] + }''' + with self.assertRaises(Exception) as raised: + self.runGenerateArgs(config) + self.assertEqual('Duplicate feature(s) in enable_features: y, z', + str(raised.exception)) + + + def test_DuplicateEnableDisable(self): + config = '''{ + "X": [ + { + "group_name": "x", + "enable_features": ["x"] + } + ], + "Y": [ + { + "group_name": "Default", + "disable_features": ["x", "y"] + } + ] + }''' + with self.assertRaises(Exception) as raised: + self.runGenerateArgs(config) + self.assertEqual('Conflicting features set as both enabled and disabled: x', + str(raised.exception)) if __name__ == '__main__': unittest.main() \ No newline at end of file
diff --git a/ui/accelerated_widget_mac/accelerated_widget_mac.mm b/ui/accelerated_widget_mac/accelerated_widget_mac.mm index 4ce9274..135f64c 100644 --- a/ui/accelerated_widget_mac/accelerated_widget_mac.mm +++ b/ui/accelerated_widget_mac/accelerated_widget_mac.mm
@@ -123,9 +123,13 @@ base::ScopedCFTypeRef<IOSurfaceRef> io_surface, const gfx::Size& pixel_size, float scale_factor) { + TRACE_EVENT0("ui", "AcceleratedWidgetMac::GotFrame"); + // If there is no view and therefore no superview to draw into, early-out. - if (!view_) + if (!view_) { + TRACE_EVENT0("ui", "No associated NSView"); return; + } // Disable the fade-in or fade-out effect if we create or remove layers. ScopedCAActionDisabler disabler; @@ -143,6 +147,8 @@ void AcceleratedWidgetMac::GotCAContextFrame(CAContextID ca_context_id, const gfx::Size& pixel_size, float scale_factor) { + TRACE_EVENT0("ui", "AcceleratedWidgetMac::GotCAContextFrame"); + // In the layer is replaced, keep the old one around until after the new one // is installed to avoid flashes. base::scoped_nsobject<CALayerHost> old_ca_context_layer = @@ -151,6 +157,7 @@ // Create the layer to host the layer exported by the GPU process with this // particular CAContext ID. if ([ca_context_layer_ contextId] != ca_context_id) { + TRACE_EVENT0("ui", "Creating a new CALayerHost"); ca_context_layer_.reset([[CALayerHost alloc] init]); [ca_context_layer_ setContextId:ca_context_id]; [ca_context_layer_ @@ -182,6 +189,8 @@ base::ScopedCFTypeRef<IOSurfaceRef> io_surface, const gfx::Size& pixel_size, float scale_factor) { + TRACE_EVENT0("ui", "AcceleratedWidgetMac::GotIOSurfaceFrame"); + // If there is not a layer for local frames, create one. EnsureLocalLayer();
diff --git a/ui/accessibility/ax_enums.idl b/ui/accessibility/ax_enums.idl index 7470199..bf85883 100644 --- a/ui/accessibility/ax_enums.idl +++ b/ui/accessibility/ax_enums.idl
@@ -30,6 +30,7 @@ blur, // Remove: http://crbug.com/392502 checked_state_changed, // Implicit children_changed, + clicked, document_selection_changed, focus, hide, // Remove: http://crbug.com/392502
diff --git a/ui/android/java/src/org/chromium/ui/base/Clipboard.java b/ui/android/java/src/org/chromium/ui/base/Clipboard.java index d49fa92..7229ec5 100644 --- a/ui/android/java/src/org/chromium/ui/base/Clipboard.java +++ b/ui/android/java/src/org/chromium/ui/base/Clipboard.java
@@ -10,6 +10,7 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; +import org.chromium.base.annotations.SuppressFBWarnings; import org.chromium.ui.R; import org.chromium.ui.widget.Toast; @@ -112,8 +113,9 @@ * * @param text will become the content of the clipboard's primary clip */ + @SuppressFBWarnings("UPM_UNCALLED_PRIVATE_METHOD") @CalledByNative - public void setText(final String text) { + private void setText(final String text) { setText(null, text); } @@ -125,7 +127,7 @@ * @param label The Plain-text label for the HTML content. * @param text Plain-text representation of the HTML content. */ - public void setHTMLText(final String html, final String label, final String text) { + private void setHTMLText(final String html, final String label, final String text) { setPrimaryClipNoException(ClipData.newHtmlText(label, text, html)); } @@ -136,8 +138,9 @@ * @param html The HTML content to be pasted to the clipboard. * @param text Plain-text representation of the HTML content. */ + @SuppressFBWarnings("UPM_UNCALLED_PRIVATE_METHOD") @CalledByNative - public void setHTMLText(final String html, final String text) { + private void setHTMLText(final String html, final String text) { setHTMLText(html, null, text); }
diff --git a/ui/app_list/search_result.h b/ui/app_list/search_result.h index a086547..130e30c 100644 --- a/ui/app_list/search_result.h +++ b/ui/app_list/search_result.h
@@ -57,8 +57,7 @@ Tag(int styles, size_t start, size_t end) : styles(styles), - range(start, end) { - } + range(static_cast<uint32_t>(start), static_cast<uint32_t>(end)) {} int styles; gfx::Range range;
diff --git a/ui/aura/window_event_dispatcher_unittest.cc b/ui/aura/window_event_dispatcher_unittest.cc index c8ae024..ef99259 100644 --- a/ui/aura/window_event_dispatcher_unittest.cc +++ b/ui/aura/window_event_dispatcher_unittest.cc
@@ -2633,7 +2633,7 @@ ui::ET_TOUCH_RELEASED, location + gfx::Vector2d(200, 200), 0, ui::EventTimeForNow() + base::TimeDelta::FromSeconds(1)); DispatchEventUsingWindowDispatcher(&release); - EXPECT_FALSE(recorder.LastTouchMayCauseScrolling()); + EXPECT_TRUE(recorder.LastTouchMayCauseScrolling()); EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_TOUCH_RELEASED)); EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_GESTURE_SCROLL_END));
diff --git a/ui/base/BUILD.gn b/ui/base/BUILD.gn index 1ec9371..8a936fcc 100644 --- a/ui/base/BUILD.gn +++ b/ui/base/BUILD.gn
@@ -14,6 +14,34 @@ build_ime = !is_ios +# As part of building Chrome on iOS, it is necessary to run a tool on +# the host to load datapack and generate output in a format defined +# by the platform (this is to support notifications). +# +# Introduce a standalone target that build on both 'host' and 'target' +# toolset that just build the support to load datapack. The dependency +# should be kept minimal to have to build too many targets with multiple +# toolsets. +component("ui_data_pack") { + sources = [ + "resource/data_pack.cc", + "resource/data_pack.h", + "resource/data_pack_export.h", + "resource/resource_handle.h", + "resource/scale_factor.cc", + "resource/scale_factor.h", + ] + + deps = [ + "//base", + ] + + defines = [ "UI_DATA_PACK_IMPLEMENTATION" ] + + # TODO(jschuh): crbug.com/167187 fix size_t to int truncations. + configs += [ "//build/config/compiler:no_size_t_to_int_warning" ] +} + component("base") { output_name = "ui_base" @@ -180,8 +208,6 @@ "nine_image_painter_factory.h", "page_transition_types.cc", "page_transition_types.h", - "resource/data_pack.cc", - "resource/data_pack.h", "resource/resource_bundle.cc", "resource/resource_bundle.h", "resource/resource_bundle_android.cc", @@ -192,7 +218,6 @@ "resource/resource_bundle_win.h", "resource/resource_data_dll_win.cc", "resource/resource_data_dll_win.h", - "resource/resource_handle.h", "template_expressions.cc", "template_expressions.h", "theme_provider.cc", @@ -331,6 +356,7 @@ "//base/third_party/dynamic_annotations", "//net", "//third_party/icu", + "//ui/base:ui_data_pack", "//ui/events", "//ui/events/devices", "//ui/resources", @@ -623,6 +649,7 @@ "//base/test:test_config", "//skia", "//testing/gtest", + "//ui/base:ui_data_pack", "//ui/events:events_base", "//ui/events:test_support", "//ui/gfx", @@ -675,6 +702,7 @@ "resource/data_pack_literal.cc", "resource/data_pack_unittest.cc", "resource/resource_bundle_unittest.cc", + "resource/scale_factor_unittest.cc", "template_expressions_unittest.cc", "test/run_all_unittests.cc", "user_activity/user_activity_detector_unittest.cc", @@ -766,6 +794,7 @@ "//third_party/icu", "//ui/base", "//ui/base:test_support", + "//ui/base:ui_data_pack", "//ui/events:events_base", "//ui/events:test_support", "//ui/gfx:test_support",
diff --git a/ui/base/clipboard/custom_data_helper.cc b/ui/base/clipboard/custom_data_helper.cc index a50a0a07..e67829a3 100644 --- a/ui/base/clipboard/custom_data_helper.cc +++ b/ui/base/clipboard/custom_data_helper.cc
@@ -43,8 +43,8 @@ SkippablePickle pickle(data, data_length); base::PickleIterator iter(pickle); - size_t size = 0; - if (!iter.ReadSizeT(&size)) + uint32_t size = 0; + if (!iter.ReadUInt32(&size)) return; // Keep track of the original elements in the types vector. On failure, we @@ -52,7 +52,7 @@ // custom data pickles. size_t original_size = types->size(); - for (size_t i = 0; i < size; ++i) { + for (uint32_t i = 0; i < size; ++i) { types->push_back(base::string16()); if (!iter.ReadString16(&types->back()) || !pickle.SkipString16(&iter)) { types->resize(original_size); @@ -68,11 +68,11 @@ SkippablePickle pickle(data, data_length); base::PickleIterator iter(pickle); - size_t size = 0; - if (!iter.ReadSizeT(&size)) + uint32_t size = 0; + if (!iter.ReadUInt32(&size)) return; - for (size_t i = 0; i < size; ++i) { + for (uint32_t i = 0; i < size; ++i) { base::string16 deserialized_type; if (!iter.ReadString16(&deserialized_type)) return; @@ -91,11 +91,11 @@ base::Pickle pickle(reinterpret_cast<const char*>(data), data_length); base::PickleIterator iter(pickle); - size_t size = 0; - if (!iter.ReadSizeT(&size)) + uint32_t size = 0; + if (!iter.ReadUInt32(&size)) return; - for (size_t i = 0; i < size; ++i) { + for (uint32_t i = 0; i < size; ++i) { base::string16 type; if (!iter.ReadString16(&type)) { // Data is corrupt, return an empty map. @@ -115,7 +115,7 @@ void WriteCustomDataToPickle( const std::map<base::string16, base::string16>& data, base::Pickle* pickle) { - pickle->WriteSizeT(data.size()); + pickle->WriteUInt32(data.size()); for (std::map<base::string16, base::string16>::const_iterator it = data.begin(); it != data.end();
diff --git a/ui/base/clipboard/custom_data_helper_unittest.cc b/ui/base/clipboard/custom_data_helper_unittest.cc index 1ed53c6..4d51547 100644 --- a/ui/base/clipboard/custom_data_helper_unittest.cc +++ b/ui/base/clipboard/custom_data_helper_unittest.cc
@@ -120,7 +120,7 @@ expected.push_back(ASCIIToUTF16("f")); base::Pickle malformed; - malformed.WriteSizeT(1000); + malformed.WriteUInt32(1000); malformed.WriteString16(ASCIIToUTF16("hello")); malformed.WriteString16(ASCIIToUTF16("world")); std::vector<base::string16> actual(expected); @@ -128,7 +128,7 @@ EXPECT_EQ(expected, actual); base::Pickle malformed2; - malformed2.WriteSizeT(1); + malformed2.WriteUInt32(1); malformed2.WriteString16(ASCIIToUTF16("hello")); std::vector<base::string16> actual2(expected); ReadCustomDataTypes(malformed2.data(), malformed2.size(), &actual2); @@ -140,7 +140,7 @@ std::map<base::string16, base::string16> result_map; base::Pickle malformed; - malformed.WriteSizeT(1000); + malformed.WriteUInt32(1000); malformed.WriteString16(ASCIIToUTF16("hello")); malformed.WriteString16(ASCIIToUTF16("world")); @@ -153,7 +153,7 @@ EXPECT_EQ(0u, result_map.size()); base::Pickle malformed2; - malformed2.WriteSizeT(1); + malformed2.WriteUInt32(1); malformed2.WriteString16(ASCIIToUTF16("hello")); ReadCustomDataForType(malformed2.data(),
diff --git a/ui/base/layout.cc b/ui/base/layout.cc index 54ae5e682..4299f09 100644 --- a/ui/base/layout.cc +++ b/ui/base/layout.cc
@@ -26,11 +26,6 @@ std::vector<ScaleFactor>* g_supported_scale_factors = NULL; -const float kScaleFactorScales[] = {1.0f, 1.0f, 1.25f, 1.33f, 1.4f, 1.5f, 1.8f, - 2.0f, 2.5f, 3.0f}; -static_assert(NUM_SCALE_FACTORS == arraysize(kScaleFactorScales), - "kScaleFactorScales has incorrect size"); - } // namespace void SetSupportedScaleFactors( @@ -50,7 +45,7 @@ for (std::vector<ScaleFactor>::const_iterator it = g_supported_scale_factors->begin(); it != g_supported_scale_factors->end(); ++it) { - scales.push_back(kScaleFactorScales[*it]); + scales.push_back(GetScaleForScaleFactor(*it)); } gfx::ImageSkia::SetSupportedScales(scales); } @@ -66,7 +61,7 @@ float smallest_diff = std::numeric_limits<float>::max(); for (size_t i = 0; i < g_supported_scale_factors->size(); ++i) { ScaleFactor scale_factor = (*g_supported_scale_factors)[i]; - float diff = std::abs(kScaleFactorScales[scale_factor] - scale); + float diff = std::abs(GetScaleForScaleFactor(scale_factor) - scale); if (diff < smallest_diff) { closest_match = scale_factor; smallest_diff = diff; @@ -76,13 +71,9 @@ return closest_match; } -float GetScaleForScaleFactor(ScaleFactor scale_factor) { - return kScaleFactorScales[scale_factor]; -} - bool IsSupportedScale(float scale) { for (auto scale_factor_idx : *g_supported_scale_factors) { - if (kScaleFactorScales[scale_factor_idx] == scale) + if (GetScaleForScaleFactor(scale_factor_idx) == scale) return true; } return false;
diff --git a/ui/base/layout.h b/ui/base/layout.h index 8b528580f..fd2627b 100644 --- a/ui/base/layout.h +++ b/ui/base/layout.h
@@ -9,31 +9,12 @@ #include "base/macros.h" #include "build/build_config.h" +#include "ui/base/resource/scale_factor.h" #include "ui/base/ui_base_export.h" #include "ui/gfx/native_widget_types.h" namespace ui { -// Supported UI scale factors for the platform. This is used as an index -// into the array |kScaleFactorScales| which maps the enum value to a float. -// SCALE_FACTOR_NONE is used for density independent resources such as -// string, html/js files or an image that can be used for any scale factors -// (such as wallpapers). -enum ScaleFactor : int { - SCALE_FACTOR_NONE = 0, - SCALE_FACTOR_100P, - SCALE_FACTOR_125P, - SCALE_FACTOR_133P, - SCALE_FACTOR_140P, - SCALE_FACTOR_150P, - SCALE_FACTOR_180P, - SCALE_FACTOR_200P, - SCALE_FACTOR_250P, - SCALE_FACTOR_300P, - - NUM_SCALE_FACTORS // This always appears last. -}; - // Changes the value of GetSupportedScaleFactors() to |scale_factors|. // Use ScopedSetSupportedScaleFactors for unit tests as not to affect the // state of other tests. @@ -52,9 +33,6 @@ // Returns the ScaleFactor used by |view|. UI_BASE_EXPORT float GetScaleFactorForNativeView(gfx::NativeView view); -// Returns the image scale for the scale factor passed in. -UI_BASE_EXPORT float GetScaleForScaleFactor(ScaleFactor scale_factor); - // Returns true if the scale passed in is the list of supported scales for // the platform. UI_BASE_EXPORT bool IsSupportedScale(float scale);
diff --git a/ui/base/layout_unittest.cc b/ui/base/layout_unittest.cc index 4b0c5b1..7c975e6b 100644 --- a/ui/base/layout_unittest.cc +++ b/ui/base/layout_unittest.cc
@@ -14,18 +14,6 @@ namespace ui { -TEST(LayoutTest, GetScaleFactorScale) { - EXPECT_FLOAT_EQ(1.0f, GetScaleForScaleFactor(SCALE_FACTOR_100P)); - EXPECT_FLOAT_EQ(1.25f, GetScaleForScaleFactor(SCALE_FACTOR_125P)); - EXPECT_FLOAT_EQ(1.33f, GetScaleForScaleFactor(SCALE_FACTOR_133P)); - EXPECT_FLOAT_EQ(1.4f, GetScaleForScaleFactor(SCALE_FACTOR_140P)); - EXPECT_FLOAT_EQ(1.5f, GetScaleForScaleFactor(SCALE_FACTOR_150P)); - EXPECT_FLOAT_EQ(1.8f, GetScaleForScaleFactor(SCALE_FACTOR_180P)); - EXPECT_FLOAT_EQ(2.0f, GetScaleForScaleFactor(SCALE_FACTOR_200P)); - EXPECT_FLOAT_EQ(2.5f, GetScaleForScaleFactor(SCALE_FACTOR_250P)); - EXPECT_FLOAT_EQ(3.0f, GetScaleForScaleFactor(SCALE_FACTOR_300P)); -} - TEST(LayoutTest, GetScaleFactorFromScalePartlySupported) { std::vector<ScaleFactor> supported_factors; supported_factors.push_back(SCALE_FACTOR_100P);
diff --git a/ui/base/resource/data_pack.h b/ui/base/resource/data_pack.h index b2d90684..1292203 100644 --- a/ui/base/resource/data_pack.h +++ b/ui/base/resource/data_pack.h
@@ -20,8 +20,8 @@ #include "base/memory/scoped_ptr.h" #include "base/memory/scoped_vector.h" #include "base/strings/string_piece.h" +#include "ui/base/resource/data_pack_export.h" #include "ui/base/resource/resource_handle.h" -#include "ui/base/ui_base_export.h" namespace base { class FilePath; @@ -31,7 +31,7 @@ namespace ui { enum ScaleFactor : int; -class UI_BASE_EXPORT DataPack : public ResourceHandle { +class UI_DATA_PACK_EXPORT DataPack : public ResourceHandle { public: explicit DataPack(ui::ScaleFactor scale_factor); ~DataPack() override;
diff --git a/ui/base/resource/data_pack_export.h b/ui/base/resource/data_pack_export.h new file mode 100644 index 0000000..88e908d --- /dev/null +++ b/ui/base/resource/data_pack_export.h
@@ -0,0 +1,37 @@ +// Copyright 2016 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 UI_BASE_RESOURCE_DATA_PACK_EXPORT_H_ +#define UI_BASE_RESOURCE_DATA_PACK_EXPORT_H_ + +// Defines UI_DATA_PACK_EXPORT so that functionality implemented by the data +// pack loading module can be exported to consumers. + +#if defined(COMPONENT_BUILD) + +#if defined(WIN32) + +#if defined(UI_DATA_PACK_IMPLEMENTATION) +#define UI_DATA_PACK_EXPORT __declspec(dllexport) +#else +#define UI_DATA_PACK_EXPORT __declspec(dllimport) +#endif + +#else // !defined(WIN32) + +#if defined(UI_DATA_PACK_IMPLEMENTATION) +#define UI_DATA_PACK_EXPORT __attribute__((visibility("default"))) +#else +#define UI_DATA_PACK_EXPORT +#endif + +#endif + +#else // !defined(COMPONENT_BUILD) + +#define UI_DATA_PACK_EXPORT + +#endif + +#endif // UI_BASE_RESOURCE_DATA_PACK_EXPORT_H_
diff --git a/ui/base/resource/resource_bundle.cc b/ui/base/resource/resource_bundle.cc index 840c3459..536b9fc 100644 --- a/ui/base/resource/resource_bundle.cc +++ b/ui/base/resource/resource_bundle.cc
@@ -747,72 +747,30 @@ void ResourceBundle::LoadFontsIfNecessary() { images_and_fonts_lock_->AssertAcquired(); - if (!base_font_list_.get()) { - if (delegate_) { - base_font_list_ = GetFontListFromDelegate(BaseFont); - bold_font_list_ = GetFontListFromDelegate(BoldFont); - small_font_list_ = GetFontListFromDelegate(SmallFont); - small_bold_font_list_ = GetFontListFromDelegate(SmallBoldFont); - medium_font_list_ = GetFontListFromDelegate(MediumFont); - medium_bold_font_list_ = GetFontListFromDelegate(MediumBoldFont); - large_font_list_ = GetFontListFromDelegate(LargeFont); - large_bold_font_list_ = GetFontListFromDelegate(LargeBoldFont); - } + if (base_font_list_) + return; - if (!base_font_list_.get()) - base_font_list_.reset(new gfx::FontList()); + base_font_list_.reset(new gfx::FontList()); + bold_font_list_.reset(new gfx::FontList(base_font_list_->DeriveWithStyle( + base_font_list_->GetFontStyle() | gfx::Font::BOLD))); - if (!bold_font_list_.get()) { - bold_font_list_.reset(new gfx::FontList()); - *bold_font_list_ = base_font_list_->DeriveWithStyle( - base_font_list_->GetFontStyle() | gfx::Font::BOLD); - } + small_font_list_.reset(new gfx::FontList( + base_font_list_->DeriveWithSizeDelta(kSmallFontSizeDelta))); + small_bold_font_list_.reset( + new gfx::FontList(small_font_list_->DeriveWithStyle( + small_font_list_->GetFontStyle() | gfx::Font::BOLD))); - if (!small_font_list_.get()) { - small_font_list_.reset(new gfx::FontList()); - *small_font_list_ = - base_font_list_->DeriveWithSizeDelta(kSmallFontSizeDelta); - } + medium_font_list_.reset(new gfx::FontList( + base_font_list_->DeriveWithSizeDelta(kMediumFontSizeDelta))); + medium_bold_font_list_.reset( + new gfx::FontList(medium_font_list_->DeriveWithStyle( + medium_font_list_->GetFontStyle() | gfx::Font::BOLD))); - if (!small_bold_font_list_.get()) { - small_bold_font_list_.reset(new gfx::FontList()); - *small_bold_font_list_ = small_font_list_->DeriveWithStyle( - small_font_list_->GetFontStyle() | gfx::Font::BOLD); - } - - if (!medium_font_list_.get()) { - medium_font_list_.reset(new gfx::FontList()); - *medium_font_list_ = - base_font_list_->DeriveWithSizeDelta(kMediumFontSizeDelta); - } - - if (!medium_bold_font_list_.get()) { - medium_bold_font_list_.reset(new gfx::FontList()); - *medium_bold_font_list_ = medium_font_list_->DeriveWithStyle( - medium_font_list_->GetFontStyle() | gfx::Font::BOLD); - } - - if (!large_font_list_.get()) { - large_font_list_.reset(new gfx::FontList()); - *large_font_list_ = - base_font_list_->DeriveWithSizeDelta(kLargeFontSizeDelta); - } - - if (!large_bold_font_list_.get()) { - large_bold_font_list_.reset(new gfx::FontList()); - *large_bold_font_list_ = large_font_list_->DeriveWithStyle( - large_font_list_->GetFontStyle() | gfx::Font::BOLD); - } - } -} - -scoped_ptr<gfx::FontList> ResourceBundle::GetFontListFromDelegate( - FontStyle style) { - DCHECK(delegate_); - scoped_ptr<gfx::Font> font = delegate_->GetFont(style); - if (font.get()) - return make_scoped_ptr(new gfx::FontList(*font)); - return nullptr; + large_font_list_.reset(new gfx::FontList( + base_font_list_->DeriveWithSizeDelta(kLargeFontSizeDelta))); + large_bold_font_list_.reset( + new gfx::FontList(large_font_list_->DeriveWithStyle( + large_font_list_->GetFontStyle() | gfx::Font::BOLD))); } bool ResourceBundle::LoadBitmap(const ResourceHandle& data_handle,
diff --git a/ui/base/resource/resource_bundle.h b/ui/base/resource/resource_bundle.h index 49b5748..5a3cc5a4 100644 --- a/ui/base/resource/resource_bundle.h +++ b/ui/base/resource/resource_bundle.h
@@ -108,9 +108,6 @@ // false to attempt retrieval of the default string. virtual bool GetLocalizedString(int message_id, base::string16* value) = 0; - // Returns a font or NULL to attempt retrieval of the default resource. - virtual scoped_ptr<gfx::Font> GetFont(FontStyle style) = 0; - protected: virtual ~Delegate() {} }; @@ -348,10 +345,6 @@ // initialized. void LoadFontsIfNecessary(); - // Returns a FontList or NULL by calling Delegate::GetFont and converting - // scoped_ptr<gfx::Font> to scoped_ptr<gfx::FontList>. - scoped_ptr<gfx::FontList> GetFontListFromDelegate(FontStyle style); - // Fills the |bitmap| given the data file to look in and the |resource_id|. // Returns false if the resource does not exist. //
diff --git a/ui/base/resource/resource_bundle_unittest.cc b/ui/base/resource/resource_bundle_unittest.cc index 93a40f6..0ada42e2 100644 --- a/ui/base/resource/resource_bundle_unittest.cc +++ b/ui/base/resource/resource_bundle_unittest.cc
@@ -91,11 +91,6 @@ *value = GetLocalizedStringMock(message_id); return true; } - MOCK_METHOD1(GetFontMock, - gfx::Font*(ui::ResourceBundle::FontStyle style)); - scoped_ptr<gfx::Font> GetFont(ui::ResourceBundle::FontStyle style) override { - return make_scoped_ptr(GetFontMock(style)); - } }; // Returns |bitmap_data| with |custom_chunk| inserted after the IHDR chunk. @@ -342,59 +337,6 @@ EXPECT_EQ(delegate_data, result); } -#if (defined(USE_OZONE) && !defined(USE_PANGO)) || defined(OS_ANDROID) -#define MAYBE_DelegateGetFontList DISABLED_DelegateGetFontList -#else -#define MAYBE_DelegateGetFontList DelegateGetFontList -#endif - -TEST_F(ResourceBundleTest, MAYBE_DelegateGetFontList) { - MockResourceBundleDelegate delegate; - ResourceBundle* resource_bundle = CreateResourceBundle(&delegate); - - // Should be called once for each font type. When we return NULL the default - // font will be created. - gfx::Font* test_font = NULL; - EXPECT_CALL(delegate, GetFontMock(_)) - .Times(8) - .WillRepeatedly(Return(test_font)); - - const gfx::FontList* font_list = - &resource_bundle->GetFontList(ui::ResourceBundle::BaseFont); - EXPECT_TRUE(font_list); - - const gfx::Font* font = - &resource_bundle->GetFont(ui::ResourceBundle::BaseFont); - EXPECT_TRUE(font); -} - -#if defined(OS_CHROMEOS) && defined(USE_PANGO) -TEST_F(ResourceBundleTest, FontListReload) { - MockResourceBundleDelegate delegate; - ResourceBundle* resource_bundle = CreateResourceBundle(&delegate); - - // Should be called once for each font type. When we return NULL the default - // font will be created. - gfx::Font* test_font = nullptr; - EXPECT_CALL(delegate, GetFontMock(_)) - .Times(16) - .WillRepeatedly(Return(test_font)); - - EXPECT_CALL(delegate, GetLocalizedStringMock(IDS_UI_FONT_FAMILY_CROS)) - .WillOnce(Return(base::UTF8ToUTF16("test font, 12px"))); - resource_bundle->ReloadFonts(); - // Don't test the font name; it'll get mapped to something else by Fontconfig. - EXPECT_EQ(12, gfx::FontList().GetPrimaryFont().GetFontSize()); - EXPECT_EQ(gfx::Font::NORMAL, gfx::FontList().GetPrimaryFont().GetStyle()); - - EXPECT_CALL(delegate, GetLocalizedStringMock(IDS_UI_FONT_FAMILY_CROS)) - .WillOnce(Return(base::UTF8ToUTF16("test font 2, Bold 10px"))); - resource_bundle->ReloadFonts(); - EXPECT_EQ(10, gfx::FontList().GetPrimaryFont().GetFontSize()); - EXPECT_EQ(gfx::Font::BOLD, gfx::FontList().GetPrimaryFont().GetStyle()); -} -#endif - TEST_F(ResourceBundleTest, LocaleDataPakExists) { ResourceBundle* resource_bundle = CreateResourceBundle(NULL);
diff --git a/ui/base/resource/resource_handle.h b/ui/base/resource/resource_handle.h index 138c739..9632c53 100644 --- a/ui/base/resource/resource_handle.h +++ b/ui/base/resource/resource_handle.h
@@ -8,8 +8,8 @@ #include <stdint.h> #include "base/strings/string_piece.h" -#include "ui/base/layout.h" -#include "ui/base/ui_base_export.h" +#include "ui/base/resource/data_pack_export.h" +#include "ui/base/resource/scale_factor.h" namespace base { class RefCountedStaticMemory; @@ -17,7 +17,7 @@ namespace ui { -class UI_BASE_EXPORT ResourceHandle { +class UI_DATA_PACK_EXPORT ResourceHandle { public: // What type of encoding the text resources use. enum TextEncodingType {
diff --git a/ui/base/resource/scale_factor.cc b/ui/base/resource/scale_factor.cc new file mode 100644 index 0000000..dceffaec --- /dev/null +++ b/ui/base/resource/scale_factor.cc
@@ -0,0 +1,24 @@ +// Copyright 2016 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 "ui/base/resource/scale_factor.h" + +#include "base/macros.h" + +namespace ui { + +namespace { + +const float kScaleFactorScales[] = {1.0f, 1.0f, 1.25f, 1.33f, 1.4f, 1.5f, 1.8f, + 2.0f, 2.5f, 3.0f}; +static_assert(NUM_SCALE_FACTORS == arraysize(kScaleFactorScales), + "kScaleFactorScales has incorrect size"); + +} // namespace + +float GetScaleForScaleFactor(ScaleFactor scale_factor) { + return kScaleFactorScales[scale_factor]; +} + +} // namespace ui
diff --git a/ui/base/resource/scale_factor.h b/ui/base/resource/scale_factor.h new file mode 100644 index 0000000..06205851 --- /dev/null +++ b/ui/base/resource/scale_factor.h
@@ -0,0 +1,37 @@ +// Copyright 2016 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 UI_BASE_RESOURCE_SCALE_FACTOR_H_ +#define UI_BASE_RESOURCE_SCALE_FACTOR_H_ + +#include "ui/base/resource/data_pack_export.h" + +namespace ui { + +// Supported UI scale factors for the platform. This is used as an index +// into the array |kScaleFactorScales| which maps the enum value to a float. +// SCALE_FACTOR_NONE is used for density independent resources such as +// string, html/js files or an image that can be used for any scale factors +// (such as wallpapers). +enum ScaleFactor : int { + SCALE_FACTOR_NONE = 0, + SCALE_FACTOR_100P, + SCALE_FACTOR_125P, + SCALE_FACTOR_133P, + SCALE_FACTOR_140P, + SCALE_FACTOR_150P, + SCALE_FACTOR_180P, + SCALE_FACTOR_200P, + SCALE_FACTOR_250P, + SCALE_FACTOR_300P, + + NUM_SCALE_FACTORS // This always appears last. +}; + +// Returns the image scale for the scale factor passed in. +UI_DATA_PACK_EXPORT float GetScaleForScaleFactor(ScaleFactor scale_factor); + +} // namespace ui + +#endif // UI_BASE_RESOURCE_SCALE_FACTOR_H_
diff --git a/ui/base/resource/scale_factor_unittest.cc b/ui/base/resource/scale_factor_unittest.cc new file mode 100644 index 0000000..52bf39b2 --- /dev/null +++ b/ui/base/resource/scale_factor_unittest.cc
@@ -0,0 +1,23 @@ +// Copyright 2016 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 "ui/base/resource/scale_factor.h" + +#include "testing/gtest/include/gtest/gtest.h" + +namespace ui { + +TEST(ScaleFactorTest, GetScaleFactorScale) { + EXPECT_FLOAT_EQ(1.0f, GetScaleForScaleFactor(SCALE_FACTOR_100P)); + EXPECT_FLOAT_EQ(1.25f, GetScaleForScaleFactor(SCALE_FACTOR_125P)); + EXPECT_FLOAT_EQ(1.33f, GetScaleForScaleFactor(SCALE_FACTOR_133P)); + EXPECT_FLOAT_EQ(1.4f, GetScaleForScaleFactor(SCALE_FACTOR_140P)); + EXPECT_FLOAT_EQ(1.5f, GetScaleForScaleFactor(SCALE_FACTOR_150P)); + EXPECT_FLOAT_EQ(1.8f, GetScaleForScaleFactor(SCALE_FACTOR_180P)); + EXPECT_FLOAT_EQ(2.0f, GetScaleForScaleFactor(SCALE_FACTOR_200P)); + EXPECT_FLOAT_EQ(2.5f, GetScaleForScaleFactor(SCALE_FACTOR_250P)); + EXPECT_FLOAT_EQ(3.0f, GetScaleForScaleFactor(SCALE_FACTOR_300P)); +} + +} // namespace ui
diff --git a/ui/base/ui_base.gyp b/ui/base/ui_base.gyp index ee9a0fe..d092bc15 100644 --- a/ui/base/ui_base.gyp +++ b/ui/base/ui_base.gyp
@@ -8,10 +8,45 @@ }, 'targets': [ { + # GN version: //ui/base:ui_data_pack + # As part of building Chrome on iOS, it is necessary to run a tool on + # the host to load datapack and generate output in a format defined + # by the platform (this is to support notifications). + # + # Introduce a standalone target that build on both 'host' and 'target' + # toolset that just build the support to load datapack. The dependency + # should be kept minimal to have to build too many targets with multiple + # toolsets. + 'target_name': 'ui_data_pack', + 'toolsets': ['host', 'target'], + 'type': '<(component)', + 'dependencies': [ + '../../base/base.gyp:base', + ], + 'sources': [ + 'resource/data_pack.cc', + 'resource/data_pack.h', + 'resource/data_pack_export.h', + 'resource/resource_handle.h', + 'resource/scale_factor.cc', + 'resource/scale_factor.h', + ], + 'defines': [ + 'UI_DATA_PACK_IMPLEMENTATION', + ], + 'conditions': [ + ['OS=="win"', { + # TODO(jschuh): C4267: http://crbug.com/167187 size_t -> int + 'msvs_disabled_warnings': [ 4267 ], + }], + ], + }, + { # GN version: //ui/base 'target_name': 'ui_base', 'type': '<(component)', 'dependencies': [ + 'ui_data_pack', '../../base/base.gyp:base', '../../base/base.gyp:base_i18n', '../../base/base.gyp:base_static', @@ -262,8 +297,6 @@ 'nine_image_painter_factory.h', 'page_transition_types.cc', 'page_transition_types.h', - 'resource/data_pack.cc', - 'resource/data_pack.h', 'resource/resource_bundle.cc', 'resource/resource_bundle.h', 'resource/resource_bundle_android.cc', @@ -274,7 +307,6 @@ 'resource/resource_bundle_win.h', 'resource/resource_data_dll_win.cc', 'resource/resource_data_dll_win.h', - 'resource/resource_handle.h', 'template_expressions.cc', 'template_expressions.h', 'text/bytes_formatting.cc', @@ -652,6 +684,7 @@ 'target_name': 'ui_base_test_support', 'type': 'static_library', 'dependencies': [ + 'ui_data_pack', '../../base/base.gyp:base', '../../skia/skia.gyp:skia', '../../testing/gtest.gyp:gtest',
diff --git a/ui/base/ui_base_tests.gyp b/ui/base/ui_base_tests.gyp index cac0238..108c6ee 100644 --- a/ui/base/ui_base_tests.gyp +++ b/ui/base/ui_base_tests.gyp
@@ -28,6 +28,7 @@ '../strings/ui_strings.gyp:ui_strings', 'ime/ui_base_ime.gyp:ui_base_ime', 'ui_base.gyp:ui_base', + 'ui_base.gyp:ui_data_pack', 'ui_base.gyp:ui_base_test_support', ], # iOS uses a small subset of ui. common_sources are the only files that @@ -43,8 +44,9 @@ 'models/tree_node_iterator_unittest.cc', 'resource/data_pack_literal.cc', 'resource/data_pack_unittest.cc', - 'resource/resource_bundle_unittest.cc', 'resource/resource_bundle_mac_unittest.mm', + 'resource/resource_bundle_unittest.cc', + 'resource/scale_factor_unittest.cc', 'template_expressions_unittest.cc', 'test/run_all_unittests.cc', ], @@ -72,8 +74,8 @@ 'cocoa/tracking_area_unittest.mm', 'dragdrop/os_exchange_data_provider_aurax11_unittest.cc', 'ime/candidate_window_unittest.cc', - 'ime/composition_text_unittest.cc', 'ime/chromeos/character_composer_unittest.cc', + 'ime/composition_text_unittest.cc', 'ime/composition_text_util_pango_unittest.cc', 'ime/input_method_base_unittest.cc', 'ime/input_method_chromeos_unittest.cc', @@ -84,8 +86,8 @@ 'models/list_selection_model_unittest.cc', 'models/tree_node_model_unittest.cc', 'test/data/resource.h', - 'test/test_clipboard_unittest.cc', 'test/scoped_fake_nswindow_fullscreen_unittest.mm', + 'test/test_clipboard_unittest.cc', 'text/bytes_formatting_unittest.cc', 'touch/selection_bound_unittest.cc', 'user_activity/user_activity_detector_unittest.cc',
diff --git a/ui/events/blink/blink_event_util.cc b/ui/events/blink/blink_event_util.cc index d2686620..b4e2f55 100644 --- a/ui/events/blink/blink_event_util.cc +++ b/ui/events/blink/blink_event_util.cc
@@ -179,7 +179,7 @@ blink::WebTouchEvent CreateWebTouchEventFromMotionEvent( const MotionEvent& event, - bool may_cause_scrolling) { + bool moved_beyond_slop_region) { static_assert(static_cast<int>(MotionEvent::MAX_TOUCH_POINT_COUNT) == static_cast<int>(blink::WebTouchEvent::touchesLengthCap), "inconsistent maximum number of active touch points"); @@ -189,8 +189,8 @@ result.type = ToWebInputEventType(event.GetAction()); result.cancelable = (result.type != WebInputEvent::TouchCancel); result.timeStampSeconds = - (event.GetEventTime() - base::TimeTicks()).InSecondsF(), - result.causesScrollingIfUncanceled = may_cause_scrolling; + (event.GetEventTime() - base::TimeTicks()).InSecondsF(); + result.movedBeyondSlopRegion = moved_beyond_slop_region; result.modifiers = EventFlagsToWebEventModifiers(event.GetFlags()); DCHECK_NE(event.GetUniqueEventId(), 0U); result.uniqueTouchEventId = event.GetUniqueEventId();
diff --git a/ui/events/event.cc b/ui/events/event.cc index 626c52c..43017372 100644 --- a/ui/events/event.cc +++ b/ui/events/event.cc
@@ -613,9 +613,9 @@ bool success = gfx::DecomposeTransform(&decomp, inverted_root_transform); DCHECK(success); if (decomp.scale[0]) - pointer_details_.radius_x_ *= decomp.scale[0]; + pointer_details_.radius_x *= decomp.scale[0]; if (decomp.scale[1]) - pointer_details_.radius_y_ *= decomp.scale[1]; + pointer_details_.radius_y *= decomp.scale[1]; } void TouchEvent::DisableSynchronousHandling() {
diff --git a/ui/events/event.h b/ui/events/event.h index 781b0ef..da7cc98 100644 --- a/ui/events/event.h +++ b/ui/events/event.h
@@ -327,57 +327,44 @@ // Structure for handling common fields between touch and mouse to support // PointerEvents API. -class EVENTS_EXPORT PointerDetails { +struct EVENTS_EXPORT PointerDetails { public: PointerDetails() {} explicit PointerDetails(EventPointerType pointer_type) - : pointer_type_(pointer_type), - force_(std::numeric_limits<float>::quiet_NaN()) {} + : pointer_type(pointer_type), + force(std::numeric_limits<float>::quiet_NaN()) {} PointerDetails(EventPointerType pointer_type, float radius_x, float radius_y, float force, float tilt_x, float tilt_y) - : pointer_type_(pointer_type), - radius_x_(radius_x), - radius_y_(radius_y), - force_(force), - tilt_x_(tilt_x), - tilt_y_(tilt_y) {} - - EventPointerType pointer_type() const { return pointer_type_; }; - - // If we aren't provided with a radius on one axis, use the - // information from the other axis. - float radius_x() const { return radius_x_ > 0 ? radius_x_ : radius_y_; } - float radius_y() const { return radius_y_ > 0 ? radius_y_ : radius_x_; } - float force() const { return force_; } - float tilt_x() const { return tilt_x_; } - float tilt_y() const { return tilt_y_; } - - private: - // For the mutators of the members on this class. - friend class TouchEvent; - friend class MouseEvent; + : pointer_type(pointer_type), + // If we aren't provided with a radius on one axis, use the + // information from the other axis. + radius_x(radius_x > 0 ? radius_x : radius_y), + radius_y(radius_y > 0 ? radius_y : radius_x), + force(force), + tilt_x(tilt_x), + tilt_y(tilt_y) {} // The type of pointer device. - EventPointerType pointer_type_ = EventPointerType::POINTER_TYPE_UNKNOWN; + EventPointerType pointer_type = EventPointerType::POINTER_TYPE_UNKNOWN; // Radius of the X (major) axis of the touch ellipse. 0.0 if unknown. - float radius_x_ = 0.0; + float radius_x = 0.0; // Radius of the Y (minor) axis of the touch ellipse. 0.0 if unknown. - float radius_y_ = 0.0; + float radius_y = 0.0; // Force (pressure) of the touch. Normalized to be [0, 1]. Default to be 0.0. - float force_ = 0.0; + float force = 0.0; // Angle of tilt of the X (major) axis. 0.0 if unknown. - float tilt_x_ = 0.0; + float tilt_x = 0.0; // Angle of tilt of the Y (minor) axis. 0.0 if unknown. - float tilt_y_ = 0.0; + float tilt_y = 0.0; }; class EVENTS_EXPORT MouseEvent : public LocatedEvent { @@ -590,8 +577,8 @@ // TODO(robert.bradford): ozone_platform_egltest.cc could use // UpdateForRootTransform() instead: crbug.com/519337 - void set_radius_x(const float r) { pointer_details_.radius_x_ = r; } - void set_radius_y(const float r) { pointer_details_.radius_y_ = r; } + void set_radius_x(const float r) { pointer_details_.radius_x = r; } + void set_radius_y(const float r) { pointer_details_.radius_y = r; } void set_should_remove_native_touch_id_mapping( bool should_remove_native_touch_id_mapping) {
diff --git a/ui/events/event_unittest.cc b/ui/events/event_unittest.cc index 5f1ffdf..97e1628 100644 --- a/ui/events/event_unittest.cc +++ b/ui/events/event_unittest.cc
@@ -560,13 +560,13 @@ TouchEvent event1(ui::ET_TOUCH_PRESSED, gfx::Point(0, 0), 0, 0, time, non_zero_length1, 0, 0, 0); - EXPECT_EQ(non_zero_length1, event1.pointer_details().radius_x()); - EXPECT_EQ(non_zero_length1, event1.pointer_details().radius_y()); + EXPECT_EQ(non_zero_length1, event1.pointer_details().radius_x); + EXPECT_EQ(non_zero_length1, event1.pointer_details().radius_y); TouchEvent event2(ui::ET_TOUCH_PRESSED, gfx::Point(0, 0), 0, 0, time, 0, non_zero_length2, 0, 0); - EXPECT_EQ(non_zero_length2, event2.pointer_details().radius_x()); - EXPECT_EQ(non_zero_length2, event2.pointer_details().radius_y()); + EXPECT_EQ(non_zero_length2, event2.pointer_details().radius_x); + EXPECT_EQ(non_zero_length2, event2.pointer_details().radius_y); } TEST(EventTest, TouchEventRotationAngleFixing) { @@ -622,33 +622,33 @@ ui::EventTimeForNow()); EXPECT_EQ(EventPointerType::POINTER_TYPE_TOUCH, - touch_event_plain.pointer_details().pointer_type()); - EXPECT_EQ(0.0f, touch_event_plain.pointer_details().radius_x()); - EXPECT_EQ(0.0f, touch_event_plain.pointer_details().radius_y()); - EXPECT_TRUE(std::isnan(touch_event_plain.pointer_details().force())); - EXPECT_EQ(0.0f, touch_event_plain.pointer_details().tilt_x()); - EXPECT_EQ(0.0f, touch_event_plain.pointer_details().tilt_y()); + touch_event_plain.pointer_details().pointer_type); + EXPECT_EQ(0.0f, touch_event_plain.pointer_details().radius_x); + EXPECT_EQ(0.0f, touch_event_plain.pointer_details().radius_y); + EXPECT_TRUE(std::isnan(touch_event_plain.pointer_details().force)); + EXPECT_EQ(0.0f, touch_event_plain.pointer_details().tilt_x); + EXPECT_EQ(0.0f, touch_event_plain.pointer_details().tilt_y); ui::TouchEvent touch_event_with_details(ET_TOUCH_PRESSED, gfx::Point(0, 0), 0, 0, ui::EventTimeForNow(), 10.0f, 5.0f, 0.0f, 15.0f); EXPECT_EQ(EventPointerType::POINTER_TYPE_TOUCH, - touch_event_with_details.pointer_details().pointer_type()); - EXPECT_EQ(10.0f, touch_event_with_details.pointer_details().radius_x()); - EXPECT_EQ(5.0f, touch_event_with_details.pointer_details().radius_y()); - EXPECT_EQ(15.0f, touch_event_with_details.pointer_details().force()); - EXPECT_EQ(0.0f, touch_event_with_details.pointer_details().tilt_x()); - EXPECT_EQ(0.0f, touch_event_with_details.pointer_details().tilt_y()); + touch_event_with_details.pointer_details().pointer_type); + EXPECT_EQ(10.0f, touch_event_with_details.pointer_details().radius_x); + EXPECT_EQ(5.0f, touch_event_with_details.pointer_details().radius_y); + EXPECT_EQ(15.0f, touch_event_with_details.pointer_details().force); + EXPECT_EQ(0.0f, touch_event_with_details.pointer_details().tilt_x); + EXPECT_EQ(0.0f, touch_event_with_details.pointer_details().tilt_y); ui::TouchEvent touch_event_copy(touch_event_with_details); EXPECT_EQ(EventPointerType::POINTER_TYPE_TOUCH, - touch_event_copy.pointer_details().pointer_type()); - EXPECT_EQ(10.0f, touch_event_copy.pointer_details().radius_x()); - EXPECT_EQ(5.0f, touch_event_copy.pointer_details().radius_y()); - EXPECT_EQ(15.0f, touch_event_copy.pointer_details().force()); - EXPECT_EQ(0.0f, touch_event_copy.pointer_details().tilt_x()); - EXPECT_EQ(0.0f, touch_event_copy.pointer_details().tilt_y()); + touch_event_copy.pointer_details().pointer_type); + EXPECT_EQ(10.0f, touch_event_copy.pointer_details().radius_x); + EXPECT_EQ(5.0f, touch_event_copy.pointer_details().radius_y); + EXPECT_EQ(15.0f, touch_event_copy.pointer_details().force); + EXPECT_EQ(0.0f, touch_event_copy.pointer_details().tilt_x); + EXPECT_EQ(0.0f, touch_event_copy.pointer_details().tilt_y); } TEST(EventTest, PointerEventDetailsMouse) { @@ -656,21 +656,21 @@ gfx::Point(0, 0), ui::EventTimeForNow(), 0, 0); EXPECT_EQ(EventPointerType::POINTER_TYPE_MOUSE, - mouse_event.pointer_details().pointer_type()); - EXPECT_EQ(0.0f, mouse_event.pointer_details().radius_x()); - EXPECT_EQ(0.0f, mouse_event.pointer_details().radius_y()); - EXPECT_TRUE(std::isnan(mouse_event.pointer_details().force())); - EXPECT_EQ(0.0f, mouse_event.pointer_details().tilt_x()); - EXPECT_EQ(0.0f, mouse_event.pointer_details().tilt_y()); + mouse_event.pointer_details().pointer_type); + EXPECT_EQ(0.0f, mouse_event.pointer_details().radius_x); + EXPECT_EQ(0.0f, mouse_event.pointer_details().radius_y); + EXPECT_TRUE(std::isnan(mouse_event.pointer_details().force)); + EXPECT_EQ(0.0f, mouse_event.pointer_details().tilt_x); + EXPECT_EQ(0.0f, mouse_event.pointer_details().tilt_y); ui::MouseEvent mouse_event_copy(mouse_event); EXPECT_EQ(EventPointerType::POINTER_TYPE_MOUSE, - mouse_event_copy.pointer_details().pointer_type()); - EXPECT_EQ(0.0f, mouse_event_copy.pointer_details().radius_x()); - EXPECT_EQ(0.0f, mouse_event_copy.pointer_details().radius_y()); - EXPECT_TRUE(std::isnan(mouse_event_copy.pointer_details().force())); - EXPECT_EQ(0.0f, mouse_event_copy.pointer_details().tilt_x()); - EXPECT_EQ(0.0f, mouse_event_copy.pointer_details().tilt_y()); + mouse_event_copy.pointer_details().pointer_type); + EXPECT_EQ(0.0f, mouse_event_copy.pointer_details().radius_x); + EXPECT_EQ(0.0f, mouse_event_copy.pointer_details().radius_y); + EXPECT_TRUE(std::isnan(mouse_event_copy.pointer_details().force)); + EXPECT_EQ(0.0f, mouse_event_copy.pointer_details().tilt_x); + EXPECT_EQ(0.0f, mouse_event_copy.pointer_details().tilt_y); } TEST(EventTest, PointerEventDetailsStylus) { @@ -685,21 +685,21 @@ stylus_event.set_pointer_details(pointer_details); EXPECT_EQ(EventPointerType::POINTER_TYPE_PEN, - stylus_event.pointer_details().pointer_type()); - EXPECT_EQ(21.0f, stylus_event.pointer_details().force()); - EXPECT_EQ(45.0f, stylus_event.pointer_details().tilt_x()); - EXPECT_EQ(-45.0f, stylus_event.pointer_details().tilt_y()); - EXPECT_EQ(0.0f, stylus_event.pointer_details().radius_x()); - EXPECT_EQ(0.0f, stylus_event.pointer_details().radius_y()); + stylus_event.pointer_details().pointer_type); + EXPECT_EQ(21.0f, stylus_event.pointer_details().force); + EXPECT_EQ(45.0f, stylus_event.pointer_details().tilt_x); + EXPECT_EQ(-45.0f, stylus_event.pointer_details().tilt_y); + EXPECT_EQ(0.0f, stylus_event.pointer_details().radius_x); + EXPECT_EQ(0.0f, stylus_event.pointer_details().radius_y); ui::MouseEvent stylus_event_copy(stylus_event); EXPECT_EQ(EventPointerType::POINTER_TYPE_PEN, - stylus_event_copy.pointer_details().pointer_type()); - EXPECT_EQ(21.0f, stylus_event_copy.pointer_details().force()); - EXPECT_EQ(45.0f, stylus_event_copy.pointer_details().tilt_x()); - EXPECT_EQ(-45.0f, stylus_event_copy.pointer_details().tilt_y()); - EXPECT_EQ(0.0f, stylus_event_copy.pointer_details().radius_x()); - EXPECT_EQ(0.0f, stylus_event_copy.pointer_details().radius_y()); + stylus_event_copy.pointer_details().pointer_type); + EXPECT_EQ(21.0f, stylus_event_copy.pointer_details().force); + EXPECT_EQ(45.0f, stylus_event_copy.pointer_details().tilt_x); + EXPECT_EQ(-45.0f, stylus_event_copy.pointer_details().tilt_y); + EXPECT_EQ(0.0f, stylus_event_copy.pointer_details().radius_x); + EXPECT_EQ(0.0f, stylus_event_copy.pointer_details().radius_y); } } // namespace ui
diff --git a/ui/events/gesture_detection/filtered_gesture_provider.cc b/ui/events/gesture_detection/filtered_gesture_provider.cc index e616e7b..be4b197 100644 --- a/ui/events/gesture_detection/filtered_gesture_provider.cc +++ b/ui/events/gesture_detection/filtered_gesture_provider.cc
@@ -6,12 +6,13 @@ #include "base/auto_reset.h" #include "base/logging.h" +#include "ui/events/blink/blink_event_util.h" #include "ui/events/gesture_detection/motion_event.h" namespace ui { FilteredGestureProvider::TouchHandlingResult::TouchHandlingResult() - : succeeded(false), did_generate_scroll(false) { + : succeeded(false), moved_beyond_slop_region(false) { } FilteredGestureProvider::FilteredGestureProvider( @@ -21,7 +22,7 @@ gesture_provider_(config, this), gesture_filter_(this), handling_event_(false), - last_touch_event_did_generate_scroll_(false) { + any_touch_moved_beyond_slop_region_(false) { } FilteredGestureProvider::TouchHandlingResult @@ -30,7 +31,10 @@ base::AutoReset<bool> handling_event(&handling_event_, true); pending_gesture_packet_ = GestureEventDataPacket::FromTouch(event); - last_touch_event_did_generate_scroll_ = false; + + if (event.GetAction() == MotionEvent::ACTION_DOWN) + any_touch_moved_beyond_slop_region_ = false; + if (!gesture_provider_.OnTouchEvent(event)) return TouchHandlingResult(); @@ -43,7 +47,7 @@ TouchHandlingResult result; result.succeeded = true; - result.did_generate_scroll = last_touch_event_did_generate_scroll_; + result.moved_beyond_slop_region = any_touch_moved_beyond_slop_region_; return result; } @@ -76,11 +80,9 @@ void FilteredGestureProvider::OnGestureEvent(const GestureEventData& event) { if (handling_event_) { - if (event.details.type() == ui::ET_GESTURE_SCROLL_BEGIN || - event.details.type() == ui::ET_GESTURE_SCROLL_UPDATE || - event.details.type() == ui::ET_SCROLL_FLING_START) { - last_touch_event_did_generate_scroll_ = true; - } + if (event.details.type() == ui::ET_GESTURE_SCROLL_BEGIN) + any_touch_moved_beyond_slop_region_ = true; + pending_gesture_packet_.Push(event); return; }
diff --git a/ui/events/gesture_detection/filtered_gesture_provider.h b/ui/events/gesture_detection/filtered_gesture_provider.h index d8a8dc0d..c0af13b 100644 --- a/ui/events/gesture_detection/filtered_gesture_provider.h +++ b/ui/events/gesture_detection/filtered_gesture_provider.h
@@ -34,11 +34,8 @@ // |event| and cease further propagation. bool succeeded; - // Whether |event| produced scrolling motion, either the start of a scroll, - // subsequent scroll movement or a fling event. - // TODO(jdduke): Figure out a way to guarantee that this bit propagates with - // the processed touch event as it moves downstream. - bool did_generate_scroll; + // Whether |event| occurred beyond the touch slop region. + bool moved_beyond_slop_region; }; TouchHandlingResult OnTouchEvent(const MotionEvent& event) WARN_UNUSED_RESULT; @@ -66,7 +63,7 @@ ui::TouchDispositionGestureFilter gesture_filter_; bool handling_event_; - bool last_touch_event_did_generate_scroll_; + bool any_touch_moved_beyond_slop_region_; ui::GestureEventDataPacket pending_gesture_packet_; DISALLOW_COPY_AND_ASSIGN(FilteredGestureProvider);
diff --git a/ui/events/gesture_detection/filtered_gesture_provider_unittest.cc b/ui/events/gesture_detection/filtered_gesture_provider_unittest.cc index 4514946..d3e10f6 100644 --- a/ui/events/gesture_detection/filtered_gesture_provider_unittest.cc +++ b/ui/events/gesture_detection/filtered_gesture_provider_unittest.cc
@@ -22,63 +22,133 @@ base::MessageLoopForUI message_loop_; }; -TEST_F(FilteredGestureProviderTest, TouchDidGenerateScroll) { +// Single touch drag test: After touch-start, the moved_beyond_slop_region bit +// should stay unset as long as the touch movement is confined to the slop +// region. Once the touch moves beyond the slop region, the bit should remain +// set until (incl) touch-end. +TEST_F(FilteredGestureProviderTest, TouchMovedBeyondSlopRegion_SingleTouch) { GestureProvider::Config config; FilteredGestureProvider provider(config, this); const float kSlopRegion = config.gesture_detector_config.touch_slop; test::MockMotionEvent event; + event.set_event_time(base::TimeTicks::Now()); event.PressPoint(0, 0); auto result = provider.OnTouchEvent(event); EXPECT_TRUE(result.succeeded); - EXPECT_FALSE(result.did_generate_scroll); + EXPECT_FALSE(result.moved_beyond_slop_region); event.MovePoint(0, kSlopRegion / 2.f, 0); result = provider.OnTouchEvent(event); EXPECT_TRUE(result.succeeded); - EXPECT_FALSE(result.did_generate_scroll); + EXPECT_FALSE(result.moved_beyond_slop_region); - // Exceeding the slop should triggering scrolling and be reflected in the API. event.MovePoint(0, kSlopRegion * 2.f, 0); result = provider.OnTouchEvent(event); EXPECT_TRUE(result.succeeded); - EXPECT_TRUE(result.did_generate_scroll); + EXPECT_TRUE(result.moved_beyond_slop_region); - // No movement should indicate no scrolling. event.MovePoint(0, kSlopRegion * 2.f, 0); result = provider.OnTouchEvent(event); EXPECT_TRUE(result.succeeded); - EXPECT_FALSE(result.did_generate_scroll); + EXPECT_TRUE(result.moved_beyond_slop_region); - // Nonzero movement should reflect scrolling after exceeding the slop region. event.MovePoint(0, 0, 0); result = provider.OnTouchEvent(event); EXPECT_TRUE(result.succeeded); - EXPECT_TRUE(result.did_generate_scroll); + EXPECT_TRUE(result.moved_beyond_slop_region); - // Ending a touch with no fling should not indicate scrolling. event.ReleasePoint(); result = provider.OnTouchEvent(event); EXPECT_TRUE(result.succeeded); - EXPECT_FALSE(result.did_generate_scroll); + EXPECT_TRUE(result.moved_beyond_slop_region); - // Ending a touch with a fling *should* indicate scrolling. + // A new touch sequence should reset the bit. base::TimeTicks time = base::TimeTicks::Now(); event.PressPoint(0, 0); event.set_event_time(time); - ASSERT_TRUE(provider.OnTouchEvent(event).succeeded); + result = provider.OnTouchEvent(event); + ASSERT_TRUE(result.succeeded); + EXPECT_FALSE(result.moved_beyond_slop_region); + // A fling should set the bit right away. time += base::TimeDelta::FromMilliseconds(10); event.MovePoint(0, kSlopRegion * 50, 0); event.set_event_time(time); - ASSERT_TRUE(provider.OnTouchEvent(event).succeeded); + result = provider.OnTouchEvent(event); + ASSERT_TRUE(result.succeeded); + EXPECT_TRUE(result.moved_beyond_slop_region); event.ReleasePoint(); result = provider.OnTouchEvent(event); EXPECT_TRUE(result.succeeded); - EXPECT_TRUE(result.did_generate_scroll); + EXPECT_TRUE(result.moved_beyond_slop_region); +} + +// Multi-touch: The moved_beyond_slop_region bit should stay unset as long as +// all touch-points are stationary, and should be set after (including) the +// first movement in any touch-point. +TEST_F(FilteredGestureProviderTest, TouchMovedBeyondSlopRegion_MultiTouch) { + GestureProvider::Config config; + FilteredGestureProvider provider(config, this); + + const float kSlopRegion = config.gesture_detector_config.touch_slop; + + test::MockMotionEvent event; + + float x = 0; + const float y0 = 0; + const float y1 = kSlopRegion * 10.f; + const float y2 = kSlopRegion * 20.f; + + event.set_event_time(base::TimeTicks::Now()); + event.PressPoint(x, y0); + auto result = provider.OnTouchEvent(event); + EXPECT_TRUE(result.succeeded); + EXPECT_FALSE(result.moved_beyond_slop_region); + + event.PressPoint(x, y1); + result = provider.OnTouchEvent(event); + EXPECT_TRUE(result.succeeded); + EXPECT_FALSE(result.moved_beyond_slop_region); + + event.PressPoint(x, y2); + result = provider.OnTouchEvent(event); + EXPECT_TRUE(result.succeeded); + EXPECT_FALSE(result.moved_beyond_slop_region); + + for (float multiplier = 0.5f; multiplier < 3.f; multiplier += 2.f) { + x = kSlopRegion * multiplier; + + event.MovePoint(0, x, y0); + result = provider.OnTouchEvent(event); + EXPECT_TRUE(result.succeeded); + EXPECT_TRUE(result.moved_beyond_slop_region); + + event.MovePoint(0, x, y0); + result = provider.OnTouchEvent(event); + EXPECT_TRUE(result.succeeded); + EXPECT_TRUE(result.moved_beyond_slop_region); + + event.MovePoint(2, x, y2); + result = provider.OnTouchEvent(event); + EXPECT_TRUE(result.succeeded); + EXPECT_TRUE(result.moved_beyond_slop_region); + + event.MovePoint(1, x, y1); + result = provider.OnTouchEvent(event); + EXPECT_TRUE(result.succeeded); + EXPECT_TRUE(result.moved_beyond_slop_region); + } + + for(int i = 0; i < 3; i++) { + event.ReleasePoint(); + result = provider.OnTouchEvent(event); + EXPECT_TRUE(result.succeeded); + EXPECT_TRUE(result.moved_beyond_slop_region); + } } } // namespace ui
diff --git a/ui/events/gestures/gesture_provider_aura.cc b/ui/events/gestures/gesture_provider_aura.cc index 9bfe5fd..1adbc64 100644 --- a/ui/events/gestures/gesture_provider_aura.cc +++ b/ui/events/gestures/gesture_provider_aura.cc
@@ -36,7 +36,7 @@ if (!result.succeeded) return false; - event->set_may_cause_scrolling(result.did_generate_scroll); + event->set_may_cause_scrolling(result.moved_beyond_slop_region); pointer_state_.CleanupRemovedTouchPoints(*event); return true; }
diff --git a/ui/events/gestures/motion_event_aura.cc b/ui/events/gestures/motion_event_aura.cc index 7b6e34e..eff71e1 100644 --- a/ui/events/gestures/motion_event_aura.cc +++ b/ui/events/gestures/motion_event_aura.cc
@@ -33,11 +33,11 @@ pointer_properties.raw_x = touch.root_location_f().x(); pointer_properties.raw_y = touch.root_location_f().y(); pointer_properties.id = touch.touch_id(); - pointer_properties.pressure = touch.pointer_details().force(); + pointer_properties.pressure = touch.pointer_details().force; pointer_properties.source_device_id = touch.source_device_id(); - pointer_properties.SetAxesAndOrientation(touch.pointer_details().radius_x(), - touch.pointer_details().radius_y(), + pointer_properties.SetAxesAndOrientation(touch.pointer_details().radius_x, + touch.pointer_details().radius_y, touch.rotation_angle()); if (!pointer_properties.touch_major) { pointer_properties.touch_major = @@ -48,7 +48,7 @@ } pointer_properties.tool_type = EventPointerTypeToMotionEventToolType( - touch.pointer_details().pointer_type()); + touch.pointer_details().pointer_type); return pointer_properties; }
diff --git a/ui/events/gestures/motion_event_aura_unittest.cc b/ui/events/gestures/motion_event_aura_unittest.cc index 75f49ff..2e35a23 100644 --- a/ui/events/gestures/motion_event_aura_unittest.cc +++ b/ui/events/gestures/motion_event_aura_unittest.cc
@@ -432,7 +432,7 @@ EXPECT_EQ(MotionEvent::TOOL_TYPE_FINGER, event.GetToolType(0)); // TODO(robert.bradford): crbug.com/575162: Test TOOL_TYPE_PEN when - // TouchEvents can have their PointerDetails::pointer_type() something other + // TouchEvents can have their PointerDetails::pointer_type something other // than POINTER_TYPE_TOUCH }
diff --git a/ui/events/ozone/evdev/tablet_event_converter_evdev_unittest.cc b/ui/events/ozone/evdev/tablet_event_converter_evdev_unittest.cc index b7def520..d7a83df 100644 --- a/ui/events/ozone/evdev/tablet_event_converter_evdev_unittest.cc +++ b/ui/events/ozone/evdev/tablet_event_converter_evdev_unittest.cc
@@ -418,20 +418,20 @@ ui::MouseEvent* event = dispatched_event(0); EXPECT_EQ(ui::ET_MOUSE_MOVED, event->type()); EXPECT_EQ(ui::EventPointerType::POINTER_TYPE_PEN, - event->pointer_details().pointer_type()); - EXPECT_FLOAT_EQ(5.625f, event->pointer_details().tilt_x()); - EXPECT_FLOAT_EQ(0.f, event->pointer_details().tilt_y()); + event->pointer_details().pointer_type); + EXPECT_FLOAT_EQ(5.625f, event->pointer_details().tilt_x); + EXPECT_FLOAT_EQ(0.f, event->pointer_details().tilt_y); event = dispatched_event(1); EXPECT_EQ(ui::ET_MOUSE_PRESSED, event->type()); EXPECT_EQ(ui::EventPointerType::POINTER_TYPE_PEN, - event->pointer_details().pointer_type()); - EXPECT_FLOAT_EQ((float)992 / 2047, event->pointer_details().force()); + event->pointer_details().pointer_type); + EXPECT_FLOAT_EQ((float)992 / 2047, event->pointer_details().force); EXPECT_EQ(true, event->IsLeftMouseButton()); event = dispatched_event(2); EXPECT_EQ(ui::EventPointerType::POINTER_TYPE_PEN, - event->pointer_details().pointer_type()); + event->pointer_details().pointer_type); EXPECT_EQ(ui::ET_MOUSE_RELEASED, event->type()); - EXPECT_FLOAT_EQ(0.0f, event->pointer_details().force()); + EXPECT_FLOAT_EQ(0.0f, event->pointer_details().force); EXPECT_EQ(true, event->IsLeftMouseButton()); }
diff --git a/ui/events/x/events_x_unittest.cc b/ui/events/x/events_x_unittest.cc index 7ec0ee4..42f38a30e 100644 --- a/ui/events/x/events_x_unittest.cc +++ b/ui/events/x/events_x_unittest.cc
@@ -244,8 +244,8 @@ EXPECT_FLOAT_EQ(GetTouchAngle(scoped_xevent), 0.15f); PointerDetails pointer_details = GetTouchPointerDetailsFromNative(scoped_xevent); - EXPECT_FLOAT_EQ(pointer_details.radius_x(), 10.0f); - EXPECT_FLOAT_EQ(pointer_details.force(), 0.1f); + EXPECT_FLOAT_EQ(pointer_details.radius_x, 10.0f); + EXPECT_FLOAT_EQ(pointer_details.force, 0.1f); // Touch update, with new orientation info. valuators.clear(); @@ -258,8 +258,8 @@ EXPECT_EQ(GetTouchId(scoped_xevent), 0); EXPECT_FLOAT_EQ(GetTouchAngle(scoped_xevent), 0.25f); pointer_details = GetTouchPointerDetailsFromNative(scoped_xevent); - EXPECT_FLOAT_EQ(pointer_details.radius_x(), 10.0f); - EXPECT_FLOAT_EQ(pointer_details.force(), 0.1f); + EXPECT_FLOAT_EQ(pointer_details.radius_x, 10.0f); + EXPECT_FLOAT_EQ(pointer_details.force, 0.1f); // Another touch with tracking id 6, touch id 1. valuators.clear(); @@ -274,8 +274,8 @@ EXPECT_EQ(GetTouchId(scoped_xevent), 1); EXPECT_FLOAT_EQ(GetTouchAngle(scoped_xevent), 0.45f); pointer_details = GetTouchPointerDetailsFromNative(scoped_xevent); - EXPECT_FLOAT_EQ(pointer_details.radius_x(), 50.0f); - EXPECT_FLOAT_EQ(pointer_details.force(), 0.5f); + EXPECT_FLOAT_EQ(pointer_details.radius_x, 50.0f); + EXPECT_FLOAT_EQ(pointer_details.force, 0.5f); // Touch with tracking id 5 should have old radius/angle value and new pressue // value. @@ -288,8 +288,8 @@ EXPECT_EQ(GetTouchId(scoped_xevent), 0); EXPECT_FLOAT_EQ(GetTouchAngle(scoped_xevent), 0.25f); pointer_details = GetTouchPointerDetailsFromNative(scoped_xevent); - EXPECT_FLOAT_EQ(pointer_details.radius_x(), 10.0f); - EXPECT_FLOAT_EQ(pointer_details.force(), 0.05f); + EXPECT_FLOAT_EQ(pointer_details.radius_x, 10.0f); + EXPECT_FLOAT_EQ(pointer_details.force, 0.05f); // Touch with tracking id 6 should have old angle/pressure value and new // radius value. @@ -302,8 +302,8 @@ EXPECT_EQ(GetTouchId(scoped_xevent), 1); EXPECT_FLOAT_EQ(GetTouchAngle(scoped_xevent), 0.45f); pointer_details = GetTouchPointerDetailsFromNative(scoped_xevent); - EXPECT_FLOAT_EQ(pointer_details.radius_x(), 25.0f); - EXPECT_FLOAT_EQ(pointer_details.force(), 0.5f); + EXPECT_FLOAT_EQ(pointer_details.radius_x, 25.0f); + EXPECT_FLOAT_EQ(pointer_details.force, 0.5f); } int GetTouchIdForTrackingId(uint32_t tracking_id) {
diff --git a/ui/file_manager/audio_player/elements/audio_player.js b/ui/file_manager/audio_player/elements/audio_player.js index 8a20662..fa1213a 100644 --- a/ui/file_manager/audio_player/elements/audio_player.js +++ b/ui/file_manager/audio_player/elements/audio_player.js
@@ -271,15 +271,16 @@ this.playing = isNextTrackAvailable; - // If there is only a single file in the list, 'currentTrackInde' is not - // changed and the handler is not invoked. Instead, plays here. - // TODO(yoshiki): clean up the code around here. - if (isNextTrackAvailable && - this.$.trackList.currentTrackIndex == nextTrackIndex) { - this.$.audio.play(); - } - + var shouldFireEvent = this.$.trackList.currentTrackIndex === nextTrackIndex; this.$.trackList.currentTrackIndex = nextTrackIndex; + this.$.audio.currentTime = 0; + // If the next track and current track is the same, + // the event will not be fired. + // So we will fire the event here. + // This happenes if there is only one song. + if (shouldFireEvent) { + this.$.trackList.fire('current-track-index-changed'); + } }, /**
diff --git a/ui/file_manager/audio_player/elements/track_info_panel.css b/ui/file_manager/audio_player/elements/track_info_panel.css index ba2402c..ef20355 100644 --- a/ui/file_manager/audio_player/elements/track_info_panel.css +++ b/ui/file_manager/audio_player/elements/track_info_panel.css
@@ -14,7 +14,7 @@ /* Track item. */ .track { align-items: center; - background-color: rgba(255, 255, 255, 0.9); + background-color: rgba(255, 255, 255, 1.0); display: flex; height: 48px; justify-content: space-between; @@ -22,6 +22,7 @@ } :host[expanded] .track { + background-color: rgba(255, 255, 255, 0.9); bottom: 0px; position: absolute; }
diff --git a/ui/gfx/BUILD.gn b/ui/gfx/BUILD.gn index 4d181b6c..a2edb90 100644 --- a/ui/gfx/BUILD.gn +++ b/ui/gfx/BUILD.gn
@@ -214,6 +214,8 @@ "win/direct_manipulation.h", "win/direct_write.cc", "win/direct_write.h", + "win/display_info.cc", + "win/display_info.h", "win/dpi.cc", "win/dpi.h", "win/hwnd_util.cc", @@ -221,6 +223,8 @@ "win/physical_size.cc", "win/physical_size.h", "win/scoped_set_map_mode.h", + "win/screen_win_display.cc", + "win/screen_win_display.h", "win/singleton_hwnd.cc", "win/singleton_hwnd.h", "win/singleton_hwnd_observer.cc", @@ -547,6 +551,7 @@ "vector_icons/tab_media_recording.icon", "vector_icons/tablet.icon", "vector_icons/translate.icon", + "vector_icons/upgrade_menu_item.icon", "vector_icons/warning.icon", "vector_icons/warning_badge.icon", "vector_icons/web.icon", @@ -593,6 +598,7 @@ "image/image_unittest_util.h", "image/image_unittest_util_ios.mm", "image/image_unittest_util_mac.mm", + "test/display_util.h", "test/fontconfig_util_linux.cc", "test/fontconfig_util_linux.h", "test/gfx_util.cc",
diff --git a/ui/gfx/display.h b/ui/gfx/display.h index 6076e49..a3bb0a8 100644 --- a/ui/gfx/display.h +++ b/ui/gfx/display.h
@@ -154,6 +154,11 @@ TouchSupport touch_support_; }; +// This is declared here for use in gtest-based unit tests but is defined in +// the gfx_test_support target. Depend on that to use this in your unit test. +// This should not be used in production code - call ToString() instead. +void PrintTo(const Display& display, ::std::ostream* os); + } // namespace gfx #endif // UI_GFX_DISPLAY_H_
diff --git a/ui/gfx/gfx.gyp b/ui/gfx/gfx.gyp index c2bb097..a9c20d89 100644 --- a/ui/gfx/gfx.gyp +++ b/ui/gfx/gfx.gyp
@@ -308,6 +308,8 @@ 'win/direct_manipulation.h', 'win/direct_write.cc', 'win/direct_write.h', + 'win/display_info.cc', + 'win/display_info.h', 'win/dpi.cc', 'win/dpi.h', 'win/hwnd_util.cc', @@ -315,6 +317,8 @@ "win/physical_size.cc", "win/physical_size.h", 'win/scoped_set_map_mode.h', + 'win/screen_win_display.cc', + 'win/screen_win_display.h', 'win/singleton_hwnd.cc', 'win/singleton_hwnd.h', 'win/singleton_hwnd_observer.cc', @@ -525,6 +529,7 @@ 'image/image_unittest_util.h', 'image/image_unittest_util_ios.mm', 'image/image_unittest_util_mac.mm', + 'test/display_util.h', 'test/fontconfig_util_linux.cc', 'test/fontconfig_util_linux.h', 'test/gfx_util.cc',
diff --git a/ui/gfx/screen_win.cc b/ui/gfx/screen_win.cc index 3199f7a..46bce435 100644 --- a/ui/gfx/screen_win.cc +++ b/ui/gfx/screen_win.cc
@@ -5,118 +5,97 @@ #include "ui/gfx/screen_win.h" #include <windows.h> -#include <stdint.h> #include "base/bind.h" #include "base/bind_helpers.h" -#include "base/hash.h" -#include "base/logging.h" -#include "base/strings/utf_string_conversions.h" -#include "base/win/win_util.h" #include "ui/gfx/display.h" +#include "ui/gfx/geometry/point.h" +#include "ui/gfx/geometry/rect.h" +#include "ui/gfx/win/display_info.h" #include "ui/gfx/win/dpi.h" +#include "ui/gfx/win/screen_win_display.h" namespace { -MONITORINFOEX GetMonitorInfoForMonitor(HMONITOR monitor) { - MONITORINFOEX monitor_info; - ZeroMemory(&monitor_info, sizeof(MONITORINFOEX)); - monitor_info.cbSize = sizeof(monitor_info); - GetMonitorInfo(monitor, &monitor_info); - return monitor_info; +std::vector<gfx::win::ScreenWinDisplay> DisplayInfosToScreenWinDisplays( + const std::vector<gfx::win::DisplayInfo>& display_infos) { + std::vector<gfx::win::ScreenWinDisplay> screen_win_displays; + for (const auto& display_info : display_infos) + screen_win_displays.push_back(gfx::win::ScreenWinDisplay(display_info)); + + return screen_win_displays; } -gfx::Display GetDisplay(const MONITORINFOEX& monitor_info) { - int64_t id = - static_cast<int64_t>(base::Hash(base::WideToUTF8(monitor_info.szDevice))); - gfx::Rect bounds = gfx::Rect(monitor_info.rcMonitor); - gfx::Display display(id); - display.set_bounds(gfx::win::ScreenToDIPRect(bounds)); - display.set_work_area( - gfx::win::ScreenToDIPRect(gfx::Rect(monitor_info.rcWork))); - display.SetScaleAndBounds(gfx::GetDPIScale(), bounds); +std::vector<gfx::Display> ScreenWinDisplaysToDisplays( + const std::vector<gfx::win::ScreenWinDisplay>& screen_win_displays) { + std::vector<gfx::Display> displays; + for (const auto& screen_win_display : screen_win_displays) + displays.push_back(screen_win_display.display()); - DEVMODE mode; - memset(&mode, 0, sizeof(DEVMODE)); - mode.dmSize = sizeof(DEVMODE); - mode.dmDriverExtra = 0; - if (EnumDisplaySettings(monitor_info.szDevice, - ENUM_CURRENT_SETTINGS, - &mode)) { - switch (mode.dmDisplayOrientation) { - case DMDO_DEFAULT: - display.set_rotation(gfx::Display::ROTATE_0); - break; - case DMDO_90: - display.set_rotation(gfx::Display::ROTATE_90); - break; - case DMDO_180: - display.set_rotation(gfx::Display::ROTATE_180); - break; - case DMDO_270: - display.set_rotation(gfx::Display::ROTATE_270); - break; - default: - NOTREACHED(); - } - } + return displays; +} - return display; +MONITORINFOEX MonitorInfoFromHMONITOR(HMONITOR monitor) { + MONITORINFOEX monitor_info; + ::ZeroMemory(&monitor_info, sizeof(monitor_info)); + monitor_info.cbSize = sizeof(monitor_info); + ::GetMonitorInfo(monitor, &monitor_info); + return monitor_info; } BOOL CALLBACK EnumMonitorCallback(HMONITOR monitor, HDC hdc, LPRECT rect, LPARAM data) { - std::vector<gfx::Display>* all_displays = - reinterpret_cast<std::vector<gfx::Display>*>(data); - DCHECK(all_displays); - - MONITORINFOEX monitor_info = GetMonitorInfoForMonitor(monitor); - gfx::Display display = GetDisplay(monitor_info); - all_displays->push_back(display); + std::vector<gfx::win::DisplayInfo>* display_infos = + reinterpret_cast<std::vector<gfx::win::DisplayInfo>*>(data); + DCHECK(display_infos); + display_infos->push_back( + gfx::win::DisplayInfo(MonitorInfoFromHMONITOR(monitor), + gfx::GetDPIScale())); return TRUE; } -std::vector<gfx::Display> GetDisplays() { - std::vector<gfx::Display> displays; - EnumDisplayMonitors(NULL, NULL, EnumMonitorCallback, - reinterpret_cast<LPARAM>(&displays)); - return displays; +std::vector<gfx::win::DisplayInfo> GetDisplayInfosFromSystem() { + std::vector<gfx::win::DisplayInfo> display_infos; + EnumDisplayMonitors(nullptr, nullptr, EnumMonitorCallback, + reinterpret_cast<LPARAM>(&display_infos)); + DCHECK_EQ(static_cast<size_t>(::GetSystemMetrics(SM_CMONITORS)), + display_infos.size()); + return display_infos; } } // namespace namespace gfx { -ScreenWin::ScreenWin() - : singleton_hwnd_observer_(new SingletonHwndObserver( - base::Bind(&ScreenWin::OnWndProc, base::Unretained(this)))), - displays_(GetDisplays()) { +ScreenWin::ScreenWin() { + Initialize(); } -ScreenWin::~ScreenWin() {} +ScreenWin::~ScreenWin() = default; HWND ScreenWin::GetHWNDFromNativeView(NativeView window) const { NOTREACHED(); - return NULL; + return nullptr; } NativeWindow ScreenWin::GetNativeWindowFromHWND(HWND hwnd) const { NOTREACHED(); - return NULL; + return nullptr; } gfx::Point ScreenWin::GetCursorScreenPoint() { POINT pt; - GetCursorPos(&pt); + ::GetCursorPos(&pt); gfx::Point cursor_pos_pixels(pt); return gfx::win::ScreenToDIPPoint(cursor_pos_pixels); } gfx::NativeWindow ScreenWin::GetWindowUnderCursor() { POINT cursor_loc; - HWND hwnd = GetCursorPos(&cursor_loc) ? WindowFromPoint(cursor_loc) : NULL; + HWND hwnd = + ::GetCursorPos(&cursor_loc) ? ::WindowFromPoint(cursor_loc) : nullptr; return GetNativeWindowFromHWND(hwnd); } @@ -126,11 +105,11 @@ } int ScreenWin::GetNumDisplays() const { - return GetSystemMetrics(SM_CMONITORS); + return static_cast<int>(screen_win_displays_.size()); } std::vector<gfx::Display> ScreenWin::GetAllDisplays() const { - return displays_; + return ScreenWinDisplaysToDisplays(screen_win_displays_); } gfx::Display ScreenWin::GetDisplayNearestWindow(gfx::NativeView window) const { @@ -141,45 +120,26 @@ // scaling factor. return GetPrimaryDisplay(); } - - MONITORINFOEX monitor_info; - monitor_info.cbSize = sizeof(monitor_info); - GetMonitorInfo(MonitorFromWindow(window_hwnd, MONITOR_DEFAULTTONEAREST), - &monitor_info); - return GetDisplay(monitor_info); + gfx::win::ScreenWinDisplay screen_win_display = + GetScreenWinDisplayNearestHWND(window_hwnd); + return screen_win_display.display(); } gfx::Display ScreenWin::GetDisplayNearestPoint(const gfx::Point& point) const { - gfx::Point point_in_pixels = gfx::win::DIPToScreenPoint(point); - POINT initial_loc = { point_in_pixels.x(), point_in_pixels.y() }; - HMONITOR monitor = MonitorFromPoint(initial_loc, MONITOR_DEFAULTTONEAREST); - MONITORINFOEX mi; - ZeroMemory(&mi, sizeof(MONITORINFOEX)); - mi.cbSize = sizeof(mi); - if (monitor && GetMonitorInfo(monitor, &mi)) { - return GetDisplay(mi); - } - return gfx::Display(); + gfx::Point screen_point(gfx::win::DIPToScreenPoint(point)); + gfx::win::ScreenWinDisplay screen_win_display = + GetScreenWinDisplayNearestScreenPoint(screen_point); + return screen_win_display.display(); } gfx::Display ScreenWin::GetDisplayMatching(const gfx::Rect& match_rect) const { - RECT other_bounds_rect = match_rect.ToRECT(); - MONITORINFOEX monitor_info = GetMonitorInfoForMonitor(MonitorFromRect( - &other_bounds_rect, MONITOR_DEFAULTTONEAREST)); - return GetDisplay(monitor_info); + gfx::win::ScreenWinDisplay screen_win_display = + GetScreenWinDisplayNearestScreenRect(match_rect); + return screen_win_display.display(); } gfx::Display ScreenWin::GetPrimaryDisplay() const { - MONITORINFOEX mi = GetMonitorInfoForMonitor( - MonitorFromWindow(NULL, MONITOR_DEFAULTTOPRIMARY)); - gfx::Display display = GetDisplay(mi); - // TODO(kevers|girard): Test if these checks can be reintroduced for high-DIP - // once more of the app is DIP-aware. - if (GetDPIScale() == 1.0) { - DCHECK_EQ(GetSystemMetrics(SM_CXSCREEN), display.size().width()); - DCHECK_EQ(GetSystemMetrics(SM_CYSCREEN), display.size().height()); - } - return display; + return GetPrimaryScreenWinDisplay().display(); } void ScreenWin::AddObserver(DisplayObserver* observer) { @@ -190,6 +150,41 @@ change_notifier_.RemoveObserver(observer); } +void ScreenWin::UpdateFromDisplayInfos( + const std::vector<gfx::win::DisplayInfo>& display_infos) { + screen_win_displays_ = DisplayInfosToScreenWinDisplays(display_infos); +} + +void ScreenWin::Initialize() { + singleton_hwnd_observer_.reset( + new gfx::SingletonHwndObserver( + base::Bind(&ScreenWin::OnWndProc, base::Unretained(this)))); + UpdateFromDisplayInfos(GetDisplayInfosFromSystem()); +} + +MONITORINFOEX ScreenWin::MonitorInfoFromScreenPoint( + const gfx::Point& screen_point) const { + POINT initial_loc = { screen_point.x(), screen_point.y() }; + return MonitorInfoFromHMONITOR(::MonitorFromPoint(initial_loc, + MONITOR_DEFAULTTONEAREST)); +} + +MONITORINFOEX ScreenWin::MonitorInfoFromScreenRect(const gfx::Rect& screen_rect) + const { + RECT win_rect = screen_rect.ToRECT(); + return MonitorInfoFromHMONITOR(::MonitorFromRect(&win_rect, + MONITOR_DEFAULTTONEAREST)); +} + +MONITORINFOEX ScreenWin::MonitorInfoFromWindow(HWND hwnd, + DWORD default_options) const { + return MonitorInfoFromHMONITOR(::MonitorFromWindow(hwnd, default_options)); +} + +HWND ScreenWin::GetRootWindow(HWND hwnd) const { + return ::GetAncestor(hwnd, GA_ROOT); +} + void ScreenWin::OnWndProc(HWND hwnd, UINT message, WPARAM wparam, @@ -197,20 +192,52 @@ if (message != WM_DISPLAYCHANGE) return; - std::vector<gfx::Display> old_displays = displays_; - displays_ = GetDisplays(); - - change_notifier_.NotifyDisplaysChanged(old_displays, displays_); + std::vector<gfx::Display> old_displays = GetAllDisplays(); + UpdateFromDisplayInfos(GetDisplayInfosFromSystem()); + change_notifier_.NotifyDisplaysChanged(old_displays, GetAllDisplays()); } -// static -std::vector<gfx::Display> ScreenWin::GetDisplaysForMonitorInfos( - const std::vector<MONITORINFOEX>& monitor_infos) { - std::vector<gfx::Display> displays; - for (const MONITORINFOEX& monitor_info : monitor_infos) - displays.push_back(GetDisplay(monitor_info)); +gfx::win::ScreenWinDisplay ScreenWin::GetScreenWinDisplayNearestHWND(HWND hwnd) + const { + return GetScreenWinDisplay(MonitorInfoFromWindow(hwnd, + MONITOR_DEFAULTTONEAREST)); +} - return displays; +gfx::win::ScreenWinDisplay ScreenWin::GetScreenWinDisplayNearestScreenRect( + const Rect& screen_rect) const { + return GetScreenWinDisplay(MonitorInfoFromScreenRect(screen_rect)); +} + +gfx::win::ScreenWinDisplay ScreenWin::GetScreenWinDisplayNearestScreenPoint( + const Point& screen_point) const { + return GetScreenWinDisplay(MonitorInfoFromScreenPoint(screen_point)); +} + +gfx::win::ScreenWinDisplay ScreenWin::GetPrimaryScreenWinDisplay() const { + MONITORINFOEX monitor_info = MonitorInfoFromWindow(nullptr, + MONITOR_DEFAULTTOPRIMARY); + gfx::win::ScreenWinDisplay screen_win_display = + GetScreenWinDisplay(monitor_info); + gfx::Display display = screen_win_display.display(); + // The Windows primary monitor is defined to have an origin of (0, 0). + DCHECK_EQ(0, display.bounds().origin().x()); + DCHECK_EQ(0, display.bounds().origin().y()); + return screen_win_display; +} + +gfx::win::ScreenWinDisplay ScreenWin::GetScreenWinDisplay( + const MONITORINFOEX& monitor_info) const { + int64_t id = + gfx::win::DisplayInfo::DeviceIdFromDeviceName(monitor_info.szDevice); + for (const auto& screen_win_display : screen_win_displays_) { + if (screen_win_display.display().id() == id) + return screen_win_display; + } + // There is 1:1 correspondence between MONITORINFOEX and ScreenWinDisplay. + // If we make it here, it means we have no displays and we should hand out the + // default display. + DCHECK_EQ(screen_win_displays_.size(), 0u); + return gfx::win::ScreenWinDisplay(); } } // namespace gfx
diff --git a/ui/gfx/screen_win.h b/ui/gfx/screen_win.h index b1488ae..2849e66 100644 --- a/ui/gfx/screen_win.h +++ b/ui/gfx/screen_win.h
@@ -5,17 +5,30 @@ #ifndef UI_GFX_SCREEN_WIN_H_ #define UI_GFX_SCREEN_WIN_H_ -#include "base/compiler_specific.h" -#include "base/gtest_prod_util.h" +#include <windows.h> + +#include <vector> + #include "base/macros.h" -#include "base/memory/scoped_ptr.h" #include "ui/gfx/display_change_notifier.h" #include "ui/gfx/gfx_export.h" +#include "ui/gfx/native_widget_types.h" #include "ui/gfx/screen.h" #include "ui/gfx/win/singleton_hwnd_observer.h" namespace gfx { +class Display; +class Point; +class Rect; + +namespace win { + +class DisplayInfo; +class ScreenWinDisplay; + +} // namespace win + class GFX_EXPORT ScreenWin : public Screen { public: ScreenWin(); @@ -28,7 +41,7 @@ virtual NativeWindow GetNativeWindowFromHWND(HWND hwnd) const; protected: - // Overridden from gfx::Screen: + // gfx::Screen: gfx::Point GetCursorScreenPoint() override; gfx::NativeWindow GetWindowUnderCursor() override; gfx::NativeWindow GetWindowAtScreenPoint(const gfx::Point& point) override; @@ -41,22 +54,46 @@ void AddObserver(DisplayObserver* observer) override; void RemoveObserver(DisplayObserver* observer) override; - private: - FRIEND_TEST_ALL_PREFIXES(ScreenWinTest, SingleDisplay1x); - FRIEND_TEST_ALL_PREFIXES(ScreenWinTest, SingleDisplay2x); + void UpdateFromDisplayInfos( + const std::vector<gfx::win::DisplayInfo>& display_infos); + // Virtual to support mocking by unit tests. + virtual void Initialize(); + virtual MONITORINFOEX MonitorInfoFromScreenPoint( + const gfx::Point& screen_point) const; + virtual MONITORINFOEX MonitorInfoFromScreenRect(const gfx::Rect& screen_rect) + const; + virtual MONITORINFOEX MonitorInfoFromWindow(HWND hwnd, DWORD default_options) + const; + virtual HWND GetRootWindow(HWND hwnd) const; + + private: void OnWndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam); - static std::vector<gfx::Display> GetDisplaysForMonitorInfos( - const std::vector<MONITORINFOEX>& monitor_infos); + // Returns the ScreenWinDisplay closest to or enclosing |hwnd|. + gfx::win::ScreenWinDisplay GetScreenWinDisplayNearestHWND(HWND hwnd) const; + + // Returns the ScreenWinDisplay closest to or enclosing |screen_rect|. + gfx::win::ScreenWinDisplay GetScreenWinDisplayNearestScreenRect( + const Rect& screen_rect) const; + + // Returns the ScreenWinDisplay closest to or enclosing |screen_point|. + gfx::win::ScreenWinDisplay GetScreenWinDisplayNearestScreenPoint( + const Point& screen_point) const; + + // Returns the ScreenWinDisplay corresponding to the primary monitor. + gfx::win::ScreenWinDisplay GetPrimaryScreenWinDisplay() const; + + gfx::win::ScreenWinDisplay GetScreenWinDisplay( + const MONITORINFOEX& monitor_info) const; // Helper implementing the DisplayObserver handling. gfx::DisplayChangeNotifier change_notifier_; scoped_ptr<SingletonHwndObserver> singleton_hwnd_observer_; - // Current list of displays. - std::vector<gfx::Display> displays_; + // Current list of ScreenWinDisplays. + std::vector<gfx::win::ScreenWinDisplay> screen_win_displays_; DISALLOW_COPY_AND_ASSIGN(ScreenWin); };
diff --git a/ui/gfx/screen_win_unittest.cc b/ui/gfx/screen_win_unittest.cc index b1118c1..0be69c3 100644 --- a/ui/gfx/screen_win_unittest.cc +++ b/ui/gfx/screen_win_unittest.cc
@@ -4,17 +4,25 @@ #include "ui/gfx/screen_win.h" -#include <cwchar> -#include <string> -#include <vector> - #include <windows.h> +#include <inttypes.h> #include <stddef.h> +#include <cwchar> +#include <memory> +#include <string> +#include <unordered_map> +#include <vector> + +#include "base/macros.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/gfx/display.h" #include "ui/gfx/geometry/rect.h" +#include "ui/gfx/screen.h" +#include "ui/gfx/test/display_util.h" +#include "ui/gfx/win/display_info.h" #include "ui/gfx/win/dpi.h" +#include "ui/gfx/win/screen_win_display.h" namespace gfx { @@ -34,47 +42,612 @@ return monitor_info; } +class TestScreenWin : public gfx::ScreenWin { + public: + TestScreenWin(const std::vector<gfx::win::DisplayInfo>& display_infos, + const std::vector<MONITORINFOEX>& monitor_infos, + const std::unordered_map<HWND, gfx::Rect>& hwnd_map) + : monitor_infos_(monitor_infos), + hwnd_map_(hwnd_map) { + UpdateFromDisplayInfos(display_infos); + } + + ~TestScreenWin() override = default; + + protected: + // gfx::ScreenWin: + HWND GetHWNDFromNativeView(NativeView window) const override { + // NativeView is only used as an identifier in this tests, so interchange + // NativeView with an HWND for convenience. + return reinterpret_cast<HWND>(window); + } + + NativeWindow GetNativeWindowFromHWND(HWND hwnd) const override { + // NativeWindow is only used as an identifier in this tests, so interchange + // an HWND for a NativeWindow for convenience. + return reinterpret_cast<NativeWindow>(hwnd); + } + + private: + void Initialize() override {} + + MONITORINFOEX MonitorInfoFromScreenPoint(const gfx::Point& screen_point) const + override { + for (const MONITORINFOEX& monitor_info : monitor_infos_) { + if (gfx::Rect(monitor_info.rcMonitor).Contains(screen_point)) + return monitor_info; + } + NOTREACHED(); + return monitor_infos_[0]; + } + + MONITORINFOEX MonitorInfoFromScreenRect(const gfx::Rect& screen_rect) const + override { + MONITORINFOEX candidate = monitor_infos_[0]; + int largest_area = 0; + for (const MONITORINFOEX& monitor_info : monitor_infos_) { + gfx::Rect bounds(monitor_info.rcMonitor); + if (bounds.Intersects(screen_rect)) { + bounds.Intersect(screen_rect); + int area = bounds.height() * bounds.width(); + if (largest_area < area) { + candidate = monitor_info; + largest_area = area; + } + } + } + EXPECT_NE(largest_area, 0); + return candidate; + } + + MONITORINFOEX MonitorInfoFromWindow(HWND hwnd, DWORD default_options) + const override { + auto search = hwnd_map_.find(hwnd); + if (search != hwnd_map_.end()) + return MonitorInfoFromScreenRect(search->second); + + EXPECT_EQ(default_options, static_cast<DWORD>(MONITOR_DEFAULTTOPRIMARY)); + for (const auto& monitor_info : monitor_infos_) { + if (monitor_info.rcMonitor.left == 0 && + monitor_info.rcMonitor.top == 0) { + return monitor_info; + } + } + NOTREACHED(); + return monitor_infos_[0]; + } + + HWND GetRootWindow(HWND hwnd) const override { + return hwnd; + } + + std::vector<MONITORINFOEX> monitor_infos_; + std::unordered_map<HWND, gfx::Rect> hwnd_map_; + + DISALLOW_COPY_AND_ASSIGN(TestScreenWin); +}; + +Screen* GetScreen() { + return gfx::Screen::GetScreen(); +} + } // namespace -class ScreenWinTest : public testing::Test { +// Allows tests to specify the screen and associated state. +class TestScreenWinInitializer { + public: + virtual void AddMonitor(const gfx::Rect& pixel_bounds, + const gfx::Rect& pixel_work, + const wchar_t* device_name, + float device_scale_factor) = 0; + + virtual HWND CreateFakeHwnd(const gfx::Rect& bounds) = 0; +}; + +class TestScreenWinManager : public TestScreenWinInitializer { + public: + TestScreenWinManager() = default; + + ~TestScreenWinManager() { + gfx::Screen::SetScreenInstance(nullptr); + } + + void AddMonitor(const gfx::Rect& pixel_bounds, + const gfx::Rect& pixel_work, + const wchar_t* device_name, + float device_scale_factor) override { + MONITORINFOEX monitor_info = CreateMonitorInfo(pixel_bounds, + pixel_work, + device_name); + monitor_infos_.push_back(monitor_info); + display_infos_.push_back(gfx::win::DisplayInfo(monitor_info, + device_scale_factor, + gfx::Display::ROTATE_0)); + } + + HWND CreateFakeHwnd(const gfx::Rect& bounds) override { + EXPECT_EQ(screen_win_, nullptr); + hwnd_map_.insert(std::pair<HWND, gfx::Rect>(++hwndLast_, bounds)); + return hwndLast_; + } + + void InitializeScreenWin() { + ASSERT_EQ(screen_win_, nullptr); + screen_win_.reset(new TestScreenWin(display_infos_, + monitor_infos_, + hwnd_map_)); + gfx::Screen::SetScreenInstance(screen_win_.get()); + } + + ScreenWin* GetScreenWin() { + return screen_win_.get(); + } + private: + HWND hwndLast_ = nullptr; + scoped_ptr<ScreenWin> screen_win_; + std::vector<MONITORINFOEX> monitor_infos_; + std::vector<gfx::win::DisplayInfo> display_infos_; + std::unordered_map<HWND, gfx::Rect> hwnd_map_; + + DISALLOW_COPY_AND_ASSIGN(TestScreenWinManager); +}; + +class ScreenWinTest : public testing::Test { + protected: + ScreenWinTest() = default; + void SetUp() override { testing::Test::SetUp(); gfx::SetDefaultDeviceScaleFactor(1.0); + screen_win_initializer_.reset(new TestScreenWinManager()); + SetUpScreen(screen_win_initializer_.get()); + screen_win_initializer_->InitializeScreenWin(); } void TearDown() override { + screen_win_initializer_.reset(); gfx::SetDefaultDeviceScaleFactor(1.0); testing::Test::TearDown(); } + + virtual void SetUpScreen(TestScreenWinInitializer* initializer) = 0; + + NativeWindow GetNativeWindowFromHWND(HWND hwnd) const { + ScreenWin* screen_win = screen_win_initializer_->GetScreenWin(); + return screen_win->GetNativeWindowFromHWND(hwnd);; + } + + private: + scoped_ptr<TestScreenWinManager> screen_win_initializer_; + + DISALLOW_COPY_AND_ASSIGN(ScreenWinTest); }; -TEST_F(ScreenWinTest, SingleDisplay1x) { - std::vector<MONITORINFOEX> monitor_infos; - monitor_infos.push_back(CreateMonitorInfo(gfx::Rect(0, 0, 1920, 1200), - gfx::Rect(0, 0, 1920, 1100), - L"primary")); - std::vector<gfx::Display> displays = - ScreenWin::GetDisplaysForMonitorInfos(monitor_infos); +// Single Display of 1.0 Device Scale Factor. +class ScreenWinTestSingleDisplay1x : public ScreenWinTest { + public: + ScreenWinTestSingleDisplay1x() = default; + void SetUpScreen(TestScreenWinInitializer* initializer) override { + initializer->AddMonitor(gfx::Rect(0, 0, 1920, 1200), + gfx::Rect(0, 0, 1920, 1100), + L"primary", + 1.0); + fake_hwnd_ = initializer->CreateFakeHwnd(gfx::Rect(0, 0, 1920, 1100)); + } + + HWND GetFakeHwnd() { + return fake_hwnd_; + } + + private: + HWND fake_hwnd_ = nullptr; +}; + +TEST_F(ScreenWinTestSingleDisplay1x, GetDisplays) { + std::vector<gfx::Display> displays = GetScreen()->GetAllDisplays(); ASSERT_EQ(1u, displays.size()); EXPECT_EQ(gfx::Rect(0, 0, 1920, 1200), displays[0].bounds()); EXPECT_EQ(gfx::Rect(0, 0, 1920, 1100), displays[0].work_area()); } -TEST_F(ScreenWinTest, SingleDisplay2x) { - gfx::SetDefaultDeviceScaleFactor(2.0); +TEST_F(ScreenWinTestSingleDisplay1x, GetNumDisplays) { + EXPECT_EQ(1, GetScreen()->GetNumDisplays()); +} - std::vector<MONITORINFOEX> monitor_infos; - monitor_infos.push_back(CreateMonitorInfo(gfx::Rect(0, 0, 1920, 1200), - gfx::Rect(0, 0, 1920, 1100), - L"primary")); - std::vector<gfx::Display> displays = - ScreenWin::GetDisplaysForMonitorInfos(monitor_infos); +TEST_F(ScreenWinTestSingleDisplay1x, GetDisplayNearestWindowPrimaryDisplay) { + gfx::Screen* screen = GetScreen(); + EXPECT_EQ(screen->GetPrimaryDisplay(), + screen->GetDisplayNearestWindow(nullptr)); +} +TEST_F(ScreenWinTestSingleDisplay1x, GetDisplayNearestWindow) { + gfx::Screen* screen = GetScreen(); + gfx::NativeWindow native_window = GetNativeWindowFromHWND(GetFakeHwnd()); + EXPECT_EQ(screen->GetAllDisplays()[0], + screen->GetDisplayNearestWindow(native_window)); +} + +TEST_F(ScreenWinTestSingleDisplay1x, GetDisplayNearestPoint) { + gfx::Screen* screen = GetScreen(); + gfx::Display display = screen->GetAllDisplays()[0]; + EXPECT_EQ(display, screen->GetDisplayNearestPoint(gfx::Point(0, 0))); + EXPECT_EQ(display, screen->GetDisplayNearestPoint(gfx::Point(250, 952))); + EXPECT_EQ(display, screen->GetDisplayNearestPoint(gfx::Point(1919, 1199))); +} + +TEST_F(ScreenWinTestSingleDisplay1x, GetDisplayMatching) { + gfx::Screen* screen = GetScreen(); + gfx::Display display = screen->GetAllDisplays()[0]; + EXPECT_EQ(display, screen->GetDisplayMatching(gfx::Rect(0, 0, 100, 100))); + EXPECT_EQ(display, + screen->GetDisplayMatching(gfx::Rect(1819, 1099, 100, 100))); +} + +TEST_F(ScreenWinTestSingleDisplay1x, GetPrimaryDisplay) { + gfx::Screen* screen = GetScreen(); + EXPECT_EQ(gfx::Point(0, 0), screen->GetPrimaryDisplay().bounds().origin()); +} + +// Single Display of 2.0 Device Scale Factor. +class ScreenWinTestSingleDisplay2x : public ScreenWinTest { + public: + ScreenWinTestSingleDisplay2x() = default; + + void SetUpScreen(TestScreenWinInitializer* initializer) override { + gfx::SetDefaultDeviceScaleFactor(2.0); + initializer->AddMonitor(gfx::Rect(0, 0, 1920, 1200), + gfx::Rect(0, 0, 1920, 1100), + L"primary", + 2.0); + fake_hwnd_ = initializer->CreateFakeHwnd(gfx::Rect(0, 0, 1920, 1100)); + } + + HWND GetFakeHwnd() { + return fake_hwnd_; + } + + private: + HWND fake_hwnd_ = nullptr; + + DISALLOW_COPY_AND_ASSIGN(ScreenWinTestSingleDisplay2x); +}; + +TEST_F(ScreenWinTestSingleDisplay2x, GetDisplays) { + std::vector<gfx::Display> displays = GetScreen()->GetAllDisplays(); ASSERT_EQ(1u, displays.size()); EXPECT_EQ(gfx::Rect(0, 0, 960, 600), displays[0].bounds()); EXPECT_EQ(gfx::Rect(0, 0, 960, 550), displays[0].work_area()); } +TEST_F(ScreenWinTestSingleDisplay2x, GetDisplayNearestPoint) { + gfx::Screen* screen = GetScreen(); + gfx::Display display = screen->GetAllDisplays()[0]; + EXPECT_EQ(display, screen->GetDisplayNearestPoint(gfx::Point(0, 0))); + EXPECT_EQ(display, screen->GetDisplayNearestPoint(gfx::Point(125, 476))); + EXPECT_EQ(display, screen->GetDisplayNearestPoint(gfx::Point(959, 599))); +} + +TEST_F(ScreenWinTestSingleDisplay2x, GetDisplayMatching) { + gfx::Screen* screen = GetScreen(); + gfx::Display display = screen->GetAllDisplays()[0]; + EXPECT_EQ(display, screen->GetDisplayMatching(gfx::Rect(0, 0, 100, 100))); + EXPECT_EQ(display, + screen->GetDisplayMatching(gfx::Rect(1819, 1099, 100, 100))); +} + +// Two Displays of 1.0 Device Scale Factor. +class ScreenWinTestTwoDisplays1x : public ScreenWinTest { + public: + ScreenWinTestTwoDisplays1x() = default; + + void SetUpScreen(TestScreenWinInitializer* initializer) override { + initializer->AddMonitor(gfx::Rect(0, 0, 1920, 1200), + gfx::Rect(0, 0, 1920, 1100), + L"primary", + 1.0); + initializer->AddMonitor(gfx::Rect(1920, 0, 800, 600), + gfx::Rect(1920, 0, 800, 600), + L"secondary", + 1.0); + fake_hwnd_left_ = initializer->CreateFakeHwnd(gfx::Rect(0, 0, 1920, 1100)); + fake_hwnd_right_ = + initializer->CreateFakeHwnd(gfx::Rect(1920, 0, 800, 600)); + } + + HWND GetLeftFakeHwnd() { + return fake_hwnd_left_; + } + + HWND GetRightFakeHwnd() { + return fake_hwnd_right_; + } + + private: + HWND fake_hwnd_left_ = nullptr; + HWND fake_hwnd_right_ = nullptr; + + DISALLOW_COPY_AND_ASSIGN(ScreenWinTestTwoDisplays1x); +}; + +TEST_F(ScreenWinTestTwoDisplays1x, GetDisplays) { + std::vector<gfx::Display> displays = GetScreen()->GetAllDisplays(); + ASSERT_EQ(2u, displays.size()); + EXPECT_EQ(gfx::Rect(0, 0, 1920, 1200), displays[0].bounds()); + EXPECT_EQ(gfx::Rect(0, 0, 1920, 1100), displays[0].work_area()); + EXPECT_EQ(gfx::Rect(1920, 0, 800, 600), displays[1].bounds()); + EXPECT_EQ(gfx::Rect(1920, 0, 800, 600), displays[1].work_area()); +} + +TEST_F(ScreenWinTestTwoDisplays1x, GetNumDisplays) { + EXPECT_EQ(2, GetScreen()->GetNumDisplays()); +} + +TEST_F(ScreenWinTestTwoDisplays1x, GetDisplayNearestWindowPrimaryDisplay) { + gfx::Screen* screen = GetScreen(); + EXPECT_EQ(screen->GetPrimaryDisplay(), + screen->GetDisplayNearestWindow(nullptr)); +} + +TEST_F(ScreenWinTestTwoDisplays1x, GetDisplayNearestWindow) { + gfx::Screen* screen = GetScreen(); + const gfx::Display left_display = screen->GetAllDisplays()[0]; + const gfx::Display right_display = screen->GetAllDisplays()[1]; + + gfx::NativeWindow left_window = GetNativeWindowFromHWND(GetLeftFakeHwnd()); + EXPECT_EQ(left_display, screen->GetDisplayNearestWindow(left_window)); + + gfx::NativeWindow right_window = GetNativeWindowFromHWND(GetRightFakeHwnd()); + EXPECT_EQ(right_display, screen->GetDisplayNearestWindow(right_window)); +} + +TEST_F(ScreenWinTestTwoDisplays1x, GetDisplayNearestPoint) { + gfx::Screen* screen = GetScreen(); + const gfx::Display left_display = screen->GetAllDisplays()[0]; + const gfx::Display right_display = screen->GetAllDisplays()[1]; + + EXPECT_EQ(left_display, screen->GetDisplayNearestPoint(gfx::Point(0, 0))); + EXPECT_EQ(left_display, screen->GetDisplayNearestPoint(gfx::Point(250, 952))); + EXPECT_EQ(left_display, + screen->GetDisplayNearestPoint(gfx::Point(1919, 1199))); + + EXPECT_EQ(right_display, screen->GetDisplayNearestPoint(gfx::Point(1920, 0))); + EXPECT_EQ(right_display, + screen->GetDisplayNearestPoint(gfx::Point(2000, 400))); + EXPECT_EQ(right_display, + screen->GetDisplayNearestPoint(gfx::Point(2719, 599))); +} + +TEST_F(ScreenWinTestTwoDisplays1x, GetDisplayMatching) { + gfx::Screen* screen = GetScreen(); + const gfx::Display left_display = screen->GetAllDisplays()[0]; + const gfx::Display right_display = screen->GetAllDisplays()[1]; + + EXPECT_EQ(left_display, + screen->GetDisplayMatching(gfx::Rect(0, 0, 100, 100))); + EXPECT_EQ(left_display, + screen->GetDisplayMatching(gfx::Rect(1819, 1099, 100, 100))); + + EXPECT_EQ(right_display, + screen->GetDisplayMatching(gfx::Rect(1920, 0, 100, 100))); + EXPECT_EQ(right_display, + screen->GetDisplayMatching(gfx::Rect(2619, 499, 100, 100))); +} + +TEST_F(ScreenWinTestTwoDisplays1x, GetPrimaryDisplay) { + gfx::Screen* screen = GetScreen(); + gfx::Display primary = screen->GetPrimaryDisplay(); + EXPECT_EQ(gfx::Point(0, 0), primary.bounds().origin()); +} + +// Two Displays of 2.0 Device Scale Factor. +class ScreenWinTestTwoDisplays2x : public ScreenWinTest { + public: + ScreenWinTestTwoDisplays2x() = default; + + void SetUpScreen(TestScreenWinInitializer* initializer) override { + gfx::SetDefaultDeviceScaleFactor(2.0); + initializer->AddMonitor(gfx::Rect(0, 0, 1920, 1200), + gfx::Rect(0, 0, 1920, 1100), + L"primary", + 2.0); + initializer->AddMonitor(gfx::Rect(1920, 0, 800, 600), + gfx::Rect(1920, 0, 800, 600), + L"secondary", + 2.0); + fake_hwnd_left_ = initializer->CreateFakeHwnd(gfx::Rect(0, 0, 1920, 1100)); + fake_hwnd_right_ = + initializer->CreateFakeHwnd(gfx::Rect(1920, 0, 800, 600)); + } + + HWND GetLeftFakeHwnd() { + return fake_hwnd_left_; + } + + HWND GetRightFakeHwnd() { + return fake_hwnd_right_; + } + + private: + HWND fake_hwnd_left_ = nullptr; + HWND fake_hwnd_right_ = nullptr; + + DISALLOW_COPY_AND_ASSIGN(ScreenWinTestTwoDisplays2x); +}; + +TEST_F(ScreenWinTestTwoDisplays2x, GetDisplays) { + std::vector<gfx::Display> displays = GetScreen()->GetAllDisplays(); + ASSERT_EQ(2u, displays.size()); + EXPECT_EQ(gfx::Rect(0, 0, 960, 600), displays[0].bounds()); + EXPECT_EQ(gfx::Rect(0, 0, 960, 550), displays[0].work_area()); + EXPECT_EQ(gfx::Rect(960, 0, 400, 300), displays[1].bounds()); + EXPECT_EQ(gfx::Rect(960, 0, 400, 300), displays[1].work_area()); +} + +TEST_F(ScreenWinTestTwoDisplays2x, GetDisplayNearestWindowPrimaryDisplay) { + gfx::Screen* screen = GetScreen(); + EXPECT_EQ(screen->GetPrimaryDisplay(), + screen->GetDisplayNearestWindow(nullptr)); +} + +TEST_F(ScreenWinTestTwoDisplays2x, GetDisplayNearestWindow) { + gfx::Screen* screen = GetScreen(); + const gfx::Display left_display = screen->GetAllDisplays()[0]; + const gfx::Display right_display = screen->GetAllDisplays()[1]; + + gfx::NativeWindow left_window = GetNativeWindowFromHWND(GetLeftFakeHwnd()); + EXPECT_EQ(left_display, screen->GetDisplayNearestWindow(left_window)); + + gfx::NativeWindow right_window = GetNativeWindowFromHWND(GetRightFakeHwnd()); + EXPECT_EQ(right_display, screen->GetDisplayNearestWindow(right_window)); +} + +TEST_F(ScreenWinTestTwoDisplays2x, GetDisplayNearestPoint) { + gfx::Screen* screen = GetScreen(); + const gfx::Display left_display = screen->GetAllDisplays()[0]; + const gfx::Display right_display = screen->GetAllDisplays()[1]; + + EXPECT_EQ(left_display, screen->GetDisplayNearestPoint(gfx::Point(0, 0))); + EXPECT_EQ(left_display, screen->GetDisplayNearestPoint(gfx::Point(125, 476))); + EXPECT_EQ(left_display, + screen->GetDisplayNearestPoint(gfx::Point(959, 599))); + + EXPECT_EQ(right_display, screen->GetDisplayNearestPoint(gfx::Point(960, 0))); + EXPECT_EQ(right_display, + screen->GetDisplayNearestPoint(gfx::Point(1000, 200))); + EXPECT_EQ(right_display, + screen->GetDisplayNearestPoint(gfx::Point(1359, 299))); +} + +TEST_F(ScreenWinTestTwoDisplays2x, GetDisplayMatching) { + gfx::Screen* screen = GetScreen(); + const gfx::Display left_display = screen->GetAllDisplays()[0]; + const gfx::Display right_display = screen->GetAllDisplays()[1]; + + EXPECT_EQ(left_display, + screen->GetDisplayMatching(gfx::Rect(0, 0, 100, 100))); + EXPECT_EQ(left_display, + screen->GetDisplayMatching(gfx::Rect(1819, 1099, 100, 100))); + + EXPECT_EQ(right_display, + screen->GetDisplayMatching(gfx::Rect(1920, 0, 100, 100))); + EXPECT_EQ(right_display, + screen->GetDisplayMatching(gfx::Rect(2619, 499, 100, 100))); +} + +TEST_F(ScreenWinTestTwoDisplays2x, GetPrimaryDisplay) { + gfx::Screen* screen = GetScreen(); + gfx::Display primary = screen->GetPrimaryDisplay(); + EXPECT_EQ(gfx::Point(0, 0), primary.bounds().origin()); +} + +// Two Displays of 2.0 (Left) and 1.0 (Right) Device Scale Factor under +// Windows DPI Virtualization. Note that the displays do not form a euclidean +// space. +class ScreenWinTestTwoDisplays2x1xVirtualized : public ScreenWinTest { + public: + ScreenWinTestTwoDisplays2x1xVirtualized() = default; + + void SetUpScreen(TestScreenWinInitializer* initializer) override { + gfx::SetDefaultDeviceScaleFactor(2.0); + initializer->AddMonitor(gfx::Rect(0, 0, 3200, 1600), + gfx::Rect(0, 0, 3200, 1500), + L"primary", + 2.0); + initializer->AddMonitor(gfx::Rect(6400, 0, 3840, 2400), + gfx::Rect(6400, 0, 3840, 2400), + L"secondary", + 2.0); + fake_hwnd_left_ = initializer->CreateFakeHwnd(gfx::Rect(0, 0, 3200, 1500)); + fake_hwnd_right_ = + initializer->CreateFakeHwnd(gfx::Rect(6400, 0, 3840, 2400)); + } + + HWND GetLeftFakeHwnd() { + return fake_hwnd_left_; + } + + HWND GetRightFakeHwnd() { + return fake_hwnd_right_; + } + + private: + HWND fake_hwnd_left_ = nullptr; + HWND fake_hwnd_right_ = nullptr; + + DISALLOW_COPY_AND_ASSIGN(ScreenWinTestTwoDisplays2x1xVirtualized); +}; + +TEST_F(ScreenWinTestTwoDisplays2x1xVirtualized, GetDisplays) { + std::vector<gfx::Display> displays = GetScreen()->GetAllDisplays(); + ASSERT_EQ(2u, displays.size()); + EXPECT_EQ(gfx::Rect(0, 0, 1600, 800), displays[0].bounds()); + EXPECT_EQ(gfx::Rect(0, 0, 1600, 750), displays[0].work_area()); + EXPECT_EQ(gfx::Rect(3200, 0, 1920, 1200), displays[1].bounds()); + EXPECT_EQ(gfx::Rect(3200, 0, 1920, 1200), displays[1].work_area()); +} + +TEST_F(ScreenWinTestTwoDisplays2x1xVirtualized, GetNumDisplays) { + EXPECT_EQ(2, GetScreen()->GetNumDisplays()); +} + +TEST_F(ScreenWinTestTwoDisplays2x1xVirtualized, + GetDisplayNearestWindowPrimaryDisplay) { + gfx::Screen* screen = GetScreen(); + EXPECT_EQ(screen->GetPrimaryDisplay(), + screen->GetDisplayNearestWindow(nullptr)); +} + +TEST_F(ScreenWinTestTwoDisplays2x1xVirtualized, GetDisplayNearestWindow) { + gfx::Screen* screen = GetScreen(); + const gfx::Display left_display = screen->GetAllDisplays()[0]; + const gfx::Display right_display = screen->GetAllDisplays()[1]; + + gfx::NativeWindow left_window = GetNativeWindowFromHWND(GetLeftFakeHwnd()); + EXPECT_EQ(left_display, screen->GetDisplayNearestWindow(left_window)); + + gfx::NativeWindow right_window = GetNativeWindowFromHWND(GetRightFakeHwnd()); + EXPECT_EQ(right_display, screen->GetDisplayNearestWindow(right_window)); +} + +TEST_F(ScreenWinTestTwoDisplays2x1xVirtualized, GetDisplayNearestPoint) { + gfx::Screen* screen = GetScreen(); + const gfx::Display left_display = screen->GetAllDisplays()[0]; + const gfx::Display right_display = screen->GetAllDisplays()[1]; + + EXPECT_EQ(left_display, screen->GetDisplayNearestPoint(gfx::Point(0, 0))); + EXPECT_EQ(left_display, screen->GetDisplayNearestPoint(gfx::Point(125, 476))); + EXPECT_EQ(left_display, + screen->GetDisplayNearestPoint(gfx::Point(1599, 799))); + + EXPECT_EQ(right_display, screen->GetDisplayNearestPoint(gfx::Point(3200, 0))); + EXPECT_EQ(right_display, + screen->GetDisplayNearestPoint(gfx::Point(4000, 400))); + EXPECT_EQ(right_display, + screen->GetDisplayNearestPoint(gfx::Point(5119, 1199))); +} + +TEST_F(ScreenWinTestTwoDisplays2x1xVirtualized, GetDisplayMatching) { + gfx::Screen* screen = GetScreen(); + const gfx::Display left_display = screen->GetAllDisplays()[0]; + const gfx::Display right_display = screen->GetAllDisplays()[1]; + + EXPECT_EQ(left_display, + screen->GetDisplayMatching(gfx::Rect(0, 0, 100, 100))); + EXPECT_EQ(left_display, + screen->GetDisplayMatching(gfx::Rect(1819, 1099, 100, 100))); + + EXPECT_EQ(right_display, + screen->GetDisplayMatching(gfx::Rect(6400, 0, 100, 100))); + EXPECT_EQ(right_display, + screen->GetDisplayMatching(gfx::Rect(10139, 2299, 100, 100))); +} + +TEST_F(ScreenWinTestTwoDisplays2x1xVirtualized, GetPrimaryDisplay) { + gfx::Screen* screen = GetScreen(); + gfx::Display primary = screen->GetPrimaryDisplay(); + EXPECT_EQ(gfx::Point(0, 0), primary.bounds().origin()); +} + } // namespace gfx
diff --git a/ui/gfx/test/display_util.h b/ui/gfx/test/display_util.h new file mode 100644 index 0000000..842af7fd --- /dev/null +++ b/ui/gfx/test/display_util.h
@@ -0,0 +1,23 @@ +// Copyright 2016 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 UI_GFX_TEST_DISPLAY_UTIL_H_ +#define UI_GFX_TEST_DISPLAY_UTIL_H_ + +#include "ui/gfx/display.h" + +namespace gfx { + +inline bool operator==(const gfx::Display& lhs, const gfx::Display& rhs) { + return lhs.id() == rhs.id() && + lhs.bounds() == rhs.bounds() && + lhs.work_area() == rhs.work_area() && + lhs.device_scale_factor() == rhs.device_scale_factor() && + lhs.rotation() == rhs.rotation() && + lhs.touch_support() == rhs.touch_support(); +} + +} // namespace gfx + +#endif // UI_GFX_TEST_DISPLAY_UTIL_H_
diff --git a/ui/gfx/test/fontconfig_util_linux.cc b/ui/gfx/test/fontconfig_util_linux.cc index 3c62bd1..6f2da0b 100644 --- a/ui/gfx/test/fontconfig_util_linux.cc +++ b/ui/gfx/test/fontconfig_util_linux.cc
@@ -85,7 +85,7 @@ if (!base::PathExists(path)) { LOG(ERROR) << "You are missing " << path.value() << ". Try re-running " << "build/install-build-deps.sh. Also see " - << "http://code.google.com/p/chromium/wiki/LayoutTestsLinux"; + << "https://chromium.googlesource.com/chromium/src/+/master/docs/layout_tests_linux.md"; return false; }
diff --git a/ui/gfx/test/gfx_util.cc b/ui/gfx/test/gfx_util.cc index d8bf5f2a..e2157fe6 100644 --- a/ui/gfx/test/gfx_util.cc +++ b/ui/gfx/test/gfx_util.cc
@@ -8,6 +8,7 @@ #include <sstream> #include <string> +#include "ui/gfx/display.h" #include "ui/gfx/geometry/box_f.h" #include "ui/gfx/geometry/point.h" #include "ui/gfx/geometry/point3_f.h" @@ -95,6 +96,10 @@ *os << box.ToString(); } +void PrintTo(const Display& display, ::std::ostream* os) { + *os << display.ToString(); +} + void PrintTo(const Point& point, ::std::ostream* os) { *os << point.ToString(); }
diff --git a/ui/gfx/vector_icons/upgrade_menu_item.icon b/ui/gfx/vector_icons/upgrade_menu_item.icon new file mode 100644 index 0000000..dcf04ed --- /dev/null +++ b/ui/gfx/vector_icons/upgrade_menu_item.icon
@@ -0,0 +1,16 @@ +// Copyright 2016 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. + +CANVAS_DIMENSIONS, 32, +ROUND_RECT, 2, 2, 28, 28, 4, +MOVE_TO, 12, 24, +R_H_LINE_TO, 8, +R_V_LINE_TO, -6, +R_H_LINE_TO, 4, +LINE_TO, 16, 8, +LINE_TO, 8, 18, +R_H_LINE_TO, 4, +R_V_LINE_TO, 6, +CLOSE, +END
diff --git a/ui/gfx/win/display_info.cc b/ui/gfx/win/display_info.cc new file mode 100644 index 0000000..1a99ed60 --- /dev/null +++ b/ui/gfx/win/display_info.cc
@@ -0,0 +1,60 @@ +// Copyright 2016 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 "ui/gfx/win/display_info.h" + +#include "base/hash.h" +#include "base/strings/utf_string_conversions.h" + +namespace { + +gfx::Display::Rotation GetRotationForDevice(const wchar_t* device_name) { + DEVMODE mode; + ::ZeroMemory(&mode, sizeof(mode)); + mode.dmSize = sizeof(mode); + mode.dmDriverExtra = 0; + if (::EnumDisplaySettings(device_name, ENUM_CURRENT_SETTINGS, &mode)) { + switch (mode.dmDisplayOrientation) { + case DMDO_DEFAULT: + return gfx::Display::ROTATE_0; + case DMDO_90: + return gfx::Display::ROTATE_90; + case DMDO_180: + return gfx::Display::ROTATE_180; + case DMDO_270: + return gfx::Display::ROTATE_270; + default: + NOTREACHED(); + } + } + return gfx::Display::ROTATE_0; +} + +} // namespace + +namespace gfx { +namespace win { + +DisplayInfo::DisplayInfo(const MONITORINFOEX& monitor_info, + float device_scale_factor) + : DisplayInfo(monitor_info, + device_scale_factor, + GetRotationForDevice(monitor_info.szDevice)) {} + +DisplayInfo::DisplayInfo(const MONITORINFOEX& monitor_info, + float device_scale_factor, + gfx::Display::Rotation rotation) + : id_(DeviceIdFromDeviceName(monitor_info.szDevice)), + rotation_(rotation), + screen_rect_(monitor_info.rcMonitor), + screen_work_rect_(monitor_info.rcWork), + device_scale_factor_(device_scale_factor) {} + +// static +int64_t DisplayInfo::DeviceIdFromDeviceName(const wchar_t* device_name) { + return static_cast<int64_t>(base::Hash(base::WideToUTF8(device_name))); +} + +} // namespace win +} // namespace gfx
diff --git a/ui/gfx/win/display_info.h b/ui/gfx/win/display_info.h new file mode 100644 index 0000000..cd972df --- /dev/null +++ b/ui/gfx/win/display_info.h
@@ -0,0 +1,44 @@ +// Copyright 2016 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 UI_GFX_WIN_DISPLAY_INFO_H_ +#define UI_GFX_WIN_DISPLAY_INFO_H_ + +#include <windows.h> +#include <stdint.h> + +#include "ui/gfx/display.h" +#include "ui/gfx/gfx_export.h" + +namespace gfx { +namespace win { + +// Gathers the parameters necessary to create a gfx::win::ScreenWinDisplay. +class GFX_EXPORT DisplayInfo final { + public: + DisplayInfo(const MONITORINFOEX& monitor_info, float device_scale_factor); + DisplayInfo(const MONITORINFOEX& monitor_info, + float device_scale_factor, + gfx::Display::Rotation rotation); + + static int64_t DeviceIdFromDeviceName(const wchar_t* device_name); + + int64_t id() const { return id_; } + gfx::Display::Rotation rotation() const { return rotation_; } + const gfx::Rect& screen_rect() const { return screen_rect_; } + const gfx::Rect& screen_work_rect() const { return screen_work_rect_; } + float device_scale_factor() const { return device_scale_factor_; } + + private: + int64_t id_; + gfx::Display::Rotation rotation_; + gfx::Rect screen_rect_; + gfx::Rect screen_work_rect_; + float device_scale_factor_; +}; + +} // namespace win +} // namespace gfx + +#endif // UI_GFX_WIN_DISPLAY_INFO_H_
diff --git a/ui/gfx/win/screen_win_display.cc b/ui/gfx/win/screen_win_display.cc new file mode 100644 index 0000000..ccef28a --- /dev/null +++ b/ui/gfx/win/screen_win_display.cc
@@ -0,0 +1,38 @@ +// Copyright 2016 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 "ui/gfx/win/screen_win_display.h" + +#include "ui/gfx/win/display_info.h" +#include "ui/gfx/win/dpi.h" + +namespace { + +gfx::Display CreateDisplayFromDisplayInfo( + const gfx::win::DisplayInfo& display_info) { + gfx::Display display(display_info.id()); + gfx::Rect dip_screen_bounds( + gfx::win::ScreenToDIPRect(display_info.screen_rect())); + display.set_bounds(dip_screen_bounds); + display.set_work_area( + gfx::win::ScreenToDIPRect(display_info.screen_work_rect())); + display.SetScaleAndBounds(display_info.device_scale_factor(), + display_info.screen_rect()); + display.set_rotation(display_info.rotation()); + return display; +} + +} // namespace + +namespace gfx { +namespace win { + +ScreenWinDisplay::ScreenWinDisplay() = default; + +ScreenWinDisplay::ScreenWinDisplay(const DisplayInfo& display_info) + : display_(CreateDisplayFromDisplayInfo(display_info)), + pixel_bounds_(display_info.screen_rect()) {} + +} // namespace win +} // namespace gfx
diff --git a/ui/gfx/win/screen_win_display.h b/ui/gfx/win/screen_win_display.h new file mode 100644 index 0000000..07278c3b --- /dev/null +++ b/ui/gfx/win/screen_win_display.h
@@ -0,0 +1,36 @@ +// Copyright 2016 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 UI_GFX_WIN_SCREEN_WIN_DISPLAY_H_ +#define UI_GFX_WIN_SCREEN_WIN_DISPLAY_H_ + +#include <windows.h> + +#include "ui/gfx/display.h" +#include "ui/gfx/geometry/rect.h" + +namespace gfx { +namespace win { + +class DisplayInfo; + +// A display used by gfx::ScreenWin. +// It holds a display and additional parameters used for DPI calculations. +class ScreenWinDisplay final { + public: + ScreenWinDisplay(); + explicit ScreenWinDisplay(const DisplayInfo& display_info); + + const gfx::Display& display() const { return display_; } + const gfx::Rect& pixel_bounds() const { return pixel_bounds_; } + + private: + gfx::Display display_; + gfx::Rect pixel_bounds_; +}; + +} // namespace win +} // namespace gfx + +#endif // UI_GFX_WIN_SCREEN_WIN_DISPLAY_H_
diff --git a/ui/gl/BUILD.gn b/ui/gl/BUILD.gn index 23f90e2..a1c148d7 100644 --- a/ui/gl/BUILD.gn +++ b/ui/gl/BUILD.gn
@@ -34,8 +34,6 @@ "gl_bindings_autogen_gl.h", "gl_bindings_autogen_osmesa.cc", "gl_bindings_autogen_osmesa.h", - "gl_bindings_skia_in_process.cc", - "gl_bindings_skia_in_process.h", "gl_context.cc", "gl_context.h", "gl_context_android.cc", @@ -126,7 +124,6 @@ deps = [ "//base/third_party/dynamic_annotations", - "//skia", ] public_deps = [ "//base",
diff --git a/ui/gl/gl.gyp b/ui/gl/gl.gyp index 5e48625..9dfd8ed 100644 --- a/ui/gl/gl.gyp +++ b/ui/gl/gl.gyp
@@ -47,8 +47,6 @@ 'gl_bindings_autogen_gl.h', 'gl_bindings_autogen_osmesa.cc', 'gl_bindings_autogen_osmesa.h', - 'gl_bindings_skia_in_process.cc', - 'gl_bindings_skia_in_process.h', 'gl_context.cc', 'gl_context.h', 'gl_context_android.cc',
diff --git a/ui/gl/gl_bindings_skia_in_process.cc b/ui/gl/gl_bindings_skia_in_process.cc deleted file mode 100644 index d76bd7a..0000000 --- a/ui/gl/gl_bindings_skia_in_process.cc +++ /dev/null
@@ -1,995 +0,0 @@ -// Copyright (c) 2012 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 "ui/gl/gl_bindings_skia_in_process.h" - -#include "base/logging.h" -#include "third_party/skia/include/gpu/gl/GrGLInterface.h" -#include "ui/gl/gl_bindings.h" -#include "ui/gl/gl_implementation.h" - -namespace { - -extern "C" { -// The following stub functions are required because the glXXX routines exported -// via gl_bindings.h use call-type GL_BINDING_CALL, which on Windows is stdcall. -// Skia has been built such that its GrGLInterface GL pointers are __cdecl. - -GLvoid GR_GL_FUNCTION_TYPE StubGLActiveTexture(GLenum texture) { - glActiveTexture(texture); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLAttachShader(GLuint program, GLuint shader) { - glAttachShader(program, shader); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLBeginQuery(GLenum target, GLuint id) { - glBeginQuery(target, id); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLBindAttribLocation(GLuint program, - GLuint index, - const char* name) { - glBindAttribLocation(program, index, name); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLBindBuffer(GLenum target, GLuint buffer) { - glBindBuffer(target, buffer); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLBindFragDataLocation(GLuint program, - GLuint colorNumber, - const GLchar* name) { - glBindFragDataLocation(program, colorNumber, name); -} - -GLvoid GR_GL_FUNCTION_TYPE -StubGLBindFragDataLocationIndexed(GLuint program, - GLuint colorNumber, - GLuint index, - const GLchar* name) { - glBindFragDataLocationIndexed(program, colorNumber, index, name); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLBindFramebuffer(GLenum target, - GLuint framebuffer) { - glBindFramebufferEXT(target, framebuffer); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLBindRenderbuffer(GLenum target, - GLuint renderbuffer) { - glBindRenderbufferEXT(target, renderbuffer); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLBindTexture(GLenum target, GLuint texture) { - glBindTexture(target, texture); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLBindVertexArray(GLuint array) { - glBindVertexArrayOES(array); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLBlendBarrier() { - glBlendBarrierKHR(); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLBlendColor(GLclampf red, - GLclampf green, - GLclampf blue, - GLclampf alpha) { - glBlendColor(red, green, blue, alpha); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLBlendEquation(GLenum mode) { - glBlendEquation(mode); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLBlendFunc(GLenum sfactor, GLenum dfactor) { - glBlendFunc(sfactor, dfactor); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLBlitFramebuffer(GLint srcX0, - GLint srcY0, - GLint srcX1, - GLint srcY1, - GLint dstX0, - GLint dstY0, - GLint dstX1, - GLint dstY1, - GLbitfield mask, - GLenum filter) { - glBlitFramebufferEXT(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, - mask, filter); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLBufferData(GLenum target, - GLsizeiptr size, - const void* data, - GLenum usage) { - glBufferData(target, size, data, usage); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLBufferSubData(GLenum target, - GLintptr offset, - GLsizeiptr size, - const void* data) { - glBufferSubData(target, offset, size, data); -} - -GLenum GR_GL_FUNCTION_TYPE StubGLCheckFramebufferStatus(GLenum target) { - return glCheckFramebufferStatusEXT(target); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLClear(GLbitfield mask) { - glClear(mask); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLClearColor(GLclampf red, - GLclampf green, - GLclampf blue, - GLclampf alpha) { - glClearColor(red, green, blue, alpha); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLClearStencil(GLint s) { - glClearStencil(s); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLColorMask(GLboolean red, - GLboolean green, - GLboolean blue, - GLboolean alpha) { - glColorMask(red, green, blue, alpha); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLCompileShader(GLuint shader) { - glCompileShader(shader); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLCompressedTexImage2D(GLenum target, - GLint level, - GLenum internalformat, - GLsizei width, - GLsizei height, - GLint border, - GLsizei imageSize, - const void* data) { - glCompressedTexImage2D(target, level, internalformat, width, height, border, - imageSize, data); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLCopyTexSubImage2D(GLenum target, - GLint level, - GLint xoffset, - GLint yoffset, - GLint x, - GLint y, - GLsizei width, - GLsizei height) { - glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); -} - -GLuint GR_GL_FUNCTION_TYPE StubGLCreateProgram(void) { - return glCreateProgram(); -} - -GLuint GR_GL_FUNCTION_TYPE StubGLCreateShader(GLenum type) { - return glCreateShader(type); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLCullFace(GLenum mode) { - glCullFace(mode); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLDeleteBuffers(GLsizei n, - const GLuint* buffers) { - glDeleteBuffersARB(n, buffers); -} - -GLvoid GR_GL_FUNCTION_TYPE -StubGLDeleteFramebuffers(GLsizei n, const GLuint* framebuffers) { - glDeleteFramebuffersEXT(n, framebuffers); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLDeleteQueries(GLsizei n, const GLuint* ids) { - glDeleteQueries(n, ids); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLDeleteProgram(GLuint program) { - glDeleteProgram(program); -} - -GLvoid GR_GL_FUNCTION_TYPE -StubGLDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) { - glDeleteRenderbuffersEXT(n, renderbuffers); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLDeleteShader(GLuint shader) { - glDeleteShader(shader); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLDeleteTextures(GLsizei n, - const GLuint* textures) { - glDeleteTextures(n, textures); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLDeleteVertexArrays(GLsizei n, - const GLuint* arrays) { - glDeleteVertexArraysOES(n, arrays); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLDepthMask(GLboolean flag) { - glDepthMask(flag); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLDisable(GLenum cap) { - glDisable(cap); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLDisableVertexAttribArray(GLuint index) { - glDisableVertexAttribArray(index); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLDiscardFramebuffer(GLenum target, - GLsizei numAttachments, - const GLenum* attachments) { - glDiscardFramebufferEXT(target, numAttachments, attachments); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLDrawArrays(GLenum mode, - GLint first, - GLsizei count) { - glDrawArrays(mode, first, count); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLDrawBuffer(GLenum mode) { - glDrawBuffer(mode); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLDrawBuffers(GLsizei n, const GLenum* bufs) { - glDrawBuffersARB(n, bufs); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLDrawElements(GLenum mode, - GLsizei count, - GLenum type, - const void* indices) { - glDrawElements(mode, count, type, indices); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLEnable(GLenum cap) { - glEnable(cap); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLEnableVertexAttribArray(GLuint index) { - glEnableVertexAttribArray(index); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLEndQuery(GLenum target) { - glEndQuery(target); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLFinish() { - glFinish(); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLFlush() { - glFlush(); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLFlushMappedBufferRange(GLenum target, - GLintptr offset, - GLsizeiptr length) { - glFlushMappedBufferRange(target, offset, length); -} - -GLvoid GR_GL_FUNCTION_TYPE -StubGLFramebufferRenderbuffer(GLenum target, - GLenum attachment, - GLenum renderbuffertarget, - GLuint renderbuffer) { - glFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, - renderbuffer); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLFramebufferTexture2D(GLenum target, - GLenum attachment, - GLenum textarget, - GLuint texture, - GLint level) { - glFramebufferTexture2DEXT(target, attachment, textarget, texture, level); -} - -GLvoid GR_GL_FUNCTION_TYPE -StubGLFramebufferTexture2DMultisample(GLenum target, - GLenum attachment, - GLenum textarget, - GLuint texture, - GLint level, - GLsizei samples) { - glFramebufferTexture2DMultisampleEXT(target, attachment, textarget, texture, - level, samples); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLFrontFace(GLenum mode) { - glFrontFace(mode); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGenBuffers(GLsizei n, GLuint* buffers) { - glGenBuffersARB(n, buffers); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGenFramebuffers(GLsizei n, - GLuint* framebuffers) { - glGenFramebuffersEXT(n, framebuffers); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGenQueries(GLsizei n, GLuint* ids) { - glGenQueries(n, ids); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGenRenderbuffers(GLsizei n, - GLuint* renderbuffers) { - glGenRenderbuffersEXT(n, renderbuffers); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGenTextures(GLsizei n, GLuint* textures) { - glGenTextures(n, textures); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGenVertexArrays(GLsizei n, GLuint* arrays) { - glGenVertexArraysOES(n, arrays); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGenerateMipmap(GLenum target) { - glGenerateMipmapEXT(target); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGetBufferParameteriv(GLenum target, - GLenum pname, - GLint* params) { - glGetBufferParameteriv(target, pname, params); -} - -GLvoid GR_GL_FUNCTION_TYPE -StubGLGetFramebufferAttachmentParameteriv(GLenum target, - GLenum attachment, - GLenum pname, - GLint* params) { - glGetFramebufferAttachmentParameterivEXT(target, attachment, pname, params); -} - -GLenum GR_GL_FUNCTION_TYPE StubGLGetError() { - return glGetError(); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGetIntegerv(GLenum pname, GLint* params) { - glGetIntegerv(pname, params); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGetProgramInfoLog(GLuint program, - GLsizei bufsize, - GLsizei* length, - char* infolog) { - glGetProgramInfoLog(program, bufsize, length, infolog); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGetProgramiv(GLuint program, - GLenum pname, - GLint* params) { - glGetProgramiv(program, pname, params); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGetRenderbufferParameteriv(GLenum target, - GLenum pname, - GLint* params) { - glGetRenderbufferParameterivEXT(target, pname, params); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGetShaderInfoLog(GLuint shader, - GLsizei bufsize, - GLsizei* length, - char* infolog) { - glGetShaderInfoLog(shader, bufsize, length, infolog); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGetShaderiv(GLuint shader, - GLenum pname, - GLint* params) { - glGetShaderiv(shader, pname, params); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGetShaderPrecisionFormat(GLenum shadertype, - GLenum precisiontype, - GLint* range, - GLint* precision) { - glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision); -} - -const GLubyte* GR_GL_FUNCTION_TYPE StubGLGetString(GLenum name) { - return glGetString(name); -} - -const GLubyte* GR_GL_FUNCTION_TYPE StubGLGetStringi(GLenum name, GLuint index) { - return glGetStringi(name, index); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGetQueryiv(GLenum target, - GLenum pname, - GLint* params) { - glGetQueryiv(target, pname, params); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGetQueryObjecti64v(GLuint id, - GLenum pname, - GLint64* params) { - glGetQueryObjecti64v(id, pname, params); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGetQueryObjectiv(GLuint id, - GLenum pname, - GLint* params) { - glGetQueryObjectiv(id, pname, params); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGetQueryObjectui64v(GLuint id, - GLenum pname, - GLuint64* params) { - glGetQueryObjectui64v(id, pname, params); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGetQueryObjectuiv(GLuint id, - GLenum pname, - GLuint* params) { - glGetQueryObjectuiv(id, pname, params); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLGetTexLevelParameteriv(GLenum target, - GLint level, - GLenum pname, - GLint* params) { - glGetTexLevelParameteriv(target, level, pname, params); -} - -GLint GR_GL_FUNCTION_TYPE StubGLGetUniformLocation(GLuint program, - const char* name) { - return glGetUniformLocation(program, name); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLInsertEventMarker(GLsizei length, - const char* marker) { - glInsertEventMarkerEXT(length, marker); -} - -GLvoid GR_GL_FUNCTION_TYPE -StubGLInvalidateFramebuffer(GLenum target, - GLsizei numAttachments, - const GLenum* attachments) { - glInvalidateFramebuffer(target, numAttachments, attachments); -} - -GLvoid GR_GL_FUNCTION_TYPE -StubGLInvalidateSubFramebuffer(GLenum target, - GLsizei numAttachments, - const GLenum* attachments, - GLint x, - GLint y, - GLsizei width, - GLsizei height) { - glInvalidateSubFramebuffer(target, numAttachments, attachments, - x, y, width, height); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLLineWidth(GLfloat width) { - glLineWidth(width); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLLinkProgram(GLuint program) { - glLinkProgram(program); -} - -void* GR_GL_FUNCTION_TYPE StubGLMapBuffer(GLenum target, GLenum access) { - return glMapBuffer(target, access); -} - -void* GR_GL_FUNCTION_TYPE StubGLMapBufferRange(GLenum target, - GLintptr offset, - GLsizeiptr length, - GLbitfield access) { - return glMapBufferRange(target, offset, length, access); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLPixelStorei(GLenum pname, GLint param) { - glPixelStorei(pname, param); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLPopGroupMarker() { - glPopGroupMarkerEXT(); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLPushGroupMarker(GLsizei length, - const char* marker) { - glPushGroupMarkerEXT(length, marker); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLQueryCounter(GLuint id, GLenum target) { - glQueryCounter(id, target); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLReadBuffer(GLenum src) { - glReadBuffer(src); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLReadPixels(GLint x, - GLint y, - GLsizei width, - GLsizei height, - GLenum format, - GLenum type, - void* pixels) { - glReadPixels(x, y, width, height, format, type, pixels); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLRenderbufferStorage(GLenum target, - GLenum internalformat, - GLsizei width, - GLsizei height) { - glRenderbufferStorageEXT(target, internalformat, width, height); -} - -GLvoid GR_GL_FUNCTION_TYPE -StubGLRenderbufferStorageMultisample(GLenum target, - GLsizei samples, - GLenum internalformat, - GLsizei width, - GLsizei height) { - glRenderbufferStorageMultisampleEXT(target, samples, internalformat, width, - height); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLScissor(GLint x, - GLint y, - GLsizei width, - GLsizei height) { - glScissor(x, y, width, height); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLShaderSource(GLuint shader, - GLsizei count, - const char* const* str, - const GLint* length) { - glShaderSource(shader, count, str, length); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLStencilFunc(GLenum func, - GLint ref, - GLuint mask) { - glStencilFunc(func, ref, mask); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLStencilFuncSeparate(GLenum face, - GLenum func, - GLint ref, - GLuint mask) { - glStencilFuncSeparate(face, func, ref, mask); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLStencilMask(GLuint mask) { - glStencilMask(mask); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLStencilMaskSeparate(GLenum face, GLuint mask) { - glStencilMaskSeparate(face, mask); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLStencilOp(GLenum fail, - GLenum zfail, - GLenum zpass) { - glStencilOp(fail, zfail, zpass); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLStencilOpSeparate(GLenum face, - GLenum fail, - GLenum zfail, - GLenum zpass) { - glStencilOpSeparate(face, fail, zfail, zpass); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLTexImage2D(GLenum target, - GLint level, - GLint internalformat, - GLsizei width, - GLsizei height, - GLint border, - GLenum format, - GLenum type, - const void* pixels) { - glTexImage2D(target, level, internalformat, width, height, border, format, - type, pixels); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLTexParameteri(GLenum target, - GLenum pname, - GLint param) { - glTexParameteri(target, pname, param); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLTexParameteriv(GLenum target, - GLenum pname, - const GLint* params) { - glTexParameteriv(target, pname, params); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLTexStorage2D(GLenum target, - GLsizei levels, - GLenum internalFormat, - GLsizei width, - GLsizei height) { - glTexStorage2DEXT(target, levels, internalFormat, width, height); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLTexSubImage2D(GLenum target, - GLint level, - GLint xoffset, - GLint yoffset, - GLsizei width, - GLsizei height, - GLenum format, - GLenum type, - const void* pixels) { - glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, - pixels); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLUniform1f(GLint location, GLfloat v) { - glUniform1f(location, v); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLUniform1i(GLint location, GLint v) { - glUniform1i(location, v); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLUniform1fv(GLint location, - GLsizei count, - const GLfloat* v) { - glUniform1fv(location, count, v); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLUniform1iv(GLint location, - GLsizei count, - const GLint* v) { - glUniform1iv(location, count, v); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLUniform2f(GLint location, - GLfloat v0, - GLfloat v1) { - glUniform2f(location, v0, v1); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLUniform2i(GLint location, GLint v0, GLint v1) { - glUniform2i(location, v0, v1); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLUniform2fv(GLint location, - GLsizei count, - const GLfloat* v) { - glUniform2fv(location, count, v); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLUniform2iv(GLint location, - GLsizei count, - const GLint* v) { - glUniform2iv(location, count, v); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLUniform3f(GLint location, - GLfloat v0, - GLfloat v1, - GLfloat v2) { - glUniform3f(location, v0, v1, v2); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLUniform3i(GLint location, - GLint v0, - GLint v1, - GLint v2) { - glUniform3i(location, v0, v1, v2); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLUniform3fv(GLint location, - GLsizei count, - const GLfloat* v) { - glUniform3fv(location, count, v); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLUniform3iv(GLint location, - GLsizei count, - const GLint* v) { - glUniform3iv(location, count, v); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLUniform4f(GLint location, - GLfloat v0, - GLfloat v1, - GLfloat v2, - GLfloat v3) { - glUniform4f(location, v0, v1, v2, v3); -} - -GLvoid GR_GL_FUNCTION_TYPE -StubGLUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) { - glUniform4i(location, v0, v1, v2, v3); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLUniform4fv(GLint location, - GLsizei count, - const GLfloat* v) { - glUniform4fv(location, count, v); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLUniform4iv(GLint location, - GLsizei count, - const GLint* v) { - glUniform4iv(location, count, v); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLUniformMatrix2fv(GLint location, - GLsizei count, - GLboolean transpose, - const GLfloat* value) { - glUniformMatrix2fv(location, count, transpose, value); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLUniformMatrix3fv(GLint location, - GLsizei count, - GLboolean transpose, - const GLfloat* value) { - glUniformMatrix3fv(location, count, transpose, value); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLUniformMatrix4fv(GLint location, - GLsizei count, - GLboolean transpose, - const GLfloat* value) { - glUniformMatrix4fv(location, count, transpose, value); -} - -GLboolean GR_GL_FUNCTION_TYPE StubGLUnmapBuffer(GLenum target) { - return glUnmapBuffer(target); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLUseProgram(GLuint program) { - glUseProgram(program); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLVertexAttrib1f(GLuint indx, - const GLfloat value) { - glVertexAttrib1f(indx, value); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLVertexAttrib2fv(GLuint indx, - const GLfloat* values) { - glVertexAttrib2fv(indx, values); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLVertexAttrib3fv(GLuint indx, - const GLfloat* values) { - glVertexAttrib3fv(indx, values); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLVertexAttrib4fv(GLuint indx, - const GLfloat* values) { - glVertexAttrib4fv(indx, values); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLVertexAttribPointer(GLuint indx, - GLint size, - GLenum type, - GLboolean normalized, - GLsizei stride, - const void* ptr) { - glVertexAttribPointer(indx, size, type, normalized, stride, ptr); -} - -GLvoid GR_GL_FUNCTION_TYPE StubGLViewport(GLint x, - GLint y, - GLsizei width, - GLsizei height) { - glViewport(x, y, width, height); -} - -GLint GR_GL_FUNCTION_TYPE -StubGLGetProgramResourceLocation(GLuint program, - GLenum programInterface, - const char* name) { - return glGetProgramResourceLocation(program, programInterface, name); -} - -} // extern "C" -} // namespace - -namespace gfx { - -GrGLInterface* CreateInProcessSkiaGLBinding() { - GrGLStandard standard; - switch (gfx::GetGLImplementation()) { - case gfx::kGLImplementationNone: - NOTREACHED(); - return NULL; - case gfx::kGLImplementationDesktopGL: - case gfx::kGLImplementationAppleGL: - standard = kGL_GrGLStandard; - break; - case gfx::kGLImplementationOSMesaGL: - standard = kGL_GrGLStandard; - break; - case gfx::kGLImplementationEGLGLES2: - standard = kGLES_GrGLStandard; - break; - case gfx::kGLImplementationMockGL: - NOTREACHED(); - return NULL; - default: - NOTREACHED(); - return NULL; - } - - GrGLInterface* interface = new GrGLInterface; - interface->fStandard = standard; - interface->fExtensions.init(standard, - StubGLGetString, - StubGLGetStringi, - StubGLGetIntegerv); - - GrGLInterface::Functions* functions = &interface->fFunctions; - functions->fActiveTexture = StubGLActiveTexture; - functions->fAttachShader = StubGLAttachShader; - functions->fBeginQuery = StubGLBeginQuery; - functions->fBindAttribLocation = StubGLBindAttribLocation; - functions->fBindBuffer = StubGLBindBuffer; - functions->fBindFragDataLocation = StubGLBindFragDataLocation; - functions->fBindTexture = StubGLBindTexture; - functions->fBindVertexArray = StubGLBindVertexArray; - functions->fBlendBarrier = StubGLBlendBarrier; - functions->fBlendColor = StubGLBlendColor; - functions->fBlendEquation = StubGLBlendEquation; - functions->fBlendFunc = StubGLBlendFunc; - functions->fBufferData = StubGLBufferData; - functions->fBufferSubData = StubGLBufferSubData; - functions->fClear = StubGLClear; - functions->fClearColor = StubGLClearColor; - functions->fClearStencil = StubGLClearStencil; - functions->fColorMask = StubGLColorMask; - functions->fCompileShader = StubGLCompileShader; - functions->fCompressedTexImage2D = StubGLCompressedTexImage2D; - functions->fCopyTexSubImage2D = StubGLCopyTexSubImage2D; - functions->fCreateProgram = StubGLCreateProgram; - functions->fCreateShader = StubGLCreateShader; - functions->fCullFace = StubGLCullFace; - functions->fDeleteBuffers = StubGLDeleteBuffers; - functions->fDeleteProgram = StubGLDeleteProgram; - functions->fDeleteQueries = StubGLDeleteQueries; - functions->fDeleteShader = StubGLDeleteShader; - functions->fDeleteTextures = StubGLDeleteTextures; - functions->fDeleteVertexArrays = StubGLDeleteVertexArrays; - functions->fDepthMask = StubGLDepthMask; - functions->fDisable = StubGLDisable; - functions->fDisableVertexAttribArray = StubGLDisableVertexAttribArray; - functions->fDiscardFramebuffer = StubGLDiscardFramebuffer; - functions->fDrawArrays = StubGLDrawArrays; - functions->fDrawBuffer = StubGLDrawBuffer; - functions->fDrawBuffers = StubGLDrawBuffers; - functions->fDrawElements = StubGLDrawElements; - functions->fEnable = StubGLEnable; - functions->fEnableVertexAttribArray = StubGLEnableVertexAttribArray; - functions->fEndQuery = StubGLEndQuery; - functions->fFinish = StubGLFinish; - functions->fFlush = StubGLFlush; - functions->fFlushMappedBufferRange = StubGLFlushMappedBufferRange; - functions->fFrontFace = StubGLFrontFace; - functions->fGenBuffers = StubGLGenBuffers; - functions->fGenQueries = StubGLGenQueries; - functions->fGenTextures = StubGLGenTextures; - functions->fGenVertexArrays = StubGLGenVertexArrays; - functions->fGenerateMipmap = StubGLGenerateMipmap; - functions->fGetBufferParameteriv = StubGLGetBufferParameteriv; - functions->fGetError = StubGLGetError; - functions->fGetIntegerv = StubGLGetIntegerv; - functions->fGetQueryiv = StubGLGetQueryiv; - functions->fGetQueryObjecti64v = StubGLGetQueryObjecti64v; - functions->fGetQueryObjectiv = StubGLGetQueryObjectiv; - functions->fGetQueryObjectui64v = StubGLGetQueryObjectui64v; - functions->fGetQueryObjectuiv = StubGLGetQueryObjectuiv; - functions->fGetProgramInfoLog = StubGLGetProgramInfoLog; - functions->fGetProgramiv = StubGLGetProgramiv; - functions->fGetShaderInfoLog = StubGLGetShaderInfoLog; - functions->fGetShaderiv = StubGLGetShaderiv; - functions->fGetShaderPrecisionFormat = StubGLGetShaderPrecisionFormat; - functions->fGetString = StubGLGetString; - functions->fGetStringi = StubGLGetStringi; - functions->fGetTexLevelParameteriv = StubGLGetTexLevelParameteriv; - functions->fGetUniformLocation = StubGLGetUniformLocation; - functions->fInsertEventMarker = StubGLInsertEventMarker; - functions->fInvalidateFramebuffer = StubGLInvalidateFramebuffer; - functions->fInvalidateSubFramebuffer = StubGLInvalidateSubFramebuffer; - functions->fLineWidth = StubGLLineWidth; - functions->fLinkProgram = StubGLLinkProgram; - functions->fMapBufferRange = StubGLMapBufferRange; - functions->fPixelStorei = StubGLPixelStorei; - functions->fPopGroupMarker = StubGLPopGroupMarker; - functions->fPushGroupMarker = StubGLPushGroupMarker; - functions->fQueryCounter = StubGLQueryCounter; - functions->fReadBuffer = StubGLReadBuffer; - functions->fReadPixels = StubGLReadPixels; - functions->fScissor = StubGLScissor; - functions->fShaderSource = StubGLShaderSource; - functions->fStencilFunc = StubGLStencilFunc; - functions->fStencilFuncSeparate = StubGLStencilFuncSeparate; - functions->fStencilMask = StubGLStencilMask; - functions->fStencilMaskSeparate = StubGLStencilMaskSeparate; - functions->fStencilOp = StubGLStencilOp; - functions->fStencilOpSeparate = StubGLStencilOpSeparate; - functions->fTexImage2D = StubGLTexImage2D; - functions->fTexParameteri = StubGLTexParameteri; - functions->fTexParameteriv = StubGLTexParameteriv; - functions->fTexSubImage2D = StubGLTexSubImage2D; - functions->fTexStorage2D = StubGLTexStorage2D; - functions->fUniform1f = StubGLUniform1f; - functions->fUniform1i = StubGLUniform1i; - functions->fUniform1fv = StubGLUniform1fv; - functions->fUniform1iv = StubGLUniform1iv; - functions->fUniform2f = StubGLUniform2f; - functions->fUniform2i = StubGLUniform2i; - functions->fUniform2fv = StubGLUniform2fv; - functions->fUniform2iv = StubGLUniform2iv; - functions->fUniform3f = StubGLUniform3f; - functions->fUniform3i = StubGLUniform3i; - functions->fUniform3fv = StubGLUniform3fv; - functions->fUniform3iv = StubGLUniform3iv; - functions->fUniform4f = StubGLUniform4f; - functions->fUniform4i = StubGLUniform4i; - functions->fUniform4fv = StubGLUniform4fv; - functions->fUniform4iv = StubGLUniform4iv; - functions->fUniformMatrix2fv = StubGLUniformMatrix2fv; - functions->fUniformMatrix3fv = StubGLUniformMatrix3fv; - functions->fUniformMatrix4fv = StubGLUniformMatrix4fv; - functions->fUseProgram = StubGLUseProgram; - functions->fVertexAttrib1f = StubGLVertexAttrib1f; - functions->fVertexAttrib2fv = StubGLVertexAttrib2fv; - functions->fVertexAttrib3fv = StubGLVertexAttrib3fv; - functions->fVertexAttrib4fv = StubGLVertexAttrib4fv; - functions->fVertexAttribPointer = StubGLVertexAttribPointer; - functions->fViewport = StubGLViewport; - functions->fBindFramebuffer = StubGLBindFramebuffer; - functions->fBindRenderbuffer = StubGLBindRenderbuffer; - functions->fCheckFramebufferStatus = StubGLCheckFramebufferStatus; - functions->fDeleteFramebuffers = StubGLDeleteFramebuffers; - functions->fDeleteRenderbuffers = StubGLDeleteRenderbuffers; - functions->fFramebufferRenderbuffer = StubGLFramebufferRenderbuffer; - functions->fFramebufferTexture2D = StubGLFramebufferTexture2D; - functions->fFramebufferTexture2DMultisample = - StubGLFramebufferTexture2DMultisample; - functions->fGenFramebuffers = StubGLGenFramebuffers; - functions->fGenRenderbuffers = StubGLGenRenderbuffers; - functions->fGetFramebufferAttachmentParameteriv = - StubGLGetFramebufferAttachmentParameteriv; - functions->fGetRenderbufferParameteriv = StubGLGetRenderbufferParameteriv; - functions->fRenderbufferStorage = StubGLRenderbufferStorage; - functions->fRenderbufferStorageMultisample = - StubGLRenderbufferStorageMultisample; - functions->fRenderbufferStorageMultisampleES2EXT = - StubGLRenderbufferStorageMultisample; - functions->fBlitFramebuffer = StubGLBlitFramebuffer; - functions->fMapBuffer = StubGLMapBuffer; - functions->fUnmapBuffer = StubGLUnmapBuffer; - functions->fBindFragDataLocationIndexed = - StubGLBindFragDataLocationIndexed; - functions->fGetProgramResourceLocation = StubGLGetProgramResourceLocation; - - return interface; -} - -} // namespace gfx
diff --git a/ui/gl/gl_bindings_skia_in_process.h b/ui/gl/gl_bindings_skia_in_process.h deleted file mode 100644 index 23d54ee..0000000 --- a/ui/gl/gl_bindings_skia_in_process.h +++ /dev/null
@@ -1,20 +0,0 @@ -// Copyright (c) 2012 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 UI_GL_GL_BINDINGS_SKIA_IN_PROCESS_H_ -#define UI_GL_GL_BINDINGS_SKIA_IN_PROCESS_H_ - -#include "ui/gl/gl_export.h" - -struct GrGLInterface; - -namespace gfx { - -// The GPU back-end for skia requires pointers to GL functions. This function -// creates a binding for skia-gpu to the in-process GL -GL_EXPORT GrGLInterface* CreateInProcessSkiaGLBinding(); - -} // namespace gfx - -#endif // UI_GL_GL_BINDINGS_SKIA_IN_PROCESS_H_
diff --git a/ui/gl/gl_surface_egl.cc b/ui/gl/gl_surface_egl.cc index 949256e..3d9f24b 100644 --- a/ui/gl/gl_surface_egl.cc +++ b/ui/gl/gl_surface_egl.cc
@@ -619,7 +619,6 @@ NativeViewGLSurfaceEGL::NativeViewGLSurfaceEGL(EGLNativeWindowType window) : window_(window), size_(1, 1), - alpha_(true), enable_fixed_size_angle_(false), surface_(NULL), supports_post_sub_buffer_(false), @@ -814,10 +813,9 @@ bool NativeViewGLSurfaceEGL::Resize(const gfx::Size& size, float scale_factor, bool has_alpha) { - if (size == GetSize() && has_alpha == alpha_) + if (size == GetSize()) return true; - alpha_ = has_alpha; size_ = size; scoped_ptr<ui::ScopedMakeCurrent> scoped_make_current;
diff --git a/ui/gl/gl_surface_egl.h b/ui/gl/gl_surface_egl.h index 9125b02..25085f4 100644 --- a/ui/gl/gl_surface_egl.h +++ b/ui/gl/gl_surface_egl.h
@@ -120,7 +120,6 @@ EGLNativeWindowType window_; gfx::Size size_; - bool alpha_; bool enable_fixed_size_angle_; void OnSetSwapInterval(int interval) override;
diff --git a/ui/ozone/platform/egltest/ozone_platform_egltest.cc b/ui/ozone/platform/egltest/ozone_platform_egltest.cc index 94012a84..f74e9c4 100644 --- a/ui/ozone/platform/egltest/ozone_platform_egltest.cc +++ b/ui/ozone/platform/egltest/ozone_platform_egltest.cc
@@ -70,8 +70,8 @@ double ratio = std::sqrt(size.GetArea() / touchscreen_size.GetArea()); event->set_location_f(location); - event->set_radius_x(event->pointer_details().radius_x() * ratio); - event->set_radius_y(event->pointer_details().radius_y() * ratio); + event->set_radius_x(event->pointer_details().radius_x * ratio); + event->set_radius_y(event->pointer_details().radius_y * ratio); return; } }
diff --git a/ui/strings/ui_strings.grd b/ui/strings/ui_strings.grd index 5e159dd..303be4dd 100644 --- a/ui/strings/ui_strings.grd +++ b/ui/strings/ui_strings.grd
@@ -9,7 +9,8 @@ <outputs> <!-- TODO add each of your output files. Modify the three below, and add your own for your various languages. See the user's guide - (http://wiki/Main/GritUsersGuide) for more details. + (https://www.chromium.org/developers/tools-we-use-in-chromium/grit/grit-users-guide) + for more details. Note that all output references are relative to the output directory which is specified at build time. --> <output filename="grit/ui_strings.h" type="rc_header">
diff --git a/ui/views/controls/button/menu_button.cc b/ui/views/controls/button/menu_button.cc index 32cfd9c..c7a5338 100644 --- a/ui/views/controls/button/menu_button.cc +++ b/ui/views/controls/button/menu_button.cc
@@ -271,6 +271,13 @@ return false; } +bool MenuButton::AcceleratorPressed(const ui::Accelerator& accelerator) { + // CustomButton::AcceleratorPressed ends up in NotifyClick, which doesn't work + // for menu buttons. + Activate(); + return true; +} + void MenuButton::GetAccessibleState(ui::AXViewState* state) { CustomButton::GetAccessibleState(state); state->role = ui::AX_ROLE_POP_UP_BUTTON;
diff --git a/ui/views/controls/button/menu_button.h b/ui/views/controls/button/menu_button.h index d908db8b..94c209b 100644 --- a/ui/views/controls/button/menu_button.h +++ b/ui/views/controls/button/menu_button.h
@@ -77,6 +77,7 @@ void OnGestureEvent(ui::GestureEvent* event) override; bool OnKeyPressed(const ui::KeyEvent& event) override; bool OnKeyReleased(const ui::KeyEvent& event) override; + bool AcceleratorPressed(const ui::Accelerator& accelerator) override; void GetAccessibleState(ui::AXViewState* state) override; protected:
diff --git a/ui/views/controls/menu/menu_model_adapter.cc b/ui/views/controls/menu/menu_model_adapter.cc index f18d86f..b63f986 100644 --- a/ui/views/controls/menu/menu_model_adapter.cc +++ b/ui/views/controls/menu/menu_model_adapter.cc
@@ -13,9 +13,14 @@ namespace views { MenuModelAdapter::MenuModelAdapter(ui::MenuModel* menu_model) + : MenuModelAdapter(menu_model, base::Closure() /*null callback*/) {} + +MenuModelAdapter::MenuModelAdapter(ui::MenuModel* menu_model, + const base::Closure& on_menu_closed_callback) : menu_model_(menu_model), triggerable_event_flags_(ui::EF_LEFT_MOUSE_BUTTON | - ui::EF_RIGHT_MOUSE_BUTTON) { + ui::EF_RIGHT_MOUSE_BUTTON), + on_menu_closed_callback_(on_menu_closed_callback) { DCHECK(menu_model); } @@ -264,6 +269,12 @@ NOTREACHED(); } +void MenuModelAdapter::OnMenuClosed(MenuItemView* menu, + MenuRunner::RunResult result) { + if (!on_menu_closed_callback_.is_null()) + on_menu_closed_callback_.Run(); +} + // MenuModelAdapter, private: void MenuModelAdapter::BuildMenuImpl(MenuItemView* menu, ui::MenuModel* model) {
diff --git a/ui/views/controls/menu/menu_model_adapter.h b/ui/views/controls/menu/menu_model_adapter.h index ecc4f1e..c9799da 100644 --- a/ui/views/controls/menu/menu_model_adapter.h +++ b/ui/views/controls/menu/menu_model_adapter.h
@@ -7,6 +7,7 @@ #include <map> +#include "base/callback.h" #include "base/macros.h" #include "ui/views/controls/menu/menu_delegate.h" @@ -24,6 +25,8 @@ // The caller retains ownership of the ui::MenuModel instance and // must ensure it exists for the lifetime of the adapter. explicit MenuModelAdapter(ui::MenuModel* menu_model); + MenuModelAdapter(ui::MenuModel* menu_model, + const base::Closure& on_menu_closed_callback); ~MenuModelAdapter() override; // Populate a MenuItemView menu with the ui::MenuModel items @@ -75,6 +78,7 @@ void SelectionChanged(MenuItemView* menu) override; void WillShowMenu(MenuItemView* menu) override; void WillHideMenu(MenuItemView* menu) override; + void OnMenuClosed(MenuItemView* menu, MenuRunner::RunResult result) override; private: // Implementation of BuildMenu(). @@ -91,6 +95,9 @@ // Map MenuItems to MenuModels. Used to implement WillShowMenu(). std::map<MenuItemView*, ui::MenuModel*> menu_map_; + // Optional callback triggered during OnMenuClosed(). + base::Closure on_menu_closed_callback_; + DISALLOW_COPY_AND_ASSIGN(MenuModelAdapter); };
diff --git a/ui/views/mus/BUILD.gn b/ui/views/mus/BUILD.gn index 81ef31f..1ea33d6 100644 --- a/ui/views/mus/BUILD.gn +++ b/ui/views/mus/BUILD.gn
@@ -132,21 +132,24 @@ testonly = true deps = [ - ":views_apptests", + ":views_mus_unittests", ] } -mojo_native_application("views_apptests") { +test("views_mus_unittests") { testonly = true - configs = [ "//build/config:precompiled_headers" ] + configs += [ "//build/config:precompiled_headers" ] # TODO(sky): add more files. sources = [ + "../run_all_unittests.cc", + "../run_all_unittests.h", "../widget/native_widget_unittest.cc", "../widget/root_view_unittest.cc", "../widget/widget_unittest.cc", "platform_test_helper_mus.cc", + "run_all_unittests_mus.cc", ] deps = [ @@ -155,7 +158,9 @@ "//base:i18n", "//base/test:test_support", "//cc", - "//mojo/shell/public/cpp:test_support", + "//mojo/shell/background:lib", + "//mojo/shell/background:main", + "//mojo/shell/public/cpp:sources", "//skia", "//testing/gtest", "//third_party/icu",
diff --git a/ui/views/mus/DEPS b/ui/views/mus/DEPS index 22b8edb4..2c575ed 100644 --- a/ui/views/mus/DEPS +++ b/ui/views/mus/DEPS
@@ -22,3 +22,9 @@ "+ui/platform_window", "+ui/wm", ] + +specific_include_rules = { + "platform_test_helper_mus.cc": [ + "+mojo/shell/background" + ], +}
diff --git a/ui/views/mus/platform_test_helper_mus.cc b/ui/views/mus/platform_test_helper_mus.cc index f5d1df05..f34206e 100644 --- a/ui/views/mus/platform_test_helper_mus.cc +++ b/ui/views/mus/platform_test_helper_mus.cc
@@ -4,45 +4,54 @@ #include "ui/views/test/platform_test_helper.h" -#include "base/path_service.h" -#include "mojo/shell/public/cpp/application_test_base.h" -#include "mojo/shell/public/cpp/shell.h" -#include "ui/aura/env.h" -#include "ui/base/resource/resource_bundle.h" -#include "ui/base/ui_base_paths.h" -#include "ui/gl/test/gl_surface_test_support.h" +#include "base/command_line.h" +#include "mojo/shell/background/background_shell.h" +#include "mojo/shell/public/cpp/shell_client.h" +#include "mojo/shell/public/cpp/shell_connection.h" #include "ui/views/mus/window_manager_connection.h" +#include "url/gurl.h" namespace views { namespace { +class DefaultShellClient : public mojo::ShellClient { + public: + DefaultShellClient() {} + ~DefaultShellClient() override {} + + private: + DISALLOW_COPY_AND_ASSIGN(DefaultShellClient); +}; + class PlatformTestHelperMus : public PlatformTestHelper { public: PlatformTestHelperMus() { - gfx::GLSurfaceTestSupport::InitializeOneOff(); + // Force the new edk. + base::CommandLine::ForCurrentProcess()->AppendSwitch("use-new-edk"); - // TODO(sky): We really shouldn't need to configure ResourceBundle. - ui::RegisterPathProvider(); - base::FilePath ui_test_pak_path; - CHECK(PathService::Get(ui::UI_TEST_PAK, &ui_test_pak_path)); - ui::ResourceBundle::InitSharedInstanceWithPakPath(ui_test_pak_path); - aura::Env::CreateInstance(true); - - mojo_test_helper_.reset(new mojo::test::TestHelper(nullptr)); + background_shell_.reset(new mojo::shell::BackgroundShell); + background_shell_->Init(); + shell_client_.reset(new DefaultShellClient); + shell_connection_.reset(new mojo::ShellConnection( + shell_client_.get(), + background_shell_->CreateShellClientRequest(GURL("mojo://test-app")))); + shell_connection_->WaitForInitialize(); // ui/views/mus requires a WindowManager running, for now use the desktop // one. - mojo_test_helper_->shell()->Connect("mojo:desktop_wm"); - WindowManagerConnection::Create(mojo_test_helper_->shell()); + shell_connection_->Connect("mojo:desktop_wm"); + WindowManagerConnection::Create(shell_connection_.get()); } ~PlatformTestHelperMus() override { - mojo_test_helper_.reset(nullptr); - aura::Env::DeleteInstance(); - ui::ResourceBundle::CleanupSharedInstance(); + WindowManagerConnection::Reset(); + // |app_| has a reference to us, destroy it while we are still valid. + shell_connection_.reset(); } private: - scoped_ptr<mojo::test::TestHelper> mojo_test_helper_; + scoped_ptr<mojo::shell::BackgroundShell> background_shell_; + scoped_ptr<mojo::ShellConnection> shell_connection_; + scoped_ptr<DefaultShellClient> shell_client_; DISALLOW_COPY_AND_ASSIGN(PlatformTestHelperMus); };
diff --git a/ui/views/mus/run_all_unittests_mus.cc b/ui/views/mus/run_all_unittests_mus.cc new file mode 100644 index 0000000..4de8cdb --- /dev/null +++ b/ui/views/mus/run_all_unittests_mus.cc
@@ -0,0 +1,9 @@ +// Copyright 2016 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 "ui/views/run_all_unittests.h" + +int MasterProcessMain(int argc, char** argv) { + return views::RunAllUnittests(argc, argv); +}
diff --git a/ui/views/mus/window_manager_connection.cc b/ui/views/mus/window_manager_connection.cc index 173572dd..9a0e5cfb 100644 --- a/ui/views/mus/window_manager_connection.cc +++ b/ui/views/mus/window_manager_connection.cc
@@ -43,6 +43,12 @@ return connection; } +// static +void WindowManagerConnection::Reset() { + delete Get(); + lazy_tls_ptr.Pointer()->Set(nullptr); +} + mus::Window* WindowManagerConnection::NewWindow( const std::map<std::string, std::vector<uint8_t>>& properties) { return window_tree_connection_->NewTopLevelWindow(&properties);
diff --git a/ui/views/mus/window_manager_connection.h b/ui/views/mus/window_manager_connection.h index 1554b916..ff8eeaf4c 100644 --- a/ui/views/mus/window_manager_connection.h +++ b/ui/views/mus/window_manager_connection.h
@@ -40,6 +40,9 @@ static void Create(mojo::Shell* shell); static WindowManagerConnection* Get(); + // Destroys the singleton instance. + static void Reset(); + mojo::Shell* shell() { return shell_; } mus::Window* NewWindow(const std::map<std::string,
diff --git a/ui/views/run_all_unittests.cc b/ui/views/run_all_unittests.cc index d901231..922343b 100644 --- a/ui/views/run_all_unittests.cc +++ b/ui/views/run_all_unittests.cc
@@ -17,6 +17,8 @@ #include "ui/aura/env.h" #endif +namespace views { + class ViewTestSuite : public base::TestSuite { public: ViewTestSuite(int argc, char** argv) : base::TestSuite(argc, argv) {} @@ -47,10 +49,12 @@ DISALLOW_COPY_AND_ASSIGN(ViewTestSuite); }; -int main(int argc, char** argv) { +int RunAllUnittests(int argc, char** argv) { ViewTestSuite test_suite(argc, argv); return base::LaunchUnitTests( argc, argv, base::Bind(&ViewTestSuite::Run, base::Unretained(&test_suite))); } + +} // namespace views
diff --git a/ui/views/run_all_unittests.h b/ui/views/run_all_unittests.h new file mode 100644 index 0000000..43239f8 --- /dev/null +++ b/ui/views/run_all_unittests.h
@@ -0,0 +1,14 @@ +// Copyright 2016 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 UI_VIEWS_RUN_ALL_UNITTESTS_H_ +#define UI_VIEWS_RUN_ALL_UNITTESTS_H_ + +namespace views { + +int RunAllUnittests(int argc, char** argv); + +} // namespace + +#endif // UI_VIEWS_RUN_ALL_UNITTESTS_H_
diff --git a/ui/views/run_all_unittests_main.cc b/ui/views/run_all_unittests_main.cc new file mode 100644 index 0000000..5b26c76 --- /dev/null +++ b/ui/views/run_all_unittests_main.cc
@@ -0,0 +1,9 @@ +// Copyright 2016 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 "ui/views/run_all_unittests.h" + +int main(int argc, char** argv) { + views::RunAllUnittests(argc, argv); +}
diff --git a/ui/views/views.gyp b/ui/views/views.gyp index 5723d62..7c73c70 100644 --- a/ui/views/views.gyp +++ b/ui/views/views.gyp
@@ -582,6 +582,8 @@ 'layout/grid_layout_unittest.cc', 'rect_based_targeting_utils_unittest.cc', 'run_all_unittests.cc', + 'run_all_unittests.h', + 'run_all_unittests_main.cc', 'style/mac/dialog_button_border_mac_unittest.cc', 'view_model_unittest.cc', 'view_model_utils_unittest.cc', @@ -953,6 +955,8 @@ 'sources': [ 'cocoa/bridged_native_widget_interactive_uitest.mm', 'run_all_unittests.cc', + 'run_all_unittests.h', + 'run_all_unittests_main.cc', 'widget/native_widget_mac_interactive_uitest.mm', ], 'conditions': [
diff --git a/ui/webui/resources/js/cr.js b/ui/webui/resources/js/cr.js index ddf7c87..10ecb7d 100644 --- a/ui/webui/resources/js/cr.js +++ b/ui/webui/resources/js/cr.js
@@ -9,6 +9,9 @@ */ var global = this; +/** @typedef {{eventName: string, uid: number}} */ +var WebUIListener; + /** Platform, package, object property, and Event support. **/ var cr = function() { 'use strict'; @@ -357,11 +360,13 @@ } /** - * A registry of callbacks keyed by event name. Used by addWebUIListener to - * register listeners. - * @type {!Object<Array<Function>>} + * A map of maps associating event names with listeners. The 2nd level map + * associates a listener ID with the callback function, such that individual + * listeners can be removed from an event without affecting other listeners of + * the same event. + * @type {!Object<!Object<!Function>>} */ - var webUIListenerMap = Object.create(null); + var webUIListenerMap = {}; /** * The named method the WebUI handler calls directly when an event occurs. @@ -369,26 +374,52 @@ * of the JS invocation; additionally, the handler may supply any number of * other arguments that will be forwarded to the listener callbacks. * @param {string} event The name of the event that has occurred. + * @param {...*} var_args Additional arguments passed from C++. */ - function webUIListenerCallback(event) { - var listenerCallbacks = webUIListenerMap[event]; - for (var i = 0; i < listenerCallbacks.length; i++) { - var callback = listenerCallbacks[i]; - callback.apply(null, Array.prototype.slice.call(arguments, 1)); + function webUIListenerCallback(event, var_args) { + var eventListenersMap = webUIListenerMap[event]; + if (!eventListenersMap) { + // C++ event sent for an event that has no listeners. + // TODO(dpapad): Should a warning be displayed here? + return; + } + + var args = Array.prototype.slice.call(arguments, 1); + for (var listenerId in eventListenersMap) { + eventListenersMap[listenerId].apply(null, args); } } /** * Registers a listener for an event fired from WebUI handlers. Any number of * listeners may register for a single event. - * @param {string} event The event to listen to. - * @param {Function} callback The callback run when the event is fired. + * @param {string} eventName The event to listen to. + * @param {!Function} callback The callback run when the event is fired. + * @return {!WebUIListener} An object to be used for removing a listener via + * cr.removeWebUIListener. Should be treated as read-only. */ - function addWebUIListener(event, callback) { - if (event in webUIListenerMap) - webUIListenerMap[event].push(callback); - else - webUIListenerMap[event] = [callback]; + function addWebUIListener(eventName, callback) { + webUIListenerMap[eventName] = webUIListenerMap[eventName] || {}; + var uid = createUid(); + webUIListenerMap[eventName][uid] = callback; + return {eventName: eventName, uid: uid}; + } + + /** + * Removes a listener. Does nothing if the specified listener is not found. + * @param {!WebUIListener} listener The listener to be removed (as returned by + * addWebUIListener). + * @return {boolean} Whether the given listener was found and actually + * removed. + */ + function removeWebUIListener(listener) { + var listenerExists = webUIListenerMap[listener.eventName] && + webUIListenerMap[listener.eventName][listener.uid]; + if (listenerExists) { + delete webUIListenerMap[listener.eventName][listener.uid]; + return true; + } + return false; } return { @@ -401,11 +432,14 @@ exportPath: exportPath, getUid: getUid, makePublic: makePublic, - webUIResponse: webUIResponse, + PropertyKind: PropertyKind, + + // C++ <-> JS communication related methods. + addWebUIListener: addWebUIListener, + removeWebUIListener: removeWebUIListener, sendWithPromise: sendWithPromise, webUIListenerCallback: webUIListenerCallback, - addWebUIListener: addWebUIListener, - PropertyKind: PropertyKind, + webUIResponse: webUIResponse, get doc() { return document; @@ -430,5 +464,10 @@ get isLinux() { return /Linux/.test(navigator.userAgent); }, + + /** Whether this is on Android. */ + get isAndroid() { + return /Android/.test(navigator.userAgent); + } }; }();
diff --git a/ui/webui/resources/polymer_resources.grdp b/ui/webui/resources/polymer_resources.grdp index fc89a9d..4f9fb7d0 100644 --- a/ui/webui/resources/polymer_resources.grdp +++ b/ui/webui/resources/polymer_resources.grdp
@@ -209,6 +209,12 @@ <structure name="IDR_POLYMER_1_0_IRON_RESIZABLE_BEHAVIOR_IRON_RESIZABLE_BEHAVIOR_HTML" file="../../../third_party/polymer/v1_0/components-chromium/iron-resizable-behavior/iron-resizable-behavior.html" type="chrome_html" /> + <structure name="IDR_POLYMER_1_0_IRON_SCROLL_TARGET_BEHAVIOR_IRON_SCROLL_TARGET_BEHAVIOR_EXTRACTED_JS" + file="../../../third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/iron-scroll-target-behavior-extracted.js" + type="chrome_html" /> + <structure name="IDR_POLYMER_1_0_IRON_SCROLL_TARGET_BEHAVIOR_IRON_SCROLL_TARGET_BEHAVIOR_HTML" + file="../../../third_party/polymer/v1_0/components-chromium/iron-scroll-target-behavior/iron-scroll-target-behavior.html" + type="chrome_html" /> <structure name="IDR_POLYMER_1_0_IRON_SELECTOR_IRON_MULTI_SELECTABLE_EXTRACTED_JS" file="../../../third_party/polymer/v1_0/components-chromium/iron-selector/iron-multi-selectable-extracted.js" type="chrome_html" /> @@ -287,6 +293,12 @@ <structure name="IDR_POLYMER_1_0_NEON_ANIMATION_ANIMATIONS_SLIDE_DOWN_ANIMATION_HTML" file="../../../third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-down-animation.html" type="chrome_html" /> + <structure name="IDR_POLYMER_1_0_NEON_ANIMATION_ANIMATIONS_SLIDE_FROM_BOTTOM_ANIMATION_EXTRACTED_JS" + file="../../../third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-from-bottom-animation-extracted.js" + type="chrome_html" /> + <structure name="IDR_POLYMER_1_0_NEON_ANIMATION_ANIMATIONS_SLIDE_FROM_BOTTOM_ANIMATION_HTML" + file="../../../third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-from-bottom-animation.html" + type="chrome_html" /> <structure name="IDR_POLYMER_1_0_NEON_ANIMATION_ANIMATIONS_SLIDE_FROM_LEFT_ANIMATION_EXTRACTED_JS" file="../../../third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-from-left-animation-extracted.js" type="chrome_html" /> @@ -299,6 +311,12 @@ <structure name="IDR_POLYMER_1_0_NEON_ANIMATION_ANIMATIONS_SLIDE_FROM_RIGHT_ANIMATION_HTML" file="../../../third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-from-right-animation.html" type="chrome_html" /> + <structure name="IDR_POLYMER_1_0_NEON_ANIMATION_ANIMATIONS_SLIDE_FROM_TOP_ANIMATION_EXTRACTED_JS" + file="../../../third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-from-top-animation-extracted.js" + type="chrome_html" /> + <structure name="IDR_POLYMER_1_0_NEON_ANIMATION_ANIMATIONS_SLIDE_FROM_TOP_ANIMATION_HTML" + file="../../../third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-from-top-animation.html" + type="chrome_html" /> <structure name="IDR_POLYMER_1_0_NEON_ANIMATION_ANIMATIONS_SLIDE_LEFT_ANIMATION_EXTRACTED_JS" file="../../../third_party/polymer/v1_0/components-chromium/neon-animation/animations/slide-left-animation-extracted.js" type="chrome_html" />
diff --git a/ui/wm/core/shadow_unittest.cc b/ui/wm/core/shadow_unittest.cc index eb00d22b..f69095e 100644 --- a/ui/wm/core/shadow_unittest.cc +++ b/ui/wm/core/shadow_unittest.cc
@@ -76,9 +76,6 @@ bool GetLocalizedString(int message_id, base::string16* value) override { return false; } - scoped_ptr<gfx::Font> GetFont(ui::ResourceBundle::FontStyle style) override { - return nullptr; - } int last_resource_id() const { return last_resource_id_; }